From fbfc959f825d327cfec665081110a560f5043f17 Mon Sep 17 00:00:00 2001 From: amammad Date: Sun, 28 May 2023 15:59:08 +0200 Subject: [PATCH 001/430] V1 Bombs --- .../CmdLineFlowSource.qll | 160 ++++++++++ .../DecompressionBombs.qhelp | 33 +++ .../DecompressionBombs.ql | 244 +++++++++++++++ .../example_good.go | 26 ++ .../example_good_2.go | 18 ++ .../DecompressionBombs.expected | 167 +++++++++++ .../DecompressionBombs.qlref | 1 + .../CWE-522-DecompressionBombs/archive_zip.go | 277 ++++++++++++++++++ 8 files changed, 926 insertions(+) create mode 100644 go/ql/src/experimental/CWE-522-DecompressionBombs/CmdLineFlowSource.qll create mode 100644 go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.qhelp create mode 100644 go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql create mode 100644 go/ql/src/experimental/CWE-522-DecompressionBombs/example_good.go create mode 100644 go/ql/src/experimental/CWE-522-DecompressionBombs/example_good_2.go create mode 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected create mode 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.qlref create mode 100755 go/ql/test/experimental/CWE-522-DecompressionBombs/archive_zip.go diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/CmdLineFlowSource.qll b/go/ql/src/experimental/CWE-522-DecompressionBombs/CmdLineFlowSource.qll new file mode 100644 index 00000000000..27892539308 --- /dev/null +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/CmdLineFlowSource.qll @@ -0,0 +1,160 @@ +import go +import DataFlow::PathGraph +import semmle.go.dataflow.Properties +import semmle.go.security.FlowSources + +abstract class CmdLineFlowSource extends DataFlow::Node { } + +/** + * https://cli.urfave.org/v2/examples/flags/ + */ +class UrfaveCmdLineSourceFlags extends CmdLineFlowSource { + UrfaveCmdLineSourceFlags() { + exists(DataFlow::Function f | + f.hasQualifiedName(["github.com/urfave/cli/v2.Context", "github.com/urfave/cli.Context"], + ["String", "StringSlice", "Generic", "Value", "Path"]) + | + this = f.getACall().getResult(0) + ) + } +} + +/** + * https://pkg.go.dev/github.com/urfave/cli + * + * https://pkg.go.dev/github.com/urfave/cli/v2 + * + * ```go + * // e.g. cCtx.Args().Get(0) in following + *app := &cli.App{ + * Action: func(cCtx *cli.Context) error { + * fmt.Printf("Hello %q", cCtx.Args().Get(0)) + * return nil + * }, + * } + * ``` + */ +class UrfaveCmdLineSourceArguments extends CmdLineFlowSource { + UrfaveCmdLineSourceArguments() { + // https://pkg.go.dev/gopkg.in/urfave/cli.v1 + // Args()[i] just for v1 + exists(DataFlow::Function f | f.hasQualifiedName("github.com/urfave/cli.Context", "Args") | + f.getACall().asExpr().getParent().(IndexExpr) = this.asExpr() + ) + or + // Args().Get/First/Tail + exists(DataFlow::Function f | + f.hasQualifiedName(["github.com/urfave/cli/v2.Args", "github.com/urfave/cli.Args"], + ["Get", "First", "Tail", "Slice"]) + | + this = f.getACall() + ) + } +} + +/** + * https://pkg.go.dev/github.com/spf13/cobra + * + * ```go + * // example + * var cmdTimes = &cobra.Command{ + * Use: "times [# times] [string to echo]" + * Run: func(cmd *cobra.Command, args []string) { + * fmt.Println("Echo: " + strings.Join(args, " ")) + * }, + * } + * } + * ``` + */ +class CobraCmdLineSource extends CmdLineFlowSource { + CobraCmdLineSource() { + // following is to restrictive as we must have a function with a constant signiture but + // we can `Run: someFunc(some params)` and then someFunc has the method that we want inside itself + exists(DataFlow::Parameter p, DataFlow::StructLit f, int indexOfRunField | + this.asParameter() = p and + // checking type of a Struct literal + f.getType().hasQualifiedName("github.com/spf13/cobra", "Command") + | + p.getFunction() = f.getValue(indexOfRunField) and + // this is possible to use unsafe sinks in other that "Run" field, all of them have a same function signiture + // Args field has PositionalArgs type which is same as Run function signiture + f.getKey(indexOfRunField).toString() = + [ + "Run", "RunE", "PreRun", "PreRunE", "PostRun", "PostRunE", "PersistentPreRun", + "PersistentPreRunE", "PersistentPostRun", "PersistentPostRunE", "Args" + ] and + f.getValue(indexOfRunField).getAChild().(FuncTypeExpr).getNumParameter() = 2 and + f.getValue(indexOfRunField).getAChild().(FuncTypeExpr).getParameterDecl(1).getType() = + any(SliceType s) and + // checking type of first function parameter of `Run` filed + f.getValue(indexOfRunField) + .getAChildExpr() + .(FuncTypeExpr) + .getParameterDecl(0) + .getAChildExpr() + .(StarExpr) + .getAChildExpr() + .getType() + .hasQualifiedName("github.com/spf13/cobra", "Command") + ) + or + // I don't see much problems with following because if we have some function that + //has two parameters, with checking the types of them we can assume that second + //parameter is our CliFlowSource Node. + exists(DataFlow::Parameter p, DataFlow::FuncTypeExpr fte | p = this.asParameter() | + this.asParameter() = p and + p.getFunction() = fte.getParent() and + fte.getNumParameter() = 2 and + fte.getParameterDecl(1).getType() = any(SliceType s) and + // checking type of first function parameter of `Run` filed + fte.getParameterDecl(0) + .getAChildExpr() + .(StarExpr) + .getAChildExpr() + .getType() + .hasQualifiedName("github.com/spf13/cobra", "Command") + ) + } +} + +class CobraCmdLineSourceFlags extends CmdLineFlowSource { + CobraCmdLineSourceFlags() { + // bind function arguments to variable and set the variable as cli source flow node + exists(DataFlow::CallNode call, DataFlow::DeclaredVariable v | + ( + v.getARead().asExpr() = call.getArgument(0).asExpr() or + v.getARead().asExpr() = call.getArgument(0).asExpr().getAChild().(ReferenceExpr) + ) and + call.getTarget() + .hasQualifiedName("github.com/spf13/pflag.FlagSet", + [ + "StringVar", "StringVarP", "BytesBase64Var", "BytesBase64VarP", "BytesHexVar", + "BytesHexVarP", "StringArrayVar", "StringArrayVarP", "StringSliceVar", + "StringSliceVarP", "StringToStringVar", "StringToStringVarP" + ]) and + ( + this = v.getARead() + or + this.asExpr() = v.getAReference() + ) + ) + or + // set function return value as cli source flow node + exists(DataFlow::CallNode call | + call.getTarget() + .hasQualifiedName("github.com/spf13/pflag.FlagSet", + [ + "String", "BytesBase64", "BytesBase64P", "BytesHex", "BytesHexP", "StringArray", + "StringArrayP", "StringSlice", "StringSliceP", "StringToString", "StringToStringP", + "Arg", "Args", "GetString", "GetStringArray", "GetStrigSlice", "GetStringToString", + "GetBytesHex", "GetBytesBase64", "GetBytesBase64" + ]) and + this = call + ) + // TODO: there is a `func (f *FlagSet) Lookup(name string) *Flag` which seems that need spf13/viper QL model to work + } +} + +private class OsCmdLineSource extends CmdLineFlowSource { + OsCmdLineSource() { this = any(Variable c | c.hasQualifiedName("os", "Args")).getARead() } +} 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 @@ + + + +

Extracting Compressed files with any compression algorithm like gzip can cause to denial of service attacks.

+

Attackers can compress a huge file which created by repeated similiar byte and convert it to a small compressed file.

+ +
+ + +

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.

+ +
+ +

+Using "io.LimitReader" and "io.CopyN" are the best option to prevent decompression bomb attacks. +

+ + + +
+ + +
  • +CVE-2023-26483 +
  • +
  • +A great research to gain more impact by this kind of attacks +
  • + +
    +
    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..7fd4de4b9b8 --- /dev/null +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -0,0 +1,244 @@ +/** + * @name User-controlled file decompression + * @description User-controlled 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 medium + * @id go/user-controlled-file-decompression + * @tags security + * experimental + * external/cwe/cwe-409 + */ + +import go +import DataFlow::PathGraph +import semmle.go.dataflow.Properties +import semmle.go.security.FlowSources +import CmdLineFlowSource + +class DecompressionBombs extends TaintTracking::Configuration { + DecompressionBombs() { this = "DecompressionBombs" } + + override predicate isSource(DataFlow::Node source) { + source instanceof UntrustedFlowSource + or + source instanceof CmdLineFlowSource + } + + override predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { + ( + exists(DataFlow::Function f | f.hasQualifiedName(["io", "bufio"], _) | + sink = f.getACall().getArgument(_) + ) + or + exists(DataFlow::Function f | + f.hasQualifiedName([ + "github.com/klauspost/compress/flate.decompressor", + "github.com/dsnet/compress/bzip2.Reader", "compress/flate.decompressor", + "github.com/dsnet/compress/flate.Reader", "github.com/klauspost/compress/zlib.reader", + "compress/zlib.reader", "github.com/golang/snappy.Reader", + "github.com/klauspost/compress/s2.Reader", "github.com/klauspost/compress/gzip.Reader", + "github.com/klauspost/pgzip.Reader", "github.com/klauspost/compress/zstd.Decoder", + "github.com/DataDog/zstd.reader", "compress/gzip.Reader", + "github.com/ulikunitz/xz.Reader", "archive/tar.Reader", "compress/bzip2.reader" + ], "Read") + | + sink = f.getACall().getReceiver() + ) + or + exists(DataFlow::Function f | + f.hasQualifiedName("github.com/klauspost/compress/s2.Reader", + ["DecodeConcurrent", "ReadByte"]) + or + f.hasQualifiedName("github.com/golang/snappy.Reader", "ReadByte") + or + f.hasQualifiedName("github.com/klauspost/compress/gzip.Reader", "WriteTo") + or + f.hasQualifiedName("github.com/klauspost/pgzip.Reader", "WriteTo") + or + f.hasQualifiedName("github.com/klauspost/compress/zstd.Decoder", ["WriteTo", "DecodeAll"]) + | + sink = f.getACall().getReceiver() + ) + ) and + state = + [ + "ZstdNewReader", "XzNewReader", "GzipNewReader", "S2NewReader", "SnapyNewReader", + "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", "IOMethods", + "ZipKlauspost" + ] + } + + override predicate isAdditionalTaintStep(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(DataFlow::Function f, DataFlow::CallNode call | + f.hasQualifiedName("github.com/klauspost/compress/zip.File", ["Open", "OpenRaw"]) and + call = f.getACall() + | + fromNode = call.getReceiver() and + toNode = call + ) + } + + override predicate isSanitizer(DataFlow::Node node, DataFlow::FlowState state) { + //here I want to the CopyN return value be compared with < or > but I can't reach the tainted result + // exists(DataFlow::Function f | f.hasQualifiedName("io", "CopyN") | + // node = f.getACall().getArgument([0, 1]) and + // TaintTracking::localExprTaint(f.getACall().getResult(_).asExpr(), + // any(RelationalComparisonExpr e).getAChildExpr*()) + // ) + // or + exists(DataFlow::Function f | f.hasQualifiedName("io", "LimitReader") | + node = f.getACall().getArgument(0) and f.getACall().getArgument(1).isConst() + ) and + state = + [ + "ZstdNewReader", "XzNewReader", "GzipNewReader", "S2NewReader", "SnapyNewReader", + "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", "IOMethods", + "ZipKlauspost" + ] + } + + override predicate isAdditionalTaintStep( + DataFlow::Node fromNode, DataFlow::FlowState fromState, DataFlow::Node toNode, + DataFlow::FlowState toState + ) { + exists(DataFlow::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" + ) + or + exists(DataFlow::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" + ) + or + exists(DataFlow::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" + ) + or + exists(DataFlow::Function f, DataFlow::CallNode call | + f.hasQualifiedName([ + "compress/gzip", "github.com/klauspost/compress/gzip", "github.com/klauspost/pgzip" + ], "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "GzipNewReader" + ) + or + exists(DataFlow::Function f, DataFlow::CallNode call | + f.hasQualifiedName([ + "compress/bzip2", "github.com/dsnet/compress/bzip2", "github.com/cosnicolaou/pbzip2" + ], "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "Bzip2NewReader" + ) + or + exists(DataFlow::Function f, DataFlow::CallNode call | + ( + f.hasQualifiedName(["github.com/dsnet/compress/flate"], "NewReader") or + f.hasQualifiedName(["compress/flate", "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" + ) + or + exists(DataFlow::Function f, DataFlow::CallNode call | + f.hasQualifiedName(["compress/zlib", "github.com/klauspost/compress/zlib"], "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "ZlibNewReader" + ) + or + exists(DataFlow::Function f, DataFlow::CallNode call | + f.hasQualifiedName(["github.com/klauspost/compress/zstd", "github.com/DataDog/zstd"], + "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "ZstdNewReader" + ) + or + exists(DataFlow::Function f, DataFlow::CallNode call | + f.hasQualifiedName(["github.com/golang/snappy", "github.com/klauspost/compress/snappy"], + "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "SnapyNewReader" + ) + or + exists(DataFlow::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" + ) + } +} + +// here I want to the CopyN return value be compared with < or > but I can't reach the tainted result +predicate test(DataFlow::Node n2) { any(Test testconfig).hasFlowTo(n2) } + +class Test extends DataFlow::Configuration { + Test() { this = "test" } + + override predicate isSource(DataFlow::Node source) { + exists(DataFlow::Function f | f.hasQualifiedName("io", "CopyN") | + f.getACall().getResult(0) = source + ) + } + + override predicate isSink(DataFlow::Node sink) { sink instanceof DataFlow::Node } +} + +from + DecompressionBombs cfg, DataFlow::PathNode source, DataFlow::PathNode sink, DataFlow::Node request +where + cfg.hasFlowPath(source, sink) and + request = sink.getNode() +select sink.getNode(), source, sink, "This file extraction depends on a $@.", source.getNode(), + "potentially untrusted source" 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..3c5bdb4b22e --- /dev/null +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/example_good.go @@ -0,0 +1,26 @@ +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 { + for { + rc, _ := f.Open() + result, _ := io.CopyN(os.Stdout, rc, 68) + 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/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected new file mode 100644 index 00000000000..379b07920f8 --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -0,0 +1,167 @@ +WARNING: Unused predicate test (/home/am/CodeQL-home/codeql-repo/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql:224,11-15) +WARNING: test is always true, as DataFlowNodes::Public::Node is a supertype of the expression type DataFlowNodes::Public::Node. (/home/am/CodeQL-home/codeql-repo/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql:235,68-82) +WARNING: test is always true, as the expression already has type DataFlowNodes::Public::Node. (/home/am/CodeQL-home/codeql-repo/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql:235,68-82) +edges +| archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:142:22:142:25 | definition of file | +| archive_zip.go:42:15:42:26 | selection of Body | archive_zip.go:120:19:120:22 | definition of file | +| archive_zip.go:44:16:44:44 | call to PostFormValue | archive_zip.go:90:20:90:27 | definition of filename | +| archive_zip.go:45:20:45:48 | call to PostFormValue | archive_zip.go:61:24:61:31 | definition of filename | +| archive_zip.go:61:24:61:31 | definition of filename | archive_zip.go:62:25:62:32 | filename | +| archive_zip.go:62:2:62:33 | ... := ...[0] | archive_zip.go:65:12:65:12 | f | +| archive_zip.go:62:25:62:32 | filename | archive_zip.go:62:2:62:33 | ... := ...[0] | +| archive_zip.go:65:3:65:19 | ... := ...[0] | archive_zip.go:67:37:67:38 | rc | +| archive_zip.go:65:3:65:19 | ... := ...[0] | archive_zip.go:67:37:67:38 | rc | +| archive_zip.go:65:12:65:12 | f | archive_zip.go:65:3:65:19 | ... := ...[0] | +| archive_zip.go:67:4:67:43 | ... := ...[0] | archive_zip.go:67:4:67:9 | definition of result | +| archive_zip.go:67:4:67:43 | ... := ...[0] | archive_zip.go:68:7:68:12 | result | +| archive_zip.go:67:4:67:43 | ... := ...[0] | archive_zip.go:72:30:72:35 | result | +| archive_zip.go:67:37:67:38 | rc | archive_zip.go:67:26:67:34 | selection of Stdout | +| archive_zip.go:90:20:90:27 | definition of filename | archive_zip.go:92:25:92:32 | filename | +| archive_zip.go:92:2:92:33 | ... := ...[0] | archive_zip.go:94:12:94:12 | f | +| archive_zip.go:92:25:92:32 | filename | archive_zip.go:92:2:92:33 | ... := ...[0] | +| archive_zip.go:94:3:94:19 | ... := ...[0] | archive_zip.go:96:37:96:38 | rc | +| archive_zip.go:94:3:94:19 | ... := ...[0] | archive_zip.go:96:37:96:38 | rc | +| archive_zip.go:94:12:94:12 | f | archive_zip.go:94:3:94:19 | ... := ...[0] | +| archive_zip.go:96:4:96:43 | ... := ...[0] | archive_zip.go:96:4:96:9 | definition of result | +| archive_zip.go:96:4:96:43 | ... := ...[0] | archive_zip.go:97:7:97:12 | result | +| archive_zip.go:96:4:96:43 | ... := ...[0] | archive_zip.go:101:14:101:19 | result | +| archive_zip.go:96:37:96:38 | rc | archive_zip.go:96:26:96:34 | selection of Stdout | +| archive_zip.go:109:4:109:43 | ... := ...[0] | archive_zip.go:109:4:109:9 | definition of result | +| archive_zip.go:109:4:109:43 | ... := ...[0] | archive_zip.go:110:7:110:12 | result | +| archive_zip.go:109:4:109:43 | ... := ...[0] | archive_zip.go:114:14:114:19 | result | +| archive_zip.go:120:19:120:22 | definition of file | archive_zip.go:121:25:121:28 | file | +| archive_zip.go:121:2:121:29 | ... := ...[0] | archive_zip.go:122:48:122:52 | file1 | +| archive_zip.go:121:25:121:28 | file | archive_zip.go:121:2:121:29 | ... := ...[0] | +| archive_zip.go:122:2:122:69 | ... := ...[0] | archive_zip.go:125:26:125:29 | file | +| archive_zip.go:122:32:122:53 | call to NewReader | archive_zip.go:122:2:122:69 | ... := ...[0] | +| archive_zip.go:122:48:122:52 | file1 | archive_zip.go:122:32:122:53 | call to NewReader | +| archive_zip.go:124:3:124:12 | definition of fileWriter | archive_zip.go:126:24:126:33 | fileWriter | +| archive_zip.go:125:3:125:36 | ... := ...[0] | archive_zip.go:126:36:126:51 | fileReaderCloser | +| archive_zip.go:125:3:125:36 | ... := ...[0] | archive_zip.go:126:36:126:51 | fileReaderCloser | +| archive_zip.go:125:26:125:29 | file | archive_zip.go:125:3:125:36 | ... := ...[0] | +| archive_zip.go:126:36:126:51 | fileReaderCloser | archive_zip.go:124:3:124:12 | definition of fileWriter | +| archive_zip.go:142:22:142:25 | definition of file | archive_zip.go:151:28:151:31 | file | +| archive_zip.go:142:22:142:25 | definition of file | archive_zip.go:158:28:158:31 | file | +| archive_zip.go:142:22:142:25 | definition of file | archive_zip.go:185:29:185:32 | file | +| archive_zip.go:142:22:142:25 | definition of file | archive_zip.go:217:33:217:36 | file | +| archive_zip.go:151:12:151:32 | call to NewReader | archive_zip.go:153:3:153:7 | Bzip2 | +| archive_zip.go:151:12:151:32 | call to NewReader | archive_zip.go:154:27:154:31 | Bzip2 | +| archive_zip.go:151:28:151:31 | file | archive_zip.go:151:12:151:32 | call to NewReader | +| archive_zip.go:154:13:154:32 | call to NewReader | archive_zip.go:263:2:263:8 | tarRead | +| archive_zip.go:154:13:154:32 | call to NewReader | archive_zip.go:273:25:273:31 | tarRead | +| archive_zip.go:154:27:154:31 | Bzip2 | archive_zip.go:154:13:154:32 | call to NewReader | +| archive_zip.go:158:12:158:32 | call to NewReader | archive_zip.go:160:3:160:7 | Flate | +| archive_zip.go:158:12:158:32 | call to NewReader | archive_zip.go:161:27:161:31 | Flate | +| archive_zip.go:158:28:158:31 | file | archive_zip.go:158:12:158:32 | call to NewReader | +| archive_zip.go:161:13:161:32 | call to NewReader | archive_zip.go:263:2:263:8 | tarRead | +| archive_zip.go:161:13:161:32 | call to NewReader | archive_zip.go:273:25:273:31 | tarRead | +| archive_zip.go:161:27:161:31 | Flate | archive_zip.go:161:13:161:32 | call to NewReader | +| archive_zip.go:185:3:185:33 | ... := ...[0] | archive_zip.go:187:3:187:6 | Zlib | +| archive_zip.go:185:3:185:33 | ... := ...[0] | archive_zip.go:188:27:188:30 | Zlib | +| archive_zip.go:185:29:185:32 | file | archive_zip.go:185:3:185:33 | ... := ...[0] | +| archive_zip.go:188:13:188:31 | call to NewReader | archive_zip.go:263:2:263:8 | tarRead | +| archive_zip.go:188:13:188:31 | call to NewReader | archive_zip.go:273:25:273:31 | tarRead | +| archive_zip.go:188:27:188:30 | Zlib | archive_zip.go:188:13:188:31 | call to NewReader | +| archive_zip.go:217:3:217:37 | ... := ...[0] | archive_zip.go:219:3:219:10 | gzipRead | +| archive_zip.go:217:3:217:37 | ... := ...[0] | archive_zip.go:220:27:220:34 | gzipRead | +| archive_zip.go:217:33:217:36 | file | archive_zip.go:217:3:217:37 | ... := ...[0] | +| archive_zip.go:220:13:220:35 | call to NewReader | archive_zip.go:263:2:263:8 | tarRead | +| archive_zip.go:220:13:220:35 | call to NewReader | archive_zip.go:273:25:273:31 | tarRead | +| archive_zip.go:220:27:220:34 | gzipRead | archive_zip.go:220:13:220:35 | call to NewReader | +nodes +| archive_zip.go:41:18:41:29 | selection of Body | semmle.label | selection of Body | +| archive_zip.go:42:15:42:26 | selection of Body | semmle.label | selection of Body | +| archive_zip.go:44:16:44:44 | call to PostFormValue | semmle.label | call to PostFormValue | +| archive_zip.go:45:20:45:48 | call to PostFormValue | semmle.label | call to PostFormValue | +| archive_zip.go:61:24:61:31 | definition of filename | semmle.label | definition of filename | +| archive_zip.go:62:2:62:33 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:62:25:62:32 | filename | semmle.label | filename | +| archive_zip.go:65:3:65:19 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:65:12:65:12 | f | semmle.label | f | +| archive_zip.go:67:4:67:9 | definition of result | semmle.label | definition of result | +| archive_zip.go:67:4:67:43 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:67:4:67:43 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:67:26:67:34 | selection of Stdout | semmle.label | selection of Stdout | +| archive_zip.go:67:37:67:38 | rc | semmle.label | rc | +| archive_zip.go:67:37:67:38 | rc | semmle.label | rc | +| archive_zip.go:68:7:68:12 | result | semmle.label | result | +| archive_zip.go:72:30:72:35 | result | semmle.label | result | +| archive_zip.go:90:20:90:27 | definition of filename | semmle.label | definition of filename | +| archive_zip.go:92:2:92:33 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:92:25:92:32 | filename | semmle.label | filename | +| archive_zip.go:94:3:94:19 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:94:12:94:12 | f | semmle.label | f | +| archive_zip.go:96:4:96:9 | definition of result | semmle.label | definition of result | +| archive_zip.go:96:4:96:43 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:96:4:96:43 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:96:26:96:34 | selection of Stdout | semmle.label | selection of Stdout | +| archive_zip.go:96:37:96:38 | rc | semmle.label | rc | +| archive_zip.go:96:37:96:38 | rc | semmle.label | rc | +| archive_zip.go:97:7:97:12 | result | semmle.label | result | +| archive_zip.go:101:14:101:19 | result | semmle.label | result | +| archive_zip.go:109:4:109:9 | definition of result | semmle.label | definition of result | +| archive_zip.go:109:4:109:43 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:109:4:109:43 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:110:7:110:12 | result | semmle.label | result | +| archive_zip.go:114:14:114:19 | result | semmle.label | result | +| archive_zip.go:120:19:120:22 | definition of file | semmle.label | definition of file | +| archive_zip.go:121:2:121:29 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:121:25:121:28 | file | semmle.label | file | +| archive_zip.go:122:2:122:69 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:122:32:122:53 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:122:48:122:52 | file1 | semmle.label | file1 | +| archive_zip.go:124:3:124:12 | definition of fileWriter | semmle.label | definition of fileWriter | +| archive_zip.go:125:3:125:36 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:125:26:125:29 | file | semmle.label | file | +| archive_zip.go:126:24:126:33 | fileWriter | semmle.label | fileWriter | +| archive_zip.go:126:36:126:51 | fileReaderCloser | semmle.label | fileReaderCloser | +| archive_zip.go:126:36:126:51 | fileReaderCloser | semmle.label | fileReaderCloser | +| archive_zip.go:142:22:142:25 | definition of file | semmle.label | definition of file | +| archive_zip.go:151:12:151:32 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:151:28:151:31 | file | semmle.label | file | +| archive_zip.go:153:3:153:7 | Bzip2 | semmle.label | Bzip2 | +| archive_zip.go:154:13:154:32 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:154:27:154:31 | Bzip2 | semmle.label | Bzip2 | +| archive_zip.go:158:12:158:32 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:158:28:158:31 | file | semmle.label | file | +| archive_zip.go:160:3:160:7 | Flate | semmle.label | Flate | +| archive_zip.go:161:13:161:32 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:161:27:161:31 | Flate | semmle.label | Flate | +| archive_zip.go:185:3:185:33 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:185:29:185:32 | file | semmle.label | file | +| archive_zip.go:187:3:187:6 | Zlib | semmle.label | Zlib | +| archive_zip.go:188:13:188:31 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:188:27:188:30 | Zlib | semmle.label | Zlib | +| archive_zip.go:217:3:217:37 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:217:33:217:36 | file | semmle.label | file | +| archive_zip.go:219:3:219:10 | gzipRead | semmle.label | gzipRead | +| archive_zip.go:220:13:220:35 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:220:27:220:34 | gzipRead | semmle.label | gzipRead | +| archive_zip.go:263:2:263:8 | tarRead | semmle.label | tarRead | +| archive_zip.go:263:2:263:8 | tarRead | semmle.label | tarRead | +| archive_zip.go:263:2:263:8 | tarRead | semmle.label | tarRead | +| archive_zip.go:263:2:263:8 | tarRead | semmle.label | tarRead | +| archive_zip.go:273:25:273:31 | tarRead | semmle.label | tarRead | +| archive_zip.go:273:25:273:31 | tarRead | semmle.label | tarRead | +| archive_zip.go:273:25:273:31 | tarRead | semmle.label | tarRead | +| archive_zip.go:273:25:273:31 | tarRead | semmle.label | tarRead | +subpaths +#select +| archive_zip.go:67:26:67:34 | selection of Stdout | archive_zip.go:45:20:45:48 | call to PostFormValue | archive_zip.go:67:26:67:34 | selection of Stdout | This file extraction depends on a $@. | archive_zip.go:45:20:45:48 | call to PostFormValue | potentially untrusted source | +| archive_zip.go:67:37:67:38 | rc | archive_zip.go:45:20:45:48 | call to PostFormValue | archive_zip.go:67:37:67:38 | rc | This file extraction depends on a $@. | archive_zip.go:45:20:45:48 | call to PostFormValue | potentially untrusted source | +| archive_zip.go:96:26:96:34 | selection of Stdout | archive_zip.go:44:16:44:44 | call to PostFormValue | archive_zip.go:96:26:96:34 | selection of Stdout | This file extraction depends on a $@. | archive_zip.go:44:16:44:44 | call to PostFormValue | potentially untrusted source | +| archive_zip.go:96:37:96:38 | rc | archive_zip.go:44:16:44:44 | call to PostFormValue | archive_zip.go:96:37:96:38 | rc | This file extraction depends on a $@. | archive_zip.go:44:16:44:44 | call to PostFormValue | potentially untrusted source | +| archive_zip.go:126:24:126:33 | fileWriter | archive_zip.go:42:15:42:26 | selection of Body | archive_zip.go:126:24:126:33 | fileWriter | This file extraction depends on a $@. | archive_zip.go:42:15:42:26 | selection of Body | potentially untrusted source | +| archive_zip.go:126:36:126:51 | fileReaderCloser | archive_zip.go:42:15:42:26 | selection of Body | archive_zip.go:126:36:126:51 | fileReaderCloser | This file extraction depends on a $@. | archive_zip.go:42:15:42:26 | selection of Body | potentially untrusted source | +| archive_zip.go:153:3:153:7 | Bzip2 | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:153:3:153:7 | Bzip2 | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | +| archive_zip.go:160:3:160:7 | Flate | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:160:3:160:7 | Flate | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | +| archive_zip.go:187:3:187:6 | Zlib | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:187:3:187:6 | Zlib | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | +| archive_zip.go:219:3:219:10 | gzipRead | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:219:3:219:10 | gzipRead | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | +| archive_zip.go:263:2:263:8 | tarRead | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:263:2:263:8 | tarRead | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | +| archive_zip.go:263:2:263:8 | tarRead | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:263:2:263:8 | tarRead | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | +| archive_zip.go:263:2:263:8 | tarRead | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:263:2:263:8 | tarRead | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | +| archive_zip.go:263:2:263:8 | tarRead | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:263:2:263:8 | tarRead | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | +| archive_zip.go:273:25:273:31 | tarRead | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:273:25:273:31 | tarRead | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | +| archive_zip.go:273:25:273:31 | tarRead | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:273:25:273:31 | tarRead | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | +| archive_zip.go:273:25:273:31 | tarRead | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:273:25:273:31 | tarRead | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | +| archive_zip.go:273:25:273:31 | tarRead | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:273:25:273:31 | tarRead | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | 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/archive_zip.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/archive_zip.go new file mode 100755 index 00000000000..9c34b6356f3 --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/archive_zip.go @@ -0,0 +1,277 @@ +package main + +import ( + "archive/tar" + "archive/zip" + "bytes" + "compress/bzip2" + "compress/flate" + "compress/gzip" + "compress/zlib" + "fmt" + zstdDataDog "github.com/DataDog/zstd" + 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" + zipKlauspost "github.com/klauspost/compress/zip" + zlibKlauspost "github.com/klauspost/compress/zlib" + zstdKlauspost "github.com/klauspost/compress/zstd" + gzipPgzip "github.com/klauspost/pgzip" + "github.com/ulikunitz/xz" + "io" + "net/http" + "os" + "testing/fstest" +) + +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) { + TarDecompressor(request.Body, "gz") + ZipNewReader(request.Body) + ZipNewReader2(request.Body) + ZipOpenReader(request.PostFormValue("test")) + ZipOpenReaderSafe(request.PostFormValue("test")) + GZipOpenReaderSafe(request.PostFormValue("test")) + GZipsafeReader(request.Body, "dest") +} + +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) + _, _ = 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) + if result == 0 { + _ = rc.Close() + break + } + totalBytes = totalBytes + result + if totalBytes > 1024*1024 { + fmt.Print(totalBytes) + break + } + } + } +} + +func GZipsafeReader(src io.Reader, dst string) { + gzipR, _ := gzip.NewReader(src) + dstF, _ := os.OpenFile(dst, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0755) + defer dstF.Close() + var newSrc io.Reader + newSrc = io.LimitReader(gzipR, 1024*1024*5) + _, _ = io.Copy(dstF, newSrc) +} + +func ZipOpenReader(filename string) { + // Open the zip file + r, _ := zip.OpenReader(filename) + for _, f := range r.File { + rc, _ := f.Open() + for { + result, _ := io.CopyN(os.Stdout, rc, 68) + if result == 0 { + _ = rc.Close() + break + } + fmt.Print(result) + _ = rc.Close() + } + } + rKlauspost, _ := zipKlauspost.OpenReader(filename) + for _, f := range rKlauspost.File { + rc, _ := f.Open() + for { + result, _ := io.CopyN(os.Stdout, rc, 68) + 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) + fmt.Print(result) + } +} + +func ZipNewReader2(file io.Reader) { + file2, _ := io.ReadAll(file) + zipReaderKlauspost, _ := zipKlauspost.NewReader(bytes.NewReader(file2), int64(32<<20)) + for _, file := range zipReaderKlauspost.File { + fileWriter := bytes.NewBuffer([]byte{}) + // file.OpenRaw() + fileReaderCloser, _ := file.Open() + result, _ := io.Copy(fileWriter, fileReaderCloser) + fmt.Print(result) + } +} +func TarDecompressor(file io.Reader, compressionType string) { + var tarRead *tar.Reader + if compressionType == "bzip2Dsnet" { + bzip2dsnet, _ := bzip2Dsnet.NewReader(file, &bzip2Dsnet.ReaderConfig{}) + var out []byte = make([]byte, 70) + bzip2dsnet.Read(out) + tarRead = tar.NewReader(bzip2dsnet) + } + if compressionType == "bzip2" { + Bzip2 := bzip2.NewReader(file) + var out []byte = make([]byte, 70) + Bzip2.Read(out) + tarRead = tar.NewReader(Bzip2) + } + if compressionType == "flate" { + //flate.NewReaderDict() + Flate := flate.NewReader(file) + var out []byte = make([]byte, 70) + Flate.Read(out) + tarRead = tar.NewReader(Flate) + } + if compressionType == "flateKlauspost" { + //flateKlauspost.NewReaderDict() + zlibklauspost := flateKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + zlibklauspost.Read(out) + tarRead = tar.NewReader(zlibklauspost) + } + if compressionType == "flateDsnet" { + flatedsnet, _ := flateDsnet.NewReader(file, &flateDsnet.ReaderConfig{}) + var out []byte = make([]byte, 70) + flatedsnet.Read(out) + tarRead = tar.NewReader(flatedsnet) + } + if compressionType == "zlibKlauspost" { + //zlibKlauspost.NewReaderDict() + zlibklauspost, _ := zlibKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + zlibklauspost.Read(out) + tarRead = tar.NewReader(zlibklauspost) + } + if compressionType == "zlib" { + //zlib.NewReaderDict() + Zlib, _ := zlib.NewReader(file) + var out []byte = make([]byte, 70) + Zlib.Read(out) + tarRead = tar.NewReader(Zlib) + } + if compressionType == "snappy" { + Snappy := snappy.NewReader(file) + var out []byte = make([]byte, 70) + Snappy.Read(out) + Snappy.ReadByte() + tarRead = tar.NewReader(Snappy) + } + if compressionType == "snappyKlauspost" { + snappyklauspost := snappyKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + snappyklauspost.Read(out) + var buf bytes.Buffer + snappyklauspost.DecodeConcurrent(&buf, 2) + snappyklauspost.ReadByte() + tarRead = tar.NewReader(snappyklauspost) + } + if compressionType == "s2" { + S2 := s2.NewReader(file) + var out []byte = make([]byte, 70) + S2.Read(out) + var buf bytes.Buffer + S2.DecodeConcurrent(&buf, 2) + //S2.ReadSeeker() + //S2.ReadByte() + tarRead = tar.NewReader(S2) + } + if compressionType == "gz" { + gzipRead, _ := gzip.NewReader(file) + var out []byte = make([]byte, 70) + gzipRead.Read(out) + tarRead = tar.NewReader(gzipRead) + } + if compressionType == "gzipKlauspost" { + gzipklauspost, _ := gzipKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + gzipklauspost.Read(out) + var buf bytes.Buffer + gzipklauspost.WriteTo(&buf) + tarRead = tar.NewReader(gzipklauspost) + } + if compressionType == "gzipPgzip" { + //gzipPgzip.NewReaderN() + gzippgzip, _ := gzipPgzip.NewReader(file) + var out []byte = make([]byte, 70) + gzippgzip.Read(out) + var buf bytes.Buffer + gzippgzip.WriteTo(&buf) + tarRead = tar.NewReader(gzippgzip) + } + if compressionType == "zstd_Klauspost" { + zstd, _ := zstdKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + zstd.Read(out) + var buf bytes.Buffer + zstd.WriteTo(&buf) + var src []byte + zstd.DecodeAll(src, nil) + tarRead = tar.NewReader(zstd) + } + if compressionType == "zstd_DataDog" { + //zstdDataDog.NewReaderDict() + zstd := zstdDataDog.NewReader(file) + var out []byte = make([]byte, 70) + zstd.Read(out) + tarRead = tar.NewReader(zstd) + } + if compressionType == "xz" { + xzRead, _ := xz.NewReader(file) + var out []byte = make([]byte, 70) + xzRead.Read(out) + tarRead = tar.NewReader(xzRead) + } + var out []byte = make([]byte, 70) + tarRead.Read(out) + files := make(fstest.MapFS) + for { + cur, err := tarRead.Next() + if err == io.EOF { + break + } + if cur.Typeflag != tar.TypeReg { + continue + } + data, _ := io.ReadAll(tarRead) + files[cur.Name] = &fstest.MapFile{Data: data} + } + fmt.Print(files) +} From f1918fb4e04a6ab3228ab4e25f761e743b41ea93 Mon Sep 17 00:00:00 2001 From: amammad Date: Mon, 31 Jul 2023 05:11:09 +1000 Subject: [PATCH 002/430] v1.1 --- .../DecompressionBombs.ql | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index 7fd4de4b9b8..603c770859e 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -20,15 +20,23 @@ import CmdLineFlowSource class DecompressionBombs extends TaintTracking::Configuration { DecompressionBombs() { this = "DecompressionBombs" } - override predicate isSource(DataFlow::Node source) { - source instanceof UntrustedFlowSource - or - source instanceof CmdLineFlowSource + override predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { + ( + source instanceof UntrustedFlowSource + or + source instanceof CmdLineFlowSource + ) and + state = + [ + "ZstdNewReader", "XzNewReader", "GzipNewReader", "S2NewReader", "SnapyNewReader", + "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", "IOMethods", + "ZipKlauspost" + ] } override predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { ( - exists(DataFlow::Function f | f.hasQualifiedName(["io", "bufio"], _) | + exists(DataFlow::Function f | f.hasQualifiedName(["io", "bufio", "io/ioutil"], _) | sink = f.getACall().getArgument(_) ) or From 1b598c8683dfee93bc22d2ea28fc49484ff368fe Mon Sep 17 00:00:00 2001 From: amammad Date: Mon, 31 Jul 2023 19:26:18 +1000 Subject: [PATCH 003/430] v1.2 make better sinks --- .../DecompressionBombs.ql | 116 ++++++++++-------- 1 file changed, 63 insertions(+), 53 deletions(-) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index 603c770859e..6be71b512da 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -20,23 +20,39 @@ import CmdLineFlowSource class DecompressionBombs extends TaintTracking::Configuration { DecompressionBombs() { this = "DecompressionBombs" } - override predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { - ( - source instanceof UntrustedFlowSource - or - source instanceof CmdLineFlowSource - ) and - state = - [ - "ZstdNewReader", "XzNewReader", "GzipNewReader", "S2NewReader", "SnapyNewReader", - "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", "IOMethods", - "ZipKlauspost" - ] + override predicate isSource(DataFlow::Node source) { + source instanceof UntrustedFlowSource + or + source instanceof CmdLineFlowSource } override predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { ( - exists(DataFlow::Function f | f.hasQualifiedName(["io", "bufio", "io/ioutil"], _) | + exists(DataFlow::Function f | f.hasQualifiedName("io", ["Copy", "CopyBuffer", "CopyN"]) | + sink = f.getACall().getArgument(1) + ) + or + exists(DataFlow::Function f | + f.hasQualifiedName("io", ["Pipe", "ReadAll", "ReadAtLeast", "ReadFull"]) + | + sink = f.getACall().getArgument(0) + ) + or + exists(DataFlow::Function f | + f.hasQualifiedName("bufio.Reader", + ["Read", "ReadBytes", "ReadByte", "ReadLine", "ReadRune", "ReadSlice", "ReadString"]) + | + sink = f.getACall().getReceiver() + ) + or + exists(DataFlow::Function f | + f.hasQualifiedName("bufio.Scanner", + ["Text", "Bytes", "ReadByte", "ReadLine", "ReadRune", "ReadSlice", "ReadString"]) + | + sink = f.getACall().getReceiver() + ) + or + exists(DataFlow::Function f | f.hasQualifiedName("ioutil", "ReadAll") | sink = f.getACall().getArgument(_) ) or @@ -73,8 +89,25 @@ class DecompressionBombs extends TaintTracking::Configuration { state = [ "ZstdNewReader", "XzNewReader", "GzipNewReader", "S2NewReader", "SnapyNewReader", - "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", "IOMethods", - "ZipKlauspost" + "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", "ZipKlauspost" + ] + } + + override predicate isSanitizer(DataFlow::Node node, DataFlow::FlowState state) { + //here I want to the CopyN return value be compared with < or > but I can't reach the tainted result + // exists(DataFlow::Function f | f.hasQualifiedName("io", "CopyN") | + // node = f.getACall().getArgument([0, 1]) and + // TaintTracking::localExprTaint(f.getACall().getResult(_).asExpr(), + // any(RelationalComparisonExpr e).getAChildExpr*()) + // ) + // or + exists(DataFlow::Function f | f.hasQualifiedName("io", "LimitReader") | + node = f.getACall().getArgument(0) and f.getACall().getArgument(1).isConst() + ) and + state = + [ + "ZstdNewReader", "XzNewReader", "GzipNewReader", "S2NewReader", "SnapyNewReader", + "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", "ZipKlauspost" ] } @@ -95,25 +128,6 @@ class DecompressionBombs extends TaintTracking::Configuration { ) } - override predicate isSanitizer(DataFlow::Node node, DataFlow::FlowState state) { - //here I want to the CopyN return value be compared with < or > but I can't reach the tainted result - // exists(DataFlow::Function f | f.hasQualifiedName("io", "CopyN") | - // node = f.getACall().getArgument([0, 1]) and - // TaintTracking::localExprTaint(f.getACall().getResult(_).asExpr(), - // any(RelationalComparisonExpr e).getAChildExpr*()) - // ) - // or - exists(DataFlow::Function f | f.hasQualifiedName("io", "LimitReader") | - node = f.getACall().getArgument(0) and f.getACall().getArgument(1).isConst() - ) and - state = - [ - "ZstdNewReader", "XzNewReader", "GzipNewReader", "S2NewReader", "SnapyNewReader", - "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", "IOMethods", - "ZipKlauspost" - ] - } - override predicate isAdditionalTaintStep( DataFlow::Node fromNode, DataFlow::FlowState fromState, DataFlow::Node toNode, DataFlow::FlowState toState @@ -154,8 +168,8 @@ class DecompressionBombs extends TaintTracking::Configuration { | fromNode = call.getArgument(0) and toNode = call.getResult(0) and - fromState = "" and - toState = "GzipNewReader" + fromState = "GzipNewReader" and + toState = "" ) or exists(DataFlow::Function f, DataFlow::CallNode call | @@ -190,8 +204,8 @@ class DecompressionBombs extends TaintTracking::Configuration { | fromNode = call.getArgument(0) and toNode = call.getResult(0) and - fromState = "" and - toState = "ZlibNewReader" + fromState = "ZlibNewReader" and + toState = "" ) or exists(DataFlow::Function f, DataFlow::CallNode call | @@ -228,21 +242,17 @@ class DecompressionBombs extends TaintTracking::Configuration { } } -// here I want to the CopyN return value be compared with < or > but I can't reach the tainted result -predicate test(DataFlow::Node n2) { any(Test testconfig).hasFlowTo(n2) } - -class Test extends DataFlow::Configuration { - Test() { this = "test" } - - override predicate isSource(DataFlow::Node source) { - exists(DataFlow::Function f | f.hasQualifiedName("io", "CopyN") | - f.getACall().getResult(0) = source - ) - } - - override predicate isSink(DataFlow::Node sink) { sink instanceof DataFlow::Node } -} - +// // here I want to the CopyN return value be compared with < or > but I can't reach the tainted result +// predicate test(DataFlow::Node n2) { any(Test testconfig).hasFlowTo(n2) } +// class Test extends DataFlow::Configuration { +// Test() { this = "test" } +// override predicate isSource(DataFlow::Node source) { +// exists(DataFlow::Function f | f.hasQualifiedName("io", "CopyN") | +// f.getACall().getResult(0) = source +// ) +// } +// override predicate isSink(DataFlow::Node sink) { sink instanceof DataFlow::Node } +// } from DecompressionBombs cfg, DataFlow::PathNode source, DataFlow::PathNode sink, DataFlow::Node request where From 260c1119328140996cf6049cee1b7df50499b236 Mon Sep 17 00:00:00 2001 From: amammad Date: Mon, 31 Jul 2023 19:32:22 +1000 Subject: [PATCH 004/430] put comment about detecting https://github.com/advisories/GHSA-jpxj-2jvg-6jv9 --- .../CWE-522-DecompressionBombs/DecompressionBombs.ql | 3 +++ 1 file changed, 3 insertions(+) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index 6be71b512da..940d4611ee0 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -24,6 +24,9 @@ class DecompressionBombs extends TaintTracking::Configuration { source instanceof UntrustedFlowSource or source instanceof CmdLineFlowSource + // uncomment following source to be able to detect https://github.com/advisories/GHSA-jpxj-2jvg-6jv9 + // or + // source.asParameter() = any(Parameter p) } override predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { From 4ee54738fa93b5d843b5f43ddc3a196d22c298b4 Mon Sep 17 00:00:00 2001 From: amammad Date: Mon, 31 Jul 2023 19:36:21 +1000 Subject: [PATCH 005/430] fix a mistake :( --- .../CWE-522-DecompressionBombs/DecompressionBombs.ql | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index 940d4611ee0..64b9be082fd 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -48,10 +48,7 @@ class DecompressionBombs extends TaintTracking::Configuration { sink = f.getACall().getReceiver() ) or - exists(DataFlow::Function f | - f.hasQualifiedName("bufio.Scanner", - ["Text", "Bytes", "ReadByte", "ReadLine", "ReadRune", "ReadSlice", "ReadString"]) - | + exists(DataFlow::Function f | f.hasQualifiedName("bufio.Scanner", ["Text", "Bytes"]) | sink = f.getACall().getReceiver() ) or From 56d0254d2bd2fa1390311da71b268601e235e3a4 Mon Sep 17 00:00:00 2001 From: amammad Date: Mon, 31 Jul 2023 19:37:28 +1000 Subject: [PATCH 006/430] fix ReadAll argumrnt number --- .../CWE-522-DecompressionBombs/DecompressionBombs.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index 64b9be082fd..62a4bbcbdcf 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -53,7 +53,7 @@ class DecompressionBombs extends TaintTracking::Configuration { ) or exists(DataFlow::Function f | f.hasQualifiedName("ioutil", "ReadAll") | - sink = f.getACall().getArgument(_) + sink = f.getACall().getArgument(0) ) or exists(DataFlow::Function f | From 26f1091d5f9f0183859f43fca3ba05a15ab4adbf Mon Sep 17 00:00:00 2001 From: amammad Date: Mon, 31 Jul 2023 19:48:21 +1000 Subject: [PATCH 007/430] fix a mistake :( --- .../CWE-522-DecompressionBombs/DecompressionBombs.ql | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index 62a4bbcbdcf..3d638483540 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -168,8 +168,8 @@ class DecompressionBombs extends TaintTracking::Configuration { | fromNode = call.getArgument(0) and toNode = call.getResult(0) and - fromState = "GzipNewReader" and - toState = "" + fromState = "" and + toState = "GzipNewReader" ) or exists(DataFlow::Function f, DataFlow::CallNode call | @@ -204,8 +204,8 @@ class DecompressionBombs extends TaintTracking::Configuration { | fromNode = call.getArgument(0) and toNode = call.getResult(0) and - fromState = "ZlibNewReader" and - toState = "" + fromState = "" and + toState = "ZlibNewReader" ) or exists(DataFlow::Function f, DataFlow::CallNode call | From ab7e797ffff16e6b311b6215b437ff7f37d35c07 Mon Sep 17 00:00:00 2001 From: amammad Date: Mon, 31 Jul 2023 20:00:59 +1000 Subject: [PATCH 008/430] it seems that I must use both isSink and isSource with flow states! --- .../DecompressionBombs.ql | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index 3d638483540..a3db0b30001 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -20,13 +20,21 @@ import CmdLineFlowSource class DecompressionBombs extends TaintTracking::Configuration { DecompressionBombs() { this = "DecompressionBombs" } - override predicate isSource(DataFlow::Node source) { - source instanceof UntrustedFlowSource - or - source instanceof CmdLineFlowSource - // uncomment following source to be able to detect https://github.com/advisories/GHSA-jpxj-2jvg-6jv9 - // or - // source.asParameter() = any(Parameter p) + override predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { + ( + source instanceof UntrustedFlowSource + or + source instanceof CmdLineFlowSource + // uncomment following source to be able to detect https://github.com/advisories/GHSA-jpxj-2jvg-6jv9 + // or + // source.asParameter() = any(Parameter p) + ) and + state = + [ + "ZstdNewReader", "XzNewReader", "GzipNewReader", "S2NewReader", "SnapyNewReader", + "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", "IOMethods", + "ZipKlauspost" + ] } override predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { From 7ce825c5ea679a75d4728dad7f925e40e75922c5 Mon Sep 17 00:00:00 2001 From: amammad Date: Mon, 31 Jul 2023 22:43:45 +1000 Subject: [PATCH 009/430] convert to module based dataflow --- .../CmdLineFlowSource.qll | 1 - .../DecompressionBombs.ql | 29 +++++++++---------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/CmdLineFlowSource.qll b/go/ql/src/experimental/CWE-522-DecompressionBombs/CmdLineFlowSource.qll index 27892539308..70731cfcddf 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/CmdLineFlowSource.qll +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/CmdLineFlowSource.qll @@ -1,5 +1,4 @@ import go -import DataFlow::PathGraph import semmle.go.dataflow.Properties import semmle.go.security.FlowSources diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index a3db0b30001..31f4ded83b3 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -12,15 +12,14 @@ */ import go -import DataFlow::PathGraph import semmle.go.dataflow.Properties import semmle.go.security.FlowSources import CmdLineFlowSource -class DecompressionBombs extends TaintTracking::Configuration { - DecompressionBombs() { this = "DecompressionBombs" } +module DecompressionBombs implements DataFlow::StateConfigSig { + class FlowState = DataFlow::FlowState; - override predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { + predicate isSource(DataFlow::Node source, FlowState state) { ( source instanceof UntrustedFlowSource or @@ -37,7 +36,7 @@ class DecompressionBombs extends TaintTracking::Configuration { ] } - override predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { + predicate isSink(DataFlow::Node sink, FlowState state) { ( exists(DataFlow::Function f | f.hasQualifiedName("io", ["Copy", "CopyBuffer", "CopyN"]) | sink = f.getACall().getArgument(1) @@ -101,7 +100,7 @@ class DecompressionBombs extends TaintTracking::Configuration { ] } - override predicate isSanitizer(DataFlow::Node node, DataFlow::FlowState state) { + predicate isBarrier(DataFlow::Node node, FlowState state) { //here I want to the CopyN return value be compared with < or > but I can't reach the tainted result // exists(DataFlow::Function f | f.hasQualifiedName("io", "CopyN") | // node = f.getACall().getArgument([0, 1]) and @@ -119,7 +118,7 @@ class DecompressionBombs extends TaintTracking::Configuration { ] } - override predicate isAdditionalTaintStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { exists(DataFlow::FieldReadNode fi | fi.getType().hasQualifiedName("github.com/klauspost/compress/zip", "Reader") | @@ -136,9 +135,8 @@ class DecompressionBombs extends TaintTracking::Configuration { ) } - override predicate isAdditionalTaintStep( - DataFlow::Node fromNode, DataFlow::FlowState fromState, DataFlow::Node toNode, - DataFlow::FlowState toState + predicate isAdditionalFlowStep( + DataFlow::Node fromNode, FlowState fromState, DataFlow::Node toNode, FlowState toState ) { exists(DataFlow::Function f, DataFlow::CallNode call | f.hasQualifiedName("archive/zip", ["OpenReader", "NewReader"]) and call = f.getACall() @@ -261,10 +259,11 @@ class DecompressionBombs extends TaintTracking::Configuration { // } // override predicate isSink(DataFlow::Node sink) { sink instanceof DataFlow::Node } // } -from - DecompressionBombs cfg, DataFlow::PathNode source, DataFlow::PathNode sink, DataFlow::Node request -where - cfg.hasFlowPath(source, sink) and - request = sink.getNode() +module DecompressionBombsFlow = TaintTracking::GlobalWithState; + +import DecompressionBombsFlow::PathGraph + +from DecompressionBombsFlow::PathNode source, DecompressionBombsFlow::PathNode sink +where DecompressionBombsFlow::flowPath(source, sink) select sink.getNode(), source, sink, "This file extraction depends on a $@.", source.getNode(), "potentially untrusted source" From f79bd2a071fbd1e9aae468fbdbca5aeb0e51bf20 Mon Sep 17 00:00:00 2001 From: amammad Date: Sun, 6 Aug 2023 06:49:35 +1000 Subject: [PATCH 010/430] added remote flow sources related to multipart upload, added flag package command line source --- .../CmdLineFlowSource.qll | 23 +++++++++++++++++++ .../MultipartAndFormRemoteSource.qll | 22 ++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/CmdLineFlowSource.qll b/go/ql/src/experimental/CWE-522-DecompressionBombs/CmdLineFlowSource.qll index 70731cfcddf..e313e8e8d9a 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/CmdLineFlowSource.qll +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/CmdLineFlowSource.qll @@ -116,6 +116,29 @@ class CobraCmdLineSource extends CmdLineFlowSource { } } +class CmdLineSourceFlags extends CmdLineFlowSource { + CmdLineSourceFlags() { + // bind function arguments to variable and set the variable as cli source flow node + exists(DataFlow::CallNode call, DataFlow::DeclaredVariable v | + ( + v.getARead().asExpr() = call.getArgument(0).asExpr() or + v.getARead().asExpr() = call.getArgument(0).asExpr().getAChild().(ReferenceExpr) + ) and + call.getTarget().hasQualifiedName(["flag", "flag.FlagSet"], ["StringVar", "TextVar"]) and + ( + this = v.getARead() + or + this.asExpr() = v.getAReference() + ) + ) + or + exists(DataFlow::CallNode call | + call.getTarget().hasQualifiedName(["flag", "flag.FlagSet"], "String") and + this = call + ) + } +} + class CobraCmdLineSourceFlags extends CmdLineFlowSource { CobraCmdLineSourceFlags() { // bind function arguments to variable and set the variable as cli source flow node diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll b/go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll new file mode 100644 index 00000000000..ed4da61a894 --- /dev/null +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll @@ -0,0 +1,22 @@ +import go +import semmle.go.dataflow.Properties +import semmle.go.security.FlowSources + +class MimeMultipartFileHeader extends UntrustedFlowSource::Range { + MimeMultipartFileHeader() { + exists(DataFlow::Variable v | + v.hasQualifiedName("mime/multipart.FileHeader", ["Filename", "Header"]) and + this = v.getARead() + ) + or + exists(DataFlow::Method m | + m.hasQualifiedName("mime/multipart.FileHeader", "Open") and + this = m.getACall() + ) + or + exists(DataFlow::Variable v | + v.hasQualifiedName("mime/multipart.Form", "Value") and + this = v.getARead() + ) + } +} From c76d0d364d9d0333d1ec5ef78f0a3a9e85954825 Mon Sep 17 00:00:00 2001 From: amammad Date: Wed, 6 Sep 2023 03:38:06 +1000 Subject: [PATCH 011/430] fix a mistake ioutil => io/ioutil --- .../CWE-522-DecompressionBombs/DecompressionBombs.ql | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index 31f4ded83b3..75bf8f97522 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -16,6 +16,7 @@ import semmle.go.dataflow.Properties import semmle.go.security.FlowSources import CmdLineFlowSource + module DecompressionBombs implements DataFlow::StateConfigSig { class FlowState = DataFlow::FlowState; @@ -24,9 +25,8 @@ module DecompressionBombs implements DataFlow::StateConfigSig { source instanceof UntrustedFlowSource or source instanceof CmdLineFlowSource - // uncomment following source to be able to detect https://github.com/advisories/GHSA-jpxj-2jvg-6jv9 - // or - // source.asParameter() = any(Parameter p) + or + source.asParameter() = any(Parameter p) ) and state = [ @@ -59,7 +59,7 @@ module DecompressionBombs implements DataFlow::StateConfigSig { sink = f.getACall().getReceiver() ) or - exists(DataFlow::Function f | f.hasQualifiedName("ioutil", "ReadAll") | + exists(DataFlow::Function f | f.hasQualifiedName("io/ioutil", "ReadAll") | sink = f.getACall().getArgument(0) ) or From f6f99fb4591e4142dded9eb93c9f7913fbce1202 Mon Sep 17 00:00:00 2001 From: amammad Date: Thu, 7 Sep 2023 17:47:55 +1000 Subject: [PATCH 012/430] remove parameter as source --- .../CWE-522-DecompressionBombs/DecompressionBombs.ql | 2 -- 1 file changed, 2 deletions(-) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index 75bf8f97522..e61824eaa6f 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -25,8 +25,6 @@ module DecompressionBombs implements DataFlow::StateConfigSig { source instanceof UntrustedFlowSource or source instanceof CmdLineFlowSource - or - source.asParameter() = any(Parameter p) ) and state = [ From 0f540f4c25a1fb9ac76d59538efcfbb05d247d89 Mon Sep 17 00:00:00 2001 From: amammad Date: Thu, 7 Sep 2023 18:25:48 +1000 Subject: [PATCH 013/430] add sources to detect CVE completely --- .../DecompressionBombs.ql | 59 +++++++++++++++++-- 1 file changed, 53 insertions(+), 6 deletions(-) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index e61824eaa6f..3db36a6ca49 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -1,11 +1,11 @@ /** - * @name User-controlled file decompression - * @description User-controlled data that flows into decompression library APIs without checking the compression rate is dangerous + * @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 medium - * @id go/user-controlled-file-decompression + * @id go/uncontrolled-file-decompression * @tags security * experimental * external/cwe/cwe-409 @@ -16,7 +16,6 @@ import semmle.go.dataflow.Properties import semmle.go.security.FlowSources import CmdLineFlowSource - module DecompressionBombs implements DataFlow::StateConfigSig { class FlowState = DataFlow::FlowState; @@ -25,6 +24,8 @@ module DecompressionBombs implements DataFlow::StateConfigSig { source instanceof UntrustedFlowSource or source instanceof CmdLineFlowSource + // or + // exists(Parameter p | p.getARead() = source | p.hasQualifiedName("io", "Reader")) ) and state = [ @@ -32,6 +33,52 @@ module DecompressionBombs implements DataFlow::StateConfigSig { "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", "IOMethods", "ZipKlauspost" ] + or + exists(DataFlow::Function f | + ( + f.hasQualifiedName("archive/zip", ["OpenReader", "NewReader"]) and + state = "" + or + f.hasQualifiedName("github.com/klauspost/compress/zip", ["NewReader", "OpenReader"]) and + state = "ZipKlauspost" + or + f.hasQualifiedName("github.com/ulikunitz/xz", "NewReader") and + state = "XzNewReader" + or + f.hasQualifiedName([ + "compress/gzip", "github.com/klauspost/compress/gzip", "github.com/klauspost/pgzip" + ], "NewReader") and + state = "GzipNewReader" + or + f.hasQualifiedName([ + "compress/bzip2", "github.com/dsnet/compress/bzip2", "github.com/cosnicolaou/pbzip2" + ], "NewReader") and + state = "Bzip2NewReader" + or + f.hasQualifiedName(["github.com/dsnet/compress/flate"], "NewReader") and + state = "FlateNewReader" + or + f.hasQualifiedName(["compress/flate", "github.com/klauspost/compress/flate"], + ["NewReaderDict", "NewReader"]) and + state = "FlateNewReader" + or + f.hasQualifiedName(["compress/zlib", "github.com/klauspost/compress/zlib"], "NewReader") and + state = "ZlibNewReader" + or + f.hasQualifiedName(["github.com/klauspost/compress/zstd", "github.com/DataDog/zstd"], + "NewReader") and + state = "ZstdNewReader" + or + f.hasQualifiedName(["github.com/golang/snappy", "github.com/klauspost/compress/snappy"], + "NewReader") and + state = "SnapyNewReader" + or + f.hasQualifiedName("github.com/klauspost/compress/s2", "NewReader") and + state = "S2NewReader" + ) and + source = f.getACall().getResult(0) and + not TaintTracking::localExprTaint(any(StringLit c), source.asExpr()) + ) } predicate isSink(DataFlow::Node sink, FlowState state) { @@ -263,5 +310,5 @@ import DecompressionBombsFlow::PathGraph from DecompressionBombsFlow::PathNode source, DecompressionBombsFlow::PathNode sink where DecompressionBombsFlow::flowPath(source, sink) -select sink.getNode(), source, sink, "This file extraction depends on a $@.", source.getNode(), - "potentially untrusted source" +select sink.getNode(), source, sink, "This file extraction $@.", source.getNode(), + "decompressing data controlling output size" From 08f78a2df4769b7367a742d03a0eea76b3070fcf Mon Sep 17 00:00:00 2001 From: amammad Date: Fri, 15 Sep 2023 01:56:46 +1000 Subject: [PATCH 014/430] fix some flowstate bug which Had caused to FP --- .../DecompressionBombs.ql | 50 +++++++++---------- 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index 3db36a6ca49..f06769d3b78 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -27,17 +27,12 @@ module DecompressionBombs implements DataFlow::StateConfigSig { // or // exists(Parameter p | p.getARead() = source | p.hasQualifiedName("io", "Reader")) ) and - state = - [ - "ZstdNewReader", "XzNewReader", "GzipNewReader", "S2NewReader", "SnapyNewReader", - "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", "IOMethods", - "ZipKlauspost" - ] + state = "" or exists(DataFlow::Function f | ( f.hasQualifiedName("archive/zip", ["OpenReader", "NewReader"]) and - state = "" + state = "ZipOpenReader" or f.hasQualifiedName("github.com/klauspost/compress/zip", ["NewReader", "OpenReader"]) and state = "ZipKlauspost" @@ -145,24 +140,6 @@ module DecompressionBombs implements DataFlow::StateConfigSig { ] } - predicate isBarrier(DataFlow::Node node, FlowState state) { - //here I want to the CopyN return value be compared with < or > but I can't reach the tainted result - // exists(DataFlow::Function f | f.hasQualifiedName("io", "CopyN") | - // node = f.getACall().getArgument([0, 1]) and - // TaintTracking::localExprTaint(f.getACall().getResult(_).asExpr(), - // any(RelationalComparisonExpr e).getAChildExpr*()) - // ) - // or - exists(DataFlow::Function f | f.hasQualifiedName("io", "LimitReader") | - node = f.getACall().getArgument(0) and f.getACall().getArgument(1).isConst() - ) and - state = - [ - "ZstdNewReader", "XzNewReader", "GzipNewReader", "S2NewReader", "SnapyNewReader", - "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", "ZipKlauspost" - ] - } - predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { exists(DataFlow::FieldReadNode fi | fi.getType().hasQualifiedName("github.com/klauspost/compress/zip", "Reader") @@ -291,6 +268,25 @@ module DecompressionBombs implements DataFlow::StateConfigSig { toState = "S2NewReader" ) } + + predicate isBarrier(DataFlow::Node node, FlowState state) { + // //here I want to the CopyN return value be compared with < or > but I can't reach the tainted result + // // exists(DataFlow::Function f | f.hasQualifiedName("io", "CopyN") | + // // node = f.getACall().getArgument([0, 1]) and + // // TaintTracking::localExprTaint(f.getACall().getResult(_).asExpr(), + // // any(RelationalComparisonExpr e).getAChildExpr*()) + // // ) + // // or + // exists(DataFlow::Function f | f.hasQualifiedName("io", "LimitReader") | + // node = f.getACall().getArgument(0) and f.getACall().getArgument(1).isConst() + // ) and + // state = + // [ + // "ZstdNewReader", "XzNewReader", "GzipNewReader", "S2NewReader", "SnapyNewReader", + // "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", "ZipKlauspost" + // ] + none() + } } // // here I want to the CopyN return value be compared with < or > but I can't reach the tainted result @@ -310,5 +306,5 @@ import DecompressionBombsFlow::PathGraph from DecompressionBombsFlow::PathNode source, DecompressionBombsFlow::PathNode sink where DecompressionBombsFlow::flowPath(source, sink) -select sink.getNode(), source, sink, "This file extraction $@.", source.getNode(), - "decompressing data controlling output size" +select sink.getNode(), source, sink, "This decompression $@.", source.getNode(), + "decompressing compressed data without managing output size" From 5a3a8d781a373eb50d26a4ee6fa196754eaef80b Mon Sep 17 00:00:00 2001 From: amammad Date: Fri, 15 Sep 2023 02:09:40 +1000 Subject: [PATCH 015/430] fix some flowstate bug which Had caused to FP --- .../DecompressionBombs.ql | 40 ++++++++----------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index f06769d3b78..0cc5e921d93 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -31,48 +31,42 @@ module DecompressionBombs implements DataFlow::StateConfigSig { or exists(DataFlow::Function f | ( - f.hasQualifiedName("archive/zip", ["OpenReader", "NewReader"]) and - state = "ZipOpenReader" + f.hasQualifiedName("archive/zip", ["OpenReader", "NewReader"]) or - f.hasQualifiedName("github.com/klauspost/compress/zip", ["NewReader", "OpenReader"]) and - state = "ZipKlauspost" + f.hasQualifiedName("github.com/klauspost/compress/zip", ["NewReader", "OpenReader"]) or - f.hasQualifiedName("github.com/ulikunitz/xz", "NewReader") and - state = "XzNewReader" + f.hasQualifiedName("github.com/ulikunitz/xz", "NewReader") or f.hasQualifiedName([ "compress/gzip", "github.com/klauspost/compress/gzip", "github.com/klauspost/pgzip" - ], "NewReader") and - state = "GzipNewReader" + ], "NewReader") or f.hasQualifiedName([ "compress/bzip2", "github.com/dsnet/compress/bzip2", "github.com/cosnicolaou/pbzip2" - ], "NewReader") and - state = "Bzip2NewReader" + ], "NewReader") or - f.hasQualifiedName(["github.com/dsnet/compress/flate"], "NewReader") and - state = "FlateNewReader" + f.hasQualifiedName(["github.com/dsnet/compress/flate"], "NewReader") or f.hasQualifiedName(["compress/flate", "github.com/klauspost/compress/flate"], - ["NewReaderDict", "NewReader"]) and - state = "FlateNewReader" + ["NewReaderDict", "NewReader"]) or - f.hasQualifiedName(["compress/zlib", "github.com/klauspost/compress/zlib"], "NewReader") and - state = "ZlibNewReader" + f.hasQualifiedName(["compress/zlib", "github.com/klauspost/compress/zlib"], "NewReader") or f.hasQualifiedName(["github.com/klauspost/compress/zstd", "github.com/DataDog/zstd"], - "NewReader") and - state = "ZstdNewReader" + "NewReader") or f.hasQualifiedName(["github.com/golang/snappy", "github.com/klauspost/compress/snappy"], - "NewReader") and - state = "SnapyNewReader" + "NewReader") or - f.hasQualifiedName("github.com/klauspost/compress/s2", "NewReader") and - state = "S2NewReader" + f.hasQualifiedName("github.com/klauspost/compress/s2", "NewReader") ) and source = f.getACall().getResult(0) and - not TaintTracking::localExprTaint(any(StringLit c), source.asExpr()) + not TaintTracking::localExprTaint(any(StringLit c), source.asExpr()) and + state = + [ + "ZstdNewReader", "XzNewReader", "GzipNewReader", "S2NewReader", "SnapyNewReader", + "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", "ZipKlauspost" + ] ) } From e1d5c9d45be0bff07a045fe5a95719056032ac38 Mon Sep 17 00:00:00 2001 From: amammad Date: Fri, 15 Sep 2023 06:32:23 +1000 Subject: [PATCH 016/430] fix grammar mistake --- .../CWE-522-DecompressionBombs/DecompressionBombs.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index 0cc5e921d93..d35899230c6 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -300,5 +300,5 @@ import DecompressionBombsFlow::PathGraph from DecompressionBombsFlow::PathNode source, DecompressionBombsFlow::PathNode sink where DecompressionBombsFlow::flowPath(source, sink) -select sink.getNode(), source, sink, "This decompression $@.", source.getNode(), +select sink.getNode(), source, sink, "This decompression is $@.", source.getNode(), "decompressing compressed data without managing output size" From 2e7529cc70c23a26f4922bedfdc129a5ae7a622c Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Sat, 30 Sep 2023 02:41:47 +1000 Subject: [PATCH 017/430] remove local sources --- .../DecompressionBombs.ql | 44 +------------------ 1 file changed, 1 insertion(+), 43 deletions(-) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index d35899230c6..234f904acf4 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -4,7 +4,7 @@ * @kind path-problem * @problem.severity error * @security-severity 7.8 - * @precision medium + * @precision high * @id go/uncontrolled-file-decompression * @tags security * experimental @@ -24,50 +24,8 @@ module DecompressionBombs implements DataFlow::StateConfigSig { source instanceof UntrustedFlowSource or source instanceof CmdLineFlowSource - // or - // exists(Parameter p | p.getARead() = source | p.hasQualifiedName("io", "Reader")) ) and state = "" - or - exists(DataFlow::Function f | - ( - f.hasQualifiedName("archive/zip", ["OpenReader", "NewReader"]) - or - f.hasQualifiedName("github.com/klauspost/compress/zip", ["NewReader", "OpenReader"]) - or - f.hasQualifiedName("github.com/ulikunitz/xz", "NewReader") - or - f.hasQualifiedName([ - "compress/gzip", "github.com/klauspost/compress/gzip", "github.com/klauspost/pgzip" - ], "NewReader") - or - f.hasQualifiedName([ - "compress/bzip2", "github.com/dsnet/compress/bzip2", "github.com/cosnicolaou/pbzip2" - ], "NewReader") - or - f.hasQualifiedName(["github.com/dsnet/compress/flate"], "NewReader") - or - f.hasQualifiedName(["compress/flate", "github.com/klauspost/compress/flate"], - ["NewReaderDict", "NewReader"]) - or - f.hasQualifiedName(["compress/zlib", "github.com/klauspost/compress/zlib"], "NewReader") - or - f.hasQualifiedName(["github.com/klauspost/compress/zstd", "github.com/DataDog/zstd"], - "NewReader") - or - f.hasQualifiedName(["github.com/golang/snappy", "github.com/klauspost/compress/snappy"], - "NewReader") - or - f.hasQualifiedName("github.com/klauspost/compress/s2", "NewReader") - ) and - source = f.getACall().getResult(0) and - not TaintTracking::localExprTaint(any(StringLit c), source.asExpr()) and - state = - [ - "ZstdNewReader", "XzNewReader", "GzipNewReader", "S2NewReader", "SnapyNewReader", - "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", "ZipKlauspost" - ] - ) } predicate isSink(DataFlow::Node sink, FlowState state) { From 2961b79fb91dbc876673fc6cc238054b4e72f472 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Sat, 30 Sep 2023 03:09:02 +1000 Subject: [PATCH 018/430] add multipart sources --- .../CWE-522-DecompressionBombs/DecompressionBombs.ql | 1 + 1 file changed, 1 insertion(+) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index 234f904acf4..0b1819d90a9 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -15,6 +15,7 @@ import go import semmle.go.dataflow.Properties import semmle.go.security.FlowSources import CmdLineFlowSource +import MultipartAndFormRemoteSource module DecompressionBombs implements DataFlow::StateConfigSig { class FlowState = DataFlow::FlowState; From 9245e1c2a4cb3dd830a48c1c1539f7095bf935f9 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Sun, 1 Oct 2023 00:37:51 +1000 Subject: [PATCH 019/430] remove CLI sources Library file & qldoc warnings --- .../CmdLineFlowSource.qll | 182 ------------------ .../DecompressionBombs.ql | 14 +- 2 files changed, 5 insertions(+), 191 deletions(-) delete mode 100644 go/ql/src/experimental/CWE-522-DecompressionBombs/CmdLineFlowSource.qll diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/CmdLineFlowSource.qll b/go/ql/src/experimental/CWE-522-DecompressionBombs/CmdLineFlowSource.qll deleted file mode 100644 index e313e8e8d9a..00000000000 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/CmdLineFlowSource.qll +++ /dev/null @@ -1,182 +0,0 @@ -import go -import semmle.go.dataflow.Properties -import semmle.go.security.FlowSources - -abstract class CmdLineFlowSource extends DataFlow::Node { } - -/** - * https://cli.urfave.org/v2/examples/flags/ - */ -class UrfaveCmdLineSourceFlags extends CmdLineFlowSource { - UrfaveCmdLineSourceFlags() { - exists(DataFlow::Function f | - f.hasQualifiedName(["github.com/urfave/cli/v2.Context", "github.com/urfave/cli.Context"], - ["String", "StringSlice", "Generic", "Value", "Path"]) - | - this = f.getACall().getResult(0) - ) - } -} - -/** - * https://pkg.go.dev/github.com/urfave/cli - * - * https://pkg.go.dev/github.com/urfave/cli/v2 - * - * ```go - * // e.g. cCtx.Args().Get(0) in following - *app := &cli.App{ - * Action: func(cCtx *cli.Context) error { - * fmt.Printf("Hello %q", cCtx.Args().Get(0)) - * return nil - * }, - * } - * ``` - */ -class UrfaveCmdLineSourceArguments extends CmdLineFlowSource { - UrfaveCmdLineSourceArguments() { - // https://pkg.go.dev/gopkg.in/urfave/cli.v1 - // Args()[i] just for v1 - exists(DataFlow::Function f | f.hasQualifiedName("github.com/urfave/cli.Context", "Args") | - f.getACall().asExpr().getParent().(IndexExpr) = this.asExpr() - ) - or - // Args().Get/First/Tail - exists(DataFlow::Function f | - f.hasQualifiedName(["github.com/urfave/cli/v2.Args", "github.com/urfave/cli.Args"], - ["Get", "First", "Tail", "Slice"]) - | - this = f.getACall() - ) - } -} - -/** - * https://pkg.go.dev/github.com/spf13/cobra - * - * ```go - * // example - * var cmdTimes = &cobra.Command{ - * Use: "times [# times] [string to echo]" - * Run: func(cmd *cobra.Command, args []string) { - * fmt.Println("Echo: " + strings.Join(args, " ")) - * }, - * } - * } - * ``` - */ -class CobraCmdLineSource extends CmdLineFlowSource { - CobraCmdLineSource() { - // following is to restrictive as we must have a function with a constant signiture but - // we can `Run: someFunc(some params)` and then someFunc has the method that we want inside itself - exists(DataFlow::Parameter p, DataFlow::StructLit f, int indexOfRunField | - this.asParameter() = p and - // checking type of a Struct literal - f.getType().hasQualifiedName("github.com/spf13/cobra", "Command") - | - p.getFunction() = f.getValue(indexOfRunField) and - // this is possible to use unsafe sinks in other that "Run" field, all of them have a same function signiture - // Args field has PositionalArgs type which is same as Run function signiture - f.getKey(indexOfRunField).toString() = - [ - "Run", "RunE", "PreRun", "PreRunE", "PostRun", "PostRunE", "PersistentPreRun", - "PersistentPreRunE", "PersistentPostRun", "PersistentPostRunE", "Args" - ] and - f.getValue(indexOfRunField).getAChild().(FuncTypeExpr).getNumParameter() = 2 and - f.getValue(indexOfRunField).getAChild().(FuncTypeExpr).getParameterDecl(1).getType() = - any(SliceType s) and - // checking type of first function parameter of `Run` filed - f.getValue(indexOfRunField) - .getAChildExpr() - .(FuncTypeExpr) - .getParameterDecl(0) - .getAChildExpr() - .(StarExpr) - .getAChildExpr() - .getType() - .hasQualifiedName("github.com/spf13/cobra", "Command") - ) - or - // I don't see much problems with following because if we have some function that - //has two parameters, with checking the types of them we can assume that second - //parameter is our CliFlowSource Node. - exists(DataFlow::Parameter p, DataFlow::FuncTypeExpr fte | p = this.asParameter() | - this.asParameter() = p and - p.getFunction() = fte.getParent() and - fte.getNumParameter() = 2 and - fte.getParameterDecl(1).getType() = any(SliceType s) and - // checking type of first function parameter of `Run` filed - fte.getParameterDecl(0) - .getAChildExpr() - .(StarExpr) - .getAChildExpr() - .getType() - .hasQualifiedName("github.com/spf13/cobra", "Command") - ) - } -} - -class CmdLineSourceFlags extends CmdLineFlowSource { - CmdLineSourceFlags() { - // bind function arguments to variable and set the variable as cli source flow node - exists(DataFlow::CallNode call, DataFlow::DeclaredVariable v | - ( - v.getARead().asExpr() = call.getArgument(0).asExpr() or - v.getARead().asExpr() = call.getArgument(0).asExpr().getAChild().(ReferenceExpr) - ) and - call.getTarget().hasQualifiedName(["flag", "flag.FlagSet"], ["StringVar", "TextVar"]) and - ( - this = v.getARead() - or - this.asExpr() = v.getAReference() - ) - ) - or - exists(DataFlow::CallNode call | - call.getTarget().hasQualifiedName(["flag", "flag.FlagSet"], "String") and - this = call - ) - } -} - -class CobraCmdLineSourceFlags extends CmdLineFlowSource { - CobraCmdLineSourceFlags() { - // bind function arguments to variable and set the variable as cli source flow node - exists(DataFlow::CallNode call, DataFlow::DeclaredVariable v | - ( - v.getARead().asExpr() = call.getArgument(0).asExpr() or - v.getARead().asExpr() = call.getArgument(0).asExpr().getAChild().(ReferenceExpr) - ) and - call.getTarget() - .hasQualifiedName("github.com/spf13/pflag.FlagSet", - [ - "StringVar", "StringVarP", "BytesBase64Var", "BytesBase64VarP", "BytesHexVar", - "BytesHexVarP", "StringArrayVar", "StringArrayVarP", "StringSliceVar", - "StringSliceVarP", "StringToStringVar", "StringToStringVarP" - ]) and - ( - this = v.getARead() - or - this.asExpr() = v.getAReference() - ) - ) - or - // set function return value as cli source flow node - exists(DataFlow::CallNode call | - call.getTarget() - .hasQualifiedName("github.com/spf13/pflag.FlagSet", - [ - "String", "BytesBase64", "BytesBase64P", "BytesHex", "BytesHexP", "StringArray", - "StringArrayP", "StringSlice", "StringSliceP", "StringToString", "StringToStringP", - "Arg", "Args", "GetString", "GetStringArray", "GetStrigSlice", "GetStringToString", - "GetBytesHex", "GetBytesBase64", "GetBytesBase64" - ]) and - this = call - ) - // TODO: there is a `func (f *FlagSet) Lookup(name string) *Flag` which seems that need spf13/viper QL model to work - } -} - -private class OsCmdLineSource extends CmdLineFlowSource { - OsCmdLineSource() { this = any(Variable c | c.hasQualifiedName("os", "Args")).getARead() } -} diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index 0b1819d90a9..358f55fd9cf 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -13,19 +13,15 @@ import go import semmle.go.dataflow.Properties -import semmle.go.security.FlowSources -import CmdLineFlowSource import MultipartAndFormRemoteSource -module DecompressionBombs implements DataFlow::StateConfigSig { +module DecompressionBombsConfig implements DataFlow::StateConfigSig { class FlowState = DataFlow::FlowState; predicate isSource(DataFlow::Node source, FlowState state) { - ( + source instanceof UntrustedFlowSource - or - source instanceof CmdLineFlowSource - ) and + and state = "" } @@ -167,7 +163,7 @@ module DecompressionBombs implements DataFlow::StateConfigSig { or exists(DataFlow::Function f, DataFlow::CallNode call | ( - f.hasQualifiedName(["github.com/dsnet/compress/flate"], "NewReader") or + f.hasQualifiedName("github.com/dsnet/compress/flate", "NewReader") or f.hasQualifiedName(["compress/flate", "github.com/klauspost/compress/flate"], ["NewReaderDict", "NewReader"]) ) and @@ -253,7 +249,7 @@ module DecompressionBombs implements DataFlow::StateConfigSig { // } // override predicate isSink(DataFlow::Node sink) { sink instanceof DataFlow::Node } // } -module DecompressionBombsFlow = TaintTracking::GlobalWithState; +module DecompressionBombsFlow = TaintTracking::GlobalWithState; import DecompressionBombsFlow::PathGraph From d99c0a238243142e04226003d757d40e073f678a Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Sun, 1 Oct 2023 02:25:38 +1000 Subject: [PATCH 020/430] update tests --- .../DecompressionBombs.ql | 50 +- .../MultipartAndFormRemoteSource.qll | 1 - .../DecompressionBombs.expected | 565 +++++++++++++----- .../CWE-522-DecompressionBombs/archive_zip.go | 43 +- .../CWE-522-DecompressionBombs/test.go | 300 ++++++++++ go/vendor/github.com/DataDog/zstd/stub.go | 16 + .../github.com/dsnet/compress/bzip2/stub.go | 35 ++ .../github.com/dsnet/compress/flate/stub.go | 35 ++ go/vendor/github.com/golang/snappy/stub.go | 28 + .../klauspost/compress/flate/stub.go | 16 + .../klauspost/compress/gzip/stub.go | 47 ++ .../github.com/klauspost/compress/s2/stub.go | 92 +++ .../klauspost/compress/snappy/stub.go | 16 + .../github.com/klauspost/compress/zip/stub.go | 117 ++++ .../klauspost/compress/zlib/stub.go | 16 + .../klauspost/compress/zstd/stub.go | 42 ++ go/vendor/github.com/klauspost/pgzip/stub.go | 47 ++ go/vendor/github.com/ulikunitz/xz/stub.go | 45 ++ go/vendor/modules.txt | 33 +- 19 files changed, 1321 insertions(+), 223 deletions(-) mode change 100755 => 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/archive_zip.go create mode 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/test.go create mode 100644 go/vendor/github.com/DataDog/zstd/stub.go create mode 100644 go/vendor/github.com/dsnet/compress/bzip2/stub.go create mode 100644 go/vendor/github.com/dsnet/compress/flate/stub.go create mode 100644 go/vendor/github.com/golang/snappy/stub.go create mode 100644 go/vendor/github.com/klauspost/compress/flate/stub.go create mode 100644 go/vendor/github.com/klauspost/compress/gzip/stub.go create mode 100644 go/vendor/github.com/klauspost/compress/s2/stub.go create mode 100644 go/vendor/github.com/klauspost/compress/snappy/stub.go create mode 100644 go/vendor/github.com/klauspost/compress/zip/stub.go create mode 100644 go/vendor/github.com/klauspost/compress/zlib/stub.go create mode 100644 go/vendor/github.com/klauspost/compress/zstd/stub.go create mode 100644 go/vendor/github.com/klauspost/pgzip/stub.go create mode 100644 go/vendor/github.com/ulikunitz/xz/stub.go diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index 358f55fd9cf..58608440e01 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -19,40 +19,36 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { class FlowState = DataFlow::FlowState; predicate isSource(DataFlow::Node source, FlowState state) { - - source instanceof UntrustedFlowSource - and + source instanceof UntrustedFlowSource and state = "" } predicate isSink(DataFlow::Node sink, FlowState state) { ( - exists(DataFlow::Function f | f.hasQualifiedName("io", ["Copy", "CopyBuffer", "CopyN"]) | + exists(Function f | f.hasQualifiedName("io", ["Copy", "CopyBuffer", "CopyN"]) | sink = f.getACall().getArgument(1) ) or - exists(DataFlow::Function f | - f.hasQualifiedName("io", ["Pipe", "ReadAll", "ReadAtLeast", "ReadFull"]) - | + exists(Function f | f.hasQualifiedName("io", ["Pipe", "ReadAll", "ReadAtLeast", "ReadFull"]) | sink = f.getACall().getArgument(0) ) or - exists(DataFlow::Function f | + exists(Function f | f.hasQualifiedName("bufio.Reader", ["Read", "ReadBytes", "ReadByte", "ReadLine", "ReadRune", "ReadSlice", "ReadString"]) | sink = f.getACall().getReceiver() ) or - exists(DataFlow::Function f | f.hasQualifiedName("bufio.Scanner", ["Text", "Bytes"]) | + exists(Function f | f.hasQualifiedName("bufio.Scanner", ["Text", "Bytes"]) | sink = f.getACall().getReceiver() ) or - exists(DataFlow::Function f | f.hasQualifiedName("io/ioutil", "ReadAll") | + exists(Function f | f.hasQualifiedName("io/ioutil", "ReadAll") | sink = f.getACall().getArgument(0) ) or - exists(DataFlow::Function f | + exists(Function f | f.hasQualifiedName([ "github.com/klauspost/compress/flate.decompressor", "github.com/dsnet/compress/bzip2.Reader", "compress/flate.decompressor", @@ -67,7 +63,7 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { sink = f.getACall().getReceiver() ) or - exists(DataFlow::Function f | + exists(Function f | f.hasQualifiedName("github.com/klauspost/compress/s2.Reader", ["DecodeConcurrent", "ReadByte"]) or @@ -97,8 +93,8 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { toNode = fi ) or - exists(DataFlow::Function f, DataFlow::CallNode call | - f.hasQualifiedName("github.com/klauspost/compress/zip.File", ["Open", "OpenRaw"]) and + exists(Method f, DataFlow::CallNode call | + f.hasQualifiedName("github.com/klauspost/compress/zip", "File", ["Open", "OpenRaw"]) and call = f.getACall() | fromNode = call.getReceiver() and @@ -109,7 +105,7 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { predicate isAdditionalFlowStep( DataFlow::Node fromNode, FlowState fromState, DataFlow::Node toNode, FlowState toState ) { - exists(DataFlow::Function f, DataFlow::CallNode call | + exists(Function f, DataFlow::CallNode call | f.hasQualifiedName("archive/zip", ["OpenReader", "NewReader"]) and call = f.getACall() | fromNode = call.getArgument(0) and @@ -118,7 +114,7 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { toState = "ZipOpenReader" ) or - exists(DataFlow::Function f, DataFlow::CallNode call | + exists(Function f, DataFlow::CallNode call | f.hasQualifiedName("github.com/klauspost/compress/zip", ["NewReader", "OpenReader"]) and call = f.getACall() | @@ -128,7 +124,7 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { toState = "ZipKlauspost" ) or - exists(DataFlow::Function f, DataFlow::CallNode call | + exists(Function f, DataFlow::CallNode call | f.hasQualifiedName("github.com/ulikunitz/xz", "NewReader") and call = f.getACall() | fromNode = call.getArgument(0) and @@ -137,7 +133,7 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { toState = "XzNewReader" ) or - exists(DataFlow::Function f, DataFlow::CallNode call | + exists(Function f, DataFlow::CallNode call | f.hasQualifiedName([ "compress/gzip", "github.com/klauspost/compress/gzip", "github.com/klauspost/pgzip" ], "NewReader") and @@ -149,7 +145,7 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { toState = "GzipNewReader" ) or - exists(DataFlow::Function f, DataFlow::CallNode call | + exists(Function f, DataFlow::CallNode call | f.hasQualifiedName([ "compress/bzip2", "github.com/dsnet/compress/bzip2", "github.com/cosnicolaou/pbzip2" ], "NewReader") and @@ -161,7 +157,7 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { toState = "Bzip2NewReader" ) or - exists(DataFlow::Function f, DataFlow::CallNode call | + exists(Function f, DataFlow::CallNode call | ( f.hasQualifiedName("github.com/dsnet/compress/flate", "NewReader") or f.hasQualifiedName(["compress/flate", "github.com/klauspost/compress/flate"], @@ -175,7 +171,7 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { toState = "FlateNewReader" ) or - exists(DataFlow::Function f, DataFlow::CallNode call | + exists(Function f, DataFlow::CallNode call | f.hasQualifiedName(["compress/zlib", "github.com/klauspost/compress/zlib"], "NewReader") and call = f.getACall() | @@ -185,7 +181,7 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { toState = "ZlibNewReader" ) or - exists(DataFlow::Function f, DataFlow::CallNode call | + exists(Function f, DataFlow::CallNode call | f.hasQualifiedName(["github.com/klauspost/compress/zstd", "github.com/DataDog/zstd"], "NewReader") and call = f.getACall() @@ -196,7 +192,7 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { toState = "ZstdNewReader" ) or - exists(DataFlow::Function f, DataFlow::CallNode call | + exists(Function f, DataFlow::CallNode call | f.hasQualifiedName(["github.com/golang/snappy", "github.com/klauspost/compress/snappy"], "NewReader") and call = f.getACall() @@ -207,7 +203,7 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { toState = "SnapyNewReader" ) or - exists(DataFlow::Function f, DataFlow::CallNode call | + exists(Function f, DataFlow::CallNode call | f.hasQualifiedName("github.com/klauspost/compress/s2", "NewReader") and call = f.getACall() | @@ -220,13 +216,13 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { predicate isBarrier(DataFlow::Node node, FlowState state) { // //here I want to the CopyN return value be compared with < or > but I can't reach the tainted result - // // exists(DataFlow::Function f | f.hasQualifiedName("io", "CopyN") | + // // exists(Function f | f.hasQualifiedName("io", "CopyN") | // // node = f.getACall().getArgument([0, 1]) and // // TaintTracking::localExprTaint(f.getACall().getResult(_).asExpr(), // // any(RelationalComparisonExpr e).getAChildExpr*()) // // ) // // or - // exists(DataFlow::Function f | f.hasQualifiedName("io", "LimitReader") | + // exists(Function f | f.hasQualifiedName("io", "LimitReader") | // node = f.getACall().getArgument(0) and f.getACall().getArgument(1).isConst() // ) and // state = @@ -243,7 +239,7 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { // class Test extends DataFlow::Configuration { // Test() { this = "test" } // override predicate isSource(DataFlow::Node source) { -// exists(DataFlow::Function f | f.hasQualifiedName("io", "CopyN") | +// exists(Function f | f.hasQualifiedName("io", "CopyN") | // f.getACall().getResult(0) = source // ) // } diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll b/go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll index ed4da61a894..06bae726349 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll @@ -1,6 +1,5 @@ import go import semmle.go.dataflow.Properties -import semmle.go.security.FlowSources class MimeMultipartFileHeader extends UntrustedFlowSource::Range { MimeMultipartFileHeader() { diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected index 379b07920f8..cc477a088ee 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -1,167 +1,406 @@ -WARNING: Unused predicate test (/home/am/CodeQL-home/codeql-repo/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql:224,11-15) -WARNING: test is always true, as DataFlowNodes::Public::Node is a supertype of the expression type DataFlowNodes::Public::Node. (/home/am/CodeQL-home/codeql-repo/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql:235,68-82) -WARNING: test is always true, as the expression already has type DataFlowNodes::Public::Node. (/home/am/CodeQL-home/codeql-repo/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql:235,68-82) edges -| archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:142:22:142:25 | definition of file | -| archive_zip.go:42:15:42:26 | selection of Body | archive_zip.go:120:19:120:22 | definition of file | -| archive_zip.go:44:16:44:44 | call to PostFormValue | archive_zip.go:90:20:90:27 | definition of filename | -| archive_zip.go:45:20:45:48 | call to PostFormValue | archive_zip.go:61:24:61:31 | definition of filename | -| archive_zip.go:61:24:61:31 | definition of filename | archive_zip.go:62:25:62:32 | filename | -| archive_zip.go:62:2:62:33 | ... := ...[0] | archive_zip.go:65:12:65:12 | f | -| archive_zip.go:62:25:62:32 | filename | archive_zip.go:62:2:62:33 | ... := ...[0] | -| archive_zip.go:65:3:65:19 | ... := ...[0] | archive_zip.go:67:37:67:38 | rc | -| archive_zip.go:65:3:65:19 | ... := ...[0] | archive_zip.go:67:37:67:38 | rc | -| archive_zip.go:65:12:65:12 | f | archive_zip.go:65:3:65:19 | ... := ...[0] | -| archive_zip.go:67:4:67:43 | ... := ...[0] | archive_zip.go:67:4:67:9 | definition of result | -| archive_zip.go:67:4:67:43 | ... := ...[0] | archive_zip.go:68:7:68:12 | result | -| archive_zip.go:67:4:67:43 | ... := ...[0] | archive_zip.go:72:30:72:35 | result | -| archive_zip.go:67:37:67:38 | rc | archive_zip.go:67:26:67:34 | selection of Stdout | -| archive_zip.go:90:20:90:27 | definition of filename | archive_zip.go:92:25:92:32 | filename | -| archive_zip.go:92:2:92:33 | ... := ...[0] | archive_zip.go:94:12:94:12 | f | -| archive_zip.go:92:25:92:32 | filename | archive_zip.go:92:2:92:33 | ... := ...[0] | -| archive_zip.go:94:3:94:19 | ... := ...[0] | archive_zip.go:96:37:96:38 | rc | -| archive_zip.go:94:3:94:19 | ... := ...[0] | archive_zip.go:96:37:96:38 | rc | -| archive_zip.go:94:12:94:12 | f | archive_zip.go:94:3:94:19 | ... := ...[0] | -| archive_zip.go:96:4:96:43 | ... := ...[0] | archive_zip.go:96:4:96:9 | definition of result | -| archive_zip.go:96:4:96:43 | ... := ...[0] | archive_zip.go:97:7:97:12 | result | -| archive_zip.go:96:4:96:43 | ... := ...[0] | archive_zip.go:101:14:101:19 | result | -| archive_zip.go:96:37:96:38 | rc | archive_zip.go:96:26:96:34 | selection of Stdout | -| archive_zip.go:109:4:109:43 | ... := ...[0] | archive_zip.go:109:4:109:9 | definition of result | -| archive_zip.go:109:4:109:43 | ... := ...[0] | archive_zip.go:110:7:110:12 | result | -| archive_zip.go:109:4:109:43 | ... := ...[0] | archive_zip.go:114:14:114:19 | result | -| archive_zip.go:120:19:120:22 | definition of file | archive_zip.go:121:25:121:28 | file | -| archive_zip.go:121:2:121:29 | ... := ...[0] | archive_zip.go:122:48:122:52 | file1 | -| archive_zip.go:121:25:121:28 | file | archive_zip.go:121:2:121:29 | ... := ...[0] | -| archive_zip.go:122:2:122:69 | ... := ...[0] | archive_zip.go:125:26:125:29 | file | -| archive_zip.go:122:32:122:53 | call to NewReader | archive_zip.go:122:2:122:69 | ... := ...[0] | -| archive_zip.go:122:48:122:52 | file1 | archive_zip.go:122:32:122:53 | call to NewReader | -| archive_zip.go:124:3:124:12 | definition of fileWriter | archive_zip.go:126:24:126:33 | fileWriter | -| archive_zip.go:125:3:125:36 | ... := ...[0] | archive_zip.go:126:36:126:51 | fileReaderCloser | -| archive_zip.go:125:3:125:36 | ... := ...[0] | archive_zip.go:126:36:126:51 | fileReaderCloser | -| archive_zip.go:125:26:125:29 | file | archive_zip.go:125:3:125:36 | ... := ...[0] | -| archive_zip.go:126:36:126:51 | fileReaderCloser | archive_zip.go:124:3:124:12 | definition of fileWriter | -| archive_zip.go:142:22:142:25 | definition of file | archive_zip.go:151:28:151:31 | file | -| archive_zip.go:142:22:142:25 | definition of file | archive_zip.go:158:28:158:31 | file | -| archive_zip.go:142:22:142:25 | definition of file | archive_zip.go:185:29:185:32 | file | -| archive_zip.go:142:22:142:25 | definition of file | archive_zip.go:217:33:217:36 | file | -| archive_zip.go:151:12:151:32 | call to NewReader | archive_zip.go:153:3:153:7 | Bzip2 | -| archive_zip.go:151:12:151:32 | call to NewReader | archive_zip.go:154:27:154:31 | Bzip2 | -| archive_zip.go:151:28:151:31 | file | archive_zip.go:151:12:151:32 | call to NewReader | -| archive_zip.go:154:13:154:32 | call to NewReader | archive_zip.go:263:2:263:8 | tarRead | -| archive_zip.go:154:13:154:32 | call to NewReader | archive_zip.go:273:25:273:31 | tarRead | -| archive_zip.go:154:27:154:31 | Bzip2 | archive_zip.go:154:13:154:32 | call to NewReader | -| archive_zip.go:158:12:158:32 | call to NewReader | archive_zip.go:160:3:160:7 | Flate | -| archive_zip.go:158:12:158:32 | call to NewReader | archive_zip.go:161:27:161:31 | Flate | -| archive_zip.go:158:28:158:31 | file | archive_zip.go:158:12:158:32 | call to NewReader | -| archive_zip.go:161:13:161:32 | call to NewReader | archive_zip.go:263:2:263:8 | tarRead | -| archive_zip.go:161:13:161:32 | call to NewReader | archive_zip.go:273:25:273:31 | tarRead | -| archive_zip.go:161:27:161:31 | Flate | archive_zip.go:161:13:161:32 | call to NewReader | -| archive_zip.go:185:3:185:33 | ... := ...[0] | archive_zip.go:187:3:187:6 | Zlib | -| archive_zip.go:185:3:185:33 | ... := ...[0] | archive_zip.go:188:27:188:30 | Zlib | -| archive_zip.go:185:29:185:32 | file | archive_zip.go:185:3:185:33 | ... := ...[0] | -| archive_zip.go:188:13:188:31 | call to NewReader | archive_zip.go:263:2:263:8 | tarRead | -| archive_zip.go:188:13:188:31 | call to NewReader | archive_zip.go:273:25:273:31 | tarRead | -| archive_zip.go:188:27:188:30 | Zlib | archive_zip.go:188:13:188:31 | call to NewReader | -| archive_zip.go:217:3:217:37 | ... := ...[0] | archive_zip.go:219:3:219:10 | gzipRead | -| archive_zip.go:217:3:217:37 | ... := ...[0] | archive_zip.go:220:27:220:34 | gzipRead | -| archive_zip.go:217:33:217:36 | file | archive_zip.go:217:3:217:37 | ... := ...[0] | -| archive_zip.go:220:13:220:35 | call to NewReader | archive_zip.go:263:2:263:8 | tarRead | -| archive_zip.go:220:13:220:35 | call to NewReader | archive_zip.go:273:25:273:31 | tarRead | -| archive_zip.go:220:27:220:34 | gzipRead | archive_zip.go:220:13:220:35 | call to NewReader | +| archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:165:22:165:25 | definition of file | +| archive_zip.go:57:15:57:26 | selection of Body | archive_zip.go:135:19:135:22 | definition of file | +| archive_zip.go:58:16:58:27 | selection of Body | archive_zip.go:146:20:146:23 | definition of file | +| archive_zip.go:59:16:59:46 | call to FormValue | archive_zip.go:105:20:105:27 | definition of filename | +| archive_zip.go:60:20:60:48 | call to PostFormValue | archive_zip.go:76:24:76:31 | definition of filename | +| archive_zip.go:62:17:62:28 | selection of Body | archive_zip.go:96:21:96:23 | definition of src | +| archive_zip.go:76:24:76:31 | definition of filename | archive_zip.go:77:25:77:32 | filename | +| archive_zip.go:77:2:77:33 | ... := ...[0] | archive_zip.go:80:12:80:12 | f | +| archive_zip.go:77:25:77:32 | filename | archive_zip.go:77:2:77:33 | ... := ...[0] | +| archive_zip.go:80:3:80:19 | ... := ...[0] | archive_zip.go:82:37:82:38 | rc | +| archive_zip.go:80:12:80:12 | f | archive_zip.go:80:3:80:19 | ... := ...[0] | +| archive_zip.go:96:21:96:23 | definition of src | archive_zip.go:97:29:97:31 | src | +| archive_zip.go:97:2:97:32 | ... := ...[0] | archive_zip.go:101:26:101:30 | gzipR | +| archive_zip.go:97:29:97:31 | src | archive_zip.go:97:2:97:32 | ... := ...[0] | +| archive_zip.go:101:11:101:44 | call to LimitReader | archive_zip.go:102:23:102:28 | newSrc | +| archive_zip.go:101:26:101:30 | gzipR | archive_zip.go:101:11:101:44 | call to LimitReader | +| archive_zip.go:105:20:105:27 | definition of filename | archive_zip.go:107:25:107:32 | filename | +| archive_zip.go:107:2:107:33 | ... := ...[0] | archive_zip.go:109:12:109:12 | f | +| archive_zip.go:107:25:107:32 | filename | archive_zip.go:107:2:107:33 | ... := ...[0] | +| archive_zip.go:109:3:109:19 | ... := ...[0] | archive_zip.go:111:37:111:38 | rc | +| archive_zip.go:109:12:109:12 | f | archive_zip.go:109:3:109:19 | ... := ...[0] | +| archive_zip.go:135:19:135:22 | definition of file | archive_zip.go:136:25:136:28 | file | +| archive_zip.go:136:2:136:29 | ... := ...[0] | archive_zip.go:137:48:137:52 | file1 | +| archive_zip.go:136:25:136:28 | file | archive_zip.go:136:2:136:29 | ... := ...[0] | +| archive_zip.go:137:2:137:69 | ... := ...[0] | archive_zip.go:140:26:140:29 | file | +| archive_zip.go:137:32:137:53 | call to NewReader | archive_zip.go:137:2:137:69 | ... := ...[0] | +| archive_zip.go:137:48:137:52 | file1 | archive_zip.go:137:32:137:53 | call to NewReader | +| archive_zip.go:140:3:140:36 | ... := ...[0] | archive_zip.go:141:36:141:51 | fileReaderCloser | +| archive_zip.go:140:26:140:29 | file | archive_zip.go:140:3:140:36 | ... := ...[0] | +| archive_zip.go:146:20:146:23 | definition of file | archive_zip.go:147:25:147:28 | file | +| archive_zip.go:147:2:147:29 | ... := ...[0] | archive_zip.go:148:66:148:70 | file2 | +| archive_zip.go:147:25:147:28 | file | archive_zip.go:147:2:147:29 | ... := ...[0] | +| archive_zip.go:148:2:148:87 | ... := ...[0] | archive_zip.go:153:36:153:51 | fileReaderCloser | +| archive_zip.go:148:50:148:71 | call to NewReader | archive_zip.go:148:2:148:87 | ... := ...[0] | +| archive_zip.go:148:66:148:70 | file2 | archive_zip.go:148:50:148:71 | call to NewReader | +| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:168:41:168:44 | file | +| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:174:28:174:31 | file | +| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:181:28:181:31 | file | +| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:188:45:188:48 | file | +| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:194:41:194:44 | file | +| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:201:47:201:50 | file | +| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:208:29:208:32 | file | +| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:214:30:214:33 | file | +| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:221:48:221:51 | file | +| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:234:22:234:25 | file | +| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:244:33:244:36 | file | +| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:250:47:250:50 | file | +| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:259:43:259:46 | file | +| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:267:38:267:41 | file | +| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:278:33:278:36 | file | +| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:284:29:284:32 | file | +| archive_zip.go:168:3:168:73 | ... := ...[0] | archive_zip.go:170:3:170:12 | bzip2dsnet | +| archive_zip.go:168:3:168:73 | ... := ...[0] | archive_zip.go:171:27:171:36 | bzip2dsnet | +| archive_zip.go:168:41:168:44 | file | archive_zip.go:168:3:168:73 | ... := ...[0] | +| archive_zip.go:171:13:171:37 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | +| archive_zip.go:171:13:171:37 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | +| archive_zip.go:171:27:171:36 | bzip2dsnet | archive_zip.go:171:13:171:37 | call to NewReader | +| archive_zip.go:174:12:174:32 | call to NewReader | archive_zip.go:176:3:176:7 | Bzip2 | +| archive_zip.go:174:12:174:32 | call to NewReader | archive_zip.go:177:27:177:31 | Bzip2 | +| archive_zip.go:174:28:174:31 | file | archive_zip.go:174:12:174:32 | call to NewReader | +| archive_zip.go:177:13:177:32 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | +| archive_zip.go:177:13:177:32 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | +| archive_zip.go:177:27:177:31 | Bzip2 | archive_zip.go:177:13:177:32 | call to NewReader | +| archive_zip.go:181:12:181:32 | call to NewReader | archive_zip.go:183:3:183:7 | Flate | +| archive_zip.go:181:12:181:32 | call to NewReader | archive_zip.go:184:27:184:31 | Flate | +| archive_zip.go:181:28:181:31 | file | archive_zip.go:181:12:181:32 | call to NewReader | +| archive_zip.go:184:13:184:32 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | +| archive_zip.go:184:13:184:32 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | +| archive_zip.go:184:27:184:31 | Flate | archive_zip.go:184:13:184:32 | call to NewReader | +| archive_zip.go:188:20:188:49 | call to NewReader | archive_zip.go:190:3:190:15 | zlibklauspost | +| archive_zip.go:188:20:188:49 | call to NewReader | archive_zip.go:191:27:191:39 | zlibklauspost | +| archive_zip.go:188:45:188:48 | file | archive_zip.go:188:20:188:49 | call to NewReader | +| archive_zip.go:191:13:191:40 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | +| archive_zip.go:191:13:191:40 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | +| archive_zip.go:191:27:191:39 | zlibklauspost | archive_zip.go:191:13:191:40 | call to NewReader | +| archive_zip.go:194:3:194:73 | ... := ...[0] | archive_zip.go:196:3:196:12 | flatedsnet | +| archive_zip.go:194:3:194:73 | ... := ...[0] | archive_zip.go:197:27:197:36 | flatedsnet | +| archive_zip.go:194:41:194:44 | file | archive_zip.go:194:3:194:73 | ... := ...[0] | +| archive_zip.go:197:13:197:37 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | +| archive_zip.go:197:13:197:37 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | +| archive_zip.go:197:27:197:36 | flatedsnet | archive_zip.go:197:13:197:37 | call to NewReader | +| archive_zip.go:201:3:201:51 | ... := ...[0] | archive_zip.go:203:3:203:15 | zlibklauspost | +| archive_zip.go:201:3:201:51 | ... := ...[0] | archive_zip.go:204:27:204:39 | zlibklauspost | +| archive_zip.go:201:47:201:50 | file | archive_zip.go:201:3:201:51 | ... := ...[0] | +| archive_zip.go:204:13:204:40 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | +| archive_zip.go:204:13:204:40 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | +| archive_zip.go:204:27:204:39 | zlibklauspost | archive_zip.go:204:13:204:40 | call to NewReader | +| archive_zip.go:208:3:208:33 | ... := ...[0] | archive_zip.go:210:3:210:6 | Zlib | +| archive_zip.go:208:3:208:33 | ... := ...[0] | archive_zip.go:211:27:211:30 | Zlib | +| archive_zip.go:208:29:208:32 | file | archive_zip.go:208:3:208:33 | ... := ...[0] | +| archive_zip.go:211:13:211:31 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | +| archive_zip.go:211:13:211:31 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | +| archive_zip.go:211:27:211:30 | Zlib | archive_zip.go:211:13:211:31 | call to NewReader | +| archive_zip.go:214:13:214:34 | call to NewReader | archive_zip.go:216:3:216:8 | Snappy | +| archive_zip.go:214:13:214:34 | call to NewReader | archive_zip.go:217:3:217:8 | Snappy | +| archive_zip.go:214:13:214:34 | call to NewReader | archive_zip.go:218:27:218:32 | Snappy | +| archive_zip.go:214:30:214:33 | file | archive_zip.go:214:13:214:34 | call to NewReader | +| archive_zip.go:218:13:218:33 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | +| archive_zip.go:218:13:218:33 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | +| archive_zip.go:218:27:218:32 | Snappy | archive_zip.go:218:13:218:33 | call to NewReader | +| archive_zip.go:221:22:221:52 | call to NewReader | archive_zip.go:227:3:227:10 | s2Reader | +| archive_zip.go:221:22:221:52 | call to NewReader | archive_zip.go:229:3:229:10 | s2Reader | +| archive_zip.go:221:22:221:52 | call to NewReader | archive_zip.go:230:3:230:10 | s2Reader | +| archive_zip.go:221:22:221:52 | call to NewReader | archive_zip.go:231:27:231:34 | s2Reader | +| archive_zip.go:221:48:221:51 | file | archive_zip.go:221:22:221:52 | call to NewReader | +| archive_zip.go:231:13:231:35 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | +| archive_zip.go:231:13:231:35 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | +| archive_zip.go:231:27:231:34 | s2Reader | archive_zip.go:231:13:231:35 | call to NewReader | +| archive_zip.go:234:9:234:26 | call to NewReader | archive_zip.go:236:3:236:4 | S2 | +| archive_zip.go:234:9:234:26 | call to NewReader | archive_zip.go:238:3:238:4 | S2 | +| archive_zip.go:234:9:234:26 | call to NewReader | archive_zip.go:241:27:241:28 | S2 | +| archive_zip.go:234:22:234:25 | file | archive_zip.go:234:9:234:26 | call to NewReader | +| archive_zip.go:241:13:241:29 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | +| archive_zip.go:241:13:241:29 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | +| archive_zip.go:241:27:241:28 | S2 | archive_zip.go:241:13:241:29 | call to NewReader | +| archive_zip.go:244:3:244:37 | ... := ...[0] | archive_zip.go:246:3:246:10 | gzipRead | +| archive_zip.go:244:3:244:37 | ... := ...[0] | archive_zip.go:247:27:247:34 | gzipRead | +| archive_zip.go:244:33:244:36 | file | archive_zip.go:244:3:244:37 | ... := ...[0] | +| archive_zip.go:247:13:247:35 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | +| archive_zip.go:247:13:247:35 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | +| archive_zip.go:247:27:247:34 | gzipRead | archive_zip.go:247:13:247:35 | call to NewReader | +| archive_zip.go:250:3:250:51 | ... := ...[0] | archive_zip.go:252:3:252:15 | gzipklauspost | +| archive_zip.go:250:3:250:51 | ... := ...[0] | archive_zip.go:254:3:254:15 | gzipklauspost | +| archive_zip.go:250:3:250:51 | ... := ...[0] | archive_zip.go:255:27:255:39 | gzipklauspost | +| archive_zip.go:250:47:250:50 | file | archive_zip.go:250:3:250:51 | ... := ...[0] | +| archive_zip.go:255:13:255:40 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | +| archive_zip.go:255:13:255:40 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | +| archive_zip.go:255:27:255:39 | gzipklauspost | archive_zip.go:255:13:255:40 | call to NewReader | +| archive_zip.go:259:3:259:47 | ... := ...[0] | archive_zip.go:261:3:261:11 | gzippgzip | +| archive_zip.go:259:3:259:47 | ... := ...[0] | archive_zip.go:263:3:263:11 | gzippgzip | +| archive_zip.go:259:3:259:47 | ... := ...[0] | archive_zip.go:264:27:264:35 | gzippgzip | +| archive_zip.go:259:43:259:46 | file | archive_zip.go:259:3:259:47 | ... := ...[0] | +| archive_zip.go:264:13:264:36 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | +| archive_zip.go:264:13:264:36 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | +| archive_zip.go:264:27:264:35 | gzippgzip | archive_zip.go:264:13:264:36 | call to NewReader | +| archive_zip.go:267:3:267:42 | ... := ...[0] | archive_zip.go:269:3:269:6 | zstd | +| archive_zip.go:267:3:267:42 | ... := ...[0] | archive_zip.go:271:3:271:6 | zstd | +| archive_zip.go:267:3:267:42 | ... := ...[0] | archive_zip.go:273:3:273:6 | zstd | +| archive_zip.go:267:3:267:42 | ... := ...[0] | archive_zip.go:274:27:274:30 | zstd | +| archive_zip.go:267:38:267:41 | file | archive_zip.go:267:3:267:42 | ... := ...[0] | +| archive_zip.go:274:13:274:31 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | +| archive_zip.go:274:13:274:31 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | +| archive_zip.go:274:27:274:30 | zstd | archive_zip.go:274:13:274:31 | call to NewReader | +| archive_zip.go:278:11:278:37 | call to NewReader | archive_zip.go:280:3:280:6 | zstd | +| archive_zip.go:278:11:278:37 | call to NewReader | archive_zip.go:281:27:281:30 | zstd | +| archive_zip.go:278:33:278:36 | file | archive_zip.go:278:11:278:37 | call to NewReader | +| archive_zip.go:281:13:281:31 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | +| archive_zip.go:281:13:281:31 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | +| archive_zip.go:281:27:281:30 | zstd | archive_zip.go:281:13:281:31 | call to NewReader | +| archive_zip.go:284:3:284:33 | ... := ...[0] | archive_zip.go:286:3:286:8 | xzRead | +| archive_zip.go:284:3:284:33 | ... := ...[0] | archive_zip.go:287:27:287:32 | xzRead | +| archive_zip.go:284:29:284:32 | file | archive_zip.go:284:3:284:33 | ... := ...[0] | +| archive_zip.go:287:13:287:33 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | +| archive_zip.go:287:13:287:33 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | +| archive_zip.go:287:27:287:32 | xzRead | archive_zip.go:287:13:287:33 | call to NewReader | +| test.go:54:18:54:29 | selection of Body | archive_zip.go:165:22:165:25 | definition of file | +| test.go:55:15:55:26 | selection of Body | archive_zip.go:135:19:135:22 | definition of file | +| test.go:56:16:56:27 | selection of Body | archive_zip.go:146:20:146:23 | definition of file | +| test.go:57:16:57:46 | call to FormValue | archive_zip.go:105:20:105:27 | definition of filename | +| test.go:58:20:58:48 | call to PostFormValue | archive_zip.go:76:24:76:31 | definition of filename | +| test.go:60:17:60:28 | selection of Body | archive_zip.go:96:21:96:23 | definition of src | nodes -| archive_zip.go:41:18:41:29 | selection of Body | semmle.label | selection of Body | -| archive_zip.go:42:15:42:26 | selection of Body | semmle.label | selection of Body | -| archive_zip.go:44:16:44:44 | call to PostFormValue | semmle.label | call to PostFormValue | -| archive_zip.go:45:20:45:48 | call to PostFormValue | semmle.label | call to PostFormValue | -| archive_zip.go:61:24:61:31 | definition of filename | semmle.label | definition of filename | -| archive_zip.go:62:2:62:33 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:62:25:62:32 | filename | semmle.label | filename | -| archive_zip.go:65:3:65:19 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:65:12:65:12 | f | semmle.label | f | -| archive_zip.go:67:4:67:9 | definition of result | semmle.label | definition of result | -| archive_zip.go:67:4:67:43 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:67:4:67:43 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:67:26:67:34 | selection of Stdout | semmle.label | selection of Stdout | -| archive_zip.go:67:37:67:38 | rc | semmle.label | rc | -| archive_zip.go:67:37:67:38 | rc | semmle.label | rc | -| archive_zip.go:68:7:68:12 | result | semmle.label | result | -| archive_zip.go:72:30:72:35 | result | semmle.label | result | -| archive_zip.go:90:20:90:27 | definition of filename | semmle.label | definition of filename | -| archive_zip.go:92:2:92:33 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:92:25:92:32 | filename | semmle.label | filename | -| archive_zip.go:94:3:94:19 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:94:12:94:12 | f | semmle.label | f | -| archive_zip.go:96:4:96:9 | definition of result | semmle.label | definition of result | -| archive_zip.go:96:4:96:43 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:96:4:96:43 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:96:26:96:34 | selection of Stdout | semmle.label | selection of Stdout | -| archive_zip.go:96:37:96:38 | rc | semmle.label | rc | -| archive_zip.go:96:37:96:38 | rc | semmle.label | rc | -| archive_zip.go:97:7:97:12 | result | semmle.label | result | -| archive_zip.go:101:14:101:19 | result | semmle.label | result | -| archive_zip.go:109:4:109:9 | definition of result | semmle.label | definition of result | -| archive_zip.go:109:4:109:43 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:109:4:109:43 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:110:7:110:12 | result | semmle.label | result | -| archive_zip.go:114:14:114:19 | result | semmle.label | result | -| archive_zip.go:120:19:120:22 | definition of file | semmle.label | definition of file | -| archive_zip.go:121:2:121:29 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:121:25:121:28 | file | semmle.label | file | -| archive_zip.go:122:2:122:69 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:122:32:122:53 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:122:48:122:52 | file1 | semmle.label | file1 | -| archive_zip.go:124:3:124:12 | definition of fileWriter | semmle.label | definition of fileWriter | -| archive_zip.go:125:3:125:36 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:125:26:125:29 | file | semmle.label | file | -| archive_zip.go:126:24:126:33 | fileWriter | semmle.label | fileWriter | -| archive_zip.go:126:36:126:51 | fileReaderCloser | semmle.label | fileReaderCloser | -| archive_zip.go:126:36:126:51 | fileReaderCloser | semmle.label | fileReaderCloser | -| archive_zip.go:142:22:142:25 | definition of file | semmle.label | definition of file | -| archive_zip.go:151:12:151:32 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:151:28:151:31 | file | semmle.label | file | -| archive_zip.go:153:3:153:7 | Bzip2 | semmle.label | Bzip2 | -| archive_zip.go:154:13:154:32 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:154:27:154:31 | Bzip2 | semmle.label | Bzip2 | -| archive_zip.go:158:12:158:32 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:158:28:158:31 | file | semmle.label | file | -| archive_zip.go:160:3:160:7 | Flate | semmle.label | Flate | -| archive_zip.go:161:13:161:32 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:161:27:161:31 | Flate | semmle.label | Flate | -| archive_zip.go:185:3:185:33 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:185:29:185:32 | file | semmle.label | file | -| archive_zip.go:187:3:187:6 | Zlib | semmle.label | Zlib | -| archive_zip.go:188:13:188:31 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:188:27:188:30 | Zlib | semmle.label | Zlib | -| archive_zip.go:217:3:217:37 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:217:33:217:36 | file | semmle.label | file | -| archive_zip.go:219:3:219:10 | gzipRead | semmle.label | gzipRead | -| archive_zip.go:220:13:220:35 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:220:27:220:34 | gzipRead | semmle.label | gzipRead | -| archive_zip.go:263:2:263:8 | tarRead | semmle.label | tarRead | -| archive_zip.go:263:2:263:8 | tarRead | semmle.label | tarRead | -| archive_zip.go:263:2:263:8 | tarRead | semmle.label | tarRead | -| archive_zip.go:263:2:263:8 | tarRead | semmle.label | tarRead | -| archive_zip.go:273:25:273:31 | tarRead | semmle.label | tarRead | -| archive_zip.go:273:25:273:31 | tarRead | semmle.label | tarRead | -| archive_zip.go:273:25:273:31 | tarRead | semmle.label | tarRead | -| archive_zip.go:273:25:273:31 | tarRead | semmle.label | tarRead | +| archive_zip.go:56:18:56:29 | selection of Body | semmle.label | selection of Body | +| archive_zip.go:57:15:57:26 | selection of Body | semmle.label | selection of Body | +| archive_zip.go:58:16:58:27 | selection of Body | semmle.label | selection of Body | +| archive_zip.go:59:16:59:46 | call to FormValue | semmle.label | call to FormValue | +| archive_zip.go:60:20:60:48 | call to PostFormValue | semmle.label | call to PostFormValue | +| archive_zip.go:62:17:62:28 | selection of Body | semmle.label | selection of Body | +| archive_zip.go:76:24:76:31 | definition of filename | semmle.label | definition of filename | +| archive_zip.go:77:2:77:33 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:77:25:77:32 | filename | semmle.label | filename | +| archive_zip.go:80:3:80:19 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:80:12:80:12 | f | semmle.label | f | +| archive_zip.go:82:37:82:38 | rc | semmle.label | rc | +| archive_zip.go:96:21:96:23 | definition of src | semmle.label | definition of src | +| archive_zip.go:97:2:97:32 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:97:29:97:31 | src | semmle.label | src | +| archive_zip.go:101:11:101:44 | call to LimitReader | semmle.label | call to LimitReader | +| archive_zip.go:101:26:101:30 | gzipR | semmle.label | gzipR | +| archive_zip.go:102:23:102:28 | newSrc | semmle.label | newSrc | +| archive_zip.go:105:20:105:27 | definition of filename | semmle.label | definition of filename | +| archive_zip.go:107:2:107:33 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:107:25:107:32 | filename | semmle.label | filename | +| archive_zip.go:109:3:109:19 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:109:12:109:12 | f | semmle.label | f | +| archive_zip.go:111:37:111:38 | rc | semmle.label | rc | +| archive_zip.go:135:19:135:22 | definition of file | semmle.label | definition of file | +| archive_zip.go:136:2:136:29 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:136:25:136:28 | file | semmle.label | file | +| archive_zip.go:137:2:137:69 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:137:32:137:53 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:137:48:137:52 | file1 | semmle.label | file1 | +| archive_zip.go:140:3:140:36 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:140:26:140:29 | file | semmle.label | file | +| archive_zip.go:141:36:141:51 | fileReaderCloser | semmle.label | fileReaderCloser | +| archive_zip.go:146:20:146:23 | definition of file | semmle.label | definition of file | +| archive_zip.go:147:2:147:29 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:147:25:147:28 | file | semmle.label | file | +| archive_zip.go:148:2:148:87 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:148:50:148:71 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:148:66:148:70 | file2 | semmle.label | file2 | +| archive_zip.go:153:36:153:51 | fileReaderCloser | semmle.label | fileReaderCloser | +| archive_zip.go:165:22:165:25 | definition of file | semmle.label | definition of file | +| archive_zip.go:168:3:168:73 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:168:41:168:44 | file | semmle.label | file | +| archive_zip.go:170:3:170:12 | bzip2dsnet | semmle.label | bzip2dsnet | +| archive_zip.go:171:13:171:37 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:171:27:171:36 | bzip2dsnet | semmle.label | bzip2dsnet | +| archive_zip.go:174:12:174:32 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:174:28:174:31 | file | semmle.label | file | +| archive_zip.go:176:3:176:7 | Bzip2 | semmle.label | Bzip2 | +| archive_zip.go:177:13:177:32 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:177:27:177:31 | Bzip2 | semmle.label | Bzip2 | +| archive_zip.go:181:12:181:32 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:181:28:181:31 | file | semmle.label | file | +| archive_zip.go:183:3:183:7 | Flate | semmle.label | Flate | +| archive_zip.go:184:13:184:32 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:184:27:184:31 | Flate | semmle.label | Flate | +| archive_zip.go:188:20:188:49 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:188:45:188:48 | file | semmle.label | file | +| archive_zip.go:190:3:190:15 | zlibklauspost | semmle.label | zlibklauspost | +| archive_zip.go:191:13:191:40 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:191:27:191:39 | zlibklauspost | semmle.label | zlibklauspost | +| archive_zip.go:194:3:194:73 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:194:41:194:44 | file | semmle.label | file | +| archive_zip.go:196:3:196:12 | flatedsnet | semmle.label | flatedsnet | +| archive_zip.go:197:13:197:37 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:197:27:197:36 | flatedsnet | semmle.label | flatedsnet | +| archive_zip.go:201:3:201:51 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:201:47:201:50 | file | semmle.label | file | +| archive_zip.go:203:3:203:15 | zlibklauspost | semmle.label | zlibklauspost | +| archive_zip.go:204:13:204:40 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:204:27:204:39 | zlibklauspost | semmle.label | zlibklauspost | +| archive_zip.go:208:3:208:33 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:208:29:208:32 | file | semmle.label | file | +| archive_zip.go:210:3:210:6 | Zlib | semmle.label | Zlib | +| archive_zip.go:211:13:211:31 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:211:27:211:30 | Zlib | semmle.label | Zlib | +| archive_zip.go:214:13:214:34 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:214:30:214:33 | file | semmle.label | file | +| archive_zip.go:216:3:216:8 | Snappy | semmle.label | Snappy | +| archive_zip.go:217:3:217:8 | Snappy | semmle.label | Snappy | +| archive_zip.go:218:13:218:33 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:218:27:218:32 | Snappy | semmle.label | Snappy | +| archive_zip.go:221:22:221:52 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:221:48:221:51 | file | semmle.label | file | +| archive_zip.go:227:3:227:10 | s2Reader | semmle.label | s2Reader | +| archive_zip.go:229:3:229:10 | s2Reader | semmle.label | s2Reader | +| archive_zip.go:230:3:230:10 | s2Reader | semmle.label | s2Reader | +| archive_zip.go:231:13:231:35 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:231:27:231:34 | s2Reader | semmle.label | s2Reader | +| archive_zip.go:234:9:234:26 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:234:22:234:25 | file | semmle.label | file | +| archive_zip.go:236:3:236:4 | S2 | semmle.label | S2 | +| archive_zip.go:238:3:238:4 | S2 | semmle.label | S2 | +| archive_zip.go:241:13:241:29 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:241:27:241:28 | S2 | semmle.label | S2 | +| archive_zip.go:244:3:244:37 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:244:33:244:36 | file | semmle.label | file | +| archive_zip.go:246:3:246:10 | gzipRead | semmle.label | gzipRead | +| archive_zip.go:247:13:247:35 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:247:27:247:34 | gzipRead | semmle.label | gzipRead | +| archive_zip.go:250:3:250:51 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:250:47:250:50 | file | semmle.label | file | +| archive_zip.go:252:3:252:15 | gzipklauspost | semmle.label | gzipklauspost | +| archive_zip.go:254:3:254:15 | gzipklauspost | semmle.label | gzipklauspost | +| archive_zip.go:255:13:255:40 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:255:27:255:39 | gzipklauspost | semmle.label | gzipklauspost | +| archive_zip.go:259:3:259:47 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:259:43:259:46 | file | semmle.label | file | +| archive_zip.go:261:3:261:11 | gzippgzip | semmle.label | gzippgzip | +| archive_zip.go:263:3:263:11 | gzippgzip | semmle.label | gzippgzip | +| archive_zip.go:264:13:264:36 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:264:27:264:35 | gzippgzip | semmle.label | gzippgzip | +| archive_zip.go:267:3:267:42 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:267:38:267:41 | file | semmle.label | file | +| archive_zip.go:269:3:269:6 | zstd | semmle.label | zstd | +| archive_zip.go:271:3:271:6 | zstd | semmle.label | zstd | +| archive_zip.go:273:3:273:6 | zstd | semmle.label | zstd | +| archive_zip.go:274:13:274:31 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:274:27:274:30 | zstd | semmle.label | zstd | +| archive_zip.go:278:11:278:37 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:278:33:278:36 | file | semmle.label | file | +| archive_zip.go:280:3:280:6 | zstd | semmle.label | zstd | +| archive_zip.go:281:13:281:31 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:281:27:281:30 | zstd | semmle.label | zstd | +| archive_zip.go:284:3:284:33 | ... := ...[0] | semmle.label | ... := ...[0] | +| archive_zip.go:284:29:284:32 | file | semmle.label | file | +| archive_zip.go:286:3:286:8 | xzRead | semmle.label | xzRead | +| archive_zip.go:287:13:287:33 | call to NewReader | semmle.label | call to NewReader | +| archive_zip.go:287:27:287:32 | xzRead | semmle.label | xzRead | +| archive_zip.go:290:2:290:8 | tarRead | semmle.label | tarRead | +| archive_zip.go:290:2:290:8 | tarRead | semmle.label | tarRead | +| archive_zip.go:290:2:290:8 | tarRead | semmle.label | tarRead | +| archive_zip.go:290:2:290:8 | tarRead | semmle.label | tarRead | +| archive_zip.go:290:2:290:8 | tarRead | semmle.label | tarRead | +| archive_zip.go:290:2:290:8 | tarRead | semmle.label | tarRead | +| archive_zip.go:290:2:290:8 | tarRead | semmle.label | tarRead | +| archive_zip.go:290:2:290:8 | tarRead | semmle.label | tarRead | +| archive_zip.go:300:25:300:31 | tarRead | semmle.label | tarRead | +| archive_zip.go:300:25:300:31 | tarRead | semmle.label | tarRead | +| archive_zip.go:300:25:300:31 | tarRead | semmle.label | tarRead | +| archive_zip.go:300:25:300:31 | tarRead | semmle.label | tarRead | +| archive_zip.go:300:25:300:31 | tarRead | semmle.label | tarRead | +| archive_zip.go:300:25:300:31 | tarRead | semmle.label | tarRead | +| archive_zip.go:300:25:300:31 | tarRead | semmle.label | tarRead | +| archive_zip.go:300:25:300:31 | tarRead | semmle.label | tarRead | +| test.go:54:18:54:29 | selection of Body | semmle.label | selection of Body | +| test.go:55:15:55:26 | selection of Body | semmle.label | selection of Body | +| test.go:56:16:56:27 | selection of Body | semmle.label | selection of Body | +| test.go:57:16:57:46 | call to FormValue | semmle.label | call to FormValue | +| test.go:58:20:58:48 | call to PostFormValue | semmle.label | call to PostFormValue | +| test.go:60:17:60:28 | selection of Body | semmle.label | selection of Body | subpaths #select -| archive_zip.go:67:26:67:34 | selection of Stdout | archive_zip.go:45:20:45:48 | call to PostFormValue | archive_zip.go:67:26:67:34 | selection of Stdout | This file extraction depends on a $@. | archive_zip.go:45:20:45:48 | call to PostFormValue | potentially untrusted source | -| archive_zip.go:67:37:67:38 | rc | archive_zip.go:45:20:45:48 | call to PostFormValue | archive_zip.go:67:37:67:38 | rc | This file extraction depends on a $@. | archive_zip.go:45:20:45:48 | call to PostFormValue | potentially untrusted source | -| archive_zip.go:96:26:96:34 | selection of Stdout | archive_zip.go:44:16:44:44 | call to PostFormValue | archive_zip.go:96:26:96:34 | selection of Stdout | This file extraction depends on a $@. | archive_zip.go:44:16:44:44 | call to PostFormValue | potentially untrusted source | -| archive_zip.go:96:37:96:38 | rc | archive_zip.go:44:16:44:44 | call to PostFormValue | archive_zip.go:96:37:96:38 | rc | This file extraction depends on a $@. | archive_zip.go:44:16:44:44 | call to PostFormValue | potentially untrusted source | -| archive_zip.go:126:24:126:33 | fileWriter | archive_zip.go:42:15:42:26 | selection of Body | archive_zip.go:126:24:126:33 | fileWriter | This file extraction depends on a $@. | archive_zip.go:42:15:42:26 | selection of Body | potentially untrusted source | -| archive_zip.go:126:36:126:51 | fileReaderCloser | archive_zip.go:42:15:42:26 | selection of Body | archive_zip.go:126:36:126:51 | fileReaderCloser | This file extraction depends on a $@. | archive_zip.go:42:15:42:26 | selection of Body | potentially untrusted source | -| archive_zip.go:153:3:153:7 | Bzip2 | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:153:3:153:7 | Bzip2 | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | -| archive_zip.go:160:3:160:7 | Flate | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:160:3:160:7 | Flate | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | -| archive_zip.go:187:3:187:6 | Zlib | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:187:3:187:6 | Zlib | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | -| archive_zip.go:219:3:219:10 | gzipRead | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:219:3:219:10 | gzipRead | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | -| archive_zip.go:263:2:263:8 | tarRead | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:263:2:263:8 | tarRead | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | -| archive_zip.go:263:2:263:8 | tarRead | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:263:2:263:8 | tarRead | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | -| archive_zip.go:263:2:263:8 | tarRead | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:263:2:263:8 | tarRead | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | -| archive_zip.go:263:2:263:8 | tarRead | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:263:2:263:8 | tarRead | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | -| archive_zip.go:273:25:273:31 | tarRead | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:273:25:273:31 | tarRead | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | -| archive_zip.go:273:25:273:31 | tarRead | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:273:25:273:31 | tarRead | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | -| archive_zip.go:273:25:273:31 | tarRead | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:273:25:273:31 | tarRead | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | -| archive_zip.go:273:25:273:31 | tarRead | archive_zip.go:41:18:41:29 | selection of Body | archive_zip.go:273:25:273:31 | tarRead | This file extraction depends on a $@. | archive_zip.go:41:18:41:29 | selection of Body | potentially untrusted source | +| archive_zip.go:82:37:82:38 | rc | archive_zip.go:60:20:60:48 | call to PostFormValue | archive_zip.go:82:37:82:38 | rc | This decompression is $@. | archive_zip.go:60:20:60:48 | call to PostFormValue | decompressing compressed data without managing output size | +| archive_zip.go:82:37:82:38 | rc | test.go:58:20:58:48 | call to PostFormValue | archive_zip.go:82:37:82:38 | rc | This decompression is $@. | test.go:58:20:58:48 | call to PostFormValue | decompressing compressed data without managing output size | +| archive_zip.go:102:23:102:28 | newSrc | archive_zip.go:62:17:62:28 | selection of Body | archive_zip.go:102:23:102:28 | newSrc | This decompression is $@. | archive_zip.go:62:17:62:28 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:102:23:102:28 | newSrc | test.go:60:17:60:28 | selection of Body | archive_zip.go:102:23:102:28 | newSrc | This decompression is $@. | test.go:60:17:60:28 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:111:37:111:38 | rc | archive_zip.go:59:16:59:46 | call to FormValue | archive_zip.go:111:37:111:38 | rc | This decompression is $@. | archive_zip.go:59:16:59:46 | call to FormValue | decompressing compressed data without managing output size | +| archive_zip.go:111:37:111:38 | rc | test.go:57:16:57:46 | call to FormValue | archive_zip.go:111:37:111:38 | rc | This decompression is $@. | test.go:57:16:57:46 | call to FormValue | decompressing compressed data without managing output size | +| archive_zip.go:141:36:141:51 | fileReaderCloser | archive_zip.go:57:15:57:26 | selection of Body | archive_zip.go:141:36:141:51 | fileReaderCloser | This decompression is $@. | archive_zip.go:57:15:57:26 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:141:36:141:51 | fileReaderCloser | test.go:55:15:55:26 | selection of Body | archive_zip.go:141:36:141:51 | fileReaderCloser | This decompression is $@. | test.go:55:15:55:26 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:153:36:153:51 | fileReaderCloser | archive_zip.go:58:16:58:27 | selection of Body | archive_zip.go:153:36:153:51 | fileReaderCloser | This decompression is $@. | archive_zip.go:58:16:58:27 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:153:36:153:51 | fileReaderCloser | test.go:56:16:56:27 | selection of Body | archive_zip.go:153:36:153:51 | fileReaderCloser | This decompression is $@. | test.go:56:16:56:27 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:170:3:170:12 | bzip2dsnet | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:170:3:170:12 | bzip2dsnet | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:170:3:170:12 | bzip2dsnet | test.go:54:18:54:29 | selection of Body | archive_zip.go:170:3:170:12 | bzip2dsnet | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:176:3:176:7 | Bzip2 | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:176:3:176:7 | Bzip2 | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:176:3:176:7 | Bzip2 | test.go:54:18:54:29 | selection of Body | archive_zip.go:176:3:176:7 | Bzip2 | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:183:3:183:7 | Flate | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:183:3:183:7 | Flate | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:183:3:183:7 | Flate | test.go:54:18:54:29 | selection of Body | archive_zip.go:183:3:183:7 | Flate | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:190:3:190:15 | zlibklauspost | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:190:3:190:15 | zlibklauspost | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:190:3:190:15 | zlibklauspost | test.go:54:18:54:29 | selection of Body | archive_zip.go:190:3:190:15 | zlibklauspost | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:196:3:196:12 | flatedsnet | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:196:3:196:12 | flatedsnet | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:196:3:196:12 | flatedsnet | test.go:54:18:54:29 | selection of Body | archive_zip.go:196:3:196:12 | flatedsnet | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:203:3:203:15 | zlibklauspost | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:203:3:203:15 | zlibklauspost | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:203:3:203:15 | zlibklauspost | test.go:54:18:54:29 | selection of Body | archive_zip.go:203:3:203:15 | zlibklauspost | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:210:3:210:6 | Zlib | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:210:3:210:6 | Zlib | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:210:3:210:6 | Zlib | test.go:54:18:54:29 | selection of Body | archive_zip.go:210:3:210:6 | Zlib | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:216:3:216:8 | Snappy | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:216:3:216:8 | Snappy | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:216:3:216:8 | Snappy | test.go:54:18:54:29 | selection of Body | archive_zip.go:216:3:216:8 | Snappy | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:217:3:217:8 | Snappy | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:217:3:217:8 | Snappy | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:217:3:217:8 | Snappy | test.go:54:18:54:29 | selection of Body | archive_zip.go:217:3:217:8 | Snappy | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:227:3:227:10 | s2Reader | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:227:3:227:10 | s2Reader | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:227:3:227:10 | s2Reader | test.go:54:18:54:29 | selection of Body | archive_zip.go:227:3:227:10 | s2Reader | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:229:3:229:10 | s2Reader | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:229:3:229:10 | s2Reader | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:229:3:229:10 | s2Reader | test.go:54:18:54:29 | selection of Body | archive_zip.go:229:3:229:10 | s2Reader | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:230:3:230:10 | s2Reader | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:230:3:230:10 | s2Reader | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:230:3:230:10 | s2Reader | test.go:54:18:54:29 | selection of Body | archive_zip.go:230:3:230:10 | s2Reader | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:236:3:236:4 | S2 | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:236:3:236:4 | S2 | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:236:3:236:4 | S2 | test.go:54:18:54:29 | selection of Body | archive_zip.go:236:3:236:4 | S2 | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:238:3:238:4 | S2 | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:238:3:238:4 | S2 | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:238:3:238:4 | S2 | test.go:54:18:54:29 | selection of Body | archive_zip.go:238:3:238:4 | S2 | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:246:3:246:10 | gzipRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:246:3:246:10 | gzipRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:246:3:246:10 | gzipRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:246:3:246:10 | gzipRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:252:3:252:15 | gzipklauspost | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:252:3:252:15 | gzipklauspost | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:252:3:252:15 | gzipklauspost | test.go:54:18:54:29 | selection of Body | archive_zip.go:252:3:252:15 | gzipklauspost | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:254:3:254:15 | gzipklauspost | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:254:3:254:15 | gzipklauspost | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:254:3:254:15 | gzipklauspost | test.go:54:18:54:29 | selection of Body | archive_zip.go:254:3:254:15 | gzipklauspost | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:261:3:261:11 | gzippgzip | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:261:3:261:11 | gzippgzip | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:261:3:261:11 | gzippgzip | test.go:54:18:54:29 | selection of Body | archive_zip.go:261:3:261:11 | gzippgzip | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:263:3:263:11 | gzippgzip | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:263:3:263:11 | gzippgzip | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:263:3:263:11 | gzippgzip | test.go:54:18:54:29 | selection of Body | archive_zip.go:263:3:263:11 | gzippgzip | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:269:3:269:6 | zstd | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:269:3:269:6 | zstd | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:269:3:269:6 | zstd | test.go:54:18:54:29 | selection of Body | archive_zip.go:269:3:269:6 | zstd | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:271:3:271:6 | zstd | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:271:3:271:6 | zstd | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:271:3:271:6 | zstd | test.go:54:18:54:29 | selection of Body | archive_zip.go:271:3:271:6 | zstd | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:273:3:273:6 | zstd | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:273:3:273:6 | zstd | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:273:3:273:6 | zstd | test.go:54:18:54:29 | selection of Body | archive_zip.go:273:3:273:6 | zstd | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:280:3:280:6 | zstd | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:280:3:280:6 | zstd | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:280:3:280:6 | zstd | test.go:54:18:54:29 | selection of Body | archive_zip.go:280:3:280:6 | zstd | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:286:3:286:8 | xzRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:286:3:286:8 | xzRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:286:3:286:8 | xzRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:286:3:286:8 | xzRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:290:2:290:8 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:290:2:290:8 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:290:2:290:8 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:290:2:290:8 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:290:2:290:8 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:290:2:290:8 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:290:2:290:8 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:290:2:290:8 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:290:2:290:8 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:290:2:290:8 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:290:2:290:8 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:290:2:290:8 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:290:2:290:8 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:290:2:290:8 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:290:2:290:8 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:290:2:290:8 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:300:25:300:31 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:300:25:300:31 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:300:25:300:31 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:300:25:300:31 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:300:25:300:31 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:300:25:300:31 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:300:25:300:31 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:300:25:300:31 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:300:25:300:31 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:300:25:300:31 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:300:25:300:31 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:300:25:300:31 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:300:25:300:31 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:300:25:300:31 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:300:25:300:31 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| archive_zip.go:300:25:300:31 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/archive_zip.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/archive_zip.go old mode 100755 new mode 100644 index 9c34b6356f3..eb7239f7313 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/archive_zip.go +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/archive_zip.go @@ -1,5 +1,19 @@ 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" @@ -20,9 +34,10 @@ import ( zipKlauspost "github.com/klauspost/compress/zip" zlibKlauspost "github.com/klauspost/compress/zlib" zstdKlauspost "github.com/klauspost/compress/zstd" - gzipPgzip "github.com/klauspost/pgzip" + pzipKlauspost "github.com/klauspost/pgzip" "github.com/ulikunitz/xz" "io" + "io/ioutil" "net/http" "os" "testing/fstest" @@ -41,7 +56,7 @@ func DecompressHandler(w http.ResponseWriter, request *http.Request) { TarDecompressor(request.Body, "gz") ZipNewReader(request.Body) ZipNewReader2(request.Body) - ZipOpenReader(request.PostFormValue("test")) + ZipOpenReader(request.FormValue("filepathba")) ZipOpenReaderSafe(request.PostFormValue("test")) GZipOpenReaderSafe(request.PostFormValue("test")) GZipsafeReader(request.Body, "dest") @@ -139,6 +154,14 @@ func ZipNewReader2(file io.Reader) { fmt.Print(result) } } +func serve(w http.ResponseWriter, r *http.Request) { + if r.Body != nil { + if data, err := ioutil.ReadAll(r.Body); err == nil { + fmt.Println(data) + } + } +} + func TarDecompressor(file io.Reader, compressionType string) { var tarRead *tar.Reader if compressionType == "bzip2Dsnet" { @@ -196,12 +219,16 @@ func TarDecompressor(file io.Reader, compressionType string) { } if compressionType == "snappyKlauspost" { snappyklauspost := snappyKlauspost.NewReader(file) + //snappyklauspost.Reader == s2.Reader + // depstubber didn't work, I'm doing following because of it: + s2Reader := s2.NewReader(file) + s2Reader = snappyklauspost var out []byte = make([]byte, 70) - snappyklauspost.Read(out) + s2Reader.Read(out) var buf bytes.Buffer - snappyklauspost.DecodeConcurrent(&buf, 2) - snappyklauspost.ReadByte() - tarRead = tar.NewReader(snappyklauspost) + s2Reader.DecodeConcurrent(&buf, 2) + s2Reader.ReadByte() + tarRead = tar.NewReader(s2Reader) } if compressionType == "s2" { S2 := s2.NewReader(file) @@ -227,9 +254,9 @@ func TarDecompressor(file io.Reader, compressionType string) { gzipklauspost.WriteTo(&buf) tarRead = tar.NewReader(gzipklauspost) } - if compressionType == "gzipPgzip" { + if compressionType == "pzipKlauspost" { //gzipPgzip.NewReaderN() - gzippgzip, _ := gzipPgzip.NewReader(file) + gzippgzip, _ := pzipKlauspost.NewReader(file) var out []byte = make([]byte, 70) gzippgzip.Read(out) var buf bytes.Buffer 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..fc5fffd0cf1 --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go @@ -0,0 +1,300 @@ +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 +import ( + "archive/tar" + "archive/zip" + "bytes" + "compress/bzip2" + "compress/flate" + "compress/gzip" + "compress/zlib" + "fmt" + zstdDataDog "github.com/DataDog/zstd" + 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" + zipKlauspost "github.com/klauspost/compress/zip" + zlibKlauspost "github.com/klauspost/compress/zlib" + zstdKlauspost "github.com/klauspost/compress/zstd" + gzipPgzip "github.com/klauspost/pgzip" + "github.com/ulikunitz/xz" + "io" + "io/ioutil" + "net/http" + "os" + "testing/fstest" +) + +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) { + TarDecompressor(request.Body, "gz") + ZipNewReader(request.Body) + ZipNewReader2(request.Body) + ZipOpenReader(request.FormValue("filepathba")) + ZipOpenReaderSafe(request.PostFormValue("test")) + GZipOpenReaderSafe(request.PostFormValue("test")) + GZipsafeReader(request.Body, "dest") +} + +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) + _, _ = 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) + if result == 0 { + _ = rc.Close() + break + } + totalBytes = totalBytes + result + if totalBytes > 1024*1024 { + fmt.Print(totalBytes) + break + } + } + } +} + +func GZipsafeReader(src io.Reader, dst string) { + gzipR, _ := gzip.NewReader(src) + dstF, _ := os.OpenFile(dst, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0755) + defer dstF.Close() + var newSrc io.Reader + newSrc = io.LimitReader(gzipR, 1024*1024*5) + _, _ = io.Copy(dstF, newSrc) +} + +func ZipOpenReader(filename string) { + // Open the zip file + r, _ := zip.OpenReader(filename) + for _, f := range r.File { + rc, _ := f.Open() + for { + result, _ := io.CopyN(os.Stdout, rc, 68) + if result == 0 { + _ = rc.Close() + break + } + fmt.Print(result) + _ = rc.Close() + } + } + rKlauspost, _ := zipKlauspost.OpenReader(filename) + for _, f := range rKlauspost.Reader.File { + rc, _ := f.Open() + for { + result, _ := io.CopyN(os.Stdout, rc, 68) + 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) + fmt.Print(result) + } +} + +func ZipNewReader2(file io.Reader) { + file2, _ := io.ReadAll(file) + zipReaderKlauspost, _ := zipKlauspost.NewReader(bytes.NewReader(file2), int64(32<<20)) + for _, file := range zipReaderKlauspost.File { + fileWriter := bytes.NewBuffer([]byte{}) + // file.OpenRaw() + fileReaderCloser, _ := file.Open() + result, _ := io.Copy(fileWriter, fileReaderCloser) + fmt.Print(result) + } +} +func serve(w http.ResponseWriter, r *http.Request) { + if r.Body != nil { + if data, err := ioutil.ReadAll(r.Body); err == nil { + fmt.Println(data) + } + } +} + +func TarDecompressor(file io.Reader, compressionType string) { + var tarRead *tar.Reader + if compressionType == "bzip2Dsnet" { + bzip2dsnet, _ := bzip2Dsnet.NewReader(file, &bzip2Dsnet.ReaderConfig{}) + var out []byte = make([]byte, 70) + bzip2dsnet.Read(out) + tarRead = tar.NewReader(bzip2dsnet) + } + if compressionType == "bzip2" { + Bzip2 := bzip2.NewReader(file) + var out []byte = make([]byte, 70) + Bzip2.Read(out) + tarRead = tar.NewReader(Bzip2) + } + if compressionType == "flate" { + //flate.NewReaderDict() + Flate := flate.NewReader(file) + var out []byte = make([]byte, 70) + Flate.Read(out) + tarRead = tar.NewReader(Flate) + } + if compressionType == "flateKlauspost" { + //flateKlauspost.NewReaderDict() + zlibklauspost := flateKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + zlibklauspost.Read(out) + tarRead = tar.NewReader(zlibklauspost) + } + if compressionType == "flateDsnet" { + flatedsnet, _ := flateDsnet.NewReader(file, &flateDsnet.ReaderConfig{}) + var out []byte = make([]byte, 70) + flatedsnet.Read(out) + tarRead = tar.NewReader(flatedsnet) + } + if compressionType == "zlibKlauspost" { + //zlibKlauspost.NewReaderDict() + zlibklauspost, _ := zlibKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + zlibklauspost.Read(out) + tarRead = tar.NewReader(zlibklauspost) + } + if compressionType == "zlib" { + //zlib.NewReaderDict() + Zlib, _ := zlib.NewReader(file) + var out []byte = make([]byte, 70) + Zlib.Read(out) + tarRead = tar.NewReader(Zlib) + } + if compressionType == "snappy" { + Snappy := snappy.NewReader(file) + var out []byte = make([]byte, 70) + Snappy.Read(out) + Snappy.ReadByte() + tarRead = tar.NewReader(Snappy) + } + // if compressionType == "snappyKlauspost" { + // snappyklauspost := snappyKlauspost.NewReader(file) + // //snappyKlauspost.Reader = s2.Reader but it seems that + // // depstubber don't work here: + // var out []byte = make([]byte, 70) + // snappyklauspost.Read(out) + // var buf bytes.Buffer + // snappyklauspost.DecodeConcurrent(&buf, 2) + // snappyklauspost.ReadByte() + // tarRead = tar.NewReader(snappyklauspost) + // } + if compressionType == "s2" { + S2 := s2.NewReader(file) + var out []byte = make([]byte, 70) + S2.Read(out) + var buf bytes.Buffer + S2.DecodeConcurrent(&buf, 2) + //S2.ReadSeeker() + //S2.ReadByte() + tarRead = tar.NewReader(S2) + } + if compressionType == "gz" { + gzipRead, _ := gzip.NewReader(file) + var out []byte = make([]byte, 70) + gzipRead.Read(out) + tarRead = tar.NewReader(gzipRead) + } + if compressionType == "gzipKlauspost" { + gzipklauspost, _ := gzipKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + gzipklauspost.Read(out) + var buf bytes.Buffer + gzipklauspost.WriteTo(&buf) + tarRead = tar.NewReader(gzipklauspost) + } + if compressionType == "gzipPgzip" { + //gzipPgzip.NewReaderN() + gzippgzip, _ := gzipPgzip.NewReader(file) + var out []byte = make([]byte, 70) + gzippgzip.Read(out) + var buf bytes.Buffer + gzippgzip.WriteTo(&buf) + tarRead = tar.NewReader(gzippgzip) + } + if compressionType == "zstd_Klauspost" { + zstd, _ := zstdKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + zstd.Read(out) + var buf bytes.Buffer + zstd.WriteTo(&buf) + var src []byte + zstd.DecodeAll(src, nil) + tarRead = tar.NewReader(zstd) + } + if compressionType == "zstd_DataDog" { + //zstdDataDog.NewReaderDict() + zstd := zstdDataDog.NewReader(file) + var out []byte = make([]byte, 70) + zstd.Read(out) + tarRead = tar.NewReader(zstd) + } + if compressionType == "xz" { + xzRead, _ := xz.NewReader(file) + var out []byte = make([]byte, 70) + xzRead.Read(out) + tarRead = tar.NewReader(xzRead) + } + var out []byte = make([]byte, 70) + tarRead.Read(out) + files := make(fstest.MapFS) + for { + cur, err := tarRead.Next() + if err == io.EOF { + break + } + if cur.Typeflag != tar.TypeReg { + continue + } + data, _ := io.ReadAll(tarRead) + files[cur.Name] = &fstest.MapFile{Data: data} + } + fmt.Print(files) +} diff --git a/go/vendor/github.com/DataDog/zstd/stub.go b/go/vendor/github.com/DataDog/zstd/stub.go new file mode 100644 index 00000000000..1551a6ebb1a --- /dev/null +++ b/go/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/vendor/github.com/dsnet/compress/bzip2/stub.go b/go/vendor/github.com/dsnet/compress/bzip2/stub.go new file mode 100644 index 00000000000..e51c66a76de --- /dev/null +++ b/go/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/vendor/github.com/dsnet/compress/flate/stub.go b/go/vendor/github.com/dsnet/compress/flate/stub.go new file mode 100644 index 00000000000..1130904695b --- /dev/null +++ b/go/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/vendor/github.com/golang/snappy/stub.go b/go/vendor/github.com/golang/snappy/stub.go new file mode 100644 index 00000000000..d7c0bcb6480 --- /dev/null +++ b/go/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/vendor/github.com/klauspost/compress/flate/stub.go b/go/vendor/github.com/klauspost/compress/flate/stub.go new file mode 100644 index 00000000000..971f4f06d49 --- /dev/null +++ b/go/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/vendor/github.com/klauspost/compress/gzip/stub.go b/go/vendor/github.com/klauspost/compress/gzip/stub.go new file mode 100644 index 00000000000..6590497526a --- /dev/null +++ b/go/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/vendor/github.com/klauspost/compress/s2/stub.go b/go/vendor/github.com/klauspost/compress/s2/stub.go new file mode 100644 index 00000000000..8e0ee2d1b62 --- /dev/null +++ b/go/vendor/github.com/klauspost/compress/s2/stub.go @@ -0,0 +1,92 @@ +// 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) GetBufferCapacity() int { + return 0 +} + +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) (int64, error) { + return 0, nil +} + +func (_ *Reader) GetBufferCapacity() int { + return 0 +} + +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/vendor/github.com/klauspost/compress/snappy/stub.go b/go/vendor/github.com/klauspost/compress/snappy/stub.go new file mode 100644 index 00000000000..cd6e5178fbf --- /dev/null +++ b/go/vendor/github.com/klauspost/compress/snappy/stub.go @@ -0,0 +1,16 @@ +// 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" +) + +func NewReader(_ io.Reader) interface{} { + return nil +} diff --git a/go/vendor/github.com/klauspost/compress/zip/stub.go b/go/vendor/github.com/klauspost/compress/zip/stub.go new file mode 100644 index 00000000000..a926861ba78 --- /dev/null +++ b/go/vendor/github.com/klauspost/compress/zip/stub.go @@ -0,0 +1,117 @@ +// 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" +) + +type Decompressor func(io.Reader) io.ReadCloser + +type File struct { + FileHeader FileHeader +} + +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 { + Reader 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/vendor/github.com/klauspost/compress/zlib/stub.go b/go/vendor/github.com/klauspost/compress/zlib/stub.go new file mode 100644 index 00000000000..29d59ab5e2b --- /dev/null +++ b/go/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/vendor/github.com/klauspost/compress/zstd/stub.go b/go/vendor/github.com/klauspost/compress/zstd/stub.go new file mode 100644 index 00000000000..7c0590a2778 --- /dev/null +++ b/go/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/vendor/github.com/klauspost/pgzip/stub.go b/go/vendor/github.com/klauspost/pgzip/stub.go new file mode 100644 index 00000000000..b7fb157d3fb --- /dev/null +++ b/go/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/vendor/github.com/ulikunitz/xz/stub.go b/go/vendor/github.com/ulikunitz/xz/stub.go new file mode 100644 index 00000000000..6a2780cd891 --- /dev/null +++ b/go/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/vendor/modules.txt b/go/vendor/modules.txt index 596bd8e8ae9..a012991d55c 100644 --- a/go/vendor/modules.txt +++ b/go/vendor/modules.txt @@ -1,27 +1,12 @@ # golang.org/x/mod v0.8.0 -## explicit; go 1.17 -golang.org/x/mod/internal/lazyregexp -golang.org/x/mod/modfile -golang.org/x/mod/module -golang.org/x/mod/semver -# golang.org/x/sys v0.5.0 -## explicit; go 1.17 -golang.org/x/sys/execabs +## explicit +golang.org/x/mod # golang.org/x/tools v0.6.0 -## explicit; go 1.18 -golang.org/x/tools/go/gcexportdata -golang.org/x/tools/go/internal/packagesdriver -golang.org/x/tools/go/packages -golang.org/x/tools/internal/event -golang.org/x/tools/internal/event/core -golang.org/x/tools/internal/event/keys -golang.org/x/tools/internal/event/label -golang.org/x/tools/internal/gcimporter -golang.org/x/tools/internal/gocommand -golang.org/x/tools/internal/packagesinternal -golang.org/x/tools/internal/pkgbits -golang.org/x/tools/internal/tokeninternal -golang.org/x/tools/internal/typeparams -golang.org/x/tools/internal/typesinternal +## explicit +golang.org/x/tools +# golang.org/x/sys v0.5.0 +## explicit +golang.org/x/sys # golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 -## explicit; go 1.11 +## explicit +golang.org/x/xerrors From 00d1b11b0b7ef3c6a7d6907a6b7cab146b980039 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Sun, 1 Oct 2023 02:45:51 +1000 Subject: [PATCH 021/430] chore fix document example --- .../experimental/CWE-522-DecompressionBombs/example_good.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/example_good.go b/go/ql/src/experimental/CWE-522-DecompressionBombs/example_good.go index 3c5bdb4b22e..63ed5f1de49 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/example_good.go +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/example_good.go @@ -15,6 +15,9 @@ func ZipOpenReader(filename string) { for { rc, _ := f.Open() result, _ := io.CopyN(os.Stdout, rc, 68) + if result == 0 { + break + } totalBytes = totalBytes + result if totalBytes > 1024*1024 { fmt.Print(totalBytes) From 31cae204f6cf8b3dcd69a8de8b910609322a9d66 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Fri, 6 Oct 2023 18:14:05 +0200 Subject: [PATCH 022/430] make DecompressionBombs module and extention points --- .../DecompressionBombs.ql | 181 +---- .../DecompressionBombs.qll | 697 ++++++++++++++++++ 2 files changed, 704 insertions(+), 174 deletions(-) create mode 100644 go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.qll diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index 58608440e01..7942325d65f 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -14,9 +14,10 @@ import go import semmle.go.dataflow.Properties import MultipartAndFormRemoteSource +import DecompressionBombs module DecompressionBombsConfig implements DataFlow::StateConfigSig { - class FlowState = DataFlow::FlowState; + class FlowState = DecompressionBombs::FlowState; predicate isSource(DataFlow::Node source, FlowState state) { source instanceof UntrustedFlowSource and @@ -24,60 +25,7 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { } predicate isSink(DataFlow::Node sink, FlowState state) { - ( - exists(Function f | f.hasQualifiedName("io", ["Copy", "CopyBuffer", "CopyN"]) | - sink = f.getACall().getArgument(1) - ) - or - exists(Function f | f.hasQualifiedName("io", ["Pipe", "ReadAll", "ReadAtLeast", "ReadFull"]) | - sink = f.getACall().getArgument(0) - ) - or - exists(Function f | - f.hasQualifiedName("bufio.Reader", - ["Read", "ReadBytes", "ReadByte", "ReadLine", "ReadRune", "ReadSlice", "ReadString"]) - | - sink = f.getACall().getReceiver() - ) - or - exists(Function f | f.hasQualifiedName("bufio.Scanner", ["Text", "Bytes"]) | - sink = f.getACall().getReceiver() - ) - or - exists(Function f | f.hasQualifiedName("io/ioutil", "ReadAll") | - sink = f.getACall().getArgument(0) - ) - or - exists(Function f | - f.hasQualifiedName([ - "github.com/klauspost/compress/flate.decompressor", - "github.com/dsnet/compress/bzip2.Reader", "compress/flate.decompressor", - "github.com/dsnet/compress/flate.Reader", "github.com/klauspost/compress/zlib.reader", - "compress/zlib.reader", "github.com/golang/snappy.Reader", - "github.com/klauspost/compress/s2.Reader", "github.com/klauspost/compress/gzip.Reader", - "github.com/klauspost/pgzip.Reader", "github.com/klauspost/compress/zstd.Decoder", - "github.com/DataDog/zstd.reader", "compress/gzip.Reader", - "github.com/ulikunitz/xz.Reader", "archive/tar.Reader", "compress/bzip2.reader" - ], "Read") - | - sink = f.getACall().getReceiver() - ) - or - exists(Function f | - f.hasQualifiedName("github.com/klauspost/compress/s2.Reader", - ["DecodeConcurrent", "ReadByte"]) - or - f.hasQualifiedName("github.com/golang/snappy.Reader", "ReadByte") - or - f.hasQualifiedName("github.com/klauspost/compress/gzip.Reader", "WriteTo") - or - f.hasQualifiedName("github.com/klauspost/pgzip.Reader", "WriteTo") - or - f.hasQualifiedName("github.com/klauspost/compress/zstd.Decoder", ["WriteTo", "DecodeAll"]) - | - sink = f.getACall().getReceiver() - ) - ) and + sink instanceof DecompressionBombs::Sink and state = [ "ZstdNewReader", "XzNewReader", "GzipNewReader", "S2NewReader", "SnapyNewReader", @@ -86,131 +34,16 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { } 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 f, DataFlow::CallNode call | - f.hasQualifiedName("github.com/klauspost/compress/zip", "File", ["Open", "OpenRaw"]) and - call = f.getACall() - | - fromNode = call.getReceiver() and - toNode = call + exists(DecompressionBombs::AdditionalTaintStep addStep | + addStep.isAdditionalFlowStep(fromNode, toNode) ) } 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" - ) - or - 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" - ) - or - 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" - ) - or - exists(Function f, DataFlow::CallNode call | - f.hasQualifiedName([ - "compress/gzip", "github.com/klauspost/compress/gzip", "github.com/klauspost/pgzip" - ], "NewReader") and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "GzipNewReader" - ) - or - exists(Function f, DataFlow::CallNode call | - f.hasQualifiedName([ - "compress/bzip2", "github.com/dsnet/compress/bzip2", "github.com/cosnicolaou/pbzip2" - ], "NewReader") and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "Bzip2NewReader" - ) - or - exists(Function f, DataFlow::CallNode call | - ( - f.hasQualifiedName("github.com/dsnet/compress/flate", "NewReader") or - f.hasQualifiedName(["compress/flate", "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" - ) - or - exists(Function f, DataFlow::CallNode call | - f.hasQualifiedName(["compress/zlib", "github.com/klauspost/compress/zlib"], "NewReader") and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "ZlibNewReader" - ) - or - exists(Function f, DataFlow::CallNode call | - f.hasQualifiedName(["github.com/klauspost/compress/zstd", "github.com/DataDog/zstd"], - "NewReader") and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "ZstdNewReader" - ) - or - exists(Function f, DataFlow::CallNode call | - f.hasQualifiedName(["github.com/golang/snappy", "github.com/klauspost/compress/snappy"], - "NewReader") and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "SnapyNewReader" - ) - or - 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" + exists(DecompressionBombs::AdditionalTaintStep addStep | + addStep.isAdditionalFlowStep(fromNode, fromState, toNode, toState) ) } diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.qll b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.qll new file mode 100644 index 00000000000..2e3ca1f5dd7 --- /dev/null +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.qll @@ -0,0 +1,697 @@ +import go + +module DecompressionBombs { + class FlowState = DataFlow::FlowState; + + /** + * the Sinks of uncontrolled data decompression + */ + class Sink extends DataFlow::Node { + Sink() { this = any(Range r).sink() } + } + + /** + * 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. + */ + abstract predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode); + + /** + * 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 + ); + } + + /** + * A abstract class responsible for extending new decompression sinks + */ + abstract private class Range extends DataFlow::Node { + /** + * Gets the sink of responsible for decompression node + * + * it can be a path, stream of compressed data, + * or a call to function that use pipe + */ + abstract DataFlow::Node sink(); + } + + module DataDogZstd { + class TheSink extends Range { + TheSink() { + exists(Method f | + f.hasQualifiedName("github.com/klauspost/compress/zstd", "Decoder", "Read") + | + this = f.getACall().getReceiver() + ) + } + + override DataFlow::Node sink() { result = this } + } + + 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" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + module KlauspostZstd { + class TheSink extends Range { + TheSink() { + exists(Method f | + f.hasQualifiedName("github.com/klauspost/compress/zstd", "Decoder", + ["WriteTo", "DecodeAll"]) + | + this = f.getACall().getReceiver() + ) + or + exists(Method f | + f.hasQualifiedName("github.com/klauspost/compress/zstd", "Decoder", "Read") + | + this = f.getACall().getReceiver() + ) + } + + override DataFlow::Node sink() { result = this } + } + + 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" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + module ArchiveZip { + 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" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + module KlauspostZip { + class TheSink extends Range { + TheSink() { + exists(Method f | + f.hasQualifiedName("github.com/klauspost/compress/zstd", "Decoder", + ["WriteTo", "DecodeAll"]) + | + this = f.getACall().getReceiver() + ) + or + exists(Method f | + f.hasQualifiedName("github.com/klauspost/compress/zstd", "Decoder", "Read") + | + this = f.getACall().getReceiver() + ) + } + + override DataFlow::Node sink() { result = this } + } + + 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 f, DataFlow::CallNode call | + f.hasQualifiedName("github.com/klauspost/compress/zip", "File", ["Open", "OpenRaw"]) and + call = f.getACall() + | + fromNode = call.getReceiver() and + toNode = call + ) + } + } + } + + module UlikunitzXz { + class TheSink extends Range { + TheSink() { + exists(Method f | f.hasQualifiedName("github.com/ulikunitz/xz", "Reader", "Read") | + this = f.getACall().getReceiver() + ) + } + + override DataFlow::Node sink() { result = this } + } + + 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" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + module CompressGzip { + class TheSink extends Range { + TheSink() { + exists(Method f | f.hasQualifiedName("compress/gzip", "Reader", "Read") | + this = f.getACall().getReceiver() + ) + } + + override DataFlow::Node sink() { result = this } + } + + 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" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + module KlauspostGzip { + class TheSink extends Range { + TheSink() { + exists(Method f | + f.hasQualifiedName("github.com/klauspost/compress/gzip", "Reader", "Read") + | + this = f.getACall().getReceiver() + ) + or + exists(Method f | + f.hasQualifiedName(["github.com/klauspost/compress/gzip", "github.com/klauspost/pgzip"], + "Reader", "WriteTo") + | + this = f.getACall().getReceiver() + ) + } + + override DataFlow::Node sink() { result = this } + } + + 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", "github.com/klauspost/pgzip"], + "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "GzipNewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + module CompressBzip2 { + class TheSink extends Range { + TheSink() { + exists(Method f | f.hasQualifiedName("compress/bzip2", "reader", "Read") | + this = f.getACall().getReceiver() + ) + } + + override DataFlow::Node sink() { result = this } + } + + 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" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + module DsnetBzip2 { + class TheSink extends Range { + TheSink() { + exists(Method f | f.hasQualifiedName("github.com/dsnet/compress/bzip2", "Reader", "Read") | + this = f.getACall().getReceiver() + ) + } + + override DataFlow::Node sink() { result = this } + } + + 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" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + module DsnetFlate { + class TheSink extends Range { + TheSink() { + exists(Method f | f.hasQualifiedName("github.com/dsnet/compress/flate", "Reader", "Read") | + this = f.getACall().getReceiver() + ) + } + + override DataFlow::Node sink() { result = this } + } + + 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" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + module CompressFlate { + class TheSink extends Range { + TheSink() { + exists(Method f | f.hasQualifiedName("compress/flate", "decompressor", "Read") | + this = f.getACall().getReceiver() + ) + } + + override DataFlow::Node sink() { result = this } + } + + 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" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + module KlauspostFlate { + class TheSink extends Range { + TheSink() { + exists(Method f | + f.hasQualifiedName("github.com/klauspost/compress/flate", "decompressor", "Read") + | + this = f.getACall().getReceiver() + ) + } + + override DataFlow::Node sink() { result = this } + } + + 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" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + module KlauspostZlib { + class TheSink extends Range { + TheSink() { + exists(Method f | + f.hasQualifiedName("github.com/klauspost/compress/zlib", "reader", "Read") + | + this = f.getACall().getReceiver() + ) + } + + override DataFlow::Node sink() { result = this } + } + + 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" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + module CompressZlib { + class TheSink extends Range { + TheSink() { + exists(Method f | f.hasQualifiedName("compress/zlib", "reader", "Read") | + this = f.getACall().getReceiver() + ) + } + + override DataFlow::Node sink() { result = this } + } + + 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" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + module GolangSnappy { + class TheSink extends Range { + TheSink() { + exists(Method f | + f.hasQualifiedName("github.com/golang/snappy", "Reader", ["Read", "ReadByte"]) + | + this = f.getACall().getReceiver() + ) + } + + override DataFlow::Node sink() { result = this } + } + + 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 = "SnapyNewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + 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 = "SnapyNewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + module KlauspostS2 { + class TheSink extends Range { + TheSink() { + exists(Function f | + f.hasQualifiedName("github.com/klauspost/compress/s2.Reader", + ["DecodeConcurrent", "ReadByte", "Read"]) + | + this = f.getACall().getReceiver() + ) + } + + override DataFlow::Node sink() { result = this } + } + + 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" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + module ArchiveTar { + class TheSink extends Range { + TheSink() { + exists(Method f | f.hasQualifiedName("archive/tar", "Reader", "Read") | + this = f.getACall().getReceiver() + ) + } + + override DataFlow::Node sink() { result = this } + } + } + + module GeneralReadIoSink { + class TheSink extends Range { + TheSink() { + exists(Function f | f.hasQualifiedName("io", ["Copy", "CopyBuffer", "CopyN"]) | + this = f.getACall().getArgument(1) + ) + or + exists(Function f | + f.hasQualifiedName("io", ["Pipe", "ReadAll", "ReadAtLeast", "ReadFull"]) + | + this = f.getACall().getArgument(0) + ) + or + exists(Method f | + f.hasQualifiedName("bufio", "Reader", + ["Read", "ReadBytes", "ReadByte", "ReadLine", "ReadRune", "ReadSlice", "ReadString"]) + | + this = f.getACall().getReceiver() + ) + or + exists(Method f | f.hasQualifiedName("bufio", "Scanner", ["Text", "Bytes"]) | + this = f.getACall().getReceiver() + ) + or + exists(Function f | f.hasQualifiedName("io/ioutil", "ReadAll") | + this = f.getACall().getArgument(0) + ) + } + + override DataFlow::Node sink() { result = this } + } + } +} From d4b2ca5cee98e6c4b8aeadff35e44ec436a11be5 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Fri, 6 Oct 2023 19:34:13 +0200 Subject: [PATCH 023/430] add vendor for tests, update test results, revert go/vendor/modules.txt :( --- .../DecompressionBombs.expected | 745 ++++++++---------- .../CWE-522-DecompressionBombs/archive_zip.go | 304 ------- .../CWE-522-DecompressionBombs/test.go | 44 +- .../github.com/dsnet/compress/bzip2/stub.go | 35 + go/vendor/modules.txt | 41 +- 5 files changed, 431 insertions(+), 738 deletions(-) delete mode 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/archive_zip.go create mode 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/dsnet/compress/bzip2/stub.go diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected index cc477a088ee..fd4db0c87ac 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -1,406 +1,347 @@ +WARNING: Reference to DecompressionBombs references a local library, not the named module. (/home/am/CodeQL-home/codeql-repo-amammad/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql:17,8-26) edges -| archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:165:22:165:25 | definition of file | -| archive_zip.go:57:15:57:26 | selection of Body | archive_zip.go:135:19:135:22 | definition of file | -| archive_zip.go:58:16:58:27 | selection of Body | archive_zip.go:146:20:146:23 | definition of file | -| archive_zip.go:59:16:59:46 | call to FormValue | archive_zip.go:105:20:105:27 | definition of filename | -| archive_zip.go:60:20:60:48 | call to PostFormValue | archive_zip.go:76:24:76:31 | definition of filename | -| archive_zip.go:62:17:62:28 | selection of Body | archive_zip.go:96:21:96:23 | definition of src | -| archive_zip.go:76:24:76:31 | definition of filename | archive_zip.go:77:25:77:32 | filename | -| archive_zip.go:77:2:77:33 | ... := ...[0] | archive_zip.go:80:12:80:12 | f | -| archive_zip.go:77:25:77:32 | filename | archive_zip.go:77:2:77:33 | ... := ...[0] | -| archive_zip.go:80:3:80:19 | ... := ...[0] | archive_zip.go:82:37:82:38 | rc | -| archive_zip.go:80:12:80:12 | f | archive_zip.go:80:3:80:19 | ... := ...[0] | -| archive_zip.go:96:21:96:23 | definition of src | archive_zip.go:97:29:97:31 | src | -| archive_zip.go:97:2:97:32 | ... := ...[0] | archive_zip.go:101:26:101:30 | gzipR | -| archive_zip.go:97:29:97:31 | src | archive_zip.go:97:2:97:32 | ... := ...[0] | -| archive_zip.go:101:11:101:44 | call to LimitReader | archive_zip.go:102:23:102:28 | newSrc | -| archive_zip.go:101:26:101:30 | gzipR | archive_zip.go:101:11:101:44 | call to LimitReader | -| archive_zip.go:105:20:105:27 | definition of filename | archive_zip.go:107:25:107:32 | filename | -| archive_zip.go:107:2:107:33 | ... := ...[0] | archive_zip.go:109:12:109:12 | f | -| archive_zip.go:107:25:107:32 | filename | archive_zip.go:107:2:107:33 | ... := ...[0] | -| archive_zip.go:109:3:109:19 | ... := ...[0] | archive_zip.go:111:37:111:38 | rc | -| archive_zip.go:109:12:109:12 | f | archive_zip.go:109:3:109:19 | ... := ...[0] | -| archive_zip.go:135:19:135:22 | definition of file | archive_zip.go:136:25:136:28 | file | -| archive_zip.go:136:2:136:29 | ... := ...[0] | archive_zip.go:137:48:137:52 | file1 | -| archive_zip.go:136:25:136:28 | file | archive_zip.go:136:2:136:29 | ... := ...[0] | -| archive_zip.go:137:2:137:69 | ... := ...[0] | archive_zip.go:140:26:140:29 | file | -| archive_zip.go:137:32:137:53 | call to NewReader | archive_zip.go:137:2:137:69 | ... := ...[0] | -| archive_zip.go:137:48:137:52 | file1 | archive_zip.go:137:32:137:53 | call to NewReader | -| archive_zip.go:140:3:140:36 | ... := ...[0] | archive_zip.go:141:36:141:51 | fileReaderCloser | -| archive_zip.go:140:26:140:29 | file | archive_zip.go:140:3:140:36 | ... := ...[0] | -| archive_zip.go:146:20:146:23 | definition of file | archive_zip.go:147:25:147:28 | file | -| archive_zip.go:147:2:147:29 | ... := ...[0] | archive_zip.go:148:66:148:70 | file2 | -| archive_zip.go:147:25:147:28 | file | archive_zip.go:147:2:147:29 | ... := ...[0] | -| archive_zip.go:148:2:148:87 | ... := ...[0] | archive_zip.go:153:36:153:51 | fileReaderCloser | -| archive_zip.go:148:50:148:71 | call to NewReader | archive_zip.go:148:2:148:87 | ... := ...[0] | -| archive_zip.go:148:66:148:70 | file2 | archive_zip.go:148:50:148:71 | call to NewReader | -| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:168:41:168:44 | file | -| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:174:28:174:31 | file | -| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:181:28:181:31 | file | -| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:188:45:188:48 | file | -| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:194:41:194:44 | file | -| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:201:47:201:50 | file | -| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:208:29:208:32 | file | -| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:214:30:214:33 | file | -| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:221:48:221:51 | file | -| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:234:22:234:25 | file | -| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:244:33:244:36 | file | -| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:250:47:250:50 | file | -| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:259:43:259:46 | file | -| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:267:38:267:41 | file | -| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:278:33:278:36 | file | -| archive_zip.go:165:22:165:25 | definition of file | archive_zip.go:284:29:284:32 | file | -| archive_zip.go:168:3:168:73 | ... := ...[0] | archive_zip.go:170:3:170:12 | bzip2dsnet | -| archive_zip.go:168:3:168:73 | ... := ...[0] | archive_zip.go:171:27:171:36 | bzip2dsnet | -| archive_zip.go:168:41:168:44 | file | archive_zip.go:168:3:168:73 | ... := ...[0] | -| archive_zip.go:171:13:171:37 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | -| archive_zip.go:171:13:171:37 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | -| archive_zip.go:171:27:171:36 | bzip2dsnet | archive_zip.go:171:13:171:37 | call to NewReader | -| archive_zip.go:174:12:174:32 | call to NewReader | archive_zip.go:176:3:176:7 | Bzip2 | -| archive_zip.go:174:12:174:32 | call to NewReader | archive_zip.go:177:27:177:31 | Bzip2 | -| archive_zip.go:174:28:174:31 | file | archive_zip.go:174:12:174:32 | call to NewReader | -| archive_zip.go:177:13:177:32 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | -| archive_zip.go:177:13:177:32 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | -| archive_zip.go:177:27:177:31 | Bzip2 | archive_zip.go:177:13:177:32 | call to NewReader | -| archive_zip.go:181:12:181:32 | call to NewReader | archive_zip.go:183:3:183:7 | Flate | -| archive_zip.go:181:12:181:32 | call to NewReader | archive_zip.go:184:27:184:31 | Flate | -| archive_zip.go:181:28:181:31 | file | archive_zip.go:181:12:181:32 | call to NewReader | -| archive_zip.go:184:13:184:32 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | -| archive_zip.go:184:13:184:32 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | -| archive_zip.go:184:27:184:31 | Flate | archive_zip.go:184:13:184:32 | call to NewReader | -| archive_zip.go:188:20:188:49 | call to NewReader | archive_zip.go:190:3:190:15 | zlibklauspost | -| archive_zip.go:188:20:188:49 | call to NewReader | archive_zip.go:191:27:191:39 | zlibklauspost | -| archive_zip.go:188:45:188:48 | file | archive_zip.go:188:20:188:49 | call to NewReader | -| archive_zip.go:191:13:191:40 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | -| archive_zip.go:191:13:191:40 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | -| archive_zip.go:191:27:191:39 | zlibklauspost | archive_zip.go:191:13:191:40 | call to NewReader | -| archive_zip.go:194:3:194:73 | ... := ...[0] | archive_zip.go:196:3:196:12 | flatedsnet | -| archive_zip.go:194:3:194:73 | ... := ...[0] | archive_zip.go:197:27:197:36 | flatedsnet | -| archive_zip.go:194:41:194:44 | file | archive_zip.go:194:3:194:73 | ... := ...[0] | -| archive_zip.go:197:13:197:37 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | -| archive_zip.go:197:13:197:37 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | -| archive_zip.go:197:27:197:36 | flatedsnet | archive_zip.go:197:13:197:37 | call to NewReader | -| archive_zip.go:201:3:201:51 | ... := ...[0] | archive_zip.go:203:3:203:15 | zlibklauspost | -| archive_zip.go:201:3:201:51 | ... := ...[0] | archive_zip.go:204:27:204:39 | zlibklauspost | -| archive_zip.go:201:47:201:50 | file | archive_zip.go:201:3:201:51 | ... := ...[0] | -| archive_zip.go:204:13:204:40 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | -| archive_zip.go:204:13:204:40 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | -| archive_zip.go:204:27:204:39 | zlibklauspost | archive_zip.go:204:13:204:40 | call to NewReader | -| archive_zip.go:208:3:208:33 | ... := ...[0] | archive_zip.go:210:3:210:6 | Zlib | -| archive_zip.go:208:3:208:33 | ... := ...[0] | archive_zip.go:211:27:211:30 | Zlib | -| archive_zip.go:208:29:208:32 | file | archive_zip.go:208:3:208:33 | ... := ...[0] | -| archive_zip.go:211:13:211:31 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | -| archive_zip.go:211:13:211:31 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | -| archive_zip.go:211:27:211:30 | Zlib | archive_zip.go:211:13:211:31 | call to NewReader | -| archive_zip.go:214:13:214:34 | call to NewReader | archive_zip.go:216:3:216:8 | Snappy | -| archive_zip.go:214:13:214:34 | call to NewReader | archive_zip.go:217:3:217:8 | Snappy | -| archive_zip.go:214:13:214:34 | call to NewReader | archive_zip.go:218:27:218:32 | Snappy | -| archive_zip.go:214:30:214:33 | file | archive_zip.go:214:13:214:34 | call to NewReader | -| archive_zip.go:218:13:218:33 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | -| archive_zip.go:218:13:218:33 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | -| archive_zip.go:218:27:218:32 | Snappy | archive_zip.go:218:13:218:33 | call to NewReader | -| archive_zip.go:221:22:221:52 | call to NewReader | archive_zip.go:227:3:227:10 | s2Reader | -| archive_zip.go:221:22:221:52 | call to NewReader | archive_zip.go:229:3:229:10 | s2Reader | -| archive_zip.go:221:22:221:52 | call to NewReader | archive_zip.go:230:3:230:10 | s2Reader | -| archive_zip.go:221:22:221:52 | call to NewReader | archive_zip.go:231:27:231:34 | s2Reader | -| archive_zip.go:221:48:221:51 | file | archive_zip.go:221:22:221:52 | call to NewReader | -| archive_zip.go:231:13:231:35 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | -| archive_zip.go:231:13:231:35 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | -| archive_zip.go:231:27:231:34 | s2Reader | archive_zip.go:231:13:231:35 | call to NewReader | -| archive_zip.go:234:9:234:26 | call to NewReader | archive_zip.go:236:3:236:4 | S2 | -| archive_zip.go:234:9:234:26 | call to NewReader | archive_zip.go:238:3:238:4 | S2 | -| archive_zip.go:234:9:234:26 | call to NewReader | archive_zip.go:241:27:241:28 | S2 | -| archive_zip.go:234:22:234:25 | file | archive_zip.go:234:9:234:26 | call to NewReader | -| archive_zip.go:241:13:241:29 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | -| archive_zip.go:241:13:241:29 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | -| archive_zip.go:241:27:241:28 | S2 | archive_zip.go:241:13:241:29 | call to NewReader | -| archive_zip.go:244:3:244:37 | ... := ...[0] | archive_zip.go:246:3:246:10 | gzipRead | -| archive_zip.go:244:3:244:37 | ... := ...[0] | archive_zip.go:247:27:247:34 | gzipRead | -| archive_zip.go:244:33:244:36 | file | archive_zip.go:244:3:244:37 | ... := ...[0] | -| archive_zip.go:247:13:247:35 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | -| archive_zip.go:247:13:247:35 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | -| archive_zip.go:247:27:247:34 | gzipRead | archive_zip.go:247:13:247:35 | call to NewReader | -| archive_zip.go:250:3:250:51 | ... := ...[0] | archive_zip.go:252:3:252:15 | gzipklauspost | -| archive_zip.go:250:3:250:51 | ... := ...[0] | archive_zip.go:254:3:254:15 | gzipklauspost | -| archive_zip.go:250:3:250:51 | ... := ...[0] | archive_zip.go:255:27:255:39 | gzipklauspost | -| archive_zip.go:250:47:250:50 | file | archive_zip.go:250:3:250:51 | ... := ...[0] | -| archive_zip.go:255:13:255:40 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | -| archive_zip.go:255:13:255:40 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | -| archive_zip.go:255:27:255:39 | gzipklauspost | archive_zip.go:255:13:255:40 | call to NewReader | -| archive_zip.go:259:3:259:47 | ... := ...[0] | archive_zip.go:261:3:261:11 | gzippgzip | -| archive_zip.go:259:3:259:47 | ... := ...[0] | archive_zip.go:263:3:263:11 | gzippgzip | -| archive_zip.go:259:3:259:47 | ... := ...[0] | archive_zip.go:264:27:264:35 | gzippgzip | -| archive_zip.go:259:43:259:46 | file | archive_zip.go:259:3:259:47 | ... := ...[0] | -| archive_zip.go:264:13:264:36 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | -| archive_zip.go:264:13:264:36 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | -| archive_zip.go:264:27:264:35 | gzippgzip | archive_zip.go:264:13:264:36 | call to NewReader | -| archive_zip.go:267:3:267:42 | ... := ...[0] | archive_zip.go:269:3:269:6 | zstd | -| archive_zip.go:267:3:267:42 | ... := ...[0] | archive_zip.go:271:3:271:6 | zstd | -| archive_zip.go:267:3:267:42 | ... := ...[0] | archive_zip.go:273:3:273:6 | zstd | -| archive_zip.go:267:3:267:42 | ... := ...[0] | archive_zip.go:274:27:274:30 | zstd | -| archive_zip.go:267:38:267:41 | file | archive_zip.go:267:3:267:42 | ... := ...[0] | -| archive_zip.go:274:13:274:31 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | -| archive_zip.go:274:13:274:31 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | -| archive_zip.go:274:27:274:30 | zstd | archive_zip.go:274:13:274:31 | call to NewReader | -| archive_zip.go:278:11:278:37 | call to NewReader | archive_zip.go:280:3:280:6 | zstd | -| archive_zip.go:278:11:278:37 | call to NewReader | archive_zip.go:281:27:281:30 | zstd | -| archive_zip.go:278:33:278:36 | file | archive_zip.go:278:11:278:37 | call to NewReader | -| archive_zip.go:281:13:281:31 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | -| archive_zip.go:281:13:281:31 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | -| archive_zip.go:281:27:281:30 | zstd | archive_zip.go:281:13:281:31 | call to NewReader | -| archive_zip.go:284:3:284:33 | ... := ...[0] | archive_zip.go:286:3:286:8 | xzRead | -| archive_zip.go:284:3:284:33 | ... := ...[0] | archive_zip.go:287:27:287:32 | xzRead | -| archive_zip.go:284:29:284:32 | file | archive_zip.go:284:3:284:33 | ... := ...[0] | -| archive_zip.go:287:13:287:33 | call to NewReader | archive_zip.go:290:2:290:8 | tarRead | -| archive_zip.go:287:13:287:33 | call to NewReader | archive_zip.go:300:25:300:31 | tarRead | -| archive_zip.go:287:27:287:32 | xzRead | archive_zip.go:287:13:287:33 | call to NewReader | -| test.go:54:18:54:29 | selection of Body | archive_zip.go:165:22:165:25 | definition of file | -| test.go:55:15:55:26 | selection of Body | archive_zip.go:135:19:135:22 | definition of file | -| test.go:56:16:56:27 | selection of Body | archive_zip.go:146:20:146:23 | definition of file | -| test.go:57:16:57:46 | call to FormValue | archive_zip.go:105:20:105:27 | definition of filename | -| test.go:58:20:58:48 | call to PostFormValue | archive_zip.go:76:24:76:31 | definition of filename | -| test.go:60:17:60:28 | selection of Body | archive_zip.go:96:21:96:23 | definition of src | +| test.go:56:18:56:29 | selection of Body | test.go:165:22:165:25 | definition of file | +| test.go:57:15:57:26 | selection of Body | test.go:135:19:135:22 | definition of file | +| test.go:58:16:58:27 | selection of Body | test.go:146:20:146:23 | definition of file | +| test.go:59:16:59:46 | call to FormValue | test.go:105:20:105:27 | definition of filename | +| test.go:60:20:60:48 | call to PostFormValue | test.go:76:24:76:31 | definition of filename | +| test.go:62:17:62:28 | selection of Body | test.go:96:21:96:23 | definition of src | +| test.go:76:24:76:31 | definition of filename | test.go:77:25:77:32 | filename | +| test.go:77:2:77:33 | ... := ...[0] | test.go:80:12:80:12 | f | +| test.go:77:25:77:32 | filename | test.go:77:2:77:33 | ... := ...[0] | +| test.go:80:3:80:19 | ... := ...[0] | test.go:82:37:82:38 | rc | +| test.go:80:12:80:12 | f | test.go:80:3:80:19 | ... := ...[0] | +| test.go:96:21:96:23 | definition of src | test.go:97:29:97:31 | src | +| test.go:97:2:97:32 | ... := ...[0] | test.go:101:26:101:30 | gzipR | +| test.go:97:29:97:31 | src | test.go:97:2:97:32 | ... := ...[0] | +| test.go:101:11:101:44 | call to LimitReader | test.go:102:23:102:28 | newSrc | +| test.go:101:26:101:30 | gzipR | test.go:101:11:101:44 | call to LimitReader | +| test.go:105:20:105:27 | definition of filename | test.go:107:25:107:32 | filename | +| test.go:107:2:107:33 | ... := ...[0] | test.go:109:12:109:12 | f | +| test.go:107:25:107:32 | filename | test.go:107:2:107:33 | ... := ...[0] | +| test.go:109:3:109:19 | ... := ...[0] | test.go:111:37:111:38 | rc | +| test.go:109:12:109:12 | f | test.go:109:3:109:19 | ... := ...[0] | +| test.go:135:19:135:22 | definition of file | test.go:136:25:136:28 | file | +| test.go:136:2:136:29 | ... := ...[0] | test.go:137:48:137:52 | file1 | +| test.go:136:25:136:28 | file | test.go:136:2:136:29 | ... := ...[0] | +| test.go:137:2:137:69 | ... := ...[0] | test.go:140:26:140:29 | file | +| test.go:137:32:137:53 | call to NewReader | test.go:137:2:137:69 | ... := ...[0] | +| test.go:137:48:137:52 | file1 | test.go:137:32:137:53 | call to NewReader | +| test.go:140:3:140:36 | ... := ...[0] | test.go:141:36:141:51 | fileReaderCloser | +| test.go:140:26:140:29 | file | test.go:140:3:140:36 | ... := ...[0] | +| test.go:146:20:146:23 | definition of file | test.go:147:25:147:28 | file | +| test.go:147:2:147:29 | ... := ...[0] | test.go:148:66:148:70 | file2 | +| test.go:147:25:147:28 | file | test.go:147:2:147:29 | ... := ...[0] | +| test.go:148:2:148:87 | ... := ...[0] | test.go:153:36:153:51 | fileReaderCloser | +| test.go:148:50:148:71 | call to NewReader | test.go:148:2:148:87 | ... := ...[0] | +| test.go:148:66:148:70 | file2 | test.go:148:50:148:71 | call to NewReader | +| test.go:165:22:165:25 | definition of file | test.go:168:41:168:44 | file | +| test.go:165:22:165:25 | definition of file | test.go:174:28:174:31 | file | +| test.go:165:22:165:25 | definition of file | test.go:181:28:181:31 | file | +| test.go:165:22:165:25 | definition of file | test.go:188:45:188:48 | file | +| test.go:165:22:165:25 | definition of file | test.go:194:41:194:44 | file | +| test.go:165:22:165:25 | definition of file | test.go:201:47:201:50 | file | +| test.go:165:22:165:25 | definition of file | test.go:208:29:208:32 | file | +| test.go:165:22:165:25 | definition of file | test.go:214:30:214:33 | file | +| test.go:165:22:165:25 | definition of file | test.go:221:48:221:51 | file | +| test.go:165:22:165:25 | definition of file | test.go:234:22:234:25 | file | +| test.go:165:22:165:25 | definition of file | test.go:244:33:244:36 | file | +| test.go:165:22:165:25 | definition of file | test.go:250:47:250:50 | file | +| test.go:165:22:165:25 | definition of file | test.go:259:43:259:46 | file | +| test.go:165:22:165:25 | definition of file | test.go:267:38:267:41 | file | +| test.go:165:22:165:25 | definition of file | test.go:278:33:278:36 | file | +| test.go:165:22:165:25 | definition of file | test.go:284:29:284:32 | file | +| test.go:168:3:168:73 | ... := ...[0] | test.go:170:3:170:12 | bzip2dsnet | +| test.go:168:3:168:73 | ... := ...[0] | test.go:171:27:171:36 | bzip2dsnet | +| test.go:168:41:168:44 | file | test.go:168:3:168:73 | ... := ...[0] | +| test.go:171:13:171:37 | call to NewReader | test.go:290:2:290:8 | tarRead | +| test.go:171:13:171:37 | call to NewReader | test.go:300:25:300:31 | tarRead | +| test.go:171:27:171:36 | bzip2dsnet | test.go:171:13:171:37 | call to NewReader | +| test.go:174:12:174:32 | call to NewReader | test.go:176:3:176:7 | Bzip2 | +| test.go:174:12:174:32 | call to NewReader | test.go:177:27:177:31 | Bzip2 | +| test.go:174:28:174:31 | file | test.go:174:12:174:32 | call to NewReader | +| test.go:177:13:177:32 | call to NewReader | test.go:290:2:290:8 | tarRead | +| test.go:177:13:177:32 | call to NewReader | test.go:300:25:300:31 | tarRead | +| test.go:177:27:177:31 | Bzip2 | test.go:177:13:177:32 | call to NewReader | +| test.go:181:12:181:32 | call to NewReader | test.go:183:3:183:7 | Flate | +| test.go:181:12:181:32 | call to NewReader | test.go:184:27:184:31 | Flate | +| test.go:181:28:181:31 | file | test.go:181:12:181:32 | call to NewReader | +| test.go:184:13:184:32 | call to NewReader | test.go:290:2:290:8 | tarRead | +| test.go:184:13:184:32 | call to NewReader | test.go:300:25:300:31 | tarRead | +| test.go:184:27:184:31 | Flate | test.go:184:13:184:32 | call to NewReader | +| test.go:188:20:188:49 | call to NewReader | test.go:190:3:190:15 | zlibklauspost | +| test.go:188:20:188:49 | call to NewReader | test.go:191:27:191:39 | zlibklauspost | +| test.go:188:45:188:48 | file | test.go:188:20:188:49 | call to NewReader | +| test.go:191:13:191:40 | call to NewReader | test.go:290:2:290:8 | tarRead | +| test.go:191:13:191:40 | call to NewReader | test.go:300:25:300:31 | tarRead | +| test.go:191:27:191:39 | zlibklauspost | test.go:191:13:191:40 | call to NewReader | +| test.go:194:3:194:73 | ... := ...[0] | test.go:196:3:196:12 | flatedsnet | +| test.go:194:3:194:73 | ... := ...[0] | test.go:197:27:197:36 | flatedsnet | +| test.go:194:41:194:44 | file | test.go:194:3:194:73 | ... := ...[0] | +| test.go:197:13:197:37 | call to NewReader | test.go:290:2:290:8 | tarRead | +| test.go:197:13:197:37 | call to NewReader | test.go:300:25:300:31 | tarRead | +| test.go:197:27:197:36 | flatedsnet | test.go:197:13:197:37 | call to NewReader | +| test.go:201:3:201:51 | ... := ...[0] | test.go:203:3:203:15 | zlibklauspost | +| test.go:201:3:201:51 | ... := ...[0] | test.go:204:27:204:39 | zlibklauspost | +| test.go:201:47:201:50 | file | test.go:201:3:201:51 | ... := ...[0] | +| test.go:204:13:204:40 | call to NewReader | test.go:290:2:290:8 | tarRead | +| test.go:204:13:204:40 | call to NewReader | test.go:300:25:300:31 | tarRead | +| test.go:204:27:204:39 | zlibklauspost | test.go:204:13:204:40 | call to NewReader | +| test.go:208:3:208:33 | ... := ...[0] | test.go:210:3:210:6 | Zlib | +| test.go:208:3:208:33 | ... := ...[0] | test.go:211:27:211:30 | Zlib | +| test.go:208:29:208:32 | file | test.go:208:3:208:33 | ... := ...[0] | +| test.go:211:13:211:31 | call to NewReader | test.go:290:2:290:8 | tarRead | +| test.go:211:13:211:31 | call to NewReader | test.go:300:25:300:31 | tarRead | +| test.go:211:27:211:30 | Zlib | test.go:211:13:211:31 | call to NewReader | +| test.go:214:13:214:34 | call to NewReader | test.go:216:3:216:8 | Snappy | +| test.go:214:13:214:34 | call to NewReader | test.go:217:3:217:8 | Snappy | +| test.go:214:13:214:34 | call to NewReader | test.go:218:27:218:32 | Snappy | +| test.go:214:30:214:33 | file | test.go:214:13:214:34 | call to NewReader | +| test.go:218:13:218:33 | call to NewReader | test.go:290:2:290:8 | tarRead | +| test.go:218:13:218:33 | call to NewReader | test.go:300:25:300:31 | tarRead | +| test.go:218:27:218:32 | Snappy | test.go:218:13:218:33 | call to NewReader | +| test.go:221:22:221:52 | call to NewReader | test.go:227:3:227:10 | s2Reader | +| test.go:221:22:221:52 | call to NewReader | test.go:229:3:229:10 | s2Reader | +| test.go:221:22:221:52 | call to NewReader | test.go:230:3:230:10 | s2Reader | +| test.go:221:22:221:52 | call to NewReader | test.go:231:27:231:34 | s2Reader | +| test.go:221:48:221:51 | file | test.go:221:22:221:52 | call to NewReader | +| test.go:231:13:231:35 | call to NewReader | test.go:290:2:290:8 | tarRead | +| test.go:231:13:231:35 | call to NewReader | test.go:300:25:300:31 | tarRead | +| test.go:231:27:231:34 | s2Reader | test.go:231:13:231:35 | call to NewReader | +| test.go:234:9:234:26 | call to NewReader | test.go:236:3:236:4 | S2 | +| test.go:234:9:234:26 | call to NewReader | test.go:238:3:238:4 | S2 | +| test.go:234:9:234:26 | call to NewReader | test.go:241:27:241:28 | S2 | +| test.go:234:22:234:25 | file | test.go:234:9:234:26 | call to NewReader | +| test.go:241:13:241:29 | call to NewReader | test.go:290:2:290:8 | tarRead | +| test.go:241:13:241:29 | call to NewReader | test.go:300:25:300:31 | tarRead | +| test.go:241:27:241:28 | S2 | test.go:241:13:241:29 | call to NewReader | +| test.go:244:3:244:37 | ... := ...[0] | test.go:246:3:246:10 | gzipRead | +| test.go:244:3:244:37 | ... := ...[0] | test.go:247:27:247:34 | gzipRead | +| test.go:244:33:244:36 | file | test.go:244:3:244:37 | ... := ...[0] | +| test.go:247:13:247:35 | call to NewReader | test.go:290:2:290:8 | tarRead | +| test.go:247:13:247:35 | call to NewReader | test.go:300:25:300:31 | tarRead | +| test.go:247:27:247:34 | gzipRead | test.go:247:13:247:35 | call to NewReader | +| test.go:250:3:250:51 | ... := ...[0] | test.go:252:3:252:15 | gzipklauspost | +| test.go:250:3:250:51 | ... := ...[0] | test.go:254:3:254:15 | gzipklauspost | +| test.go:250:3:250:51 | ... := ...[0] | test.go:255:27:255:39 | gzipklauspost | +| test.go:250:47:250:50 | file | test.go:250:3:250:51 | ... := ...[0] | +| test.go:255:13:255:40 | call to NewReader | test.go:290:2:290:8 | tarRead | +| test.go:255:13:255:40 | call to NewReader | test.go:300:25:300:31 | tarRead | +| test.go:255:27:255:39 | gzipklauspost | test.go:255:13:255:40 | call to NewReader | +| test.go:259:3:259:47 | ... := ...[0] | test.go:263:3:263:11 | gzippgzip | +| test.go:259:3:259:47 | ... := ...[0] | test.go:264:27:264:35 | gzippgzip | +| test.go:259:43:259:46 | file | test.go:259:3:259:47 | ... := ...[0] | +| test.go:264:13:264:36 | call to NewReader | test.go:290:2:290:8 | tarRead | +| test.go:264:13:264:36 | call to NewReader | test.go:300:25:300:31 | tarRead | +| test.go:264:27:264:35 | gzippgzip | test.go:264:13:264:36 | call to NewReader | +| test.go:267:3:267:42 | ... := ...[0] | test.go:269:3:269:6 | zstd | +| test.go:267:3:267:42 | ... := ...[0] | test.go:271:3:271:6 | zstd | +| test.go:267:3:267:42 | ... := ...[0] | test.go:273:3:273:6 | zstd | +| test.go:267:3:267:42 | ... := ...[0] | test.go:274:27:274:30 | zstd | +| test.go:267:38:267:41 | file | test.go:267:3:267:42 | ... := ...[0] | +| test.go:274:13:274:31 | call to NewReader | test.go:290:2:290:8 | tarRead | +| test.go:274:13:274:31 | call to NewReader | test.go:300:25:300:31 | tarRead | +| test.go:274:27:274:30 | zstd | test.go:274:13:274:31 | call to NewReader | +| test.go:278:11:278:37 | call to NewReader | test.go:280:3:280:6 | zstd | +| test.go:278:11:278:37 | call to NewReader | test.go:281:27:281:30 | zstd | +| test.go:278:33:278:36 | file | test.go:278:11:278:37 | call to NewReader | +| test.go:281:13:281:31 | call to NewReader | test.go:290:2:290:8 | tarRead | +| test.go:281:13:281:31 | call to NewReader | test.go:300:25:300:31 | tarRead | +| test.go:281:27:281:30 | zstd | test.go:281:13:281:31 | call to NewReader | +| test.go:284:3:284:33 | ... := ...[0] | test.go:286:3:286:8 | xzRead | +| test.go:284:3:284:33 | ... := ...[0] | test.go:287:27:287:32 | xzRead | +| test.go:284:29:284:32 | file | test.go:284:3:284:33 | ... := ...[0] | +| test.go:287:13:287:33 | call to NewReader | test.go:290:2:290:8 | tarRead | +| test.go:287:13:287:33 | call to NewReader | test.go:300:25:300:31 | tarRead | +| test.go:287:27:287:32 | xzRead | test.go:287:13:287:33 | call to NewReader | nodes -| archive_zip.go:56:18:56:29 | selection of Body | semmle.label | selection of Body | -| archive_zip.go:57:15:57:26 | selection of Body | semmle.label | selection of Body | -| archive_zip.go:58:16:58:27 | selection of Body | semmle.label | selection of Body | -| archive_zip.go:59:16:59:46 | call to FormValue | semmle.label | call to FormValue | -| archive_zip.go:60:20:60:48 | call to PostFormValue | semmle.label | call to PostFormValue | -| archive_zip.go:62:17:62:28 | selection of Body | semmle.label | selection of Body | -| archive_zip.go:76:24:76:31 | definition of filename | semmle.label | definition of filename | -| archive_zip.go:77:2:77:33 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:77:25:77:32 | filename | semmle.label | filename | -| archive_zip.go:80:3:80:19 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:80:12:80:12 | f | semmle.label | f | -| archive_zip.go:82:37:82:38 | rc | semmle.label | rc | -| archive_zip.go:96:21:96:23 | definition of src | semmle.label | definition of src | -| archive_zip.go:97:2:97:32 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:97:29:97:31 | src | semmle.label | src | -| archive_zip.go:101:11:101:44 | call to LimitReader | semmle.label | call to LimitReader | -| archive_zip.go:101:26:101:30 | gzipR | semmle.label | gzipR | -| archive_zip.go:102:23:102:28 | newSrc | semmle.label | newSrc | -| archive_zip.go:105:20:105:27 | definition of filename | semmle.label | definition of filename | -| archive_zip.go:107:2:107:33 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:107:25:107:32 | filename | semmle.label | filename | -| archive_zip.go:109:3:109:19 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:109:12:109:12 | f | semmle.label | f | -| archive_zip.go:111:37:111:38 | rc | semmle.label | rc | -| archive_zip.go:135:19:135:22 | definition of file | semmle.label | definition of file | -| archive_zip.go:136:2:136:29 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:136:25:136:28 | file | semmle.label | file | -| archive_zip.go:137:2:137:69 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:137:32:137:53 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:137:48:137:52 | file1 | semmle.label | file1 | -| archive_zip.go:140:3:140:36 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:140:26:140:29 | file | semmle.label | file | -| archive_zip.go:141:36:141:51 | fileReaderCloser | semmle.label | fileReaderCloser | -| archive_zip.go:146:20:146:23 | definition of file | semmle.label | definition of file | -| archive_zip.go:147:2:147:29 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:147:25:147:28 | file | semmle.label | file | -| archive_zip.go:148:2:148:87 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:148:50:148:71 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:148:66:148:70 | file2 | semmle.label | file2 | -| archive_zip.go:153:36:153:51 | fileReaderCloser | semmle.label | fileReaderCloser | -| archive_zip.go:165:22:165:25 | definition of file | semmle.label | definition of file | -| archive_zip.go:168:3:168:73 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:168:41:168:44 | file | semmle.label | file | -| archive_zip.go:170:3:170:12 | bzip2dsnet | semmle.label | bzip2dsnet | -| archive_zip.go:171:13:171:37 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:171:27:171:36 | bzip2dsnet | semmle.label | bzip2dsnet | -| archive_zip.go:174:12:174:32 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:174:28:174:31 | file | semmle.label | file | -| archive_zip.go:176:3:176:7 | Bzip2 | semmle.label | Bzip2 | -| archive_zip.go:177:13:177:32 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:177:27:177:31 | Bzip2 | semmle.label | Bzip2 | -| archive_zip.go:181:12:181:32 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:181:28:181:31 | file | semmle.label | file | -| archive_zip.go:183:3:183:7 | Flate | semmle.label | Flate | -| archive_zip.go:184:13:184:32 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:184:27:184:31 | Flate | semmle.label | Flate | -| archive_zip.go:188:20:188:49 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:188:45:188:48 | file | semmle.label | file | -| archive_zip.go:190:3:190:15 | zlibklauspost | semmle.label | zlibklauspost | -| archive_zip.go:191:13:191:40 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:191:27:191:39 | zlibklauspost | semmle.label | zlibklauspost | -| archive_zip.go:194:3:194:73 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:194:41:194:44 | file | semmle.label | file | -| archive_zip.go:196:3:196:12 | flatedsnet | semmle.label | flatedsnet | -| archive_zip.go:197:13:197:37 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:197:27:197:36 | flatedsnet | semmle.label | flatedsnet | -| archive_zip.go:201:3:201:51 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:201:47:201:50 | file | semmle.label | file | -| archive_zip.go:203:3:203:15 | zlibklauspost | semmle.label | zlibklauspost | -| archive_zip.go:204:13:204:40 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:204:27:204:39 | zlibklauspost | semmle.label | zlibklauspost | -| archive_zip.go:208:3:208:33 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:208:29:208:32 | file | semmle.label | file | -| archive_zip.go:210:3:210:6 | Zlib | semmle.label | Zlib | -| archive_zip.go:211:13:211:31 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:211:27:211:30 | Zlib | semmle.label | Zlib | -| archive_zip.go:214:13:214:34 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:214:30:214:33 | file | semmle.label | file | -| archive_zip.go:216:3:216:8 | Snappy | semmle.label | Snappy | -| archive_zip.go:217:3:217:8 | Snappy | semmle.label | Snappy | -| archive_zip.go:218:13:218:33 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:218:27:218:32 | Snappy | semmle.label | Snappy | -| archive_zip.go:221:22:221:52 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:221:48:221:51 | file | semmle.label | file | -| archive_zip.go:227:3:227:10 | s2Reader | semmle.label | s2Reader | -| archive_zip.go:229:3:229:10 | s2Reader | semmle.label | s2Reader | -| archive_zip.go:230:3:230:10 | s2Reader | semmle.label | s2Reader | -| archive_zip.go:231:13:231:35 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:231:27:231:34 | s2Reader | semmle.label | s2Reader | -| archive_zip.go:234:9:234:26 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:234:22:234:25 | file | semmle.label | file | -| archive_zip.go:236:3:236:4 | S2 | semmle.label | S2 | -| archive_zip.go:238:3:238:4 | S2 | semmle.label | S2 | -| archive_zip.go:241:13:241:29 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:241:27:241:28 | S2 | semmle.label | S2 | -| archive_zip.go:244:3:244:37 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:244:33:244:36 | file | semmle.label | file | -| archive_zip.go:246:3:246:10 | gzipRead | semmle.label | gzipRead | -| archive_zip.go:247:13:247:35 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:247:27:247:34 | gzipRead | semmle.label | gzipRead | -| archive_zip.go:250:3:250:51 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:250:47:250:50 | file | semmle.label | file | -| archive_zip.go:252:3:252:15 | gzipklauspost | semmle.label | gzipklauspost | -| archive_zip.go:254:3:254:15 | gzipklauspost | semmle.label | gzipklauspost | -| archive_zip.go:255:13:255:40 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:255:27:255:39 | gzipklauspost | semmle.label | gzipklauspost | -| archive_zip.go:259:3:259:47 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:259:43:259:46 | file | semmle.label | file | -| archive_zip.go:261:3:261:11 | gzippgzip | semmle.label | gzippgzip | -| archive_zip.go:263:3:263:11 | gzippgzip | semmle.label | gzippgzip | -| archive_zip.go:264:13:264:36 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:264:27:264:35 | gzippgzip | semmle.label | gzippgzip | -| archive_zip.go:267:3:267:42 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:267:38:267:41 | file | semmle.label | file | -| archive_zip.go:269:3:269:6 | zstd | semmle.label | zstd | -| archive_zip.go:271:3:271:6 | zstd | semmle.label | zstd | -| archive_zip.go:273:3:273:6 | zstd | semmle.label | zstd | -| archive_zip.go:274:13:274:31 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:274:27:274:30 | zstd | semmle.label | zstd | -| archive_zip.go:278:11:278:37 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:278:33:278:36 | file | semmle.label | file | -| archive_zip.go:280:3:280:6 | zstd | semmle.label | zstd | -| archive_zip.go:281:13:281:31 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:281:27:281:30 | zstd | semmle.label | zstd | -| archive_zip.go:284:3:284:33 | ... := ...[0] | semmle.label | ... := ...[0] | -| archive_zip.go:284:29:284:32 | file | semmle.label | file | -| archive_zip.go:286:3:286:8 | xzRead | semmle.label | xzRead | -| archive_zip.go:287:13:287:33 | call to NewReader | semmle.label | call to NewReader | -| archive_zip.go:287:27:287:32 | xzRead | semmle.label | xzRead | -| archive_zip.go:290:2:290:8 | tarRead | semmle.label | tarRead | -| archive_zip.go:290:2:290:8 | tarRead | semmle.label | tarRead | -| archive_zip.go:290:2:290:8 | tarRead | semmle.label | tarRead | -| archive_zip.go:290:2:290:8 | tarRead | semmle.label | tarRead | -| archive_zip.go:290:2:290:8 | tarRead | semmle.label | tarRead | -| archive_zip.go:290:2:290:8 | tarRead | semmle.label | tarRead | -| archive_zip.go:290:2:290:8 | tarRead | semmle.label | tarRead | -| archive_zip.go:290:2:290:8 | tarRead | semmle.label | tarRead | -| archive_zip.go:300:25:300:31 | tarRead | semmle.label | tarRead | -| archive_zip.go:300:25:300:31 | tarRead | semmle.label | tarRead | -| archive_zip.go:300:25:300:31 | tarRead | semmle.label | tarRead | -| archive_zip.go:300:25:300:31 | tarRead | semmle.label | tarRead | -| archive_zip.go:300:25:300:31 | tarRead | semmle.label | tarRead | -| archive_zip.go:300:25:300:31 | tarRead | semmle.label | tarRead | -| archive_zip.go:300:25:300:31 | tarRead | semmle.label | tarRead | -| archive_zip.go:300:25:300:31 | tarRead | semmle.label | tarRead | -| test.go:54:18:54:29 | selection of Body | semmle.label | selection of Body | -| test.go:55:15:55:26 | selection of Body | semmle.label | selection of Body | -| test.go:56:16:56:27 | selection of Body | semmle.label | selection of Body | -| test.go:57:16:57:46 | call to FormValue | semmle.label | call to FormValue | -| test.go:58:20:58:48 | call to PostFormValue | semmle.label | call to PostFormValue | -| test.go:60:17:60:28 | selection of Body | semmle.label | selection of Body | +| test.go:56:18:56:29 | selection of Body | semmle.label | selection of Body | +| test.go:57:15:57:26 | selection of Body | semmle.label | selection of Body | +| test.go:58:16:58:27 | selection of Body | semmle.label | selection of Body | +| test.go:59:16:59:46 | call to FormValue | semmle.label | call to FormValue | +| test.go:60:20:60:48 | call to PostFormValue | semmle.label | call to PostFormValue | +| test.go:62:17:62:28 | selection of Body | semmle.label | selection of Body | +| test.go:76:24:76:31 | definition of filename | semmle.label | definition of filename | +| test.go:77:2:77:33 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:77:25:77:32 | filename | semmle.label | filename | +| test.go:80:3:80:19 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:80:12:80:12 | f | semmle.label | f | +| test.go:82:37:82:38 | rc | semmle.label | rc | +| test.go:96:21:96:23 | definition of src | semmle.label | definition of src | +| test.go:97:2:97:32 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:97:29:97:31 | src | semmle.label | src | +| test.go:101:11:101:44 | call to LimitReader | semmle.label | call to LimitReader | +| test.go:101:26:101:30 | gzipR | semmle.label | gzipR | +| test.go:102:23:102:28 | newSrc | semmle.label | newSrc | +| test.go:105:20:105:27 | definition of filename | semmle.label | definition of filename | +| test.go:107:2:107:33 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:107:25:107:32 | filename | semmle.label | filename | +| test.go:109:3:109:19 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:109:12:109:12 | f | semmle.label | f | +| test.go:111:37:111:38 | rc | semmle.label | rc | +| test.go:135:19:135:22 | definition of file | semmle.label | definition of file | +| test.go:136:2:136:29 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:136:25:136:28 | file | semmle.label | file | +| test.go:137:2:137:69 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:137:32:137:53 | call to NewReader | semmle.label | call to NewReader | +| test.go:137:48:137:52 | file1 | semmle.label | file1 | +| test.go:140:3:140:36 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:140:26:140:29 | file | semmle.label | file | +| test.go:141:36:141:51 | fileReaderCloser | semmle.label | fileReaderCloser | +| test.go:146:20:146:23 | definition of file | semmle.label | definition of file | +| test.go:147:2:147:29 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:147:25:147:28 | file | semmle.label | file | +| test.go:148:2:148:87 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:148:50:148:71 | call to NewReader | semmle.label | call to NewReader | +| test.go:148:66:148:70 | file2 | semmle.label | file2 | +| test.go:153:36:153:51 | fileReaderCloser | semmle.label | fileReaderCloser | +| test.go:165:22:165:25 | definition of file | semmle.label | definition of file | +| test.go:168:3:168:73 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:168:41:168:44 | file | semmle.label | file | +| test.go:170:3:170:12 | bzip2dsnet | semmle.label | bzip2dsnet | +| test.go:171:13:171:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:171:27:171:36 | bzip2dsnet | semmle.label | bzip2dsnet | +| test.go:174:12:174:32 | call to NewReader | semmle.label | call to NewReader | +| test.go:174:28:174:31 | file | semmle.label | file | +| test.go:176:3:176:7 | Bzip2 | semmle.label | Bzip2 | +| test.go:177:13:177:32 | call to NewReader | semmle.label | call to NewReader | +| test.go:177:27:177:31 | Bzip2 | semmle.label | Bzip2 | +| test.go:181:12:181:32 | call to NewReader | semmle.label | call to NewReader | +| test.go:181:28:181:31 | file | semmle.label | file | +| test.go:183:3:183:7 | Flate | semmle.label | Flate | +| test.go:184:13:184:32 | call to NewReader | semmle.label | call to NewReader | +| test.go:184:27:184:31 | Flate | semmle.label | Flate | +| test.go:188:20:188:49 | call to NewReader | semmle.label | call to NewReader | +| test.go:188:45:188:48 | file | semmle.label | file | +| test.go:190:3:190:15 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:191:13:191:40 | call to NewReader | semmle.label | call to NewReader | +| test.go:191:27:191:39 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:194:3:194:73 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:194:41:194:44 | file | semmle.label | file | +| test.go:196:3:196:12 | flatedsnet | semmle.label | flatedsnet | +| test.go:197:13:197:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:197:27:197:36 | flatedsnet | semmle.label | flatedsnet | +| test.go:201:3:201:51 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:201:47:201:50 | file | semmle.label | file | +| test.go:203:3:203:15 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:204:13:204:40 | call to NewReader | semmle.label | call to NewReader | +| test.go:204:27:204:39 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:208:3:208:33 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:208:29:208:32 | file | semmle.label | file | +| test.go:210:3:210:6 | Zlib | semmle.label | Zlib | +| test.go:211:13:211:31 | call to NewReader | semmle.label | call to NewReader | +| test.go:211:27:211:30 | Zlib | semmle.label | Zlib | +| test.go:214:13:214:34 | call to NewReader | semmle.label | call to NewReader | +| test.go:214:30:214:33 | file | semmle.label | file | +| test.go:216:3:216:8 | Snappy | semmle.label | Snappy | +| test.go:217:3:217:8 | Snappy | semmle.label | Snappy | +| test.go:218:13:218:33 | call to NewReader | semmle.label | call to NewReader | +| test.go:218:27:218:32 | Snappy | semmle.label | Snappy | +| test.go:221:22:221:52 | call to NewReader | semmle.label | call to NewReader | +| test.go:221:48:221:51 | file | semmle.label | file | +| test.go:227:3:227:10 | s2Reader | semmle.label | s2Reader | +| test.go:229:3:229:10 | s2Reader | semmle.label | s2Reader | +| test.go:230:3:230:10 | s2Reader | semmle.label | s2Reader | +| test.go:231:13:231:35 | call to NewReader | semmle.label | call to NewReader | +| test.go:231:27:231:34 | s2Reader | semmle.label | s2Reader | +| test.go:234:9:234:26 | call to NewReader | semmle.label | call to NewReader | +| test.go:234:22:234:25 | file | semmle.label | file | +| test.go:236:3:236:4 | S2 | semmle.label | S2 | +| test.go:238:3:238:4 | S2 | semmle.label | S2 | +| test.go:241:13:241:29 | call to NewReader | semmle.label | call to NewReader | +| test.go:241:27:241:28 | S2 | semmle.label | S2 | +| test.go:244:3:244:37 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:244:33:244:36 | file | semmle.label | file | +| test.go:246:3:246:10 | gzipRead | semmle.label | gzipRead | +| test.go:247:13:247:35 | call to NewReader | semmle.label | call to NewReader | +| test.go:247:27:247:34 | gzipRead | semmle.label | gzipRead | +| test.go:250:3:250:51 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:250:47:250:50 | file | semmle.label | file | +| test.go:252:3:252:15 | gzipklauspost | semmle.label | gzipklauspost | +| test.go:254:3:254:15 | gzipklauspost | semmle.label | gzipklauspost | +| test.go:255:13:255:40 | call to NewReader | semmle.label | call to NewReader | +| test.go:255:27:255:39 | gzipklauspost | semmle.label | gzipklauspost | +| test.go:259:3:259:47 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:259:43:259:46 | file | semmle.label | file | +| test.go:263:3:263:11 | gzippgzip | semmle.label | gzippgzip | +| test.go:264:13:264:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:264:27:264:35 | gzippgzip | semmle.label | gzippgzip | +| test.go:267:3:267:42 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:267:38:267:41 | file | semmle.label | file | +| test.go:269:3:269:6 | zstd | semmle.label | zstd | +| test.go:271:3:271:6 | zstd | semmle.label | zstd | +| test.go:273:3:273:6 | zstd | semmle.label | zstd | +| test.go:274:13:274:31 | call to NewReader | semmle.label | call to NewReader | +| test.go:274:27:274:30 | zstd | semmle.label | zstd | +| test.go:278:11:278:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:278:33:278:36 | file | semmle.label | file | +| test.go:280:3:280:6 | zstd | semmle.label | zstd | +| test.go:281:13:281:31 | call to NewReader | semmle.label | call to NewReader | +| test.go:281:27:281:30 | zstd | semmle.label | zstd | +| test.go:284:3:284:33 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:284:29:284:32 | file | semmle.label | file | +| test.go:286:3:286:8 | xzRead | semmle.label | xzRead | +| test.go:287:13:287:33 | call to NewReader | semmle.label | call to NewReader | +| test.go:287:27:287:32 | xzRead | semmle.label | xzRead | +| test.go:290:2:290:8 | tarRead | semmle.label | tarRead | +| test.go:290:2:290:8 | tarRead | semmle.label | tarRead | +| test.go:290:2:290:8 | tarRead | semmle.label | tarRead | +| test.go:290:2:290:8 | tarRead | semmle.label | tarRead | +| test.go:290:2:290:8 | tarRead | semmle.label | tarRead | +| test.go:290:2:290:8 | tarRead | semmle.label | tarRead | +| test.go:290:2:290:8 | tarRead | semmle.label | tarRead | +| test.go:290:2:290:8 | tarRead | semmle.label | tarRead | +| test.go:300:25:300:31 | tarRead | semmle.label | tarRead | +| test.go:300:25:300:31 | tarRead | semmle.label | tarRead | +| test.go:300:25:300:31 | tarRead | semmle.label | tarRead | +| test.go:300:25:300:31 | tarRead | semmle.label | tarRead | +| test.go:300:25:300:31 | tarRead | semmle.label | tarRead | +| test.go:300:25:300:31 | tarRead | semmle.label | tarRead | +| test.go:300:25:300:31 | tarRead | semmle.label | tarRead | +| test.go:300:25:300:31 | tarRead | semmle.label | tarRead | subpaths #select -| archive_zip.go:82:37:82:38 | rc | archive_zip.go:60:20:60:48 | call to PostFormValue | archive_zip.go:82:37:82:38 | rc | This decompression is $@. | archive_zip.go:60:20:60:48 | call to PostFormValue | decompressing compressed data without managing output size | -| archive_zip.go:82:37:82:38 | rc | test.go:58:20:58:48 | call to PostFormValue | archive_zip.go:82:37:82:38 | rc | This decompression is $@. | test.go:58:20:58:48 | call to PostFormValue | decompressing compressed data without managing output size | -| archive_zip.go:102:23:102:28 | newSrc | archive_zip.go:62:17:62:28 | selection of Body | archive_zip.go:102:23:102:28 | newSrc | This decompression is $@. | archive_zip.go:62:17:62:28 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:102:23:102:28 | newSrc | test.go:60:17:60:28 | selection of Body | archive_zip.go:102:23:102:28 | newSrc | This decompression is $@. | test.go:60:17:60:28 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:111:37:111:38 | rc | archive_zip.go:59:16:59:46 | call to FormValue | archive_zip.go:111:37:111:38 | rc | This decompression is $@. | archive_zip.go:59:16:59:46 | call to FormValue | decompressing compressed data without managing output size | -| archive_zip.go:111:37:111:38 | rc | test.go:57:16:57:46 | call to FormValue | archive_zip.go:111:37:111:38 | rc | This decompression is $@. | test.go:57:16:57:46 | call to FormValue | decompressing compressed data without managing output size | -| archive_zip.go:141:36:141:51 | fileReaderCloser | archive_zip.go:57:15:57:26 | selection of Body | archive_zip.go:141:36:141:51 | fileReaderCloser | This decompression is $@. | archive_zip.go:57:15:57:26 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:141:36:141:51 | fileReaderCloser | test.go:55:15:55:26 | selection of Body | archive_zip.go:141:36:141:51 | fileReaderCloser | This decompression is $@. | test.go:55:15:55:26 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:153:36:153:51 | fileReaderCloser | archive_zip.go:58:16:58:27 | selection of Body | archive_zip.go:153:36:153:51 | fileReaderCloser | This decompression is $@. | archive_zip.go:58:16:58:27 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:153:36:153:51 | fileReaderCloser | test.go:56:16:56:27 | selection of Body | archive_zip.go:153:36:153:51 | fileReaderCloser | This decompression is $@. | test.go:56:16:56:27 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:170:3:170:12 | bzip2dsnet | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:170:3:170:12 | bzip2dsnet | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:170:3:170:12 | bzip2dsnet | test.go:54:18:54:29 | selection of Body | archive_zip.go:170:3:170:12 | bzip2dsnet | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:176:3:176:7 | Bzip2 | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:176:3:176:7 | Bzip2 | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:176:3:176:7 | Bzip2 | test.go:54:18:54:29 | selection of Body | archive_zip.go:176:3:176:7 | Bzip2 | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:183:3:183:7 | Flate | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:183:3:183:7 | Flate | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:183:3:183:7 | Flate | test.go:54:18:54:29 | selection of Body | archive_zip.go:183:3:183:7 | Flate | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:190:3:190:15 | zlibklauspost | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:190:3:190:15 | zlibklauspost | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:190:3:190:15 | zlibklauspost | test.go:54:18:54:29 | selection of Body | archive_zip.go:190:3:190:15 | zlibklauspost | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:196:3:196:12 | flatedsnet | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:196:3:196:12 | flatedsnet | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:196:3:196:12 | flatedsnet | test.go:54:18:54:29 | selection of Body | archive_zip.go:196:3:196:12 | flatedsnet | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:203:3:203:15 | zlibklauspost | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:203:3:203:15 | zlibklauspost | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:203:3:203:15 | zlibklauspost | test.go:54:18:54:29 | selection of Body | archive_zip.go:203:3:203:15 | zlibklauspost | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:210:3:210:6 | Zlib | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:210:3:210:6 | Zlib | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:210:3:210:6 | Zlib | test.go:54:18:54:29 | selection of Body | archive_zip.go:210:3:210:6 | Zlib | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:216:3:216:8 | Snappy | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:216:3:216:8 | Snappy | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:216:3:216:8 | Snappy | test.go:54:18:54:29 | selection of Body | archive_zip.go:216:3:216:8 | Snappy | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:217:3:217:8 | Snappy | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:217:3:217:8 | Snappy | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:217:3:217:8 | Snappy | test.go:54:18:54:29 | selection of Body | archive_zip.go:217:3:217:8 | Snappy | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:227:3:227:10 | s2Reader | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:227:3:227:10 | s2Reader | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:227:3:227:10 | s2Reader | test.go:54:18:54:29 | selection of Body | archive_zip.go:227:3:227:10 | s2Reader | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:229:3:229:10 | s2Reader | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:229:3:229:10 | s2Reader | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:229:3:229:10 | s2Reader | test.go:54:18:54:29 | selection of Body | archive_zip.go:229:3:229:10 | s2Reader | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:230:3:230:10 | s2Reader | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:230:3:230:10 | s2Reader | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:230:3:230:10 | s2Reader | test.go:54:18:54:29 | selection of Body | archive_zip.go:230:3:230:10 | s2Reader | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:236:3:236:4 | S2 | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:236:3:236:4 | S2 | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:236:3:236:4 | S2 | test.go:54:18:54:29 | selection of Body | archive_zip.go:236:3:236:4 | S2 | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:238:3:238:4 | S2 | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:238:3:238:4 | S2 | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:238:3:238:4 | S2 | test.go:54:18:54:29 | selection of Body | archive_zip.go:238:3:238:4 | S2 | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:246:3:246:10 | gzipRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:246:3:246:10 | gzipRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:246:3:246:10 | gzipRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:246:3:246:10 | gzipRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:252:3:252:15 | gzipklauspost | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:252:3:252:15 | gzipklauspost | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:252:3:252:15 | gzipklauspost | test.go:54:18:54:29 | selection of Body | archive_zip.go:252:3:252:15 | gzipklauspost | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:254:3:254:15 | gzipklauspost | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:254:3:254:15 | gzipklauspost | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:254:3:254:15 | gzipklauspost | test.go:54:18:54:29 | selection of Body | archive_zip.go:254:3:254:15 | gzipklauspost | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:261:3:261:11 | gzippgzip | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:261:3:261:11 | gzippgzip | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:261:3:261:11 | gzippgzip | test.go:54:18:54:29 | selection of Body | archive_zip.go:261:3:261:11 | gzippgzip | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:263:3:263:11 | gzippgzip | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:263:3:263:11 | gzippgzip | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:263:3:263:11 | gzippgzip | test.go:54:18:54:29 | selection of Body | archive_zip.go:263:3:263:11 | gzippgzip | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:269:3:269:6 | zstd | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:269:3:269:6 | zstd | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:269:3:269:6 | zstd | test.go:54:18:54:29 | selection of Body | archive_zip.go:269:3:269:6 | zstd | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:271:3:271:6 | zstd | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:271:3:271:6 | zstd | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:271:3:271:6 | zstd | test.go:54:18:54:29 | selection of Body | archive_zip.go:271:3:271:6 | zstd | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:273:3:273:6 | zstd | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:273:3:273:6 | zstd | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:273:3:273:6 | zstd | test.go:54:18:54:29 | selection of Body | archive_zip.go:273:3:273:6 | zstd | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:280:3:280:6 | zstd | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:280:3:280:6 | zstd | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:280:3:280:6 | zstd | test.go:54:18:54:29 | selection of Body | archive_zip.go:280:3:280:6 | zstd | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:286:3:286:8 | xzRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:286:3:286:8 | xzRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:286:3:286:8 | xzRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:286:3:286:8 | xzRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:290:2:290:8 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:290:2:290:8 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:290:2:290:8 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:290:2:290:8 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:290:2:290:8 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:290:2:290:8 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:290:2:290:8 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:290:2:290:8 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:290:2:290:8 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:290:2:290:8 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:290:2:290:8 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:290:2:290:8 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:290:2:290:8 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:290:2:290:8 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:290:2:290:8 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:290:2:290:8 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:300:25:300:31 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:300:25:300:31 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:300:25:300:31 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:300:25:300:31 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:300:25:300:31 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:300:25:300:31 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:300:25:300:31 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:300:25:300:31 | tarRead | archive_zip.go:56:18:56:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | archive_zip.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:300:25:300:31 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:300:25:300:31 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:300:25:300:31 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:300:25:300:31 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:300:25:300:31 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:300:25:300:31 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:300:25:300:31 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | -| archive_zip.go:300:25:300:31 | tarRead | test.go:54:18:54:29 | selection of Body | archive_zip.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:54:18:54:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:82:37:82:38 | rc | test.go:60:20:60:48 | call to PostFormValue | test.go:82:37:82:38 | rc | This decompression is $@. | test.go:60:20:60:48 | call to PostFormValue | decompressing compressed data without managing output size | +| test.go:102:23:102:28 | newSrc | test.go:62:17:62:28 | selection of Body | test.go:102:23:102:28 | newSrc | This decompression is $@. | test.go:62:17:62:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:111:37:111:38 | rc | test.go:59:16:59:46 | call to FormValue | test.go:111:37:111:38 | rc | This decompression is $@. | test.go:59:16:59:46 | call to FormValue | decompressing compressed data without managing output size | +| test.go:141:36:141:51 | fileReaderCloser | test.go:57:15:57:26 | selection of Body | test.go:141:36:141:51 | fileReaderCloser | This decompression is $@. | test.go:57:15:57:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:153:36:153:51 | fileReaderCloser | test.go:58:16:58:27 | selection of Body | test.go:153:36:153:51 | fileReaderCloser | This decompression is $@. | test.go:58:16:58:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:170:3:170:12 | bzip2dsnet | test.go:56:18:56:29 | selection of Body | test.go:170:3:170:12 | bzip2dsnet | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:176:3:176:7 | Bzip2 | test.go:56:18:56:29 | selection of Body | test.go:176:3:176:7 | Bzip2 | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:183:3:183:7 | Flate | test.go:56:18:56:29 | selection of Body | test.go:183:3:183:7 | Flate | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:190:3:190:15 | zlibklauspost | test.go:56:18:56:29 | selection of Body | test.go:190:3:190:15 | zlibklauspost | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:196:3:196:12 | flatedsnet | test.go:56:18:56:29 | selection of Body | test.go:196:3:196:12 | flatedsnet | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:203:3:203:15 | zlibklauspost | test.go:56:18:56:29 | selection of Body | test.go:203:3:203:15 | zlibklauspost | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:210:3:210:6 | Zlib | test.go:56:18:56:29 | selection of Body | test.go:210:3:210:6 | Zlib | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:216:3:216:8 | Snappy | test.go:56:18:56:29 | selection of Body | test.go:216:3:216:8 | Snappy | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:217:3:217:8 | Snappy | test.go:56:18:56:29 | selection of Body | test.go:217:3:217:8 | Snappy | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:227:3:227:10 | s2Reader | test.go:56:18:56:29 | selection of Body | test.go:227:3:227:10 | s2Reader | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:229:3:229:10 | s2Reader | test.go:56:18:56:29 | selection of Body | test.go:229:3:229:10 | s2Reader | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:230:3:230:10 | s2Reader | test.go:56:18:56:29 | selection of Body | test.go:230:3:230:10 | s2Reader | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:236:3:236:4 | S2 | test.go:56:18:56:29 | selection of Body | test.go:236:3:236:4 | S2 | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:238:3:238:4 | S2 | test.go:56:18:56:29 | selection of Body | test.go:238:3:238:4 | S2 | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:246:3:246:10 | gzipRead | test.go:56:18:56:29 | selection of Body | test.go:246:3:246:10 | gzipRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:252:3:252:15 | gzipklauspost | test.go:56:18:56:29 | selection of Body | test.go:252:3:252:15 | gzipklauspost | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:254:3:254:15 | gzipklauspost | test.go:56:18:56:29 | selection of Body | test.go:254:3:254:15 | gzipklauspost | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:263:3:263:11 | gzippgzip | test.go:56:18:56:29 | selection of Body | test.go:263:3:263:11 | gzippgzip | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:269:3:269:6 | zstd | test.go:56:18:56:29 | selection of Body | test.go:269:3:269:6 | zstd | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:271:3:271:6 | zstd | test.go:56:18:56:29 | selection of Body | test.go:271:3:271:6 | zstd | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:273:3:273:6 | zstd | test.go:56:18:56:29 | selection of Body | test.go:273:3:273:6 | zstd | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:280:3:280:6 | zstd | test.go:56:18:56:29 | selection of Body | test.go:280:3:280:6 | zstd | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:286:3:286:8 | xzRead | test.go:56:18:56:29 | selection of Body | test.go:286:3:286:8 | xzRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:290:2:290:8 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:290:2:290:8 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:290:2:290:8 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:290:2:290:8 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:290:2:290:8 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:290:2:290:8 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:290:2:290:8 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:290:2:290:8 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:300:25:300:31 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:300:25:300:31 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:300:25:300:31 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:300:25:300:31 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:300:25:300:31 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:300:25:300:31 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:300:25:300:31 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:300:25:300:31 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/archive_zip.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/archive_zip.go deleted file mode 100644 index eb7239f7313..00000000000 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/archive_zip.go +++ /dev/null @@ -1,304 +0,0 @@ -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" - zstdDataDog "github.com/DataDog/zstd" - 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" - zipKlauspost "github.com/klauspost/compress/zip" - zlibKlauspost "github.com/klauspost/compress/zlib" - zstdKlauspost "github.com/klauspost/compress/zstd" - pzipKlauspost "github.com/klauspost/pgzip" - "github.com/ulikunitz/xz" - "io" - "io/ioutil" - "net/http" - "os" - "testing/fstest" -) - -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) { - TarDecompressor(request.Body, "gz") - ZipNewReader(request.Body) - ZipNewReader2(request.Body) - ZipOpenReader(request.FormValue("filepathba")) - ZipOpenReaderSafe(request.PostFormValue("test")) - GZipOpenReaderSafe(request.PostFormValue("test")) - GZipsafeReader(request.Body, "dest") -} - -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) - _, _ = 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) - if result == 0 { - _ = rc.Close() - break - } - totalBytes = totalBytes + result - if totalBytes > 1024*1024 { - fmt.Print(totalBytes) - break - } - } - } -} - -func GZipsafeReader(src io.Reader, dst string) { - gzipR, _ := gzip.NewReader(src) - dstF, _ := os.OpenFile(dst, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0755) - defer dstF.Close() - var newSrc io.Reader - newSrc = io.LimitReader(gzipR, 1024*1024*5) - _, _ = io.Copy(dstF, newSrc) -} - -func ZipOpenReader(filename string) { - // Open the zip file - r, _ := zip.OpenReader(filename) - for _, f := range r.File { - rc, _ := f.Open() - for { - result, _ := io.CopyN(os.Stdout, rc, 68) - if result == 0 { - _ = rc.Close() - break - } - fmt.Print(result) - _ = rc.Close() - } - } - rKlauspost, _ := zipKlauspost.OpenReader(filename) - for _, f := range rKlauspost.File { - rc, _ := f.Open() - for { - result, _ := io.CopyN(os.Stdout, rc, 68) - 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) - fmt.Print(result) - } -} - -func ZipNewReader2(file io.Reader) { - file2, _ := io.ReadAll(file) - zipReaderKlauspost, _ := zipKlauspost.NewReader(bytes.NewReader(file2), int64(32<<20)) - for _, file := range zipReaderKlauspost.File { - fileWriter := bytes.NewBuffer([]byte{}) - // file.OpenRaw() - fileReaderCloser, _ := file.Open() - result, _ := io.Copy(fileWriter, fileReaderCloser) - fmt.Print(result) - } -} -func serve(w http.ResponseWriter, r *http.Request) { - if r.Body != nil { - if data, err := ioutil.ReadAll(r.Body); err == nil { - fmt.Println(data) - } - } -} - -func TarDecompressor(file io.Reader, compressionType string) { - var tarRead *tar.Reader - if compressionType == "bzip2Dsnet" { - bzip2dsnet, _ := bzip2Dsnet.NewReader(file, &bzip2Dsnet.ReaderConfig{}) - var out []byte = make([]byte, 70) - bzip2dsnet.Read(out) - tarRead = tar.NewReader(bzip2dsnet) - } - if compressionType == "bzip2" { - Bzip2 := bzip2.NewReader(file) - var out []byte = make([]byte, 70) - Bzip2.Read(out) - tarRead = tar.NewReader(Bzip2) - } - if compressionType == "flate" { - //flate.NewReaderDict() - Flate := flate.NewReader(file) - var out []byte = make([]byte, 70) - Flate.Read(out) - tarRead = tar.NewReader(Flate) - } - if compressionType == "flateKlauspost" { - //flateKlauspost.NewReaderDict() - zlibklauspost := flateKlauspost.NewReader(file) - var out []byte = make([]byte, 70) - zlibklauspost.Read(out) - tarRead = tar.NewReader(zlibklauspost) - } - if compressionType == "flateDsnet" { - flatedsnet, _ := flateDsnet.NewReader(file, &flateDsnet.ReaderConfig{}) - var out []byte = make([]byte, 70) - flatedsnet.Read(out) - tarRead = tar.NewReader(flatedsnet) - } - if compressionType == "zlibKlauspost" { - //zlibKlauspost.NewReaderDict() - zlibklauspost, _ := zlibKlauspost.NewReader(file) - var out []byte = make([]byte, 70) - zlibklauspost.Read(out) - tarRead = tar.NewReader(zlibklauspost) - } - if compressionType == "zlib" { - //zlib.NewReaderDict() - Zlib, _ := zlib.NewReader(file) - var out []byte = make([]byte, 70) - Zlib.Read(out) - tarRead = tar.NewReader(Zlib) - } - if compressionType == "snappy" { - Snappy := snappy.NewReader(file) - var out []byte = make([]byte, 70) - Snappy.Read(out) - Snappy.ReadByte() - tarRead = tar.NewReader(Snappy) - } - if compressionType == "snappyKlauspost" { - snappyklauspost := snappyKlauspost.NewReader(file) - //snappyklauspost.Reader == s2.Reader - // depstubber didn't work, I'm doing following because of it: - s2Reader := s2.NewReader(file) - s2Reader = snappyklauspost - var out []byte = make([]byte, 70) - s2Reader.Read(out) - var buf bytes.Buffer - s2Reader.DecodeConcurrent(&buf, 2) - s2Reader.ReadByte() - tarRead = tar.NewReader(s2Reader) - } - if compressionType == "s2" { - S2 := s2.NewReader(file) - var out []byte = make([]byte, 70) - S2.Read(out) - var buf bytes.Buffer - S2.DecodeConcurrent(&buf, 2) - //S2.ReadSeeker() - //S2.ReadByte() - tarRead = tar.NewReader(S2) - } - if compressionType == "gz" { - gzipRead, _ := gzip.NewReader(file) - var out []byte = make([]byte, 70) - gzipRead.Read(out) - tarRead = tar.NewReader(gzipRead) - } - if compressionType == "gzipKlauspost" { - gzipklauspost, _ := gzipKlauspost.NewReader(file) - var out []byte = make([]byte, 70) - gzipklauspost.Read(out) - var buf bytes.Buffer - gzipklauspost.WriteTo(&buf) - tarRead = tar.NewReader(gzipklauspost) - } - if compressionType == "pzipKlauspost" { - //gzipPgzip.NewReaderN() - gzippgzip, _ := pzipKlauspost.NewReader(file) - var out []byte = make([]byte, 70) - gzippgzip.Read(out) - var buf bytes.Buffer - gzippgzip.WriteTo(&buf) - tarRead = tar.NewReader(gzippgzip) - } - if compressionType == "zstd_Klauspost" { - zstd, _ := zstdKlauspost.NewReader(file) - var out []byte = make([]byte, 70) - zstd.Read(out) - var buf bytes.Buffer - zstd.WriteTo(&buf) - var src []byte - zstd.DecodeAll(src, nil) - tarRead = tar.NewReader(zstd) - } - if compressionType == "zstd_DataDog" { - //zstdDataDog.NewReaderDict() - zstd := zstdDataDog.NewReader(file) - var out []byte = make([]byte, 70) - zstd.Read(out) - tarRead = tar.NewReader(zstd) - } - if compressionType == "xz" { - xzRead, _ := xz.NewReader(file) - var out []byte = make([]byte, 70) - xzRead.Read(out) - tarRead = tar.NewReader(xzRead) - } - var out []byte = make([]byte, 70) - tarRead.Read(out) - files := make(fstest.MapFS) - for { - cur, err := tarRead.Next() - if err == io.EOF { - break - } - if cur.Typeflag != tar.TypeReg { - continue - } - data, _ := io.ReadAll(tarRead) - files[cur.Name] = &fstest.MapFile{Data: data} - } - fmt.Print(files) -} diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go index fc5fffd0cf1..eb7239f7313 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go @@ -7,11 +7,13 @@ package main //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/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/ulikunitz/xz Reader NewReader +//go:generate depstubber -vendor github.com/klauspost/compress/zip FileHeader,File,Reader,ReadCloser NewReader,OpenReader + import ( "archive/tar" "archive/zip" @@ -28,11 +30,11 @@ import ( flateKlauspost "github.com/klauspost/compress/flate" gzipKlauspost "github.com/klauspost/compress/gzip" "github.com/klauspost/compress/s2" - // snappyKlauspost "github.com/klauspost/compress/snappy" + snappyKlauspost "github.com/klauspost/compress/snappy" zipKlauspost "github.com/klauspost/compress/zip" zlibKlauspost "github.com/klauspost/compress/zlib" zstdKlauspost "github.com/klauspost/compress/zstd" - gzipPgzip "github.com/klauspost/pgzip" + pzipKlauspost "github.com/klauspost/pgzip" "github.com/ulikunitz/xz" "io" "io/ioutil" @@ -116,7 +118,7 @@ func ZipOpenReader(filename string) { } } rKlauspost, _ := zipKlauspost.OpenReader(filename) - for _, f := range rKlauspost.Reader.File { + for _, f := range rKlauspost.File { rc, _ := f.Open() for { result, _ := io.CopyN(os.Stdout, rc, 68) @@ -215,17 +217,19 @@ func TarDecompressor(file io.Reader, compressionType string) { Snappy.ReadByte() tarRead = tar.NewReader(Snappy) } - // if compressionType == "snappyKlauspost" { - // snappyklauspost := snappyKlauspost.NewReader(file) - // //snappyKlauspost.Reader = s2.Reader but it seems that - // // depstubber don't work here: - // var out []byte = make([]byte, 70) - // snappyklauspost.Read(out) - // var buf bytes.Buffer - // snappyklauspost.DecodeConcurrent(&buf, 2) - // snappyklauspost.ReadByte() - // tarRead = tar.NewReader(snappyklauspost) - // } + if compressionType == "snappyKlauspost" { + snappyklauspost := snappyKlauspost.NewReader(file) + //snappyklauspost.Reader == s2.Reader + // depstubber didn't work, I'm doing following because of it: + s2Reader := s2.NewReader(file) + s2Reader = snappyklauspost + var out []byte = make([]byte, 70) + s2Reader.Read(out) + var buf bytes.Buffer + s2Reader.DecodeConcurrent(&buf, 2) + s2Reader.ReadByte() + tarRead = tar.NewReader(s2Reader) + } if compressionType == "s2" { S2 := s2.NewReader(file) var out []byte = make([]byte, 70) @@ -250,9 +254,9 @@ func TarDecompressor(file io.Reader, compressionType string) { gzipklauspost.WriteTo(&buf) tarRead = tar.NewReader(gzipklauspost) } - if compressionType == "gzipPgzip" { + if compressionType == "pzipKlauspost" { //gzipPgzip.NewReaderN() - gzippgzip, _ := gzipPgzip.NewReader(file) + gzippgzip, _ := pzipKlauspost.NewReader(file) var out []byte = make([]byte, 70) gzippgzip.Read(out) var buf bytes.Buffer 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/vendor/modules.txt b/go/vendor/modules.txt index a012991d55c..1f1e5a29f25 100644 --- a/go/vendor/modules.txt +++ b/go/vendor/modules.txt @@ -1,12 +1,29 @@ -# golang.org/x/mod v0.8.0 -## explicit -golang.org/x/mod -# golang.org/x/tools v0.6.0 -## explicit -golang.org/x/tools -# golang.org/x/sys v0.5.0 -## explicit -golang.org/x/sys -# golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 -## explicit -golang.org/x/xerrors +# golang.org/x/mod v0.12.0 +## explicit; go 1.17 +golang.org/x/mod/internal/lazyregexp +golang.org/x/mod/modfile +golang.org/x/mod/module +golang.org/x/mod/semver +# golang.org/x/sys v0.10.0 +## explicit; go 1.17 +golang.org/x/sys/execabs +# golang.org/x/tools v0.11.1 +## explicit; go 1.18 +golang.org/x/tools/go/gcexportdata +golang.org/x/tools/go/internal/packagesdriver +golang.org/x/tools/go/packages +golang.org/x/tools/go/types/objectpath +golang.org/x/tools/internal/event +golang.org/x/tools/internal/event/core +golang.org/x/tools/internal/event/keys +golang.org/x/tools/internal/event/label +golang.org/x/tools/internal/event/tag +golang.org/x/tools/internal/gcimporter +golang.org/x/tools/internal/gocommand +golang.org/x/tools/internal/packagesinternal +golang.org/x/tools/internal/pkgbits +golang.org/x/tools/internal/tokeninternal +golang.org/x/tools/internal/typeparams +golang.org/x/tools/internal/typesinternal +# golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 +## explicit; go 1.17 From 21f477a674aa2096542a07ed27fe0d6eecbda815 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Fri, 6 Oct 2023 19:36:32 +0200 Subject: [PATCH 024/430] revert go/vendor/ :( --- .../x/mod/internal/lazyregexp/lazyre.go | 2 +- go/vendor/golang.org/x/mod/modfile/print.go | 14 +- go/vendor/golang.org/x/mod/modfile/read.go | 2 +- go/vendor/golang.org/x/mod/modfile/rule.go | 142 ++- go/vendor/golang.org/x/mod/modfile/work.go | 65 +- go/vendor/golang.org/x/mod/module/module.go | 30 +- go/vendor/golang.org/x/mod/module/pseudo.go | 2 +- go/vendor/golang.org/x/mod/semver/semver.go | 6 +- go/vendor/golang.org/x/sys/execabs/execabs.go | 2 +- .../golang.org/x/sys/execabs/execabs_go118.go | 6 + .../golang.org/x/sys/execabs/execabs_go119.go | 4 + .../x/tools/go/gcexportdata/gcexportdata.go | 11 +- .../tools/go/internal/packagesdriver/sizes.go | 11 +- .../golang.org/x/tools/go/packages/golist.go | 35 +- .../x/tools/go/packages/packages.go | 16 +- .../x/tools/go/types/objectpath/objectpath.go | 827 ++++++++++++++++ .../x/tools/internal/event/tag/tag.go | 59 ++ .../x/tools/internal/gcimporter/bimport.go | 907 +----------------- .../x/tools/internal/gcimporter/gcimporter.go | 27 +- .../x/tools/internal/gcimporter/iexport.go | 198 +++- .../x/tools/internal/gcimporter/iimport.go | 189 +++- .../tools/internal/gcimporter/ureader_yes.go | 50 +- .../x/tools/internal/gocommand/invoke.go | 146 ++- .../x/tools/internal/gocommand/version.go | 18 +- .../internal/tokeninternal/tokeninternal.go | 92 ++ .../x/tools/internal/typeparams/common.go | 27 +- .../x/tools/internal/typeparams/coretype.go | 8 +- .../x/tools/internal/typeparams/termlist.go | 2 +- .../internal/typeparams/typeparams_go117.go | 2 +- .../internal/typeparams/typeparams_go118.go | 2 +- .../x/tools/internal/typeparams/typeterm.go | 9 +- .../internal/typesinternal/objectpath.go | 24 + go/vendor/modules.txt | 6 +- 33 files changed, 1798 insertions(+), 1143 deletions(-) create mode 100644 go/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go create mode 100644 go/vendor/golang.org/x/tools/internal/event/tag/tag.go create mode 100644 go/vendor/golang.org/x/tools/internal/typesinternal/objectpath.go diff --git a/go/vendor/golang.org/x/mod/internal/lazyregexp/lazyre.go b/go/vendor/golang.org/x/mod/internal/lazyregexp/lazyre.go index 2681af35af1..150f887e7a4 100644 --- a/go/vendor/golang.org/x/mod/internal/lazyregexp/lazyre.go +++ b/go/vendor/golang.org/x/mod/internal/lazyregexp/lazyre.go @@ -13,7 +13,7 @@ import ( "sync" ) -// Regexp is a wrapper around regexp.Regexp, where the underlying regexp will be +// Regexp is a wrapper around [regexp.Regexp], where the underlying regexp will be // compiled the first time it is needed. type Regexp struct { str string diff --git a/go/vendor/golang.org/x/mod/modfile/print.go b/go/vendor/golang.org/x/mod/modfile/print.go index 524f93022ac..2a0123d4b91 100644 --- a/go/vendor/golang.org/x/mod/modfile/print.go +++ b/go/vendor/golang.org/x/mod/modfile/print.go @@ -16,7 +16,13 @@ import ( func Format(f *FileSyntax) []byte { pr := &printer{} pr.file(f) - return pr.Bytes() + + // remove trailing blank lines + b := pr.Bytes() + for len(b) > 0 && b[len(b)-1] == '\n' && (len(b) == 1 || b[len(b)-2] == '\n') { + b = b[:len(b)-1] + } + return b } // A printer collects the state during printing of a file or expression. @@ -59,7 +65,11 @@ func (p *printer) newline() { } p.trim() - p.printf("\n") + if b := p.Bytes(); len(b) == 0 || (len(b) >= 2 && b[len(b)-1] == '\n' && b[len(b)-2] == '\n') { + // skip the blank line at top of file or after a blank line + } else { + p.printf("\n") + } for i := 0; i < p.margin; i++ { p.printf("\t") } diff --git a/go/vendor/golang.org/x/mod/modfile/read.go b/go/vendor/golang.org/x/mod/modfile/read.go index a503bc2105d..5b5bb5e115b 100644 --- a/go/vendor/golang.org/x/mod/modfile/read.go +++ b/go/vendor/golang.org/x/mod/modfile/read.go @@ -65,7 +65,7 @@ type Comments struct { } // Comment returns the receiver. This isn't useful by itself, but -// a Comments struct is embedded into all the expression +// a [Comments] struct is embedded into all the expression // implementation types, and this gives each of those a Comment // method to satisfy the Expr interface. func (c *Comments) Comment() *Comments { diff --git a/go/vendor/golang.org/x/mod/modfile/rule.go b/go/vendor/golang.org/x/mod/modfile/rule.go index 6bcde8fabe3..930b6c59bc9 100644 --- a/go/vendor/golang.org/x/mod/modfile/rule.go +++ b/go/vendor/golang.org/x/mod/modfile/rule.go @@ -5,17 +5,17 @@ // Package modfile implements a parser and formatter for go.mod files. // // The go.mod syntax is described in -// https://golang.org/cmd/go/#hdr-The_go_mod_file. +// https://pkg.go.dev/cmd/go/#hdr-The_go_mod_file. // -// The Parse and ParseLax functions both parse a go.mod file and return an +// The [Parse] and [ParseLax] functions both parse a go.mod file and return an // abstract syntax tree. ParseLax ignores unknown statements and may be used to // parse go.mod files that may have been developed with newer versions of Go. // -// The File struct returned by Parse and ParseLax represent an abstract -// go.mod file. File has several methods like AddNewRequire and DropReplace -// that can be used to programmatically edit a file. +// The [File] struct returned by Parse and ParseLax represent an abstract +// go.mod file. File has several methods like [File.AddNewRequire] and +// [File.DropReplace] that can be used to programmatically edit a file. // -// The Format function formats a File back to a byte slice which can be +// The [Format] function formats a File back to a byte slice which can be // written to a file. package modfile @@ -35,12 +35,13 @@ import ( // A File is the parsed, interpreted form of a go.mod file. type File struct { - Module *Module - Go *Go - Require []*Require - Exclude []*Exclude - Replace []*Replace - Retract []*Retract + Module *Module + Go *Go + Toolchain *Toolchain + Require []*Require + Exclude []*Exclude + Replace []*Replace + Retract []*Retract Syntax *FileSyntax } @@ -58,6 +59,12 @@ type Go struct { Syntax *Line } +// A Toolchain is the toolchain statement. +type Toolchain struct { + Name string // "go1.21rc1" + Syntax *Line +} + // An Exclude is a single exclude statement. type Exclude struct { Mod module.Version @@ -219,7 +226,7 @@ var dontFixRetract VersionFixer = func(_, vers string) (string, error) { // data is the content of the file. // // fix is an optional function that canonicalizes module versions. -// If fix is nil, all module versions must be canonical (module.CanonicalVersion +// If fix is nil, all module versions must be canonical ([module.CanonicalVersion] // must return the same string). func Parse(file string, data []byte, fix VersionFixer) (*File, error) { return parseToFile(file, data, fix, true) @@ -296,9 +303,13 @@ func parseToFile(file string, data []byte, fix VersionFixer, strict bool) (parse return f, nil } -var GoVersionRE = lazyregexp.New(`^([1-9][0-9]*)\.(0|[1-9][0-9]*)$`) +var GoVersionRE = lazyregexp.New(`^([1-9][0-9]*)\.(0|[1-9][0-9]*)(\.(0|[1-9][0-9]*))?([a-z]+[0-9]+)?$`) var laxGoVersionRE = lazyregexp.New(`^v?(([1-9][0-9]*)\.(0|[1-9][0-9]*))([^0-9].*)$`) +// Toolchains must be named beginning with `go1`, +// like "go1.20.3" or "go1.20.3-gccgo". As a special case, "default" is also permitted. +var ToolchainRE = lazyregexp.New(`^default$|^go1($|\.)`) + func (f *File) add(errs *ErrorList, block *LineBlock, line *Line, verb string, args []string, fix VersionFixer, strict bool) { // If strict is false, this module is a dependency. // We ignore all unknown directives as well as main-module-only @@ -364,6 +375,21 @@ func (f *File) add(errs *ErrorList, block *LineBlock, line *Line, verb string, a f.Go = &Go{Syntax: line} f.Go.Version = args[0] + case "toolchain": + if f.Toolchain != nil { + errorf("repeated toolchain statement") + return + } + if len(args) != 1 { + errorf("toolchain directive expects exactly one argument") + return + } else if strict && !ToolchainRE.MatchString(args[0]) { + errorf("invalid toolchain version '%s': must match format go1.23 or local", args[0]) + return + } + f.Toolchain = &Toolchain{Syntax: line} + f.Toolchain.Name = args[0] + case "module": if f.Module != nil { errorf("repeated module statement") @@ -612,6 +638,22 @@ func (f *WorkFile) add(errs *ErrorList, line *Line, verb string, args []string, f.Go = &Go{Syntax: line} f.Go.Version = args[0] + case "toolchain": + if f.Toolchain != nil { + errorf("repeated toolchain statement") + return + } + if len(args) != 1 { + errorf("toolchain directive expects exactly one argument") + return + } else if !ToolchainRE.MatchString(args[0]) { + errorf("invalid toolchain version '%s': must match format go1.23 or local", args[0]) + return + } + + f.Toolchain = &Toolchain{Syntax: line} + f.Toolchain.Name = args[0] + case "use": if len(args) != 1 { errorf("usage: %s local/dir", verb) @@ -881,7 +923,7 @@ func (f *File) Format() ([]byte, error) { } // Cleanup cleans up the file f after any edit operations. -// To avoid quadratic behavior, modifications like DropRequire +// To avoid quadratic behavior, modifications like [File.DropRequire] // clear the entry but do not remove it from the slice. // Cleanup cleans out all the cleared entries. func (f *File) Cleanup() { @@ -926,7 +968,7 @@ func (f *File) Cleanup() { func (f *File) AddGoStmt(version string) error { if !GoVersionRE.MatchString(version) { - return fmt.Errorf("invalid language version string %q", version) + return fmt.Errorf("invalid language version %q", version) } if f.Go == nil { var hint Expr @@ -944,6 +986,44 @@ func (f *File) AddGoStmt(version string) error { return nil } +// DropGoStmt deletes the go statement from the file. +func (f *File) DropGoStmt() { + if f.Go != nil { + f.Go.Syntax.markRemoved() + f.Go = nil + } +} + +// DropToolchainStmt deletes the toolchain statement from the file. +func (f *File) DropToolchainStmt() { + if f.Toolchain != nil { + f.Toolchain.Syntax.markRemoved() + f.Toolchain = nil + } +} + +func (f *File) AddToolchainStmt(name string) error { + if !ToolchainRE.MatchString(name) { + return fmt.Errorf("invalid toolchain name %q", name) + } + if f.Toolchain == nil { + var hint Expr + if f.Go != nil && f.Go.Syntax != nil { + hint = f.Go.Syntax + } else if f.Module != nil && f.Module.Syntax != nil { + hint = f.Module.Syntax + } + f.Toolchain = &Toolchain{ + Name: name, + Syntax: f.Syntax.addLine(hint, "toolchain", name), + } + } else { + f.Toolchain.Name = name + f.Syntax.updateLine(f.Toolchain.Syntax, "toolchain", name) + } + return nil +} + // AddRequire sets the first require line for path to version vers, // preserving any existing comments for that line and removing all // other lines for path. @@ -995,8 +1075,8 @@ func (f *File) AddNewRequire(path, vers string, indirect bool) { // The requirements in req must specify at most one distinct version for each // module path. // -// If any existing requirements may be removed, the caller should call Cleanup -// after all edits are complete. +// If any existing requirements may be removed, the caller should call +// [File.Cleanup] after all edits are complete. func (f *File) SetRequire(req []*Require) { type elem struct { version string @@ -1387,13 +1467,21 @@ func (f *File) DropRetract(vi VersionInterval) error { func (f *File) SortBlocks() { f.removeDups() // otherwise sorting is unsafe + // semanticSortForExcludeVersionV is the Go version (plus leading "v") at which + // lines in exclude blocks start to use semantic sort instead of lexicographic sort. + // See go.dev/issue/60028. + const semanticSortForExcludeVersionV = "v1.21" + useSemanticSortForExclude := f.Go != nil && semver.Compare("v"+f.Go.Version, semanticSortForExcludeVersionV) >= 0 + for _, stmt := range f.Syntax.Stmt { block, ok := stmt.(*LineBlock) if !ok { continue } less := lineLess - if block.Token[0] == "retract" { + if block.Token[0] == "exclude" && useSemanticSortForExclude { + less = lineExcludeLess + } else if block.Token[0] == "retract" { less = lineRetractLess } sort.SliceStable(block.Line, func(i, j int) bool { @@ -1496,6 +1584,22 @@ func lineLess(li, lj *Line) bool { return len(li.Token) < len(lj.Token) } +// lineExcludeLess reports whether li should be sorted before lj for lines in +// an "exclude" block. +func lineExcludeLess(li, lj *Line) bool { + if len(li.Token) != 2 || len(lj.Token) != 2 { + // Not a known exclude specification. + // Fall back to sorting lexicographically. + return lineLess(li, lj) + } + // An exclude specification has two tokens: ModulePath and Version. + // Compare module path by string order and version by semver rules. + if pi, pj := li.Token[0], lj.Token[0]; pi != pj { + return pi < pj + } + return semver.Compare(li.Token[1], lj.Token[1]) < 0 +} + // lineRetractLess returns whether li should be sorted before lj for lines in // a "retract" block. It treats each line as a version interval. Single versions // are compared as if they were intervals with the same low and high version. diff --git a/go/vendor/golang.org/x/mod/modfile/work.go b/go/vendor/golang.org/x/mod/modfile/work.go index 0c0e521525a..d7b99376ebe 100644 --- a/go/vendor/golang.org/x/mod/modfile/work.go +++ b/go/vendor/golang.org/x/mod/modfile/work.go @@ -12,9 +12,10 @@ import ( // A WorkFile is the parsed, interpreted form of a go.work file. type WorkFile struct { - Go *Go - Use []*Use - Replace []*Replace + Go *Go + Toolchain *Toolchain + Use []*Use + Replace []*Replace Syntax *FileSyntax } @@ -33,7 +34,7 @@ type Use struct { // data is the content of the file. // // fix is an optional function that canonicalizes module versions. -// If fix is nil, all module versions must be canonical (module.CanonicalVersion +// If fix is nil, all module versions must be canonical ([module.CanonicalVersion] // must return the same string). func ParseWork(file string, data []byte, fix VersionFixer) (*WorkFile, error) { fs, err := parse(file, data) @@ -82,7 +83,7 @@ func ParseWork(file string, data []byte, fix VersionFixer) (*WorkFile, error) { } // Cleanup cleans up the file f after any edit operations. -// To avoid quadratic behavior, modifications like DropRequire +// To avoid quadratic behavior, modifications like [WorkFile.DropRequire] // clear the entry but do not remove it from the slice. // Cleanup cleans out all the cleared entries. func (f *WorkFile) Cleanup() { @@ -109,7 +110,7 @@ func (f *WorkFile) Cleanup() { func (f *WorkFile) AddGoStmt(version string) error { if !GoVersionRE.MatchString(version) { - return fmt.Errorf("invalid language version string %q", version) + return fmt.Errorf("invalid language version %q", version) } if f.Go == nil { stmt := &Line{Token: []string{"go", version}} @@ -117,7 +118,7 @@ func (f *WorkFile) AddGoStmt(version string) error { Version: version, Syntax: stmt, } - // Find the first non-comment-only block that's and add + // Find the first non-comment-only block and add // the go statement before it. That will keep file comments at the top. i := 0 for i = 0; i < len(f.Syntax.Stmt); i++ { @@ -133,6 +134,56 @@ func (f *WorkFile) AddGoStmt(version string) error { return nil } +func (f *WorkFile) AddToolchainStmt(name string) error { + if !ToolchainRE.MatchString(name) { + return fmt.Errorf("invalid toolchain name %q", name) + } + if f.Toolchain == nil { + stmt := &Line{Token: []string{"toolchain", name}} + f.Toolchain = &Toolchain{ + Name: name, + Syntax: stmt, + } + // Find the go line and add the toolchain line after it. + // Or else find the first non-comment-only block and add + // the toolchain line before it. That will keep file comments at the top. + i := 0 + for i = 0; i < len(f.Syntax.Stmt); i++ { + if line, ok := f.Syntax.Stmt[i].(*Line); ok && len(line.Token) > 0 && line.Token[0] == "go" { + i++ + goto Found + } + } + for i = 0; i < len(f.Syntax.Stmt); i++ { + if _, ok := f.Syntax.Stmt[i].(*CommentBlock); !ok { + break + } + } + Found: + f.Syntax.Stmt = append(append(f.Syntax.Stmt[:i:i], stmt), f.Syntax.Stmt[i:]...) + } else { + f.Toolchain.Name = name + f.Syntax.updateLine(f.Toolchain.Syntax, "toolchain", name) + } + return nil +} + +// DropGoStmt deletes the go statement from the file. +func (f *WorkFile) DropGoStmt() { + if f.Go != nil { + f.Go.Syntax.markRemoved() + f.Go = nil + } +} + +// DropToolchainStmt deletes the toolchain statement from the file. +func (f *WorkFile) DropToolchainStmt() { + if f.Toolchain != nil { + f.Toolchain.Syntax.markRemoved() + f.Toolchain = nil + } +} + func (f *WorkFile) AddUse(diskPath, modulePath string) error { need := true for _, d := range f.Use { diff --git a/go/vendor/golang.org/x/mod/module/module.go b/go/vendor/golang.org/x/mod/module/module.go index e9dec6e6148..2a364b229b9 100644 --- a/go/vendor/golang.org/x/mod/module/module.go +++ b/go/vendor/golang.org/x/mod/module/module.go @@ -4,7 +4,7 @@ // Package module defines the module.Version type along with support code. // -// The module.Version type is a simple Path, Version pair: +// The [module.Version] type is a simple Path, Version pair: // // type Version struct { // Path string @@ -12,7 +12,7 @@ // } // // There are no restrictions imposed directly by use of this structure, -// but additional checking functions, most notably Check, verify that +// but additional checking functions, most notably [Check], verify that // a particular path, version pair is valid. // // # Escaped Paths @@ -140,7 +140,7 @@ type ModuleError struct { Err error } -// VersionError returns a ModuleError derived from a Version and error, +// VersionError returns a [ModuleError] derived from a [Version] and error, // or err itself if it is already such an error. func VersionError(v Version, err error) error { var mErr *ModuleError @@ -169,7 +169,7 @@ func (e *ModuleError) Unwrap() error { return e.Err } // An InvalidVersionError indicates an error specific to a version, with the // module path unknown or specified externally. // -// A ModuleError may wrap an InvalidVersionError, but an InvalidVersionError +// A [ModuleError] may wrap an InvalidVersionError, but an InvalidVersionError // must not wrap a ModuleError. type InvalidVersionError struct { Version string @@ -193,8 +193,8 @@ func (e *InvalidVersionError) Error() string { func (e *InvalidVersionError) Unwrap() error { return e.Err } // An InvalidPathError indicates a module, import, or file path doesn't -// satisfy all naming constraints. See CheckPath, CheckImportPath, -// and CheckFilePath for specific restrictions. +// satisfy all naming constraints. See [CheckPath], [CheckImportPath], +// and [CheckFilePath] for specific restrictions. type InvalidPathError struct { Kind string // "module", "import", or "file" Path string @@ -294,7 +294,7 @@ func fileNameOK(r rune) bool { } // CheckPath checks that a module path is valid. -// A valid module path is a valid import path, as checked by CheckImportPath, +// A valid module path is a valid import path, as checked by [CheckImportPath], // with three additional constraints. // First, the leading path element (up to the first slash, if any), // by convention a domain name, must contain only lower-case ASCII letters, @@ -380,7 +380,7 @@ const ( // checkPath returns an error describing why the path is not valid. // Because these checks apply to module, import, and file paths, // and because other checks may be applied, the caller is expected to wrap -// this error with InvalidPathError. +// this error with [InvalidPathError]. func checkPath(path string, kind pathKind) error { if !utf8.ValidString(path) { return fmt.Errorf("invalid UTF-8") @@ -532,7 +532,7 @@ var badWindowsNames = []string{ // they require ".vN" instead of "/vN", and for all N, not just N >= 2. // SplitPathVersion returns with ok = false when presented with // a path whose last path element does not satisfy the constraints -// applied by CheckPath, such as "example.com/pkg/v1" or "example.com/pkg/v1.2". +// applied by [CheckPath], such as "example.com/pkg/v1" or "example.com/pkg/v1.2". func SplitPathVersion(path string) (prefix, pathMajor string, ok bool) { if strings.HasPrefix(path, "gopkg.in/") { return splitGopkgIn(path) @@ -582,7 +582,7 @@ func splitGopkgIn(path string) (prefix, pathMajor string, ok bool) { // MatchPathMajor reports whether the semantic version v // matches the path major version pathMajor. // -// MatchPathMajor returns true if and only if CheckPathMajor returns nil. +// MatchPathMajor returns true if and only if [CheckPathMajor] returns nil. func MatchPathMajor(v, pathMajor string) bool { return CheckPathMajor(v, pathMajor) == nil } @@ -622,7 +622,7 @@ func CheckPathMajor(v, pathMajor string) error { // PathMajorPrefix returns the major-version tag prefix implied by pathMajor. // An empty PathMajorPrefix allows either v0 or v1. // -// Note that MatchPathMajor may accept some versions that do not actually begin +// Note that [MatchPathMajor] may accept some versions that do not actually begin // with this prefix: namely, it accepts a 'v0.0.0-' prefix for a '.v1' // pathMajor, even though that pathMajor implies 'v1' tagging. func PathMajorPrefix(pathMajor string) string { @@ -643,7 +643,7 @@ func PathMajorPrefix(pathMajor string) string { } // CanonicalVersion returns the canonical form of the version string v. -// It is the same as semver.Canonical(v) except that it preserves the special build suffix "+incompatible". +// It is the same as [semver.Canonical] except that it preserves the special build suffix "+incompatible". func CanonicalVersion(v string) string { cv := semver.Canonical(v) if semver.Build(v) == "+incompatible" { @@ -652,8 +652,8 @@ func CanonicalVersion(v string) string { return cv } -// Sort sorts the list by Path, breaking ties by comparing Version fields. -// The Version fields are interpreted as semantic versions (using semver.Compare) +// Sort sorts the list by Path, breaking ties by comparing [Version] fields. +// The Version fields are interpreted as semantic versions (using [semver.Compare]) // optionally followed by a tie-breaking suffix introduced by a slash character, // like in "v0.0.1/go.mod". func Sort(list []Version) { @@ -793,7 +793,7 @@ func unescapeString(escaped string) (string, bool) { } // MatchPrefixPatterns reports whether any path prefix of target matches one of -// the glob patterns (as defined by path.Match) in the comma-separated globs +// the glob patterns (as defined by [path.Match]) in the comma-separated globs // list. This implements the algorithm used when matching a module path to the // GOPRIVATE environment variable, as described by 'go help module-private'. // diff --git a/go/vendor/golang.org/x/mod/module/pseudo.go b/go/vendor/golang.org/x/mod/module/pseudo.go index f04ad378869..9cf19d3254e 100644 --- a/go/vendor/golang.org/x/mod/module/pseudo.go +++ b/go/vendor/golang.org/x/mod/module/pseudo.go @@ -125,7 +125,7 @@ func IsPseudoVersion(v string) bool { } // IsZeroPseudoVersion returns whether v is a pseudo-version with a zero base, -// timestamp, and revision, as returned by ZeroPseudoVersion. +// timestamp, and revision, as returned by [ZeroPseudoVersion]. func IsZeroPseudoVersion(v string) bool { return v == ZeroPseudoVersion(semver.Major(v)) } diff --git a/go/vendor/golang.org/x/mod/semver/semver.go b/go/vendor/golang.org/x/mod/semver/semver.go index a30a22bf20f..9a2dfd33a77 100644 --- a/go/vendor/golang.org/x/mod/semver/semver.go +++ b/go/vendor/golang.org/x/mod/semver/semver.go @@ -140,7 +140,7 @@ func Compare(v, w string) int { // Max canonicalizes its arguments and then returns the version string // that compares greater. // -// Deprecated: use Compare instead. In most cases, returning a canonicalized +// Deprecated: use [Compare] instead. In most cases, returning a canonicalized // version is not expected or desired. func Max(v, w string) string { v = Canonical(v) @@ -151,7 +151,7 @@ func Max(v, w string) string { return w } -// ByVersion implements sort.Interface for sorting semantic version strings. +// ByVersion implements [sort.Interface] for sorting semantic version strings. type ByVersion []string func (vs ByVersion) Len() int { return len(vs) } @@ -164,7 +164,7 @@ func (vs ByVersion) Less(i, j int) bool { return vs[i] < vs[j] } -// Sort sorts a list of semantic version strings using ByVersion. +// Sort sorts a list of semantic version strings using [ByVersion]. func Sort(list []string) { sort.Sort(ByVersion(list)) } diff --git a/go/vendor/golang.org/x/sys/execabs/execabs.go b/go/vendor/golang.org/x/sys/execabs/execabs.go index b981cfbb4ae..3bf40fdfecd 100644 --- a/go/vendor/golang.org/x/sys/execabs/execabs.go +++ b/go/vendor/golang.org/x/sys/execabs/execabs.go @@ -63,7 +63,7 @@ func LookPath(file string) (string, error) { } func fixCmd(name string, cmd *exec.Cmd) { - if filepath.Base(name) == name && !filepath.IsAbs(cmd.Path) { + if filepath.Base(name) == name && !filepath.IsAbs(cmd.Path) && !isGo119ErrFieldSet(cmd) { // exec.Command was called with a bare binary name and // exec.LookPath returned a path which is not absolute. // Set cmd.lookPathErr and clear cmd.Path so that it diff --git a/go/vendor/golang.org/x/sys/execabs/execabs_go118.go b/go/vendor/golang.org/x/sys/execabs/execabs_go118.go index 6ab5f50894e..2000064a812 100644 --- a/go/vendor/golang.org/x/sys/execabs/execabs_go118.go +++ b/go/vendor/golang.org/x/sys/execabs/execabs_go118.go @@ -7,6 +7,12 @@ package execabs +import "os/exec" + func isGo119ErrDot(err error) bool { return false } + +func isGo119ErrFieldSet(cmd *exec.Cmd) bool { + return false +} diff --git a/go/vendor/golang.org/x/sys/execabs/execabs_go119.go b/go/vendor/golang.org/x/sys/execabs/execabs_go119.go index 46c5b525e7b..f364b341892 100644 --- a/go/vendor/golang.org/x/sys/execabs/execabs_go119.go +++ b/go/vendor/golang.org/x/sys/execabs/execabs_go119.go @@ -15,3 +15,7 @@ import ( func isGo119ErrDot(err error) bool { return errors.Is(err, exec.ErrDot) } + +func isGo119ErrFieldSet(cmd *exec.Cmd) bool { + return cmd.Err != nil +} diff --git a/go/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go b/go/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go index 165ede0f8f3..03543bd4bb8 100644 --- a/go/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go +++ b/go/vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go @@ -128,15 +128,14 @@ func Read(in io.Reader, fset *token.FileSet, imports map[string]*types.Package, // (from "version"). Select appropriate importer. if len(data) > 0 { switch data[0] { - case 'i': + case 'v', 'c', 'd': // binary, till go1.10 + return nil, fmt.Errorf("binary (%c) import format is no longer supported", data[0]) + + case 'i': // indexed, till go1.19 _, pkg, err := gcimporter.IImportData(fset, imports, data[1:], path) return pkg, err - case 'v', 'c', 'd': - _, pkg, err := gcimporter.BImportData(fset, imports, data, path) - return pkg, err - - case 'u': + case 'u': // unified, from go1.20 _, pkg, err := gcimporter.UImportData(fset, imports, data[1:], path) return pkg, err diff --git a/go/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go b/go/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go index 18a002f82a1..0454cdd78e5 100644 --- a/go/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go +++ b/go/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go @@ -8,7 +8,6 @@ package packagesdriver import ( "context" "fmt" - "go/types" "strings" "golang.org/x/tools/internal/gocommand" @@ -16,7 +15,7 @@ import ( var debug = false -func GetSizesGolist(ctx context.Context, inv gocommand.Invocation, gocmdRunner *gocommand.Runner) (types.Sizes, error) { +func GetSizesForArgsGolist(ctx context.Context, inv gocommand.Invocation, gocmdRunner *gocommand.Runner) (string, string, error) { inv.Verb = "list" inv.Args = []string{"-f", "{{context.GOARCH}} {{context.Compiler}}", "--", "unsafe"} stdout, stderr, friendlyErr, rawErr := gocmdRunner.RunRaw(ctx, inv) @@ -29,21 +28,21 @@ func GetSizesGolist(ctx context.Context, inv gocommand.Invocation, gocmdRunner * inv.Args = []string{"GOARCH"} envout, enverr := gocmdRunner.Run(ctx, inv) if enverr != nil { - return nil, enverr + return "", "", enverr } goarch = strings.TrimSpace(envout.String()) compiler = "gc" } else { - return nil, friendlyErr + return "", "", friendlyErr } } else { fields := strings.Fields(stdout.String()) if len(fields) < 2 { - return nil, fmt.Errorf("could not parse GOARCH and Go compiler in format \" \":\nstdout: <<%s>>\nstderr: <<%s>>", + return "", "", fmt.Errorf("could not parse GOARCH and Go compiler in format \" \":\nstdout: <<%s>>\nstderr: <<%s>>", stdout.String(), stderr.String()) } goarch = fields[0] compiler = fields[1] } - return types.SizesFor(compiler, goarch), nil + return compiler, goarch, nil } diff --git a/go/vendor/golang.org/x/tools/go/packages/golist.go b/go/vendor/golang.org/x/tools/go/packages/golist.go index 6bb7168d2e3..b5de9cf9f21 100644 --- a/go/vendor/golang.org/x/tools/go/packages/golist.go +++ b/go/vendor/golang.org/x/tools/go/packages/golist.go @@ -9,7 +9,6 @@ import ( "context" "encoding/json" "fmt" - "go/types" "io/ioutil" "log" "os" @@ -153,10 +152,10 @@ func goListDriver(cfg *Config, patterns ...string) (*driverResponse, error) { if cfg.Mode&NeedTypesSizes != 0 || cfg.Mode&NeedTypes != 0 { sizeswg.Add(1) go func() { - var sizes types.Sizes - sizes, sizeserr = packagesdriver.GetSizesGolist(ctx, state.cfgInvocation(), cfg.gocmdRunner) - // types.SizesFor always returns nil or a *types.StdSizes. - response.dr.Sizes, _ = sizes.(*types.StdSizes) + compiler, arch, err := packagesdriver.GetSizesForArgsGolist(ctx, state.cfgInvocation(), cfg.gocmdRunner) + sizeserr = err + response.dr.Compiler = compiler + response.dr.Arch = arch sizeswg.Done() }() } @@ -625,7 +624,12 @@ func (state *golistState) createDriverResponse(words ...string) (*driverResponse } if pkg.PkgPath == "unsafe" { - pkg.GoFiles = nil // ignore fake unsafe.go file + pkg.CompiledGoFiles = nil // ignore fake unsafe.go file (#59929) + } else if len(pkg.CompiledGoFiles) == 0 { + // Work around for pre-go.1.11 versions of go list. + // TODO(matloob): they should be handled by the fallback. + // Can we delete this? + pkg.CompiledGoFiles = pkg.GoFiles } // Assume go list emits only absolute paths for Dir. @@ -663,16 +667,12 @@ func (state *golistState) createDriverResponse(words ...string) (*driverResponse response.Roots = append(response.Roots, pkg.ID) } - // Work around for pre-go.1.11 versions of go list. - // TODO(matloob): they should be handled by the fallback. - // Can we delete this? - if len(pkg.CompiledGoFiles) == 0 { - pkg.CompiledGoFiles = pkg.GoFiles - } - // Temporary work-around for golang/go#39986. Parse filenames out of // error messages. This happens if there are unrecoverable syntax // errors in the source, so we can't match on a specific error message. + // + // TODO(rfindley): remove this heuristic, in favor of considering + // InvalidGoFiles from the list driver. if err := p.Error; err != nil && state.shouldAddFilenameFromError(p) { addFilenameFromPos := func(pos string) bool { split := strings.Split(pos, ":") @@ -891,6 +891,15 @@ func golistargs(cfg *Config, words []string, goVersion int) []string { // probably because you'd just get the TestMain. fmt.Sprintf("-find=%t", !cfg.Tests && cfg.Mode&findFlags == 0 && !usesExportData(cfg)), } + + // golang/go#60456: with go1.21 and later, go list serves pgo variants, which + // can be costly to compute and may result in redundant processing for the + // caller. Disable these variants. If someone wants to add e.g. a NeedPGO + // mode flag, that should be a separate proposal. + if goVersion >= 21 { + fullargs = append(fullargs, "-pgo=off") + } + fullargs = append(fullargs, cfg.BuildFlags...) fullargs = append(fullargs, "--") fullargs = append(fullargs, words...) diff --git a/go/vendor/golang.org/x/tools/go/packages/packages.go b/go/vendor/golang.org/x/tools/go/packages/packages.go index 0f1505b808a..124a6fe143b 100644 --- a/go/vendor/golang.org/x/tools/go/packages/packages.go +++ b/go/vendor/golang.org/x/tools/go/packages/packages.go @@ -220,8 +220,10 @@ type driverResponse struct { // lists of multiple drivers, go/packages will fall back to the next driver. NotHandled bool - // Sizes, if not nil, is the types.Sizes to use when type checking. - Sizes *types.StdSizes + // Compiler and Arch are the arguments pass of types.SizesFor + // to get a types.Sizes to use when type checking. + Compiler string + Arch string // Roots is the set of package IDs that make up the root packages. // We have to encode this separately because when we encode a single package @@ -262,7 +264,7 @@ func Load(cfg *Config, patterns ...string) ([]*Package, error) { if err != nil { return nil, err } - l.sizes = response.Sizes + l.sizes = types.SizesFor(response.Compiler, response.Arch) return l.refine(response) } @@ -308,6 +310,9 @@ type Package struct { TypeErrors []types.Error // GoFiles lists the absolute file paths of the package's Go source files. + // It may include files that should not be compiled, for example because + // they contain non-matching build tags, are documentary pseudo-files such as + // unsafe/unsafe.go or builtin/builtin.go, or are subject to cgo preprocessing. GoFiles []string // CompiledGoFiles lists the absolute file paths of the package's source @@ -627,7 +632,7 @@ func newLoader(cfg *Config) *loader { return ld } -// refine connects the supplied packages into a graph and then adds type and +// refine connects the supplied packages into a graph and then adds type // and syntax information as requested by the LoadMode. func (ld *loader) refine(response *driverResponse) ([]*Package, error) { roots := response.Roots @@ -1040,6 +1045,9 @@ func (ld *loader) loadPackage(lpkg *loaderPackage) { Error: appendError, Sizes: ld.sizes, } + if lpkg.Module != nil && lpkg.Module.GoVersion != "" { + typesinternal.SetGoVersion(tc, "go"+lpkg.Module.GoVersion) + } if (ld.Mode & typecheckCgo) != 0 { if !typesinternal.SetUsesCgo(tc) { appendError(Error{ diff --git a/go/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go b/go/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go new file mode 100644 index 00000000000..fa5834baf72 --- /dev/null +++ b/go/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go @@ -0,0 +1,827 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package objectpath defines a naming scheme for types.Objects +// (that is, named entities in Go programs) relative to their enclosing +// package. +// +// Type-checker objects are canonical, so they are usually identified by +// their address in memory (a pointer), but a pointer has meaning only +// within one address space. By contrast, objectpath names allow the +// identity of an object to be sent from one program to another, +// establishing a correspondence between types.Object variables that are +// distinct but logically equivalent. +// +// A single object may have multiple paths. In this example, +// +// type A struct{ X int } +// type B A +// +// the field X has two paths due to its membership of both A and B. +// The For(obj) function always returns one of these paths, arbitrarily +// but consistently. +package objectpath + +import ( + "fmt" + "go/types" + "sort" + "strconv" + "strings" + _ "unsafe" + + "golang.org/x/tools/internal/typeparams" + "golang.org/x/tools/internal/typesinternal" +) + +// A Path is an opaque name that identifies a types.Object +// relative to its package. Conceptually, the name consists of a +// sequence of destructuring operations applied to the package scope +// to obtain the original object. +// The name does not include the package itself. +type Path string + +// Encoding +// +// An object path is a textual and (with training) human-readable encoding +// of a sequence of destructuring operators, starting from a types.Package. +// The sequences represent a path through the package/object/type graph. +// We classify these operators by their type: +// +// PO package->object Package.Scope.Lookup +// OT object->type Object.Type +// TT type->type Type.{Elem,Key,Params,Results,Underlying} [EKPRU] +// TO type->object Type.{At,Field,Method,Obj} [AFMO] +// +// All valid paths start with a package and end at an object +// and thus may be defined by the regular language: +// +// objectpath = PO (OT TT* TO)* +// +// The concrete encoding follows directly: +// - The only PO operator is Package.Scope.Lookup, which requires an identifier. +// - The only OT operator is Object.Type, +// which we encode as '.' because dot cannot appear in an identifier. +// - The TT operators are encoded as [EKPRUTC]; +// one of these (TypeParam) requires an integer operand, +// which is encoded as a string of decimal digits. +// - The TO operators are encoded as [AFMO]; +// three of these (At,Field,Method) require an integer operand, +// which is encoded as a string of decimal digits. +// These indices are stable across different representations +// of the same package, even source and export data. +// The indices used are implementation specific and may not correspond to +// the argument to the go/types function. +// +// In the example below, +// +// package p +// +// type T interface { +// f() (a string, b struct{ X int }) +// } +// +// field X has the path "T.UM0.RA1.F0", +// representing the following sequence of operations: +// +// p.Lookup("T") T +// .Type().Underlying().Method(0). f +// .Type().Results().At(1) b +// .Type().Field(0) X +// +// The encoding is not maximally compact---every R or P is +// followed by an A, for example---but this simplifies the +// encoder and decoder. +const ( + // object->type operators + opType = '.' // .Type() (Object) + + // type->type operators + opElem = 'E' // .Elem() (Pointer, Slice, Array, Chan, Map) + opKey = 'K' // .Key() (Map) + opParams = 'P' // .Params() (Signature) + opResults = 'R' // .Results() (Signature) + opUnderlying = 'U' // .Underlying() (Named) + opTypeParam = 'T' // .TypeParams.At(i) (Named, Signature) + opConstraint = 'C' // .Constraint() (TypeParam) + + // type->object operators + opAt = 'A' // .At(i) (Tuple) + opField = 'F' // .Field(i) (Struct) + opMethod = 'M' // .Method(i) (Named or Interface; not Struct: "promoted" names are ignored) + opObj = 'O' // .Obj() (Named, TypeParam) +) + +// For is equivalent to new(Encoder).For(obj). +// +// It may be more efficient to reuse a single Encoder across several calls. +func For(obj types.Object) (Path, error) { + return new(Encoder).For(obj) +} + +// An Encoder amortizes the cost of encoding the paths of multiple objects. +// The zero value of an Encoder is ready to use. +type Encoder struct { + scopeMemo map[*types.Scope][]types.Object // memoization of scopeObjects + namedMethodsMemo map[*types.Named][]*types.Func // memoization of namedMethods() + skipMethodSorting bool +} + +// Expose back doors so that gopls can avoid method sorting, which can dominate +// analysis on certain repositories. +// +// TODO(golang/go#61443): remove this. +func init() { + typesinternal.SkipEncoderMethodSorting = func(enc interface{}) { + enc.(*Encoder).skipMethodSorting = true + } + typesinternal.ObjectpathObject = object +} + +// For returns the path to an object relative to its package, +// or an error if the object is not accessible from the package's Scope. +// +// The For function guarantees to return a path only for the following objects: +// - package-level types +// - exported package-level non-types +// - methods +// - parameter and result variables +// - struct fields +// These objects are sufficient to define the API of their package. +// The objects described by a package's export data are drawn from this set. +// +// The set of objects accessible from a package's Scope depends on +// whether the package was produced by type-checking syntax, or +// reading export data; the latter may have a smaller Scope since +// export data trims objects that are not reachable from an exported +// declaration. For example, the For function will return a path for +// an exported method of an unexported type that is not reachable +// from any public declaration; this path will cause the Object +// function to fail if called on a package loaded from export data. +// TODO(adonovan): is this a bug or feature? Should this package +// compute accessibility in the same way? +// +// For does not return a path for predeclared names, imported package +// names, local names, and unexported package-level names (except +// types). +// +// Example: given this definition, +// +// package p +// +// type T interface { +// f() (a string, b struct{ X int }) +// } +// +// For(X) would return a path that denotes the following sequence of operations: +// +// p.Scope().Lookup("T") (TypeName T) +// .Type().Underlying().Method(0). (method Func f) +// .Type().Results().At(1) (field Var b) +// .Type().Field(0) (field Var X) +// +// where p is the package (*types.Package) to which X belongs. +func (enc *Encoder) For(obj types.Object) (Path, error) { + pkg := obj.Pkg() + + // This table lists the cases of interest. + // + // Object Action + // ------ ------ + // nil reject + // builtin reject + // pkgname reject + // label reject + // var + // package-level accept + // func param/result accept + // local reject + // struct field accept + // const + // package-level accept + // local reject + // func + // package-level accept + // init functions reject + // concrete method accept + // interface method accept + // type + // package-level accept + // local reject + // + // The only accessible package-level objects are members of pkg itself. + // + // The cases are handled in four steps: + // + // 1. reject nil and builtin + // 2. accept package-level objects + // 3. reject obviously invalid objects + // 4. search the API for the path to the param/result/field/method. + + // 1. reference to nil or builtin? + if pkg == nil { + return "", fmt.Errorf("predeclared %s has no path", obj) + } + scope := pkg.Scope() + + // 2. package-level object? + if scope.Lookup(obj.Name()) == obj { + // Only exported objects (and non-exported types) have a path. + // Non-exported types may be referenced by other objects. + if _, ok := obj.(*types.TypeName); !ok && !obj.Exported() { + return "", fmt.Errorf("no path for non-exported %v", obj) + } + return Path(obj.Name()), nil + } + + // 3. Not a package-level object. + // Reject obviously non-viable cases. + switch obj := obj.(type) { + case *types.TypeName: + if _, ok := obj.Type().(*typeparams.TypeParam); !ok { + // With the exception of type parameters, only package-level type names + // have a path. + return "", fmt.Errorf("no path for %v", obj) + } + case *types.Const, // Only package-level constants have a path. + *types.Label, // Labels are function-local. + *types.PkgName: // PkgNames are file-local. + return "", fmt.Errorf("no path for %v", obj) + + case *types.Var: + // Could be: + // - a field (obj.IsField()) + // - a func parameter or result + // - a local var. + // Sadly there is no way to distinguish + // a param/result from a local + // so we must proceed to the find. + + case *types.Func: + // A func, if not package-level, must be a method. + if recv := obj.Type().(*types.Signature).Recv(); recv == nil { + return "", fmt.Errorf("func is not a method: %v", obj) + } + + if path, ok := enc.concreteMethod(obj); ok { + // Fast path for concrete methods that avoids looping over scope. + return path, nil + } + + default: + panic(obj) + } + + // 4. Search the API for the path to the var (field/param/result) or method. + + // First inspect package-level named types. + // In the presence of path aliases, these give + // the best paths because non-types may + // refer to types, but not the reverse. + empty := make([]byte, 0, 48) // initial space + objs := enc.scopeObjects(scope) + for _, o := range objs { + tname, ok := o.(*types.TypeName) + if !ok { + continue // handle non-types in second pass + } + + path := append(empty, o.Name()...) + path = append(path, opType) + + T := o.Type() + + if tname.IsAlias() { + // type alias + if r := find(obj, T, path, nil); r != nil { + return Path(r), nil + } + } else { + if named, _ := T.(*types.Named); named != nil { + if r := findTypeParam(obj, typeparams.ForNamed(named), path, nil); r != nil { + // generic named type + return Path(r), nil + } + } + // defined (named) type + if r := find(obj, T.Underlying(), append(path, opUnderlying), nil); r != nil { + return Path(r), nil + } + } + } + + // Then inspect everything else: + // non-types, and declared methods of defined types. + for _, o := range objs { + path := append(empty, o.Name()...) + if _, ok := o.(*types.TypeName); !ok { + if o.Exported() { + // exported non-type (const, var, func) + if r := find(obj, o.Type(), append(path, opType), nil); r != nil { + return Path(r), nil + } + } + continue + } + + // Inspect declared methods of defined types. + if T, ok := o.Type().(*types.Named); ok { + path = append(path, opType) + if !enc.skipMethodSorting { + // Note that method index here is always with respect + // to canonical ordering of methods, regardless of how + // they appear in the underlying type. + for i, m := range enc.namedMethods(T) { + path2 := appendOpArg(path, opMethod, i) + if m == obj { + return Path(path2), nil // found declared method + } + if r := find(obj, m.Type(), append(path2, opType), nil); r != nil { + return Path(r), nil + } + } + } else { + // This branch must match the logic in the branch above, using go/types + // APIs without sorting. + for i := 0; i < T.NumMethods(); i++ { + m := T.Method(i) + path2 := appendOpArg(path, opMethod, i) + if m == obj { + return Path(path2), nil // found declared method + } + if r := find(obj, m.Type(), append(path2, opType), nil); r != nil { + return Path(r), nil + } + } + } + } + } + + return "", fmt.Errorf("can't find path for %v in %s", obj, pkg.Path()) +} + +func appendOpArg(path []byte, op byte, arg int) []byte { + path = append(path, op) + path = strconv.AppendInt(path, int64(arg), 10) + return path +} + +// concreteMethod returns the path for meth, which must have a non-nil receiver. +// The second return value indicates success and may be false if the method is +// an interface method or if it is an instantiated method. +// +// This function is just an optimization that avoids the general scope walking +// approach. You are expected to fall back to the general approach if this +// function fails. +func (enc *Encoder) concreteMethod(meth *types.Func) (Path, bool) { + // Concrete methods can only be declared on package-scoped named types. For + // that reason we can skip the expensive walk over the package scope: the + // path will always be package -> named type -> method. We can trivially get + // the type name from the receiver, and only have to look over the type's + // methods to find the method index. + // + // Methods on generic types require special consideration, however. Consider + // the following package: + // + // L1: type S[T any] struct{} + // L2: func (recv S[A]) Foo() { recv.Bar() } + // L3: func (recv S[B]) Bar() { } + // L4: type Alias = S[int] + // L5: func _[T any]() { var s S[int]; s.Foo() } + // + // The receivers of methods on generic types are instantiations. L2 and L3 + // instantiate S with the type-parameters A and B, which are scoped to the + // respective methods. L4 and L5 each instantiate S with int. Each of these + // instantiations has its own method set, full of methods (and thus objects) + // with receivers whose types are the respective instantiations. In other + // words, we have + // + // S[A].Foo, S[A].Bar + // S[B].Foo, S[B].Bar + // S[int].Foo, S[int].Bar + // + // We may thus be trying to produce object paths for any of these objects. + // + // S[A].Foo and S[B].Bar are the origin methods, and their paths are S.Foo + // and S.Bar, which are the paths that this function naturally produces. + // + // S[A].Bar, S[B].Foo, and both methods on S[int] are instantiations that + // don't correspond to the origin methods. For S[int], this is significant. + // The most precise object path for S[int].Foo, for example, is Alias.Foo, + // not S.Foo. Our function, however, would produce S.Foo, which would + // resolve to a different object. + // + // For S[A].Bar and S[B].Foo it could be argued that S.Bar and S.Foo are + // still the correct paths, since only the origin methods have meaningful + // paths. But this is likely only true for trivial cases and has edge cases. + // Since this function is only an optimization, we err on the side of giving + // up, deferring to the slower but definitely correct algorithm. Most users + // of objectpath will only be giving us origin methods, anyway, as referring + // to instantiated methods is usually not useful. + + if typeparams.OriginMethod(meth) != meth { + return "", false + } + + recvT := meth.Type().(*types.Signature).Recv().Type() + if ptr, ok := recvT.(*types.Pointer); ok { + recvT = ptr.Elem() + } + + named, ok := recvT.(*types.Named) + if !ok { + return "", false + } + + if types.IsInterface(named) { + // Named interfaces don't have to be package-scoped + // + // TODO(dominikh): opt: if scope.Lookup(name) == named, then we can apply this optimization to interface + // methods, too, I think. + return "", false + } + + // Preallocate space for the name, opType, opMethod, and some digits. + name := named.Obj().Name() + path := make([]byte, 0, len(name)+8) + path = append(path, name...) + path = append(path, opType) + + if !enc.skipMethodSorting { + for i, m := range enc.namedMethods(named) { + if m == meth { + path = appendOpArg(path, opMethod, i) + return Path(path), true + } + } + } else { + // This branch must match the logic of the branch above, using go/types + // APIs without sorting. + for i := 0; i < named.NumMethods(); i++ { + m := named.Method(i) + if m == meth { + path = appendOpArg(path, opMethod, i) + return Path(path), true + } + } + } + + // Due to golang/go#59944, go/types fails to associate the receiver with + // certain methods on cgo types. + // + // TODO(rfindley): replace this panic once golang/go#59944 is fixed in all Go + // versions gopls supports. + return "", false + // panic(fmt.Sprintf("couldn't find method %s on type %s; methods: %#v", meth, named, enc.namedMethods(named))) +} + +// find finds obj within type T, returning the path to it, or nil if not found. +// +// The seen map is used to short circuit cycles through type parameters. If +// nil, it will be allocated as necessary. +func find(obj types.Object, T types.Type, path []byte, seen map[*types.TypeName]bool) []byte { + switch T := T.(type) { + case *types.Basic, *types.Named: + // Named types belonging to pkg were handled already, + // so T must belong to another package. No path. + return nil + case *types.Pointer: + return find(obj, T.Elem(), append(path, opElem), seen) + case *types.Slice: + return find(obj, T.Elem(), append(path, opElem), seen) + case *types.Array: + return find(obj, T.Elem(), append(path, opElem), seen) + case *types.Chan: + return find(obj, T.Elem(), append(path, opElem), seen) + case *types.Map: + if r := find(obj, T.Key(), append(path, opKey), seen); r != nil { + return r + } + return find(obj, T.Elem(), append(path, opElem), seen) + case *types.Signature: + if r := findTypeParam(obj, typeparams.ForSignature(T), path, seen); r != nil { + return r + } + if r := find(obj, T.Params(), append(path, opParams), seen); r != nil { + return r + } + return find(obj, T.Results(), append(path, opResults), seen) + case *types.Struct: + for i := 0; i < T.NumFields(); i++ { + fld := T.Field(i) + path2 := appendOpArg(path, opField, i) + if fld == obj { + return path2 // found field var + } + if r := find(obj, fld.Type(), append(path2, opType), seen); r != nil { + return r + } + } + return nil + case *types.Tuple: + for i := 0; i < T.Len(); i++ { + v := T.At(i) + path2 := appendOpArg(path, opAt, i) + if v == obj { + return path2 // found param/result var + } + if r := find(obj, v.Type(), append(path2, opType), seen); r != nil { + return r + } + } + return nil + case *types.Interface: + for i := 0; i < T.NumMethods(); i++ { + m := T.Method(i) + path2 := appendOpArg(path, opMethod, i) + if m == obj { + return path2 // found interface method + } + if r := find(obj, m.Type(), append(path2, opType), seen); r != nil { + return r + } + } + return nil + case *typeparams.TypeParam: + name := T.Obj() + if name == obj { + return append(path, opObj) + } + if seen[name] { + return nil + } + if seen == nil { + seen = make(map[*types.TypeName]bool) + } + seen[name] = true + if r := find(obj, T.Constraint(), append(path, opConstraint), seen); r != nil { + return r + } + return nil + } + panic(T) +} + +func findTypeParam(obj types.Object, list *typeparams.TypeParamList, path []byte, seen map[*types.TypeName]bool) []byte { + for i := 0; i < list.Len(); i++ { + tparam := list.At(i) + path2 := appendOpArg(path, opTypeParam, i) + if r := find(obj, tparam, path2, seen); r != nil { + return r + } + } + return nil +} + +// Object returns the object denoted by path p within the package pkg. +func Object(pkg *types.Package, p Path) (types.Object, error) { + return object(pkg, string(p), false) +} + +// Note: the skipMethodSorting parameter must match the value of +// Encoder.skipMethodSorting used during encoding. +func object(pkg *types.Package, pathstr string, skipMethodSorting bool) (types.Object, error) { + if pathstr == "" { + return nil, fmt.Errorf("empty path") + } + + var pkgobj, suffix string + if dot := strings.IndexByte(pathstr, opType); dot < 0 { + pkgobj = pathstr + } else { + pkgobj = pathstr[:dot] + suffix = pathstr[dot:] // suffix starts with "." + } + + obj := pkg.Scope().Lookup(pkgobj) + if obj == nil { + return nil, fmt.Errorf("package %s does not contain %q", pkg.Path(), pkgobj) + } + + // abstraction of *types.{Pointer,Slice,Array,Chan,Map} + type hasElem interface { + Elem() types.Type + } + // abstraction of *types.{Named,Signature} + type hasTypeParams interface { + TypeParams() *typeparams.TypeParamList + } + // abstraction of *types.{Named,TypeParam} + type hasObj interface { + Obj() *types.TypeName + } + + // The loop state is the pair (t, obj), + // exactly one of which is non-nil, initially obj. + // All suffixes start with '.' (the only object->type operation), + // followed by optional type->type operations, + // then a type->object operation. + // The cycle then repeats. + var t types.Type + for suffix != "" { + code := suffix[0] + suffix = suffix[1:] + + // Codes [AFM] have an integer operand. + var index int + switch code { + case opAt, opField, opMethod, opTypeParam: + rest := strings.TrimLeft(suffix, "0123456789") + numerals := suffix[:len(suffix)-len(rest)] + suffix = rest + i, err := strconv.Atoi(numerals) + if err != nil { + return nil, fmt.Errorf("invalid path: bad numeric operand %q for code %q", numerals, code) + } + index = int(i) + case opObj: + // no operand + default: + // The suffix must end with a type->object operation. + if suffix == "" { + return nil, fmt.Errorf("invalid path: ends with %q, want [AFMO]", code) + } + } + + if code == opType { + if t != nil { + return nil, fmt.Errorf("invalid path: unexpected %q in type context", opType) + } + t = obj.Type() + obj = nil + continue + } + + if t == nil { + return nil, fmt.Errorf("invalid path: code %q in object context", code) + } + + // Inv: t != nil, obj == nil + + switch code { + case opElem: + hasElem, ok := t.(hasElem) // Pointer, Slice, Array, Chan, Map + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want pointer, slice, array, chan or map)", code, t, t) + } + t = hasElem.Elem() + + case opKey: + mapType, ok := t.(*types.Map) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want map)", code, t, t) + } + t = mapType.Key() + + case opParams: + sig, ok := t.(*types.Signature) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t) + } + t = sig.Params() + + case opResults: + sig, ok := t.(*types.Signature) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t) + } + t = sig.Results() + + case opUnderlying: + named, ok := t.(*types.Named) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named)", code, t, t) + } + t = named.Underlying() + + case opTypeParam: + hasTypeParams, ok := t.(hasTypeParams) // Named, Signature + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named or signature)", code, t, t) + } + tparams := hasTypeParams.TypeParams() + if n := tparams.Len(); index >= n { + return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n) + } + t = tparams.At(index) + + case opConstraint: + tparam, ok := t.(*typeparams.TypeParam) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want type parameter)", code, t, t) + } + t = tparam.Constraint() + + case opAt: + tuple, ok := t.(*types.Tuple) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want tuple)", code, t, t) + } + if n := tuple.Len(); index >= n { + return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n) + } + obj = tuple.At(index) + t = nil + + case opField: + structType, ok := t.(*types.Struct) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want struct)", code, t, t) + } + if n := structType.NumFields(); index >= n { + return nil, fmt.Errorf("field index %d out of range [0-%d)", index, n) + } + obj = structType.Field(index) + t = nil + + case opMethod: + switch t := t.(type) { + case *types.Interface: + if index >= t.NumMethods() { + return nil, fmt.Errorf("method index %d out of range [0-%d)", index, t.NumMethods()) + } + obj = t.Method(index) // Id-ordered + + case *types.Named: + if index >= t.NumMethods() { + return nil, fmt.Errorf("method index %d out of range [0-%d)", index, t.NumMethods()) + } + if skipMethodSorting { + obj = t.Method(index) + } else { + methods := namedMethods(t) // (unmemoized) + obj = methods[index] // Id-ordered + } + + default: + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want interface or named)", code, t, t) + } + t = nil + + case opObj: + hasObj, ok := t.(hasObj) + if !ok { + return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named or type param)", code, t, t) + } + obj = hasObj.Obj() + t = nil + + default: + return nil, fmt.Errorf("invalid path: unknown code %q", code) + } + } + + if obj.Pkg() != pkg { + return nil, fmt.Errorf("path denotes %s, which belongs to a different package", obj) + } + + return obj, nil // success +} + +// namedMethods returns the methods of a Named type in ascending Id order. +func namedMethods(named *types.Named) []*types.Func { + methods := make([]*types.Func, named.NumMethods()) + for i := range methods { + methods[i] = named.Method(i) + } + sort.Slice(methods, func(i, j int) bool { + return methods[i].Id() < methods[j].Id() + }) + return methods +} + +// namedMethods is a memoization of the namedMethods function. Callers must not modify the result. +func (enc *Encoder) namedMethods(named *types.Named) []*types.Func { + m := enc.namedMethodsMemo + if m == nil { + m = make(map[*types.Named][]*types.Func) + enc.namedMethodsMemo = m + } + methods, ok := m[named] + if !ok { + methods = namedMethods(named) // allocates and sorts + m[named] = methods + } + return methods +} + +// scopeObjects is a memoization of scope objects. +// Callers must not modify the result. +func (enc *Encoder) scopeObjects(scope *types.Scope) []types.Object { + m := enc.scopeMemo + if m == nil { + m = make(map[*types.Scope][]types.Object) + enc.scopeMemo = m + } + objs, ok := m[scope] + if !ok { + names := scope.Names() // allocates and sorts + objs = make([]types.Object, len(names)) + for i, name := range names { + objs[i] = scope.Lookup(name) + } + m[scope] = objs + } + return objs +} diff --git a/go/vendor/golang.org/x/tools/internal/event/tag/tag.go b/go/vendor/golang.org/x/tools/internal/event/tag/tag.go new file mode 100644 index 00000000000..581b26c2041 --- /dev/null +++ b/go/vendor/golang.org/x/tools/internal/event/tag/tag.go @@ -0,0 +1,59 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package tag provides the labels used for telemetry throughout gopls. +package tag + +import ( + "golang.org/x/tools/internal/event/keys" +) + +var ( + // create the label keys we use + Method = keys.NewString("method", "") + StatusCode = keys.NewString("status.code", "") + StatusMessage = keys.NewString("status.message", "") + RPCID = keys.NewString("id", "") + RPCDirection = keys.NewString("direction", "") + File = keys.NewString("file", "") + Directory = keys.New("directory", "") + URI = keys.New("URI", "") + Package = keys.NewString("package", "") // sorted comma-separated list of Package IDs + PackagePath = keys.NewString("package_path", "") + Query = keys.New("query", "") + Snapshot = keys.NewUInt64("snapshot", "") + Operation = keys.NewString("operation", "") + + Position = keys.New("position", "") + Category = keys.NewString("category", "") + PackageCount = keys.NewInt("packages", "") + Files = keys.New("files", "") + Port = keys.NewInt("port", "") + Type = keys.New("type", "") + HoverKind = keys.NewString("hoverkind", "") + + NewServer = keys.NewString("new_server", "A new server was added") + EndServer = keys.NewString("end_server", "A server was shut down") + + ServerID = keys.NewString("server", "The server ID an event is related to") + Logfile = keys.NewString("logfile", "") + DebugAddress = keys.NewString("debug_address", "") + GoplsPath = keys.NewString("gopls_path", "") + ClientID = keys.NewString("client_id", "") + + Level = keys.NewInt("level", "The logging level") +) + +var ( + // create the stats we measure + Started = keys.NewInt64("started", "Count of started RPCs.") + ReceivedBytes = keys.NewInt64("received_bytes", "Bytes received.") //, unit.Bytes) + SentBytes = keys.NewInt64("sent_bytes", "Bytes sent.") //, unit.Bytes) + Latency = keys.NewFloat64("latency_ms", "Elapsed time in milliseconds") //, unit.Milliseconds) +) + +const ( + Inbound = "in" + Outbound = "out" +) diff --git a/go/vendor/golang.org/x/tools/internal/gcimporter/bimport.go b/go/vendor/golang.org/x/tools/internal/gcimporter/bimport.go index b85de014700..d98b0db2a9a 100644 --- a/go/vendor/golang.org/x/tools/internal/gcimporter/bimport.go +++ b/go/vendor/golang.org/x/tools/internal/gcimporter/bimport.go @@ -2,340 +2,24 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// This file is a copy of $GOROOT/src/go/internal/gcimporter/bimport.go. +// This file contains the remaining vestiges of +// $GOROOT/src/go/internal/gcimporter/bimport.go. package gcimporter import ( - "encoding/binary" "fmt" - "go/constant" "go/token" "go/types" - "sort" - "strconv" - "strings" "sync" - "unicode" - "unicode/utf8" ) -type importer struct { - imports map[string]*types.Package - data []byte - importpath string - buf []byte // for reading strings - version int // export format version - - // object lists - strList []string // in order of appearance - pathList []string // in order of appearance - pkgList []*types.Package // in order of appearance - typList []types.Type // in order of appearance - interfaceList []*types.Interface // for delayed completion only - trackAllTypes bool - - // position encoding - posInfoFormat bool - prevFile string - prevLine int - fake fakeFileSet - - // debugging support - debugFormat bool - read int // bytes read -} - -// BImportData imports a package from the serialized package data -// and returns the number of bytes consumed and a reference to the package. -// If the export data version is not recognized or the format is otherwise -// compromised, an error is returned. -func BImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (_ int, pkg *types.Package, err error) { - // catch panics and return them as errors - const currentVersion = 6 - version := -1 // unknown version - defer func() { - if e := recover(); e != nil { - // Return a (possibly nil or incomplete) package unchanged (see #16088). - if version > currentVersion { - err = fmt.Errorf("cannot import %q (%v), export data is newer version - update tool", path, e) - } else { - err = fmt.Errorf("cannot import %q (%v), possibly version skew - reinstall package", path, e) - } - } - }() - - p := importer{ - imports: imports, - data: data, - importpath: path, - version: version, - strList: []string{""}, // empty string is mapped to 0 - pathList: []string{""}, // empty string is mapped to 0 - fake: fakeFileSet{ - fset: fset, - files: make(map[string]*fileInfo), - }, - } - defer p.fake.setLines() // set lines for files in fset - - // read version info - var versionstr string - if b := p.rawByte(); b == 'c' || b == 'd' { - // Go1.7 encoding; first byte encodes low-level - // encoding format (compact vs debug). - // For backward-compatibility only (avoid problems with - // old installed packages). Newly compiled packages use - // the extensible format string. - // TODO(gri) Remove this support eventually; after Go1.8. - if b == 'd' { - p.debugFormat = true - } - p.trackAllTypes = p.rawByte() == 'a' - p.posInfoFormat = p.int() != 0 - versionstr = p.string() - if versionstr == "v1" { - version = 0 - } - } else { - // Go1.8 extensible encoding - // read version string and extract version number (ignore anything after the version number) - versionstr = p.rawStringln(b) - if s := strings.SplitN(versionstr, " ", 3); len(s) >= 2 && s[0] == "version" { - if v, err := strconv.Atoi(s[1]); err == nil && v > 0 { - version = v - } - } - } - p.version = version - - // read version specific flags - extend as necessary - switch p.version { - // case currentVersion: - // ... - // fallthrough - case currentVersion, 5, 4, 3, 2, 1: - p.debugFormat = p.rawStringln(p.rawByte()) == "debug" - p.trackAllTypes = p.int() != 0 - p.posInfoFormat = p.int() != 0 - case 0: - // Go1.7 encoding format - nothing to do here - default: - errorf("unknown bexport format version %d (%q)", p.version, versionstr) - } - - // --- generic export data --- - - // populate typList with predeclared "known" types - p.typList = append(p.typList, predeclared()...) - - // read package data - pkg = p.pkg() - - // read objects of phase 1 only (see cmd/compile/internal/gc/bexport.go) - objcount := 0 - for { - tag := p.tagOrIndex() - if tag == endTag { - break - } - p.obj(tag) - objcount++ - } - - // self-verification - if count := p.int(); count != objcount { - errorf("got %d objects; want %d", objcount, count) - } - - // ignore compiler-specific import data - - // complete interfaces - // TODO(gri) re-investigate if we still need to do this in a delayed fashion - for _, typ := range p.interfaceList { - typ.Complete() - } - - // record all referenced packages as imports - list := append(([]*types.Package)(nil), p.pkgList[1:]...) - sort.Sort(byPath(list)) - pkg.SetImports(list) - - // package was imported completely and without errors - pkg.MarkComplete() - - return p.read, pkg, nil -} - func errorf(format string, args ...interface{}) { panic(fmt.Sprintf(format, args...)) } -func (p *importer) pkg() *types.Package { - // if the package was seen before, i is its index (>= 0) - i := p.tagOrIndex() - if i >= 0 { - return p.pkgList[i] - } - - // otherwise, i is the package tag (< 0) - if i != packageTag { - errorf("unexpected package tag %d version %d", i, p.version) - } - - // read package data - name := p.string() - var path string - if p.version >= 5 { - path = p.path() - } else { - path = p.string() - } - if p.version >= 6 { - p.int() // package height; unused by go/types - } - - // we should never see an empty package name - if name == "" { - errorf("empty package name in import") - } - - // an empty path denotes the package we are currently importing; - // it must be the first package we see - if (path == "") != (len(p.pkgList) == 0) { - errorf("package path %q for pkg index %d", path, len(p.pkgList)) - } - - // if the package was imported before, use that one; otherwise create a new one - if path == "" { - path = p.importpath - } - pkg := p.imports[path] - if pkg == nil { - pkg = types.NewPackage(path, name) - p.imports[path] = pkg - } else if pkg.Name() != name { - errorf("conflicting names %s and %s for package %q", pkg.Name(), name, path) - } - p.pkgList = append(p.pkgList, pkg) - - return pkg -} - -// objTag returns the tag value for each object kind. -func objTag(obj types.Object) int { - switch obj.(type) { - case *types.Const: - return constTag - case *types.TypeName: - return typeTag - case *types.Var: - return varTag - case *types.Func: - return funcTag - default: - errorf("unexpected object: %v (%T)", obj, obj) // panics - panic("unreachable") - } -} - -func sameObj(a, b types.Object) bool { - // Because unnamed types are not canonicalized, we cannot simply compare types for - // (pointer) identity. - // Ideally we'd check equality of constant values as well, but this is good enough. - return objTag(a) == objTag(b) && types.Identical(a.Type(), b.Type()) -} - -func (p *importer) declare(obj types.Object) { - pkg := obj.Pkg() - if alt := pkg.Scope().Insert(obj); alt != nil { - // This can only trigger if we import a (non-type) object a second time. - // Excluding type aliases, this cannot happen because 1) we only import a package - // once; and b) we ignore compiler-specific export data which may contain - // functions whose inlined function bodies refer to other functions that - // were already imported. - // However, type aliases require reexporting the original type, so we need - // to allow it (see also the comment in cmd/compile/internal/gc/bimport.go, - // method importer.obj, switch case importing functions). - // TODO(gri) review/update this comment once the gc compiler handles type aliases. - if !sameObj(obj, alt) { - errorf("inconsistent import:\n\t%v\npreviously imported as:\n\t%v\n", obj, alt) - } - } -} - -func (p *importer) obj(tag int) { - switch tag { - case constTag: - pos := p.pos() - pkg, name := p.qualifiedName() - typ := p.typ(nil, nil) - val := p.value() - p.declare(types.NewConst(pos, pkg, name, typ, val)) - - case aliasTag: - // TODO(gri) verify type alias hookup is correct - pos := p.pos() - pkg, name := p.qualifiedName() - typ := p.typ(nil, nil) - p.declare(types.NewTypeName(pos, pkg, name, typ)) - - case typeTag: - p.typ(nil, nil) - - case varTag: - pos := p.pos() - pkg, name := p.qualifiedName() - typ := p.typ(nil, nil) - p.declare(types.NewVar(pos, pkg, name, typ)) - - case funcTag: - pos := p.pos() - pkg, name := p.qualifiedName() - params, isddd := p.paramList() - result, _ := p.paramList() - sig := types.NewSignature(nil, params, result, isddd) - p.declare(types.NewFunc(pos, pkg, name, sig)) - - default: - errorf("unexpected object tag %d", tag) - } -} - const deltaNewFile = -64 // see cmd/compile/internal/gc/bexport.go -func (p *importer) pos() token.Pos { - if !p.posInfoFormat { - return token.NoPos - } - - file := p.prevFile - line := p.prevLine - delta := p.int() - line += delta - if p.version >= 5 { - if delta == deltaNewFile { - if n := p.int(); n >= 0 { - // file changed - file = p.path() - line = n - } - } - } else { - if delta == 0 { - if n := p.int(); n >= 0 { - // file changed - file = p.prevFile[:n] + p.string() - line = p.int() - } - } - } - p.prevFile = file - p.prevLine = line - - return p.fake.pos(file, line, 0) -} - // Synthesize a token.Pos type fakeFileSet struct { fset *token.FileSet @@ -389,205 +73,6 @@ var ( fakeLinesOnce sync.Once ) -func (p *importer) qualifiedName() (pkg *types.Package, name string) { - name = p.string() - pkg = p.pkg() - return -} - -func (p *importer) record(t types.Type) { - p.typList = append(p.typList, t) -} - -// A dddSlice is a types.Type representing ...T parameters. -// It only appears for parameter types and does not escape -// the importer. -type dddSlice struct { - elem types.Type -} - -func (t *dddSlice) Underlying() types.Type { return t } -func (t *dddSlice) String() string { return "..." + t.elem.String() } - -// parent is the package which declared the type; parent == nil means -// the package currently imported. The parent package is needed for -// exported struct fields and interface methods which don't contain -// explicit package information in the export data. -// -// A non-nil tname is used as the "owner" of the result type; i.e., -// the result type is the underlying type of tname. tname is used -// to give interface methods a named receiver type where possible. -func (p *importer) typ(parent *types.Package, tname *types.Named) types.Type { - // if the type was seen before, i is its index (>= 0) - i := p.tagOrIndex() - if i >= 0 { - return p.typList[i] - } - - // otherwise, i is the type tag (< 0) - switch i { - case namedTag: - // read type object - pos := p.pos() - parent, name := p.qualifiedName() - scope := parent.Scope() - obj := scope.Lookup(name) - - // if the object doesn't exist yet, create and insert it - if obj == nil { - obj = types.NewTypeName(pos, parent, name, nil) - scope.Insert(obj) - } - - if _, ok := obj.(*types.TypeName); !ok { - errorf("pkg = %s, name = %s => %s", parent, name, obj) - } - - // associate new named type with obj if it doesn't exist yet - t0 := types.NewNamed(obj.(*types.TypeName), nil, nil) - - // but record the existing type, if any - tname := obj.Type().(*types.Named) // tname is either t0 or the existing type - p.record(tname) - - // read underlying type - t0.SetUnderlying(p.typ(parent, t0)) - - // interfaces don't have associated methods - if types.IsInterface(t0) { - return tname - } - - // read associated methods - for i := p.int(); i > 0; i-- { - // TODO(gri) replace this with something closer to fieldName - pos := p.pos() - name := p.string() - if !exported(name) { - p.pkg() - } - - recv, _ := p.paramList() // TODO(gri) do we need a full param list for the receiver? - params, isddd := p.paramList() - result, _ := p.paramList() - p.int() // go:nointerface pragma - discarded - - sig := types.NewSignature(recv.At(0), params, result, isddd) - t0.AddMethod(types.NewFunc(pos, parent, name, sig)) - } - - return tname - - case arrayTag: - t := new(types.Array) - if p.trackAllTypes { - p.record(t) - } - - n := p.int64() - *t = *types.NewArray(p.typ(parent, nil), n) - return t - - case sliceTag: - t := new(types.Slice) - if p.trackAllTypes { - p.record(t) - } - - *t = *types.NewSlice(p.typ(parent, nil)) - return t - - case dddTag: - t := new(dddSlice) - if p.trackAllTypes { - p.record(t) - } - - t.elem = p.typ(parent, nil) - return t - - case structTag: - t := new(types.Struct) - if p.trackAllTypes { - p.record(t) - } - - *t = *types.NewStruct(p.fieldList(parent)) - return t - - case pointerTag: - t := new(types.Pointer) - if p.trackAllTypes { - p.record(t) - } - - *t = *types.NewPointer(p.typ(parent, nil)) - return t - - case signatureTag: - t := new(types.Signature) - if p.trackAllTypes { - p.record(t) - } - - params, isddd := p.paramList() - result, _ := p.paramList() - *t = *types.NewSignature(nil, params, result, isddd) - return t - - case interfaceTag: - // Create a dummy entry in the type list. This is safe because we - // cannot expect the interface type to appear in a cycle, as any - // such cycle must contain a named type which would have been - // first defined earlier. - // TODO(gri) Is this still true now that we have type aliases? - // See issue #23225. - n := len(p.typList) - if p.trackAllTypes { - p.record(nil) - } - - var embeddeds []types.Type - for n := p.int(); n > 0; n-- { - p.pos() - embeddeds = append(embeddeds, p.typ(parent, nil)) - } - - t := newInterface(p.methodList(parent, tname), embeddeds) - p.interfaceList = append(p.interfaceList, t) - if p.trackAllTypes { - p.typList[n] = t - } - return t - - case mapTag: - t := new(types.Map) - if p.trackAllTypes { - p.record(t) - } - - key := p.typ(parent, nil) - val := p.typ(parent, nil) - *t = *types.NewMap(key, val) - return t - - case chanTag: - t := new(types.Chan) - if p.trackAllTypes { - p.record(t) - } - - dir := chanDir(p.int()) - val := p.typ(parent, nil) - *t = *types.NewChan(dir, val) - return t - - default: - errorf("unexpected type tag %d", i) // panics - panic("unreachable") - } -} - func chanDir(d int) types.ChanDir { // tag values must match the constants in cmd/compile/internal/gc/go.go switch d { @@ -603,394 +88,6 @@ func chanDir(d int) types.ChanDir { } } -func (p *importer) fieldList(parent *types.Package) (fields []*types.Var, tags []string) { - if n := p.int(); n > 0 { - fields = make([]*types.Var, n) - tags = make([]string, n) - for i := range fields { - fields[i], tags[i] = p.field(parent) - } - } - return -} - -func (p *importer) field(parent *types.Package) (*types.Var, string) { - pos := p.pos() - pkg, name, alias := p.fieldName(parent) - typ := p.typ(parent, nil) - tag := p.string() - - anonymous := false - if name == "" { - // anonymous field - typ must be T or *T and T must be a type name - switch typ := deref(typ).(type) { - case *types.Basic: // basic types are named types - pkg = nil // // objects defined in Universe scope have no package - name = typ.Name() - case *types.Named: - name = typ.Obj().Name() - default: - errorf("named base type expected") - } - anonymous = true - } else if alias { - // anonymous field: we have an explicit name because it's an alias - anonymous = true - } - - return types.NewField(pos, pkg, name, typ, anonymous), tag -} - -func (p *importer) methodList(parent *types.Package, baseType *types.Named) (methods []*types.Func) { - if n := p.int(); n > 0 { - methods = make([]*types.Func, n) - for i := range methods { - methods[i] = p.method(parent, baseType) - } - } - return -} - -func (p *importer) method(parent *types.Package, baseType *types.Named) *types.Func { - pos := p.pos() - pkg, name, _ := p.fieldName(parent) - // If we don't have a baseType, use a nil receiver. - // A receiver using the actual interface type (which - // we don't know yet) will be filled in when we call - // types.Interface.Complete. - var recv *types.Var - if baseType != nil { - recv = types.NewVar(token.NoPos, parent, "", baseType) - } - params, isddd := p.paramList() - result, _ := p.paramList() - sig := types.NewSignature(recv, params, result, isddd) - return types.NewFunc(pos, pkg, name, sig) -} - -func (p *importer) fieldName(parent *types.Package) (pkg *types.Package, name string, alias bool) { - name = p.string() - pkg = parent - if pkg == nil { - // use the imported package instead - pkg = p.pkgList[0] - } - if p.version == 0 && name == "_" { - // version 0 didn't export a package for _ fields - return - } - switch name { - case "": - // 1) field name matches base type name and is exported: nothing to do - case "?": - // 2) field name matches base type name and is not exported: need package - name = "" - pkg = p.pkg() - case "@": - // 3) field name doesn't match type name (alias) - name = p.string() - alias = true - fallthrough - default: - if !exported(name) { - pkg = p.pkg() - } - } - return -} - -func (p *importer) paramList() (*types.Tuple, bool) { - n := p.int() - if n == 0 { - return nil, false - } - // negative length indicates unnamed parameters - named := true - if n < 0 { - n = -n - named = false - } - // n > 0 - params := make([]*types.Var, n) - isddd := false - for i := range params { - params[i], isddd = p.param(named) - } - return types.NewTuple(params...), isddd -} - -func (p *importer) param(named bool) (*types.Var, bool) { - t := p.typ(nil, nil) - td, isddd := t.(*dddSlice) - if isddd { - t = types.NewSlice(td.elem) - } - - var pkg *types.Package - var name string - if named { - name = p.string() - if name == "" { - errorf("expected named parameter") - } - if name != "_" { - pkg = p.pkg() - } - if i := strings.Index(name, "·"); i > 0 { - name = name[:i] // cut off gc-specific parameter numbering - } - } - - // read and discard compiler-specific info - p.string() - - return types.NewVar(token.NoPos, pkg, name, t), isddd -} - -func exported(name string) bool { - ch, _ := utf8.DecodeRuneInString(name) - return unicode.IsUpper(ch) -} - -func (p *importer) value() constant.Value { - switch tag := p.tagOrIndex(); tag { - case falseTag: - return constant.MakeBool(false) - case trueTag: - return constant.MakeBool(true) - case int64Tag: - return constant.MakeInt64(p.int64()) - case floatTag: - return p.float() - case complexTag: - re := p.float() - im := p.float() - return constant.BinaryOp(re, token.ADD, constant.MakeImag(im)) - case stringTag: - return constant.MakeString(p.string()) - case unknownTag: - return constant.MakeUnknown() - default: - errorf("unexpected value tag %d", tag) // panics - panic("unreachable") - } -} - -func (p *importer) float() constant.Value { - sign := p.int() - if sign == 0 { - return constant.MakeInt64(0) - } - - exp := p.int() - mant := []byte(p.string()) // big endian - - // remove leading 0's if any - for len(mant) > 0 && mant[0] == 0 { - mant = mant[1:] - } - - // convert to little endian - // TODO(gri) go/constant should have a more direct conversion function - // (e.g., once it supports a big.Float based implementation) - for i, j := 0, len(mant)-1; i < j; i, j = i+1, j-1 { - mant[i], mant[j] = mant[j], mant[i] - } - - // adjust exponent (constant.MakeFromBytes creates an integer value, - // but mant represents the mantissa bits such that 0.5 <= mant < 1.0) - exp -= len(mant) << 3 - if len(mant) > 0 { - for msd := mant[len(mant)-1]; msd&0x80 == 0; msd <<= 1 { - exp++ - } - } - - x := constant.MakeFromBytes(mant) - switch { - case exp < 0: - d := constant.Shift(constant.MakeInt64(1), token.SHL, uint(-exp)) - x = constant.BinaryOp(x, token.QUO, d) - case exp > 0: - x = constant.Shift(x, token.SHL, uint(exp)) - } - - if sign < 0 { - x = constant.UnaryOp(token.SUB, x, 0) - } - return x -} - -// ---------------------------------------------------------------------------- -// Low-level decoders - -func (p *importer) tagOrIndex() int { - if p.debugFormat { - p.marker('t') - } - - return int(p.rawInt64()) -} - -func (p *importer) int() int { - x := p.int64() - if int64(int(x)) != x { - errorf("exported integer too large") - } - return int(x) -} - -func (p *importer) int64() int64 { - if p.debugFormat { - p.marker('i') - } - - return p.rawInt64() -} - -func (p *importer) path() string { - if p.debugFormat { - p.marker('p') - } - // if the path was seen before, i is its index (>= 0) - // (the empty string is at index 0) - i := p.rawInt64() - if i >= 0 { - return p.pathList[i] - } - // otherwise, i is the negative path length (< 0) - a := make([]string, -i) - for n := range a { - a[n] = p.string() - } - s := strings.Join(a, "/") - p.pathList = append(p.pathList, s) - return s -} - -func (p *importer) string() string { - if p.debugFormat { - p.marker('s') - } - // if the string was seen before, i is its index (>= 0) - // (the empty string is at index 0) - i := p.rawInt64() - if i >= 0 { - return p.strList[i] - } - // otherwise, i is the negative string length (< 0) - if n := int(-i); n <= cap(p.buf) { - p.buf = p.buf[:n] - } else { - p.buf = make([]byte, n) - } - for i := range p.buf { - p.buf[i] = p.rawByte() - } - s := string(p.buf) - p.strList = append(p.strList, s) - return s -} - -func (p *importer) marker(want byte) { - if got := p.rawByte(); got != want { - errorf("incorrect marker: got %c; want %c (pos = %d)", got, want, p.read) - } - - pos := p.read - if n := int(p.rawInt64()); n != pos { - errorf("incorrect position: got %d; want %d", n, pos) - } -} - -// rawInt64 should only be used by low-level decoders. -func (p *importer) rawInt64() int64 { - i, err := binary.ReadVarint(p) - if err != nil { - errorf("read error: %v", err) - } - return i -} - -// rawStringln should only be used to read the initial version string. -func (p *importer) rawStringln(b byte) string { - p.buf = p.buf[:0] - for b != '\n' { - p.buf = append(p.buf, b) - b = p.rawByte() - } - return string(p.buf) -} - -// needed for binary.ReadVarint in rawInt64 -func (p *importer) ReadByte() (byte, error) { - return p.rawByte(), nil -} - -// byte is the bottleneck interface for reading p.data. -// It unescapes '|' 'S' to '$' and '|' '|' to '|'. -// rawByte should only be used by low-level decoders. -func (p *importer) rawByte() byte { - b := p.data[0] - r := 1 - if b == '|' { - b = p.data[1] - r = 2 - switch b { - case 'S': - b = '$' - case '|': - // nothing to do - default: - errorf("unexpected escape sequence in export data") - } - } - p.data = p.data[r:] - p.read += r - return b - -} - -// ---------------------------------------------------------------------------- -// Export format - -// Tags. Must be < 0. -const ( - // Objects - packageTag = -(iota + 1) - constTag - typeTag - varTag - funcTag - endTag - - // Types - namedTag - arrayTag - sliceTag - dddTag - structTag - pointerTag - signatureTag - interfaceTag - mapTag - chanTag - - // Values - falseTag - trueTag - int64Tag - floatTag - fractionTag // not used by gc - complexTag - stringTag - nilTag // only used by gc (appears in exported inlined function bodies) - unknownTag // not used by gc (only appears in packages with errors) - - // Type aliases - aliasTag -) - var predeclOnce sync.Once var predecl []types.Type // initialized lazily diff --git a/go/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go b/go/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go index 0372fb3a646..b1223713b94 100644 --- a/go/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go +++ b/go/vendor/golang.org/x/tools/internal/gcimporter/gcimporter.go @@ -7,6 +7,18 @@ // Package gcimporter provides various functions for reading // gc-generated object files that can be used to implement the // Importer interface defined by the Go 1.5 standard library package. +// +// The encoding is deterministic: if the encoder is applied twice to +// the same types.Package data structure, both encodings are equal. +// This property may be important to avoid spurious changes in +// applications such as build systems. +// +// However, the encoder is not necessarily idempotent. Importing an +// exported package may yield a types.Package that, while it +// represents the same set of Go types as the original, may differ in +// the details of its internal representation. Because of these +// differences, re-encoding the imported package may yield a +// different, but equally valid, encoding of the package. package gcimporter // import "golang.org/x/tools/internal/gcimporter" import ( @@ -218,20 +230,17 @@ func Import(packages map[string]*types.Package, path, srcDir string, lookup func // Or, define a new standard go/types/gcexportdata package. fset := token.NewFileSet() - // The indexed export format starts with an 'i'; the older - // binary export format starts with a 'c', 'd', or 'v' - // (from "version"). Select appropriate importer. + // Select appropriate importer. if len(data) > 0 { switch data[0] { - case 'i': + case 'v', 'c', 'd': // binary, till go1.10 + return nil, fmt.Errorf("binary (%c) import format is no longer supported", data[0]) + + case 'i': // indexed, till go1.19 _, pkg, err := IImportData(fset, packages, data[1:], id) return pkg, err - case 'v', 'c', 'd': - _, pkg, err := BImportData(fset, packages, data, id) - return pkg, err - - case 'u': + case 'u': // unified, from go1.20 _, pkg, err := UImportData(fset, packages, data[1:size], id) return pkg, err diff --git a/go/vendor/golang.org/x/tools/internal/gcimporter/iexport.go b/go/vendor/golang.org/x/tools/internal/gcimporter/iexport.go index ba53cdcdd10..6103dd7102b 100644 --- a/go/vendor/golang.org/x/tools/internal/gcimporter/iexport.go +++ b/go/vendor/golang.org/x/tools/internal/gcimporter/iexport.go @@ -22,17 +22,23 @@ import ( "strconv" "strings" + "golang.org/x/tools/go/types/objectpath" "golang.org/x/tools/internal/tokeninternal" "golang.org/x/tools/internal/typeparams" ) // IExportShallow encodes "shallow" export data for the specified package. // -// No promises are made about the encoding other than that it can be -// decoded by the same version of IIExportShallow. If you plan to save -// export data in the file system, be sure to include a cryptographic -// digest of the executable in the key to avoid version skew. -func IExportShallow(fset *token.FileSet, pkg *types.Package) ([]byte, error) { +// No promises are made about the encoding other than that it can be decoded by +// the same version of IIExportShallow. If you plan to save export data in the +// file system, be sure to include a cryptographic digest of the executable in +// the key to avoid version skew. +// +// If the provided reportf func is non-nil, it will be used for reporting bugs +// encountered during export. +// TODO(rfindley): remove reportf when we are confident enough in the new +// objectpath encoding. +func IExportShallow(fset *token.FileSet, pkg *types.Package, reportf ReportFunc) ([]byte, error) { // In principle this operation can only fail if out.Write fails, // but that's impossible for bytes.Buffer---and as a matter of // fact iexportCommon doesn't even check for I/O errors. @@ -44,22 +50,30 @@ func IExportShallow(fset *token.FileSet, pkg *types.Package) ([]byte, error) { return out.Bytes(), err } -// IImportShallow decodes "shallow" types.Package data encoded by IExportShallow -// in the same executable. This function cannot import data from +// IImportShallow decodes "shallow" types.Package data encoded by +// IExportShallow in the same executable. This function cannot import data from // cmd/compile or gcexportdata.Write. -func IImportShallow(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string, insert InsertType) (*types.Package, error) { +// +// The importer calls getPackages to obtain package symbols for all +// packages mentioned in the export data, including the one being +// decoded. +// +// If the provided reportf func is non-nil, it will be used for reporting bugs +// encountered during import. +// TODO(rfindley): remove reportf when we are confident enough in the new +// objectpath encoding. +func IImportShallow(fset *token.FileSet, getPackages GetPackagesFunc, data []byte, path string, reportf ReportFunc) (*types.Package, error) { const bundle = false - pkgs, err := iimportCommon(fset, imports, data, bundle, path, insert) + const shallow = true + pkgs, err := iimportCommon(fset, getPackages, data, bundle, path, shallow, reportf) if err != nil { return nil, err } return pkgs[0], nil } -// InsertType is the type of a function that creates a types.TypeName -// object for a named type and inserts it into the scope of the -// specified Package. -type InsertType = func(pkg *types.Package, name string) +// ReportFunc is the type of a function used to report formatted bugs. +type ReportFunc = func(string, ...interface{}) // Current bundled export format version. Increase with each format change. // 0: initial implementation @@ -313,8 +327,9 @@ type iexporter struct { out *bytes.Buffer version int - shallow bool // don't put types from other packages in the index - localpkg *types.Package // (nil in bundle mode) + shallow bool // don't put types from other packages in the index + objEncoder *objectpath.Encoder // encodes objects from other packages in shallow mode; lazily allocated + localpkg *types.Package // (nil in bundle mode) // allPkgs tracks all packages that have been referenced by // the export data, so we can ensure to include them in the @@ -354,6 +369,17 @@ func (p *iexporter) trace(format string, args ...interface{}) { fmt.Printf(strings.Repeat("..", p.indent)+format+"\n", args...) } +// objectpathEncoder returns the lazily allocated objectpath.Encoder to use +// when encoding objects in other packages during shallow export. +// +// Using a shared Encoder amortizes some of cost of objectpath search. +func (p *iexporter) objectpathEncoder() *objectpath.Encoder { + if p.objEncoder == nil { + p.objEncoder = new(objectpath.Encoder) + } + return p.objEncoder +} + // stringOff returns the offset of s within the string section. // If not already present, it's added to the end. func (p *iexporter) stringOff(s string) uint64 { @@ -413,7 +439,6 @@ type exportWriter struct { p *iexporter data intWriter - currPkg *types.Package prevFile string prevLine int64 prevColumn int64 @@ -436,7 +461,6 @@ func (p *iexporter) doDecl(obj types.Object) { }() } w := p.newWriter() - w.setPkg(obj.Pkg(), false) switch obj := obj.(type) { case *types.Var: @@ -673,6 +697,9 @@ func (w *exportWriter) qualifiedType(obj *types.TypeName) { w.pkg(obj.Pkg()) } +// TODO(rfindley): what does 'pkg' even mean here? It would be better to pass +// it in explicitly into signatures and structs that may use it for +// constructing fields. func (w *exportWriter) typ(t types.Type, pkg *types.Package) { w.data.uint64(w.p.typOff(t, pkg)) } @@ -764,30 +791,53 @@ func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) { case *types.Signature: w.startType(signatureType) - w.setPkg(pkg, true) + w.pkg(pkg) w.signature(t) case *types.Struct: w.startType(structType) n := t.NumFields() + // Even for struct{} we must emit some qualifying package, because that's + // what the compiler does, and thus that's what the importer expects. + fieldPkg := pkg if n > 0 { - w.setPkg(t.Field(0).Pkg(), true) // qualifying package for field objects - } else { - w.setPkg(pkg, true) + fieldPkg = t.Field(0).Pkg() } + if fieldPkg == nil { + // TODO(rfindley): improve this very hacky logic. + // + // The importer expects a package to be set for all struct types, even + // those with no fields. A better encoding might be to set NumFields + // before pkg. setPkg panics with a nil package, which may be possible + // to reach with invalid packages (and perhaps valid packages, too?), so + // (arbitrarily) set the localpkg if available. + // + // Alternatively, we may be able to simply guarantee that pkg != nil, by + // reconsidering the encoding of constant values. + if w.p.shallow { + fieldPkg = w.p.localpkg + } else { + panic(internalErrorf("no package to set for empty struct")) + } + } + w.pkg(fieldPkg) w.uint64(uint64(n)) + for i := 0; i < n; i++ { f := t.Field(i) + if w.p.shallow { + w.objectPath(f) + } w.pos(f.Pos()) w.string(f.Name()) // unexported fields implicitly qualified by prior setPkg - w.typ(f.Type(), pkg) + w.typ(f.Type(), fieldPkg) w.bool(f.Anonymous()) w.string(t.Tag(i)) // note (or tag) } case *types.Interface: w.startType(interfaceType) - w.setPkg(pkg, true) + w.pkg(pkg) n := t.NumEmbeddeds() w.uint64(uint64(n)) @@ -802,10 +852,16 @@ func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) { w.typ(ft, tPkg) } + // See comment for struct fields. In shallow mode we change the encoding + // for interface methods that are promoted from other packages. + n = t.NumExplicitMethods() w.uint64(uint64(n)) for i := 0; i < n; i++ { m := t.ExplicitMethod(i) + if w.p.shallow { + w.objectPath(m) + } w.pos(m.Pos()) w.string(m.Name()) sig, _ := m.Type().(*types.Signature) @@ -827,12 +883,61 @@ func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) { } } -func (w *exportWriter) setPkg(pkg *types.Package, write bool) { - if write { - w.pkg(pkg) +// objectPath writes the package and objectPath to use to look up obj in a +// different package, when encoding in "shallow" mode. +// +// When doing a shallow import, the importer creates only the local package, +// and requests package symbols for dependencies from the client. +// However, certain types defined in the local package may hold objects defined +// (perhaps deeply) within another package. +// +// For example, consider the following: +// +// package a +// func F() chan * map[string] struct { X int } +// +// package b +// import "a" +// var B = a.F() +// +// In this example, the type of b.B holds fields defined in package a. +// In order to have the correct canonical objects for the field defined in the +// type of B, they are encoded as objectPaths and later looked up in the +// importer. The same problem applies to interface methods. +func (w *exportWriter) objectPath(obj types.Object) { + if obj.Pkg() == nil || obj.Pkg() == w.p.localpkg { + // obj.Pkg() may be nil for the builtin error.Error. + // In this case, or if obj is declared in the local package, no need to + // encode. + w.string("") + return } - - w.currPkg = pkg + objectPath, err := w.p.objectpathEncoder().For(obj) + if err != nil { + // Fall back to the empty string, which will cause the importer to create a + // new object, which matches earlier behavior. Creating a new object is + // sufficient for many purposes (such as type checking), but causes certain + // references algorithms to fail (golang/go#60819). However, we didn't + // notice this problem during months of gopls@v0.12.0 testing. + // + // TODO(golang/go#61674): this workaround is insufficient, as in the case + // where the field forwarded from an instantiated type that may not appear + // in the export data of the original package: + // + // // package a + // type A[P any] struct{ F P } + // + // // package b + // type B a.A[int] + // + // We need to update references algorithms not to depend on this + // de-duplication, at which point we may want to simply remove the + // workaround here. + w.string("") + return + } + w.string(string(objectPath)) + w.pkg(obj.Pkg()) } func (w *exportWriter) signature(sig *types.Signature) { @@ -913,6 +1018,17 @@ func (w *exportWriter) value(typ types.Type, v constant.Value) { w.int64(int64(v.Kind())) } + if v.Kind() == constant.Unknown { + // golang/go#60605: treat unknown constant values as if they have invalid type + // + // This loses some fidelity over the package type-checked from source, but that + // is acceptable. + // + // TODO(rfindley): we should switch on the recorded constant kind rather + // than the constant type + return + } + switch b := typ.Underlying().(*types.Basic); b.Info() & types.IsConstType { case types.IsBoolean: w.bool(constant.BoolVal(v)) @@ -969,6 +1085,16 @@ func constantToFloat(x constant.Value) *big.Float { return &f } +func valueToRat(x constant.Value) *big.Rat { + // Convert little-endian to big-endian. + // I can't believe this is necessary. + bytes := constant.Bytes(x) + for i := 0; i < len(bytes)/2; i++ { + bytes[i], bytes[len(bytes)-1-i] = bytes[len(bytes)-1-i], bytes[i] + } + return new(big.Rat).SetInt(new(big.Int).SetBytes(bytes)) +} + // mpint exports a multi-precision integer. // // For unsigned types, small values are written out as a single @@ -1178,3 +1304,19 @@ func (q *objQueue) popHead() types.Object { q.head++ return obj } + +// internalError represents an error generated inside this package. +type internalError string + +func (e internalError) Error() string { return "gcimporter: " + string(e) } + +// TODO(adonovan): make this call panic, so that it's symmetric with errorf. +// Otherwise it's easy to forget to do anything with the error. +// +// TODO(adonovan): also, consider switching the names "errorf" and +// "internalErrorf" as the former is used for bugs, whose cause is +// internal inconsistency, whereas the latter is used for ordinary +// situations like bad input, whose cause is external. +func internalErrorf(format string, args ...interface{}) error { + return internalError(fmt.Sprintf(format, args...)) +} diff --git a/go/vendor/golang.org/x/tools/internal/gcimporter/iimport.go b/go/vendor/golang.org/x/tools/internal/gcimporter/iimport.go index 448f903e86a..8e64cf644fc 100644 --- a/go/vendor/golang.org/x/tools/internal/gcimporter/iimport.go +++ b/go/vendor/golang.org/x/tools/internal/gcimporter/iimport.go @@ -21,6 +21,7 @@ import ( "sort" "strings" + "golang.org/x/tools/go/types/objectpath" "golang.org/x/tools/internal/typeparams" ) @@ -85,7 +86,7 @@ const ( // If the export data version is not recognized or the format is otherwise // compromised, an error is returned. func IImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (int, *types.Package, error) { - pkgs, err := iimportCommon(fset, imports, data, false, path, nil) + pkgs, err := iimportCommon(fset, GetPackagesFromMap(imports), data, false, path, false, nil) if err != nil { return 0, nil, err } @@ -94,10 +95,49 @@ func IImportData(fset *token.FileSet, imports map[string]*types.Package, data [] // IImportBundle imports a set of packages from the serialized package bundle. func IImportBundle(fset *token.FileSet, imports map[string]*types.Package, data []byte) ([]*types.Package, error) { - return iimportCommon(fset, imports, data, true, "", nil) + return iimportCommon(fset, GetPackagesFromMap(imports), data, true, "", false, nil) } -func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data []byte, bundle bool, path string, insert InsertType) (pkgs []*types.Package, err error) { +// A GetPackagesFunc function obtains the non-nil symbols for a set of +// packages, creating and recursively importing them as needed. An +// implementation should store each package symbol is in the Pkg +// field of the items array. +// +// Any error causes importing to fail. This can be used to quickly read +// the import manifest of an export data file without fully decoding it. +type GetPackagesFunc = func(items []GetPackagesItem) error + +// A GetPackagesItem is a request from the importer for the package +// symbol of the specified name and path. +type GetPackagesItem struct { + Name, Path string + Pkg *types.Package // to be filled in by GetPackagesFunc call + + // private importer state + pathOffset uint64 + nameIndex map[string]uint64 +} + +// GetPackagesFromMap returns a GetPackagesFunc that retrieves +// packages from the given map of package path to package. +// +// The returned function may mutate m: each requested package that is not +// found is created with types.NewPackage and inserted into m. +func GetPackagesFromMap(m map[string]*types.Package) GetPackagesFunc { + return func(items []GetPackagesItem) error { + for i, item := range items { + pkg, ok := m[item.Path] + if !ok { + pkg = types.NewPackage(item.Path, item.Name) + m[item.Path] = pkg + } + items[i].Pkg = pkg + } + return nil + } +} + +func iimportCommon(fset *token.FileSet, getPackages GetPackagesFunc, data []byte, bundle bool, path string, shallow bool, reportf ReportFunc) (pkgs []*types.Package, err error) { const currentVersion = iexportVersionCurrent version := int64(-1) if !debug { @@ -108,7 +148,7 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data } else if version > currentVersion { err = fmt.Errorf("cannot import %q (%v), export data is newer version - update tool", path, e) } else { - err = fmt.Errorf("cannot import %q (%v), possibly version skew - reinstall package", path, e) + err = fmt.Errorf("internal error while importing %q (%v); please report an issue", path, e) } } }() @@ -117,11 +157,8 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data r := &intReader{bytes.NewReader(data), path} if bundle { - bundleVersion := r.uint64() - switch bundleVersion { - case bundleVersion: - default: - errorf("unknown bundle format version %d", bundleVersion) + if v := r.uint64(); v != bundleVersion { + errorf("unknown bundle format version %d", v) } } @@ -139,7 +176,7 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data sLen := int64(r.uint64()) var fLen int64 var fileOffset []uint64 - if insert != nil { + if shallow { // Shallow mode uses a different position encoding. fLen = int64(r.uint64()) fileOffset = make([]uint64, r.uint64()) @@ -158,7 +195,8 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data p := iimporter{ version: int(version), ipath: path, - insert: insert, + shallow: shallow, + reportf: reportf, stringData: stringData, stringCache: make(map[uint64]string), @@ -185,8 +223,9 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data p.typCache[uint64(i)] = pt } - pkgList := make([]*types.Package, r.uint64()) - for i := range pkgList { + // Gather the relevant packages from the manifest. + items := make([]GetPackagesItem, r.uint64()) + for i := range items { pkgPathOff := r.uint64() pkgPath := p.stringAt(pkgPathOff) pkgName := p.stringAt(r.uint64()) @@ -195,30 +234,42 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data if pkgPath == "" { pkgPath = path } - pkg := imports[pkgPath] - if pkg == nil { - pkg = types.NewPackage(pkgPath, pkgName) - imports[pkgPath] = pkg - } else if pkg.Name() != pkgName { - errorf("conflicting names %s and %s for package %q", pkg.Name(), pkgName, path) - } - if i == 0 && !bundle { - p.localpkg = pkg - } - - p.pkgCache[pkgPathOff] = pkg + items[i].Name = pkgName + items[i].Path = pkgPath + items[i].pathOffset = pkgPathOff // Read index for package. nameIndex := make(map[string]uint64) nSyms := r.uint64() - // In shallow mode we don't expect an index for other packages. - assert(nSyms == 0 || p.localpkg == pkg || p.insert == nil) + // In shallow mode, only the current package (i=0) has an index. + assert(!(shallow && i > 0 && nSyms != 0)) for ; nSyms > 0; nSyms-- { name := p.stringAt(r.uint64()) nameIndex[name] = r.uint64() } - p.pkgIndex[pkg] = nameIndex + items[i].nameIndex = nameIndex + } + + // Request packages all at once from the client, + // enabling a parallel implementation. + if err := getPackages(items); err != nil { + return nil, err // don't wrap this error + } + + // Check the results and complete the index. + pkgList := make([]*types.Package, len(items)) + for i, item := range items { + pkg := item.Pkg + if pkg == nil { + errorf("internal error: getPackages returned nil package for %q", item.Path) + } else if pkg.Path() != item.Path { + errorf("internal error: getPackages returned wrong path %q, want %q", pkg.Path(), item.Path) + } else if pkg.Name() != item.Name { + errorf("internal error: getPackages returned wrong name %s for package %q, want %s", pkg.Name(), item.Path, item.Name) + } + p.pkgCache[item.pathOffset] = pkg + p.pkgIndex[pkg] = item.nameIndex pkgList[i] = pkg } @@ -277,6 +328,13 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data typ.Complete() } + // Workaround for golang/go#61561. See the doc for instanceList for details. + for _, typ := range p.instanceList { + if iface, _ := typ.Underlying().(*types.Interface); iface != nil { + iface.Complete() + } + } + return pkgs, nil } @@ -289,8 +347,8 @@ type iimporter struct { version int ipath string - localpkg *types.Package - insert func(pkg *types.Package, name string) // "shallow" mode only + shallow bool + reportf ReportFunc // if non-nil, used to report bugs stringData []byte stringCache map[uint64]string @@ -307,6 +365,12 @@ type iimporter struct { fake fakeFileSet interfaceList []*types.Interface + // Workaround for the go/types bug golang/go#61561: instances produced during + // instantiation may contain incomplete interfaces. Here we only complete the + // underlying type of the instance, which is the most common case but doesn't + // handle parameterized interface literals defined deeper in the type. + instanceList []types.Type // instances for later completion (see golang/go#61561) + // Arguments for calls to SetConstraint that are deferred due to recursive types later []setConstraintArgs @@ -338,13 +402,9 @@ func (p *iimporter) doDecl(pkg *types.Package, name string) { off, ok := p.pkgIndex[pkg][name] if !ok { - // In "shallow" mode, call back to the application to - // find the object and insert it into the package scope. - if p.insert != nil { - assert(pkg != p.localpkg) - p.insert(pkg, name) // "can't fail" - return - } + // In deep mode, the index should be complete. In shallow + // mode, we should have already recursively loaded necessary + // dependencies so the above Lookup succeeds. errorf("%v.%v not in index", pkg, name) } @@ -711,7 +771,8 @@ func (r *importReader) qualifiedIdent() (*types.Package, string) { } func (r *importReader) pos() token.Pos { - if r.p.insert != nil { // shallow mode + if r.p.shallow { + // precise offsets are encoded only in shallow mode return r.posv2() } if r.p.version >= iexportVersionPosCol { @@ -812,13 +873,28 @@ func (r *importReader) doType(base *types.Named) (res types.Type) { fields := make([]*types.Var, r.uint64()) tags := make([]string, len(fields)) for i := range fields { + var field *types.Var + if r.p.shallow { + field, _ = r.objectPathObject().(*types.Var) + } + fpos := r.pos() fname := r.ident() ftyp := r.typ() emb := r.bool() tag := r.string() - fields[i] = types.NewField(fpos, r.currPkg, fname, ftyp, emb) + // Either this is not a shallow import, the field is local, or the + // encoded objectPath failed to produce an object (a bug). + // + // Even in this last, buggy case, fall back on creating a new field. As + // discussed in iexport.go, this is not correct, but mostly works and is + // preferable to failing (for now at least). + if field == nil { + field = types.NewField(fpos, r.currPkg, fname, ftyp, emb) + } + + fields[i] = field tags[i] = tag } return types.NewStruct(fields, tags) @@ -834,6 +910,11 @@ func (r *importReader) doType(base *types.Named) (res types.Type) { methods := make([]*types.Func, r.uint64()) for i := range methods { + var method *types.Func + if r.p.shallow { + method, _ = r.objectPathObject().(*types.Func) + } + mpos := r.pos() mname := r.ident() @@ -843,9 +924,12 @@ func (r *importReader) doType(base *types.Named) (res types.Type) { if base != nil { recv = types.NewVar(token.NoPos, r.currPkg, "", base) } - msig := r.signature(recv, nil, nil) - methods[i] = types.NewFunc(mpos, r.currPkg, mname, msig) + + if method == nil { + method = types.NewFunc(mpos, r.currPkg, mname, msig) + } + methods[i] = method } typ := newInterface(methods, embeddeds) @@ -883,6 +967,9 @@ func (r *importReader) doType(base *types.Named) (res types.Type) { // we must always use the methods of the base (orig) type. // TODO provide a non-nil *Environment t, _ := typeparams.Instantiate(nil, baseType, targs, false) + + // Workaround for golang/go#61561. See the doc for instanceList for details. + r.p.instanceList = append(r.p.instanceList, t) return t case unionType: @@ -901,6 +988,26 @@ func (r *importReader) kind() itag { return itag(r.uint64()) } +// objectPathObject is the inverse of exportWriter.objectPath. +// +// In shallow mode, certain fields and methods may need to be looked up in an +// imported package. See the doc for exportWriter.objectPath for a full +// explanation. +func (r *importReader) objectPathObject() types.Object { + objPath := objectpath.Path(r.string()) + if objPath == "" { + return nil + } + pkg := r.pkg() + obj, err := objectpath.Object(pkg, objPath) + if err != nil { + if r.p.reportf != nil { + r.p.reportf("failed to find object for objectPath %q: %v", objPath, err) + } + } + return obj +} + func (r *importReader) signature(recv *types.Var, rparams []*typeparams.TypeParam, tparams []*typeparams.TypeParam) *types.Signature { params := r.paramList() results := r.paramList() diff --git a/go/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go b/go/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go index b285a11ce25..b977435f626 100644 --- a/go/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go +++ b/go/vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go @@ -10,8 +10,10 @@ package gcimporter import ( + "fmt" "go/token" "go/types" + "sort" "strings" "golang.org/x/tools/internal/pkgbits" @@ -62,6 +64,14 @@ type typeInfo struct { } func UImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (_ int, pkg *types.Package, err error) { + if !debug { + defer func() { + if x := recover(); x != nil { + err = fmt.Errorf("internal error in importing %q (%v); please report an issue", path, x) + } + }() + } + s := string(data) s = s[:strings.LastIndex(s, "\n$$\n")] input := pkgbits.NewPkgDecoder(path, s) @@ -121,6 +131,16 @@ func readUnifiedPackage(fset *token.FileSet, ctxt *types.Context, imports map[st iface.Complete() } + // Imports() of pkg are all of the transitive packages that were loaded. + var imps []*types.Package + for _, imp := range pr.pkgs { + if imp != nil && imp != pkg { + imps = append(imps, imp) + } + } + sort.Sort(byPath(imps)) + pkg.SetImports(imps) + pkg.MarkComplete() return pkg } @@ -260,39 +280,9 @@ func (r *reader) doPkg() *types.Package { pkg := types.NewPackage(path, name) r.p.imports[path] = pkg - imports := make([]*types.Package, r.Len()) - for i := range imports { - imports[i] = r.pkg() - } - pkg.SetImports(flattenImports(imports)) - return pkg } -// flattenImports returns the transitive closure of all imported -// packages rooted from pkgs. -func flattenImports(pkgs []*types.Package) []*types.Package { - var res []*types.Package - seen := make(map[*types.Package]struct{}) - for _, pkg := range pkgs { - if _, ok := seen[pkg]; ok { - continue - } - seen[pkg] = struct{}{} - res = append(res, pkg) - - // pkg.Imports() is already flattened. - for _, pkg := range pkg.Imports() { - if _, ok := seen[pkg]; ok { - continue - } - seen[pkg] = struct{}{} - res = append(res, pkg) - } - } - return res -} - // @@@ Types func (r *reader) typ() types.Type { diff --git a/go/vendor/golang.org/x/tools/internal/gocommand/invoke.go b/go/vendor/golang.org/x/tools/internal/gocommand/invoke.go index d50551693f3..53cf66da019 100644 --- a/go/vendor/golang.org/x/tools/internal/gocommand/invoke.go +++ b/go/vendor/golang.org/x/tools/internal/gocommand/invoke.go @@ -8,10 +8,12 @@ package gocommand import ( "bytes" "context" + "errors" "fmt" "io" "log" "os" + "reflect" "regexp" "runtime" "strconv" @@ -22,6 +24,9 @@ import ( exec "golang.org/x/sys/execabs" "golang.org/x/tools/internal/event" + "golang.org/x/tools/internal/event/keys" + "golang.org/x/tools/internal/event/label" + "golang.org/x/tools/internal/event/tag" ) // An Runner will run go command invocations and serialize @@ -51,9 +56,19 @@ func (runner *Runner) initialize() { // 1.14: go: updating go.mod: existing contents have changed since last read var modConcurrencyError = regexp.MustCompile(`go:.*go.mod.*contents have changed`) +// verb is an event label for the go command verb. +var verb = keys.NewString("verb", "go command verb") + +func invLabels(inv Invocation) []label.Label { + return []label.Label{verb.Of(inv.Verb), tag.Directory.Of(inv.WorkingDir)} +} + // Run is a convenience wrapper around RunRaw. // It returns only stdout and a "friendly" error. func (runner *Runner) Run(ctx context.Context, inv Invocation) (*bytes.Buffer, error) { + ctx, done := event.Start(ctx, "gocommand.Runner.Run", invLabels(inv)...) + defer done() + stdout, _, friendly, _ := runner.RunRaw(ctx, inv) return stdout, friendly } @@ -61,6 +76,9 @@ func (runner *Runner) Run(ctx context.Context, inv Invocation) (*bytes.Buffer, e // RunPiped runs the invocation serially, always waiting for any concurrent // invocations to complete first. func (runner *Runner) RunPiped(ctx context.Context, inv Invocation, stdout, stderr io.Writer) error { + ctx, done := event.Start(ctx, "gocommand.Runner.RunPiped", invLabels(inv)...) + defer done() + _, err := runner.runPiped(ctx, inv, stdout, stderr) return err } @@ -68,6 +86,8 @@ func (runner *Runner) RunPiped(ctx context.Context, inv Invocation, stdout, stde // RunRaw runs the invocation, serializing requests only if they fight over // go.mod changes. func (runner *Runner) RunRaw(ctx context.Context, inv Invocation) (*bytes.Buffer, *bytes.Buffer, error, error) { + ctx, done := event.Start(ctx, "gocommand.Runner.RunRaw", invLabels(inv)...) + defer done() // Make sure the runner is always initialized. runner.initialize() @@ -215,6 +235,18 @@ func (i *Invocation) run(ctx context.Context, stdout, stderr io.Writer) error { cmd := exec.Command("go", goArgs...) cmd.Stdout = stdout cmd.Stderr = stderr + + // cmd.WaitDelay was added only in go1.20 (see #50436). + if waitDelay := reflect.ValueOf(cmd).Elem().FieldByName("WaitDelay"); waitDelay.IsValid() { + // https://go.dev/issue/59541: don't wait forever copying stderr + // after the command has exited. + // After CL 484741 we copy stdout manually, so we we'll stop reading that as + // soon as ctx is done. However, we also don't want to wait around forever + // for stderr. Give a much-longer-than-reasonable delay and then assume that + // something has wedged in the kernel or runtime. + waitDelay.Set(reflect.ValueOf(30 * time.Second)) + } + // On darwin the cwd gets resolved to the real path, which breaks anything that // expects the working directory to keep the original path, including the // go command when dealing with modules. @@ -229,6 +261,7 @@ func (i *Invocation) run(ctx context.Context, stdout, stderr io.Writer) error { cmd.Env = append(cmd.Env, "PWD="+i.WorkingDir) cmd.Dir = i.WorkingDir } + defer func(start time.Time) { log("%s for %v", time.Since(start), cmdDebugStr(cmd)) }(time.Now()) return runCmdContext(ctx, cmd) @@ -242,10 +275,85 @@ var DebugHangingGoCommands = false // runCmdContext is like exec.CommandContext except it sends os.Interrupt // before os.Kill. -func runCmdContext(ctx context.Context, cmd *exec.Cmd) error { - if err := cmd.Start(); err != nil { +func runCmdContext(ctx context.Context, cmd *exec.Cmd) (err error) { + // If cmd.Stdout is not an *os.File, the exec package will create a pipe and + // copy it to the Writer in a goroutine until the process has finished and + // either the pipe reaches EOF or command's WaitDelay expires. + // + // However, the output from 'go list' can be quite large, and we don't want to + // keep reading (and allocating buffers) if we've already decided we don't + // care about the output. We don't want to wait for the process to finish, and + // we don't wait to wait for the WaitDelay to expire either. + // + // Instead, if cmd.Stdout requires a copying goroutine we explicitly replace + // it with a pipe (which is an *os.File), which we can close in order to stop + // copying output as soon as we realize we don't care about it. + var stdoutW *os.File + if cmd.Stdout != nil { + if _, ok := cmd.Stdout.(*os.File); !ok { + var stdoutR *os.File + stdoutR, stdoutW, err = os.Pipe() + if err != nil { + return err + } + prevStdout := cmd.Stdout + cmd.Stdout = stdoutW + + stdoutErr := make(chan error, 1) + go func() { + _, err := io.Copy(prevStdout, stdoutR) + if err != nil { + err = fmt.Errorf("copying stdout: %w", err) + } + stdoutErr <- err + }() + defer func() { + // We started a goroutine to copy a stdout pipe. + // Wait for it to finish, or terminate it if need be. + var err2 error + select { + case err2 = <-stdoutErr: + stdoutR.Close() + case <-ctx.Done(): + stdoutR.Close() + // Per https://pkg.go.dev/os#File.Close, the call to stdoutR.Close + // should cause the Read call in io.Copy to unblock and return + // immediately, but we still need to receive from stdoutErr to confirm + // that it has happened. + <-stdoutErr + err2 = ctx.Err() + } + if err == nil { + err = err2 + } + }() + + // Per https://pkg.go.dev/os/exec#Cmd, “If Stdout and Stderr are the + // same writer, and have a type that can be compared with ==, at most + // one goroutine at a time will call Write.†+ // + // Since we're starting a goroutine that writes to cmd.Stdout, we must + // also update cmd.Stderr so that it still holds. + func() { + defer func() { recover() }() + if cmd.Stderr == prevStdout { + cmd.Stderr = cmd.Stdout + } + }() + } + } + + err = cmd.Start() + if stdoutW != nil { + // The child process has inherited the pipe file, + // so close the copy held in this process. + stdoutW.Close() + stdoutW = nil + } + if err != nil { return err } + resChan := make(chan error, 1) go func() { resChan <- cmd.Wait() @@ -253,11 +361,14 @@ func runCmdContext(ctx context.Context, cmd *exec.Cmd) error { // If we're interested in debugging hanging Go commands, stop waiting after a // minute and panic with interesting information. - if DebugHangingGoCommands { + debug := DebugHangingGoCommands + if debug { + timer := time.NewTimer(1 * time.Minute) + defer timer.Stop() select { case err := <-resChan: return err - case <-time.After(1 * time.Minute): + case <-timer.C: HandleHangingGoCommand(cmd.Process) case <-ctx.Done(): } @@ -270,30 +381,25 @@ func runCmdContext(ctx context.Context, cmd *exec.Cmd) error { } // Cancelled. Interrupt and see if it ends voluntarily. - cmd.Process.Signal(os.Interrupt) - select { - case err := <-resChan: - return err - case <-time.After(time.Second): + if err := cmd.Process.Signal(os.Interrupt); err == nil { + // (We used to wait only 1s but this proved + // fragile on loaded builder machines.) + timer := time.NewTimer(5 * time.Second) + defer timer.Stop() + select { + case err := <-resChan: + return err + case <-timer.C: + } } // Didn't shut down in response to interrupt. Kill it hard. // TODO(rfindley): per advice from bcmills@, it may be better to send SIGQUIT // on certain platforms, such as unix. - if err := cmd.Process.Kill(); err != nil && DebugHangingGoCommands { - // Don't panic here as this reliably fails on windows with EINVAL. + if err := cmd.Process.Kill(); err != nil && !errors.Is(err, os.ErrProcessDone) && debug { log.Printf("error killing the Go command: %v", err) } - // See above: don't wait indefinitely if we're debugging hanging Go commands. - if DebugHangingGoCommands { - select { - case err := <-resChan: - return err - case <-time.After(10 * time.Second): // a shorter wait as resChan should return quickly following Kill - HandleHangingGoCommand(cmd.Process) - } - } return <-resChan } diff --git a/go/vendor/golang.org/x/tools/internal/gocommand/version.go b/go/vendor/golang.org/x/tools/internal/gocommand/version.go index 307a76d474a..446c5846a60 100644 --- a/go/vendor/golang.org/x/tools/internal/gocommand/version.go +++ b/go/vendor/golang.org/x/tools/internal/gocommand/version.go @@ -23,21 +23,11 @@ import ( func GoVersion(ctx context.Context, inv Invocation, r *Runner) (int, error) { inv.Verb = "list" inv.Args = []string{"-e", "-f", `{{context.ReleaseTags}}`, `--`, `unsafe`} - inv.Env = append(append([]string{}, inv.Env...), "GO111MODULE=off") - // Unset any unneeded flags, and remove them from BuildFlags, if they're - // present. - inv.ModFile = "" + inv.BuildFlags = nil // This is not a build command. inv.ModFlag = "" - var buildFlags []string - for _, flag := range inv.BuildFlags { - // Flags can be prefixed by one or two dashes. - f := strings.TrimPrefix(strings.TrimPrefix(flag, "-"), "-") - if strings.HasPrefix(f, "mod=") || strings.HasPrefix(f, "modfile=") { - continue - } - buildFlags = append(buildFlags, flag) - } - inv.BuildFlags = buildFlags + inv.ModFile = "" + inv.Env = append(inv.Env[:len(inv.Env):len(inv.Env)], "GO111MODULE=off") + stdoutBytes, err := r.Run(ctx, inv) if err != nil { return 0, err diff --git a/go/vendor/golang.org/x/tools/internal/tokeninternal/tokeninternal.go b/go/vendor/golang.org/x/tools/internal/tokeninternal/tokeninternal.go index a3fb2d4f29d..7e638ec24fc 100644 --- a/go/vendor/golang.org/x/tools/internal/tokeninternal/tokeninternal.go +++ b/go/vendor/golang.org/x/tools/internal/tokeninternal/tokeninternal.go @@ -7,7 +7,9 @@ package tokeninternal import ( + "fmt" "go/token" + "sort" "sync" "unsafe" ) @@ -57,3 +59,93 @@ func GetLines(file *token.File) []int { panic("unexpected token.File size") } } + +// AddExistingFiles adds the specified files to the FileSet if they +// are not already present. It panics if any pair of files in the +// resulting FileSet would overlap. +func AddExistingFiles(fset *token.FileSet, files []*token.File) { + // Punch through the FileSet encapsulation. + type tokenFileSet struct { + // This type remained essentially consistent from go1.16 to go1.21. + mutex sync.RWMutex + base int + files []*token.File + _ *token.File // changed to atomic.Pointer[token.File] in go1.19 + } + + // If the size of token.FileSet changes, this will fail to compile. + const delta = int64(unsafe.Sizeof(tokenFileSet{})) - int64(unsafe.Sizeof(token.FileSet{})) + var _ [-delta * delta]int + + type uP = unsafe.Pointer + var ptr *tokenFileSet + *(*uP)(uP(&ptr)) = uP(fset) + ptr.mutex.Lock() + defer ptr.mutex.Unlock() + + // Merge and sort. + newFiles := append(ptr.files, files...) + sort.Slice(newFiles, func(i, j int) bool { + return newFiles[i].Base() < newFiles[j].Base() + }) + + // Reject overlapping files. + // Discard adjacent identical files. + out := newFiles[:0] + for i, file := range newFiles { + if i > 0 { + prev := newFiles[i-1] + if file == prev { + continue + } + if prev.Base()+prev.Size()+1 > file.Base() { + panic(fmt.Sprintf("file %s (%d-%d) overlaps with file %s (%d-%d)", + prev.Name(), prev.Base(), prev.Base()+prev.Size(), + file.Name(), file.Base(), file.Base()+file.Size())) + } + } + out = append(out, file) + } + newFiles = out + + ptr.files = newFiles + + // Advance FileSet.Base(). + if len(newFiles) > 0 { + last := newFiles[len(newFiles)-1] + newBase := last.Base() + last.Size() + 1 + if ptr.base < newBase { + ptr.base = newBase + } + } +} + +// FileSetFor returns a new FileSet containing a sequence of new Files with +// the same base, size, and line as the input files, for use in APIs that +// require a FileSet. +// +// Precondition: the input files must be non-overlapping, and sorted in order +// of their Base. +func FileSetFor(files ...*token.File) *token.FileSet { + fset := token.NewFileSet() + for _, f := range files { + f2 := fset.AddFile(f.Name(), f.Base(), f.Size()) + lines := GetLines(f) + f2.SetLines(lines) + } + return fset +} + +// CloneFileSet creates a new FileSet holding all files in fset. It does not +// create copies of the token.Files in fset: they are added to the resulting +// FileSet unmodified. +func CloneFileSet(fset *token.FileSet) *token.FileSet { + var files []*token.File + fset.Iterate(func(f *token.File) bool { + files = append(files, f) + return true + }) + newFileSet := token.NewFileSet() + AddExistingFiles(newFileSet, files) + return newFileSet +} diff --git a/go/vendor/golang.org/x/tools/internal/typeparams/common.go b/go/vendor/golang.org/x/tools/internal/typeparams/common.go index 25a1426d30e..d0d0649fe2a 100644 --- a/go/vendor/golang.org/x/tools/internal/typeparams/common.go +++ b/go/vendor/golang.org/x/tools/internal/typeparams/common.go @@ -23,6 +23,7 @@ package typeparams import ( + "fmt" "go/ast" "go/token" "go/types" @@ -87,7 +88,6 @@ func IsTypeParam(t types.Type) bool { func OriginMethod(fn *types.Func) *types.Func { recv := fn.Type().(*types.Signature).Recv() if recv == nil { - return fn } base := recv.Type() @@ -106,6 +106,31 @@ func OriginMethod(fn *types.Func) *types.Func { } orig := NamedTypeOrigin(named) gfn, _, _ := types.LookupFieldOrMethod(orig, true, fn.Pkg(), fn.Name()) + + // This is a fix for a gopls crash (#60628) due to a go/types bug (#60634). In: + // package p + // type T *int + // func (*T) f() {} + // LookupFieldOrMethod(T, true, p, f)=nil, but NewMethodSet(*T)={(*T).f}. + // Here we make them consistent by force. + // (The go/types bug is general, but this workaround is reached only + // for generic T thanks to the early return above.) + if gfn == nil { + mset := types.NewMethodSet(types.NewPointer(orig)) + for i := 0; i < mset.Len(); i++ { + m := mset.At(i) + if m.Obj().Id() == fn.Id() { + gfn = m.Obj() + break + } + } + } + + // In golang/go#61196, we observe another crash, this time inexplicable. + if gfn == nil { + panic(fmt.Sprintf("missing origin method for %s.%s; named == origin: %t, named.NumMethods(): %d, origin.NumMethods(): %d", named, fn, named == orig, named.NumMethods(), orig.NumMethods())) + } + return gfn.(*types.Func) } diff --git a/go/vendor/golang.org/x/tools/internal/typeparams/coretype.go b/go/vendor/golang.org/x/tools/internal/typeparams/coretype.go index 993135ec90e..71248209ee5 100644 --- a/go/vendor/golang.org/x/tools/internal/typeparams/coretype.go +++ b/go/vendor/golang.org/x/tools/internal/typeparams/coretype.go @@ -81,13 +81,13 @@ func CoreType(T types.Type) types.Type { // restrictions may be arbitrarily complex. For example, consider the // following: // -// type A interface{ ~string|~[]byte } +// type A interface{ ~string|~[]byte } // -// type B interface{ int|string } +// type B interface{ int|string } // -// type C interface { ~string|~int } +// type C interface { ~string|~int } // -// type T[P interface{ A|B; C }] int +// type T[P interface{ A|B; C }] int // // In this example, the structural type restriction of P is ~string|int: A|B // expands to ~string|~[]byte|int|string, which reduces to ~string|~[]byte|int, diff --git a/go/vendor/golang.org/x/tools/internal/typeparams/termlist.go b/go/vendor/golang.org/x/tools/internal/typeparams/termlist.go index 933106a23dd..cbd12f80131 100644 --- a/go/vendor/golang.org/x/tools/internal/typeparams/termlist.go +++ b/go/vendor/golang.org/x/tools/internal/typeparams/termlist.go @@ -30,7 +30,7 @@ func (xl termlist) String() string { var buf bytes.Buffer for i, x := range xl { if i > 0 { - buf.WriteString(" ∪ ") + buf.WriteString(" | ") } buf.WriteString(x.String()) } diff --git a/go/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go b/go/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go index b4788978ff4..7ed86e1711b 100644 --- a/go/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go +++ b/go/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go @@ -129,7 +129,7 @@ func NamedTypeArgs(*types.Named) *TypeList { } // NamedTypeOrigin is the identity method at this Go version. -func NamedTypeOrigin(named *types.Named) types.Type { +func NamedTypeOrigin(named *types.Named) *types.Named { return named } diff --git a/go/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go b/go/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go index 114a36b866b..cf301af1dbe 100644 --- a/go/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go +++ b/go/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go @@ -103,7 +103,7 @@ func NamedTypeArgs(named *types.Named) *TypeList { } // NamedTypeOrigin returns named.Orig(). -func NamedTypeOrigin(named *types.Named) types.Type { +func NamedTypeOrigin(named *types.Named) *types.Named { return named.Origin() } diff --git a/go/vendor/golang.org/x/tools/internal/typeparams/typeterm.go b/go/vendor/golang.org/x/tools/internal/typeparams/typeterm.go index 7ddee28d987..7350bb702a1 100644 --- a/go/vendor/golang.org/x/tools/internal/typeparams/typeterm.go +++ b/go/vendor/golang.org/x/tools/internal/typeparams/typeterm.go @@ -10,11 +10,10 @@ import "go/types" // A term describes elementary type sets: // -// ∅: (*term)(nil) == ∅ // set of no types (empty set) -// ð“¤: &term{} == 𓤠// set of all types (ð“¤niverse) -// T: &term{false, T} == {T} // set of type T -// ~t: &term{true, t} == {t' | under(t') == t} // set of types with underlying type t -// +// ∅: (*term)(nil) == ∅ // set of no types (empty set) +// ð“¤: &term{} == 𓤠// set of all types (ð“¤niverse) +// T: &term{false, T} == {T} // set of type T +// ~t: &term{true, t} == {t' | under(t') == t} // set of types with underlying type t type term struct { tilde bool // valid if typ != nil typ types.Type diff --git a/go/vendor/golang.org/x/tools/internal/typesinternal/objectpath.go b/go/vendor/golang.org/x/tools/internal/typesinternal/objectpath.go new file mode 100644 index 00000000000..5e96e895573 --- /dev/null +++ b/go/vendor/golang.org/x/tools/internal/typesinternal/objectpath.go @@ -0,0 +1,24 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package typesinternal + +import "go/types" + +// This file contains back doors that allow gopls to avoid method sorting when +// using the objectpath package. +// +// This is performance-critical in certain repositories, but changing the +// behavior of the objectpath package is still being discussed in +// golang/go#61443. If we decide to remove the sorting in objectpath we can +// simply delete these back doors. Otherwise, we should add a new API to +// objectpath that allows controlling the sorting. + +// SkipEncoderMethodSorting marks enc (which must be an *objectpath.Encoder) as +// not requiring sorted methods. +var SkipEncoderMethodSorting func(enc interface{}) + +// ObjectpathObject is like objectpath.Object, but allows suppressing method +// sorting. +var ObjectpathObject func(pkg *types.Package, p string, skipMethodSorting bool) (types.Object, error) diff --git a/go/vendor/modules.txt b/go/vendor/modules.txt index 1f1e5a29f25..77866bafb1e 100644 --- a/go/vendor/modules.txt +++ b/go/vendor/modules.txt @@ -4,10 +4,10 @@ golang.org/x/mod/internal/lazyregexp golang.org/x/mod/modfile golang.org/x/mod/module golang.org/x/mod/semver -# golang.org/x/sys v0.10.0 +# golang.org/x/sys v0.12.0 ## explicit; go 1.17 golang.org/x/sys/execabs -# golang.org/x/tools v0.11.1 +# golang.org/x/tools v0.13.0 ## explicit; go 1.18 golang.org/x/tools/go/gcexportdata golang.org/x/tools/go/internal/packagesdriver @@ -25,5 +25,3 @@ golang.org/x/tools/internal/pkgbits golang.org/x/tools/internal/tokeninternal golang.org/x/tools/internal/typeparams golang.org/x/tools/internal/typesinternal -# golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 -## explicit; go 1.17 From 13577f71d6bb45464d94218c07f12d1ab26e6c4d Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Fri, 6 Oct 2023 22:34:31 +0200 Subject: [PATCH 025/430] fix tests, add more comments --- .../DecompressionBombs.ql | 2 +- .../DecompressionBombs.qll | 86 +++++++++---- .../DecompressionBombs.expected | 1 - .../CWE-522-DecompressionBombs/go.mod | 12 ++ .../vendor/github.com/DataDog/zstd/stub.go | 16 +++ .../github.com/dsnet/compress/flate/stub.go | 35 ++++++ .../vendor/github.com/golang/snappy/stub.go | 28 +++++ .../klauspost/compress/flate/stub.go | 16 +++ .../klauspost/compress/gzip/stub.go | 47 +++++++ .../github.com/klauspost/compress/s2/stub.go | 84 +++++++++++++ .../klauspost/compress/snappy/stub.go | 16 +++ .../github.com/klauspost/compress/zip/stub.go | 117 ++++++++++++++++++ .../klauspost/compress/zlib/stub.go | 16 +++ .../klauspost/compress/zstd/stub.go | 42 +++++++ .../vendor/github.com/klauspost/pgzip/stub.go | 47 +++++++ .../vendor/github.com/ulikunitz/xz/stub.go | 45 +++++++ .../vendor/modules.txt | 18 +++ 17 files changed, 601 insertions(+), 27 deletions(-) rename go/ql/src/experimental/{CWE-522-DecompressionBombs => frameworks}/DecompressionBombs.qll (89%) create mode 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/go.mod create mode 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/DataDog/zstd/stub.go create mode 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/dsnet/compress/flate/stub.go create mode 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/golang/snappy/stub.go create mode 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/flate/stub.go create mode 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/gzip/stub.go create mode 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/s2/stub.go create mode 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/snappy/stub.go create mode 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/zip/stub.go create mode 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/zlib/stub.go create mode 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/zstd/stub.go create mode 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/pgzip/stub.go create mode 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/ulikunitz/xz/stub.go create mode 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/modules.txt diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index 7942325d65f..491426b0427 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -14,7 +14,7 @@ import go import semmle.go.dataflow.Properties import MultipartAndFormRemoteSource -import DecompressionBombs +import experimental.frameworks.DecompressionBombs module DecompressionBombsConfig implements DataFlow::StateConfigSig { class FlowState = DecompressionBombs::FlowState; diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.qll b/go/ql/src/experimental/frameworks/DecompressionBombs.qll similarity index 89% rename from go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.qll rename to go/ql/src/experimental/frameworks/DecompressionBombs.qll index 2e3ca1f5dd7..9b7f6f57294 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.qll +++ b/go/ql/src/experimental/frameworks/DecompressionBombs.qll @@ -42,12 +42,13 @@ module DecompressionBombs { abstract DataFlow::Node sink(); } + /** + * Provides Decompression Sinks and additional flow steps for `github.com/DataDog/zstd` package + */ module DataDogZstd { class TheSink extends Range { TheSink() { - exists(Method f | - f.hasQualifiedName("github.com/klauspost/compress/zstd", "Decoder", "Read") - | + exists(Method f | f.hasQualifiedName("github.com/DataDog/zstd", "reader", "Read") | this = f.getACall().getReceiver() ) } @@ -78,6 +79,9 @@ module DecompressionBombs { } } + /** + * Provides Decompression Sinks and additional flow steps for `github.com/klauspost/compress/zstd` package + */ module KlauspostZstd { class TheSink extends Range { TheSink() { @@ -121,6 +125,9 @@ module DecompressionBombs { } } + /** + * Provides additional flow steps for `archive/zip` package + */ module ArchiveZip { class TheAdditionalTaintStep extends AdditionalTaintStep { TheAdditionalTaintStep() { this = "AdditionalTaintStep" } @@ -144,26 +151,10 @@ module DecompressionBombs { } } + /** + * Provides Decompression additional taint steps for `github.com/klauspost/compress/zip` package + */ module KlauspostZip { - class TheSink extends Range { - TheSink() { - exists(Method f | - f.hasQualifiedName("github.com/klauspost/compress/zstd", "Decoder", - ["WriteTo", "DecodeAll"]) - | - this = f.getACall().getReceiver() - ) - or - exists(Method f | - f.hasQualifiedName("github.com/klauspost/compress/zstd", "Decoder", "Read") - | - this = f.getACall().getReceiver() - ) - } - - override DataFlow::Node sink() { result = this } - } - class TheAdditionalTaintStep extends AdditionalTaintStep { TheAdditionalTaintStep() { this = "AdditionalTaintStep" } @@ -200,6 +191,9 @@ module DecompressionBombs { } } + /** + * Provides Decompression Sinks and additional taint steps for `github.com/ulikunitz/xz` package + */ module UlikunitzXz { class TheSink extends Range { TheSink() { @@ -233,6 +227,9 @@ module DecompressionBombs { } } + /** + * Provides Decompression Sinks and additional taint steps for `compress/gzip` package + */ module CompressGzip { class TheSink extends Range { TheSink() { @@ -267,6 +264,9 @@ module DecompressionBombs { } } + /** + * Provides Decompression Sinks and additional taint steps for `github.com/klauspost/compress/gzip` package + */ module KlauspostGzip { class TheSink extends Range { TheSink() { @@ -311,6 +311,9 @@ module DecompressionBombs { } } + /** + * Provides Decompression Sinks and additional taint steps for `compress/bzip2` package + */ module CompressBzip2 { class TheSink extends Range { TheSink() { @@ -345,6 +348,9 @@ module DecompressionBombs { } } + /** + * Provides Decompression Sinks and additional taint steps for `github.com/dsnet/compress/bzip2` package + */ module DsnetBzip2 { class TheSink extends Range { TheSink() { @@ -379,6 +385,9 @@ module DecompressionBombs { } } + /** + * Provides Decompression Sinks and additional taint steps for `github.com/dsnet/compress/flate` package + */ module DsnetFlate { class TheSink extends Range { TheSink() { @@ -413,6 +422,9 @@ module DecompressionBombs { } } + /** + * Provides Decompression Sinks and additional taint steps for `compress/flate` package + */ module CompressFlate { class TheSink extends Range { TheSink() { @@ -447,6 +459,9 @@ module DecompressionBombs { } } + /** + * Provides Decompression Sinks and additional taint steps for `github.com/klauspost/compress/flate` package + */ module KlauspostFlate { class TheSink extends Range { TheSink() { @@ -483,6 +498,9 @@ module DecompressionBombs { } } + /** + * Provides Decompression Sinks and additional taint steps for `github.com/klauspost/compress/zlib` package + */ module KlauspostZlib { class TheSink extends Range { TheSink() { @@ -519,6 +537,9 @@ module DecompressionBombs { } } + /** + * Provides Decompression Sinks and additional taint steps for `compress/zlib` package + */ module CompressZlib { class TheSink extends Range { TheSink() { @@ -553,6 +574,9 @@ module DecompressionBombs { } } + /** + * Provides Decompression Sinks and additional taint steps for `github.com/golang/snappy` package + */ module GolangSnappy { class TheSink extends Range { TheSink() { @@ -589,6 +613,9 @@ module DecompressionBombs { } } + /** + * Provides Decompression additional taint steps for `github.com/klauspost/compress/snappy` package + */ module KlauspostSnappy { class TheAdditionalTaintStep extends AdditionalTaintStep { TheAdditionalTaintStep() { this = "AdditionalTaintStep" } @@ -613,14 +640,17 @@ module DecompressionBombs { } } + /** + * Provides Decompression Sinks and additional taint steps for `github.com/klauspost/compress/s2` package + */ module KlauspostS2 { class TheSink extends Range { TheSink() { - exists(Function f | - f.hasQualifiedName("github.com/klauspost/compress/s2.Reader", + exists(Method m | + m.hasQualifiedName("github.com/klauspost/compress/s2", "Reader", ["DecodeConcurrent", "ReadByte", "Read"]) | - this = f.getACall().getReceiver() + this = m.getACall().getReceiver() ) } @@ -650,6 +680,9 @@ module DecompressionBombs { } } + /** + * Provides Decompression Sinks for `"archive/tar` package + */ module ArchiveTar { class TheSink extends Range { TheSink() { @@ -662,6 +695,9 @@ module DecompressionBombs { } } + /** + * Provides Decompression Sinks for packages that use some standard IO interfaces/methods for reading decompressed data + */ module GeneralReadIoSink { class TheSink extends Range { TheSink() { diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected index fd4db0c87ac..ae90690f313 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -1,4 +1,3 @@ -WARNING: Reference to DecompressionBombs references a local library, not the named module. (/home/am/CodeQL-home/codeql-repo-amammad/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql:17,8-26) edges | test.go:56:18:56:29 | selection of Body | test.go:165:22:165:25 | definition of file | | test.go:57:15:57:26 | selection of Body | test.go:135:19:135:22 | definition 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/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/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..8e04aa782d1 --- /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) (int64, error) { + return 0, 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..cd6e5178fbf --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/snappy/stub.go @@ -0,0 +1,16 @@ +// 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" +) + +func NewReader(_ io.Reader) interface{} { + return nil +} 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..a926861ba78 --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/zip/stub.go @@ -0,0 +1,117 @@ +// 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" +) + +type Decompressor func(io.Reader) io.ReadCloser + +type File struct { + FileHeader FileHeader +} + +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 { + Reader 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 From 14d1e08051ba3c47e7fc87f82887e657ae340345 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Tue, 10 Oct 2023 22:34:26 +0200 Subject: [PATCH 026/430] reformat --- .../DecompressionBombs.expected | 680 +++++++++--------- .../CWE-522-DecompressionBombs/test.go | 19 +- 2 files changed, 350 insertions(+), 349 deletions(-) diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected index ae90690f313..6eed32b5236 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -1,346 +1,346 @@ edges -| test.go:56:18:56:29 | selection of Body | test.go:165:22:165:25 | definition of file | -| test.go:57:15:57:26 | selection of Body | test.go:135:19:135:22 | definition of file | -| test.go:58:16:58:27 | selection of Body | test.go:146:20:146:23 | definition of file | -| test.go:59:16:59:46 | call to FormValue | test.go:105:20:105:27 | definition of filename | -| test.go:60:20:60:48 | call to PostFormValue | test.go:76:24:76:31 | definition of filename | -| test.go:62:17:62:28 | selection of Body | test.go:96:21:96:23 | definition of src | -| test.go:76:24:76:31 | definition of filename | test.go:77:25:77:32 | filename | -| test.go:77:2:77:33 | ... := ...[0] | test.go:80:12:80:12 | f | -| test.go:77:25:77:32 | filename | test.go:77:2:77:33 | ... := ...[0] | -| test.go:80:3:80:19 | ... := ...[0] | test.go:82:37:82:38 | rc | -| test.go:80:12:80:12 | f | test.go:80:3:80:19 | ... := ...[0] | -| test.go:96:21:96:23 | definition of src | test.go:97:29:97:31 | src | -| test.go:97:2:97:32 | ... := ...[0] | test.go:101:26:101:30 | gzipR | -| test.go:97:29:97:31 | src | test.go:97:2:97:32 | ... := ...[0] | -| test.go:101:11:101:44 | call to LimitReader | test.go:102:23:102:28 | newSrc | -| test.go:101:26:101:30 | gzipR | test.go:101:11:101:44 | call to LimitReader | -| test.go:105:20:105:27 | definition of filename | test.go:107:25:107:32 | filename | -| test.go:107:2:107:33 | ... := ...[0] | test.go:109:12:109:12 | f | -| test.go:107:25:107:32 | filename | test.go:107:2:107:33 | ... := ...[0] | -| test.go:109:3:109:19 | ... := ...[0] | test.go:111:37:111:38 | rc | -| test.go:109:12:109:12 | f | test.go:109:3:109:19 | ... := ...[0] | -| test.go:135:19:135:22 | definition of file | test.go:136:25:136:28 | file | -| test.go:136:2:136:29 | ... := ...[0] | test.go:137:48:137:52 | file1 | -| test.go:136:25:136:28 | file | test.go:136:2:136:29 | ... := ...[0] | -| test.go:137:2:137:69 | ... := ...[0] | test.go:140:26:140:29 | file | -| test.go:137:32:137:53 | call to NewReader | test.go:137:2:137:69 | ... := ...[0] | -| test.go:137:48:137:52 | file1 | test.go:137:32:137:53 | call to NewReader | -| test.go:140:3:140:36 | ... := ...[0] | test.go:141:36:141:51 | fileReaderCloser | -| test.go:140:26:140:29 | file | test.go:140:3:140:36 | ... := ...[0] | -| test.go:146:20:146:23 | definition of file | test.go:147:25:147:28 | file | -| test.go:147:2:147:29 | ... := ...[0] | test.go:148:66:148:70 | file2 | -| test.go:147:25:147:28 | file | test.go:147:2:147:29 | ... := ...[0] | -| test.go:148:2:148:87 | ... := ...[0] | test.go:153:36:153:51 | fileReaderCloser | -| test.go:148:50:148:71 | call to NewReader | test.go:148:2:148:87 | ... := ...[0] | -| test.go:148:66:148:70 | file2 | test.go:148:50:148:71 | call to NewReader | -| test.go:165:22:165:25 | definition of file | test.go:168:41:168:44 | file | -| test.go:165:22:165:25 | definition of file | test.go:174:28:174:31 | file | -| test.go:165:22:165:25 | definition of file | test.go:181:28:181:31 | file | -| test.go:165:22:165:25 | definition of file | test.go:188:45:188:48 | file | -| test.go:165:22:165:25 | definition of file | test.go:194:41:194:44 | file | -| test.go:165:22:165:25 | definition of file | test.go:201:47:201:50 | file | -| test.go:165:22:165:25 | definition of file | test.go:208:29:208:32 | file | -| test.go:165:22:165:25 | definition of file | test.go:214:30:214:33 | file | -| test.go:165:22:165:25 | definition of file | test.go:221:48:221:51 | file | -| test.go:165:22:165:25 | definition of file | test.go:234:22:234:25 | file | -| test.go:165:22:165:25 | definition of file | test.go:244:33:244:36 | file | -| test.go:165:22:165:25 | definition of file | test.go:250:47:250:50 | file | -| test.go:165:22:165:25 | definition of file | test.go:259:43:259:46 | file | -| test.go:165:22:165:25 | definition of file | test.go:267:38:267:41 | file | -| test.go:165:22:165:25 | definition of file | test.go:278:33:278:36 | file | -| test.go:165:22:165:25 | definition of file | test.go:284:29:284:32 | file | -| test.go:168:3:168:73 | ... := ...[0] | test.go:170:3:170:12 | bzip2dsnet | -| test.go:168:3:168:73 | ... := ...[0] | test.go:171:27:171:36 | bzip2dsnet | -| test.go:168:41:168:44 | file | test.go:168:3:168:73 | ... := ...[0] | -| test.go:171:13:171:37 | call to NewReader | test.go:290:2:290:8 | tarRead | -| test.go:171:13:171:37 | call to NewReader | test.go:300:25:300:31 | tarRead | -| test.go:171:27:171:36 | bzip2dsnet | test.go:171:13:171:37 | call to NewReader | -| test.go:174:12:174:32 | call to NewReader | test.go:176:3:176:7 | Bzip2 | -| test.go:174:12:174:32 | call to NewReader | test.go:177:27:177:31 | Bzip2 | -| test.go:174:28:174:31 | file | test.go:174:12:174:32 | call to NewReader | -| test.go:177:13:177:32 | call to NewReader | test.go:290:2:290:8 | tarRead | -| test.go:177:13:177:32 | call to NewReader | test.go:300:25:300:31 | tarRead | -| test.go:177:27:177:31 | Bzip2 | test.go:177:13:177:32 | call to NewReader | -| test.go:181:12:181:32 | call to NewReader | test.go:183:3:183:7 | Flate | -| test.go:181:12:181:32 | call to NewReader | test.go:184:27:184:31 | Flate | -| test.go:181:28:181:31 | file | test.go:181:12:181:32 | call to NewReader | -| test.go:184:13:184:32 | call to NewReader | test.go:290:2:290:8 | tarRead | -| test.go:184:13:184:32 | call to NewReader | test.go:300:25:300:31 | tarRead | -| test.go:184:27:184:31 | Flate | test.go:184:13:184:32 | call to NewReader | -| test.go:188:20:188:49 | call to NewReader | test.go:190:3:190:15 | zlibklauspost | -| test.go:188:20:188:49 | call to NewReader | test.go:191:27:191:39 | zlibklauspost | -| test.go:188:45:188:48 | file | test.go:188:20:188:49 | call to NewReader | -| test.go:191:13:191:40 | call to NewReader | test.go:290:2:290:8 | tarRead | -| test.go:191:13:191:40 | call to NewReader | test.go:300:25:300:31 | tarRead | -| test.go:191:27:191:39 | zlibklauspost | test.go:191:13:191:40 | call to NewReader | -| test.go:194:3:194:73 | ... := ...[0] | test.go:196:3:196:12 | flatedsnet | -| test.go:194:3:194:73 | ... := ...[0] | test.go:197:27:197:36 | flatedsnet | -| test.go:194:41:194:44 | file | test.go:194:3:194:73 | ... := ...[0] | -| test.go:197:13:197:37 | call to NewReader | test.go:290:2:290:8 | tarRead | -| test.go:197:13:197:37 | call to NewReader | test.go:300:25:300:31 | tarRead | -| test.go:197:27:197:36 | flatedsnet | test.go:197:13:197:37 | call to NewReader | -| test.go:201:3:201:51 | ... := ...[0] | test.go:203:3:203:15 | zlibklauspost | -| test.go:201:3:201:51 | ... := ...[0] | test.go:204:27:204:39 | zlibklauspost | -| test.go:201:47:201:50 | file | test.go:201:3:201:51 | ... := ...[0] | -| test.go:204:13:204:40 | call to NewReader | test.go:290:2:290:8 | tarRead | -| test.go:204:13:204:40 | call to NewReader | test.go:300:25:300:31 | tarRead | -| test.go:204:27:204:39 | zlibklauspost | test.go:204:13:204:40 | call to NewReader | -| test.go:208:3:208:33 | ... := ...[0] | test.go:210:3:210:6 | Zlib | -| test.go:208:3:208:33 | ... := ...[0] | test.go:211:27:211:30 | Zlib | -| test.go:208:29:208:32 | file | test.go:208:3:208:33 | ... := ...[0] | -| test.go:211:13:211:31 | call to NewReader | test.go:290:2:290:8 | tarRead | -| test.go:211:13:211:31 | call to NewReader | test.go:300:25:300:31 | tarRead | -| test.go:211:27:211:30 | Zlib | test.go:211:13:211:31 | call to NewReader | -| test.go:214:13:214:34 | call to NewReader | test.go:216:3:216:8 | Snappy | -| test.go:214:13:214:34 | call to NewReader | test.go:217:3:217:8 | Snappy | -| test.go:214:13:214:34 | call to NewReader | test.go:218:27:218:32 | Snappy | -| test.go:214:30:214:33 | file | test.go:214:13:214:34 | call to NewReader | -| test.go:218:13:218:33 | call to NewReader | test.go:290:2:290:8 | tarRead | -| test.go:218:13:218:33 | call to NewReader | test.go:300:25:300:31 | tarRead | -| test.go:218:27:218:32 | Snappy | test.go:218:13:218:33 | call to NewReader | -| test.go:221:22:221:52 | call to NewReader | test.go:227:3:227:10 | s2Reader | -| test.go:221:22:221:52 | call to NewReader | test.go:229:3:229:10 | s2Reader | -| test.go:221:22:221:52 | call to NewReader | test.go:230:3:230:10 | s2Reader | -| test.go:221:22:221:52 | call to NewReader | test.go:231:27:231:34 | s2Reader | -| test.go:221:48:221:51 | file | test.go:221:22:221:52 | call to NewReader | -| test.go:231:13:231:35 | call to NewReader | test.go:290:2:290:8 | tarRead | -| test.go:231:13:231:35 | call to NewReader | test.go:300:25:300:31 | tarRead | -| test.go:231:27:231:34 | s2Reader | test.go:231:13:231:35 | call to NewReader | -| test.go:234:9:234:26 | call to NewReader | test.go:236:3:236:4 | S2 | -| test.go:234:9:234:26 | call to NewReader | test.go:238:3:238:4 | S2 | -| test.go:234:9:234:26 | call to NewReader | test.go:241:27:241:28 | S2 | -| test.go:234:22:234:25 | file | test.go:234:9:234:26 | call to NewReader | -| test.go:241:13:241:29 | call to NewReader | test.go:290:2:290:8 | tarRead | -| test.go:241:13:241:29 | call to NewReader | test.go:300:25:300:31 | tarRead | -| test.go:241:27:241:28 | S2 | test.go:241:13:241:29 | call to NewReader | -| test.go:244:3:244:37 | ... := ...[0] | test.go:246:3:246:10 | gzipRead | -| test.go:244:3:244:37 | ... := ...[0] | test.go:247:27:247:34 | gzipRead | -| test.go:244:33:244:36 | file | test.go:244:3:244:37 | ... := ...[0] | -| test.go:247:13:247:35 | call to NewReader | test.go:290:2:290:8 | tarRead | -| test.go:247:13:247:35 | call to NewReader | test.go:300:25:300:31 | tarRead | -| test.go:247:27:247:34 | gzipRead | test.go:247:13:247:35 | call to NewReader | -| test.go:250:3:250:51 | ... := ...[0] | test.go:252:3:252:15 | gzipklauspost | -| test.go:250:3:250:51 | ... := ...[0] | test.go:254:3:254:15 | gzipklauspost | -| test.go:250:3:250:51 | ... := ...[0] | test.go:255:27:255:39 | gzipklauspost | -| test.go:250:47:250:50 | file | test.go:250:3:250:51 | ... := ...[0] | -| test.go:255:13:255:40 | call to NewReader | test.go:290:2:290:8 | tarRead | -| test.go:255:13:255:40 | call to NewReader | test.go:300:25:300:31 | tarRead | -| test.go:255:27:255:39 | gzipklauspost | test.go:255:13:255:40 | call to NewReader | -| test.go:259:3:259:47 | ... := ...[0] | test.go:263:3:263:11 | gzippgzip | -| test.go:259:3:259:47 | ... := ...[0] | test.go:264:27:264:35 | gzippgzip | -| test.go:259:43:259:46 | file | test.go:259:3:259:47 | ... := ...[0] | -| test.go:264:13:264:36 | call to NewReader | test.go:290:2:290:8 | tarRead | -| test.go:264:13:264:36 | call to NewReader | test.go:300:25:300:31 | tarRead | -| test.go:264:27:264:35 | gzippgzip | test.go:264:13:264:36 | call to NewReader | -| test.go:267:3:267:42 | ... := ...[0] | test.go:269:3:269:6 | zstd | -| test.go:267:3:267:42 | ... := ...[0] | test.go:271:3:271:6 | zstd | -| test.go:267:3:267:42 | ... := ...[0] | test.go:273:3:273:6 | zstd | -| test.go:267:3:267:42 | ... := ...[0] | test.go:274:27:274:30 | zstd | -| test.go:267:38:267:41 | file | test.go:267:3:267:42 | ... := ...[0] | -| test.go:274:13:274:31 | call to NewReader | test.go:290:2:290:8 | tarRead | -| test.go:274:13:274:31 | call to NewReader | test.go:300:25:300:31 | tarRead | -| test.go:274:27:274:30 | zstd | test.go:274:13:274:31 | call to NewReader | -| test.go:278:11:278:37 | call to NewReader | test.go:280:3:280:6 | zstd | -| test.go:278:11:278:37 | call to NewReader | test.go:281:27:281:30 | zstd | -| test.go:278:33:278:36 | file | test.go:278:11:278:37 | call to NewReader | -| test.go:281:13:281:31 | call to NewReader | test.go:290:2:290:8 | tarRead | -| test.go:281:13:281:31 | call to NewReader | test.go:300:25:300:31 | tarRead | -| test.go:281:27:281:30 | zstd | test.go:281:13:281:31 | call to NewReader | -| test.go:284:3:284:33 | ... := ...[0] | test.go:286:3:286:8 | xzRead | -| test.go:284:3:284:33 | ... := ...[0] | test.go:287:27:287:32 | xzRead | -| test.go:284:29:284:32 | file | test.go:284:3:284:33 | ... := ...[0] | -| test.go:287:13:287:33 | call to NewReader | test.go:290:2:290:8 | tarRead | -| test.go:287:13:287:33 | call to NewReader | test.go:300:25:300:31 | tarRead | -| test.go:287:27:287:32 | xzRead | test.go:287:13:287:33 | call to NewReader | +| test.go:57:18:57:29 | selection of Body | test.go:166:22:166:25 | definition of file | +| test.go:58:15:58:26 | selection of Body | test.go:136:19:136:22 | definition of file | +| test.go:59:16:59:27 | selection of Body | test.go:147:20:147:23 | definition of file | +| test.go:60:16:60:46 | call to FormValue | test.go:106:20:106:27 | definition of filename | +| test.go:61:20:61:48 | call to PostFormValue | test.go:77:24:77:31 | definition of filename | +| test.go:63:17:63:28 | selection of Body | test.go:97:21:97:23 | definition of src | +| test.go:77:24:77:31 | definition of filename | test.go:78:25:78:32 | filename | +| test.go:78:2:78:33 | ... := ...[0] | test.go:81:12:81:12 | f | +| test.go:78:25:78:32 | filename | test.go:78:2:78:33 | ... := ...[0] | +| test.go:81:3:81:19 | ... := ...[0] | test.go:83:37:83:38 | rc | +| test.go:81:12:81:12 | f | test.go:81:3:81:19 | ... := ...[0] | +| test.go:97:21:97:23 | definition of src | test.go:98:29:98:31 | src | +| test.go:98:2:98:32 | ... := ...[0] | test.go:102:26:102:30 | gzipR | +| test.go:98:29:98:31 | src | test.go:98:2:98:32 | ... := ...[0] | +| test.go:102:11:102:44 | call to LimitReader | test.go:103:23:103:28 | newSrc | +| test.go:102:26:102:30 | gzipR | test.go:102:11:102:44 | call to LimitReader | +| test.go:106:20:106:27 | definition of filename | test.go:108:25:108:32 | filename | +| test.go:108:2:108:33 | ... := ...[0] | test.go:110:12:110:12 | f | +| test.go:108:25:108:32 | filename | test.go:108:2:108:33 | ... := ...[0] | +| test.go:110:3:110:19 | ... := ...[0] | test.go:112:37:112:38 | rc | +| test.go:110:12:110:12 | f | test.go:110:3:110:19 | ... := ...[0] | +| test.go:136:19:136:22 | definition of file | test.go:137:25:137:28 | file | +| test.go:137:2:137:29 | ... := ...[0] | test.go:138:48:138:52 | file1 | +| test.go:137:25:137:28 | file | test.go:137:2:137:29 | ... := ...[0] | +| test.go:138:2:138:69 | ... := ...[0] | test.go:141:26:141:29 | file | +| test.go:138:32:138:53 | call to NewReader | test.go:138:2:138:69 | ... := ...[0] | +| test.go:138:48:138:52 | file1 | test.go:138:32:138:53 | call to NewReader | +| test.go:141:3:141:36 | ... := ...[0] | test.go:142:36:142:51 | fileReaderCloser | +| test.go:141:26:141:29 | file | test.go:141:3:141:36 | ... := ...[0] | +| test.go:147:20:147:23 | definition of file | test.go:148:25:148:28 | file | +| test.go:148:2:148:29 | ... := ...[0] | test.go:149:66:149:70 | file2 | +| test.go:148:25:148:28 | file | test.go:148:2:148:29 | ... := ...[0] | +| test.go:149:2:149:87 | ... := ...[0] | test.go:154:36:154:51 | fileReaderCloser | +| test.go:149:50:149:71 | call to NewReader | test.go:149:2:149:87 | ... := ...[0] | +| test.go:149:66:149:70 | file2 | test.go:149:50:149:71 | call to NewReader | +| test.go:166:22:166:25 | definition of file | test.go:169:41:169:44 | file | +| test.go:166:22:166:25 | definition of file | test.go:175:28:175:31 | file | +| test.go:166:22:166:25 | definition of file | test.go:182:28:182:31 | file | +| test.go:166:22:166:25 | definition of file | test.go:189:45:189:48 | file | +| test.go:166:22:166:25 | definition of file | test.go:195:41:195:44 | file | +| test.go:166:22:166:25 | definition of file | test.go:202:47:202:50 | file | +| test.go:166:22:166:25 | definition of file | test.go:209:29:209:32 | file | +| test.go:166:22:166:25 | definition of file | test.go:215:30:215:33 | file | +| test.go:166:22:166:25 | definition of file | test.go:222:48:222:51 | file | +| test.go:166:22:166:25 | definition of file | test.go:235:22:235:25 | file | +| test.go:166:22:166:25 | definition of file | test.go:245:33:245:36 | file | +| test.go:166:22:166:25 | definition of file | test.go:251:47:251:50 | file | +| test.go:166:22:166:25 | definition of file | test.go:260:43:260:46 | file | +| test.go:166:22:166:25 | definition of file | test.go:268:38:268:41 | file | +| test.go:166:22:166:25 | definition of file | test.go:279:33:279:36 | file | +| test.go:166:22:166:25 | definition of file | test.go:285:29:285:32 | file | +| test.go:169:3:169:73 | ... := ...[0] | test.go:171:3:171:12 | bzip2dsnet | +| test.go:169:3:169:73 | ... := ...[0] | test.go:172:27:172:36 | bzip2dsnet | +| test.go:169:41:169:44 | file | test.go:169:3:169:73 | ... := ...[0] | +| test.go:172:13:172:37 | call to NewReader | test.go:291:2:291:8 | tarRead | +| test.go:172:13:172:37 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:172:27:172:36 | bzip2dsnet | test.go:172:13:172:37 | call to NewReader | +| test.go:175:12:175:32 | call to NewReader | test.go:177:3:177:7 | Bzip2 | +| test.go:175:12:175:32 | call to NewReader | test.go:178:27:178:31 | Bzip2 | +| test.go:175:28:175:31 | file | test.go:175:12:175:32 | call to NewReader | +| test.go:178:13:178:32 | call to NewReader | test.go:291:2:291:8 | tarRead | +| test.go:178:13:178:32 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:178:27:178:31 | Bzip2 | test.go:178:13:178:32 | call to NewReader | +| test.go:182:12:182:32 | call to NewReader | test.go:184:3:184:7 | Flate | +| test.go:182:12:182:32 | call to NewReader | test.go:185:27:185:31 | Flate | +| test.go:182:28:182:31 | file | test.go:182:12:182:32 | call to NewReader | +| test.go:185:13:185:32 | call to NewReader | test.go:291:2:291:8 | tarRead | +| test.go:185:13:185:32 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:185:27:185:31 | Flate | test.go:185:13:185:32 | call to NewReader | +| test.go:189:20:189:49 | call to NewReader | test.go:191:3:191:15 | zlibklauspost | +| test.go:189:20:189:49 | call to NewReader | test.go:192:27:192:39 | zlibklauspost | +| test.go:189:45:189:48 | file | test.go:189:20:189:49 | call to NewReader | +| test.go:192:13:192:40 | call to NewReader | test.go:291:2:291:8 | tarRead | +| test.go:192:13:192:40 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:192:27:192:39 | zlibklauspost | test.go:192:13:192:40 | call to NewReader | +| test.go:195:3:195:73 | ... := ...[0] | test.go:197:3:197:12 | flatedsnet | +| test.go:195:3:195:73 | ... := ...[0] | test.go:198:27:198:36 | flatedsnet | +| test.go:195:41:195:44 | file | test.go:195:3:195:73 | ... := ...[0] | +| test.go:198:13:198:37 | call to NewReader | test.go:291:2:291:8 | tarRead | +| test.go:198:13:198:37 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:198:27:198:36 | flatedsnet | test.go:198:13:198:37 | call to NewReader | +| test.go:202:3:202:51 | ... := ...[0] | test.go:204:3:204:15 | zlibklauspost | +| test.go:202:3:202:51 | ... := ...[0] | test.go:205:27:205:39 | zlibklauspost | +| test.go:202:47:202:50 | file | test.go:202:3:202:51 | ... := ...[0] | +| test.go:205:13:205:40 | call to NewReader | test.go:291:2:291:8 | tarRead | +| test.go:205:13:205:40 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:205:27:205:39 | zlibklauspost | test.go:205:13:205:40 | call to NewReader | +| test.go:209:3:209:33 | ... := ...[0] | test.go:211:3:211:6 | Zlib | +| test.go:209:3:209:33 | ... := ...[0] | test.go:212:27:212:30 | Zlib | +| test.go:209:29:209:32 | file | test.go:209:3:209:33 | ... := ...[0] | +| test.go:212:13:212:31 | call to NewReader | test.go:291:2:291:8 | tarRead | +| test.go:212:13:212:31 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:212:27:212:30 | Zlib | test.go:212:13:212:31 | call to NewReader | +| test.go:215:13:215:34 | call to NewReader | test.go:217:3:217:8 | Snappy | +| test.go:215:13:215:34 | call to NewReader | test.go:218:3:218:8 | Snappy | +| test.go:215:13:215:34 | call to NewReader | test.go:219:27:219:32 | Snappy | +| test.go:215:30:215:33 | file | test.go:215:13:215:34 | call to NewReader | +| test.go:219:13:219:33 | call to NewReader | test.go:291:2:291:8 | tarRead | +| test.go:219:13:219:33 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:219:27:219:32 | Snappy | test.go:219:13:219:33 | call to NewReader | +| test.go:222:22:222:52 | call to NewReader | test.go:228:3:228:10 | s2Reader | +| test.go:222:22:222:52 | call to NewReader | test.go:230:3:230:10 | s2Reader | +| test.go:222:22:222:52 | call to NewReader | test.go:231:3:231:10 | s2Reader | +| test.go:222:22:222:52 | call to NewReader | test.go:232:27:232:34 | s2Reader | +| test.go:222:48:222:51 | file | test.go:222:22:222:52 | call to NewReader | +| test.go:232:13:232:35 | call to NewReader | test.go:291:2:291:8 | tarRead | +| test.go:232:13:232:35 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:232:27:232:34 | s2Reader | test.go:232:13:232:35 | call to NewReader | +| test.go:235:9:235:26 | call to NewReader | test.go:237:3:237:4 | S2 | +| test.go:235:9:235:26 | call to NewReader | test.go:239:3:239:4 | S2 | +| test.go:235:9:235:26 | call to NewReader | test.go:242:27:242:28 | S2 | +| test.go:235:22:235:25 | file | test.go:235:9:235:26 | call to NewReader | +| test.go:242:13:242:29 | call to NewReader | test.go:291:2:291:8 | tarRead | +| test.go:242:13:242:29 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:242:27:242:28 | S2 | test.go:242:13:242:29 | call to NewReader | +| test.go:245:3:245:37 | ... := ...[0] | test.go:247:3:247:10 | gzipRead | +| test.go:245:3:245:37 | ... := ...[0] | test.go:248:27:248:34 | gzipRead | +| test.go:245:33:245:36 | file | test.go:245:3:245:37 | ... := ...[0] | +| test.go:248:13:248:35 | call to NewReader | test.go:291:2:291:8 | tarRead | +| test.go:248:13:248:35 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:248:27:248:34 | gzipRead | test.go:248:13:248:35 | call to NewReader | +| test.go:251:3:251:51 | ... := ...[0] | test.go:253:3:253:15 | gzipklauspost | +| test.go:251:3:251:51 | ... := ...[0] | test.go:255:3:255:15 | gzipklauspost | +| test.go:251:3:251:51 | ... := ...[0] | test.go:256:27:256:39 | gzipklauspost | +| test.go:251:47:251:50 | file | test.go:251:3:251:51 | ... := ...[0] | +| test.go:256:13:256:40 | call to NewReader | test.go:291:2:291:8 | tarRead | +| test.go:256:13:256:40 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:256:27:256:39 | gzipklauspost | test.go:256:13:256:40 | call to NewReader | +| test.go:260:3:260:47 | ... := ...[0] | test.go:264:3:264:11 | gzippgzip | +| test.go:260:3:260:47 | ... := ...[0] | test.go:265:27:265:35 | gzippgzip | +| test.go:260:43:260:46 | file | test.go:260:3:260:47 | ... := ...[0] | +| test.go:265:13:265:36 | call to NewReader | test.go:291:2:291:8 | tarRead | +| test.go:265:13:265:36 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:265:27:265:35 | gzippgzip | test.go:265:13:265:36 | call to NewReader | +| test.go:268:3:268:42 | ... := ...[0] | test.go:270:3:270:6 | zstd | +| test.go:268:3:268:42 | ... := ...[0] | test.go:272:3:272:6 | zstd | +| test.go:268:3:268:42 | ... := ...[0] | test.go:274:3:274:6 | zstd | +| test.go:268:3:268:42 | ... := ...[0] | test.go:275:27:275:30 | zstd | +| test.go:268:38:268:41 | file | test.go:268:3:268:42 | ... := ...[0] | +| test.go:275:13:275:31 | call to NewReader | test.go:291:2:291:8 | tarRead | +| test.go:275:13:275:31 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:275:27:275:30 | zstd | test.go:275:13:275:31 | call to NewReader | +| test.go:279:11:279:37 | call to NewReader | test.go:281:3:281:6 | zstd | +| test.go:279:11:279:37 | call to NewReader | test.go:282:27:282:30 | zstd | +| test.go:279:33:279:36 | file | test.go:279:11:279:37 | call to NewReader | +| test.go:282:13:282:31 | call to NewReader | test.go:291:2:291:8 | tarRead | +| test.go:282:13:282:31 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:282:27:282:30 | zstd | test.go:282:13:282:31 | call to NewReader | +| test.go:285:3:285:33 | ... := ...[0] | test.go:287:3:287:8 | xzRead | +| test.go:285:3:285:33 | ... := ...[0] | test.go:288:27:288:32 | xzRead | +| test.go:285:29:285:32 | file | test.go:285:3:285:33 | ... := ...[0] | +| test.go:288:13:288:33 | call to NewReader | test.go:291:2:291:8 | tarRead | +| test.go:288:13:288:33 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:288:27:288:32 | xzRead | test.go:288:13:288:33 | call to NewReader | nodes -| test.go:56:18:56:29 | selection of Body | semmle.label | selection of Body | -| test.go:57:15:57:26 | selection of Body | semmle.label | selection of Body | -| test.go:58:16:58:27 | selection of Body | semmle.label | selection of Body | -| test.go:59:16:59:46 | call to FormValue | semmle.label | call to FormValue | -| test.go:60:20:60:48 | call to PostFormValue | semmle.label | call to PostFormValue | -| test.go:62:17:62:28 | selection of Body | semmle.label | selection of Body | -| test.go:76:24:76:31 | definition of filename | semmle.label | definition of filename | -| test.go:77:2:77:33 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:77:25:77:32 | filename | semmle.label | filename | -| test.go:80:3:80:19 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:80:12:80:12 | f | semmle.label | f | -| test.go:82:37:82:38 | rc | semmle.label | rc | -| test.go:96:21:96:23 | definition of src | semmle.label | definition of src | -| test.go:97:2:97:32 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:97:29:97:31 | src | semmle.label | src | -| test.go:101:11:101:44 | call to LimitReader | semmle.label | call to LimitReader | -| test.go:101:26:101:30 | gzipR | semmle.label | gzipR | -| test.go:102:23:102:28 | newSrc | semmle.label | newSrc | -| test.go:105:20:105:27 | definition of filename | semmle.label | definition of filename | -| test.go:107:2:107:33 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:107:25:107:32 | filename | semmle.label | filename | -| test.go:109:3:109:19 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:109:12:109:12 | f | semmle.label | f | -| test.go:111:37:111:38 | rc | semmle.label | rc | -| test.go:135:19:135:22 | definition of file | semmle.label | definition of file | -| test.go:136:2:136:29 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:136:25:136:28 | file | semmle.label | file | -| test.go:137:2:137:69 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:137:32:137:53 | call to NewReader | semmle.label | call to NewReader | -| test.go:137:48:137:52 | file1 | semmle.label | file1 | -| test.go:140:3:140:36 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:140:26:140:29 | file | semmle.label | file | -| test.go:141:36:141:51 | fileReaderCloser | semmle.label | fileReaderCloser | -| test.go:146:20:146:23 | definition of file | semmle.label | definition of file | -| test.go:147:2:147:29 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:147:25:147:28 | file | semmle.label | file | -| test.go:148:2:148:87 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:148:50:148:71 | call to NewReader | semmle.label | call to NewReader | -| test.go:148:66:148:70 | file2 | semmle.label | file2 | -| test.go:153:36:153:51 | fileReaderCloser | semmle.label | fileReaderCloser | -| test.go:165:22:165:25 | definition of file | semmle.label | definition of file | -| test.go:168:3:168:73 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:168:41:168:44 | file | semmle.label | file | -| test.go:170:3:170:12 | bzip2dsnet | semmle.label | bzip2dsnet | -| test.go:171:13:171:37 | call to NewReader | semmle.label | call to NewReader | -| test.go:171:27:171:36 | bzip2dsnet | semmle.label | bzip2dsnet | -| test.go:174:12:174:32 | call to NewReader | semmle.label | call to NewReader | -| test.go:174:28:174:31 | file | semmle.label | file | -| test.go:176:3:176:7 | Bzip2 | semmle.label | Bzip2 | -| test.go:177:13:177:32 | call to NewReader | semmle.label | call to NewReader | -| test.go:177:27:177:31 | Bzip2 | semmle.label | Bzip2 | -| test.go:181:12:181:32 | call to NewReader | semmle.label | call to NewReader | -| test.go:181:28:181:31 | file | semmle.label | file | -| test.go:183:3:183:7 | Flate | semmle.label | Flate | -| test.go:184:13:184:32 | call to NewReader | semmle.label | call to NewReader | -| test.go:184:27:184:31 | Flate | semmle.label | Flate | -| test.go:188:20:188:49 | call to NewReader | semmle.label | call to NewReader | -| test.go:188:45:188:48 | file | semmle.label | file | -| test.go:190:3:190:15 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:191:13:191:40 | call to NewReader | semmle.label | call to NewReader | -| test.go:191:27:191:39 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:194:3:194:73 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:194:41:194:44 | file | semmle.label | file | -| test.go:196:3:196:12 | flatedsnet | semmle.label | flatedsnet | -| test.go:197:13:197:37 | call to NewReader | semmle.label | call to NewReader | -| test.go:197:27:197:36 | flatedsnet | semmle.label | flatedsnet | -| test.go:201:3:201:51 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:201:47:201:50 | file | semmle.label | file | -| test.go:203:3:203:15 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:204:13:204:40 | call to NewReader | semmle.label | call to NewReader | -| test.go:204:27:204:39 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:208:3:208:33 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:208:29:208:32 | file | semmle.label | file | -| test.go:210:3:210:6 | Zlib | semmle.label | Zlib | -| test.go:211:13:211:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:211:27:211:30 | Zlib | semmle.label | Zlib | -| test.go:214:13:214:34 | call to NewReader | semmle.label | call to NewReader | -| test.go:214:30:214:33 | file | semmle.label | file | -| test.go:216:3:216:8 | Snappy | semmle.label | Snappy | +| test.go:57:18:57:29 | selection of Body | semmle.label | selection of Body | +| test.go:58:15:58:26 | selection of Body | semmle.label | selection of Body | +| test.go:59:16:59:27 | selection of Body | semmle.label | selection of Body | +| test.go:60:16:60:46 | call to FormValue | semmle.label | call to FormValue | +| test.go:61:20:61:48 | call to PostFormValue | semmle.label | call to PostFormValue | +| test.go:63:17:63:28 | selection of Body | semmle.label | selection of Body | +| test.go:77:24:77:31 | definition of filename | semmle.label | definition of filename | +| test.go:78:2:78:33 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:78:25:78:32 | filename | semmle.label | filename | +| test.go:81:3:81:19 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:81:12:81:12 | f | semmle.label | f | +| test.go:83:37:83:38 | rc | semmle.label | rc | +| test.go:97:21:97:23 | definition of src | semmle.label | definition of src | +| test.go:98:2:98:32 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:98:29:98:31 | src | semmle.label | src | +| test.go:102:11:102:44 | call to LimitReader | semmle.label | call to LimitReader | +| test.go:102:26:102:30 | gzipR | semmle.label | gzipR | +| test.go:103:23:103:28 | newSrc | semmle.label | newSrc | +| test.go:106:20:106:27 | definition of filename | semmle.label | definition of filename | +| test.go:108:2:108:33 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:108:25:108:32 | filename | semmle.label | filename | +| test.go:110:3:110:19 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:110:12:110:12 | f | semmle.label | f | +| test.go:112:37:112:38 | rc | semmle.label | rc | +| test.go:136:19:136:22 | definition of file | semmle.label | definition of file | +| test.go:137:2:137:29 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:137:25:137:28 | file | semmle.label | file | +| test.go:138:2:138:69 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:138:32:138:53 | call to NewReader | semmle.label | call to NewReader | +| test.go:138:48:138:52 | file1 | semmle.label | file1 | +| test.go:141:3:141:36 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:141:26:141:29 | file | semmle.label | file | +| test.go:142:36:142:51 | fileReaderCloser | semmle.label | fileReaderCloser | +| test.go:147:20:147:23 | definition of file | semmle.label | definition of file | +| test.go:148:2:148:29 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:148:25:148:28 | file | semmle.label | file | +| test.go:149:2:149:87 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:149:50:149:71 | call to NewReader | semmle.label | call to NewReader | +| test.go:149:66:149:70 | file2 | semmle.label | file2 | +| test.go:154:36:154:51 | fileReaderCloser | semmle.label | fileReaderCloser | +| test.go:166:22:166:25 | definition of file | semmle.label | definition of file | +| test.go:169:3:169:73 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:169:41:169:44 | file | semmle.label | file | +| test.go:171:3:171:12 | bzip2dsnet | semmle.label | bzip2dsnet | +| test.go:172:13:172:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:172:27:172:36 | bzip2dsnet | semmle.label | bzip2dsnet | +| test.go:175:12:175:32 | call to NewReader | semmle.label | call to NewReader | +| test.go:175:28:175:31 | file | semmle.label | file | +| test.go:177:3:177:7 | Bzip2 | semmle.label | Bzip2 | +| test.go:178:13:178:32 | call to NewReader | semmle.label | call to NewReader | +| test.go:178:27:178:31 | Bzip2 | semmle.label | Bzip2 | +| test.go:182:12:182:32 | call to NewReader | semmle.label | call to NewReader | +| test.go:182:28:182:31 | file | semmle.label | file | +| test.go:184:3:184:7 | Flate | semmle.label | Flate | +| test.go:185:13:185:32 | call to NewReader | semmle.label | call to NewReader | +| test.go:185:27:185:31 | Flate | semmle.label | Flate | +| test.go:189:20:189:49 | call to NewReader | semmle.label | call to NewReader | +| test.go:189:45:189:48 | file | semmle.label | file | +| test.go:191:3:191:15 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:192:13:192:40 | call to NewReader | semmle.label | call to NewReader | +| test.go:192:27:192:39 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:195:3:195:73 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:195:41:195:44 | file | semmle.label | file | +| test.go:197:3:197:12 | flatedsnet | semmle.label | flatedsnet | +| test.go:198:13:198:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:198:27:198:36 | flatedsnet | semmle.label | flatedsnet | +| test.go:202:3:202:51 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:202:47:202:50 | file | semmle.label | file | +| test.go:204:3:204:15 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:205:13:205:40 | call to NewReader | semmle.label | call to NewReader | +| test.go:205:27:205:39 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:209:3:209:33 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:209:29:209:32 | file | semmle.label | file | +| test.go:211:3:211:6 | Zlib | semmle.label | Zlib | +| test.go:212:13:212:31 | call to NewReader | semmle.label | call to NewReader | +| test.go:212:27:212:30 | Zlib | semmle.label | Zlib | +| test.go:215:13:215:34 | call to NewReader | semmle.label | call to NewReader | +| test.go:215:30:215:33 | file | semmle.label | file | | test.go:217:3:217:8 | Snappy | semmle.label | Snappy | -| test.go:218:13:218:33 | call to NewReader | semmle.label | call to NewReader | -| test.go:218:27:218:32 | Snappy | semmle.label | Snappy | -| test.go:221:22:221:52 | call to NewReader | semmle.label | call to NewReader | -| test.go:221:48:221:51 | file | semmle.label | file | -| test.go:227:3:227:10 | s2Reader | semmle.label | s2Reader | -| test.go:229:3:229:10 | s2Reader | semmle.label | s2Reader | +| test.go:218:3:218:8 | Snappy | semmle.label | Snappy | +| test.go:219:13:219:33 | call to NewReader | semmle.label | call to NewReader | +| test.go:219:27:219:32 | Snappy | semmle.label | Snappy | +| test.go:222:22:222:52 | call to NewReader | semmle.label | call to NewReader | +| test.go:222:48:222:51 | file | semmle.label | file | +| test.go:228:3:228:10 | s2Reader | semmle.label | s2Reader | | test.go:230:3:230:10 | s2Reader | semmle.label | s2Reader | -| test.go:231:13:231:35 | call to NewReader | semmle.label | call to NewReader | -| test.go:231:27:231:34 | s2Reader | semmle.label | s2Reader | -| test.go:234:9:234:26 | call to NewReader | semmle.label | call to NewReader | -| test.go:234:22:234:25 | file | semmle.label | file | -| test.go:236:3:236:4 | S2 | semmle.label | S2 | -| test.go:238:3:238:4 | S2 | semmle.label | S2 | -| test.go:241:13:241:29 | call to NewReader | semmle.label | call to NewReader | -| test.go:241:27:241:28 | S2 | semmle.label | S2 | -| test.go:244:3:244:37 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:244:33:244:36 | file | semmle.label | file | -| test.go:246:3:246:10 | gzipRead | semmle.label | gzipRead | -| test.go:247:13:247:35 | call to NewReader | semmle.label | call to NewReader | -| test.go:247:27:247:34 | gzipRead | semmle.label | gzipRead | -| test.go:250:3:250:51 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:250:47:250:50 | file | semmle.label | file | -| test.go:252:3:252:15 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:254:3:254:15 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:255:13:255:40 | call to NewReader | semmle.label | call to NewReader | -| test.go:255:27:255:39 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:259:3:259:47 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:259:43:259:46 | file | semmle.label | file | -| test.go:263:3:263:11 | gzippgzip | semmle.label | gzippgzip | -| test.go:264:13:264:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:264:27:264:35 | gzippgzip | semmle.label | gzippgzip | -| test.go:267:3:267:42 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:267:38:267:41 | file | semmle.label | file | -| test.go:269:3:269:6 | zstd | semmle.label | zstd | -| test.go:271:3:271:6 | zstd | semmle.label | zstd | -| test.go:273:3:273:6 | zstd | semmle.label | zstd | -| test.go:274:13:274:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:274:27:274:30 | zstd | semmle.label | zstd | -| test.go:278:11:278:37 | call to NewReader | semmle.label | call to NewReader | -| test.go:278:33:278:36 | file | semmle.label | file | -| test.go:280:3:280:6 | zstd | semmle.label | zstd | -| test.go:281:13:281:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:281:27:281:30 | zstd | semmle.label | zstd | -| test.go:284:3:284:33 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:284:29:284:32 | file | semmle.label | file | -| test.go:286:3:286:8 | xzRead | semmle.label | xzRead | -| test.go:287:13:287:33 | call to NewReader | semmle.label | call to NewReader | -| test.go:287:27:287:32 | xzRead | semmle.label | xzRead | -| test.go:290:2:290:8 | tarRead | semmle.label | tarRead | -| test.go:290:2:290:8 | tarRead | semmle.label | tarRead | -| test.go:290:2:290:8 | tarRead | semmle.label | tarRead | -| test.go:290:2:290:8 | tarRead | semmle.label | tarRead | -| test.go:290:2:290:8 | tarRead | semmle.label | tarRead | -| test.go:290:2:290:8 | tarRead | semmle.label | tarRead | -| test.go:290:2:290:8 | tarRead | semmle.label | tarRead | -| test.go:290:2:290:8 | tarRead | semmle.label | tarRead | -| test.go:300:25:300:31 | tarRead | semmle.label | tarRead | -| test.go:300:25:300:31 | tarRead | semmle.label | tarRead | -| test.go:300:25:300:31 | tarRead | semmle.label | tarRead | -| test.go:300:25:300:31 | tarRead | semmle.label | tarRead | -| test.go:300:25:300:31 | tarRead | semmle.label | tarRead | -| test.go:300:25:300:31 | tarRead | semmle.label | tarRead | -| test.go:300:25:300:31 | tarRead | semmle.label | tarRead | -| test.go:300:25:300:31 | tarRead | semmle.label | tarRead | +| test.go:231:3:231:10 | s2Reader | semmle.label | s2Reader | +| test.go:232:13:232:35 | call to NewReader | semmle.label | call to NewReader | +| test.go:232:27:232:34 | s2Reader | semmle.label | s2Reader | +| test.go:235:9:235:26 | call to NewReader | semmle.label | call to NewReader | +| test.go:235:22:235:25 | file | semmle.label | file | +| test.go:237:3:237:4 | S2 | semmle.label | S2 | +| test.go:239:3:239:4 | S2 | semmle.label | S2 | +| test.go:242:13:242:29 | call to NewReader | semmle.label | call to NewReader | +| test.go:242:27:242:28 | S2 | semmle.label | S2 | +| test.go:245:3:245:37 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:245:33:245:36 | file | semmle.label | file | +| test.go:247:3:247:10 | gzipRead | semmle.label | gzipRead | +| test.go:248:13:248:35 | call to NewReader | semmle.label | call to NewReader | +| test.go:248:27:248:34 | gzipRead | semmle.label | gzipRead | +| test.go:251:3:251:51 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:251:47:251:50 | file | semmle.label | file | +| test.go:253:3:253:15 | gzipklauspost | semmle.label | gzipklauspost | +| test.go:255:3:255:15 | gzipklauspost | semmle.label | gzipklauspost | +| test.go:256:13:256:40 | call to NewReader | semmle.label | call to NewReader | +| test.go:256:27:256:39 | gzipklauspost | semmle.label | gzipklauspost | +| test.go:260:3:260:47 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:260:43:260:46 | file | semmle.label | file | +| test.go:264:3:264:11 | gzippgzip | semmle.label | gzippgzip | +| test.go:265:13:265:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:265:27:265:35 | gzippgzip | semmle.label | gzippgzip | +| test.go:268:3:268:42 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:268:38:268:41 | file | semmle.label | file | +| test.go:270:3:270:6 | zstd | semmle.label | zstd | +| test.go:272:3:272:6 | zstd | semmle.label | zstd | +| test.go:274:3:274:6 | zstd | semmle.label | zstd | +| test.go:275:13:275:31 | call to NewReader | semmle.label | call to NewReader | +| test.go:275:27:275:30 | zstd | semmle.label | zstd | +| test.go:279:11:279:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:279:33:279:36 | file | semmle.label | file | +| test.go:281:3:281:6 | zstd | semmle.label | zstd | +| test.go:282:13:282:31 | call to NewReader | semmle.label | call to NewReader | +| test.go:282:27:282:30 | zstd | semmle.label | zstd | +| test.go:285:3:285:33 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:285:29:285:32 | file | semmle.label | file | +| test.go:287:3:287:8 | xzRead | semmle.label | xzRead | +| test.go:288:13:288:33 | call to NewReader | semmle.label | call to NewReader | +| test.go:288:27:288:32 | xzRead | semmle.label | xzRead | +| test.go:291:2:291:8 | tarRead | semmle.label | tarRead | +| test.go:291:2:291:8 | tarRead | semmle.label | tarRead | +| test.go:291:2:291:8 | tarRead | semmle.label | tarRead | +| test.go:291:2:291:8 | tarRead | semmle.label | tarRead | +| test.go:291:2:291:8 | tarRead | semmle.label | tarRead | +| test.go:291:2:291:8 | tarRead | semmle.label | tarRead | +| test.go:291:2:291:8 | tarRead | semmle.label | tarRead | +| test.go:291:2:291:8 | tarRead | semmle.label | tarRead | +| test.go:301:25:301:31 | tarRead | semmle.label | tarRead | +| test.go:301:25:301:31 | tarRead | semmle.label | tarRead | +| test.go:301:25:301:31 | tarRead | semmle.label | tarRead | +| test.go:301:25:301:31 | tarRead | semmle.label | tarRead | +| test.go:301:25:301:31 | tarRead | semmle.label | tarRead | +| test.go:301:25:301:31 | tarRead | semmle.label | tarRead | +| test.go:301:25:301:31 | tarRead | semmle.label | tarRead | +| test.go:301:25:301:31 | tarRead | semmle.label | tarRead | subpaths #select -| test.go:82:37:82:38 | rc | test.go:60:20:60:48 | call to PostFormValue | test.go:82:37:82:38 | rc | This decompression is $@. | test.go:60:20:60:48 | call to PostFormValue | decompressing compressed data without managing output size | -| test.go:102:23:102:28 | newSrc | test.go:62:17:62:28 | selection of Body | test.go:102:23:102:28 | newSrc | This decompression is $@. | test.go:62:17:62:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:111:37:111:38 | rc | test.go:59:16:59:46 | call to FormValue | test.go:111:37:111:38 | rc | This decompression is $@. | test.go:59:16:59:46 | call to FormValue | decompressing compressed data without managing output size | -| test.go:141:36:141:51 | fileReaderCloser | test.go:57:15:57:26 | selection of Body | test.go:141:36:141:51 | fileReaderCloser | This decompression is $@. | test.go:57:15:57:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:153:36:153:51 | fileReaderCloser | test.go:58:16:58:27 | selection of Body | test.go:153:36:153:51 | fileReaderCloser | This decompression is $@. | test.go:58:16:58:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:170:3:170:12 | bzip2dsnet | test.go:56:18:56:29 | selection of Body | test.go:170:3:170:12 | bzip2dsnet | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:176:3:176:7 | Bzip2 | test.go:56:18:56:29 | selection of Body | test.go:176:3:176:7 | Bzip2 | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:183:3:183:7 | Flate | test.go:56:18:56:29 | selection of Body | test.go:183:3:183:7 | Flate | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:190:3:190:15 | zlibklauspost | test.go:56:18:56:29 | selection of Body | test.go:190:3:190:15 | zlibklauspost | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:196:3:196:12 | flatedsnet | test.go:56:18:56:29 | selection of Body | test.go:196:3:196:12 | flatedsnet | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:203:3:203:15 | zlibklauspost | test.go:56:18:56:29 | selection of Body | test.go:203:3:203:15 | zlibklauspost | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:210:3:210:6 | Zlib | test.go:56:18:56:29 | selection of Body | test.go:210:3:210:6 | Zlib | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:216:3:216:8 | Snappy | test.go:56:18:56:29 | selection of Body | test.go:216:3:216:8 | Snappy | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:217:3:217:8 | Snappy | test.go:56:18:56:29 | selection of Body | test.go:217:3:217:8 | Snappy | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:227:3:227:10 | s2Reader | test.go:56:18:56:29 | selection of Body | test.go:227:3:227:10 | s2Reader | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:229:3:229:10 | s2Reader | test.go:56:18:56:29 | selection of Body | test.go:229:3:229:10 | s2Reader | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:230:3:230:10 | s2Reader | test.go:56:18:56:29 | selection of Body | test.go:230:3:230:10 | s2Reader | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:236:3:236:4 | S2 | test.go:56:18:56:29 | selection of Body | test.go:236:3:236:4 | S2 | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:238:3:238:4 | S2 | test.go:56:18:56:29 | selection of Body | test.go:238:3:238:4 | S2 | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:246:3:246:10 | gzipRead | test.go:56:18:56:29 | selection of Body | test.go:246:3:246:10 | gzipRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:252:3:252:15 | gzipklauspost | test.go:56:18:56:29 | selection of Body | test.go:252:3:252:15 | gzipklauspost | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:254:3:254:15 | gzipklauspost | test.go:56:18:56:29 | selection of Body | test.go:254:3:254:15 | gzipklauspost | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:263:3:263:11 | gzippgzip | test.go:56:18:56:29 | selection of Body | test.go:263:3:263:11 | gzippgzip | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:269:3:269:6 | zstd | test.go:56:18:56:29 | selection of Body | test.go:269:3:269:6 | zstd | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:271:3:271:6 | zstd | test.go:56:18:56:29 | selection of Body | test.go:271:3:271:6 | zstd | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:273:3:273:6 | zstd | test.go:56:18:56:29 | selection of Body | test.go:273:3:273:6 | zstd | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:280:3:280:6 | zstd | test.go:56:18:56:29 | selection of Body | test.go:280:3:280:6 | zstd | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:286:3:286:8 | xzRead | test.go:56:18:56:29 | selection of Body | test.go:286:3:286:8 | xzRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:290:2:290:8 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:290:2:290:8 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:290:2:290:8 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:290:2:290:8 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:290:2:290:8 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:290:2:290:8 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:290:2:290:8 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:290:2:290:8 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:290:2:290:8 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:300:25:300:31 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:300:25:300:31 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:300:25:300:31 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:300:25:300:31 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:300:25:300:31 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:300:25:300:31 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:300:25:300:31 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:300:25:300:31 | tarRead | test.go:56:18:56:29 | selection of Body | test.go:300:25:300:31 | tarRead | This decompression is $@. | test.go:56:18:56:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:83:37:83:38 | rc | test.go:61:20:61:48 | call to PostFormValue | test.go:83:37:83:38 | rc | This decompression is $@. | test.go:61:20:61:48 | call to PostFormValue | decompressing compressed data without managing output size | +| test.go:103:23:103:28 | newSrc | test.go:63:17:63:28 | selection of Body | test.go:103:23:103:28 | newSrc | This decompression is $@. | test.go:63:17:63:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:112:37:112:38 | rc | test.go:60:16:60:46 | call to FormValue | test.go:112:37:112:38 | rc | This decompression is $@. | test.go:60:16:60:46 | call to FormValue | decompressing compressed data without managing output size | +| test.go:142:36:142:51 | fileReaderCloser | test.go:58:15:58:26 | selection of Body | test.go:142:36:142:51 | fileReaderCloser | This decompression is $@. | test.go:58:15:58:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:154:36:154:51 | fileReaderCloser | test.go:59:16:59:27 | selection of Body | test.go:154:36:154:51 | fileReaderCloser | This decompression is $@. | test.go:59:16:59:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:171:3:171:12 | bzip2dsnet | test.go:57:18:57:29 | selection of Body | test.go:171:3:171:12 | bzip2dsnet | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:177:3:177:7 | Bzip2 | test.go:57:18:57:29 | selection of Body | test.go:177:3:177:7 | Bzip2 | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:184:3:184:7 | Flate | test.go:57:18:57:29 | selection of Body | test.go:184:3:184:7 | Flate | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:191:3:191:15 | zlibklauspost | test.go:57:18:57:29 | selection of Body | test.go:191:3:191:15 | zlibklauspost | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:197:3:197:12 | flatedsnet | test.go:57:18:57:29 | selection of Body | test.go:197:3:197:12 | flatedsnet | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:204:3:204:15 | zlibklauspost | test.go:57:18:57:29 | selection of Body | test.go:204:3:204:15 | zlibklauspost | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:211:3:211:6 | Zlib | test.go:57:18:57:29 | selection of Body | test.go:211:3:211:6 | Zlib | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:217:3:217:8 | Snappy | test.go:57:18:57:29 | selection of Body | test.go:217:3:217:8 | Snappy | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:218:3:218:8 | Snappy | test.go:57:18:57:29 | selection of Body | test.go:218:3:218:8 | Snappy | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:228:3:228:10 | s2Reader | test.go:57:18:57:29 | selection of Body | test.go:228:3:228:10 | s2Reader | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:230:3:230:10 | s2Reader | test.go:57:18:57:29 | selection of Body | test.go:230:3:230:10 | s2Reader | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:231:3:231:10 | s2Reader | test.go:57:18:57:29 | selection of Body | test.go:231:3:231:10 | s2Reader | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:237:3:237:4 | S2 | test.go:57:18:57:29 | selection of Body | test.go:237:3:237:4 | S2 | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:239:3:239:4 | S2 | test.go:57:18:57:29 | selection of Body | test.go:239:3:239:4 | S2 | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:247:3:247:10 | gzipRead | test.go:57:18:57:29 | selection of Body | test.go:247:3:247:10 | gzipRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:253:3:253:15 | gzipklauspost | test.go:57:18:57:29 | selection of Body | test.go:253:3:253:15 | gzipklauspost | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:255:3:255:15 | gzipklauspost | test.go:57:18:57:29 | selection of Body | test.go:255:3:255:15 | gzipklauspost | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:264:3:264:11 | gzippgzip | test.go:57:18:57:29 | selection of Body | test.go:264:3:264:11 | gzippgzip | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:270:3:270:6 | zstd | test.go:57:18:57:29 | selection of Body | test.go:270:3:270:6 | zstd | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:272:3:272:6 | zstd | test.go:57:18:57:29 | selection of Body | test.go:272:3:272:6 | zstd | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:274:3:274:6 | zstd | test.go:57:18:57:29 | selection of Body | test.go:274:3:274:6 | zstd | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:281:3:281:6 | zstd | test.go:57:18:57:29 | selection of Body | test.go:281:3:281:6 | zstd | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:287:3:287:8 | xzRead | test.go:57:18:57:29 | selection of Body | test.go:287:3:287:8 | xzRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:291:2:291:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:291:2:291:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:291:2:291:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:291:2:291:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:291:2:291:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:291:2:291:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:291:2:291:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:291:2:291:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:291:2:291:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:291:2:291:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:291:2:291:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:291:2:291:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:291:2:291:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:291:2:291:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:291:2:291:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:291:2:291:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:301:25:301:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:301:25:301:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:301:25:301:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:301:25:301:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:301:25:301:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:301:25:301:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:301:25:301:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:301:25:301:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:301:25:301:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:301:25:301:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:301:25:301:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:301:25:301:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:301:25:301:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:301:25:301:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:301:25:301:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:301:25:301:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go index eb7239f7313..16bae41b0f0 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go @@ -7,11 +7,11 @@ package main //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/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/ulikunitz/xz Reader NewReader //go:generate depstubber -vendor github.com/klauspost/compress/zip FileHeader,File,Reader,ReadCloser NewReader,OpenReader import ( @@ -23,6 +23,12 @@ import ( "compress/gzip" "compress/zlib" "fmt" + "io" + "io/ioutil" + "net/http" + "os" + "testing/fstest" + zstdDataDog "github.com/DataDog/zstd" bzip2Dsnet "github.com/dsnet/compress/bzip2" flateDsnet "github.com/dsnet/compress/flate" @@ -36,11 +42,6 @@ import ( zstdKlauspost "github.com/klauspost/compress/zstd" pzipKlauspost "github.com/klauspost/pgzip" "github.com/ulikunitz/xz" - "io" - "io/ioutil" - "net/http" - "os" - "testing/fstest" ) func main() { From d63b33bb08d2fb0f81a3ba3ad936ae8d5872ff59 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Wed, 11 Oct 2023 13:15:06 +0200 Subject: [PATCH 027/430] fix a tests --- .../DecompressionBombs.expected | 326 +++++++++--------- .../CWE-522-DecompressionBombs/test | Bin 0 -> 7225718 bytes .../CWE-522-DecompressionBombs/test.go | 12 +- .../klauspost/compress/snappy/stub.go | 69 +++- .../github.com/klauspost/compress/zip/stub.go | 11 +- 5 files changed, 243 insertions(+), 175 deletions(-) create mode 100755 go/ql/test/experimental/CWE-522-DecompressionBombs/test diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected index 6eed32b5236..bed0de2138e 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -16,10 +16,13 @@ edges | test.go:102:11:102:44 | call to LimitReader | test.go:103:23:103:28 | newSrc | | test.go:102:26:102:30 | gzipR | test.go:102:11:102:44 | call to LimitReader | | test.go:106:20:106:27 | definition of filename | test.go:108:25:108:32 | filename | +| test.go:106:20:106:27 | definition of filename | test.go:121:43:121:50 | filename | | test.go:108:2:108:33 | ... := ...[0] | test.go:110:12:110:12 | f | | test.go:108:25:108:32 | filename | test.go:108:2:108:33 | ... := ...[0] | | test.go:110:3:110:19 | ... := ...[0] | test.go:112:37:112:38 | rc | | test.go:110:12:110:12 | f | test.go:110:3:110:19 | ... := ...[0] | +| test.go:121:2:121:51 | ... := ...[0] | test.go:125:37:125:38 | rc | +| test.go:121:43:121:50 | filename | test.go:121:2:121:51 | ... := ...[0] | | test.go:136:19:136:22 | definition of file | test.go:137:25:137:28 | file | | test.go:137:2:137:29 | ... := ...[0] | test.go:138:48:138:52 | file1 | | test.go:137:25:137:28 | file | test.go:137:2:137:29 | ... := ...[0] | @@ -43,116 +46,113 @@ edges | test.go:166:22:166:25 | definition of file | test.go:209:29:209:32 | file | | test.go:166:22:166:25 | definition of file | test.go:215:30:215:33 | file | | test.go:166:22:166:25 | definition of file | test.go:222:48:222:51 | file | -| test.go:166:22:166:25 | definition of file | test.go:235:22:235:25 | file | -| test.go:166:22:166:25 | definition of file | test.go:245:33:245:36 | file | -| test.go:166:22:166:25 | definition of file | test.go:251:47:251:50 | file | -| test.go:166:22:166:25 | definition of file | test.go:260:43:260:46 | file | -| test.go:166:22:166:25 | definition of file | test.go:268:38:268:41 | file | -| test.go:166:22:166:25 | definition of file | test.go:279:33:279:36 | file | -| test.go:166:22:166:25 | definition of file | test.go:285:29:285:32 | file | +| test.go:166:22:166:25 | definition of file | test.go:231:22:231:25 | file | +| test.go:166:22:166:25 | definition of file | test.go:241:33:241:36 | file | +| test.go:166:22:166:25 | definition of file | test.go:247:47:247:50 | file | +| test.go:166:22:166:25 | definition of file | test.go:256:43:256:46 | file | +| test.go:166:22:166:25 | definition of file | test.go:264:38:264:41 | file | +| test.go:166:22:166:25 | definition of file | test.go:275:33:275:36 | file | +| test.go:166:22:166:25 | definition of file | test.go:281:29:281:32 | file | | test.go:169:3:169:73 | ... := ...[0] | test.go:171:3:171:12 | bzip2dsnet | | test.go:169:3:169:73 | ... := ...[0] | test.go:172:27:172:36 | bzip2dsnet | | test.go:169:41:169:44 | file | test.go:169:3:169:73 | ... := ...[0] | -| test.go:172:13:172:37 | call to NewReader | test.go:291:2:291:8 | tarRead | -| test.go:172:13:172:37 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:172:13:172:37 | call to NewReader | test.go:287:2:287:8 | tarRead | +| test.go:172:13:172:37 | call to NewReader | test.go:297:25:297:31 | tarRead | | test.go:172:27:172:36 | bzip2dsnet | test.go:172:13:172:37 | call to NewReader | | test.go:175:12:175:32 | call to NewReader | test.go:177:3:177:7 | Bzip2 | | test.go:175:12:175:32 | call to NewReader | test.go:178:27:178:31 | Bzip2 | | test.go:175:28:175:31 | file | test.go:175:12:175:32 | call to NewReader | -| test.go:178:13:178:32 | call to NewReader | test.go:291:2:291:8 | tarRead | -| test.go:178:13:178:32 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:178:13:178:32 | call to NewReader | test.go:287:2:287:8 | tarRead | +| test.go:178:13:178:32 | call to NewReader | test.go:297:25:297:31 | tarRead | | test.go:178:27:178:31 | Bzip2 | test.go:178:13:178:32 | call to NewReader | | test.go:182:12:182:32 | call to NewReader | test.go:184:3:184:7 | Flate | | test.go:182:12:182:32 | call to NewReader | test.go:185:27:185:31 | Flate | | test.go:182:28:182:31 | file | test.go:182:12:182:32 | call to NewReader | -| test.go:185:13:185:32 | call to NewReader | test.go:291:2:291:8 | tarRead | -| test.go:185:13:185:32 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:185:13:185:32 | call to NewReader | test.go:287:2:287:8 | tarRead | +| test.go:185:13:185:32 | call to NewReader | test.go:297:25:297:31 | tarRead | | test.go:185:27:185:31 | Flate | test.go:185:13:185:32 | call to NewReader | | test.go:189:20:189:49 | call to NewReader | test.go:191:3:191:15 | zlibklauspost | | test.go:189:20:189:49 | call to NewReader | test.go:192:27:192:39 | zlibklauspost | | test.go:189:45:189:48 | file | test.go:189:20:189:49 | call to NewReader | -| test.go:192:13:192:40 | call to NewReader | test.go:291:2:291:8 | tarRead | -| test.go:192:13:192:40 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:192:13:192:40 | call to NewReader | test.go:287:2:287:8 | tarRead | +| test.go:192:13:192:40 | call to NewReader | test.go:297:25:297:31 | tarRead | | test.go:192:27:192:39 | zlibklauspost | test.go:192:13:192:40 | call to NewReader | | test.go:195:3:195:73 | ... := ...[0] | test.go:197:3:197:12 | flatedsnet | | test.go:195:3:195:73 | ... := ...[0] | test.go:198:27:198:36 | flatedsnet | | test.go:195:41:195:44 | file | test.go:195:3:195:73 | ... := ...[0] | -| test.go:198:13:198:37 | call to NewReader | test.go:291:2:291:8 | tarRead | -| test.go:198:13:198:37 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:198:13:198:37 | call to NewReader | test.go:287:2:287:8 | tarRead | +| test.go:198:13:198:37 | call to NewReader | test.go:297:25:297:31 | tarRead | | test.go:198:27:198:36 | flatedsnet | test.go:198:13:198:37 | call to NewReader | | test.go:202:3:202:51 | ... := ...[0] | test.go:204:3:204:15 | zlibklauspost | | test.go:202:3:202:51 | ... := ...[0] | test.go:205:27:205:39 | zlibklauspost | | test.go:202:47:202:50 | file | test.go:202:3:202:51 | ... := ...[0] | -| test.go:205:13:205:40 | call to NewReader | test.go:291:2:291:8 | tarRead | -| test.go:205:13:205:40 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:205:13:205:40 | call to NewReader | test.go:287:2:287:8 | tarRead | +| test.go:205:13:205:40 | call to NewReader | test.go:297:25:297:31 | tarRead | | test.go:205:27:205:39 | zlibklauspost | test.go:205:13:205:40 | call to NewReader | | test.go:209:3:209:33 | ... := ...[0] | test.go:211:3:211:6 | Zlib | | test.go:209:3:209:33 | ... := ...[0] | test.go:212:27:212:30 | Zlib | | test.go:209:29:209:32 | file | test.go:209:3:209:33 | ... := ...[0] | -| test.go:212:13:212:31 | call to NewReader | test.go:291:2:291:8 | tarRead | -| test.go:212:13:212:31 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:212:13:212:31 | call to NewReader | test.go:287:2:287:8 | tarRead | +| test.go:212:13:212:31 | call to NewReader | test.go:297:25:297:31 | tarRead | | test.go:212:27:212:30 | Zlib | test.go:212:13:212:31 | call to NewReader | | test.go:215:13:215:34 | call to NewReader | test.go:217:3:217:8 | Snappy | | test.go:215:13:215:34 | call to NewReader | test.go:218:3:218:8 | Snappy | | test.go:215:13:215:34 | call to NewReader | test.go:219:27:219:32 | Snappy | | test.go:215:30:215:33 | file | test.go:215:13:215:34 | call to NewReader | -| test.go:219:13:219:33 | call to NewReader | test.go:291:2:291:8 | tarRead | -| test.go:219:13:219:33 | call to NewReader | test.go:301:25:301:31 | tarRead | +| test.go:219:13:219:33 | call to NewReader | test.go:287:2:287:8 | tarRead | +| test.go:219:13:219:33 | call to NewReader | test.go:297:25:297:31 | tarRead | | test.go:219:27:219:32 | Snappy | test.go:219:13:219:33 | call to NewReader | -| test.go:222:22:222:52 | call to NewReader | test.go:228:3:228:10 | s2Reader | -| test.go:222:22:222:52 | call to NewReader | test.go:230:3:230:10 | s2Reader | -| test.go:222:22:222:52 | call to NewReader | test.go:231:3:231:10 | s2Reader | -| test.go:222:22:222:52 | call to NewReader | test.go:232:27:232:34 | s2Reader | +| test.go:222:22:222:52 | call to NewReader | test.go:228:27:228:41 | snappyklauspost | | test.go:222:48:222:51 | file | test.go:222:22:222:52 | call to NewReader | -| test.go:232:13:232:35 | call to NewReader | test.go:291:2:291:8 | tarRead | -| test.go:232:13:232:35 | call to NewReader | test.go:301:25:301:31 | tarRead | -| test.go:232:27:232:34 | s2Reader | test.go:232:13:232:35 | call to NewReader | -| test.go:235:9:235:26 | call to NewReader | test.go:237:3:237:4 | S2 | -| test.go:235:9:235:26 | call to NewReader | test.go:239:3:239:4 | S2 | -| test.go:235:9:235:26 | call to NewReader | test.go:242:27:242:28 | S2 | -| test.go:235:22:235:25 | file | test.go:235:9:235:26 | call to NewReader | -| test.go:242:13:242:29 | call to NewReader | test.go:291:2:291:8 | tarRead | -| test.go:242:13:242:29 | call to NewReader | test.go:301:25:301:31 | tarRead | -| test.go:242:27:242:28 | S2 | test.go:242:13:242:29 | call to NewReader | -| test.go:245:3:245:37 | ... := ...[0] | test.go:247:3:247:10 | gzipRead | -| test.go:245:3:245:37 | ... := ...[0] | test.go:248:27:248:34 | gzipRead | -| test.go:245:33:245:36 | file | test.go:245:3:245:37 | ... := ...[0] | -| test.go:248:13:248:35 | call to NewReader | test.go:291:2:291:8 | tarRead | -| test.go:248:13:248:35 | call to NewReader | test.go:301:25:301:31 | tarRead | -| test.go:248:27:248:34 | gzipRead | test.go:248:13:248:35 | call to NewReader | -| test.go:251:3:251:51 | ... := ...[0] | test.go:253:3:253:15 | gzipklauspost | -| test.go:251:3:251:51 | ... := ...[0] | test.go:255:3:255:15 | gzipklauspost | -| test.go:251:3:251:51 | ... := ...[0] | test.go:256:27:256:39 | gzipklauspost | -| test.go:251:47:251:50 | file | test.go:251:3:251:51 | ... := ...[0] | -| test.go:256:13:256:40 | call to NewReader | test.go:291:2:291:8 | tarRead | -| test.go:256:13:256:40 | call to NewReader | test.go:301:25:301:31 | tarRead | -| test.go:256:27:256:39 | gzipklauspost | test.go:256:13:256:40 | call to NewReader | -| test.go:260:3:260:47 | ... := ...[0] | test.go:264:3:264:11 | gzippgzip | -| test.go:260:3:260:47 | ... := ...[0] | test.go:265:27:265:35 | gzippgzip | -| test.go:260:43:260:46 | file | test.go:260:3:260:47 | ... := ...[0] | -| test.go:265:13:265:36 | call to NewReader | test.go:291:2:291:8 | tarRead | -| test.go:265:13:265:36 | call to NewReader | test.go:301:25:301:31 | tarRead | -| test.go:265:27:265:35 | gzippgzip | test.go:265:13:265:36 | call to NewReader | -| test.go:268:3:268:42 | ... := ...[0] | test.go:270:3:270:6 | zstd | -| test.go:268:3:268:42 | ... := ...[0] | test.go:272:3:272:6 | zstd | -| test.go:268:3:268:42 | ... := ...[0] | test.go:274:3:274:6 | zstd | -| test.go:268:3:268:42 | ... := ...[0] | test.go:275:27:275:30 | zstd | -| test.go:268:38:268:41 | file | test.go:268:3:268:42 | ... := ...[0] | -| test.go:275:13:275:31 | call to NewReader | test.go:291:2:291:8 | tarRead | -| test.go:275:13:275:31 | call to NewReader | test.go:301:25:301:31 | tarRead | -| test.go:275:27:275:30 | zstd | test.go:275:13:275:31 | call to NewReader | -| test.go:279:11:279:37 | call to NewReader | test.go:281:3:281:6 | zstd | -| test.go:279:11:279:37 | call to NewReader | test.go:282:27:282:30 | zstd | -| test.go:279:33:279:36 | file | test.go:279:11:279:37 | call to NewReader | -| test.go:282:13:282:31 | call to NewReader | test.go:291:2:291:8 | tarRead | -| test.go:282:13:282:31 | call to NewReader | test.go:301:25:301:31 | tarRead | -| test.go:282:27:282:30 | zstd | test.go:282:13:282:31 | call to NewReader | -| test.go:285:3:285:33 | ... := ...[0] | test.go:287:3:287:8 | xzRead | -| test.go:285:3:285:33 | ... := ...[0] | test.go:288:27:288:32 | xzRead | -| test.go:285:29:285:32 | file | test.go:285:3:285:33 | ... := ...[0] | -| test.go:288:13:288:33 | call to NewReader | test.go:291:2:291:8 | tarRead | -| test.go:288:13:288:33 | call to NewReader | test.go:301:25:301:31 | tarRead | -| test.go:288:27:288:32 | xzRead | test.go:288:13:288:33 | call to NewReader | +| test.go:228:13:228:42 | call to NewReader | test.go:287:2:287:8 | tarRead | +| test.go:228:13:228:42 | call to NewReader | test.go:297:25:297:31 | tarRead | +| test.go:228:27:228:41 | snappyklauspost | test.go:228:13:228:42 | call to NewReader | +| test.go:231:9:231:26 | call to NewReader | test.go:233:3:233:4 | S2 | +| test.go:231:9:231:26 | call to NewReader | test.go:235:3:235:4 | S2 | +| test.go:231:9:231:26 | call to NewReader | test.go:238:27:238:28 | S2 | +| test.go:231:22:231:25 | file | test.go:231:9:231:26 | call to NewReader | +| test.go:238:13:238:29 | call to NewReader | test.go:287:2:287:8 | tarRead | +| test.go:238:13:238:29 | call to NewReader | test.go:297:25:297:31 | tarRead | +| test.go:238:27:238:28 | S2 | test.go:238:13:238:29 | call to NewReader | +| test.go:241:3:241:37 | ... := ...[0] | test.go:243:3:243:10 | gzipRead | +| test.go:241:3:241:37 | ... := ...[0] | test.go:244:27:244:34 | gzipRead | +| test.go:241:33:241:36 | file | test.go:241:3:241:37 | ... := ...[0] | +| test.go:244:13:244:35 | call to NewReader | test.go:287:2:287:8 | tarRead | +| test.go:244:13:244:35 | call to NewReader | test.go:297:25:297:31 | tarRead | +| test.go:244:27:244:34 | gzipRead | test.go:244:13:244:35 | call to NewReader | +| test.go:247:3:247:51 | ... := ...[0] | test.go:249:3:249:15 | gzipklauspost | +| test.go:247:3:247:51 | ... := ...[0] | test.go:251:3:251:15 | gzipklauspost | +| test.go:247:3:247:51 | ... := ...[0] | test.go:252:27:252:39 | gzipklauspost | +| test.go:247:47:247:50 | file | test.go:247:3:247:51 | ... := ...[0] | +| test.go:252:13:252:40 | call to NewReader | test.go:287:2:287:8 | tarRead | +| test.go:252:13:252:40 | call to NewReader | test.go:297:25:297:31 | tarRead | +| test.go:252:27:252:39 | gzipklauspost | test.go:252:13:252:40 | call to NewReader | +| test.go:256:3:256:47 | ... := ...[0] | test.go:260:3:260:11 | gzippgzip | +| test.go:256:3:256:47 | ... := ...[0] | test.go:261:27:261:35 | gzippgzip | +| test.go:256:43:256:46 | file | test.go:256:3:256:47 | ... := ...[0] | +| test.go:261:13:261:36 | call to NewReader | test.go:287:2:287:8 | tarRead | +| test.go:261:13:261:36 | call to NewReader | test.go:297:25:297:31 | tarRead | +| test.go:261:27:261:35 | gzippgzip | test.go:261:13:261:36 | call to NewReader | +| test.go:264:3:264:42 | ... := ...[0] | test.go:266:3:266:6 | zstd | +| test.go:264:3:264:42 | ... := ...[0] | test.go:268:3:268:6 | zstd | +| test.go:264:3:264:42 | ... := ...[0] | test.go:270:3:270:6 | zstd | +| test.go:264:3:264:42 | ... := ...[0] | test.go:271:27:271:30 | zstd | +| test.go:264:38:264:41 | file | test.go:264:3:264:42 | ... := ...[0] | +| test.go:271:13:271:31 | call to NewReader | test.go:287:2:287:8 | tarRead | +| test.go:271:13:271:31 | call to NewReader | test.go:297:25:297:31 | tarRead | +| test.go:271:27:271:30 | zstd | test.go:271:13:271:31 | call to NewReader | +| test.go:275:11:275:37 | call to NewReader | test.go:277:3:277:6 | zstd | +| test.go:275:11:275:37 | call to NewReader | test.go:278:27:278:30 | zstd | +| test.go:275:33:275:36 | file | test.go:275:11:275:37 | call to NewReader | +| test.go:278:13:278:31 | call to NewReader | test.go:287:2:287:8 | tarRead | +| test.go:278:13:278:31 | call to NewReader | test.go:297:25:297:31 | tarRead | +| test.go:278:27:278:30 | zstd | test.go:278:13:278:31 | call to NewReader | +| test.go:281:3:281:33 | ... := ...[0] | test.go:283:3:283:8 | xzRead | +| test.go:281:3:281:33 | ... := ...[0] | test.go:284:27:284:32 | xzRead | +| test.go:281:29:281:32 | file | test.go:281:3:281:33 | ... := ...[0] | +| test.go:284:13:284:33 | call to NewReader | test.go:287:2:287:8 | tarRead | +| test.go:284:13:284:33 | call to NewReader | test.go:297:25:297:31 | tarRead | +| test.go:284:27:284:32 | xzRead | test.go:284:13:284:33 | call to NewReader | nodes | test.go:57:18:57:29 | selection of Body | semmle.label | selection of Body | | test.go:58:15:58:26 | selection of Body | semmle.label | selection of Body | @@ -178,6 +178,9 @@ nodes | test.go:110:3:110:19 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:110:12:110:12 | f | semmle.label | f | | test.go:112:37:112:38 | rc | semmle.label | rc | +| test.go:121:2:121:51 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:121:43:121:50 | filename | semmle.label | filename | +| test.go:125:37:125:38 | rc | semmle.label | rc | | test.go:136:19:136:22 | definition of file | semmle.label | definition of file | | test.go:137:2:137:29 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:137:25:137:28 | file | semmle.label | file | @@ -238,71 +241,69 @@ nodes | test.go:219:27:219:32 | Snappy | semmle.label | Snappy | | test.go:222:22:222:52 | call to NewReader | semmle.label | call to NewReader | | test.go:222:48:222:51 | file | semmle.label | file | -| test.go:228:3:228:10 | s2Reader | semmle.label | s2Reader | -| test.go:230:3:230:10 | s2Reader | semmle.label | s2Reader | -| test.go:231:3:231:10 | s2Reader | semmle.label | s2Reader | -| test.go:232:13:232:35 | call to NewReader | semmle.label | call to NewReader | -| test.go:232:27:232:34 | s2Reader | semmle.label | s2Reader | -| test.go:235:9:235:26 | call to NewReader | semmle.label | call to NewReader | -| test.go:235:22:235:25 | file | semmle.label | file | -| test.go:237:3:237:4 | S2 | semmle.label | S2 | -| test.go:239:3:239:4 | S2 | semmle.label | S2 | -| test.go:242:13:242:29 | call to NewReader | semmle.label | call to NewReader | -| test.go:242:27:242:28 | S2 | semmle.label | S2 | -| test.go:245:3:245:37 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:245:33:245:36 | file | semmle.label | file | -| test.go:247:3:247:10 | gzipRead | semmle.label | gzipRead | -| test.go:248:13:248:35 | call to NewReader | semmle.label | call to NewReader | -| test.go:248:27:248:34 | gzipRead | semmle.label | gzipRead | -| test.go:251:3:251:51 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:251:47:251:50 | file | semmle.label | file | -| test.go:253:3:253:15 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:255:3:255:15 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:256:13:256:40 | call to NewReader | semmle.label | call to NewReader | -| test.go:256:27:256:39 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:260:3:260:47 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:260:43:260:46 | file | semmle.label | file | -| test.go:264:3:264:11 | gzippgzip | semmle.label | gzippgzip | -| test.go:265:13:265:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:265:27:265:35 | gzippgzip | semmle.label | gzippgzip | -| test.go:268:3:268:42 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:268:38:268:41 | file | semmle.label | file | +| test.go:228:13:228:42 | call to NewReader | semmle.label | call to NewReader | +| test.go:228:27:228:41 | snappyklauspost | semmle.label | snappyklauspost | +| test.go:231:9:231:26 | call to NewReader | semmle.label | call to NewReader | +| test.go:231:22:231:25 | file | semmle.label | file | +| test.go:233:3:233:4 | S2 | semmle.label | S2 | +| test.go:235:3:235:4 | S2 | semmle.label | S2 | +| test.go:238:13:238:29 | call to NewReader | semmle.label | call to NewReader | +| test.go:238:27:238:28 | S2 | semmle.label | S2 | +| test.go:241:3:241:37 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:241:33:241:36 | file | semmle.label | file | +| test.go:243:3:243:10 | gzipRead | semmle.label | gzipRead | +| test.go:244:13:244:35 | call to NewReader | semmle.label | call to NewReader | +| test.go:244:27:244:34 | gzipRead | semmle.label | gzipRead | +| test.go:247:3:247:51 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:247:47:247:50 | file | semmle.label | file | +| test.go:249:3:249:15 | gzipklauspost | semmle.label | gzipklauspost | +| test.go:251:3:251:15 | gzipklauspost | semmle.label | gzipklauspost | +| test.go:252:13:252:40 | call to NewReader | semmle.label | call to NewReader | +| test.go:252:27:252:39 | gzipklauspost | semmle.label | gzipklauspost | +| test.go:256:3:256:47 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:256:43:256:46 | file | semmle.label | file | +| test.go:260:3:260:11 | gzippgzip | semmle.label | gzippgzip | +| test.go:261:13:261:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:261:27:261:35 | gzippgzip | semmle.label | gzippgzip | +| test.go:264:3:264:42 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:264:38:264:41 | file | semmle.label | file | +| test.go:266:3:266:6 | zstd | semmle.label | zstd | +| test.go:268:3:268:6 | zstd | semmle.label | zstd | | test.go:270:3:270:6 | zstd | semmle.label | zstd | -| test.go:272:3:272:6 | zstd | semmle.label | zstd | -| test.go:274:3:274:6 | zstd | semmle.label | zstd | -| test.go:275:13:275:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:275:27:275:30 | zstd | semmle.label | zstd | -| test.go:279:11:279:37 | call to NewReader | semmle.label | call to NewReader | -| test.go:279:33:279:36 | file | semmle.label | file | -| test.go:281:3:281:6 | zstd | semmle.label | zstd | -| test.go:282:13:282:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:282:27:282:30 | zstd | semmle.label | zstd | -| test.go:285:3:285:33 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:285:29:285:32 | file | semmle.label | file | -| test.go:287:3:287:8 | xzRead | semmle.label | xzRead | -| test.go:288:13:288:33 | call to NewReader | semmle.label | call to NewReader | -| test.go:288:27:288:32 | xzRead | semmle.label | xzRead | -| test.go:291:2:291:8 | tarRead | semmle.label | tarRead | -| test.go:291:2:291:8 | tarRead | semmle.label | tarRead | -| test.go:291:2:291:8 | tarRead | semmle.label | tarRead | -| test.go:291:2:291:8 | tarRead | semmle.label | tarRead | -| test.go:291:2:291:8 | tarRead | semmle.label | tarRead | -| test.go:291:2:291:8 | tarRead | semmle.label | tarRead | -| test.go:291:2:291:8 | tarRead | semmle.label | tarRead | -| test.go:291:2:291:8 | tarRead | semmle.label | tarRead | -| test.go:301:25:301:31 | tarRead | semmle.label | tarRead | -| test.go:301:25:301:31 | tarRead | semmle.label | tarRead | -| test.go:301:25:301:31 | tarRead | semmle.label | tarRead | -| test.go:301:25:301:31 | tarRead | semmle.label | tarRead | -| test.go:301:25:301:31 | tarRead | semmle.label | tarRead | -| test.go:301:25:301:31 | tarRead | semmle.label | tarRead | -| test.go:301:25:301:31 | tarRead | semmle.label | tarRead | -| test.go:301:25:301:31 | tarRead | semmle.label | tarRead | +| test.go:271:13:271:31 | call to NewReader | semmle.label | call to NewReader | +| test.go:271:27:271:30 | zstd | semmle.label | zstd | +| test.go:275:11:275:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:275:33:275:36 | file | semmle.label | file | +| test.go:277:3:277:6 | zstd | semmle.label | zstd | +| test.go:278:13:278:31 | call to NewReader | semmle.label | call to NewReader | +| test.go:278:27:278:30 | zstd | semmle.label | zstd | +| test.go:281:3:281:33 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:281:29:281:32 | file | semmle.label | file | +| test.go:283:3:283:8 | xzRead | semmle.label | xzRead | +| test.go:284:13:284:33 | call to NewReader | semmle.label | call to NewReader | +| test.go:284:27:284:32 | xzRead | semmle.label | xzRead | +| test.go:287:2:287:8 | tarRead | semmle.label | tarRead | +| test.go:287:2:287:8 | tarRead | semmle.label | tarRead | +| test.go:287:2:287:8 | tarRead | semmle.label | tarRead | +| test.go:287:2:287:8 | tarRead | semmle.label | tarRead | +| test.go:287:2:287:8 | tarRead | semmle.label | tarRead | +| test.go:287:2:287:8 | tarRead | semmle.label | tarRead | +| test.go:287:2:287:8 | tarRead | semmle.label | tarRead | +| test.go:287:2:287:8 | tarRead | semmle.label | tarRead | +| test.go:297:25:297:31 | tarRead | semmle.label | tarRead | +| test.go:297:25:297:31 | tarRead | semmle.label | tarRead | +| test.go:297:25:297:31 | tarRead | semmle.label | tarRead | +| test.go:297:25:297:31 | tarRead | semmle.label | tarRead | +| test.go:297:25:297:31 | tarRead | semmle.label | tarRead | +| test.go:297:25:297:31 | tarRead | semmle.label | tarRead | +| test.go:297:25:297:31 | tarRead | semmle.label | tarRead | +| test.go:297:25:297:31 | tarRead | semmle.label | tarRead | subpaths #select | test.go:83:37:83:38 | rc | test.go:61:20:61:48 | call to PostFormValue | test.go:83:37:83:38 | rc | This decompression is $@. | test.go:61:20:61:48 | call to PostFormValue | decompressing compressed data without managing output size | | test.go:103:23:103:28 | newSrc | test.go:63:17:63:28 | selection of Body | test.go:103:23:103:28 | newSrc | This decompression is $@. | test.go:63:17:63:28 | selection of Body | decompressing compressed data without managing output size | | test.go:112:37:112:38 | rc | test.go:60:16:60:46 | call to FormValue | test.go:112:37:112:38 | rc | This decompression is $@. | test.go:60:16:60:46 | call to FormValue | decompressing compressed data without managing output size | +| test.go:125:37:125:38 | rc | test.go:60:16:60:46 | call to FormValue | test.go:125:37:125:38 | rc | This decompression is $@. | test.go:60:16:60:46 | call to FormValue | decompressing compressed data without managing output size | | test.go:142:36:142:51 | fileReaderCloser | test.go:58:15:58:26 | selection of Body | test.go:142:36:142:51 | fileReaderCloser | This decompression is $@. | test.go:58:15:58:26 | selection of Body | decompressing compressed data without managing output size | | test.go:154:36:154:51 | fileReaderCloser | test.go:59:16:59:27 | selection of Body | test.go:154:36:154:51 | fileReaderCloser | This decompression is $@. | test.go:59:16:59:27 | selection of Body | decompressing compressed data without managing output size | | test.go:171:3:171:12 | bzip2dsnet | test.go:57:18:57:29 | selection of Body | test.go:171:3:171:12 | bzip2dsnet | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | @@ -314,33 +315,30 @@ subpaths | test.go:211:3:211:6 | Zlib | test.go:57:18:57:29 | selection of Body | test.go:211:3:211:6 | Zlib | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | | test.go:217:3:217:8 | Snappy | test.go:57:18:57:29 | selection of Body | test.go:217:3:217:8 | Snappy | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | | test.go:218:3:218:8 | Snappy | test.go:57:18:57:29 | selection of Body | test.go:218:3:218:8 | Snappy | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:228:3:228:10 | s2Reader | test.go:57:18:57:29 | selection of Body | test.go:228:3:228:10 | s2Reader | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:230:3:230:10 | s2Reader | test.go:57:18:57:29 | selection of Body | test.go:230:3:230:10 | s2Reader | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:231:3:231:10 | s2Reader | test.go:57:18:57:29 | selection of Body | test.go:231:3:231:10 | s2Reader | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:237:3:237:4 | S2 | test.go:57:18:57:29 | selection of Body | test.go:237:3:237:4 | S2 | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:239:3:239:4 | S2 | test.go:57:18:57:29 | selection of Body | test.go:239:3:239:4 | S2 | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:247:3:247:10 | gzipRead | test.go:57:18:57:29 | selection of Body | test.go:247:3:247:10 | gzipRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:253:3:253:15 | gzipklauspost | test.go:57:18:57:29 | selection of Body | test.go:253:3:253:15 | gzipklauspost | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:255:3:255:15 | gzipklauspost | test.go:57:18:57:29 | selection of Body | test.go:255:3:255:15 | gzipklauspost | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:264:3:264:11 | gzippgzip | test.go:57:18:57:29 | selection of Body | test.go:264:3:264:11 | gzippgzip | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:233:3:233:4 | S2 | test.go:57:18:57:29 | selection of Body | test.go:233:3:233:4 | S2 | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:235:3:235:4 | S2 | test.go:57:18:57:29 | selection of Body | test.go:235:3:235:4 | S2 | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:243:3:243:10 | gzipRead | test.go:57:18:57:29 | selection of Body | test.go:243:3:243:10 | gzipRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:249:3:249:15 | gzipklauspost | test.go:57:18:57:29 | selection of Body | test.go:249:3:249:15 | gzipklauspost | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:251:3:251:15 | gzipklauspost | test.go:57:18:57:29 | selection of Body | test.go:251:3:251:15 | gzipklauspost | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:260:3:260:11 | gzippgzip | test.go:57:18:57:29 | selection of Body | test.go:260:3:260:11 | gzippgzip | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:266:3:266:6 | zstd | test.go:57:18:57:29 | selection of Body | test.go:266:3:266:6 | zstd | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:268:3:268:6 | zstd | test.go:57:18:57:29 | selection of Body | test.go:268:3:268:6 | zstd | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | | test.go:270:3:270:6 | zstd | test.go:57:18:57:29 | selection of Body | test.go:270:3:270:6 | zstd | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:272:3:272:6 | zstd | test.go:57:18:57:29 | selection of Body | test.go:272:3:272:6 | zstd | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:274:3:274:6 | zstd | test.go:57:18:57:29 | selection of Body | test.go:274:3:274:6 | zstd | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:281:3:281:6 | zstd | test.go:57:18:57:29 | selection of Body | test.go:281:3:281:6 | zstd | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:287:3:287:8 | xzRead | test.go:57:18:57:29 | selection of Body | test.go:287:3:287:8 | xzRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:291:2:291:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:291:2:291:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:291:2:291:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:291:2:291:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:291:2:291:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:291:2:291:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:291:2:291:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:291:2:291:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:291:2:291:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:291:2:291:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:291:2:291:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:291:2:291:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:291:2:291:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:291:2:291:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:291:2:291:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:291:2:291:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:301:25:301:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:301:25:301:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:301:25:301:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:301:25:301:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:301:25:301:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:301:25:301:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:301:25:301:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:301:25:301:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:301:25:301:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:301:25:301:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:301:25:301:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:301:25:301:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:301:25:301:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:301:25:301:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:301:25:301:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:301:25:301:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:277:3:277:6 | zstd | test.go:57:18:57:29 | selection of Body | test.go:277:3:277:6 | zstd | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:283:3:283:8 | xzRead | test.go:57:18:57:29 | selection of Body | test.go:283:3:283:8 | xzRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:287:2:287:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:287:2:287:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:287:2:287:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:287:2:287:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:287:2:287:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:287:2:287:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:287:2:287:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:287:2:287:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:287:2:287:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:287:2:287:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:287:2:287:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:287:2:287:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:287:2:287:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:287:2:287:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:287:2:287:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:287:2:287:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:297:25:297:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:297:25:297:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:297:25:297:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:297:25:297:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:297:25:297:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:297:25:297:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:297:25:297:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:297:25:297:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:297:25:297:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:297:25:297:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:297:25:297:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:297:25:297:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:297:25:297:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:297:25:297:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:297:25:297:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:297:25:297:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/test b/go/ql/test/experimental/CWE-522-DecompressionBombs/test new file mode 100755 index 0000000000000000000000000000000000000000..c08c64d0d3d4e9adab3e68e834c5430f429676ec GIT binary patch literal 7225718 zcmeFadw5jU)jvMD!3e}N2uKu=!HzYkXo4V#8ktA}XJDd15Tj^IMboG#5i$@2apEM9 z<2Y?p?AsPweOuewyH-UmRue!1YL$y3h!;ewdmJwyEmtMK&u8s(CNm+l{l4Gl`#irt z-aJp{?6db?Yp=cb+H0@9_T}7D9vq*Uk>PUwGF_Ls_~!rFc!~1c2}PN901v;b$aNBa zefaHx_iTyN>3+oX&v_oQQ9DnUN0MDxco6O*L%)Ay_$A;x2kU5;^K>XA4FAJ6T-b(l zo;TTW&XalhNBA5GIX`|opr0+Ld`sS)r$Z;<1cz6rySy_soc;8_eVxb{xa z`S&hOf4a#5m#d{-a=9G1OvEwfv9C1TV_#`F=jpW>;XK_$g1?^lcj_t;C-`ylJI~2~ zue-^n-~2tHJ+d*&e?}V#~+-9cSuy``4TH=5k#H;8ghChHjVLhHj@P z$;gyH8?D1;7jqLnnJw9_8s2sI

    O^%bWJ*a$OE!@;eEC+8mwZw2|`6v-9`1pAO%g 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�_KcK&%lmB_)lAgckio&RH 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⋙Z5$4@7pi()M#$U&+o%%DHaze4 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%0A5@(h6wbT0Ov>!}`r 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

    hGN?Qh!+vrCtS~u(80TSZcfs!2aS| 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 z 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�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
    ScWg|wUcCH2KF>$>tgnr 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≫_((K0v9}85;Ub#gsCBBf)YXA328aGlJHFF@ZuVWG4|=$rO2lr}oH$Uo zzUj$@$I9+wHHZrGBB4n+tD`eiud+P&L~uaB=&v1Ig~bHJ9)a62IOFJP zBzXV5Ug9XEndlD5_Z}mYKEFdR_#LWkd1gg8zocU!kV@y=sLw+9 zIums@F`DD2HKU6)_6q23{{g_iQS<+}Yk$+cG0+RY z$SC={%Y2yO1f=}9c9Xb`cG+EdOo}P;x{BbRqhwo91d1*Qiu7qAOZNAbeHhtQj_wq% zfH@Vg(g!7Evz+TwHoJ2L0%*a?UcMHDoPO^1-t`rc626@~z@x3-sjYI_TISjs=#S%| zPTi}FID0AizRP%eCROs@9K6=AGq3e;5#(CPtRLXDzVJdAeQNZ)ZIxnM^Q(|3j5GUH zi`!Z6Ise+-{2HCOT6KS(x~KQny{xzH@432_hfvRwTmw-8*Rc?mDB-dL7Jb@OAThGn4PHkx?vK2kQRW zp2J#>c*vQgj(GpBVcO&1=}PAmm1<1x(Is}?_*o>Wbjk29W0ECVTV1MU&Yt@frfg`H z83U;~JGSB{un&}eTkd^ep@?f>rFZ&I&`l&(MT52W#9$y@(+{<(2ffF?VY={Z&(Tuj zq0!g(fAZ(v@iii)X>A(Va#-6V?jq5VL11*-Bko2KTZ+N~hcj{M(KpU!8cYOfNt zacex))@I2|#BCAsmf7bnt);66RRGyeJV|(RDd5)wl#y4McyHg%{5kJByf3`m{N6)7 zx%p+5W~%6nXu1)g?;CX8(M}o~@#cw=8JY*MqzoUB9hPxI*WM#QKAA;1U!4BL+ak{S z=Kgw{|A`k!V95E3Mi!Xi(18%GY15l7d|xv)mA(ik#^!FCRo@9t^iIAFOGR{k?j6@> zcqXZLozy!<=?Cs`^4BrF=fB(4hOZCMnMoyp)5&eM02tUWq(*#VZzaG!v62rL`^`Pb z8+N5%*ZqfM22>mC`BN0>c&65mG74jeG55l7>3}eXiOXmN;~xZBw>2k>EbHtJ2qVt= z`n?*Lx8=w<8neyn8nt!u&E72%n3?@v1KS7q4hJ-v4_?w!KU0O@ebvw>qtAj>+bO|b zA<;7+yl61&x>o@b7-~G~U&nDfHK_x}Qc+;I5gZ-`fRMwICaN2V{W?|a_@J9FhLnqi zqqKj*bCm_&8Pic<`D*v7=5i?__VBZ}@H4@NZ^aO3Am|^(yk{x)nMMhln%dk4 z`}zQy(jdwnOdDL;M@aEuJx)21S=TW%W%4zmo(>Nu-Vp_+M*MZ2q$BuqtmgS}qLjsr z#C8&=q=xTnJ+hCsK3?|QIKRBEBx&6HI6XbH-i2K;0&%1OND)@z=q&MAoOUt(y z#^W20VEUIx4w+oSuw`@GGZtvm1Skbq+#GW zoK6`UcOR37XTE2cE#Am}J-FwUEu3CGKn3*Ty)nfOhCe0Vkor1Wu^UTcsez)imaBo^ zqzYTeN*j`oHzc2kC3!;pEjxC2%A9xX^&aj%ba!{`V4B$fV9KZtf5dgTbxK}`fAnr% zhyCil9udDBeI@;}qYYGu-sd?K&A|`?`u@vC_jl+MfR^Mom%Jb^IkVE+cUC}$m4ou= z5Zq_ehW*JvU-gQJzyXi=YPoj(W5w4v_+%ew8hU9Tqw=rN=-s>Btth41f3r@h1Qf_h zr4mTR*x13)+_xb>aR}-5Youduc*C`f!^jV zov$`Yfz+!+yf&0&d8jS$reDj;lul_Vab4X>?3+JNH$>^O-X9XYOKzXiXMIW+F1UeS zooth)wFnGlJ`Q-lT54+%Zk2s;t*?XS^o#k6E%@JcX75_mJL=w$TYu;Fjt}9gkO!(*_sV4SRM|=|(X$l2foP_mpeO_=H~#58@K`Iw3x%;Oakvko9PK#Pv}J?@tl_Wd>^# z<^f&L9e0AW-?{g@}}t2Z@op!iDLs%9Vc2KF$P0PmiAiE$6B4kmPs zq63H?dP1Xr`2aA44+ewH-{Bg&_tq1y_wWkXP)cXLfWqwePvu~Pd%T*XT24T=F7@xf z)SO$Yw}*s}wME`HR_yGtmm2!L#^&9>Ex%9Md;8RXRloYK1hGVY6n%oW)LaBEA60aaGZZT=l^nN2^9Nx=fpnU>6(2oVEhi+_#^%LH?Cj* zXdFZCnsdtx67;XO)cf)uJ^&KG*xCmYKMWvo=&!@i@AcwmqyL6mc=7Edn*Ysaw#}>F z(2^!8?Que!a^>rVKl$(Ig>`fY2+MQ(lS>9@e}d5gR`5oLw$t)v8 zQV+<@=#{U=SA-XTj$}P1*A?#%XoK$zAHJo*`*bs81X-u?1PWz;3sv%~GHs!zqD)Q| zhjLwfFmzBCQ7aq&IJ38#l|eVNN%av1U5o6(LwC2@LwBh|&47ddd%f@tQL-v<#{0&J*=0PN(m7wD4qnKXu(j7Swg=(ciq2$4Mp-^OoM0 z?deJc>92AD@F9B!=SI@A-*nFrqzkXT2SvdQ_wG%)@MT_B&R+OPL=C13V=IW&x%Y1H z#qL>~bm600O0@^(D8sE^`$y-dx%>HG zns@5x84y+@e`+ggwlJS^YJB{pCUZHL9QcN4@o@T4C&+Udi3TV(ERPw~b?RZ7f$C zmDa|iY9o_<;80l6n`Z5Q-EY4-XrBuZ?ak-&tQ_>YuH}ee_Fnr5b8?y(r5IK3vlL@* z<+dri70fvpncf6TkNzWhZGV2NX>JgcyrxmPsrbrs!BpJnQ(V+KeX{{(L2v)mv!GWa z)hj#;)4Dx&cRBvMz2j7=MqO$ZVE(|HkI&^QuNU6yq;9{?67P zj6k&Pr1WNsT@8{I@RTy-V}3v6iujXfd=N>dF73LmKWB6!Ocm7}-ZCl`9aMAfpqAlu zPrYLfAsJTQ@a^r=IS0Tv#8=}B-*f@uw?Bu|B%U>CKr5LjJQ3UJG)4tCT%O&&KTM00+NL zsa8cafDN#n>D++O$KFAf(%K)D!@C}Ml)Y)^LXx`qMBT!m>% zh9dB9>>p;?6MuAN7MmyaZZ`i>e_|UI8`lw)DR1zyNo)+x7TLj^n;wOG$M$&gdFdid z-7w1^+QodeL86sbtA=J1tEPe8RanyKW-(&U;Agu&K=yiaWB#nFmNF;qU)P^Ay2 z`-nd`3{|4P%}6Z(yRbTAt($BgC?o|;c$sZ5v_JcR2D3l42CV*3e*Mf%l;PFVL~JZG zXk;r?DDs8})nxzN2a66W&zz`hVqf{?pV<%)eBbiYANubTo&tw+9a+`Z*4hYnL%$SW z{2M7Ru-ou;N7S!dcQIgLuOZ2&{PgBNw{WL%O;eK}LMSB`1k}{Gmu@~*xkkcR8 zf$bJ8zyaA9S<#Q6PdNf9XD$y;WiI-Xjhdo8*A$Nj%JiW{NJ>usUR3g825)zYE*_hh zy!p#AE+1leoE_nvY{%%}v~F6b=9R^gH$rb0gEC*>dmh&4KT`o+PXYek{=dJ@(#?+Y z2zNbY@al6KL;ib^?p4Tx|E8ufzGyVyA5@K{J4}Q*la-g0?r!H=_}3M{bWde3UAKz5 z$g7R5qw7XT*PMvxK}Mgze!3wbFz<$^eaz}weh5=j$KP(xq1NkEYo>`d(Wo`m$(dlp zrgu1+KjL%rgx>+>R9T)3%{V?*9Zg2Ko${S41ej9q)i(qaU8t#cF9=@}6tLHqZD$*) zO-%lRpZ^a*{tLLCp;vJ)iSmN*Ng>J0>B}lk@;*ub+U8W8R1jYDtni8{rp6pfmjMF9 zGTo8jLU!Rzli1*mnId~qLk6>unF4sHFyG#nTrVTmDl<2WIo8davn6hxOHo;+y&O|% zTZ)=#EO{{*E@tw7VWq>~Kv$Xrb$87IgDL^4X8jy62^`n$Qt`rb=%{$R;K{5t35g9C z1BN-f(z!f%TCCKX+Cs^)c%4|&`AdE7oXyqQ<)NL@@{WFw$qf1ym(Ku21B(uIqQQ2_#rYIq-q zY4Dfnkehe0XpZL%J_YR4qpPs?5s8qwI4cK{C?WUo=e@0sWkY(z)AQuxguR*`2*<{TM@VZLYg@*sMaD3V{)_GCltc8_Jb^EC&)bhyK*cC4G3DxhVv4N~Wx4ewja891metX% z4Z!CS%4fIqSyS>OR=z42pF0rqcD>Q_&}ieSxd-GvHjD@4u32odaL_@+pXovWviIlL z8-yKy=%g~g4Q4_j2ZqWgnf$O|zpU`)bFJqxsji$jva5!=#rXqes~wI&z~qmE9p=F#rxz26?r|mx}rOZq~7iQ2MdC(3179Q&72Hycn|>d5MKx1 zfAoQ`0TM}1@a3jU^X1sXgl}G@39WfS&zo(XlAbh}d&)f-=<~%{qoc{)=cS8z-YeD< z<7R%sd^Mm3OdiN!!`nT zW@pO+RqH%y@%HxG%rT(VwT9j z$Rg7AS9ksXkOHF7$GHK01pBXZwNv^8`!7c@f9O7#VBRTl`^PgE1~lVU9+BIhofvc~ z`$KK5s%`K03)@=V(`S~g{eZs99vT3gye0QwGSy$BwrNfNFtcm?TCDsC_1}976GQLn z!TdQ1R0#A7cTw)2@CV6{Yu)+tD2f^&7QDV(xRfsZRkF0;5nS^Yc<+4TtsbGuE(klk zD8X_odbahZm023Z<)zCiieQta+N{29V+&d_I%Qe)z z;EXRfwVWDW{AINQUd#}hz-8QFA{`q}$KtMIlfB9h>R9-eD@?-lX5BVgG2qpVCHo zsx0t^lHmPKwQ}~XGhGqljIMSTU+C2eiaA|=I8nllIm)4rm z!!p8c_#5R@(2SL+L{?CzjcEA6yDNUqH?s(IPZQAIU>V=GPh*Qo;^Kuwva^Hp^#J9x z0l7oj=?vzPwfMK`vH_(}V#s6o#e40oe9*8J_BJaeT{v_*V?IV%){x-+L(-Lvy9$lc{C%EJ0e!mTb$iy%mrn7uH*S4Ds5>#&oppZ; zFrr%BIqHzz$#i`Ow#p%|I0nWYctkZ{xQ|+=OOE~m^TGoq3Hf!DBdCt;h4?qweR&nG zD&isZUB%?z+rs*Y;N&0XuJvyIk;ExkhZ^46h6bz^Tel1I)m)-Wl{`c(Ley$&;lHfK z5qDc6;@RrDW6KcPN|q{tqoErK&sR8I%q74WdqUL>^@VRITRx^9&3U}H>Q#f)@ljy) zF{<_^bZa_vYuC`eLQxz`%nk7LC=$HCt5kkvnXa`QEqnj@3PS9y`g03^Fy4LVvZ{i} zk~x(lO_<(1SC)TWq^YM@W4MgLKQ7uPKSk2&x=%3>v56se$}7K5CI8D0zWlQGIuu8f z?@_{ob3Sz}KQ40>&H8@!$UdFvnxwuARW}OxGHGF0%#&fo7+ z>}dXEyv7bJNT2BIt;oqIUxo4cYiK!88S)#QpJ7;+n0(h%HdEn6FEam{Vl|+NOUC`=wL95#Zt!@{zx?Rxf zc0sEf&Ybb?>aCo3P`L|Qf>yZ;TIDWimD>_li~U(|{UinTyP(zYf>yr^ zTKz6)^}8TzJvJ;QkA6z_f`upkO2@}_0B8UINco_dMaoT|emB2ABv*L5qCaH^^}|cC zKIDo%!P{K0l3>yW8wt*L!6t$&7PP4+Hq*s4`^2WZm=J*2c`ha#AQo{kp#iapE+#A> zc9M$;5r`e@V!{PtB`%h6u>u!c?qa(xQNJ^tF1FLfx?OCGimi73rdu?$_jwmu$VJ@aCeYEi2G=oH?i*>tLql>-bVofggyo+UAY>kU8 zcds;`-S%YQ9oIQ`8S4e)lkx}#=9#2X>yghW?Vf-Bs zzO6$i^jx?bLA3C?Fnp@`8e=UiBTksS-Yh0^@}GKkR%iNI$VVr_^<99$^WDHUl_h^rQSq5 zVayA)OHQ8?WV)^JW)~DJ=egjK1i$5i0^oTrSn5}Byj3uXMDrf~7PGjz@D!pUT46wi zA9eW!%aJaqi442o2?PsW@OXmzKWCjCM(`~c96|6^3%;b8{;LId0Mx=wE~qiCa~X~x z_?Qb0CHQ~~9!~I=E?7kH$1bSxecuHK6HL3H&?Z4JxnrK6bVAT!poyLSSE` zbZ&nsVqsE?!#@GxO4-&7N3tzLR37ED7JBcYAROxC*CJAj`|C2S{i!}}vdH-7e<(j2 zOHDsib5Uu_`0#^`Wz`%6ew4t->WfCU982I>{a$_1u`MOh6rx~(*Yv#)IO_YuiavYe zd_x1rA6EAAhjLU-T&JEg$lo6%_Ev<`tAMuD<>nZ-d1MiiW~j)QuMXf;S&TTbO-Ki?mvqDbLn=_cJ z@^#0fl3f#CJYPSh<{Xd7T;1SOOS;-Bm~(s?N|(C9Wp&kLle;_WJAS04jkL5nKaGZ( z2OIoqt9OSN>tu+=2J~&r#%I-+==Z)Y%0I4Z&u?+3pXRq{<*nI2`#-p5tw}lDpvi%L zlMIc)xbcab^lMEwp8L1f>Zj$8?@B+d@Awv-!XBh6YSm`s%R6^^B>yB!l@eZTHoORy z`9Ev_U9(h4;l+np)tNi`{a(FPDdEMh3C$nO{D4UHQvD4te%>YBX-WDUUc8DVgw1;u z@%0BaOD(ooyGef1dYJ2;YhOv>#YtD2MDXgR`rC2??LA~s{cZU=(T6Rnzb%(VQ%lzp zh}LBE;Sm|+V~a1ZSU$93kNx5f9Bf^l_Xi zU|DQU%gODv0g~{LFikPP_hWOXYJXei$Ymnir%7z5;zek*yY&q2+FMN<{;;-K9GT>h zTqh5sJ}s3=<&@N*!R!Dli@dumbIbR#DF)C^U!tkI+-Hdm4@F@sS-QS%Djw;{>13(5 z>i&F^?;6qnUR$7KlYVQn({JrzhK&&|czu~B1AF=v_H~yT(5jS&7cU}HEU~Ao`7@3` z5H1ccdPe!ug};4()3%dkp1P*C=vYfDx$I@^d9d(KkG^(YpuAqNY8gLD%^x^T@S8|q zT&nx&(hy|Kz_*pZk2)<$TAHNfp2)+c{E8_zM%{xZ*kneI$Cy!waA02QFwA zhZhPWsiRUi4ysFirl>A;ZgE}eqSCt5^x<`>FPGJ&zCJ4B|FiB-v%fQ?IYI4pSsh3; zqYl)#vW}#gbh0&Vwof#fh3pYJFHM z3nTXzvp;%7R+)gi%=%t(?y~{72dwQ6ZW|wOxp_asI_9Br6-e&$?j%AJ0p>W&)$x9R zMe?=3&qpbT`Z_o2uSouR{xOp9%fCN;J;>|hm#MwLuVvN;=c`0MsTN5~5kn#J-P6eI z*1s2;tMG4iUV0Snv8MOn&~DqT(L6|Wej1A*Do11gk8nbwd0b}GFUV=nrZ_ug?qD>3 zsUdx7du;c%SYm%|_+~lOZ%959+r2f`vG1&gF;qI7IxfWCYWv(m^y=Bc{NcIJhV(Rc z|84Yz_g}VzZ<ujG%lgpP+6tF?n-E^S&Wd%sHnQu5IOX*14LYO`a${E5;*x;~uBi^S%-1(#t}vfVy9?A-r%A zLD}!40kX4S^F(3VTsy|*25daJA%<7GZ>opjt_VmIG)*jNrYRU%Q7WRQ>6cx9ZEvsS z4S(UW*22cvxP1amY|O@3^2yk^XJVnPoO*;8zD@V_{wXdufOI0|U;#>c!? zmzr6wi&W`RM>o`D!wHWJAbxA5{?zJ^F0!=Fh(U>GsSNK7o-rj|{1Nm_XGIe)wMWwz zv`dYh*vBk=i?&QXC`UNEw?sSko)sOlA)1~D51Cylq-<)ac?rievGDm%vVOhL%-LDD zcaa$#2SX>5#tLQgKs&0-rv;rx2I;HJ1e%)l(Qq8o9#fzBdc>NQ+;j%W)4YLJpMg+{ zFa{gIHQCsd!-7o1;#b0p?*D)RN7GH#;Z`1St$nCga0|zuq{}UXm6GM4wA;JWOo63a zW%#*9&XuX-g~mBv^Z1-sJQ7T)#v}0R^R@uX&h57>3))I{M$$d zZ2y|Q-S+Db$KFm3w$`?U>ivo)mR`4n=Dm+@_u*i1<%Z7pyL)am9pT0M*}dc>oJ@3g z$5~8Tc=0PF%Sn~)$E8Xk_QtwY;~=dQaTrOF){1CdYDTfvi#jN-RBJ|UU8;3>9n5+X zDP>BzGSxVWGBZ*v8BPdc(b{g^V;RqgLs$%^RsLxl5B40Xw68T;IEyM9_Ou9;jR;fGXB;jm)v8YwtM-k zuKiYs%BR9TkuCj+MUv13M%_0Q&~#f+z|=)Y0k@9KOrK31lTeppg6bF)7YY{n&aHhv z))dstE4`b>M9l4cGhL%#S`ryJs&x;2@%CA}*zjh4_DLv`*iow_2{p>LT|fEREbLai zAlq7gUa;mXtxaE2<~_tB6V4FeCPo%?Xf7iQ{-h~c&>_HrCjtpSH-^^oHy*K1G!lA} zSY0IaG@shgQ~aG2dIF3W7>QIe>?=cCC@$y{8BgMj&=dTfSDOqrBPPMOqGTQ0UL@W;{QY7>sf^J;%27;e#WKt4 z$S9T3bks44OZcXi8-+Dj%uKBiuwhHp!m7qd`gcOM2~Fkj00vzf+RbmxbyZJytbv6L zuQ?}O9Ij6%l_^s7R-~h&2=F)8g`TR~-LYl}3`rG#COxSX8;Sw->D!dCZbIf>QX?IY zm)3#MR6m|k7zg-F%zh`Ji2kxyyBSsh~rHT+Nqb5~upo(_TRGeeuIHq)a} zhf<0Z%h1CiG|T@rLkL3ZD=5calF%|$#Oax~ne=J7qONPu{zM?G!P3Ch^lv;3t0a_S zsV;lhO`7BdtBUwszB05XQnlBO_Nl6Fb;M7g@0Kuxme{aNt(aIJdc3}BlN;(bACS2; zvTp-|!(IB2`q1C%s$O$LtQ6RdjR&dHa8(4UL+V0%slMDnq^@Fos54TvMsVZ@2NXYn zoNKD~QE6@-{RGulZZlX(`}Lt6^;H|(nAS$BR%r%vY4md~BN|V7Zkqnt)G>IQu!>;9 zhUX>>fRD;enrLrdHq7F?FfWviujD!vV=L z69poyj<{k${^5Mflbr(X*yQ?1@~;F;kJhBTleCAcMe#B;e9OhMqe$#OVfMLng$wFn zWhAMyl!=jK;~>5je2e&&^DWLqlC7nYWOR5WSzAWpBoarNOGOEeJ-j?*__E>zAxLtI zH)7R?Q-b)ra0EK8(NTWh%y9bq4?P6{Y zW0Sq7bk1wx2OsZQo9XaQ$Zk-ZPHCuyIi^OX<1Jox=)oOyfzt7puR*i^7^31DGgK*@ zMi$+=+q3xH@OSJ&L*hVb_-0eL(@c}gn!dPOW~Y)-_n>;{MucL-T%xJjzy_WEnc3Mc z3|yo>-Qa!Aw_irNVfE{0;5$PajwWj^^jvO(1!F4>-!f0rEJemowMMR~jS^?xG0RKi zEQD?rNpDzMs#F4H3V36Hcb|hLzkxd18;3>C-kf%#Lt2HI(Q!EFL%|mft)-hX2Ovf# z`3Yw;Nx+a?>)X*{x~=1sOgYmpTF*Yc(6zLG$ELZe1q5 zNTxug`mxNr0oeEJrqK|DW%~0D&L>qJ{h+4R(Q%zo;2a&(9UW&D!?lQ}roVPwmBTth zO;M-c75uLMTr@q8IocE5{o+A$w3j*B8?D*Ze1hLs=4h|?C*K&@ualXnj)q!+KxaM# zy3M(+Hx0WP?;`&ArmaN;$!YSdccw-BoTn1W91>xl`L7Q^*y;J&$Uy7e`*rv$G1kXl z(5O;MrgE&{>{Y6<1ngBR-l?j!SE-^L(}C0L=G93*ytnjv)cu(HMbj{!XcCjkL_3f+ zs?v)=IfUw@m3}j&VmKgxzRRO&E~$BOO;ti~515`C{mWy0hU{hU&L3#zU-_rtmPZl3 z0ir1`;iRUcQa;SFXZeXq{Cz)n)S`(OVXWH*Mn`hBacgwl%`;#S%Nv0B56#m*0zpHa84=i{=U%!oPZF zK&<2M0~$h}pA<{HS!!KNd`0RT9vk>{bj?cGLjitC8miuihYm!;_iW)Y(3gwqzWvRf zcvTkPtFfM^TRiHG4O^#rV{6ukRdiKRMLanqo@D6B&zJUs=gAfNJulvic`oGePlsPV z{>{|6%W`$Y_chE8uDIoTZHwDTjXm5>TT&UtYc^irpw*={E}Vl)G7oMirU+9VJXEAp zCL$*1@k_ZP%c#LPt7j*ziB&UAdTJ;%(e#t|qEP$s-KJ1G!zCT1r0U zcQn~rlsXfEiDRu~>u^{_vb8LAV{x)|6wZ{At>vj3hbLPrQa6?*TgRrRk4jD(zoxbl zKyyC9`Y>qLS*el9X%h(+%{no4$)F?`e-a0ZXBDSnMak$S;KIETces{(+dKIY4xfrN zP06>f;(nx}09H}&2qKw2qtN-0|9(R{5Hc3L-fsEtc238j6De8SCSNyUB3h3{FKCU2 zh_n&b{;br#kD9*CB&yy+MWXJ}Ityqsjj$z#g!kGtaXf~lIdt?^Nc3bMXcd8Do7KAX zIcXRwbTBg`l}j1T;AV6V%MtpOc zT%x5WDF(FBk0)3277$&E?cS^fI6kHWo@nbMxZd4j8mCS&X5;uq%ZpA{$MgedYR#1} zNKU-C=5nEq(bmsGAnqVxC<);P?DG>n%9*4gUY)RGlVSvJVPLE=dpWf~0LnrQPo}(|($9Uz29MrSySzKrfB9O}A1F(%g z=Lkn4))q@#lOaLSqB*NvBlNK$)@%;nEDIa0L9H6-S_UC6Z{t?Sl5hL>Q6%rCC*qWb z?GohTo}0@~$>c>K7MC1DnuS>Yab9}-$cFSc-h^1*5wW~L!Wbnq)ciG^_$*Cw4joVK z6tV2oG_=!jG&#{N#@Z@EF#e$&sB%b}u}ebQ&<3;;P=wKn6yd@$qZKg^MW%UQ#qV+- zL6W<@GYVR8Sbw{l9u~l6vu(E?K|oF31k6IQgTLi_wrr*O1k2WfRYE6G)gq^=4hYU| zlzV@62MYnw1*BD^R=aKFKG6lFWm1P5f-iNrA&BVi;W8CO=eL|LeCEBO@YK<7{D}2& z?Cl~sybspFEzf+wh)%0Rw`^J@D?aZ1jo^o)zejHUaP+tI5Sw#WqJ#DausHVe895MW zxmMFrtEIKk+tn@dAe4BCH)z*2p8|!klg2oxTl++96JU&Fw~`}FWuK)ni)$?|1hxl62uOT#ika1N-vZK0tryb!6PgnIO~$>KhY6 zm%7Fx7X^!~#y5M4FC~mMu1=o{fGt}RH%d&D2>VO+)80_mU0s4r7mjwFIfu@8*Y@p+ z7wOY}_Ip8-eZD$BUCa9F&QCvzAYgsrik)FQZ>ie%{)$p~hE%F+i8rwLVhq9#0wqbj z=EXTfuDhXYo75vLnB7+3mI^&jB=u&weOaIRibz!vJ^%0b0d(@kcygP!`7pyZ;jFc#mcJrFgpH@L0{p@XaUl zdn`Srlyx_J^9ajq_8j;4k87I@&66f{-fSzlkUv$AEk5sG?~9Mw7!U1`anv$p(W+m9 zhfcAqb`r8Ny(`ft(xZ-qQHSF-+rkOy zaSU%~+TT{Gp8Qjz^n7@E?vn05go}F1H@Whma_~hKRIs}31ihbc0iT(O47Ce&X6AAv zb)b(F;_cifVsTkgji|~Sn<7}uptajnH*TXdrCCq$t1|M6db95J@O)ip_7RcvMLp4u z9X#sO*pv;gsV(OhDRi3nFn1h2s!`@lXd-N{)r1N{l50rsBedXtjxwO;8?Cz0hA@wX_%S11n9miS%Y z?00>;eR&~*FaABX?B?YU>5H}F7${vmfWYNPrqW{P{~Kzin2X{<(hH{gT-)Qb}&O&ya?HN z#ar(hYdiT)ct!npY*+MxOWOSdl1?K@h9*;fD@D)-ZvbBeFRH{_iX~PWmut)!$6(v`XvGT3HiY)e z)3f0NM7r6qX?}N3^XcpFdTF+H`5|dm1-*Bkbu_y~odP9h989yPZ5GXOzS2 zQiwJ?I8&c|rheSkwi{&swht)qWE(WwO$hyCB=KHob~uu5u7GZLLbtO-w`Z4A33Pk5 zPq&EUYS<^$czV#$4e8o$lZhOiw%OXP@-nKGBBDtV5vwBTQ-T-Aec_Gy5Z@4A*=%2UB41};#BrO5sg2TNK$;q%K6r;D zO2m7pUk+8_E#l&LZ!yTln?*`S0Cvj|NUQpzHCrVy-)XhF^(M=vtnd|44*hX(d(_a- z3lG#nCUn=UdK~MkRLu+Fn;R7X0jJqfGZ87=$Gz>ZF&lDM$e)X*hgXVMWvo5NIi&)Y zm<-1vH9I*kTot6U#x+;OlA9XR6{pE6Q!?{2vyLP>!J-W{&x8|y5Qy?XbqCd%2G~?X z-dj8Mf>q0B1cP>d3QPWxF2{+ou1kW{%-?CECwF|?MA^sr^op_~ODD=2Dl;LjoK46a z?Le_MC6B)x*aS@z^7{-f$1SGWDG?7_x(d^Ur@d|L>)h|bt8Pk4LS;eR;@$NNI>YxO zeba@-E>}IdtpDD0vclGMaM47T%!k-CdP8p30L@L%KjU4(kFM$eoPV`Vp7arRh0TYB zA1sU!(v_wqg%6LI=qn`~sx~%MZEL7{g;TZ?=hHKu8WvAoQW)#Vmc`cS<_CyY55Ukq z?1&}*6vO3!;=5l)6^o8_b!^!4BoxVaAQ?idrNWKzaHi6BzZ?tke7!WVzg^W3dOkJ` z9qwxl$z2V}_hN}x1~w$$k0t*0UPE#9t{qV50V?sZ)b$DxZTpMFah(H=Kcz1vXL6A!Ix2;cMf zqFBe@&>?@Tr=jZoXwSM>&$<>bH%ivq|Hr-mC)(*JpUgR_&_XzkVLCzmE76>wE>_O< zsc7O)YR7 z+7HjKCuRQSoWa~u(FU+R-T&}i{e&0JG7Hpe3b!v+!E03T8iVFF22DV9pyd7q_S;&1 zdYS(R1o{p7WyGEC7hKR?^SYqAMn7%UPowASCz5vP&l^hb)}Q_Qaq<=J$N3G7MCX5Q zhW=jOq`&{GIgGC9K)8Z&yrra;+J11Is=nq=<}OX3mG*a|dnh&_#w=k&&)Q_?o%34FiWY_*__s>1g5=ql`BOQRx|BJ`Q8~+vA9(-FB&AU^*B?;L(^bRRHR zSlBa&g*lvFfH0MZ+W$9j@&A|HgGaJbw&MH3-+dL+L6}3~`0p?Y@aGEm9WhE@*z1W$ zxdbuu17FdfZ;G?R}_whh75P^7u zY*9pmMuoa10+xvAL<8Q@iADv*1&vlC)&;}_P=N%JK*nJpwOH3$x>%Q5Yt^z^O(0l{YcKe=brUF?|HZLo_B;2Hwz`^)|uqo z1-fzpwtdsGU0PXtzD-W&>!*0VIbGf}`MwA5<1^)*{JH6UJeFON&5X;PEU*Fvu8`&~ zFXa1Yc)z1iz8CR*AKuG~`6k(~nAsbc{Rh5DcCDHH8MB|`n`Aed*?wmKgKv_($;{r#?0I~X>>bPo87*)! ze->YL-`pfHT;2DUBvS%R{8OmyA>?0Qc(6IOX;+Bx+Z1_zl`8U2Eh=l%{@M|x7j&kW z3qujAy1OW`N#xz1TT(3Wd|2T5q`FzEg zGY~*aU$z*-PjdI`?(TO}Y5^S2wEV@@rd4oCeI`DRTtZRrdatdhr;WCeJx+Ll*bhM@ zR`y8dC*Vwge|7^AM(?*53p=1cU{B&=;l77$D}erAgjdI@5e;GCPeGOy55iGQN(BCXI3mWfI{L6D z@PJH}cFSN2jQ*H^hzQNw`G+!l^HTmZ=Mer0(-XEgflyT( zfUdog#H=Ea?oRIR?sAjp+oXA?qUEM{P)VZ;7h-7s{Mt8&!8`c34I>-9pSyoG-ah1; zfys|v;y)dVlEh_v4onokZ{Vu?EXD0RGjA0@z$xi%J}JIL+jv{r4%9BY-C10qP2TGE zmg;zI`iyUz@~bJc-2b08h}sFyxY93=ApPCnh>&BLvLk&O@xor8+j2j?VRi+D1^mHh zIgr$*K7vKQJh|)9mv_1GXk}9Qxmk=3dycE34!`abp;iyCQYfCVE}w5-A%dh>rzt#Y(JIE_jKMW!-yAFmu887=8~sAIr!;%YaM;8Jh1{KE zAx8v629xbrkL}pr+KxbgCHVIV@qcH4oN~Fp1=>Fz(wZvR-e`)4qeUDX{b)HlWW(K- z+=p*Kkl}^+SciY$YNILYkA9oq)BbFJFDSAQ=(8P17V6lb%?X?^NMXWglV)EbVg)03 z{TowN4+(Rkzu8w{56Wr)UT=e#=V?m2HdSe8&5^j;-)uJFnVxK4A^uEP(|!Y3COp$R z`wG!Bjob~Kykd^lOjBIBE3~P<0q+a$k7LaJaUy#FZuU@VNcRa-cnXS$zQaY~IF;o7 zUfDR~GWk3?8#8KphkwX7o5(Vo){(p6-yP}rQ^s;-*JfkGIkCm?ugvM6p!QR@Ka{io z(V}UM7R_q(@2w5hYwW%Fh`J-Wq29(n_Aq)cchnjVsoRxi0VrU$J1)okUN8pq8nWyh zY*obiW`fWMD-bwg2e#r7zXzWzQ+SgwW_s)^#K+8mW`%??^ECSk5ttbvZ?Bz{vx zgl~;gBO1boq%T|t(|BY-Skat6Vw(qP&PgCZu%N$!-KS0MN6kF>cif8ZF3<4b_=wQY zF}_-iMVtCt4lMb194y91N0TFBe85}BT@PWQL9>6Q(r!1XG(@}YEmj3%gp3O@A9*lh z{sHMY&mNkn`iQxz2k7`{QvI?^gqq)+P1;}V2H;j^RHpY!S^@So^^ufxh{DcwO9;_UtKE^v( ziRKaHNu|yx67n6bC*dUIP{%7<>??#wNc8c_Z_Nrp5^|{Hm8td>LL?;mcqNAwB1p)g zj#o~MQzJw|4tBg!H$nB+3VZm=_Elo+;UU&=q@1bPV$ECQTZuI<+gFH>H6zUm31f}h zzCwJgIWVrZSmTdVBQdP;nzdVjH52Ts#9&S6=;m;IEClC-Sq6<$6gm#~JcZhr#XP5q z6C;fdN21Os`UNiml0Cgs0(1a-s#j^ZH<&_NKjk%*5y7XBZ_lkPWt}w-eZE50W1g+> zF_T(@Yp1lccH>G zvMZ#|)Tngs9H!`eCPfBRZ^S=Z(iIckfOgdJOX$EQc*LR(Rlo^rQ5EMNl1vFO!9+&a z^A9bPFv_EY0;m5x*cco3j&Eol?YIe6srrj1T|XwBe~U8f7vpbs!^h31)Z>dK&P;m+ z-W_;xLh90{eT>Tw4U@`BGx6tkXTuL=&$27i)?Z&Ysd;I`$4#5+KOdQN%86*Cp;z;k z`n!vkh=DnIR^N*Wl=JlJ?hOTehuytdvSNQ#h zvXM#5s_jyL@yMay;uptE7m#B=@dsGk2oSioh6>Bxoa5IoRyYE>mNsit;-@3_o{ z=Cbw;lW~q{so0`!gcVYEPsc;#jrA2+AvGySf)+xbklH}~qV+P=N0;RoeYg!IulKrE!c zCxS(TPB5UpZg{i5zOJD8oBFyT%?EUETyPR68@_9Lw_$tJ+J>!7p9+4KjRE?9UYe9P zP9E+_>UNJj+@93yHaws?+a(}MH*{0JDXPXS4~Ga(Mt$#>)esaxWg-$-|DuA>)llXHch!hQ&dazz$3iz%h4X2sp?9 zaE=WD2N?hkGA!UA1HeHBKyCpi-m=x3RAhj*0<`2zZ8iR$0@oRHzhB%<+n!o~@nER= z^%pzfGhz*`v?mJl!j{_((YnKwB#4$K4*+S3JOHEz?&*OG z_pNuyj0U_Nbh%WST&g~ze)?S55%9)LNQ^`9M#f>vtM(Kr`(xyV6&xZ4EW zxAFkM1>^yM`y3C^KnN{^9XKK;{}UnG;VhjXBG?QN5r2V*_zOg|7>_+7rqmM=@fV1Q zzd*zk7$Y~4C0A|6xf&VNth)e`51Y@N&h*{p0cA`Zng@?(DvWDDb3taqna#s98%}}4 zBESbe)~)#-CrH^4CurFuvNaIl@0!IG5tLaG;jPU=ge?fdw!xlZ+c1zQ+eTc{8*hO_ zi*;B){8ie}y>099cSo1{B_oH{wEyC` zb5#0VEz{<*=Qbe)V0I|L?ETpQv-!-SOEI;3hVH=B&K&v$rgqQJO)|A442o0BWQwUd znPO^1Offb2j;YD_$z{*UcTA1n>o=b=bQxN_edxb9Q#_qAbXyl-;?QULu0Y3j2s)+& z9aDmiDM81Spi}8{@|~c=J0w`Sc>&KINF6ZnF!7J)M`SvM7WHGPQRp6I&uc!+@rhkwueYilS9AL@64<%|tR* zghR>4ifctki94(m3wr?xjzAeeYb_ndHL*ESv?6EmOh$$Mr?WjCaDXRY*!qvSj3av)zF(6KsI?`}v(;CsUf<=E7QxvUIIG3Uk z#7T+TVOv@W+2MpriPsV2>hoI@hTFQBqH*CigGCdA+mx81ap86@izWuQ(_@N8!!1Yz zm1JlOw+Lxa$l`RIk3rGy<-G+%`Js6U$YTI9;4a90dm08bzYnQz9f{;-63IY)-e43# z@i$PszHVgmHc@0rHr2yDC>=CxtdlmQ3>)$2CuNSWL09h?x*T-%%%QtMSMM3x*v0>6 zky1yW=`X?vCyj<6I%zZ{&mTtnYC#tua;BZF`gteh;lfA`lcSE<|HpzR4XKfQS?2^2 z!=b@3MZZQ*mQHk{d^cxG`b&PRj?m*y!tF?vt=Q!>P~YIR0lU3 z5-ma0g72E&i6<(PHI7BBy+G!{xkF&B#Q?^hK;nOJ0{p=`L1Rb#O&AAlO+gzIo=nS9 zxIO86mVYb2bhMm|B%lAaq~6`$}36e zp({dt{s3B?n69Bve*oPsj*|Rt)4AaC*JL&fZW`)@L~ux(_cv|H!98A|2h}XJ(fPV5e77IXsbIIaV+s+hS+x>tHIASF zNfh5f0bu-Y_kVy2_^-p{5~Bj2#1xIYWq!+|iBW;-n4;lZCPH8w%%X`2KIg;~MXNtf zVEnnMcMP>VYed3JcXCY8xJ$SG+Ju+x-I$_rmu@PHCbo3rV~R#EU66(*EVGiTR?@*s zsOo+`{hy$!r(XlGfvTR&6gJkLOheRFY^xy>D`r(Yi>eZ?X}J7eXzqGBF8sa=&ZbUi zXlR-Y18vhyu*fz|CT%?t|DbhGF1y)@KV@RR{8(%kKcM!2p&yIw;s@4#hVl+tcykWZ zQ<|QsW$I{pa}(3%vOkoo^sPBeCzt)9R;6!kLP~kv&UQ%KoS5h$Zq@Do4zwKSf*HdB z0*jU(=DA>hwgJk122)V>ET%XYJYKaOOX1O>buNfI>pwTs6`|)42OVXi}h0;D2DEn|Idv}3Bzv3RVM7V$pc{bi97&y zAL60aurmp6=={s1l{C$&!&sBd9sIoUzj>}0eOM+qwERjF4sXc=;4oJn0EfThArUwf zBwv}100KXcH4#!OEr>rk5+{sE&lQ>gd`2Dsz(?f)0Gxq`L;x5u{+|+&qB!YcoeQ=g zjQhS6ZN?X{xKQ8Ks&0hXZK}g!%l>Q!EGt^22Q>fZCY`)-7SvhZy&T{NcWqz_?)q=0 zIKliE(5CJeXvLL3K0eXxxBD?Z(OsF)-mLgU4;(9gbB<@-_LtU!p^0p-uitzgoeOQRujlg< z{NrpryiZdf<9T?SIwh*dI(8qAfx`JNbOY{Cj@=#YE5vuvU3i)5Az>HY7wjvcFtJp93Pv}?8&|jUQuF_li1dajT%H37k?P#X-R(7Zi zTW{sqKrpc`%7_qft27Z4No?gmT3X;a+z$V4!Uf6E>LTUk*>D(+@jZ^YMTzpZUdyrW z#@F)7&1hcEDZ7N1bINWWg9u^ekQXAa-q5j_H+IzRN(oc84)%VhHm$gakm}fh!mD`` zfTaAJ87TxIXwboPY@82PNEzi}!<@J16%Fg16Xyp`aZz1X2j>tv9m6#hU)bMj4pbn zt{J4TA>l|MW%d<_4Z(oS5lDWPSs{qzhl;${%f3Pg-x7?*bA&^_I}J$Ta{Zw~VLR+A z#E1OrxvGbRA^&Il3ek|4ogR#pB@`!e^UG#Swl>?tcmUQp9Bdt%?uUVrh8T7jm$t&6 zf|rbr6B&q?SDScwwMq2E_o0)<+{6U~agxC>I1t#5|7)m(*r<-F(zX4TzUEX63yNjD zEq$)}T|xudX@1?z0wc#9;h6XIFBM)Syyw0472;#wd1i%#F|V(Eg$T@xi2k$wT+AUt zqdZi!&82Z_u#X=d{pSc@@fQcQa>bvpuMmI5b+bakEB;IS3h`I`3mR5hwc;PdsS&;6 zhoomDanaF;gvNEDiwXsbCr#sDZ!rutryZ-(Zk<&cqILGM2`sWlg=XZKA4&XJ{YM4T z0i}$JjRtyJF7#A|)=`0W{EsJ#mf$!8RxO(!hOiZkc4T4|?T=eNqE^zvAH0f*;IjC4}#^uMi)? z8D@oqA>7`+LVO6%&2BA({}QK0G=zm-1Ou{wHb54_-^gE7SaGmu!TZm~*dPjhqtb3) zGKDO7h-ksD^-@#%l+l8(!Du1-L`MsL>oMrk2qzo%<2*rw<$*imSNS-y?9`aD=*J2+@-g~R?Z<{DioMlk1{;ykBI>528F)m68DUTn`*r-JZ{q8? zI;L#=b)3es39jRVF=gYg<5?^l@+m*)I-V3$Ht}^_+9&aKTo_X}?mEKvPVNBlLKE)g zsrVeBTXR;dj^H|~05Yf*Tt^i!>JDfKxP$3vISs>vH`^Yj@Mddb3U9V;On(Y*Hs0CU zf_pk?LpR~BC2#IDe7y0LKAbUV34Q}^hWh!j-_7EHaEBY=Ff!o;&R|b>WX8SUgYX$n zxSEYCVho3J5*@^Fn8OrNH0Xgoz6gKhz#ciz@yo$H*J@c4Q6V-lMT<$GmTZv(7xkyh zcSMDd?`T)Pqg{Tdb%)86fF!=TOw3Re7vDZ~j}?Yu$?XV65j;M)3cuhY^OfLMn6wl9 zArJ^UV|@&MUXe%dd2L!fNIt*F%idn<3yN#g zrk>0pjCLG2MHb^n1_;gI!xa;^6aEF9F)VKCFJ=Fgr5AaZ5 zBM*>a-o`_#J=A}yP+t{I=^%>;xRd1PFVph&&v6{jkG%bJF53WsJBuj@+^I}K;7(9& z$0u+Y3_QJ(!c4MuAU?>I7TXIJcfdL&!Fq0z2S9(gJOKJ`Jj4s|lE|urf?kDabBuT% zBUi@=Qa?vr!23=#p)yJy0F|5N0Z_RH5ANh^5uoPg|34~VC>~|lV%tRpOgg~?=pNX5 zB>u|R@&JHt#lzva(jPVPW+5Ahb3f-3+bJ;h;R@Q5~7L zd9cxTV59B*dEz6+xyt+BzDmUQMW_0aVE|S9Kj>BxgLu{>hy(a@Vp%wM`&m%jlysnt zLf#2!qc=cBC6Gh`Jr}=T8q`LA4d*)l_pnb=IIGVKkA%3a2ljs}A|YPO@*#!sU~#;x#se#Z3G; z;YdgE$asy@x6rT|P2aX1BUm04uW=P~4;`=Z*DRJ8akx3AXk6mZl|>UHc1Oh&4JQtD z;b$Rlc1Eiqi^{>`HNF;86s`Wa@H?VvQ-PMK1n01W#Nc*XOwqV-`%ikpa9b5qG%nnx zv1np&dnl%8G~9xuI^oziB;HoM#*G?=l6btvP8iN1<29bfF(*pp%pbR~e%E41s>@T$0&SM+ z6{}HtH43G=_H4$_S}^0sUnYq}%qNb<_!C3SnK4Df5c5cyr4@4|cw7ZhBm7YJ*|db` z{A5hgh&hLhIzPWh2{k>Qw?^D9~9htX%cn40)5K}v!2W~9<*Yax51u~Vv81_sMXQm1SipkKD~NJ0={l@TcM zNJk7gv28Ftrf3*SM8-lrpG6bnYdJAR(W({B{78bGwYd%!=rVGHwa$iMEQM78w%SY0RL{h86 zi?u$^k?c%Dc8 zg6)bdKhPF)x5)BghNpa#ZGcGon1V=GF~tG(B-M8O1L`A*QUqytB7rJ@)y6z!yIvk} z%66qZ;FL|r11UcDHmT|VGEij%JpaehwMFJj1a_AsnXtP+9ss)m@&MSKfrnPZ&ZMya z=K@up*wS73QFNCFz#&Z@0EZMjBm#$@{oKVm;`}LpzA<4$YW~3l;CJ!>0DdJ80N`dk zBm%&Q@&A;F6lL~0yg-$>sQ(cTs}=8((D2QU72jiK;9Yf0!MheP#i{i_nMU!jpCAUL z{9qh@A&$PZ-?wGNL_g9^6u=QOr{k z731+xKkDXB{Q@x{_xJ-X{$pOYivj5xRGh9&dl|~oaNV<2ulQ=9?kUL{rF(A7D%3sh ztP#3rVpfq}wY$`*d-Ah%-J7a=7PqX@z0N+mr%v~*$1^_QWrtkj?0*VATi_CG!Uxm15u@}Lj?m_g$=>scQ=7Zn z?RBQZ31WxdX04vPvur#E2f(=jNAH+IJ$IGMv)rv+u~^UDRdTMXkMWM-P%-HB3NXg1 zu3yPW0SBom-LM!2nd#2O?{5vmFx-8Y>7M=io=^3zpcSV8cZP%U+uDX2} zx_YnB`!2uKcmB}?&nUNNHAc>5#t=qG#MxVkf}UYn13A5Hg561!@D}2q3zKOiYRFo4 z*1dViylSBCy$=8GL%9b4yq#Rwm;zXn`>-Sr^ic(Tj+BWVlC%?@Nk&gjh848AS7ujZ z0nzSt((YRr3dXWjK~VSX3%1ODQH+?wt{=c1JB3bIlr|O=I25NK1X16SLR*yvsV=?dtb=`YCraTr6JXj?7sORn=V6-dV zs~Fs!ZK0*n(o#>3%^YC)2(#33tzs0=FmRLZ z)knB;mya(1V9~^cBCI-B*`s3s6N=2$clF-uZnL;z@M90C?suecB3)1(-9Lnhpsr_! zY#g=To?7FKqtLl$vCd^(rJV@)BEyXjU69t;?J8rzR{I?!`^&!(8cXc93FfH%^HBtS z!R{vN1OMGw6NKCt-*t- zX~ybgf)&p$Pe%X>C?N3G)A=w4IlwRJPw!JP_%_y7bw{D@@65WRRNaiF&g?e%TIUG} zg5(^Cu_y6m1YQdHLQ>~*oCK3y!nDXJ*{csRh{EDiZ`2suJPZ1tCwNpjed-tKQC%V&fjXve*SLXZCN`Cgvpg8 z2V)vn%Xpv8nlI^$tXfH5&uT<^{^#2CVvN36@caDFw5rGX)z@w3a{yKDnoQ0q+q29KYV57dVhvv2nIq}!tmly$IS2OPl4-40c@fAs?kjQ-BbNZP zCUO_t$Ul`?<;cXcEO4bKEjme_fwLy1Yc|gM-Hw)EO*OvHwW?pUJzuvg?Z3naU&-`YZSl;G5{KI=yAJ!H)f48`aAZk!B+t^!6DcW{(Iea@b^6$G5AUjCh7dm zTGbmIm9N`BSEbp(_YN7SDLUxh*G=G7n!uf*fZPAUeJz!>TGbcQmgDx%I|4n)|2GyZ zW_X-@NXtE1F+;cy@N!T+ZKO_1o?5nF>eJz<}J|TTznRJet>iX*V4oHrt%<;>{Mf%%r^IvRg6RQ{_2) zw)1`)Hd}Pno?T5fyHdr|&P7#983Nd)--dOC9S@RyBblEmG7Kcq$8Bj467qmT)189gr zXVw@SFCf=6p=yr*w1bad$=zeoX4pjfpkd4+)0%Rhh$)*g`3B>iq&Q-P2jREBc+6&Q%cSQe`M*B zEdL<&rQP^Ud~uXyg19UCgYWIMs^jr_!Dpa}fwS?wU1|FToB48*ujYFkE*DqqZ#%yI zg3pa)WYV*pT|zeACJFnOWGl)ZE5O4Fq@>ny&PXk$vJ@%nTV3(0i@XQ93$wY2?0L{dx&VC?Nu zOVbu2P;yeBi{eilPHA`D+wJOm`X!N|ugO^fRFw4)($dE`_B>#KFYS>JI$(o}Ohlab zIlSaCxa9~!f!rXEd3zQ%J0x4rr$S-ETY5iNTGFFi%Cl`r(cgz`nk&YxOEqrUh)q8a zPyQaU>u$*bYW??Ol%f4i0fw8L@Dqmm6h3Ya#sk+8qqrglgsH_rYjeD?@^{Tt)M zjxePBvq{N6pQQxlA2OC=NE?((bkEaSuQ2sqouPX#10)=G)MAF7H6q_FIv;CJsU-sd zfnJh9!5ksg%>5&uwnG33!e6V}A@k~1_e{s68URYGdY1x<7mCT)blo=@YDQJd#9N@B zfgBF|X0Hw}qg7w(N3GR8-{^H;w+%j}1fNoaPwBy@Og`0ZYo}}fUaK!#iY05&wR}*& zuIK5#tJ(zG=0JTIMp-va+Xm_m)Gs2|uj-JLv(cy=27%PuZTlCb`z0vlo7|onwO-dW zSoih+CE|KOvl#p#zeCBL0K%M15>}Y6%~NnAM=An>Z1nHN^b{U}!GMwgN473cQ}TzJ zKQgs>N(?NXvOgtRtGa>Zyl4_qneM#-eDmon3WPP@Zb#kKFR5xZQPR=;>wajhSK0Jq zl8j@V+c9D(u8N|YdvRZesMs5md~gMr);&wNiWu~%ENEC^wEIsqX14oR)$VC*cj1Mx z?cQXz+Y9afg6(#bc1tHj3;=D847GWcYIDsrv{`J^=2d2!S!nZ<2}Re?!*(8&$0oQ8^X@ zu1SG1d|dqZ4$$w7jrgoDNKQ$1B)3a$3khWbwn5TD{t1jIt}*xZSpeqF?rLA3gv!sN zWktW9Qq8wd4QoC#dU(%Thge?WCi$dFS6ZB&Rme z4|w?d4vVXU~`?}Jj zQTx6=N3(WG_rRzr`>(uWWm9Ppav%D$(i(?}v;*=Cb-D;PzK6pKH zf_$*_Y>e*Tj|olDsxD+*%|9f~myT02^mf#}7pGE3X;~$x;DpGM4U`-RD}pgP z8%yU)dw!6Tgq`HR;QWsE*I`voGx5M_Ny3W$FRHYV!DJN^ur^E66|1Q?CC!$TnShE|4mdk_kSOb zO&~i^IOYyrtLumvuK5&u=knoL0Fp!9du3|H;7@L);X2jm@pV89*O*!+jJqi9sOx0% z-=3`EOPkFBdQj&@)+q&19mZBlvIYja8+*2MY{(GnH}aJA9cL1rG3i8%OtkRLFs?cR zwmDM$M`3>)y$yBPVMTqP@be^N#e3mWwjXCzHhjb4Ae{fWJIuL*XN?8&U40sHfm2GwJI21WS_g&a%L298)1yVCh4!zvNy0MN7rtkBUr7JSa6R@twX>ONkSVE^2#vc(i0r2`y7d z&Z#y2^6-}}qMtl<2JxfU2fyU%*6F^%Ut)EYNY8m0H)P68fC1ea`32JQ0GY9o2cOjN zSrA;n72W6)@j=)#r|DS(Eb6oxvdSfW(5Jlq0Byn;h}Rm~C4^^sh`Z80|Ij<(*c9Te z{)>dI3jUmAt{r$XmnXFi1u@FJlOF}0si@Bg$Inpn!n{dFvh%BPglVM5>59-$N1gfF zToepE9Ks;!zcjRWfqZNXM}NX6OK3%#2n*fpfBb-B2C&V_)g>o$7Ql6w!q{|?@z}Sp zQB~EJq~KII)!a`}MZRr{ErKqvLn9y-HKpPjW6(-__(f03e~#@wO>}<4`hFXKe)D$4 z4nAsrT@QDDH@yAh=Xa;Mej>K&CN04d)zs7&PaXYj%Mk6_mf#OP3Kzn5aNJ^UNIswW zz%kf9WX>QEncM~-t~eFqA{QFh?#CXksLzf;L#)qJD`Lj)zaz91iat?62#!(o{gq$N^v|jyFp|Cm#3(a*=`Ekqr8OBk2W50&J0i?ls1NZR{T} zJi3Ee z6dBqE8Ex;0r|cr`1^pk%2FB&^^EOfy$aUzZ2dH=sD7e6XA+_p~Ym9DBvVD1jYkP zNjgRd+2WbPD5LE%wJ-ytu$hEo1kV(TXu%ofUwAO}#^kU6W%#c9rd99-h>igG{;A=o zf^Q=Gqrcf(YSjM7sXfT%z)n&7w3) zlia?mQt<8g?yidcoyKnPuaj+I+W)Y98s%N>GiaFqlMMh_Ub@9e==0nrc;_~UL8%Ld zn*U2oV|jixQoUsv^~e2_JG*_Cqzu*OcIp8tfN2EUsa*uOj|JRY#kX{0)2K#HB#7XYTUVt zCwDIJ=_&Y>h1gsBI*t7(v_8w#lFWmTM{s>!#7jc!(`NBcwmw>D{{SoG`~_APIe)2W zPSL71%057r(JAv=h=MChI%!q^LS~KsHTh(k)Nmfzv0aorQbX>UO(LBsvwbU_D0$nC zT_WG3tvBTH5Q zmEuURMrEx6ewbJgGO3B%q5qHE7YhHIFy)|pgvo-fLAW;I3s5c+AoA$>r4xei{Vg(U z{J-JfFuEsQ*ecw6)4|thzF|9K_*dIVq3C;Sq6GWAuTT)i6%36}Z2FU(yBM4u?;c zk&diG!Tp_o9}@1KaC%Ps9oI7?-vZyE0*d_&_z@IuORZ)D??s5ONmg!-Ms!9&}S z!J{{FSFR5Xe-m&bQ*sHn7`DHVJ!~BMiq%M+aiQ_UYJ;lflKqAlljzqX3`nZ5vTy}9 zR>;OiP{k?L;>MX)HBw{tLWN+3M1v8E;b2aqsBMfPy~lB!Sp|Xt ztN8P{k3bCmNWUy!uX9}eY!p4gpB!_4rSk|U6IF^oOiMD_IKP1Z1T^1bi>J+EOBMC$ z=2?&6=Ya+0*-qf~$epL&r2PTW?YCq5f4uMu_&~R96WPbGK>bw0X})AH3~q*so-37hDi+$&fPg11Icn0 zxl{Ai0kk+Q?0PATt|eM=#apT9JE_Eh*FcXUIBwR8^QP=iP9FOna*AtE5#{=$#vfR) zcnA*p(r|dWX8g-x-@EcV?Vs|!9lwvAiNnp}8Xj*B<@gI@jy0#8)*%V@37L${B4+pz zhnmvBh-QC3SSfHgigh#<-PCFb8AiYPCI!>x;?@5blL*WD-D0gDu@nRVa*+YEt0^Jz zGzaI7fDq0XznL67UsN81f-dIC;m2Vohxwl6iwHS|Ph2z^2O9^&0`(J99qd2z!pB9# z&k*`2_POFi`uEa5#Zdk!ecPHs(3G!a+k!65;Q(OI=2q9{6@na4E}4)C2jxDVM#1kv zaLa;y8J;=VS5m&>!PKM@6jS<e&NrFY9>-AAGG?hBIv( zqSk7@ozgX>C)xQ`wWUY7y_b(E05AWg?uBm%esjcoMY^%^Zn1Bd4hr@k>=@f$d>37? zOM?RR5no5Q_ZYYLdW;A1L(YmCf1UJ0uOL8ngc#?>;O`q*<@~^E#=vfnH+*ULokSD2 z__AXM5z^Vv?;vZp6on@m;`RZ|k0eXRaHCW(4}VO_!17k{4ZgcvOL~*hz}-GL zvF0tnF+MD9ZyUvr?VzN%7-t{80d0o#OOi9u9oj!HaB8!cIV)RAe?izgd8Spw@#sLZ z4f*|&jF)=w*jX&cLi1QCXsMV+!0O&f}u`s zM%`HTYB(N6Q8H24h>`<|l1`$e&i&(mDgxa?h-W?teJ(KR^FYA_AU@2bm>u-at6&vX zZVI3dltM7ev%=1FLvES7=y4vDOj3=LtL zShY&J`E!2sX4NWh#~VFawMv&fCF6-UHSxc7XqB`N(5qFeq^3o0R;`k@GJa3SGjB@x zUQxcZ&B^0Sw0XNt|4Y51*`ZYoL4Du+AK+`N&BF=p;Gq|unWW9_e*x%Q#a?{xiSMvq z4a6^{ouy4r=9}eznEReK{Yx~j_uWYXxMzcodu)2|_dqb$j|AEBrQ|5EY4d93){5cU z@Kwu#bXKu$tn7I-;>OC;&uB@;ukL~nqTuawoL#RaEyC}HkQ>5cfK__)apWLEYbfWt zCDCQPF=ZCTlo=6IX8J6&lNR3csHhy=A-f$OI}6W3A!Fm}K#RJf^BX+De@neo;-yAB zevEzpu>5Q_Q)mdo54HYWHEaESWBkPx&27iujzuE;Vc)4}z<1w-FV*40~4S76ELyOay2!Dg-h0A zUV=c@yzcvL#JukMoyPHR9A(YS7=tk{yp>b=qS3SgrW!pldWs3D{wr;cx8my8nUVVS zhkrL)vDJ@l^mF*vU^YSh{?UWh57U1qQXxz?_3MF&=)YFWiRsr7?K=}_f8$H$%nze| zJ%RQgN}zok_(t15tX6E-=X4V{A@t&Z+UVRkiu5_&Du68aQ71?aU|0At$DkvDvGs4( zdcPS)3~U~Sf7y&L%D(bwu)QezPGaXXFNF3NH8l_M|=(BNv%a89v@%{Zpa3_iSzEOQI86r|!@stNL+9r?1>|N4f#3m z?O6+JK<{tdo+bHcD0kna9xh-*-<59PWhnQJ-uJx%5bC%Fq}K>Oaj)xQ*)Am$EZiW|4_JatA6JW*<*w}{*Kmn$Axq1QrhFx$ zF4ToWj=XAxHf<%oflD~Fsq^>*ZDRyKSw)~R6!G16Ev{tFmg8`jXO+I^BfW0_g%zJW zFv~9a)w8o^5gppVmwR>=4Hjw%LPkn*=}CFz`@5DNFINgT(#@Kl$vL}m z00p&;!=m0>nWf_i{N*9YuhcU53O$l*P@3z)Rkonz&9dvM4s$lXiRrdrI8V!1sN8zq zcX=B9bq)vtmCL}Z**vutPHrz#@0CE>*;(RY>T^7QFVK*;&mlh;H*^sEEV)6XVk{FB z8BUC2;@+plkJ3Eu79$pcOWpFfjDl8?h@s`QV5&oMR!IB)yTR^(`u*E-YgogXAwyC6 z?@`jfR+SC&0}B3aKKDpuL1V62sM3$SSDf8?b9R|BQp*Pz9}F3?1=XK)eK_vZJ?kic?Q6k3^*!rxOzn^_JgDm1 z7@P0*bv?&Y7Ylq{I~3p&4DACgS{2Q2uH28bS!Zy#=zOL}hN;jD@hPXcS!#0Ta(LF|!DR=zvasgjp#9wC+VpzJZFJipLc4I45tbO@G9m-J`Ywiv;6Q=r z1J|C9T)<>^??#@Ca)n)O@NLO~Ko__7FDAZkw7yZXPDdHH=P#y_S~-QVX@NZ)XssdQ z(u3QB3jo`qP=xill5@-@Aw4x_AV>|Nq%u_}o=+^4kxQHEc;DX-_+V9#0_U69C`oVe z53dBMe69eiVMhfaff*2(1)l%7`mQ9vxZOFI0?)^;JsVwh2N1Snr5oFXKrLt^-vxHa zQY-R)@stNi8G49rzxA7NPeYh=6EA(2fuqS zbux+u0Vyrb%hBdO(6-n!w$NGq;8nEF5#M20pP|ZwoIohXOmwv7_Fb)$Y;i_)2U3Sr zU*B;^^{qH$RGqMx3oQ5`9H}%R zla5FMhY>RNHwJT=HwyOcfd$uI#T3*sZIR>9}056(x&_Q z;Mwfz`+=+O`wI(t|A+p#<`TKud=OkecdlQX`VSQ5T$ZC}?jGVWDN7Raxf{4%F0V7Y zz*_`^(D_+9uJNQ|&*G!v%5KP{5K(Y=OH)y%NMZ%P3A)QS#_8@GaQF4&N5l0!8+F-? zAG_LoNL+&`D;6e*m~y#)U!EwkFtFu7!u;+{g|~(=5EqF#b`FmhTv9;mVceQ6QR3*Z~|fo zeKH<`7mM4o384{;G4kj)`XB|`$oGP(jT6rn-PtT48r1f(fX z9ptB;c&@QCG#XQ$u~!8A%fAa*s3||rf!RUHkEb6Ulpogv=#-y!ASE5n#C|01_K_5e zBK!08tW-&7WbI}7iV2wra_|Voc&V>z8_G9&?z;PPLFBkSJdi42T^nF@gwy)3j^iPl zs?R;3+JjvAKDVy4MrlNGat@?X2BcVu?n^lqA~D=Ujh^Da46%TpL88g4*un^;IW0N6 z!7Dix%AD3@W@KeVOh!$P8`NNBNW%QhDC0APWrqAxTh@>5@>8BTuyWKaK-w$gB&y=; zkerPW{BlQp$V5DQ^uFsj|31hCM>69)>Am-h6wIQ&PPk19YK&*Wf2wv5vJ)9a#s2h3B^I=x z?Kt&{{ifTm%d^I%U9sAg3(@m$GJYsE3>aZtC$7h;O{*?pp@s(O8+{Q&I4HFOWX0?+ zaC@+4d?$voJ~0%sE5evy3dU1?5G#ZCKQ5ux10Ztft?PyhEg<(^4fSNTRyhXIhY09_ zY|4ZNk6<`L?vYH%e_iPw$QPLfU@d39_cAd38CkFJ8S#&9r7p6@_}~Yu2d}x`AhVb) zb%`Gp`=POwN{2X-k%pD{#JL#KV4g_%1PVJ4al>LD4$3`F&__Df?@lnR)K=v{(cPn?mbXlI)WeR~2fXw3dyibgnG#iL~oSD(oMePFv z)wuF(noGF}snxC3l_k^{AgUk(0IES2J8D+Ncx@^sJ^7sLhP#=&KBJlGT(bWq-wBsDFa0SVx~pZ6rIUyfnZ?LH!PWq znM%t;?8R&a8X8(rJ?edzg@)zoy_gf?2rly--^J>QYtKouFT$Sj{fG|8qL!x|Z&+9j zb%qSxzaMH60Q89n%j4!Q%Iob4pbY= zeEtN>>k9o*bq=c1kdu;JT%%Pb%XWM^s}{M$2a%Ih%rhwc-9u(=1}$Cr{-_DuAon zTxBn*9+oULXxja32>XStaR0Cg5`z&)mnQXKt2(o2ufY6j@vO9V;f}sesk+bAhDgJT znmYg3pR7&mgm!5&soR&ziLm+V%aVovR_ssFrhN*rA;0=+$hJz{Dv;QOikCtU5LHO2 za(NY-9j-Po+dyZ5;%w?Iw^91!4HyuIOo|{hItGU*S{)I9OG>EA5@Rm4D4Ex?+CK$0 z5V!X_r`vNKbhbB4+E$LQpl>apZ|9&*sARgeyhFTaWI;}xn3a<6xwA08`hj6??9pm-1a2B_F*1(XGA@f^ajeBPLY<&h5tNuaE09PBCn!AWJ^;wFgh1+qI1HAB zBKc@N);`o10a-y+q@|QjK^)0rX53)k!9apQI0)dxTXVAM{nE(Cu< zZpye}`PI%8k;)A;@usMn?ev!SD1TM$o_G?p)BJOsLwtH0+)X{lnODBIrDRj2a^Z8V zJ^9ca?Fp znJ&dAqj$Mso~+MfNuOhk>Y*=tsDH%#h+w?NWB4BIt^;3GcdMWu9(dK%6^)(2r)_vL z{)BP@zWv6v@(B9)nK45iKXZG&H1hDM4)cGBC%K=X#?N_VAERkb>K8EAQS=Q*YFU`TVs%jcwbpBv;?XXj(XNf zctu^i{2R-^q-wWTHS5%*B$#6QS3{Cxv%Z=}siQQAnu@{0PvY_7=~&~tYj92gec-ln zI2Hf~vpZO{#Jg}H#=>I{wgF*%J{w`m0Wg*EEGyrES00flZM^av&H(WbWV87c9m4-g3sG(~zhe7xP`c+~!lq*I z6TLC^(hl6?Y&Ou-FyydUy~?fFSGf;WOoWH|=$|gT0s0EZf$^jw6Mg;z5xa~R>6eDa zB##jn28KFd`9QjHhuHyN)fF2EMrk=O*^KT$raHJChAI+dSq9+Z1zpcnjz#xQl{NN0 zDQ|Er#N>F+2&tDR*&x{*q|fmU!ZR6ZUjrJjOOTQy`z?`$%w;kP`=TIqI0}N+`sX@U zOgTFVHnkN2=zW$L%;QvV+B|$Q&U*+=g8tQ_68RlIA@TtNq?mB_zFNxxzx8F?p@h!#PNF*d|cdmcl*6+`9uOKoX;62>G30@5>S7hhGeqYbN(FOtbpP&%n zYE+4X0J0e7%7oTm?LFOFE$i=nMXkb4ZR(gTjMZBsd#LX>urvhCB+W`19HI(5kFjcV z&p#(0OWJ=3;Mc)f-cqhr{v(syb)Neigm|7;sDrtTxU@L0t}YcJrp`&GcX&$jo5_Ii z5YGq2`3NaDq!Op`jO_!z@3%{j;cM0T;4YN!{S4+S;keEb2k`7gLjhXjl+%SIyph$2 z&!7!&WNqST5bf|B!((7MeQCGuqbnyAQheYNtTzi}8>3W#JhK36vVf2mpJUeb@DF6j zLEWb+TkgC@_E-^jqZb4gstL26t?Y7qwQQ_nmtcW z!$_Z&o{gDbaQi~CV8gy%7Y3=_fME1dC0ULvI%eB;Pts= zAF6=942C#lpDmNdkvoe(&>qOt+DkQDXj6Z{`Q+4;-u(CqVXAxQtL4UT7BuR8_tX2p z)w@wG_dbV&C50o#D%}Tr1KUJsdxTrxK|^9Xq$dEjZ*R5Y953z%Y>8NM_a6Z@VQ?4y zS>Qj&uNIyB?QDLu=&r@z793}iH*?W@8mWIh)RJ5Lt%x(?)=^9TKB93MZ;L;aGS=u^ z@DZU7SRM;L{aMukUqcIi<+C=U>&ePk@DfyM&4L%#Ee5?oz+k2AV9meB0c~d;OP`0+ z!EXMZ=$rB{GITu6|o7I(|3^(U^MzKew7_BncLoMC09m z3JQI3f5nR{!Jk<9XmuI}x1GDq z)F1VVWe8QT6uK~($&zY~-kB6QATL#2kijQYj9OYwoWV*e4(ok|%)#v~C)T+8E=9Q+ zVrkTK-vc3d?^0j?Hn>)#P5s;Pm~8G2ZTe$)aQDSeOn@W zo!t#!vZh|K@NrBnskCDaSWXYEvZ+f_lCYre_}jH4osM`N^<`7Z(D|P>Z>)|;mkeBc z6)KWXX_dXgdwYAk=o8ti^NykMUwURdog^XM>arBbeYe0obUaH2;#*3?{;dnBwzS{ zs3+DT|Nn#PiLas6x`=eh0;t8TIQvgzU)rI@l90C~3AIA246-1mDMKrT6kfb5F% zb<}AMBz5mX;V7psBu0Y1wP>?`hbM);m1FU!&BfI~rdWSxC1}lH;)eItMoxybCx9sy zPgz)lcc6SFy>rp*dVco2N_?vre6lsZhknoT4MO!f_@I>Rg?vQLCP@|=OgyhXkECMo zmz@=cTpX}JxyO=1 zUrII~Mt2L*R&Y1p1EJa&_35EV?$-1m-myCHu0Mv!&CgeRyqm(I1LZh#`dbuX*v&q4 zx38_jyCRY19u76llEAtJPpPK)8p65?Sn*=EZviV~`~DSGT7`5LsXMb*BydK^U`?h} z_&7#;*(Zkr&T=gX999Q#dYCidt37b6O*x7X614L&C`53Oe|LU3s^(EgBR{ z;r?^F@x+q~KFkQg=T}(r82FsY>VVHQRB0uAEW?@cCESr=v#!Agq*I8=BfiCTop7uw z!eD|})q`^TF&`_y4U5YoW*tqy;ip&B*cC)DiNpgruW1+f?_9k7$Vium7N zOMZANNx=_a0lzb(3xOX?3jD4!dtgQgekVU+1HbKQ3VuUTr8V#q_E6QkBVbbTU?yCA zMu+i-wp!I-XyMx232ksQQ>#peX~J1OG3#v7Hcw2b)18`ZK=KK}>5MYGHeor37jK7sCi9#>1oSNkQi#IGa{5`&c` z^f{V5z>_bV(IHSkEi2Y+LZ}0l2gX15nCgJ9p%uIDF`Lm1Vr5|bY*cB@iUkq7=do&t z7NZ_RSX+j|3ua@$xgRMA#b?uVI|f0->Hv|$oB>}C4x+u%Uu9OgtfS+dYV^2_&Mp9v zwsrP^Fb13KE46(*czrQSdoVc{I)BUp+b2 zSbXe!rG<|V;__xVK0fS?z{f$e_?h^)>Jd!+o%IUXM8`~iiblsvI|N}(`~$3?cr;OT zOf}K5M!~vhIy$`Jdj)IBBdq;L1v_AQz&gY1fUhA~e~xR8F{68ll>uu9sN*7(xNlqc@gJK`G zYd=}%nWDI;}urlDY6;)aV zABzv&O*JV@x+y2LtnE6BV(!Ch6`bO4*Y=?qusT3>jX49p+JY*0B9mc)X^sL@uPXGI zv0s5m@(7~8whw}ccWL@^VSFIlk z;0Vqry{0>o&vErwglxNf1cgDfI?#>Pf;0$aGw==@>O$6My539;>24~sb?=xOxq68u{PXUPy}w8&Hg`DNH1)Hx7~Oc@Yfjm@jJB7h>bxr3O# zMkWUlhb;hcUYe;8hp+aCqf`ycADq7n4E?_xJ>K`7LYxsIDYs?Qmj2(!#-ab4jq^2x zI{SP!sI#OkQHT0J>a+@XED+(ROCvy3gHD4WYIxX^?-w;5YIhCfP?Q~mZ2(BqeF{i? zwFiq$Wnu{=Pu*{eF>YY0St_u7DHJSzi4ji}NpR5C5%>e%Hfnnc33-1FgZDy3LG z<~;=`NKkQ1&D&dGyembVa&Rib>3H}zn)BehJ)o@fOQ#8_ccjma-7? zijWsXF@FC``9U~IYT1InJ^s`H5l%v7`a$3eTv?E5q?;`PzU+nAB@(LX2T{{Z;G%ui zP~b$NpBp`#yvnloh4>xeiSZYj@FkN$|9^T&;QJK)Z_t(G625(<8-Xut0KOxn3)rqA z;CqtC2EJeYpx`?MRpP)`re;FZVh75ppb@tasouc!-YDwRJ z0QmSey=eds$>V~K2z9{nSkURyRR??xZI~;k+l;O!D`Ufyph}ztwLS0$sOs*dePj@a zgCRc7p~BvBnG7}Uw5u$aum>ku5KFJb@H@U8g4fOb6b&!WfgrrtCg8Pxnwkz@4-T(t z4g!No=T`PP{xAU@KDk}NOY#V>KA{d+9`L%>?0~N!c=euUGrGWj1+RQmX%)P@k5_Y0 zxcqKy3b-5qe{K-s)@x!FI`gHyn~D*STEY?cx|3P(Oz@@6WA0VRl`Duljni1ivok~= z;Jna9@*0hflCCn6kt*-Y1>D|qeg9bJ; z(uEUV7=_$8`0YH8daBr$uFdQ%vx6M2&dj#Jz=sw1{T##cm#4-%e&Ny|GynT3&vN$dkyHxiesoFjHPCd8Ro!5y!;qJi2td?oQN214e8;);s z+mbiy6n6f!BS}kq)qE32z&D{8CM|*$3(yCC8NB9(%h>$kCKa;} zvszXLL;vD!fTG|%s0vONNL9W%SHo)1%AZwEP$?__DBKu_p+9F_gkkmb2NW=UjtP)N zjr&P-p={=(@-lt`+>1bWGBCA@!QXysE|NP-4`dia%Ly<%E25K$GNyYn9|NTv7f?i5 zCyyPA=DTvV!8Lz2)Z9SOoONZYIiX>UQSVFpOIh>~?qeNr>bFr?5ggSmw0zH0KEe~3 zgVnuH%3B40aV>}-eD*nJP6psS;>1XT5dz$611!J=CdUA7Z%G8;UYKA3?!t+f*?EgY zfSbur5rA8?D*|w7=1k)NZUO-(JJgBMZW@E;H_|VRv{{Jt-O?O{Da0fQq?7(WHCe&V z8KT#tIE9E&3}7|DZYB!10(PK5LZQdsZ0--mDtX`DA~Fj9-v#Z3&VJ%Z(=tfKIlJRWe$RoE(HNCJ;fw)!?H5bUw6`xtR-K`wBav=T=v^t z8iToeKsAvap}YsO8URIeH=d+RToP|I?!bkFAPQ#7NZ1URK?g>*AZ|i2$p+m3S{P3Z zN2q|POx9L&f9U_??S0_u9?$>(q-_XmoD?NPCkVor)Rcr}l4|RmIw4goS|&EKVk|VF zS}N^HD#vju{%mV8pZc?{Gqd_LP5;bNwf?~f^{3eAHnw+UC^kw*e$Ur+-|v%?w*G9N z&+nT@d*1)a2p5z*-#th@`I}rJ94C$9Kb;VB7;BDBWIT!E_XAICXQG zdWh(ovbXh-Khk=J&uGZC(OecyT~ls7X?V~3pArak6336iIGRR^C@JasDy2xxirVGm zQcc9_A=`bKv?@P%vFFEB0f~Q%x!LuFC_325msLz7sd2rK=z_?vpOo8Y6~|QTCmK14#Z?85q<^xzDxLSr zDx02u+`#m7__xF9$;RB^GX~JzKeNVMHjy~`7}if8Rbsn!>hRi@&SH^5q_tas()@a6 zd^r;14OqsdhAxSxI!g7X;<2emy9l<*PV_1ZF7OniZTebZM8JOcg`Pf(q8m%%N{)g1 zG2x6NE&VA9#cN#Zl#1h6p6~)-tx?m+{`K) zFISVfw_`vb7F@C94A}dRbgLm+@6UUb{FssUDBDYWwb9(!qJB^vN|;+t_4iEjXcgSZ zixRHb^iTWxc{HWi$u=BFV)w?Hg4a&>?dX}b1xL!J4!^&v#KVpZ zmG`9u9G*Hy9zM3!W%-TtZbDJ=g6k==_o;!|pV0oUdTMa{yMBx@+sc~t51Gov>X$oZ z6Qf1B@e6h@*tON1OyRvJp%z1oYLnSK7I5Q4Bgr?B)(RTjvY9oPXN_U#nCH>?cp^3p zkEV7$DLterwqnB&f*}lwrcdtf9W?S8s8@=rA}|+56Gsnj-Z5SQw{5+UdaZ^HVO1N$ zn;e0JJw;!HUu~)lxDvBY)jAQ{cdGTl%oQ5FY;VY!5W* zx8Ekma}3Xmz1EY#;g{Lm8cz+Xv9Obz6zg$afU;x9vD>Ai+U z)04XsmDgEGr)dYRo8oRQX%UdbpqN6>UB9PHGtO~2xQoLbw34BDpuZv|#8zgxe65OW zpwhtLj$m*@q|l)uGHkGJg`&u?LAn)^BEy6X-v{YvUk8B}BXcg=J|`#a32<}*v1!y9 z0*qrZMuWofMfe0q;sodv0uL7}m|{!>y>?Xj?;*Jd)(LSA6WXUZ#n{N25O(n%a`=dL z@SsMR$S?`_Y{$MV;TS`sSjn_#@-)V*nwmVVI8k}}8)71eL@qCUWMQ+CyGLUsGYcIb zIgPeClzG;u^^M@mk`_?X5DNUxTH2+9$d{Ka06XG4wZ?a5Ju0Gy^@Q{+tD_~M#}M=5Bi(mf@1d)9$;{$<(BgPpE}f#}0to-~+>A6CC() zsMzil3)ayeCucP?un2Y@6~xlJRxoYa7TfpSq$bZsvvrER#0MKSQk6LDS2?5zA;F{X z)2WoyWgp$4Gn%~`IUFKR#6}&WNjKLkqUV+SgSQ(W*&$~c?aUduHdy_nXqB&)gTU1; zLIb||i&PxQ5!RGgz178)O=x#n#beqJ3}In++LR~-wuyW^WN`KG zv^%X~Y-G&a0#RiFMs8%zo4nShc-1l{*~6x`HwmxzgItArQL0$t<3W)*OD)wsma4kF z#`ugcgHRSXWPN4Y)<*5>_EYKlOcBJhsLx775k&9MaH@DLGP~NoOsTC&U5Nl$g-du} z({?qf3-fz-il-`{3=RXpL!Z(my}*QesNIml=63@E@Vf-6Vtqbcll-VA*^8-8VF~8( znyuTx+6N__`!zMKJMcclquhPl+U!NRcI-!Nurtx+HB5`e1d!pRVdr9r(SaHjD=JY~ zYUaU(d69&3r-*l&oSs@VO&L<1EiRwL-bCermaoX^Co?jcB@Fw_x{a=G5it5g|9{Pk zD~kj{aDZh(Txrpx{82Gjd@rxa0>gzx41g zO+nd4w)zee$60z+@lK?zgFKOk_6X*_rBN+40}g=Phnu5HgNU}#DPGt6jP7Nc>F4wR zX_sQsTYZuE^%{U5{w}dK7TxoDUyzzgY=Ck6SU>^Aj97As4=51)T6b!aZX45tj2haRj4U4gQ0~I2$r7YB}G%-`z2lt zqtcF^JzTY5! zjdaw6bd&eoWmrAaBTh^r3G{TDMqG5}N^9SVNS*Vus~m72PoGn=$qAp!L6!sL(H3>N z_(?chI->)kK^Ta4;2CN3E%h^Pmyt))+!c^ex}%W3U{~zOuIeS~h>c?-_nC@Z9l2@6 z*w(ephii(6ZdsQs3~l$zJmF_*m}gWxL;zXYNNc0MONr_L=BZQQP-&A_ke37s^WsFh zXieWUw!fiG#}i2SFy@0;J4$_6;H=Awyzv^Xip&?QpzL?^&g+As;boUxhqFX3sMxs3*ev0aAbYk@RS@xG14`l2wh4KH^{_+Zl z^kbmjks1g=m@tG`mt)`PH*(p*TNt@+7J)@>TG{$Ci{x}^8GRm%UnJ7u!SY36d5(~c z(#)uiDNCvA9I2%9IyW$C*5MDdDkpat&U?_6S4xtfhz1&i(+IWb$pvc2bQ80rXM*Lz zY!!-LJw3E=wCkblm)1GK+!K69^bGM@<>%sePmKg;-&!>Ozr*jP^&YpVa|FO-2LOz@ zR1g(+^bQZ^nAx$5^z$9XEe%bMw?X*8Eowr_x9E}wzrb(8GU~uBcZyT>+bl4)3cZ1yh zT-2YPnbx$xz(ECOgL}}}6ULnuAWKx<@JFd}whW{dhS$EQZemO@lf+YV+DYTo>L2OW zt!g3wXi*ja=hG?wetGXOuF9iY)jY1hxLQ^intgGZRi*Us(chyvh^1nZ87PJ-8zR-Y zq&GvkRp%ma7!c9aT)`VnJuEmJg&DU@tQ?|7R|N;du4IU8yMux|!fs#HQbg~PuS2~Y zcjSxlO+-+0(9@)2;1b+37KyJVYTvNXzKCHiGCM)enu^CRn;Jjpnf`6L@qI9bbchn- zNgD=O5_b06a#b1F@Ip6J!2*g1ek}+xM`ws#cQ7=tjJ}%HkS(4~i(eZ&c)p??tqs1< zwUfd@8RAJ5>l5dBnT8j^lX?Iz=wIA1QF1;389MsMp9rWZIN(t91&a1CiC42ZRI@B)!8iXvBko53l8!KPUR z`A$A&av@MGQ0{c)FW5BKSHc?T@TZy~k#uFQdIl=Kyh}3*R>ERov zYGADHIoKsRuZbij1C#vAC)u7PPU3GKPHErPj-3x5w?TI_mG$nz%Y)v6nqPA-3z}3k z=Hu02eLatYUtpW;U|aqyu-#{`^2!P*?U%~f58GY7;<+U874JbEV~2+OGiJDohLFx` zKS8xOxR;A9^MKmNxvI{6JM_OiW?+5K`ue`oU*A`#uUQQ(^hs^LOAkNqlHGDTdZl|` zb{1dXm17Km>nqVOqk{)WZmcSzrN2;-VT(ZXO6#WKOZ7TkxojN>SY)sAe!U~*+`a8` z!UEF6Z@<{Ot9K?fSJIAPn$KZ$ksh9OP3ZkL-#_lCN|LVlcX@V1h!*yUQ>u`_I{t;)fNRxcUoCDqoB0r^z!zo}| z$euFH_qyjZQ$QV4z@N`{Evx&~DZmT0GLAkt5k&ubjYue5E3N7;ZVFStCB8TekGtSc zkPl@Yd$uUcG06-RJ184dz;{UhMW=ueJI?nf(2=H0O@@;CEm5-Lx3f^f{((C`6DKp^ zJ$_oO2Pc21cQ~ovHcn=!6B@&5aly&p&KIQiH-eeDXrfI zTHb}x2rVa&{y#;F2z*6wAMPt#&IJ8>sx3YR1=U+k47NODnt-i7^}O+6_B^5aVV;{G zO0ZJ<`C)^o9FD$;EAkCtoVamfah4M3Ogg=T@hVGo)G?_=mi{FtGP@Pmt@I^>Pz;mZ z8>=JtEwWEHJ<|G2({qZ)kq>Lrv|((F=|pz(u(DX%3bH!81Vnn&(SRlUtUY3`Tw|}D z!BytV^*o!T-y!d|^oSeee335r>ywAe|0XzwxEUr++{Kip@Rq8!#wi;pu1l%h6jxJb zQCuGx+xkrNp56ezhW*2L{)1&Zm(A?%2AddWJU#rIG*!l5dkl@iY3JH5<8X+!!8NJ& zBBm}*&yBP#W*QyK`mEWH#`30B!L+JdI-`Om()N2WDOMxAbTISgM&|CWX|EbfSMK1Z zJ+ulS9LhS0)~r4n+10ZHNn)vaWp-&V=fbGI?La8_!`s~m**lXFCSyqN&;7W{3t5v+ z2hgZf$!_t6F|Hbeue~nW?B(XKWs2&1DulrT6#Ihv)|wOp{(CMqNG&SD7^joh0@&C| znfY&lgATrFyw~wRJf4KFMCG!l{rH6)Fn$Yg0Z_teHiYIEtF_6=`6Sn^kIitaU;dGW zGoAO+iQwQlbBQ#G9O1UX3S|_#r5!vte`u@4?y=tyV$p^&`Ey&;APyFdqTSj7v&&qEIvNhnw+Y9cnB`OxuLay!2cqt|&2>jjD0qkLH`5~r zb*o2qP%kvH|GOx-e6s5kIN;!D>QnoqMc`9a9epychN`ON_ycFHGlk=sr&O%FX8^L`-ZN` z`&Bu1vsA&ox`dqb|C|VHL9GldX~LI|D^jrr0A^1gsq@sLhwQ67abZ|1*Jxu>-wQVmo55Pgj|MvwgC)b+`g7A`wdzpa))Ga zL;O+Z&*p=$i`C`MJY?B9=v0Ly)KJb=**H#JfqIGHe&Wwa%60+mLe;J7|HDz`OMWi7jO+i z%byxeX!+Wz!-<~-FB6#?pHGf1PgFkinAlrk5IIfkP0n#u?r6?Qm?Wo{=QIzA_Kik& z7!7~Z$z*B~b^(}qkGlz51%~Kz2rgAw4v4L5vo6@~Gg7Dm<}NeHOJeXH?Noz5JnzkJjV6Y* zSi7X!k*QIW2|3NeRy+cpWqHT#ON z*~!hBMpNMXM}oGCmpQZ@Y6Tax|0zUU=lIV-TX5PTndPZ$bP9?2LB%M~T6(VA+Qjp@ z{KM$e*_UgN`0w~fWKJohY(qQok9t3Z+az!bz(yOtoO|KM@84`FT5numD@nGGNObd?8 zvzsx$3~%sB2#UWZxO`2Rf+t5NKYP}b2^_)GgxxV{C2yqj9{Z5fwnupisLcd}eDd#5 zfK`?$YBEKUVb@Xg@O4Y*VPLP)=-AJ7^OW0tH;;Has&3Xsl<%EH;_v)0j6XJ(q4S_V zN^8t)Mfo#hJ*Pt!Tj&=t>hP1*&9Y)9*&w-P$m-rJGee@38uG@3^7H0SCq=q9v%|y z($89cvh{&>H-GGpGUexwjo{YJAAymJbFN|@Im)S{#u~NO(b4>6Vi6sU#Cl+TCD!_vJqYQRo8{{pANflCo|Ej3-3ZgHT%#lHAb^71L2{9kj{ez z(VGuHnkl-S9LU6P+G6yUddlLHwgJ~HW$vI;UnI{L=~OSnNj_R6_+~w-ZeULATM@5V zapll>YUq;<)fK~<-|F3g<7Hj^Txqne^0`ztr`ccE|KcY*CmW{>0FLj zqSyR68C6y0Sv%e~R6!-C*XaaX?BlKUA2?UpEz^sb?46H_*EG}DYmIPZSGZ(2f54KV zO}X8{?l)V-RjLZUO67BY|z}fq~E3@W(d^qwZW{84S4XfN$3jYJ@+yM7!JAA z%^gNg*UYoa(gk)w6bXhOsWZ;~$ei_vh@hXS2;}VODVRIE&#kZYR>~43IAmH9xo-;| z4+o7LFd#;DWm?g(Ft=&f#D-7WA(Sl|^C_8~xRv)Loy~yjFbK@%=-2wb8lx``xX$(U z31TCbCTv?6X!Fi4-`&i#boak(;hFnw^P4uSCUl3@b5*<0%2$4M645~>1ar~4bo^1op@!PxyI5Pb>?MYj1G9EAR^<-4%Vlb&`vb5n#`L;YQPONU(w#Jhy>oj{-U3Q7 zm14hjpq>dKY=b%ixmunPN+A}@BZR!pivnQ-wBz&PfI-Pp^m;Be$rZ7KHpMDFthVz? zY9c2-g2#IEM0O(Jh7jDW<^NV%?vT-HOLkjV>JUn$%s1Xp1`JXhBt{ts9V@BiDjj}t zX>|3RjZ}@!3uQelD59x3f+?yq_f7|k0N2fPJT-TNUh5pZmGOhtDB^#7pY^N`lk`J& zqhRvX;siVYIg66bF~RQWWvY|)9y)34$Y-Ltb5%0)mvq|Jm1@W~5D>3;swPsSrbpWT z$E8`Mnp1PSxaa`PgH~(Wm^+(~INnCCHjb5gcp;yGw$oCrh#%DDP9<0|n)4na3YI8T z3LeAfy!o10x}2z4+H2_HlWjT;JMatO62k{s9Nm7AGFLEE$+EOkODhpcahFT&bhN;3_5eXs{*OUpXSdakMoXXUDVH}jK3Gr`HjP>189 zzck|}qYSNh>FvIb-XZ4NAd|M0H%3II6~Yt_iWuIt3W`DH8P&jn7`A7W(P1l}W#KdW z%yA@*6|sBJC&^nUkHXZ5XLWJ!#MOg1IMndU@A->uC^GyX=5dqHstLSsXfRH|CfF1x z`*&X5epb}!y6C0r@E|uVs(0yDX1B}>l^>ZShhkqxo%2sa07sC5?hbUEx-9zH{%MXA zNFBX9Db8!m0JD!nI!KFs^Yz~BF)$Bs#yXdH#k9+f6>|usM)H4osB9*EoA;d`!v+4AQW$7 z&c>JZHSuU2cGmCi=|(G*q%ZbTx$}cqi6;T+Up|xp*u=WN!soCTDLbW-Rk1BMRyG{^P{GY_4&g8wXXcc<;Cbo*HX1!bz0X< zD3&axvgDWG6Q(82FPI|}@#sjPzo5*&v^0-Aci<8Y^pq6l?5;jL{J&Y8+#Syo^ z-d3DhBePr(*8N>}Hx(Xpvu=CN;zzX_rcyBn3#jNLK!gc9t)rA8o!4>O4(x0R4muc# zRI)K|O|9co^BuTw7Wxk@d@xjR3UBg-S>or|F~uxgsyu2`3BqcQA->feu$pEG+1|TT zC!;)DdQ`xT!Wvj!&o%hV&H?9F3BPp`%F=o7d>QYUYkv-K>4M)2<=8|+6tn3*Q5pG- zFto3vV(T~b2J3QGPX)48>I6~m5y6})k+@4HzX6}puqENWC#r@Xv`1juV6Vext>?l>qrs6Ls$r@%#7SxbGddj8k0x+zBLF7p zk(R8+wm#_r(SKp^z&AZ(oPYstBE)+-66EFB);Wl=x~>=8uL%zOz1V7Ipp~N^HP=~# zi7`n0nPOD83*@7NZRseZrGi**#0Vu_aQ_ibVRBqxJXODXzpJ|3s%DGP=ql%MU8=}R7=<<>MtGT3c>PX-tJ9%-wBxU=?PcEE16hwub-{UXqX80Mz*^r-9pLiCXH zZ*e;?^(|^UFu!GRM1nq32dk z+)eUtaEzTV;lGBsV_Lw5I%ZHeq$ibVkVYK2cBSZ(H$VVK^M86_WbuUW#8b02sTHZD zMsYlKy~etcNO^b@4R7kWkwHdZ$Yb|H57^3S03G$*%kxATv~*c(*PBW#A8alQjbPFE zn^1YuHc&a{&qJMkaL=2!L}&he>efhb_BT97J>2c%u#INZs4{!^YCk%kUZiZ}2BMQG zV1YyHx(z}rGXVtze;eX~d)+ogA5xz5BU98A&cB#~mmC=~YN-^3cvkBt_iYO({1usc1O{%cdbUsTj6^+A0x&Qpkr#u*K5_so^^I{n`?x z=kXh5hiWG!PUSbbBUI9PyZmXVoMrGO>kj44EFfL?6w3$Vu)K`g%H6;3bwm8rqdj*S z4|kEL2rGAT-_guGTO%=8cPOaOAkN;acY|dE-dCf%#mI_Xk&ohx-Ac3@bCo6$JqRuK zan_?#fCEu$6WlTLHcS*;gh&zjdxeoA%!nj$wJ2Ek<*oEVlRr2A>wmX?e~bo% zX(d5-(SI&~ey)7`@>QAg8~=;)wSFHs;r3NX+LWMK|8OQp_NqBmk3H>3=Fw>CbjX!c zliACJR6m^=+}1;N5;6?EZynunMM>7mEM(fEae^jNtD+jCX&C_02>f!2eHil0ah9y$ zlrgYTY!tgmg{h*artab9kInnM-q*{a&9rhls8(%)7-d%TS&JhdRA~0f~U2O=8xe6 z4JZy~;|wPtn32~u9ik6_VzIV%OjHi}rN;fvqVFU9EHFObjeKfIDBf1EVmJIbKY#zs zT_qbb`bQb#)OXQ5ZoP{IcPvNzjut}VShabMrmxxj1#X`fUI^TS z+3gEpc;SxWxR+@lkFQ+U#cU}g+#?lR7xS=Y2XRNQ2RWWV1ZrcE%fQilnz1948855 z01B}VPtCLbCU;b6YL%vra#~!PcDu~$(1kShN;5@i8l$Nw1GScG-86mT=cbYtOXpTZ zTc(|z)3ja7wECQ;vz^O9)9Edp8UQ&>2VsnfSwsEm2r{1_AFBM^FYx!h2a@pAFOU#u zYNLrIu5|6U{o%@CKvdvbyJ6;rN>MsQOoCC{KBp?UF@# zZwy!umwllYe&k4GBC)7FiIfU#2bQpy(|laZk_C2iH1M_Unpyv!2OC1)sO1|%)gN;T zfir*P%iLF$qH!cw<2^p>Q56S7sR>~HV!3Se_3j)?bQQ{LH~o#>p|o6ub*Omn${HPf znmRcjMWboQj_9n96wPWT0$W}ol?Ewa-w0RVbElbpWA$|(xMh9#U(KR%h-25y8zKaT zib|DX z3U@5l;C7eL8j?}A@8o^-Q%oPj^%3dN$Z&PFMmdyT zJx$j{<&W-iQs&!-`MG8S%f8ZKtEZ5twAdvs(=}0fo)WuwFM^B3!%niPv3fLX#OcM( z{xhL?m6;E7SIyE8=2Axz7)j`ycD?YIsNAi;NMQ;Wh;x0BdbA?vw~*46dcAHnRo3Ac zw7}oP6|P^%J?Ed?nSrm17Zg_H3)7=3Y@Xf8@B4b)f~9Bg0!we>a?_8cS)F{Meh@XQ z%iks{&sXs*QLg-&$JO;3tPWkXbh~PnfVM^|Hv$h#YP#a|0ONg8y-F^r<&voUiZAOj z%Bs;i`+Zfsm$nyAntfH9V_GPajE+A)=v~wAQx7I8|8$3M>w`w&wDk~*Qm*ynQb4QJ zl6osrVZ83stv;6PnwVJ!ea)<*bsF4`_suE`Z_^KpLnbPxs|wn??ohS&7}V)v-a9+P z65U2qmB)`Tij8tco@h@%{%)6R? zv8Ta}ab$dLjcHD!YZc)}z{H`$4R&=wP)2t3B3$O37lBQ^Cbu2f;x|-sy5N<+_Oq#j z_S=$8k?9C!`nAtg>@rPj=+E@eeYeWg*9HHH5jthA4oDmuSzIz2&!dU?c-;`{<$*oL z3<@6PGV#3iWjF| z9!@r#s(wz%=y);+jW`Ei0j2*mnT5dQcyM;Z0^zJM=w%TbJ8m|<46~nxG@|TKek}QW ziAL&Ebkn+qvB`7J{KWL1;iiB)zFm_VR>Q17Je$)kp3U%2ZdYfI=(Edcoc}2x8{~g=IuO=q7xwIc zFB*CAwRo3cCo781y~Y(qII5(T zO5tKKT1lSM1?Z%x=b1f26*{!`gTZi<#HQTleG%QK*Ci^?u>x`F8eJRAKge;f)uU?x z3J%acpV}g=&+-5lxZ%r&ta{Sc5u|K;<$*#k*&dfI=C^${T`nN0?Y@{^k1S$;#EBztUzuE^AUL*5ow!k zH5^R|Eb<~75^yM0nR}a%ID8NnsSjgVki_#NxMnw8v5@83j#eh-4UuYa#IOEk(v8R( zcH8#H9o+a2j+yJ`Z2OS99FzU&g$Rvpq`PcK90!)_uJ>q7JoA(n8p^kVH!sl_{OrGc zDIIiED;=bb-mgjku#~AVrFj9Ghl>lE6?_jzXn-jG6B(DKU+;@7KBZ(#L$XjpNz@iv zxT)u+C{cOzEt%d}BuEN_^K4z&ZTb^^X)mnj5X7IH2XOp@UCmzLZxfaOy4j826Ul0e zZ1;EY&6$N~>sHLyW_5rUzIw-N&!-~RAX#UmcjC`0l7BuRYi=vE_7^N)9sw;*nPX<(tv{-Uc4)&Q?vLl}h zKG!$=@Ngv{&fZ9BKs`g?4D$K4=LmKH7Nl!)Wq@ z{^o^2eU|JgSj;CBETl(t923b2zHVE(%~KBhrV^y{uG$`Ke3TLa$+%>TaMy@=xzVFk z^w$zwPj;3I>#su7R`%U;j9G0c%_#T!VNj&kP{llR=nQaWAk$d z@1(?4JbvZSSn3PFgOEd zu2Q4_{MZezxA%2b;lRavXKoAS)*tDWVzx5NA4oH0^4F_4Rj3pM1=iB6&eoC^UO3M< zyh9iAAaxCO#qS7{xkEdI>(OtSyw5ay*hb~S_+X=7_w0|~LB)jY%C0^=YkY}ixJEbz z9#6Y;f=iedW^xR#WAHOQUZV-STN%{D5bL0PQ ztVrWjun~cC=x`p;T6Pfr7{($Q*%;ghB&)67X}>^rIB9j9!3zpyyyYN7lf@I%3Pagj*2=tKk za;m!4*)4jHcij{kEhJU63#QbGr351?ip-t@K=IVLGR!kU?1S|&xgVxZEUr#$C?Y{| z^PVTAcFm0~8*|dPPCWkPF}XDrFKOGlKJ{+r{3)AvJ0UeRH`eKs;5xX1h-~nLwGFdA z8Zubn)m?jKSQ|X}vOTot{SX4SmCDxTK6(EYG7w0l?P?%Y;z5Hiy9$@H8Osjih4H6j zZl^uzynp7x34buhO-!e#J?Vm%Hrm9*-9y90>cTv@Gu|2=GX$_Q;LV^StC-D6}*Hf0sf(051o2QJD7u?O;qy#8wyP4b^aX3m36JJ z_i_ID4VoRzzguK!{@wFO2xE>;&AlI%6XHx0TDj%Ht;Hh_F5n2(?;(ePTWB6`Ex-09 z3BTru?oyg@1vVk{Vgf?UaygKHikLGCC1~N=QcPgZMI;HL!)X2g;UF~jyn&Mc+d)iE zI1&ms>boK0HW(d!o9#7oF&V6?BH!sD+2#A^Za`317g|>r>~pW%p%^ANr1H7gKIg^$ z#ul}hvZSvykvFr5i-Q!u_L=Q@ioR$ zRqRjOQ!Z*=_HuHNHcGwxE4AYBVCtC?!@{rvgipKzn?C#I4ramigTHF~%l{=;H9ulM z8#A1us;(AY;K-+UVntD>xyT5x#;$~E3`XT@e+b*}B8#10Kq*MJ&MFUYqCz|Kx4uBX zc3;Ll|IB%$R^MsAGH3#+vg@@zF0-Qu1fF7BKMdoc?;%^x$(r-K1WR&#XvG=wJMTa8 z@@3A{q3_NeXU$wmGm&7QJ-o6I`j6m_9&+bw7ZQ|m_CzWG`drI7P9jaG73Vju*s2Tu zbq_li616b6^DpYJ5NvbgbgAQXqH+`PoMK(TbLH?ZBx=5QArZ#Rg=8dq+=Cn5`MVXk zK{ZoGplfEbmjo*5nZd5r_H#dagT#8LT^r(vMLid9Yo*=R=O+5~*-~)J>S;wz(=n{n zQWTpGf}7*igFgr#Iq3xLv=)QCRi3(Gqrq}%vGgd27vZlPC)vcKr7RMT{_qX_`+9E+ zSAw^F)%snFTb$vXn)`iL*MYzj{~kvSD) z7yab(DEcujkh-y+$A(!)Gb>MKxD?DqB`v+mLRE_4TB6mnI!UBbWXbloiOL1nI;rRwmd(T=}-g2fc0h3*ws8Z`G_=Dy_DUe5Oa@gZ#)*My1rg zV$rSFvQZ*tLZZ-_Ii%tL&ji|xOhCZ&g$!`4AbWkQ16FrN$sWzDL%X%Qc=9gi1`6^W z22KY9%vng*+aq@0^m7&lQ-hHt75w@^mo_o8mJU8q(theRc+t*SW7bdwR=94v%wDfc z^2s25!CQDcMcQr!FY(k}Rz*$f`z5v2Ex%m=7IK>7!o6WSv2>B%L|RWIG5h>g$A)~> zaS3&77fb!5h0h?lolEdu&L@cf6s_gDuxL?$%0gz^W60p9y;Qb3D4zNbR`m1hF#b;a z3P$UP@WYES2x)4Jrmj^}3x4r4HI+sC$FiE5dbnGacIJF={bejx=EQSXW4fICx3A@N zM3WzBkUd|6*T7HDS38>z5Fi2ot@ZmQU%@QCe25f}yx(%M{hdAAsc{){%No39P6eOE zVkTXbAudrrvaj!%{|A)x{~RJy@!4b>OYQm;D*VArzi0^3FP~}Jomlqa(2Awbtc|6b z>sY@n`CL3i`&LIQKDcr}x_QV9w(Ry+GUQ|t|65IJw6ouE^hZ(i3%#R0x2#y-3f4NV zd>G~9Da;Rp0Pr`O*A`gMIO!*vxC%?tu<900xyxx{lWzyL0Q^_l+HWp zE>RZq!6O}V{I-0aK!L2D_Cbap4axZ2g&^ju1rp}j-c<6=M zuk3l8MfrS#7_d7>SM(hlJ?NuwBn<9Y55P=_MDyFhgmA&1&THb7p5WJ)J5y4vEID3G zj}}69V_1q!R33Jr-)9R$uzH%>>9%2;`4ZpqL}jhu(!!tHliTao z-)0PR?b96Kj8|Fh3w)z!-$s9%sLc26JDZ%g5_Q7{zSY=*^laT~-A+s)mYP%=ON}p! zrKaQ7=-f6&z7N%~Juvv|CS*q7-k>%yU0T~{V~0KKV5RYoNY=xYlLKjM)18}^d_lqJ z4_pE2?@-|vl3Mf(1Pi!w;7SpTK*4E+l5OSUMokMXfm@=$f02e`EseBQ0=YH|ck46D z{?nYbICV+6Gt^4Fpl;>XMjRhy0N!N)K(_5x?(&iryEb7$^2vkUHw#p=ZQ7oljDhoE zo&56U%hX%QuFleI9yIE&1+D5YTlrW+kytvPinzYgqwlNaN(;>{5UEXM8N>p$h$-7< zH{DVO}>?vJ~6%_(vq~V}qZDx+aAqG%4)V+=~t8eJq$g+o`-h_E*L$dam3@ zqD-6wo11%CdfvbM^u&qQpDoEte~8Rk2h?7Ns8asg$l@Cp z@Q#V`xS|Gj7Jm&HsqGo;++!bM!F^20A@)m{!&+yyi>BixUvs*fqUv=At)t|ARHc(i z_t#8O+mNh|uBslN+mM{qLHBZz2f1h-eWOZaiE7;JMS;oHqFos_5 zUl!H$0m;|dGy+1M;UPGonD<(~OOUp`wdA*|pK)DGqaur|kvzlw5|h~D#{7pxIGP%Y zBODea(#Rwy9Wk12D#=HF>Gwaq()=&+KV?)|t?3hJ>b0hDCn}%0N>qo#US7{n3V@8` zJY0dnhwH@uT)IqNps?DK6U(CM8DPtK#borFaC~Rg|M9Nkju$dp-ej#J9x2T8L2Fqr zQ8nEime<;th0#BlOI1$uejV5eW=u;|mKlT?NRDd^&fU?knIG2(erVFfVjw^8%QAB^ zHx>MJ2i>h}AU^FgX8VY=9h|3h8RRju=k2ZZ>4IrW%;vCC&=x!%rhmr-Cx`e|vx*19 zGD67PC!8I&Pp8^i_-Z(hkQ!XD2h~UqxIvu|zWrgTe>>IQ-s+7^H=df6Xok<&)*}O{JVNkIWs-DRsIi5(z-B*!zPgT3Fe!c!T4vx zESS^8DQM9X@n{|cSI~lVoV{;a58Gt-^B3qscW4fZr*22;ujWECsU=@uTztYCGO=2%yixZdtfBL_d?^utM$t5?(DKsu~E|y0g7gT zCb0huFM2sgBSf!Lwi9!4k7h)d0^t_G$x^EOjV^mxqVjLkGuZ_p*@ye=dUV-~Ba0mp za04w*R6fw3Mc5$AU-DdydURQ;REv;9jf|{}4Zki?*<{%{Mm@A@IB!qvUk3&+`htWw z3bH-n@F{f%mNZv9dr^~7q~qCo>@bn?>hT0#XLkDx63=}4w6T>*@EJE-I#3VOD(5R6V@upeIKG z$P6c!L!zgYAWuzV9oWf;m{h7{JTj_GonI^RYp1w)YC6ZkdU-jqxuE&v*s=@Gy}bC` zX^k*(mgb6@cbPRU|Dvhq{h)crmT5yTinK~HjV-(I?5R!XUQ#@j6p=RdDyh!>?j`3& z+E(&F%BH4ov%dcj57ETtNTlr^%l6&xpLgy>O~nl=cz3d#chPxMn|HzhG<3?j&G^&r zbWYQOv1L=wz2s5~m;6}Nd})~MLZ9qhC2Kw_vu+X`ImX7t4^EPVGH@A>p>zIEkyE}d zIGD0Ga1BKj$pyRv&t>ft-hjY$u zc}+St2pP5}GIoV6Nl@)RCp&l26~W@OWJC83LI`6VX!q1*_@{jYeKWUgMp^vl1T?81 z)H_@IJi&^m5Ix>$w_YoBTHURFptC)_iv6p|oYKBf_jKN3davCzh+4?z<~KaykRn_` zz3@0+WO~$WYSjF1ux0YoR^^raIxSOwu6fA7br;#E4}(>v$oa`cGt@qYABV5Z+-38_ zEbM)pPm_LHSq;v_Bev62)gXUWJe>vKVHx<6>)diudelp`VCGbhLGd4Ko0?nIC4``1 z`8glAgF&BEwO=u)kM7u=)#RycAd-rQ%9|cFUj^*i-%JN(jB)ErQ3neeb=;PXCNj*6 zI|;+y>4M$^)9##w-s9-yi*ALuMv~jyhmxNJ2mk0(32Iw~2+68Ev&qDI9LN^vCF@s4 z(=W1qowhveMf_nW4=%Zv{#Wr;@ zlT54*c38`Kq=UT^(q56p-}rVz#S6`EcVMmh)mvW!XT$I1LYhlQu1!?-OqHNt7>w?F z1M?8OeQQhIngz2YN-A>{`@VN*NRI!GSDtkKR4Qj#DKG?oXpxMWH|Ni6R?cmJDd7f( z?nXxz6s4WFfoL*s?7xP?6?H7Lfwk^R>N(=YhKg@CzwK1$cX}?73T?B=`d2+#dUguc zrVI+CKVez-`*U9D-=8y0G7q%XZn6)|3dvrBCmlt?xYoH8q(}VZW8gqt{MStq!tiSP zE+ya@^wXOZ-dOVSR`HD`lhoQU3>_3&OX_)!wB1}l`oxT4WbW&93$?f^M;xhYAjwA3 z1xf14@Cd8)WTj3IUqq!_*T;bbLLg(#HRY0`mYEZCI6pEqwK$rZ0bLwNU;C<(jg17K zKpEQa67}LR>|-Cl;r2c>vgbq_AF5!IBYyhtEPyuMXpPq{%QemeNXS#Kx>DUb`nxl& zYk&DFU3t zKpAF;yMLZurjBgIn{~OvwoKQNIe$k7l6feay2{zdqZKFRH^cHtxOZ^UQZoZJnHpzZ z)NN`&aHNC%?N@;P{O>y0-Go@sa$6Sc_r9AAJLB3qI`wT3d?Lu6$^6$H{GvEZ3o^|h zsii}@*LBe8NRz0WXiXHLmPQtji=q^fz}lZ4b^ML$=y#lLP_j*Lo>u;#L_ekYiI4d? z(x&iIGTf=8Si=oa2f&u`LH+8OVm7rrdIhCX zM93~JWrivs0X3V+X*ppHgbEzMUXTOW3my?S*}6Uc`N+F#upjr_XZZ25jX182>v2%R zw+qFng&yo|5`td{=D>`+y;tvp=MUjoMiX`+8NlVL-RA-kKl(5W5j`DSj?c4f<s=FSSHs-q+}yR>UabJLTJ-V z`7&|f0#ezzNv(5kRO|u>+Edx_`@qWMEHC!=w{K_IgbWytn4^h@7g!7C9B){uWmS0` zBPL?Fa0-X;R*LT4kFmm7WR=d2T2Z+eT4NROS>yOfF(R&8gZF3UT!0OTI>%6vcEZ&hiWpK zRRxEt8kA>ow-8`801uKe$*x%PkMZQXSn>}d0ky9txxOa(=bGdj!JF?R>-cUaev{=* z+Ey>@U*8u^>=GnD5Jj*Fq1YPp!c=D~_=#8Ha(oZgMAie+o zr+_5ZC1_%@zRD^POI^wTW*`|0B-aRRcCRh4%gxru=@C0G-YI7Z^8_;{_v$vC_k*7(zK$HBpu;Mv&7?Qe2PTko-j^PRA+fvVyGOI{ zz{kJZQQ0BYB4r_K7j+NlQ}*#}!VPow&-{m|l|8;3JXXmafKC-l5Q_*79%K~UJh}nl zW@fPLL-_@)h3(SWf@xKCQLZ*T%xp+b*rTKOqL59wz_j1LjNBPM$}lQ6n7mHpIhuKY z2GvT+n>7ZMw@ziUrr5liT+jM$P_fw{h_nS1g#$B@%tNp4kj?fFmW8U0!LrDzeZC{h zeprdX7>*B1mdqL-E`4Tv4D)HxzlJhC!0ARoNyY7U_3Ma0FA4~rKZ4G{;rYsz5C77% zgY35m8NCP4UAO)acKPGUn$msfP`?DG6=LF3Nf_~?4{JbeO=`cIw%4>nZnEu=+y9T} zYg5;VKXFmIF4dko8DqjF%w?*YXfUpixXl+4)NrRirIFPcQ>0GyRWpZ&@HAm%wM0<8ZLuXJ#Ex%gasPy>gl; z0vZ;PvyUBmCX^gfx4oy97QIjBUAqE(@g#wic89YSv9c_)tz9o5aX*Ir8kp z?+Kwe#!hGq+TRsQcVX*vBjva?oG_nAs8lsUQr)U$0I**JSQYHP#DLNH6ZSp5WFI9C ztsvfsy_T6Bz?N7h8q{Y5x*6Hth)}4P6?0LGIs@-?_<1TCfRLORJt59L^!aEun z?$JzvaAavg#|BVmKjiD3^~LqA7D!zOxi#E@4LNt}XZGzDCEaQYisrgS){5nRhlB5O zEzt+NP@)->+QFXP%o7@c+U21){Bymol+~eYx?p-z43kmkKX0-sylZtjZ{KC~cTDf- zZxxYolg*uz)!*9?E{!ZHcx%f39=f6Mv2DukN9dYQ*Jes6V%yCPn-?~B%E0EP<_v6Z zt^d40*L2?3mwsAvcW(Ri=DH=-Mp%WrYY6XHUk`7C3EaVNWnW#@?KR?#9_`P`Xv16I zNIxz@Yj!S@Z!nR06RT@xtM{#EZg*lIBFcB71pQ$8cfm&JfI2lT)ww{Om|CPsIG&n< zyfBvkHO$nfGE+}M=eUyRGkLzS3VzW65OK_DsGi@K3_++989#~dddvJTmAIp0zA~D&IPnJ$Y^kX zb|s^p#FKAClb^(seKG=(E#I;`CuF(P2>Kdxr7>3WPcxvBltYzWLJ8R?fLW~;) zKW;U}TSYm<#Q<*t1;A88Nhf6D+eU%7gBssajRRX)E*46rY6td6i&|Gp67?QE6xD5H z@uVnw>u>JhA(ouo%_UK}zTOG3BmbdkXV03{9qV~7xjL4-S+}vIc~B)P@AWCSx0GLs zrEUo9^F&f!qgxcz@zI9rDdsV^LW2tKzB^VG*A(p&fw>8OY zG$|x1YkbO|S;}Kb*^)`QRJVS`M}u1ieDR8#p9rmI8}Y5#l0!KA;VURp-hS99?6=To zQ8@tO(HYF|h1*KP-kS;}>bS46L!FEw`xte}d7|EYn47=VGV|1&rU|QBHc|$9)+KC; znpvOIbgVNF-t&D5OXr>Y2X9{sUY;P?EfWZ0*d5LslOD0}pP3wWz!!GHMjB%t(sN&= z)Rs<_?d)@r*45m?$*(9Wx8JI0dXcR+r_U%Umwo-cCSsP^t5oL%!HP3tIXaCJ+VUwX z+!)+2Ety`VI?wdU#*hquU)O}9<^yo}t6Ne;eZlKLm!+wR-B@b4$4T$8_UIbA@&aq< z6;EJt`k>aeQL+^?<_A}VZT#kjfo)7(QY@3#bad*gTS%<<9bHZ567gQ-saPKS$Wn}W z8do&4hpGf<>a1y6uHZbDo=eezIzaDss&$sHRmOR0eZSS!8g^j1pzBrDZk{joy{9oc zUhb`REij27*R^2j1vLlOU?$J;&EgEUlfaM9F>d~b*QI+FhqBjrCgpG|Z$`~1{ z%cnI)+Mcs^&V;#-D+id;XwvMV1dmuqp^3^<&u~b(_wOD_ON9s5G;b?))jxD;RaJXq zJ?p}P28(4aMb;@IIoMjjE3oB?9Hb&${EM*A&i+CdIXtsk@^GherRH>Tf#R&#WT(AM zw&-P|a`9vbU16pmrSgb(aCmSY){_oK;6h=71h~5OGTE}83-Nz^VJlfewg5YwYk2Pq z(`}}0MoSddZZAbr(;6{vqbwX?WqAMCu$*aATp^89q6s6MoaU3GE-(&7&Ql?6?>8}o z4fTBK(5vJkD?Zt&r$prwlU!5xw^9iVy{Luv&NsM2x1IE)bHFpM<#@s3?-?&>T*FA} zjSt{=XZ|D{Nr(S&057nd(BBM~_Xy?vwaxkE4XRzvk5-ej+2=gc z<=ihkGH}H5fjKpQuo~<*E=;CKoTYZzMPv)!X)xbEHUu$Hv=_niWjSx+Fu3;0dgv`b zUa`6v8&O>1mgF-m^QTAe{C=UW9sie1J9pPNsd$&*LhMhQ5&jUDM zJ}%dgWGWQnmAoWTL26E&t|{c$&^^1`?HgW)!=cTR*INQ-xUjv`^QY?zY|yw_didJQ zWb*EA1~D&o$mZ?N%~T~KvPj#V>Llb8t2%XBSv(C_pgxTg*nYc zI{T!O##1du)v0+4lp)o=(DG#&Wn4iSqs$e)0NIGgeB`Wpf+$)ssW{U1h!t{4k=A*8 zb~0>)0f|ud?4xV6TP|98j#sc2@yRr;E=v;{e!X6ah_^uR!EC3l>4Lj2bqZFO9{Fq# z@Y%+GI`5f#vJ@SM~%>$m-cgA*+*O zj;vTM5F`cPb7W<@`i<+MsIZhVk%xxl@-uYg*pX|X{xLhSk>l~Jf~v?vAM`!B;;p?q zqKQv(n{QB`wx}=&$+4;Bu2&PQF+b<+y-`%ESj)o^c7n#c!8xvQqx;8(r?-m7qLKJx z5`JANPChpOf{K+*dBKryOLH`5pMmY={0$Mlx#RXPIR|qd@#CO>d!H>d_q;jaa213_ zCm(9VoR<&lwYJ9B5)Af=^sZVO)BpF)!^}O&9EC)F^J3 z&imHg8PX$JhVCkwp}WMRR*?~%zu)N0uuIQ20-O2>1oqZAM_^x7W6}k?ot;Hshd&Q7 zSk{4%=LhS%LaucYE8PPnc-KE-PQHJtnBCO;O#kSR5)lC{gbu8cYl6I8=q6j=koU^R z0tfsQE1e;!JQ&=E*NW`lthG4b72AGx{Q{*;&0lDj`!tkTm4esTm81VmRJRlc+p}PA zeG$gHaU6JL#CWl@>d2F<1^egiD)(4>*6_ZDIkiY$w{DdJgbloPjLOc`=8V?tT>G>@-}Wd#evS;MF(uh@ISm) z%uXimQY0NFFQdO;^F^8+Uv4IZbf{TQA~!Ls;r)feTgB6y=>_xiRuzu*$_vK6kzshk zb*48nzH9#G)A-+SKZXAtx@8}`@s*$sKfY+Xjgf+veue7{TPa`q`bIUNX~&@UE*1#6 z!$2brGV8;fVn*3*D?4?C(24=mzErG<`~(kX|9wUI<4t?3)S~t?N^oV!YoX*|_t+1GzrJt=lo|UvJn5xN_ieVY3~z~L!MCI zny#97q$rk-5z2Oh2*gr_g;hKrnR}}T!ngqvkJE3#C)>(X(+k1PKWh%l34Z?OCybpI zI>qs)2OyJpDj)9%QG0HrO-`4wl;c(D5$jttue=m#+bdsfb|C^{siX}Cb{VE76h_mR z&~@)$aW<?JVP$&>-8CkltGyEPBxo zvw>euN|ih&YZQonES@SN{+E?dNHha2uc}LWE`zRl4lWFfaPLn_9rA=W4)uJC@4`%% z2SvT_TxT{<@^aiX$`O=G5{&&aTq<2K^8n{?YTv}PlqQ{buY3ZJQ&H(H)_4joG8s+8 zr!jl2U*ho52q?Y3;@MOz9uOEvZmp(_@>#3-nqKv<)%=4vpuq!EMWA6|1#i4e=ly#r z)9z)*YQFIjrUd~TQX?c|PINp5ckQpQ*Qj!j*=sbnJZW;DgIJv+2wA&lN4P19$m$#_YoL!j0Jt9c;}8FOL7;>J7Wz53E|!CLgDeJvhQY)H@93U8C?5$XCI#Z@x}k zm{a0{7vH;^EV+!WN{RpMUcvkq1iAabvRL@dabl>Ts@TNub}N~Q!>(6#JNYeZ^4N#z zHJm)uNClFtNmbR$puT`i84EAZ3;lDBt~@XD&yD`M)1H;Ty@k%INwu_dk-v+;P!0ow z>pY)R3?-J>lpC3SK1QrqItp%_kvx`M8~xzL=!y@IP5e1OG}Xp)8JJEwCP3EvWR|2d z=O%-@u*SIzFuy8nSnF`!j!jJ}te&;`%oR_b(7bCrJ!0h*vOwk#ovCR|&p!czkLh(Y zu4Uw$3r0qAnjwRi;5~!4pL+wdvm4Ju9IZ*+zDPwdc59M8%&~2vpb+t;^XDyR;UH={-<;h6*1N74u zJbk(SK?Nphaqt6Bi52vFR|s-3ntoPr*=b@0;exJDnVq%R01X!ev$EoU$MjG$PIz>7$? z@?I!bZ$u3|FADhCJeGXAXDT|R7Su|uWiB2y60e(1?m0!Il{faRFh2gv6^=KnaqMBC zmMD_{IfBCRXH^4#zVR6W?>ffwXP!0)AlveDcz+I6OpddC4n0~9{Gv^jU-NVpOYh_> zzU#pQ&#P~`nbg*H;x9iW@_P1G)-2t5`~w0+N_8eQj?rk80d802I3jYX}l{@@sv@_ZmX{XnlYj;LVDj%mF%MUJo zT0Mp*Alp`5guw=BW@twgUyFJcQ9>6VL3O$K2*;31w4gV(C%v|cYUtpLOR-+{vD@Ff zj=y&$!HFLlx<_@(hq=u=RvX@!fBwpIRr8qo2>G7qr8UIIfI9+ zt{OBrZ}4{6Wk*@i@rC07X@%>WsBH0tzxb4IVSnMhrwDF*VpsHz2j-)$rjGlM+@g-K z)WN<~T@#fD`%)8Imnxf>v)O{_XtZyY00ZN!2HHTbz{^v^MloK%m~BR znU9zpaOmL3L&WFkU6QWdyQAf!+{o2eQ?tEe%P!8>q+k<5DP9D{7BRi5NKv+q$E@gl zebS?TwvYzRIwT|jQzkDy&f)s8C%5WwD_eo8t!N_Ax$_sQlkvJwdJdC_tq(o>bC<3i zVIU#GAmdS$c&>8NdkH1<dmtX4eFi_N!A&p^~^FsyW97J z^f|N5DL`|PZ3hY7xHp@>sHG766(z+z_ibbO*7KJg=rhk>sz5zcG9#|-ndVXINP1XS zkaS-6C%8XefGeHemb=c^#Gi52!cM{(;31sWgK>m~bH6bjb4xVw$TU$&k+y5l8p~ZQ z`vq}rr>O#GO8*gJn};Dj)B>Y5dn7zRU#mrg$(DlwXuA z)A*n9zK@%P>y{z1+^7N3)1S4ksCVbCJ$8PR(jjwnXNDV<*4w8P?x> zQ+B=Ky_+8-lz15EtugXj;h-$D?_y7=X(^xFjA{9l!F??soykt=^hA`$R%%my48Ymz zbeEn;KQ5E0y6S#{8}46`)k6opjjR!os}!IB$> zyPbi-_GihY(KVCNehR57x-Z?n_X2f0IjsAm!I)h)_eBbalthNntC2$ea97HjI01yX zVSTjA!QZ8DmTD5@Go?4;F;)x4`W|=duRG$}Nz*?3TGKy3pS}=Z;!eg~I5+POFY6Fq z++Yb-|8hW|c5cz9A#Qbb_>I9E`^N_%>JW9E{u8m|=#gCL zC(^du1QRnMGM0j`Qk1Rp+-8Z*C^~_$F}f&NwDw&n)L5#~LZb2~-_&5(C3t_Wcp70{ z?LZbch2WkLO*&H3d`nj_SKrrSJ(;)v8CnE+PxJqmH2-S=YxNl~2Z;VG)*^z@*c*jE z)Dm3Gf!j>HGKY>YjaC%AjFxN**;tfDtl|L>i-SY2eyz`~V%HKT_Ds=t;__k+a?SGY%xiedZ&*PaL}8Ph|v&ChPbwhgv$*S16D7x~Sg`_mGm7568EyZQ@GpN?i!(wNSn5H zv`jyhxBpg=iRty+zGJsbTe$G_SN9~rny2UVlxhT!6RYqK8eiqYC#zWuvMV&*$_rys zx%gMGIbohY-xd8aKqs*Fb#jh&oLx)-Gnp+ebvrD(dS(EKI=RTL`#hpR(&@Yz3qkDr zhd9J~_nBj-WFhwG<%ZZ|4H#9P+~o4lcKMG{{)c>iGkm2B4mu?(|3}L*`N?W4^~bxc zIm$Z2XRTDL(*+x@%*y(^0a>+}9t?F^fB*B)KkFEu->-@8KRzq}Ra@tOVw|5l!C_H{wO8?R)3{RUx?Dza=kI7y^Ha_lCdI~}lo|2X2%}-t(2a5t^(JJ*mqux1OpG`ABJNia z9Cc!IK7Y~?=Ec9enZuvWwT*HE2UqC7dxHLOkq+;C8!j3>gJ z8|OD4XZ=3$E~pbC?J;4@9fWA59?Q%x!phh4uqudvun0oyk<=%~~PA3n?V0`Cyz?lY+eg3HXAT zt?+waGuw~lg zf8$YPBLSZ|ZQ*0GteU-0IYkG8Tj4`6ffmLTw6bqyM~tYdXsi=uuNGoMwe{_DP&OVL zAsx}jsIl|e7at)gBS9e`nyDfT2rY}b2pFqaSXC@Z73m`;vqm%|n%;|rQ3Zx>wi1pL zEw&3Ts4vi!^*5@762{^j5OlPQ2>mAyy2gmIgjGdXkJ+x9F2T+)X1n!V$vu=>VjD1T zR`CCFT8U8SOlQ`s^u7|tQYNKwP>ch?ALx|Mn?C`{JR+C6(<5I013d=mD1%mDs9hu{ zs5Wp74xK>X%VppgnjO-)I7D#csrrH!l;&<)w6fOh?^_@K(0mg1pRa>ang1OAI5g_P zhrI+Ha-^s?2h|k?^FC0~U2F^shljTG@ne}WvC!alCwhe7Ie(B{@B%Xna6Xyr zrpTJ$9rZz&KB(=E2l&P5biqd_NmReq+|BjbRdKB|G_(JuJ>xXuipcnlN+80*$i`gDn_!(`qUv5|1X$ zo3MROsf}fpr!GD*T%K}qgGHf;GG(#;puvNWFXr@-y18L=S61uUM;`q8D=xsR%fVsO z14Fu^d-{;BpBx)K=v~f&E_2~r39@Y?H8ST12G=cXs4_VbLCb4Smo7(hV!EoA9dv>E zD4jQ`!s4?m+i$?k5NBqHGBfD>Cq%U0xmf^97Dj*aDXNL$R(@!60^aLX!4%*=_D=;C z9h9P2pL<4q<{HGFHO7KURWBj@3u7a>D|L?cD`^|fknIuI0=ktMiuitxB-Bs1q)z#J23Rr75Fib|V z#uyWPsy2AdG&}^*#9vByjTO8WZg@$6Q>CV;(P|c_A@u~L|CV+E`V8=Ao-{QKS}Q{H zxG-R}h5NWT8$DbdUWWr9L0{+jb>D+!5zntv@$YIdMr=Ole<}J5&$7Eson_avYgbUU z=SBPx39~jo6^c*e6cO?N=TopxH~qQlOsW5jwR%uC9doFT9qWtqm}p<0OVz=5t4L>T zPyH)8&=qajflP#Iv@`E6<90PQR_aW;e*4V3b5Akn=Pgf!xnLiBC$B>$q`RWqmJur) zBDtJ+daauopNu?}H=`1p&c>c+>;uO+!wJ+IUUX%-z`H#7u5V{FSJsym7+%`s&(Z`m8QtUUlEZ3L5^uwLlBb!?}_*|_rbKy|0GV?Nc1D3YLB}tXD zmUVXZw>`bs1G$WarpaT|?cMJ^&-Vh2CO!y*;>)u@V@z?n3Ekr#$adI;e|i@Etr`fK zpWdWEoC^?2zb@Bs^!#wUih}dWQdA{ZgE&uB<$~4@5D&RP$c!rU0X?Il z`~=tk=yoVOogcRU@m9FYwEqzW+2@^Xs(1Endeb$j2ex4eB-q zdj=9my-&rqrx3?=#5bD!MYPI0~(IH)~Az{ppzg0s@Qx$6J03*r_yEg=Gcy0P>7~KG)r-t#9 z^5S5_hFuk^F!;yCIjx9_&@7NOKTYy!cuJ^w?TBV}RL`3EJEZFH5SQLdiw6G5v>kU| zLMMD-d)QgsWVOJvCKG44CEoft`ItThKiI$E$Lk2hPy^JH+$`YR((PKtC+axids&9{ z$@?LZTU)EnaSqW1;@@oGkjPV?0nhlYS$x2i4J2CuIhjD_Xdqgw$Fy_+dE;pV#QwCI z`gG?Kd^%8nnxgO@YV7!QzUxzHju>lC52<$N9DL$nvxL3e z0sAZyYWe%*>GPB}ZSVrMDWa8CHXK3^+4 z08G>XHm)`RR-s(^krwh&0g!+pg!Ia{I+)Raeg)6R_F{yT>P9UnU;&h~$0NPjKX8NjGMCqpP6R`g$}h%OBCmR=xR_DY9g zuobUZ1sa7_wc{T`K4mhz@f4DJfrf>&KU^HGRQml`57-}^AB^HlFhp~xoFP?ep9<~r z98?9#ORznAd zme?$2f+CffA(sGgLKM7USt)Q3AzK6dVDL7i&<|F~yt#YjP5YGluZHUL(bk`;++lo< zT>+S2u4qT4;jv<|@(ptm+x{8h==C?SD`YC7E0F1bU!QMZK_Hq2nV^4MRv=|e=EkoY z4h~#%E=EH7$}$D~O{^0Y4DNhqBn`XX zJwCR8JxOuq2=*B&KPDIZd#2=Q{vC@8=bzP9@vkpd*JaO_VFQD~k@6C*cNg z6qOWvL`0!VpZzt>5=K(N5R^Sno7CsGW7<9={Ml`_4wqZbc%Lxl}L$rXNs^>q@ zu`(<-b)*)gz*p0IzYYl-23FnU9tOCS6dD5Hywq;l3^Z3QBSVMlq{>=8lzDu2N2)|7BSyVf;X_OYYyD_g^p6a1 znL&2sdx1t@&KLi)H3os6v^hD)fvLUeZHK-3$ipx%Y}76&Uv&^De*+XN$qiz*6T~$x z5Hf#k?03!|XTW(~%_<2M&_0=F+b8)LwDtO&bbO4P90I(`b?+@zr*NYiDP||owJ;5h z{V)yHyfp|vCgXR^V-Ohm4bssN`sE)apg`ivOW^m6kn|P{dY+O`NhC6+Sj3CCu}dI1 z3;Q**OUt~tWsZt`E=nO$1#E>ZR3HaS3gjM=)h2NUIuVH~KEZ^z3>CZ9kBaS$S1izG zf3{vCLWfX|<62@MzS-Zv3_r9R&yDTd~P3* z6u0Vino79g_=8HHG}*B{!0+wlfiHT?@&NhF&azD{59nJmY!ZCmNd8OeBgsow@>td1d)`n)S3t zGO?aEy@48llq#VCaeXVc0qGm)KVOgaYZ-+as0}R*un>{Sv`dIu1#76~Y$?e`{P>lD zhMAcg4>Y_oa9RT-rH8?gB;c@^r-Gto6N*%YajIBDi&5AofL@?bUc9(iUEV(9B_uLcJg8`8j6iW zJ%Hr40}$Fv@$b$Ap+oUYq%PtXJZq+$ou4*&d?CUaWn+UkZ5}%gcQo8vAulbJUV_!G z*u1Zfmw~!7q**GH$N!xp%zLsJs-|6IrM7gC#-?r#&i!SngLCTB7u2Vd`02qo^{GzB zv172~(~izh^@yn?Kn3^QsNkFfIFz5|8k7z#YB|6G>az!&wV=Pn>a4#0+GqTyWAyj^ z*!V#FEfXByKjQqJT*~8oC}aIJLi(aTNP%9FA**Bk@FaI;$jfLczS>E3HKzCvl8QR+maDtEPH%LxCc6-N_a`pwPM;Qi*`ICx`~Tf(mBD#Q5Bj{zqSNion7`lCDLz>t^>FWtrR zS%Ot&KFbjTVEG3G;41szWF8d2bHn~`BdJ~CDQP6NQcRZkjDKIK`S3CE1mYhT3c(cI z#`f)F`}VEJBS@rL3NLJh!}+i^J3cc&KX>9F{J@BMo`4}mLTC^?$$?1OQBR+(?Wj~d z662zmyrV-VU{LS@*(u-Rz8miY@d>CBO(*ku42yA}A&(oa#Wr9&(@bi{iKDGk=qH?jzh` z5Bp2H=DB!w$>&&(^&LA&g|CTjkm=O^Glfu#XMs?j2CiYP!{rV_4PWFS)V$)9*R?2# z9Sm)(RER|EA|2N}dAb+#-TS`8oVh(&vic$A+7sQU4~!`D%sm7G!_i3dF}t)`cImQm zxw>}+emIe)l+a&@8OluL4T1U4Ez92-DM@E?J3&E80$l}C3p3gEyrQZnKGWUS)l1c^ zT6UCC`f1Wp#A$HYtmXJ??P>#JKycL)wP&4gW6wIJ%CTpCRWF@i_*f6vSpZrg&+WLc z0kS6CCv{l6u-R(d%1j4N``3 z(V*q>f(ZvQE-?c@ZMhYk&wd7k= z9<#b&923Ggl^9_(=IP}d*%$<|ax5BD5DhdDyk72=3ot##x_2kl8~run0aO|xyYxCt zr)Tn57p(ec!$$6wU0N#jExnJe$}WAJt%9N~Uj#+T_4RE3m(~*-ZT*eG{wux_0{wT9 zd(nwu&c&$)24y*qmNv|7BmlHV0v`H(;jK=AkH{4$?;@bnf!?t1=EQ>LiyKpCA(Ioj z2u!wvi}e%|w=m9*-~+WFIER;7rHFvRGL=wr*;C36kb@Vj{4=O$rHoJKY^mYh-cjDQ zKjOqgj>oe+d^ON$8*+YG{f{YK)DHMydwlw#!!LOEe9@~4DRaS{9Lfc^RdT`oTXMm@ zd3;;hMyqXbFCy>NYGiz&QBl{a-JH}9aTAKN%mvjbC~P6z62@D_^5OICL+8_W`5~ zv%-n_(;HN$hzRyW{jwEW-8|l#3lQ*s{DS(UxLlfyoIv<3KG~N(o7jDBJ z(BOnE@Jp2PtOpD;&iB2g*xiUV`v4Ax3a}YJdi}f9{vpTw=N^m{X8yDnSh7m{PV8GW ztrY^yW!F%KXUSF`K9(_W)gr0PtrLsx#7=fT^~N}!mdVqmoK958r5;dM&*L3txvEDt z%1eP99eWS$3!GJ44v_(y%H%}_6=W^5Q|2ngs+#`HTCOVi!3!4ppep#PUF|C`oRe^Zte zf#m!9wHCzpLFZcMFJV8&Z0rWyVekGGGR~3x3UGD%EODQ)&zjzcZ_QwZUYkQ_0pt*I zVOHX9L<3>h_!UJ*)d3z~VK}b>ZyW9Jj-+QF9!9Io0Uk0e$>|+pzW_)c!3uFv5ot%M z&JhL{tYwP>jfUrf*j?TS98D1wqj3R~x+0Enn8XqG{J)dCf;@@e<0p&T(?Nduo-xB% z+}e;*L}<{pSc4IVpQu3giOMxWK=m#vO zdv>RERLJ+?Mwo6!=k{pEo1hkCW-mS7_*NmRCNs+ZS>H|s2dSu4KD#+vwgJ8l4l*}H zD^d%icQPBz&a6~vo2K|4Y8l1KUgdkRSGi2(uvdTDbUOA2cBHK;(Ft_c1R6bjD{9;7 zXA&Kr8T3Jzr%#^*LKGr%3UoW>=keA@3)$~*=S-_KphQ%ts;j$3{sh!W*PQWDW>Juu z-c&smwNvdM!?(dJJX85o&8I3nDnx<3Dxh9ttdUsU-+0|EMpIuMDQ?89&`^J`Rr-4p zx~X2AsSx6sgf(Jc!e{BlShtM%ZfM8I&pM`d@v0=kaMjPlXUxCz)HK=>LTBcqG{PTf zG~^6)mZ$$idaHm?$QCl|!xaF%-K_x$FY&JgRHgDCj|s3H$`TX?3}DA(fRo9fFN&;) zH8zHuR%8Xj<7I8ZFjuwERj{s zy4YxMr_(BwnfE(WXcbDd?J_lap3ljoFa4(&cHZXJkOk6tVZ6w!5vwLhdc#Z9PcNL@ zz`Ih3;Gq8!!5oa~DDWuX#@q2q8lm=7J>jZnC;+sLL=|G9%BI8F%%+R!&i-cG@Nyw< zV6BBuKurk`pbj9R5FVgZ7MC%~Q9vj93jA_3QlJ@~h-738VP~?21`Odq=qL8nnRS;x zb;C%~AZUpgO;%AGKOV>O8=^J_mumfGy!%jb7*$(f$I=&Evd7tMjKbI~ulJ-?gGmGy zpNYT=m9Vp`TB&E{Wqcpb@mgYo`2yFey;zztEA8@H)04PT!q(^o6gGq_?b;Hoz%6GU zx(l0IbW`k)pJe)Jl>LnpQYuyd>=>H=kzhsB5@26=ierVLw#3=Hg+<`-{C&I&FBkhwo&T9~pnfCt7Nop-}(16nGaxTaDQhodS{(HQjkJ{k(Y7@vr zpwX0@(2xG_5c&~jxO#bVlGBycy+~9d>vrvCY-G(FpH+H(=R3HaE&Y7_VA&LVFZ8a# z2@2?01iDlM?ZN5=;$Q0GaJzgw+W}OQQ(o@wVHoU(EEpN;>T`@3gDinB_~rB9W7799B9hvY3H|>=V_WtY$0lj275KA`qhFynsp@Mvi!|{4aWl znZqPn?dLg$H5{0e=^q1aAvuqk`$n(+;&@JP=@{(2+K(>-XZ@7Ky;mo}m&(0Y2#>Lj zee-`}HL)YG#cHrOQ*@;S%DkR+2QHhM=-qw5i}{52)uP#}_h73oxP4}<_tlujH_!Wl z8-8Q40*7vnnQkQ?q7D`KExr0ooKqqNIy#@e>4H;zcjO$;@GRCgFLuJ>Fz0xTFPYzS zd@;+_NF-BwHTrF4FN`v1AZHU>k7-H(8S?Tb-A$E&NLSpdX`Hs!828J`gQjrVIvFE) z-hwvUA}8(TLZaDOfnIO2_RiU&1ed&n&e6^e4O|&BL*kVBok(M#h)p&hspnnz+!ST` zt^6{p&3v#i(5T0|$a5MvD}D;x5c6*M#+7a)_j;{jsJ#+`PdoGQNdA~sGVJ@li}Pa6 z#@s4)ei)hcvBC*fGZ&Pqt;&K>`AO!Ysu~8!ETV}7Oc)GirXyP!NpLUd59?wh2GOU^Ojmwl# z4!cr)TY6E+LaR!J2^#R>dm!jkYgoRM3Iqwx@+mzNL9CWU3}aF4{0AnxN|f(*ZO*B zt0h%RueRY!f%sO-)oeWw|M7HMEN1`PslN16e^C^;u2>KC{jmR;<9t8-L!T4`s9g~< z!W4|Papfe>8U|#~<^x%(MyB1A)3mbr8rsSdhuNNC=_^32=le zk8MZPgne{-FPMSq^!EJ_Ol#EVYOL->ibK=jJo3F#Rh|ZecZI#kPmvjD2y5;a>pTg1 z9>FwCdim5p3fy9f8ULtcUwR|fOQ|w%RibqjswXlcy?9iD>cm6T@GBX^MEr8(|2%Bm zw=UmIdocdaN@fQZRVj8G0`sko>d|%jQ642~B1pINm(yd`cM$&I1KYWHtReUiPVvA(vf6OgBjCQ`|01 z!BYs@QYqfl0DD3j%t}YQr%!;${A9W0^NyuPJ};RD`J^u6XEgNr3!TQQ7HyC`t1&p3 z+X*;rv7}?2bs2!4Mc_*{a4nBkCpA(Cp16sr6wNx0g&@e(3+It06 z;&mg~;KeG7B%bG>cs&{oGl!f}Z=u(t*t+Wb!;nu+6gi0nUa^UIB5VPmtpidy^U3{&H|4iQC!fumAuhm%H@(1{IRK9Mx`PV3 zX3pS_hB^HrK(8ND)}q%~7k(0zDI;oR3Zf+xnQiK)@9{K6e8+boqN6jEgOZ>+LPQnS zhY8h(pX#7`SdSRnE(+Brjsw-d{MtqJ>z5d+cPy*})uZ=_CImiL1J^|VFx3$K?SkmQ z>qq=PZ-e-+?2k(PVKow8dPFZuYans=5d5G=$SrzA28wN-Y*59TRo3NIF6MAD>10lh zFlQ({m(kSK^YHJuB-eC_ont}2fnT|pv*SL)oWRuR^s~D}bmrVl;K46lJt9qqXa?fD z)d0MH%z1bxnA2)sROaN=&KyxCfyDO*Ddxy6nA6S89QBq~S1W=c<`l{CRp1S>wW*E+ zE<;^id5(iO7f=8~>MG{!D7@+VXOQoiFI>Foa%Oz>T+??J)d0VK>^Z(2?3undDtm_1&YmQaE|A#s3dJ6|1$&a+>``xN_B6Ia?15rC zr23A{pDf`|c6@aHWS<#@KldPOpLOczF8(YmGyEAk`M2_?E8#!GfF-yPG=GksWBBvK zEz#lEk3VC#fj|2`jLM&^+W8Zw_> z>tIlKJas6zualxMXvozd;Py{k49X4|1||Hp4h*`=so)r&=g@Ee;u_J78ocJux@5zj z)i*^4UqAk|eFOYi_Fh!}@F>_?tYu5{2kGa?AGrm8sI(lmfqF~xr^A;{{`6A(c?71l z@MoZOpDS>pjBOh9aC4^zf(V>Mv}ZD_t^)ZweeB}S^QDG6Qzk_xpKTgk?F6j+=MMf{ zNd!9>ffUkjt=k&@G_3(a)ztdTW@c{&e~#{s$R9XhkrW1p0iPCiIwSNPpd_2~6wEY8 z?U10i%|Ow+i4n+oDdq>`Msa?yf1itNeuOB(PZ2~!0Rz@f1fEvk(vDmAGbqRiixcx*}`zJVrwWpK9%>OyIMHKqR zjwF3&eB`3<@p*>6nH8=W1Hyl(;cNO%I@8d1d=2pHr%oy>K;OadM5He# z-~DP=CwrAT$w#yz)rs6fog8qh6ZMu>C;L8is*_yBp+}86$q)|pZRX%mm^xY6EDC?d z4Hx;}<4E{RsNmKS9vZZ$&5Qr8N>13T2`aS6iW6BI26fDMaHEmqPKB zeCUZn-xqSw`13z-(RX#Rp>M&2-+{hY62%V2usFs)z3>)@Z(0M2`YDvz8$jQqJ0jAT z3gwd870NcHP?jJ)Fcpg2LZNW|$zh+Ux3og>?+Ymuut<%Zq4_Z^9oYAMIy+btHa|{2 zJqn9FNX2N)XTTNcr*>FbpHGmNj_XwiSaGnk`4NO z%iyLEe{P;*_|tvdZ{?4N@aJpznm_wm82;?eiw?hj{JHE^@MqndQTfxWcK)nT{7G!D z_#?OA&nh>6)LWWAnR`O~DO$TivB$RW(QI^|i#s~l6E+~PLo7^0_EZiA`36_I*z?Y8 z!=8J`Mkk*=g4Ar^-$Df6GL$H!-+DJU{OMi;g8GdgkE{WIT5pZW9~qD@s&V{~0U1FR z4pK(2?{jgcW;JrszMnIQ_RXxJh#DC`=JY2Sa1J(UsZ+b)yzUH-OQzwUB0(~cKj!0h)#~0MDPL?Wll8?cU z!?D~#os_%PiF!+`lcVp3)CpL0Buw3R6Bcz(bFe6EIPQLO1P0L}ExH2T{n$=P@<$q&T{&cIIKl2oSw$jA{{>Ux(Q|9K6 zdQ0n+ue0GQ7&tq3dr(d1= z&m4e<{@bqLYyJ$5H~i^W1N{2&XVq%(r&C2#{&cC0KTHc9NNk)y=5QkpI8)^0j6BzD z+5C=!EetRLLwKwN4(=_MRs74jq3m*;fQ&@Hh~egAyhaU(oROZpKgJB2`6S9vz;p)X z_|5F_Znpou%)|RKae`B3yLY`Ec4x=#?*1;46G|Mzczh!(hI4oW+G!H z{>osQ4YJ>l8uono5Bs!+6DyYW^CUK(fg_W_ONlZqxP|pQM2N>XVe(gumb0#K3Zrb+ zPzcQP{UI8*&0>`%guP5klg#5N+q* zg9Pu0i(|};-Z@aM6sP$iyv>WSv&!zryZ>yzZB1uzPN31hpOMg=j|U-i=Zb#cAf^!s z4l|%%)Z_QnWZ=vEZLf2zs~ zRN1wBZJR0@r-}x#=w($jL=|1kqQ_KGA61mXqI*41^o}Z;sEUT72=URXY=kOH=W8oaR3?Fbh<}`Msfn#xy)P`biV=$3 z-=O2CTSC4ih;Pn!G9N*ASSuph59tZ8;)5`E9(b~GV_a70Fk~b`v>B2~CQ#iV26k97 zb!soJ4PnSa7<*Pq7ZvYU#C{?1ekGj6APz1m)3;IkpE7;FG??`lNXvznLH9hz*s{>v z@q(#lu=;5jbPqZJE9CVf%Me?-!+lr{7@He@xlH^sVC|v5q}d6`m8i>@+`&| zuDcY7duqgb6e~H|jAApx5kFH�l0(5%CJj;6m0?LjQ6R`ZpL+S9y{qsXsMd29m=u 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⋘>fTzFA3M2~NOR*?AxYv;l=Ok-M!g>PY)!``c- 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
    Hg<6id9JErcs6rEsk>z>xh`BST7~vunCm zgeDukSclu}{YT1s020M$$}91ze*hR%xovu1HS+M0tcWM5p{Vum&LG9h&;xjp&I@bu z*MIN;S!E*gj@1d$G-^%2TUwI~8Pvx-j0Fo_ zLt|pnOsuI}c4%^8x>1&52WF-vG=vOjtD4Qx<0KwDqedXT;gk*u=c16|oQ?|Tsf(q* zL6FUQ$$Z@CpHZY@VfBe9BRCtqU&!&M-rxC2fl3DN!Sn*F*&6tl@|Pdpp9viOYROOB z_?~R|44fw{5aziw&;d=o`>ND1bGTPnPC$VGG)j;kuS&L5PBVy0~0FeeCV^7me=Sgjn!JUKx9K&Ifr9B zpYHI*wx9`KflqZv`oWqe&}}KonH^Dv))^xm$H_TJd^X~BM$0*nejDl8w?(}X{jdc^ zNuNO8IxqhhZ|&aZ>7&C~t}|1y@s-BI z+@Q>6Wa+3o4uzskb(IsRv2KnfgUf>c+hJ12wg= z1ikaOyb66&@;e7*~e(OK@ zh~9=y#VGhKd(!Z$E*AiGSCN0wIL&wNRx$qag$Cmzd0@PH>mm`ez^|Z~y$<%4BpNCA zxEuK1g(li<6ncfvk7G=E`G=h3hSq_<%nYrr19ur(($_sPfV`}lJ(Y)+N=mbx@goYf8N&3sV9VuB7YqIc$l$)#kZKTAu+CmCW-^1 ziy$iv05|)nm4)1=Z1YasIo=uH&8G@x%{1t!NM00vuW-`G2xqNs89z&&mHy|n48&7p z-u}j9K|i~t1k$wOoj!6ro|6*)8I+Q85=-`rCT}Z>mLn}V&mpsIcV)ddLW9{q>A(1h z8lNJ=0{}^Q+x#W@W8Qh|Orn!i>R$fUclXO#lG8#_;uLl~^mg}C?j}gP4793mn#L?H z)S%!X*0|wBam3?puPO6Ei#>kG-Fx{T%t1RVzfBTdlKS==l`JalSqlY(Yw%1i@<{a-{;IMd5}-ZB4wo{BcLWxu=Vpk8eoUR%+E>pSS`0 zvBM-43t~r}SzJ#vJ(qOsiP)61FW%f&qEno?I5#gaq6{WwdtB2JV zEaCOZKK|q1*Sg8wyZRwimIz^kvPaLGz=WKwQR=&G#zdhA3sOGOAz@g2;ph_HJ0{ai zt6>ld9DOQ>^7T4aD-iXE&O+4ld^6?z`)u;xRo=(ceuaG}o&PyD5nbV(2c5ik?&Dmj^)^F2`7C`(LLW?N(#XaxGF=iuGtN zc!@Am;oh1HNtku3bCetI78fHZLSU){F{%;^s2mzm#2`dfwPoK-o_3FT+XgMpMK;dClQAcu` zpG|GwN5&^8Y_I=QktcWM#QdvW_@v4zISXxVYhR zx1iR~em8XqjzqtK_wD{ZgIr9D6AvLGcNG(9*Np$_FiB8(YH-XKr51jWF}cXUvd$S- zCPDwexUv8)v4erI0#~3OU~w*znUoojgOF$#8!7o$7oA_+x(4;NIj?n1*VS?pml5ZG z2oX^JpB~bDrW*08oTmQrEFD6jifAG?Uj6(}B<0f&5A+YH)U<%{_dMp=3krhL(S)WW zd9(u`@PocA)txGmCB{wi5{q-3(Z;q`O zETerlWm+h6f9+2}OC@1&EuFi##^3il06u5AFyP$kHU6Y$8B}Coud&ENMQm&2*W)&0 zej>~wgisd0%B}~Z$q~;ze@0_2K2+8R(C&k-C;i6{B+c;MX!}{VEnN!#9S;A8W$={|aMr z163xE{2RV3Y!)8(I?8nc?@Yh-ccz3%SPhd~k8?~r_>lt-BnZ}07NBFV`A^2T_pIg@BiSXz@#=3sBDHCRe-gfMOS^pu z`)w~}jGPV6Uc!3fQkolAghQ)D=^DO(8guqSeBjkrSw%Y^9>1|woj~!kAveyGV80RI zvVIsEqVYUXo5ovsA^vP}{CPd*#y~!76Y7{&3Se0+%Zlwcj0X(DV-vU+^H1*FH>cJe zrkr@`DQ8fELFxROHT!D)vf(9k#V||z^)Ks2;}#@gQxThyzx8>v{w)tchZQwNe3|~W zE)-&jQ;Zh-PvLWx6?R2Uv0iF=zF)ry*0PtWoZG=%1dP}U9yJfOGhv$Tw$VgRdXh}A ziQdcq^89dpe2czIS6gUuNe-VEu$=EZ*TtXu!`t6>=KKW|kZoY0{odY*3%O3E)A2pI zrv!qD)~qlyoC;f`Tt60G6CZcHmOaYFSxCQ8b zG|!!d(xUR7Tip9!-ziQGA>c{wsy9`mR-o%89orjNGiBOl!?7D$Rvh|K*=z&Uv_TcRd3#pO@^>3|%+ z@3&-wf9OYP`l&D2B7QSQSahL-q91nl6*XEP8vr%YM6@zq{bj3WM?TEzD)hf;btab1 zGV4TRnMoncOMEoi7_UBArLkX3qnIl}Gm|E(Ln<*fUOhAf;~raY0Y;rQ>26(}NhY9h zRQ-+0@NSy`j#sb$p=*3_y76gDFB(8!T(;Q2W{o_P@vXJ;G5p$K@k_bFxWo_@iWuRF zLbdSJ0s997R^LMm=ml%GlGJ&-Y+bS;Z1V3bf$S-9BMKuh%l2k+mYeXS4cT{ zYeZdU=}TC&9b%vt`LinA0836Ub~d^Rd=W#0lX?t6MM<+TjHXU*g&g3HvBRnCyBe|Thw zSHJsx(Ywe$gH}!MHln%cn1q^&$RZaHFGH_wnZ#`Bjr{G&OajBK2c7=!S{c+{;X$7< z2Nm%Q`PlWo;>Vd4iH}b$3kDif;~>r4H4OG74J=Uu{<#lQ+cxg-xX+{5AOX9^-}Zq9 zzUeLJ!TUE;3uj|7@(2^R*Oa3*}Z*}}W#EbpK%QXPUou*?HSep}ChKWIOFlII+q z++*Oc>uul%L&)hLAMlkx2Gj`sjW$p;OiL6A8XPcML63i1LyzzHhI(A09=IM?(Bt!u zay_OK&H`+eHQtKbVLQ~LW8>BDEl{0-+-XE{egpgGtEg!GmlG#2^YcE@rwNC_WfE() zu(*JWmB^p?&OsImGKjHpPcCCa=REn3r`}X(>;8mcd~1NMs~_Np_8Ayz16o%G7U5u{ zRS(hWzdSHNo{BrEY4dYx!(Nm}aA@*#^se%gQB+eQk=ZVQ)5_m2a?kuvm+t;y6W3io zOv~rU{1Zdb7JqM+=mVFAO3X7(S71Ti4j!DSK1uvJwF}zuV~TT7n%UizaL7 zQP!l5vE-My{>r3S^5)60L}_UZ?FKi?>{8Uyzi^m4{?&%W>IOMl-}1F-)-{?K2W>8i z#;bq#FzmsQ_`(t4jM5m)D2*mk|3_Vn-z+$PX}uL(@-HDV{PP4UbOt#$O^R2~QCk{c zua&DY?1HtEomub(`cgY7&|j+Zztw#t?dddT)+G0EBM(;T_BRP&txwDDTSN!c9Q#US{%CqZa?1*x`89~R&8C4< z+6mg!`CkJFmjK9|t}|M89Nm0!RPLy%wVV7d6G$99g7eVJcHN$QBiYz)U=G9n4{p8eekhnVlf@P{XpKb3=IUf;2 zvp=!?6`g7s9mQ@=XIPaf;b=bZIE2V?ww-68{nJBa2QwK=`R?=`Ly7pTAI( zzlBZx_&cDvz*VSi=kDm{Z`3=3+NH&-OS{yy^vp&Z@2vvZPg*gdl!l)0^O) zdyx)0VKpfvb#^weJ-I<&z>;_<5J4$o4N1oWpq*M@oMV@pb$JGt?HbG_8rDn&vWGEL z8UI*@vo{7Oqh$L=w>DIyrzbAg3cke?dXZm-2AiTNz8W{^;3{B)2!+03;(rEEIlndkosKH6{Oiq z|8O$_oKYk2qtUABW49fdgYLGbi`}k;M{r}x_7?xikDS<#ig9Y3)}j%RmhDYd=;VQ1 z40_~0hXj^!gYyJ)s)yTyvlE#+lJF+tYM%2HE52(xt z${;98Ptyubi3rltDt=o@PNX$ubG^Dyb$JB=Qyu7^qoT-}r&H)$Pg_jLX<3;>p4We)!g$ z<&Iy{i0x))h2ugov{=zUMX7-qSEt3RU%bby4uYws>mclZ!%KqIft&WxfC3}KxZ+@m z6tHCGYp$!>A9g#sk7*Zys=;>n5p;)B?sh@h?;r2IJGU~X>CSEZWOs)VU%+0*Ey{x`M`|n2p6v!Z&Q+}yr<7A@`30-Gjt&wCBxKiJ$2}(?xgf?kw znl1hlf3W2bQbD%iOSEAX!M?R(^xm@d;qCHL!?Lpx>#&dl3L5y$da4krPEKJVPNixzgd45e~76Nf6W_u z;*SByf-%IOrR&io_Ale_fIZ+(0sN79Pl`@#cZ$sWDOWA04Vcm%nfE;--pv)!cz14O zuJT(EB438bt&;Q4quq$bo7wfqolBPUd>4c$-V}hR0m~N4|ox2__7R0NM30k}(-C|A9A`&m4IyQGl_0j8*bH-1mS&v!e zKgLiFuYbU`>9-GZ(JlsOsP-IDwV&>R6$-Lg!O?$ghW@ksdbTFStLL`Ud+aNN{nv&E z5@hJPceC5VjBWXKT$-Gyw7+D!%H%vl+K$}5ze(Fl*`aD^9eFX-dvafU7}di@<^(C9LvIi_QYoEyrw{04DMhg}`+AJ{NUE)5x4ktGZl;+9aEe(gLV z`JWO{rR_B*Dj~6#|Kd=rFa76oy`rYfir9EhG*-l`zkaubCk80gE@II8(rdfM2wtyk zOUa>=?y~M9wW1~Lc&z6Z0@TMvk$0iQNz>my8&EO=pgna9N_rZa z-7idkJ3fG~Bs^)AH59HP@fXUP9h>X_3a2)`#SiEEH6(uMmE~UCk^S+E^y#`^C$v`B z39Ub{6Ive*K(X&v?)v@70Yw2qWUVo+EwN56R1SeoY~7nxNV-#*U$+NHgwL|Bgn^^} z8Ax9@kdnJ&C$LYI?+V{ph93*p=KMhHRC@!+U%Y(}SovNCD?c+37VZXu;pc+j`(+G~ zQbs|JjRn*P;*UKZ`S(2!v&OgO-AE#bWoa*9De~7JOL6F?{lkf+PmAY$AJ%Rc$LRfV zfYW@@b?Bpzx3%D=eB#I>I2hx}A&smjYi1m?bW=Ys&(@#O>W&)PiwDO3-yMi8X;B`VsGLvJ zw#|;|pi?Fp(zlislijn}A2vtgKL8NE*f(bZhaR%AowE4O{gzxK=Mp_*m!1okduh426cz1&?18h4RZ4=8vXj^t{ zi^SifW>)+0oq0qj_W--?hyYp8NBD}wzs>ue(Erud=mUB)c>Ri%NjGleH|*|WSD|l@ z3P)IX4+uLcO^{AT4=^GWK?IYLf4`g7%S^9(bh;PnWlFNX^iEti)V_BB-^)<>De(pR z>&{}oJJI=+Xy$*Ib^R9CR>prV>*?>(PnU6pcw~M46j$xNGWWlazkgr$`S|<&A^%SP z{*NAC{de$pLjd3ZRsLRh`2V;3J$3N^yZpUv|Gn_{aN=1){*Gi__vPC0_x7Qg67O^E zp1#GEuZ9`O%1UXl1s;^{9BQ^Iwet)FQT8l z#OxNyoPzN}c$&=?;#-t#g5?XLMiVJZ_CyMjKkWPEIbA>C=%IGzrTvUBm5 z@h{+rz>MCL$_vyUn?J7&=kJVKK?v&z#j%deVZUnW!Ro46jhRkI_$%l-+k>&P$m>Of z*`X0O-HmA3-UnOv_PpkOOip#>lRW62rGR5+0l!3|g^Cchkfa}^_)G>oE8qTuV z#yP)`+1SssK-d^sy*IQHRXpmQFrkg4m?un#dNXs|4vvxp*yMY43&75P!OcZ}17GWU zG)vey`Y%VW?t%jg0z$vCv<^DB722S&mD$V~%DgSstMyJCWZHDwDX@WOr>9L%}4)wDx6M zt4(wyUMK2MRAa$zY90WwV2;!~o_U)C>4vUfP);_uypOx~;pTVTu+@+)-nDiNTkYDn z>LO20?!y;K#t-WlKWf?d{(qQKmzdm#>;}?*rqss&R@!s}Q0LHSzexOHpon>gwYHb% zoSV#BE<rM$4>&OEmqpDa$HwJ%jpXkiG!@B$wvt1DXwo|bkm}R%{o5k;D zIg$Q$>4(|;Wh!@SpUg_c`0Jd2_N+4aaLeNRHO)5dXZ$&w_&9?nnrv4%J;y+IuWom$ z`-(YjD#^d+=d|bwa7nc0ICRqo!H2sZ%;L9QFCG6Ss2spxYoAG2;rEXv<`>upwQlRi z_PjY-)us(=G5W=2b;`)R-S>*bE!&?qbeMf|XGBj{K2-un{GV~-n8-i${eXP7H*{CBrSBd6 zZUrv^{U)2&LM%Wx9xBy`(s3l@d34T9XPDLYmj%4HV@O?upZ^|#H1e2l({uViO_)-i z?1`lfwVynf7io3d#+sZFyhbDQ%qh46`;S?Lj{<3RWwd(J*$_MaM}68masAy#Vu{c> zuoNc*}~Za?^OGE+fZm?1jqIm~&u z&`7AF0YUfH#u6+1r$wpw^2r*u^13C1PUBBCeVP4HE+!!8G&b-BYCJKd)S5A$jX#7D zZ8HSzD3b;4JNn)-F!REHkr0%p1+QPn)l+u0qcEUZkvOYZTwNkFW|z^ zdBoC$CX;bMXg9w(Vn1#4I`MsP55$g!biRXvj?Rw$RV#0t9`!yCp;uG0tL9%J^06$J z9INDW(KgMWCd3?`u-jz??`r{;hMy@3cd8V{Qpx`Ih@MZAF5@beNSKGaY zL=cnPE-SsFEmr!anzq@cSJt#Om0qQc|6fL>h?PzekS71k5o=eKEwf8c$!RwD?Lh^y zC{}u6?I%kMYS9iYOZIr2$|#e8V2CfaS@pIp=A|D1v$%TtybOwdlp1 z?E*S-$IaZty!w`g#0$a6ulBim^|J9?uXI?@t*{TYKbg9Tl{ z!6bSHp6IJY7T1C>WPa@$gKJzv?xtAse)Sg|+<0ZQyG7T$vu=&|uE?uvTc955NQj#H z_|B5Z+>eN&AyJWw7r_N4W;OLcyo6d$mGIE;x1qrAJ|}tYx^3qqj#@`pRKvUtx82|1 zT^Z!}tdIY#WX56Vc)atj+cCbf0qu4sI=DVHeZ^umBOAfJv=U2fv}XM_yIDteVf5Fr z{q^Qee+v&akG4?5{{jzfB*Wr8jqbnwb1<#$>VKKhyBo{RubaR?Mn9Kt6Lv#WlB*dh z4-H_=$fCy_FMK8#B6oa;N}7i&W8Q@@1jO9IdE>8u+=-=QP}K=HTqHiI-?{~-6s ziBs2MV#kJg+d`#12pyc0uW$@Jf)IpY@9Pi%IaaXmMgnQ zp-4MaK3(3Qd0NO*9>o&R`OgIvTfm9`S8j}9==@$M@jKu8T%td6FA zi8i)^{QhalVY98cg@JZ>)H|;wT+l0g=*28{NxY$8bDd$v0Uy|p9~1siR3nRiDI&z5 zhX{5RP5x4YIT{CpM?_cTeGCvNWCK5z2lwzcHmVQ&IEtd)#!juduB0nxJx*o ze$Tbxr$FP$pT8*>MToVcRPior=ImL{_5Wv?{#UdD5n?26PFruty2zsAqH}D>+&E3c zg|WppD6w0ay99+1AM0SFUEi5#O!?i$St;J0!;ODrXJ48gKv((UEov$EKR#$qs z#9rBWI_eF<_;G%28w=9q6=-^!oxJ!&;WGhK`sLiXzMAl0q!;`5zL_mHXstLk+IsE! z=Vkg=;`%q^YtiHh@N-jXvF028G?fm^eX%C8==JEFoh_8VvBvbLs@HBj+D?k;N%4!90FwO{QVA*$71 zxw#%|1#xe+PcN?+xU3=a^VLWi%6(kN`_fwPmpQ~VC$`%BaLZ3QpNeS=qLq~s9w)gP z-`+PeS1w{TC+2QsE6t}-@8VDE;rp$xtL^yPWMpJcn&9Q_N8QpoZ^)u?-U;`iQ6E*l zbk#ceuC;$7k;7N^zp9c_;WjGd56}ITi2_1@lB+I5DR&E$IV&s z<1e!4L=C00!%dd@OoPcuoeKh`}PGH0jZZ^)cw z!ic>y`VHs3V@xrP6AxFvo-H1fStwg1^tg8YdoRO(41dMvC)-UT!2l&){mlBXRf?u} zyCj--Ba81=a3U&vhAerQr-+4Z4PMO-nVKSTE632S)FfSzWtZqfUcG3f?sY;@n?_-r z7*kjI{Efu~A5f`UjVDi78BLt9jgRDZ%@_NZ`3IsK0M!WT43+A7qo2nkNI1g#dd`RJ z#Mm)-#(1y&JNRJZJBH3U<(k#n1OL^{BRC7qOI-ETtA;RorPfk*cAs^UT^7$8l z z`6B#ZA}TP@KK|^T?)1%{xk+0!*4a%ktNezWUB`!LRN{}((Sh^;40 zhi#{M$nj4SYzO0GviN6Od-B9h*B^_2iYRjInfbrxhW!+`-NkuOkDQ^yLbS;s`IvQt z^S0R0ff{Ef(=ltz*4Nb^u9i^&%U9J$5%1^X4Pz}cR3-D!GMKDvesRilEy-F7>hb4+ zkjNc>q&)L8=dVTXc%JJln-)3SBJ&sW>`Zn<vxzLj)O}I(0N$5 zcO9tXLL*jp!uZOSwUPTev_Q`qQH(CZ_pP?i1n^@}~NXkaOh`oeWjG@lY;}H}p zjXb$(>6=B7Cp(Fa>$vWyoZQuNLbpDshS)zep1tSW@7mOzEKs)d0PAWWZbGu#a02lP zm^6ZDe5_J#26t;Ed7mksx>g*B0x{zlhmE{-Y>-G@XnZNn$p3FAkVLwKDXIY-!|8p( z-(WK@KVH{Q95EubKl!;f{0XhF!|9Mm@ZK5j5=*BLpU189;|$`8Qd(?1Z|4c6 zn%CbWyu-1#f5mG7Kc_C*GXp#R?Eqcj{0nUR)a{eA;H*|4DV)zhNCgHb?Cu>|OtKYEkz5RUx?we=&b+?4#{9!4q_$NL`3}a5q+2n_o77 z27eI@%`(5Z?XuEg=*I_X^*>zN;Rvn%N80M2L0%^H}qt@XreB%nUI;vjj*jO4p^4|FEcFYxI*g@e z-ok>Wec~JYa*G&(`NV;ro6tnpNJP!q;f$49VB@T+x#>uPUKS16U!N})=ZU{+6Kms} zIy&C%Q=51>{z6{cMEDEgckqB`xK>W<8Pf_>kaA4LIPHLw|>s2u30(I*!*zR z5#tjd)^@z#r>^bV(&4r7clwU+|F_!sZ!x7@MO$-rd^llxa~&Ma1fIj~#6oRe>#5B`F^!2g$68jNHH{#Ta& zUHHeIo304_M+fj9whR2fU$a;EPhvm>_($im?eURTDcGWcj)1&lUrMm~vP7sXe?61c z!0=C+$^VDCcY%+py88YTAQCQdqJjoR1sgRHwVmzn-)v4YKxEn z7SuojWI7H;Yb(}XsM;2LrPd+})&Q2P7cNynwBr4YqxI6NTx#?G{?5GLM7CKMLSB2F0lV_nl=Ju*J0q9)eSNr*a7pMptJ24l@XnND zr#D0{!e9W z*+iqjjMx0np0lpt&{SU>vfi4aYiX#+SOQL&o4h0FjtqNdszryth{>!;+_sqVW(*BCJv^J-$A#wK z!9$$GMHzsp@@j2DG&sVqFJKXAV)B1+j%vNGfdPsH4jz;2|n_3Y$hV0`|us6Tb z)6Y*c>WJ!`6b=>67I$Sv0lloV7iSfSCT?4#j0ui8R~^hMP?MOgfkQu?S)dLgbvcZ| z6=Dpo6k{-6jKLR-F~IxV4r91kiN#wrW@b>EP;t^vwCTDr z+f-4Op|dqyLY3}4BQF*FqsxtHz3eYAttV`LE#Ndie#(cuRI)p#=`NDpzB(f?b^9Us z-0AF39rW3U&xN!ZNi5rB6VJ1cQ+b6dL^` zu~0DhOSai`h`T?D?6G2uAb`jP$pJvOpPhx7Bt`-TUuDYogpy~|3+-#jRCugUw!bs@ zyTVy>u~;=(L&3W{q}kP;G&Ai1=_}~P7rFL|O zsICB{`1HDp*MU$2238-0ifkQQTpZ2-82n>OK4bwWGw7Eaj61mX6#&3~P`pSlaasIbkGK+(rK*R%-n|oC zgkW7Q=&XxS#uIRetD>Rc(HB;FfPofc7WH`?=|of|ZwRz@^+O;gvd-nuB&3;^KVVH zttw+mmci5zOAJ8Wf%}Pk!bu6u-%ZI_@{+)s79F|;%5s(Yr(9bctyUpdJ;C1ydz<0c-VcQ=0i4_Mb!~*eoHDkh22!>S>wGIU>))Ct zDR|f%eEnr+XnZs6}>Fi&&INBt_oC5IGk+{z~Tr>2E3zPj%ij}V=KFF?E`G!!- zGd2#eOec!G@0s(kTP)FKjn0&jik4wR2jA4sSVEolw+M|tWoE|267iheR27sP7B8Ksq7r z_nT>OWjv|YPecQ_x}{jgfbi^<6W{3Qm>8bDyZ2F3F9uA7OtFA5YZFRJncQ*(m2{Hm zuhj`1aS~c++2cFB?_sr8e9=zI3>&@Pp_`5anPio>Dqw$x_t|BY;|eV9A2gX@|0C?8Rqmx3Ezr zf>8$ZzsS*>`-+>GjHYG2g!Zcf)q9n=+HbN`I9j$Xq}|2S^ip=+8qi6B~4M^N&39ngV9H+il!8m3zCcbY_ z+`PJHByK+g0vjp+{x*t+7Tln=Au=9~2)cLbNnbP$ZyF4jg!9)JbI?Kc%w=-7!-7F6 zX+ZpCjU}xAHOVV-V{w~?SouQN)TgjiLw!Y}+iK>%CX8Gxyr?OEF*I*D{+?_=R}IKb ze~L`Y?E4F$c?ISNx_AliN*SG?sRJ>{N=Oblj&2CAGb7~AX#LF%GOaP zR{RA7Ym~iK$V`&bP{9_1lzD<8U1ixKZv)GHR#jQ6!Y+4D;nymyw z(n_R`!?>2&{h`kptiFa}MDiTCZ!|s&PQ8_3D8ABS#{(|ZhSOZp`x4Rlli+}npJu-3 z^Z#w@NVL=EPItvmqM~t`p6xjFx}M zZCM|Nnk!bxUz zH}N4fe?o6MN6$;B4K-@l?y)&vq6QoA#CyQ1Z?WnL95w2mZ)!5_D~X~Yyos7cW&ce5 zgAalxK~FX`3A%uv%;fwU79?Oiqsi$_^3;J_j1B##D28fv9*?#FA8+%?7xZa;!VXR8AJS@~Z=Ei>p#L{5to;+ z@3AI2n&kswWc z`s#xv##rtN)&P;>d?ec8-R|0m0_e$6zs_m~<&2gmzQndLout_)8Hf#0kV$|6_9g4X z1GbEbZ(BZ`CPqdQw`<*q+ZCEKLzGFDf(iOjieUeo?@tvO%K60Y9Nb7rEC9x|6rKCy zQ=vHu^(vRdE&7lBQbxYabd2nr`t^;r!w1ebZvg z=W;UgNF0$fm}vEwx^%aeJitP*q~d}uX!y-%12jy2y%P-+W}IQ?GPv&?65wxS%fSB) zx*EelZH@%j?qi9SZWj1EQPe0=hJah)9|VQx@gtJ7o@+vFS~hpCXG{k-2Zy4wcQujG z7Ke>&ok-LPVp0PHz@Oqh?X_sqf zH!s*$rVKIL%HGGZt*m)S4nfrNvUf~SI^`Ae)3tKGeRRk8ymFNf9HrHM@M8VDTOX2n z16=JtRPB?f-RiONgFi7zNh`g{Rx1ZBKk#1f{Cb7^inQg0ta4uqcCLM=k16kL`e){^cO%Ku)tPJ_7H{R~lk6l%~*eS<0K$(2yy<^_ptwQ)SJB~dN z!m>E_C4ga;(A~}}nHL*5@{ba+V=0&Ph0E;uV6n1EW$9Q7hgK*ly~6cw!`w-_uX~I1 zbW)l#bVka}>={~6C(LkLw}^6+3UsOhTHR|PM=a!(UM;dRrV3DgZK=vACZWxqzU~Wb zS;Turjxbd~Rq+f=j5lCn{FY3NGi73&B@^R~W@5a_ICyRLJ5|(){7uWmmgj_8Ub5;4 zZ6{@ReMX8upHvwg?6WxkHeYHOUpyXTYgMbgo3ZuKE>goV8C($>WUrt`8M{&F%i!vl zaY6&3G$p?yEX*xK1KM11(fM7d-E8dDj_H{H)eN;ukAf_o)HP#WCgZfujL`ON%&5;c znCkQh`AX*Q$%2b(ZAJZWRiBavZ&*C9{ z{x7p}Jwg54q8^%WP{t0-cbn3gfm|z{#T-4mOUzNw8yBMcn~i7W**o!dKKpY%2-3a zr#1-A-aHRDYa~(^6{U$gp|iS9C+HPCEtuOCPa_X#nc(DE=uw0OKlDX&WA5RpzJCJFCBD?mG?0eyt)_;veRyWUB#xwp@LZPjR#Vmifv*CEl zHzrWDG_SxW?%R)33Z2kg@%PFur1c~$=#I1&*Jntpl}Jx;&y}9{69W$1TOHcnJPi+w;NV$9W3=|HRYa ze+@qbhwVJ~1ONKmCis+oKUUnB1)t!xBUX-SF-wsg0J>O;Ld{i1WinaC=VXjZ7%LU* zn?wAsL9)|dVFz^<%5^G~9C*rwW}zJ1S8lFjP=r(`uT;E-jmXfJasGG7817(0erSDL z6tI~;iw`x)yJVl#xn(=Fyb-v$DB1sLOawAF;0J>!BCOWFXNKB5P54$d3Fo+5Dvlb8QaZ9n{5@;=!+w;L<#TV6D zJj&D7;*b2$TBw-X7PD%-$`5)~82lKbZo$WD1oG=BvUf2tzU(Czo;q0)OGr_rs!Y(N zx?=JE=689;dLFU(&F#3ab;wJo%ZUqn3~J? z?EOLCi0jn#{&p?L1>(!Ca6*BG@97*Vtdr}U(GPDl^e=`1=uDnY0J?vJ7^!t80Kq@- z=7hG}_@$hE$mzAX7wYGSx0F9HQQth=n5bP#VWL*wFA;E)cZ_Akf0AdLV?kPf?z2?T zztl_=>Rnx;y1dE1?%?uOx*=;Wn;2l$Tncfs=5nEi-zi@yvsPZYG?#7m>>B1IYc9Pd z%RA*OZJpv~Vm*D<$UOpUPL$cEsFqkrv6z~(x+SpA>Q=k8n=N1|zu;aO)k7hddf0By z2Yt!U`~{d}(a`^ifTf)j;R&WL!zElIXq8MQPQI>Fq#B1qXzmsVy7FEk~o9o zRjyv;oP$&b)Vr8q8ouTvs)$KcpOpFAzVWf%rymcv+tcbY+^tDef9{&`kW9wn&Wx~o z+n8@((d3>N>b!%3$VhyrK#nJW{bqo(gtie3Gh*;M=DiN#YEC5gDBUhKq zNA8zs2{_>0w^E=exA6x)Cs4Gn0qu~KD{@|)fpHZx*u&c{gXkP4&0slh%RyvY zbEc!>_+QpL-&H4NiEMk-4>?k!fqJ_v#N6YP0}(EAk3VIipa0_iDam*3u-i_)6JO)2 zsHBOO9bNk&`}Hh2H24m~D~i>u4sJjOoOVdtwIh=Q?^(u~3QlD<|J4S(qIjp(gkdGC zM$V2*QNBbktORzbRvvZnr=sy)Fip|;2QIuFK%{uroH`uYUm*!YbEjIR=q;pghVogZ z$-K{nh)ed~V8tcV7LRR3tulTcYM%ckzYvq@1|(g5U$?*A{iK7x8@PDx-IHE%cWoM_ zPx=b0uGiy!_$N*7b#$E-3KiyR4<4en3d4o^JzS$CjnTkpSpp|7l@hTR2S$3Yvz)=a zzzW;Dxin*zuorWG$GcW9+9vc&78G78h=cp#wYg&ZnWB*=X&UP_DM?@7mdtCK!I<{W zC)ziB6X0cV<)?D3WpW1p-ENk3OWm#J!eo%(^=>yjWX6}QAy~cZh!&qP-hNo`@Ii$o2?9@L{?dJf0LA+=#ODS zv@4mnE*~J8Z~{{%RiUs2@fu?0e&M~ERiE;)i5cZ9qUC_{m1tD-lX2rc zXbGIS5Ty&q;0(RgTDD*kZYi$ky}9CuPYZxJBW485wvuGtV^ityXPO=CpsVm%@lM)h z-R|t6(IE9Onb+&~e8_(#{*gl|o-ELztB7uF{>ACq+4IGW)};?cfBUdT#fx_HxbCXt z=2mqvKA8)$XIXCe030;<$i=+BwEXT>{v+`jkTMR}FrAMT+E5}Y({NlYF+ZPo?-2^< zazE}+;L{L3apy&0WUZyTDYmcaZ%70aMO{K3kz6?CSn{4W^*r%?V;>UVHYqjnNV|P} zKtdq)@l8DNCg}aa3pcG?T>%C>C^b<7!&UOCciVY)6dF1 zA$dJKBBup|o^|UdME~j~1xp zrn3}9Bh(z%3?BC8i#!m=T3JOlWo4^9>t=dXS>buHap}+zGi? z@r>|s2p#e+m9V~Jk~sAGvo1na;L{*Mao>-w8I-Fj>A=-Yp|lrA*?AJ#9YLWyBR zn)4TRD84pU`ZVEaKT9w_KlED7&>`+#@$>oIL1Gb&_uX%jNj2uk={w2)##SIb?jezMKAQS z%3H$EF|DzZ4kBvQ#McJ<|4m;3g$1aw^3_wXs!5K?jU~RV1;--Se-M{?PDNqN9-t6` z7cmD6<}p%%j!|Fi#awJZTyv4}1SJz1J57akNV`Wm9+3r{NW5>Q2Aiz74STq?@7=wu z3+j6PzL$-)ZK=`w-4-((n(SNCCiqx9M36HaIc6LElcZnNmM(UbWt_;6SavdaZ$bq` zlZt{b+?6@&Im)?tTxb)YXw}36lM#39oT~GUrR09->@KEmU__bzbpIjz+vV_YQm}b9 zKi(uv6P8q=$rPr^I^|aV2M%l4!WL?JVs6orW zU^Rml_E~;5j3wkV|KNN)eNyr!(sLuZqUGBg3apBngy!ABjiRI&2983Ot_Qy)ojGx8d zam7_;^}(~)9BdD@elKG*IqA}g=3hHRiXxB>KQJp+;S}nWF!GCcZ9CgYW057ET~!t< z{(5N6hc+POl5|Kh@UfxOzQAL$6uVlRaMKO>oP?7dep0p_9*bea@u^jsh#)CDfbv{f zzpUd|^LKpl*L7xPGNwXq4z7yh81}e?88x8&Qj1PDpMH%%>(n@iun-&N3mdA&Wh#hF z{&thZYm0BLpX?@vKeqCxQY^;Vf<;tTQ=SSnOB=2aT0P8(r~-ur?XhYat)9cGM#G8tkYgD%Qn-rTjujWfZm#u^cO$UoZ$d zoc9cNf~n4cC2)h(+@{C>;LPa^aP$Tcx6vBwJZd^w>#Lz<6ttf=cCRx>eYTGFs((vI zYjg%+Sv3S;<>`vxV~y7ugd-CZQ)^6A&LzEE=Ju#Qty(;16|y2|>2tQ_2FU&wgA0 zApeiVu|+s-AZ87+N5#?h7Hm0i)&Jcubn*elZzbK&xL>OgBH&bB-cNqa$x|-h zwBzbT$N>dx4`ei7No zyKTI71yAMAurPFglfApc3Yy5By!+dRiDU11)S&KOdsN(Kk5ND60o47BM;EC3@MoP+7YO%h_(BH{X|U0eGH5!^ z32t^Xsh$kHRs6-O&>cdbdOq5Ic&PE|nD9<$0qOE1XPsgz{JnA=OqKbQaw zIo#h;Ii-Nx6Uhx|=)y8j$JE4*`S1Q^&!pI8YByQ};dZVIEuHFL-}cdMr4}rz(5`PA z6I?S^MHSe8*mOe87g--K=s^$Q9|n`tZ@9A|?_D_1<^0byoYkxBUT{mAAkF;yns;+Q z+9JJWdNV2Ljg61{aYrd+V1a!zm}}uGx!YyfCu?E_|+Z$yzTS$0lm~u z1E@3kIJm#EuzBz4Q%_p?>LH<}o0Gjzzg6Z$Dsr%FO+5+BIL!4d?5I@p>Mc;*7f(Dj z$6E+OxQ`Djv*#@idI6~{gz^sXJ{R;srWFz10qMC$W&f|x*RS29IUIc1e~i8!Nrj!) zIR0z;`q1Fo|BLjs^(TIB{vG%Z?({q`ePv*NcmFr&Yrm??ZR`n&Da#wL>`h$!WWJ&eO2Ai0gi@h$QL=mbo=F?{>A3 z7|to_?{U#akI>T3#*)3hSCt%_n;dXd@{-(ikNBR6RplF|jgLQ9Rk~r~=C{sI4(JO^ z5)W?mw2NZN!ShfDPv}uq_VSdY`E^ats4uG*|q2rScYBJ#6B!)FOj{!imC#`#cKCjEQFOdw{AE~ zaVq*`-h$iv~VxM#81@7%Z#F1l@?0r_*^-ud^3 z2lsoT9>#^J#2fR1^=Z+E_8u~qCor&EpUN_QQkT4|=>z)C{PevvDECSu9ccS@@svu#sf}C&B9!Yz5zdzM8L?%=M~c`!G?F-@A#M)`5 z^{qh{Q6^av126v(iiY@_ptEMzUqo5^A@zp+Xb*mvMu=f7;)6LA@k|d5Y7OgL7Kh6- z)k&G;Mojz+C>6&^5e__nh~539#UZxEfFT4^W-)f zf6TsXQcH0Yc~W!uBi)8(KCEeNR{u;y=l!>FLONT_;)rb3PJdrvSe)?qtuyvwE`^}I5$gBewrEPd{$TedX#clQqT zUYUp52gTKQiJa-*4WPS`teZ);R-^w(T8Y9 zyNq)BDX0{@E9ON^Hj`y~DPMI{2~m7HYRXrK<_<(I<4b7Xr#S8uUAeQ@MTx51e0m(3 zy9bMcDwWPpH9GiCz3P7!+SDW?gy?agulkkMRlPAZ_YpG6N;2n0(`rwQ42}N$Y7}TD%8PvY)6ZQ*WWOyWA2Wr3B zR|J&vkEoi{1>PXDSo3=y(s{}m0ZJE)yzB6sbV+u%xN|Y9lj;81Z}=t%rDs3BlYZ#f zQ+q%kZB(4>e<}ki$Ojol)0@h6tCqeA91S-I%+h;SlK3XK%WKe(rsm1$cI^7J%cUk+^8< z#6Fn?plWa79ooLI;Ow&i_Y)0EdsomPE(^cBQ@fQB0O4$;qh02??&w=1ur%;2UwKnW z3|NVRwR5LxiaEbC@24sX`qm_3Lf`eFxpgE3&>r9@@>8l(MHufUO2o48R}Ba=RJYJ} zuJreuwwqQJ;4WNtOt`xn+}$G`xsUm&cl6@he-$5O!H+45b}kTMTE}}v{~ZIo)XmU>PjpZ>fT$A-R5q}aT|C5C z7+s^Oqi<@i+uUm9mnaG3yf~O!<6qqThM8Yz;H9!6Xnu90q2`xm?U7F*%=1d}XLrkz?S_O3qY_Wf~BB4Th)4dXGm0D-{-OKpAx5>K=w-WCb z{;+roVlmr(w(I9Kel9a5IO0;N=uL-Cm_d_t$5nOejRj#QS^ZG{j6`+X#Hk z;=IDn5C>Iu9ol$U^Q$44{hyzJ43g-j`wQh;(a@j2dBW*k1&#fdX=b{LgD2(`0df^N z`Jp@7U5akx$QMZ{H0Iy?@cK79LJxK6bLz`t`Ne;?I{y1ho&2|mi_ltTTP5Ay zvE3s&+%*@~BeqyLS58X4la4A3mN<2JPN)Pv2yo@0hh`ODSQE!%>IqohYl|;n?_mcL zkegLl_vEt8JgY0n{cpM$h%l)|_K8|cTG>oJ~< zjzBZYqT!GhdT3nng?&~{q$|47p{n=-F#$ebc2f4f+(reSNRJf}xYXjd#WKXg@pdk2 zsgAD<&)&I9&EWo4A4?86p6g#GR)wnDCx)AM^_>3YHa&YZo+OV2&6acsx%ljb4GO|5 zDk(d$I#m65N^M!8#+g}}KV^CINei!l1#x*@vGkWkKUAcsp|>6-jYkG0U5@ZF6-<{C zUv*bgP9xzEyLZA>Tp3iHJ~YVUDu5lmKugl93>r{qzWft8VGE_3&u}K%_;MTixzxGW z(MO?HU50)}%6En4FJb*TSrRR6moLzyi;~0=i^bRYv1nsM`P||lFPEQJ;Vo4Dk16;f zYcnKe5zPyljey#AdT}Qt_(owr8-eTa`B3nx?%>8+4{9P5Y&8Ca z>R(3vF?M_{ft);>cm@QUs7t3v66M0j_%83S-*=?W@Cov-iLuk->tSa#@Olf5zmzu} z8LEZ*${b={rF~846-|yj%z#Ls=Eme73IYGrws&$d04yjKldCqmE{mi?iOQ@_Tk4-I zh)uc8^houibgi9N!nLz38sF^`$=J|!K?iD*r{dy>zb5o4TK>`$h`F2O^k>ERxM^^a zT7wjv7n#v-?#RpW-b!gg{cH?!lE{UoFiIRVR%tOmC8oP-+=#{|2k=eNsR$wHEjBUG z<%lFN?WwJ*Nu|m+yS}K3^vP=5Rkrmp!9E@M>+^KrYIOh^nb}ht6W8`CdiSw4RYg4> zJ`z;29qSNM{0jkYej^U5&&j(9a$~o3n>y7xEr4t+3yu<;pG9Ld)C??c6Z3na#GXGNZS^I#z1FSHLDLbN8j*cBwc z3zzn2*z~$dT>uZfDnwinI~hA{r+y8y)2Wj;@=vgq4a6d2gHe@!Fgr zp_X}+;(X9koaq&AJ}|)AXbCeW0LE_Ch>GJU_VAscbv21Hr6| zoM~TBqI8S&1Z=nQ^j%(EQ~;4#7#Bb2F>$4C9>#pmlb0dKjt=83lIWps ztmBKkm0^#n+tp#zCjp z@ugMqR4o1y!6T5N-=iYkUr+p^)4$FBMf{OBczQ3}%WiMG|JOCx&7Yc z{hnuAH-6gY|7-hj)2Xj@GSbd|q3Fau4?RTA)e?iC@7%qWs4UZ#*}Pq&HG!u;Gd3Qf zhXr(w=eiy%QClL}Wsb?6@CCyoiJ}Nm2eaQ+f>CmC1$+SC}%5@GYGF<$7`GzT{`^`@|*6v!P zz{X4fN&*)48sT@8;~U91)0fX5P&}ml#ha-wOIw4<^M+0I=PUIxLe>**e%3O2e}0CG zSm04LqcErO>zeOMk&s&VHG#N-K`UAC;n>4-%x1s|$+hi_N)39q9`}w>A&Oj46p4== z(p)im_vu(_3cWj8WME;dy@H^{S2D_T3n?K|S1Sqwo~WJW}4xg z7ljJp@)?tfbieA|Qm9G@Igx_#RY(o9U)jZSOHe>ZG_iS4&*>5V z_K=pnp?G*`=}ozjxg8dF>#<5@3{^juo}qk=^?r{3Qigoej4x6K%bC7}Tty9s@VBH9 zuUKlc@0K+^imMor0=l+hm1J5$u^f~Mae@-*-)kk%_Pw+iD)n)oO zex&K|cwF}UA2BzWe-`5;y(Eu4{!76(-??oF#<)}F?FY)9`O3af z_7em*AHS+#fPDA@H^#%~VI%sQbfyimU);F@IGW-ykc^S2r;P(0CnqaVv5oRaQMV5i zoqufhC~8`)$CXBJIb-lRzXZnhO*49+solbw;VjwfrmLD}_BgHai%m0op4M1L4+g3S z@4eYY)6(>zrZUro2h0RcclPPR`oY;<*w7qwp=tDKZ5*>-I&M%$(;nB(ub0zKYu9#) zy0$a+fbC4^(#}^p+nLdmvAwFXB`P5;RYWMh4}(Q~)rma|0pN<9LL208HQujl<9GkP z%OIb;S?jpJL3+nz5AyXn!5}5ZbNC*;jL+}sv~IHC3HoZ-;qCb^h+^}uj>e%~GW;f! zVY{E90Xv8yq<{l;qKPFE(oP~YNk@8u4}V?O)l}wEDV+%MBN~+PF?I!KZ0OU_fd5i^ zW#0F>+(tv9Vg!s3W~~#YEf}tQ>#Zpm5!6p7np!DO2GJwXF6e65=AFI6@s-3(tVSW0 z)KN5InN5a_C@9(d@%)Iw|9!keQI;b^H*$|p&&DWmum&H8#J~5ICK)r9UUgg#?l?#` z=7*P|1<6U5C|kOhWgaZ~-EtmI&T-1Q=N5wgEklZ=&jm+aKMWJsA5k0b4$XUwZ?VL{ zy_2~DDD+T!G+5^t zMp?!{(tVtMNMoA&07M1PUQ}fK?bY~25Te(^{`uh@uXRC+Yd*-(m%6m*%iU%X?*cJQ z4Ai6G+(Fq8^ZTX%VmjAS{L3+5HueRYgP0vEG)K-q#GYs&*L%w?eZ6-k&$j*XKVRIJ z^32a%&t&?!ZB9QoizbW+&3=24dI;aRL{DuFC(!4B%grQkpUipwHt*e02oy{0(xxKP z^9BM&`R0a+D$;6oN`_75&D)Si_%O%+Y!`p*t16mzcQl+L)rRhJ$vra@-VwaVYqrUTZ8;ZK(Gq z#E;nV#|Xb4YvND(c*#7PoAcwvi-T-c@f}=S7~fMBe^VFOFE~L;6v*@>O{8Wx9N!UM zAvg*@TFl?n*~&0`PY(M?D0wxKWH|nKRp~a)-*Ge6(Xk2J!jGQt=6@}(3H>%5UHM6= zLc~>Z#X%Q zg=tN_`(mxkz_l}?4T(a z3x#b!sikIsVlRJMo^qSLUc|cTf&*2_8xYl*OlivBu8w~a%%A|QWeV^UnimIfu)&^l zSU5Rm(>Z;nhr-Qk-$EtaVcOvInS6fioI%qIAjZ4w6X$P^BhQb+O&x=#_v_5rN0(Ha z{aQAs`vKJGgtavjUWsmkqlSzsR<#)=cJ4nS ztDT>IYd`I@shw-~X=hiu`*==1SUchDb}IJQPKny-xlcQ7)(%pRPb&vF`Fq+y=I)up zv&OXfhW(6b#qVhAPWhm9q07bljOo&YwR2r|J6G@9&V()D<>^I-z6Jbk<-)8Jo7;>1 z_ye=|tOeF?elc~LnNRahReyT#)1N!u>ORM-8xJz>7Z1xC_x2gx$E`pG@%Np4viAn< z@4RpK-s7j&@BG&~yhHedGD$({kKyC_@z}zDpq)WwBIVSAm4*#V`wu7nsSC_{;~}x+ z=X2AwrbZHVsSkDvcn5R(dEfipn~DSA@3hdANzN$bZ76+X7MLTD12nls?&I-h6zFC|FI|a zJUS0=+KevDi}$n7X>tQ|V(PL3$9R-|(U0$VCtQNhzicuZ>mL_IGq%g#eRDW8c&FZz z17=3>td&8!$=>rmy;@F?o4vK0#FO}Ugb{%0SWV_SI!8i{{yh@4 z6)2MsrHLnG7=}f00JgI*RqS3@nODGbq(L$VemvoXapK~Q2hi&I4R#S^`a`4Fe2mTB2t}OOR$uu zX(<;o{OO7PE|(cRjsP4zq%EtosKmYIih2&UAQ{;qnpmR6Yz)v8>Wux+Q#~o zv{AL6Ho8_DUQ?CZaa#QS@FPt$i5WP&BEpY!el=`Lb@Fq$b2}QQX+k@v$mYx68etyl zHPBk-yH308cx=ew#{j&W(-YYKs!N}%0%d9@bkt1P!tSxBX2RC!>{SqhChj51D3EKo z6Z@7Gv^xglDV<0akpqnktoMj^@#ixOGaId-?hC8K@uva*tE%W)gZv-UH{Es~fjUZj zM9qtK{3$(-<+Ky@@b|B|MQx(6#I1c6RWr{f&j7U3*H@9DLAd(jKI>fm^i6%j$SVsR zvYP(b;sc2P{S|cW)7u=Kb?9LH@9P=5CeRiCJK51Sz3$8Za!Xw&|J%?>*WA!!ssFsc5@0O z&ppydtEik?&+Q88fB7Sze)*GzPS$xiCuIV2)ST9Gyn}i-(g2}={PL$7kFJ@pHvEXs zw{MEB+ymdf3%-3-`q1k5uJFotj|V7whd1wO{%1$1O|Vkc0=|TFEyz&j?r@cVZN?^ey9T{Z{h?YM;r9ivLGQOvd0zOe$ z#ahP|pC^>pM|_R~iam1$AokIQ*D+6$AwUuvW6*ig4UofN4Z^X3@he`&RpQ@L%OsY- zA3fspM_UfSA3eq3y>C>&oLtQxmU$KW8g!r+T(0xqweI}4`&6b+J^3X1IGWtu^%CyL z*vgvhO9Y6PTKI~S2+#hM3bm5ab{h*C)U5PrmCraCi;g45x zOlIy*rjsxjmt8pw2cY)QJa<)7!Do4op<6`1J2>q0v(jG78%*^Ww9BHV`mGB0h~W%8 z=b!A{+~2+}G$+Ncn$m3;^YJSx=tH&|IOUJGX*;bMy80rWe=C1(>SrwEki7knqqf<} z2124ehcW-ihaj@I{Yeszyr$qdDy2=AyktBldY4)Hgy~Pii$s#W`az?K#O7UTa-xo1 zvF>HcUy0eJ?hC64nG!2LT^ifr(c}P50X{eNeA((9D-^hiXS#vaZq%(y=|*3=Ax8*d zsP;XVpCdU>AGkAvK45gq+1YRg%JjaGVN9ZI&r*rI zLy80688ZwrFhC}64Q+d*lmiw>0_n@mcz~i8<@=^-*vk2c?VymZVLKS{PcG=uXVVQQ-1p=8N@$>u`En<~*M&oYEW8)`DNJRuAhJYa zde&LRS1#Y*Sw#mQ$CLyI7QNcU%l_`*RR^6*iHgUP*A_==%1R(ktZa8$!yYpV_*Ly1t>DsS(6Zd;wvGwGjOA|SN`Rz=nmQ?vOmX2GGH2>DC z+pJfK&R%u?vi{BV`^UQBkKwI*`kz=7_x8Mz8|ZLTWLbx}1x_A&UQWN9htcwKzwr<; z=p;F}y%GWeVSpU?!n1-lh{a1l=a;xO7c%HgKkAi^rm~!de00m^P+`hn_fs|JtBpeM zz4N-PxcPspf1!D|(xl(V$?{ZkVqXwy+zCSx#|8DiTD<>yeM2aoBfB~pzKMRC zon)={7dhEJmAaFyL_Svzu`{O#6BKlZh)(pgw_8mZq{;BNk8f8I;%Qa`xxfi zLDPGMo7;y(%GXRANn-=b(B|-cuYF%Nq`C}a#5GI@GU^xI<1!uwZ>bu7>9Aq`Rlr#X zJz4Afv^2lTJna@v4h$_Vhvl_->R_Ibzm!vk$@39(Fl6U4QKU0bq`%sh`ZS*daAq#52$Hw+R-)J5ee^3GYjSdV-OQ^|EV3;PvUxKz>A%ZLU(}y!IB$agWhVW$ ztn@*pq!%iEbSC}!tn@Z~uO2&8>BnT!FV0GDI@<51w|7v`zY$sKR}3VbSUfr2j!gPt zS?SCF**E7gc`$B3=aj5(;977m?CjH{9^p0}UaiM|#D$0yMEB&sMNw@jkkx4%+D}9Z| zht-(zXVTwKc8-6~KZ5kTGwGYN(g*J%9iT%0no0j%R{Fyoq+<_Y{WIyeWu>>DO8*3~ z-snvF^;zk64Ga2zj7x8>xNVd4SGYR?tLY-|)hivU3^A|8g8QBp8+JiH4BK7>C@= zVYT!hJI;X{`{+RE5}YwLr3WfgexFo@of!@S}bSh=P$ z0zL>u*;uk1sTN@tfy0^|dfphJetU~5uNEgm<-RNv8liCdh z4#>qmPuX|coPWxkPWz6>e2HJ!WzQdE&XLJqT>OQdf8o$o5$_67DFZXUbCbxN&4XT7 z@J9Mco!1f{WP^q!afg2VLF-C8joQ0gelkGQWG;GW`IU|84mWR!D;TNn=t+!anCCLg zT{lk|6H8veFxOAz$O$HjjlnPnsEfBQmFVe;v&GvXZ~3mXiOo1q=9-(4&S$3-{8`m# z|JhGf>wivFRR^o8m8w!liRq#-8zv@#cKRMFY;k7-xF=$r|E@I-@xG1sCTdxDcP<+U47)orR;`$fD+_n!>Fki(+xAvQeiuxb~}PpIbF((*_-5 z&?f3plf35sbh(nZa>eG&(aD9R&S|*>io+drj(m$XZ_S?y5d6qPXXZO z-*@7Id36N{0WPHP^9y!EqNnep;Mju{1f+ocV!ie&``spiA>(@ko8@B>7-yfi`=^b%LKR3)HtG!U9Q_ zsaI50dOGDCoPk7>S)lB3e+?4pz4AMao6P$kbowWhm3?;e)HAx4E>-FK4qn%;=)w#Dm4dVfGbzFU%T1M7-F-29a&K%E`oejMo5sQyC zx@8ByEA_j_h%Hj%azV?{Y>#6C_TiZy1Lw8BaaKyGTu)FFTfWw9hF64kNc&L}6$F}X zuctmXKOWpWzdwkRrhd3&@Ukk}s&sb+Tr=Vz^KFV-yDIr%a-_W}XP-*}O~n8=^$r#YIWg(|a!5=2H~qGI0m z(;Y+>s(t1{B>;YOKPthZad8EUW)O*s6-83>AiACSADUO&sXv_|xyOOt3Y$!Y$Y@U= zMe+VeaeeqTsS^3{_V3FLSv63u@@H>;P1ZIomY`PiA5GTwW-sjt{Ubdz?`M`4oP(BU zVDp}vr^Eyzx?X4`>lJ`p{~s_*^MB#*Ia*Mw80@u*6^F~!gZoxa$IS>Vvr{=H5A0i4 z``y$v`roOmbzDwI>KcQTf8IRhY@fmm4LUVl6@75OI@Ps5YpQzEhvesHr*s{8_hOYQ zwtPRuFkV5Rk^|0^{&e$HLY`URB~VXs8~UhN%YKUar=2T(3L!p4J6J5)3pgR}L%Woh z7r=RHW2*OeuW=$Kz`iVGGhl6TzG>bmrqt`rhDSGio+lD;62tvrJQIxmhVRp#zb|%6 z66rn#>0kT#PYUu!mH+VrLzy`6w@njRzIED>u-%2Q-Ic8)K>;+v z+fwHkN^Ft~>vb23ZQD%58x0}V8?uv=8A5F^g#S`dHUJB@EdyA;zl&a-?)QqVz3W19 zV@d#6=^y*0v%#`arQiFxn}dUu4jU*9@sW7HjEq+@>>yi6>g!!}IkrDvyf5$KEJMH# z%mh)A+_AF~0TMA@^JW%f7?OG|lFSaS`OSjBFeDIio%6nbN_KD33%c&()_(W+nO}>W zJ!;YS@<914JJ~V6r`ePDX?9otF3ox+L5u01`1+}=^U;$)4g~>J>=X8}Ce`M%1|ly4 z6I~9X&Cuq+#q{I?CM;!jTEiw%ga9*)zw}1CzBb(9`dX%%E46L1eQ>>!86ACs=TjEW zFWd0Kei7qXSaW5ayG4qfoJXX3CG6SrVl0{Dfk*f1r}tIf6RlP@&o5i2=IU9Ictw^8 zvCPHui2sxQX-7YsoJrXlEKMpX4d<)LDDgfn$zCEMHe{Yu9i}TuJ$zv9&e>-}^PZ%a zJ`5Gnp$we-jV|-qucE1J9-1fp1rRy2Ssg~yLgxWP&z0H z5-zNQB=SY1NN=PPA+%501@*2HdSAxVomsCN66wit{SHW_+(yvnEV4BJ_LyYe?m3t_ z9<=DB=2ueaaK-+jAn{oy^g(JvJb9hijC!Sr$&;qYS|eqWQYI^9o3-&pSzESCuMM54 z^DbHm@Uw80k$9n830)>mnCs9!Tsz12Vcer^M!{b3!}9^ah4+ZA-r>*I*uv(Dxesfd z4%hy$1EaOU#~Dt!)FV51AK@4y$&q(+*z|))^2%+^6)`I~TvJi2q2MW#S56y|q?;D+ z+5$ys4Z5aWa7pCqPX*DPq92QF7RGbbF!DHNg1-1 z$aXX`>wBc9Z;ZyYmKz!FeO2FPKfaDfHsEz4zB*sxMBd%S*}y2=aoDe(m%x@Gq@)@% z3|$xK4Di31c7i^>0m+ z=AVVn8+2mt9Pf_%0nN3Q`LfAi-@DWfDLK~jj-0wG0 zQntgq!q1Y)j14{!>^zn4Mt0Gs{FO>o2cvTRe*yds=3jesZN~rKg7#VP53zEp1`exD zgTO&)vY-H4cI}MDQ_ybJbJ_2t=88#69T8g@7G^-iYB>@wgGyapDz1VAIGJ0ZNElWb zv*lNa>;C*GJt5A;U-OK5%q92I7w5g}DOw z3NGZ6cX6RSg&H|MZn_ssK?qtiXCdVPg!YC-uKxHcV$A}v%p@A&xgRxrD$=|rKeG9a zNcoidn~p^F`^FHdcnaR+VO|PSvm~ydXJhNp7*A3QL%eW*H-~k0=+^aLz>KK3)qq=E zwRbo4$pN-H3;YCIw-+9|f4oh3S;*?(L-gN=4=_wKGVc|QiKPuKJ^Z6pO`*AKdFS}+ zEA35tDnl(l*V_lpZ@gF8@=>Torg|JR3LCC&er0FVo*|9>yeb@8=_E!%0Qaa9z<}F- z<}jd86(jK1zSfs41n)o@D%DX-(f(JxA4XQ0}egMFo0T@OVRK!J6?{r zo4>9p_mQz6A9sF~W&%U}mdqE=SVZfb4wJ6*?mRb`L$Cjk0EJ#LwnqD_Z=ah*1vW{u z-}b07W1o`+Em6nf&6uP>i`-8mhiKn_f#na)J(-fW-5~_SCi={x@rN>wpqq21fe|02 zI#hFF;2#R{1Wk<1M}NC+IyS5RO*P5r-bmu`3ljr~70ecQVRFERn&c(a&);{%5>rK1!Nw=E(ji&J2LT&Tw?DM%p^jo_r?xjat z*POkoCK1iYTvAiIk;_GEN}sP$eA5UEa8a`V?Lh?UixPwBG7{!R$-#8_N_DxX$a;ia ze25nDf!owk%UNGdTOcLFq);K5lrUMp>ePuQI$9uUX-Is*ri?OO{gZk z8}i5!m~L!=hkJjT1;{1~ek6*`NFXGrK>+I0S{zUh_f~%^0P6B`G6m%!o(PSZ*O(4T zuJ=B|=fokocg?W@fPPtMtouI|n%1#^i@^#XL@PyT8BM)CTkL8`;WJdUUZCnb0Ke~j z2ADM{t);L{jiB3ph#=Yz(FZ|KEzhQJMPOkyH>%oc_Skj(cWMeNimEmeu@9pF@X)-c z$Y~X|2Q>j5}wuEf;d8kQ)O1+ zMSA+|y(-bVG1^RY*^~&h&2}q4yb^&P@f|7zoc_sGgarfXWZt)D3q+k|eSLL z+OPNcDkk$vzoK2rNkxV#RAlj=h-jd0i|a@qXPoF>P&=4G_VTP(zgB`Z*JCV%rse$F z(X`9UMAOdfN&m8?kw7;Gzd05ry~V8V-jna6-St}vDnS|ALpUoz(D_;% zyf#ljlo^Ims2vA-&5$!UW}lp$jDw6LX8?d>S-kHQ`E*Uo1$lvuG5-7*Y^GgV@-A;C zU*DMFU9`;z5F!GJT7gQPs8Bs_F0~55e?qLB#G8BTQFjwou)Hge5-WD>cs-0IkpD~r zuEMpITtO~QtWrWayqx)iqU7OdAeS2Zytfz}XkC6c<||8ldgQ46vtild(^&z#-eqih zas1hJpoKriNYgT*eNJP)<{86t+Cua98sN#MWlV^e5f~BnBzTZY;FF?8-q$K0Txnfm z3Q^|Xn+`}zS;st;XvT)L#m`04vB?|zfk4ER_+-ZGfC^2=HWrw?_7}jU;>k!$!vdjS z9;M;&Dn(6ViqD~st@Gz6VhrGsMKFN3{QydW2=pm+Bw4Vxr5^}`{9LeYm?mqK)31GutNo2ntagZ=P(E4E(7la& zXZdY-<(U?KJEF4%*3{;2@4#Tcy?%dsF1J2QI@bsOm1$L2kokOUJ13vOFSY~(N4MQ) z=@IATPdy2gT&G(Uh(~Fm=Av6)Auw5G&7k!)L)j+AcEpBmz_&O46#3kK7Tx-?%dw?q z=;mk#Ca4Wlj*TTR!fLZ2D-e4$cY7@PMf_yb)sc>;JL3-rLE4iSB28|xn}3+hB9T3hE*X2#(Vd4m1Ic0+XNKO2$8l3=L#H8XNJT%&|p(g$e=f^p$OW5~Ua;xKShMQlz z874Zq^))uyn&hPl_Qg1M)C_$!miv78qqR*9_;1wpj&h^Il*NKKFtkBv?{vjS&(uO3 z`?n(yv3_$siw(A+88BBp9Y1=v%Qy!9m^v88A|7Jw-Z#U(sneoSSc5}>;oY{mdV?r-fo@pDM$`h!f+ zpsw=u4#A{2KrZoZ9ans^6BAa#zd^r|52RiYYO*(7g21??VVDjb5wv{Zqlarm$NrIr zFUM*V`iljKUGL}>$C;)o>pd>(y_Pk|v)cu1dfH_bG?cE4>GZ(!9D^lj8P{u!Jc6ja z+H+5qocCQtZgq?Ui)vOINZg2a6^(y@-IB0V);^vB1e7+4N#iHF#!os()UEHXd<1r#L0IFxy2rK2$@Cwdgtuf5?A zB4BJupKrt!5gy=~Qq<<3pSEDTCaWYqgA-yQF?XW`^(|ea^AFLX1mGPULWUUlG%83* z_GnR!*rGjXQ-gJpwdea?Jl}Qke7cB!h=Bpl6(x)btJ}bt43WKxZOZf#5;^E|EekYB z%V!}{c6+~h>U9@2$v(3=bAS9u<{$fVvf%n7(bN9w+TgfOW^2~04zUf*`)i@USe=`+ z;fL*IsoMP@iS5tD{@S7G%1a!^>G^rz3yAuxlNms>T}yo%m8YNXwgbBLzZc%puY*m3 zc~_t6wdN7cS6y3T;Jx>po&zsbLK6%5$=uw(vH<^~V`gM#M$9AAQ>!ksqyx9z!yLkl zg0jzM-^Y;dX%@J(H=QhX^N{mHON(=(D__m8>GP`O*dop+rYX_3?H>;zYN;+N7PKouix(;niak16GMha8UO%IgOW8m5t4x9;@Q6fTJvw-86U! zbd>p#VUZ%)ce$Erf_=)Hd?@2h9DBVUPMwsuN$5?t#uc(Tzx1A}n^%a_r z4EiWC^aGvV8TuSYIpsiJ*p1sEXx)9GAe~q|SG9HxhA>xf`WNFn6`? z+r^#V0GIr3dx}GxKNRer$~nY2DoY{P4gO8O$0FdkjcU@o-^;Lo+i??pIY_@4JW^T)alU0b?O)ZC+yk0P^oOCq}Q z8sTYCV%#kyEX@G0^WL@8v2-LnV?`~^r6&;EV^^3n%klM9@s(R&$*@H=@r?wX>vewX z`20TSwl?JFk4=uuZ`wVideHi+p&Kxw2FL;F+??ty+Kz}tZ((8*M}=E@L=)!_)PwMS z8_-eaPrI{u4RE#&r=(1Os}$dml9ljY=;Iz)rUum9{d%sHq@+VCz!XRzp0qz@!YlLu}d;Q zdDF{?Sud%qcl|MFYu=aL*ynN0UWDrS^Mrsdqg$)|mDt(bWHOVwVnIBZBrp^;OTvHw zxb<7{Ik!kPflKxzzNc^eRg3S*J+M4&i(>}}zNF8u{*>qOo_CgaU0oX8nG>FU6CV*u z!k&Sp=?pIh$kGj;loq~SU8zAMHp#>Qc)sinm<}3kzY)~izm73{WL`=iYQx~Zu%MG25GD@my`23UUA zw5i2Z#~yaY9lle|xh!7D$T7E3>$n_#RMA36{FR0UD$`BSUJs2GeCafJ@gh_%9M)2EW{$1j)4{*&qslg+eNj(>d)mPFaM+W zbQFV39Qs?OZ>-Xw5t&moxhnPMF@edOr}fK2CVq{4^T~E3iWOZ0FbO81cgOuL;DqNc zfg`mkdO))1N<2l44_FCp=U)@P>Bol4ES;`NsAE}wDEqat{;!>tNRO2+-qJ}4m`nSS z|6(ZK`3*F?{0Q9oC7-KB2M(flhAgHUrSkqOo3iQQ$qWSXZd2rgI)(qIWh3@UelIOt zIpdOWR8fOxBnH(-;zJ^dL%xa@U3)Jav*uOFo(Q0}B^pzrWJGm!wA#G-)0Q?RYa)+R z#6)p1mb?Il#_8e}neJk-Z!3`#zTf zaUyffbyN?_M2B)t7PEXYzxG^W?+4lYy^O{0-a%MV9x!T<>ukp&mQrut$4$*%iE1{- z_0(&b;p;oMN|fY1l%6_q8>?G|oh9d}TVMW83%>kcto6mv4=EapH|s28FRbo?5wu0qvd9Y? zpJ|;^(d4TTQpf;5k400_7jH6Gk{D}!;qdot3;v);j{PWHLr#>vwf)FHm*) z`%QvU@k8G35lJvVZ&m^Xrfk!EKY_^)%U@F27QRZsH$0L|uyXf>Hl1F-GGt8HpH7L; zsQK*%v>q9Nw-ouO1-yzRc>iU7m8*UDvQ3Fr{+x4=T+IJs`E#&3ROA$#lT$lX6B+1i zU=K_t(($Hj-l8NroX?{m)wW4=yz_b8UJf1k5AOfg$EnCAtMMv-UI*iBfe7iW@%Q_` zN$r2rQ$ff5U&*K2oO~J&nB1(b^I;-ds7>@kAbmjhiOk~;gnw|H6_ny$`2v}d;1E=uIW4q2*n6EC|!hu%YVA3AA}d15}48`mbS+R2NC z6#akJ;p+C))Sa#Dw`qeYz?#J~;$k|Mwq zVIcV;JbTCbhfzRdm}w$04tqT-Ba*0r#VEb}>q)qh7b)f=@B!!uZe#7&Y@kMfu zfgX4x!?RNKzXvTy(}r1f1Cgiu2@E2HFQt8R`rZHpvH&0rMsMIuswrN7oaO!(!+0^C zul{k1`|4Qx3j4!&zS1dEqx`Riz;J4h!)CYj^P~7U^HcqB2354^KL67%d#gb{9mc1p z`JbA9$azrQU(v4T?e@DX`&b`FtPRbk-rD?~;P;(w)A-o@$kE7Jb2raCc_Q)WaZIJL zbe9rIM3KeWVcFfhPXFA}=G?F-Qcs8QFD0LtOTzuybn?y(Kx%LQKzQCIfof;=3E!ihs~daN%CFWe74<={tC}Mh)*PsL0MAUAegaQIV$Sw4rfN`L={_KSypCp+I$AF zEBWO|pRLnfI))c)lDdcNn26*ALQW|;-4dZh81a4Oyhd9_>Ij)+1hNxu@UFuHZX-~^ z2q>OX$Ftd4ZQ;2;roxG{>T)u>h377U4=gV}oCZvvG;^|`V@j~nPU5)g9kt_t>&DQ) z9Su!C_O6E1VOoXv@>^N`6pFD842{*X6?wPis6$pvk{d z80z{d88+u0p$CX}W(Yz_!|pFbP$hQ%ZCgeBY^hrZ{Z0GG)`tq7Z{azSKkw20q7DTEh=ti-i$7V!3jZXwv6cYA&yFhP=Z`{?H{8ipG1vlaq z*9j1?@TEW557^*onM=A$7&L4uBz^nM4vaGZ!vxI9fT3X6VSuq#1uL2^ixl?S59n*p z$En-Rdb!p*`h|Drht|zPy1A=K{Tsa7eiY^wJD>V*_v>%M-))TNe4h%ZQvc4Tki&?Y zVFok0>it@#AZ8{-sP%;NuowhOn=sshzLENo&L&&)TCEWJc!(+uDiAc*G9t!$^M2>A$C)y(PWn`;ii6V!>bz;bFntKZ$V1|LX=`rX}X-mBl8 zS@Tb-y0Hsld3^CkFhp|M)1yzO@iKPi44mt{r~=+Oqy+ zX^?WvW4V81@%!n>AGE(mRs%;V|#v3Mq=h#<8MkMHs#>N%wKa6ni@*Xe7vc9 zV&-4$t}rnZAM~!Q+7}?_6Lz4Q{6Udr5OW_#%vDGE#N78kT_NV!VsqhVnLVQu<+c7z z^FJYCU-bXXIYb2X zBjnqRT27yV&laAORXa@B$@2x=Nf7E8M&_gzJ?DL+7y^S}S>YGX&XHJ>*D$dVvABEq z`Ew30IQ#JMor|?O80$;RYH5<5_uQAM05(ocE}D|>Ryz6aK^U+BI%}(JYN#zKajOqF z^bAs>n3W;BmO5ty4v5U}OcXpi7&+oO# zW-JurGQ3A7H2L#ybIq!zbVtn>NNhu#GmUDJ0a))EziOr6BAV7Dy8Yb4i|wJm0R@O8 zH@R07WaVY+KoT4YKx`obtYRS+(Rp{r8ONBerh1VX9bDakOH*kX)MWcngAafaFT6fr z#Lzhn#tQpeiIF+?WdX<{CIH7~7=VL+aRxakRY$xu<|pv+E*&~N^M`nf;A zc!MY}Qo%YAdh9PalrEXdR02O>Tn8C^IS2Od#M5HL)1R0lo>j*ePbo;ZBiYfS)mAV= zpW6AGd%{kTEwGZ>3#G`KSR^l6^y`*7wdHP|U(zDEVi5>jmX5ir!gm$tBlU_V(b}7~ zebn4IGHFzI{ACUA{5i&F$S&~{7{E|%&snEb)znO??Os1Ky}B06R1`E-@Fu-B;@&jW zp31{wDdz?C#Ixb$NQAsEU?rDKajayt4OQlxcLTogM5u+8xsK7g{@>WL zepTw@NiF(^!l%YaT%x)8U}w{h9cUKyDSC+Sx@6NmH~g0Y;+6V0>F2H#O&->(;m{q zATmZ#EYW3^jFejjbQO#r*DYh_MLugaWaGYTg-qeUb6WFXIeJzKcg%n}C)fzi$z7xe ziVIrfJ#@ua&Dj4Gztznj-wNsE4OS$ul(XA|RJC1eb0RNab?qe=T~&2$bp(G*kNUcd znp&kO4JH<7czP~s_mvin=x>GuuVC2K>0Nj3SIyz9^xWiz2=Klj*dYjYcX<&Rse|#s zMZ!k07K(a7L*VNH&JF=4y~fkN(mtm0pkj?)g?Gn_t@6p zh;XdgSA8&`P)eu3qMd$bGR3p&e-}TnJbnpWXEaQ3lRUXvYK(=OXikJA-6um?^Lp@f z+dcvOZa7@$TY*x>$rF`jh3|zEZpXcOoBua3%}s%+g_1Rmvc2n@Qps8P$!;7GFkr=p zRKk;-2(bp!fGKl?E3qVx-21tep|7Yem}bm z@_zjV>Vne}o9|#jFt{HztLahZXj*O8`hugvbN(oUjA&oAJVs;Qi=)5dGv@gdMpgc& zY%v1#3fosa3;;G&6L#bhCkO8N=EqpbhD>z3i)|ocqsB&yj+`M?E;t_s|F!9JqsZcN z1{kI;2w2krHM$~_ID`BW@1+Cj7yD`98-y_M(R9CpV*F3`{mFP2Gl<)e;bwY9M&kxk zhg-NvmG|XkbRv)(kwG|uc}H!z#;=xGt|U4Z&`9H5d|h8Kq4s27U-@b6z=#F*?oJEO z9xwbvml7So*|!!(N*r(`ZEX`FSi%}ZB&<0u4+?E6CPEwPVQ#lv!xF)>MTSV9xv7A6 zXGIHhV^_1ZZwOT7!adU3GB-H#+)s?IrH&G-liGvT-RQvv=7*E-kt3(~6dO}BERO|8 z9m{5i#ZA~D+%s*IVM7hZn(@Gv(x=iydRBvCGBzl+35(ynbFm49pU;|4;-~uE$JX?= zeMU;t9D9fPo9O%QUwd@$RzIjv&K4e8>1_mKteLOaa$*;2fyFMiZ~=SPq^=}?1H8-a z6XzQ7c8*(s;Bxvv?}Ei;quq;BGNh_RVL_+Y?>aVom%pba5$ZQD1HHg4V&0hH5+{?h znWbY~m67gsm65`?s>iFbr&XyPB_9y*DZhn)ufL=f0Z)n+O}s($=bw)l3h1}er{78p zE0TD@ud9)kL_H{*kwnpzrq&HTC|ZBoYepYALLUo7fNxS82oJpW7!2efgx)f z@Y%)A;KH`6fC0Tx5A;I6id#xWm)q9jqf48$SZ$a5tBavW-+F^jYlR+W_Bc1QuVZGv zRXw47^c?mZ&@=wxR_I}VpMHJH{JtMIciZ{h7C+4LBz}&j%aNGy)4{6g;f-@Ow1=N} zx`3aLcbh%wfLEDd$6RSL*l&4mR-|5s)DR0BV|zSHtZ|?fr&Z8@MLdtyZ?x#%IzgM| zZO74UfL6nZWLP>a0+wD`My+pNVYOBSwPr4_R;>hQ1QfNRq{`J=GRf6?n$=4D+xa_9Xmvtn3oe*FY{Sj!^07{SrxEn3tpv>#RX6 zNrc|wX^Cx;mT?kcj+N58`Bxt{Hyz1W+)+}DCsFkKl|4H6n{S7!AR4##;4dNU=+=5) zw)Vbw-!3GjjkzeHrz;>nDGXp{;QPhO*cu$6MqT z!@|V+bs5y_G%y`$ZC5Q45cbiaRl%FpbZZ;?mPwdP+dNFUHTW$53SG&O+ZU-(7E2Dk zG5_0y5v+@CS~a;#Bax%Abk1T0rO$1E)wg5N?GGpE?~`NR=}Zqa_%XzcT@eT)`&`iX`0E6lq}VWS?LwVi!YF z(~m`mCRY@$uEC-sbC4--Za1^{$N#rQn8=r2<$l#PD3Dcxrt^i70yS+hPi9y*n>rX} z?s)6AIJAHVeE|UZg04Vl!8(pID6~`vEn`KBmBN4Ho)%haiyPfL{G5`U+FP?VhE*Df zI$@|DObN_lfoT(`LST+n;-X4Tt4L|#y6G2?Sv1mrtqwbw-DtR7#ikcIFWf;Ck$%fr z?eil(Vn`UMjp1rYeJS?ter1atjbt-pl6t^&ca6(;j5ala00dIE3XSNAO3b1h;GCNFU5#%Bh&o#{5G^Vl)_Q_L)rP=_J>k29PJKeJZnCMLKiT7%lqy%-1a-#!2(YGMt7zqTKLafHvCvV!=ZBW#SZph3DSPs2Q_YmDriN@tMAN#i;?qH~!y8%^2k3AX(qT`aj*AiY*O(_C8s^ z=^u>~P|nqheDxwc_h;OyCwBTvlD{nmT)z)vlYQuH^2sZ?_0|_(p3zA!2_7i0-ZU#z zP8BdOEWtNHELK4fixtt}!iaI_3S8#i<+y7vI_azC2G$CEf(pfGVKYZ*p-|;o zKYW&mr_8K*j_G-GUr18aSjOrN4qN)+NPO(AACAPv&CD0!ugc+1)5q}V(zE#M!^D>L zp*V@Z-x>bQZ$BMIF3c6!BZVomM!?${ZfyAh&T;~rfi8mmoc_q_@l%9HRu7#UH~S0F z!v2NQ{)@`l^XiV+EA6*vR3g0-8*+^~=Zl6aMNMOcb{4Ev-nq}ir9m@Gl0CLaX+UUj z%ZE?(P3N+Ta1Irg;AHz+N~*PbX0w!#da`9HDND2b-m9$9K4z8N;B9?Q4F%Ot4C?Q% z#`9CgnDgddvk$R_n8$06_eVbUxkPcxDsnP>&O1?mzBu&18RVrK|BFFB(I4arH^@55 zNP`UhH4fpr?W9k+ck9dTjEX;hn2!n?Cx)#KPXv*!71pk~o zDmH9Wnd^k{uhV?kAxD^H&c&-Y~S71BkdWYwoYWFfua-SBScbvW}dW5rL!csaJ_^ zNe{-6e$(F}E+bTZdL+?3hPXVnH!^42CPR(<)8<7 z=n|QiZVWL2iiyuXRv@o@$>i#52s~+UV&1>(FgRId#xZsGK|O)~wzdWSVtrl#xVLW- zxP$ND2ZuWrgB2WsI%7;(Jbia*;l|p}wM6G(KRTZFjmhEztv-?+P`6_k{7trcq$H7j zU(Tj83I3 zC?g4;`X-8RHGdX9%ie@3`po9dlS8qGb@}_h_7Zoz_3Khuyw+O+sDGe-yB%G}AKyvx zJDOw{t;=J7W_Ovg>Vb@aiNi1`?YBZ`%k0jNDSVSOVtdHk&CWyC_wbyPsf!p!?a+n) zg>N}p_k;zSXZhQ-+M%WKNm=B>aq>-B;cMa9Kch$)0pCjBHv24Y%Hy0MyrH!JcIEjf z@Ap=D|4rezI$+#vIEC_yFE7|FKp)9n+qgW@c*tXy>$gH6mZy>O0!aH8=ar%Kr@dR6M&MdqhS7I;o?N?S z@vPGLc#@B?S^f_Q9D)mDLX8YB==FlDxHQgA;!#=NQ3~HfKz0CGwg(i^>p3U*+wkno zg3@)$EFTA#B}O*;Vj}xOvrE%9LTz0R68Y^y6vqVN-AiiX))hjNLH;W{tk^Ymy!wl& zcqpe(rGLwg!EGbLJqn^l8!wiIoCzYn^}O!*zI86p3T}V}lxc(6^2vj7EM-Ji3=@sh z_FADbB0&)uRXqfY#f{IXYsok(qb%mtcJHe%5dS9gM=3wJ|CmdNFSd9h@o8LZ|Ji}t z^}A9#4>P#5*P1^k+xxW=g16b_D%J2CE*p%Iw9&e}_-lJjBh#=N*SEVtjMU?K`(7Ob z{-a&t{`|s#CBG9RYStnKcy&{LB#m8>Y4{=gkIz?YT)bNvWAm;Zq0QF9NdHY_>cAHS z;>--pL|b5(RAFj_Y!$0RQd-!tSZKKHE#sd?5qtx(C+9>8znnZd(*H{(+VB6GQh-GI zeX9dp84X@;;wxN0iVZ4UPB0PmX3L>X_}RaA2`$!y)ulJC;HEH{Qk$D`za>YmKs;fi zn?KWt*D)*hCT|j#?IZo5zqOC_9~xiSwFSQ*)XZiT8P>jnbB@tQkwnkYVD=4l^^Kh% z@eR+tFRaU%0gqcNCKmON$?!U3=og}y;*hUw=FLoHHZOl$eX+1o>`zcLf86swFmHk_u&ByHb74sv4&;ho< z=`bHP%anu18Wt+;Z%ag?_hFtP+VBSeA_CXPk(O(#rb^eTr|D7d@&1HJIL@%}ah z*G5vKz2mQ-y#ch>9v`*w5Ay3Vw=ZzsGjPwiTQ}VZM7+sI8p_w4{Q^{=ex_ zZe?%sX$F_-R>)W4U>?_%Z;=rs(Q~b2SFykQUjuW!_JaKS#{$eL<(&7#s~@=>bGH7O zeK;W2c7A=Rv-mV;{sp=HNJ?`!Y%f=SNkuKoJ%KZyigkfRkf&uYM_>iEqR;TW)qLx>ltWATv^0>Gj;EzT)FKUO!>c4&d~FmoL+`WEyKZ{` zmvbf`dM`e`)p|t6CB9QT$J5RrfWZe!VebV>i4$Zm{He-kJWm*wCNAqE9KB``;bkms zB^c}0PQ@BMFcQC>L}}!SSrqBNGqQLm$sMq;9@1GtK1Re5n(0ATdeDs?bf*Vd-U-VBv;$;U0oe^8y8~oaL=b@RvMVms{n|IRV$I<$|YuA$zuWEFcSnaCdf9oc)pQ(K!cB2Vs6bC@tr2uI&D z=lW5=UYM8I5LY!m4(`}aSBHLihJ%5!b>36`j3unhcPt^fBE9*K9*iIURXdVf`z7 z*d|hFMs)(bFg6*{I=0v%6*hdN^|g4;_L@zMMiC)2X`=dKIbUb?mT!{{>R@1@GOBrZ zJ|i0CnO>aA2>p1pjnFIEZiKG$wx37mwP!CB@t>V4`E9d3#-t3P59D%NT%_}RV)(W2%R3GO^r2!`JTBuINFU@<06MwY+ECrPuwGe_ zfz7dRIjV~sWquI493^rxdt(Swv820Rw|}u9##XBC1uo=oX$Q_zhGCvDN9u+pDWd5YIlKB-K z>tB?Gy+chm?9lyscTk-h@VcaqqqntLghr>=tmTFx%TQBW| z&nuP1>G|^5g2_uH27J)>3gDn+%sX=JM+&zG8;ee(dO{8w1t1$gshB2Uwn~P z$e%p-97u`z`Q@Kk-##M@Fj{oe*-2-AWmC4d35T{Rjpn|)Z4sZjNH!QjBsNR;n%~WA zCI188!xZZ3nB)(M)5VC^EoiAO(v<04L3J8t)Xx1hAo&(Zm&iPRVkYGyETWl{%Z}|Z zf4-a+++1omLM@ekbD0XwU#Yv;{I#y>7q#{71Vu0=GP~1LYjsHlotW5AOUwe&NmFm{ zcx#tyLMU9;zsVH@`Z0<`2gZg~G^`jl6fR4!!%g~B9}+^N{^Rpj*oAJ(;`4+z7ifI9 zE|mhFI#*9+=$bo)f;;12`QKejGVgp^ROd7T5? z*ob%eLZ8URKO6geCwn*l_>^G(Bao8+BtEJNQ+DAdX>}$l%9fM}9nfDZ)+XbN)N#nwzMFjm6t(Swur_*6kMx(qolIg$JL6cdPKM3hSZcD$q%0?^oa~L%R;#$|ONxH) zg1qs;#hH-)0b0^HvZpL}T=@Cvx#O9#7Yx^YQM8&cQ5uhK&v2)aTJI|z~@1@be%c}7K9L(gK`-_Y%^nBOn zVn?YPZm*37ME!q5^Vu1@eBM$Q@D{M^Tp!+-bdSyrINY%pN{GGubCg5MVCvY5y*T18 zkK1xl9w&2PDDN#eOmB4}mBXxNxRYI-o;xnBwv+`@;B}}uRimI48JXa$_eB8P!*gwZ zLQ?a2?%j*K+MSKzTx2i3Ln$Bi>>s29_PJl2UAnTCxq&gi-Mb2FNIsH|_d0wi| zPJ%Nz7Ia4o3sM+@TyZ(}8*H3_%f#6hZh1Q@OC9dz-`2Rr>#|*{mPmH}iw_EU%+K)L zyQCoDYozwu_@S3CG6)S*w4kVpG#plRkrFF1K|!TSYY4B&n{5@@ghJlIV!w=9B9<@nW!geSM~R2FusBLEzTE@@sa>G=h(we&r z>a=H>Av+4(An`&>dfrG4lI;gnDR|U#>)aUWHaSK)Y#Io_a${7k50Q3$OYwHcsJuro zMoZVEjFAy@&GB0EO6zy0)e!E~wU(2Z$K;OMu_V2w>xz;B8t%~4DRy0fKmXm}+VI@N zE5q{VoX`iBGjbf3^;|uDK);F5Ib@?)_!GN!`A-A+(0lVvhnGC9-N^2tiO+zP_fB$1 z;i-^v-3TGYLV)WK2OnN5j1Xj>L`RPmZP9UxJ^>v+r)+!ZkbZTtV7AbLKdw%}NUL6& z+^6|vD{i*;vp@P=EX4+Xg5zgN#ofPf`cF?dgRdVJK=@S<{^iBQlK?;BuBHq4`R0JDOe9saL*GUDal01QYlRq4pTNafoigzr}2+vW(t=y{OBYRlRe7Q-Y-jBL*A$7 zb93!z51`pWqCCLNGJ{8HysKz-gTIQAZP-7Fhmn9a{Mh)$txoT5Tj#@7JmDU zjF8pu;JDz=z;Te(0~}Ziv{*oDnXm4*ACxE07!ULN*~8Fnk9Xl6q3Yg>?!KsUp@!T< zm6Td1K0&Pqx>_4twcLmkP0!6sY2@&CyQMVZQm%vsBpbOnXk?dIX-gwy!Y+%w<^7oW zodyw>%*uHXM1K*)QDAz22qNG1yI{ZA^9M(3IT9`N#Pj+~v^sdsjQw3sqtd(eq9ly-5JE1Zm)+&e2)KD_d357#a^Tjh~zle2m@n| zsDXG9))j39DbNm-V(%;;)(l2HOP~_qqz`~KN7`1NULmY+;(4E6C|Ld^ouJtcIz@k11#WalKXJdKerrXMXb4(sm~a zxu=)NrbH6<`H}SSnv&R9EOU0~t!u#`i53kh7TXNbji!UVTkteXU5`JYg~U?L&t)f; zS)#&o=J5=8yH#H&IJ@Z%Db-D>!PNxJd7tGuV-)=7W_6VFzfaY?JIBLkgI@;&4rAEnyneVo~K0Z~yLiNS9XOy`~J1BRs58i$56 z(|$0Yi)hD|CemRkidZoHppV5#TTF+=rQhv@W&7k7TfrEO2ZW2nAwP;1HJu`K0w6Ut z9nAbZ8E?AXS?}ky^xiHT1aNPl93&{8I?|ypq8;W|Cljbb3rj@gH8zrla=KPqMXll3 zF6y6V+Sy+4A#g@wce^n--(a$paV++t$8kh!WgKfl@!d{j(9X|WbZHBlqxNRv*Gmi6 zhi}P-dBF42dyu`k#$y)T{eaDkpXLQEKaM*pSxqq0Jl7xB2TUy`7O&-B6H0WxN)NB7q{3_ zlFd>j(?Sm#h`ji_C)___FF*2CBS9$Lu&{RIcZwY!{6%=~LaR?^@J(@hHduM_exMF-pmCH+@FSuaBPtBntFNZc+vG19U5WWEq0=TEJ|nDIl7)UZ8Z>h za$*rI^2RA-kCb^f-i?McG7+T?2NKpN8_-1Nmy4}mHOYQa?54Fm(b8C7(t!^}&+ z12a9_VCIjmhS`Y#Gp_8TYbYy~H5H30xFlr&V{G~RERu$$oY5=%BAl>bvH1BpkwiK=!yrgt zN=M_*sME85L2WRK(sf(P3YUjx&roOMXCZ*BFHg;eSl(}KS)ykLPDbr~diaI(G<{!I zxPCHQ9Jfy{;OMn){j`Z?{ocSIvM8e@o<4Bm@WQ3xxeBijuM9Ge2STbJ{}Ug}QolF_sb4ik(l(ImzavuN=9;SvJ`#6yn}J_W`Pi<@8n~#@ zozJED0XQx~rP4&Fmgpe6&9}dP@Jb|Mc6b&xFMi#J&Cn9|KjZ~tW5}#S&6p(4489Vf zN52sg*ufeha^O&JWAS^<%Q1R0KXNRIS&hC#uap^_h)Es6au?qMVGiM&qY2+UmGDg) ze;e>eZTxpd)_q)BxHCLEVdH-`Lw`in?c@ur z|K){?CzA|^mM1P=ks<5lp#a#qHGn@t2RE`Uh76pi(vMea(5}%Sc8MiTVVb3|27dAG zNI%)5_!7D67JK>j0)pS}eaKUX|H6$k{)bK#qw<~_Nt7}+9P@6%H6~4Z6e-*lp8dAp zK~8(8H>Le{osk#{25;;<5<1>LQn))j`%gkp;p^eqztTmbF3l*ImYeoZ0nwtw-+Uz60Y-urCr{KVi0j@fD_k}C9Ac15`>%5`$ZNpc0m9pe@C!XpV2jq|0R$pXKE(Wm z^l##b!X>qjx55cCVx{mUa360-zzLVoGDgM=L8>oY{9#Bi3s8~Dd4-hG4S-KmeOW9h!lj|h&U&4Hx z7}1vb)Pra<=goeAixmDNIqZA*&uOXr=WOwx66rgrVEdIOrUe1m1h-B!HZ*8p_%(8? z#JigYlW(*67DP2qe;F<-4FT=L&q*`w+GbV?csWo{DKXcX(;+ ztA5-H z2ft1wGmSFB7B3oq*IE&F^mPl}^5utOU$V9ff7$fm0)iM9o?kw8%DGzvU)5Q3$ep@O`0D`aoSz8BsPve+w zpYG0kJC*K4LfPI!zi{ZqP{XZdENhKAyL0$EzXgAaO{|3eE)xA+4E0o$|q$Q)ZCFjAPml|p32YS=PMA|JpfX<{&gX^EQX)vn3 zb=g%U|Fqcu)UxHS?2a4#vd+Htozr0VeLrX#oYVd^aO3yemi2Wk>(C@HT_ZkPCj(Z! z21jEEM-)K?ORZ0zthcA`wccKqA@{2Elg$U2@rrfYuL&-UO@5IQh{4jUzb>rzgVR*t1lN63V4-O3a6eX%G+I-C}ROZLklVR3*`u_ z@F4Nm`>C_twNijFtJ(oPutuq^*jwS3zdWoYwrO!w#>B--GfEaWW{;R3A<=7WY&W8= zV5HUwLaWSh#QA!y@kjQup8|La%>4!PBfZ+feA@trgil`h4uJQ@^4dtuS`M!oW@q-b zwVWLvfFnzk1)4<+9GT93-5E#@_90;jX*+@npMYG7WjCv6v731x6U*!7l17-t&AQGA zP~0EVrAN~nXYQ!LCe@2hX$lhYgt^1`pPOwq(%$nMjX#a`*G1aQf<)Vzo4wC}?xsQp zt`bLMJcT1s=j+Km$Z~;e1VI6ag}J%2S@qc zgLh%gInmtOTpRnHgyvYC!HSyI!byh9?4%XdR{rmt@Lm00e$TphxQPp{e}li5KMVO} z!rhe~p8HQt9d3)`UBj!wFMn~E(m6`!mEho;&Wb*PdFAjdm3cKhWsI(HT5Cr4%iWYc zJSa=WRr0!I^T7E`a>UnpA|noSHgx&x%8SUFWA@jRzue-&MnzQ{q_AGWl+No}V5}PszO`t0jJ{`!;t2Cy{zI zq7BD3XTv~d&)B^f_Ol(C>c{mkUX5WGeq`*q0<2yj_FQ7>5qom?=}7qENXMT>J+luc z%~}taKDQk%eUcjgQzk@o$-r>1l?4zB^WG{({^GxhtOk zO727avR*&J&v4x8kMRpx?7o*7@?5rNh|67?jM|c16m`)k9b9xu`1xn8mKOQUIgg$8 z=VB5FwW~dZ<1a?vWT&y5!;kroaUSDBUf*Q1X3T!!F<($>aV1ki+qa|3Cg~9ACoNV&&8l{V(y4iXVtohxoba53 znO~*RZ_;PT@qO<+b9~>&5Aco{*sKh*12;G2mM6~mTDGaLHpwcbUsyGU2IK@-bE5uul<@7oxbhW?IAa&@;d!w?Xqd=+bDFHK3RW zZdH)9U(A!?v@J3|XO&wOioO1y`YS^5<5cah2oOT+`un%kPc37U^;YW6)tPzy8)BcV z8(NU698V419770Y`5Eiv*M(by^+)Wrr8P`oWwB4-|1hV9?^`Ckb8r1YtHl0$dAi*E z|1;vO&x5KEqw4TqXM|sV|FDS-)tUYp5uS5Bh3a3)y-!`O>H1OzKbBu=6%RFmJIGI+ z#?8IKO**q*zKssGJ$d|qU3KH?L0zeIj>2;^Hf2c*(0uMnqdU7+7owMyq3Dgo_G)Gk zY(LIvUG;T(2k&3qSW75TN*XTgvBY+%9=YL0maGu|*^^M39$sA%J3G}cjX*D0qeTz( zgUTj0;5y#*q!yG^u@F<6zz9Eor}cKu`kJ~1VCq(V@qAK03m!R&Ws7nHJ@^eyar4dw zBGHK8NUkv_s~H-(lSbNA0~F+RI-Ll5;49c_pk)5pU8zqPWE+c%V}b=7h?lf>{{W5Q zIRgPggOxH=FQad9ynXoPPY&}f4JrD8Z(4&V4iAqYTg;~F^Ehr>-s!c0TGLtmnbozO z{#=>k`m^kJ`{<9(qGxM^Ig*`bz;WIqV`T?^-3F3oc2?eLq`=?{-Gbx-5IlkvJV5M> z-2k#Pqa8rrKP(u(!hL}v)Q-^l?GuNusSKOXAxueNeBHr6G5{aD4~`VstKNG>*Qy#ysO{QkgJ=V1i((=){j4tLumv3z%-28 zXmRz?))%Q&m4u+vjf3ficUKpoIOqjioMiB!fJ{~DfVfzNA09v_CYm~B?qFXIXwkut zuY4Ws)I6#2fc}pFv0*-@j8iy=wjsTIfQ7%O~u>w|!t zDEiY?h8Q`nggz;=40KNrpLY@x@xz%;XLPeF)kfHY+b&NBRXE%ZC;RMPCcFC{u;#98 zY3}=Q6uIdK;pjc#$l*sqkdL3@WIS8T%CG1Y`u5-Ie2e}KXF0jk_vn0`zC-8xrng&d z&il=G>U^edwz15eM&q)-E$kR@wm|KB%&#oTZFY-c89{^;{=@Dz+Jn(H|~wuhmIXS%tb$E^U0DQ0wqF zZO#uO=4VrpnxY2_zkBP~C^hI1Js(XW3pFR5Sej`{=mf6%Xg+cLi@ zgV@b>=9ywwIEtjpOR_GLN0bSga&vOYgZr41k;H{vb!f)X5|eb)g-pHAZUc_vfJ0)BNqc^f zsSkseJ73(uj9Z#0?ux^oFiAiD*d!D6y+zJ|$bC8E&0a}4L-B|G0Zc3zGgEtV#_A{`~{CzhB6B(?SdlyFK!+2 z9|B6(9dju+c7qeK1tLnHXj1TGRQypwn^$~lbX3X+%;yx`8pEbe7F5e9|O|d*sNs8Ga z^xbBMqkA~+IS23eK8+3!0tpab-#~n{%nldr!|d=s0_Uw=VyYNzk~W7GS!x6K#&FcC zJ~Z?_h6n9=a#2YsRtF&;`KcX*9s)B-s?U3Q9i_#e0|Mpc3(N^Gd;*-u?*->!2IqlZ z-TnIjkzQd+Kz|p6zMFCNu-KSREw+TD`fiF%YxUje25^p-(vBWGT}ur5r`Dy!;KKoG zBJn9Z9s0&SdfMU_q@ z9jJ7|UsPxBPbXad2&cZUzt=6RbfdjxwR&NS`u^KVwyZv?pFn-T-95Xb<(X68@B3vC zF&PNX8ma7-T|UEEiu0AiWuSM>4JivSIB)BK#Z0EMGW-l|d{8C;#TUq3;Hrl`ls^=VHqCH4;CG`bEYHpE}Cy3v>Dc5FHMMe_<>8LKP56I~n zIXL_q3Xvp5ayNokfO1h8XR8qvm&i;LBpn6pN~#ZM4KrZZx@!Y=3)ccx&t%Y2IXFtF z_Rx}9g+nG?RKxz^$9Ps!e|>sYc+Lzi8^sMN)1`Kd%3OU}O>Gv(=JEd8+Afsqd}+-% zy{NvV%71a$)$YY*HO2O#=Azp3?TeaP=%-BIRM(EM*z=|zi=WjNME)}5qS~6OYbRe` zT3A@yU!^l@uCLAUcVyb?&)i2!IaF%UVWqKcTB~v4ti)*Lef%cI74u2XxP!%N)-sLf zPnQZC&H2$;l>=h7Z>1g zxK6{m(;<*u)?;fqJwuiP*4<*+6@^g?j#9|#wPSR6KyAJlR-Q!A98I!_0-O%jCbVMh zoI6ZZ!2UC8fxkA^;E8Ri$er}(bxwBhmD^J~=v@OVv86bJ^P&Bz(Ac}plA5CZxc%)_ zG~uSehh2O&pndR7yzR`PQ$AUHnGormjW`>Yj>lz#OLXk z_`cp$SfnEj)aKo$fR9J&KO=i&paOF{I}5BK`wK^cMu*N8-1Mk~MK64a^kE+W1PCD4hc zBJXs+Z-U#nAw?~mL`Kun*aSo_J|PGL9h1+<3Xo%;5`Bk9m#i@snjtUNq?|~sE|2sz z`O%^*0f4x8`JKL9;=*F;qVULKI_mtW5spz8bJ0I+P~T!Nl!WAZ{;YFqCW=1qt1LmU zSjk8tc-=D6X<+hqGAqU1U^e}f2a~7B|Gyig;Qt?N^=F2MXdi1vk}$y6(KquQQ=m>1 zQLkcjx=s{tLt#&5EfaO2OeI2BsTnDE8f@l-qT4nqNs4kjXb$sX#5<4JQ%eFSiNVZi zY}n7yyNc#@%&3W)A;Pxz*Oyds6-T%xdfg*?LgCt)dm11Jaz|c<=VoiIB<{D!^^@?rwIwMYoWlid!a;gsW6V#fSAyHP8jS)`eZi zLtR2gcNn1(xySYJ}mC z(1RXh=z_d7Xre_YKLzC7NBg4@uDa`^0=V;5xS?pWLtZFgZY;VXlsr8F4vYQ@Hw(vviAGFW<-@5vH>krQNOrB52 z)Pvh`dK2*zBblxiLgh73Q`2iYOw1ih$F>v>rTcpl*7h!>KfLIKr&r*IhNxLv7il^{ z97fy_xy?M-&=!0Cit)zc`HmlgMr>{fl;9G>kQ*p)nw320Gd@1YPS7liUyLa5h|T=^ zqAR{W2Jt04=P#-gHdp_$pM&ZT)`-H56QN&zgMd^(2%}GB$@#V{;m)`4CamUVBJ)}9 zwZyP&cZ(MNM!cxzK>0`Z#C_#^7z>FdremobQAbXyhdV(}}%hWyyKxL*05 z+;l2V=YozoAEO=cSr&Jl5trOTWeTP8_~iu4E+{h6f65BIaN=g3p|lO{SW@4dGdYXD zH`c!E{MUL?vw^=|YyKu7z%Y*3B8*%7=4Pe?{Tp->GlXUucy3)>(hT~D@5u6cx8K7g z$ZWH14J`_rsz(-6jcT!e$dK@zORycSpR>MpV9D|{HhcP`jv2qVW&_MHpauu~8YN z(IKRe%GV0xgCfp;4r?lgw_;NLJQqfjwhqRnBm2&s;-+ z;r)q?>6u%KNLCsj%hp1iKE<4zwyAnZ5Pfl@jKMd292iJqqq3t#S9~jwv%IA-UrL<} ztco@s#_!rvGGj#&J?|%3!P-b-!bb8xSou7Y%SEJ9lK!d#+JUO>C$zxBn!oE5gqyI(uR`dr$suHEHBPUYx695JBLm7Pod@| zN68;Q@BURrKRxmKw4$Hc-vsot374~3&|1$B+zYMgrtvJPk!+kLwc<1#+$Q>*wYwe= zXLK%0l%_Qu>t*iw5KYtOOFQ!|1ch`u=h(o!T$HnjWdp@9$c0vI=gpXhttE) z4>)eboKI^Gj4t_$>W}X3Jv9!Q9fFR>PcMFKGi&31T$RPVmu{qa?|G(x(;HhDx2!BV z%7&chO|9CC#Y%C>k+DCoaTn){x5paonfT)(#~){hlKk;S8Wn#O2T2hEZoQlwt2ck< zxD_IVFSo_d&JKpflA#r&_m^Pw83u&IQM6IMBy6zSlyNsEwnMpi%cND8%ieP)pklZK zsot57XoOw0j(=GG!m}jFCVK5e_O|?mn*>&{?ju|2L}i4bdLHW^?Bqj}eHHPMunY>) zcK`yxY(Z|liUgBA!43}Zq-9!Th#2iKbEs@>qiJh6zSgQ*)+jym}621P1jwbj2lCN^`O$04?-j^m?jR}ciO|yPHDM$PCNfVQKt5~rFOncvW->Ln z@#hJVCP**IM`^pawLQ$)rz1tye7WCZr~_o{-NaevRJ&-s3!VWG*XCI%ZJu)xZ7NGr z>o&cn(-Bk*85c?{PW0NYj1e# z*4_L0GK1&o4Q=50OI-^NPCL3?9C#Cw@Vq7jCwkrN;HkYLprJX^bf#lxh%V~B(6C4r z)<+Blz25#^8?=|DG`aDp_M7xZ`Y4cnNwKK3TBA%E!or(if%cs0VHa9W?BX#)ke{`# zq`T3lcmGoB`?EF{3w*64Na+}q&GKqovA=ByK_)J3kQl%NDOE<|<8nyUfDwR9|5(cw zJFM=0LR}2bdhv4-CPJ4?ZNY8BKj>(#szTSC&u@t(-6s1y`(sD=oo%{~Za%lbx>-BU zM=88Ot4O@0ySILcb>wJ+5R-O5RJ*6NG}QA%8rshqN+o3P?qnnEw_>6-h3p6XO26j3 zf-{jeM{<6_N}XT8S-DfP2y}?_-xle=OXn9v`mJC^95Qf`H=tkY;ROx-P}OEF6T2iW z@!EN?;Y6tPH4u{Md+}vG%s+7%f_@@2$UQ9Qp*NpL-X*T^A@2Ee7xR1)&r`U(8^4n; zN#*U0Wo?+b^S{Yz;OhWY$TCCGT%YJY!@D~!g8=7Z_UA1!v=161!mtfpEN{%apHh6OyD%Yb0C1R<;gB`-3iNgK7;3k`45Nd}vpcR?U!0C#uq_ZN|u0yr|@Oc1d0 zBg0Vkxq7+thn{xpm-vz|->;+@XB=I`73$w{wqE3O108G$nx z0WCh9)@YnCJ|SaZv)8YqR6uOf*ucU!9ivv_nU_{kd*R9%>Fft!x1FtFAV`& zb_K2SN~3hhGx_IY{&-iYqoj+sJ@ff)Y~a|7c<0;qv`JysGL50-kF&W>(k2^|2Y6~1 zPg{940IARv`1Ou6TJ2T!TT!H+Q4J>cm=%?9iZ}Ee)JjnB3ukKu50xrv0#72eZ3lYN zQ7WErl6NvgYRxc?kv#4%Am02Im#tQG8tcEe@FGSrwxQ`s@3z_gNtKga$APQD!S!=} zm*}d4RQE)8|?o_tx>h0fp~KbOT8~IQ*vSEc=s}Ni9ulq=M%;`OMCCUuTN=n)art*$=Mp>(8OjYaXFDBR^2*psODep zA~gE1y!dpJloj^&MOK`aVeeL)mZjfl(I3B%;u7|{&F~eM{apI!PJDafJzzGfLu9=D z1Ys-*isO$t0c(hEH8y2rKMCIdvb7N&zFpSqIak|Sd;YgjtimeDy^nQIUpk95s%3KhC%y0;}X@s_js^;e9?Vj`ZG9 z+HZSlVsf)KG_7~?t5VmHrN?$ec*oBDxY^DG(&`s`hr~UJzEcV~9p*W0k%m>|Y1E3r zc>0A(5YGBA?R|!l*~c4YS>10Nqon+HaIU7X_{TJ@U)-4!DP!Oc*+>(ak6ecx9a%MV z&$)($uldnC`LyAB1#-~k)6PF9qjLO6ZO|~m$i*3!oiLHv;V0dIn^lgCB&vTBi}S6@ zc))ce5*vrAd*kP#m@IE2US|swRZ1pp(MR=U;?u_27=6d7ltT4snkdWPnTwihi?VbU zdJ5)gP6JTiGbXdTMeU%&=Edc)x0D|#@eD}D0CGsT5s6FImehaUbxJ?3el7b-{nx#x zcIM{srv3T*7rUR#)ha@!{yCBSD4S-USzfrL`ndA&Q|t7sJZ(dH;agKfWrgol{{jT9 z9%Bevqn{N-uQoR~{=*dE%%|O(Kc>7{=-&L+y?K-$Nb9%m;cf2W?e5`irtGfu&p`=x zPHT*9vC1~}QlpUPy*NHq1QCL>O}*5TlGk|OUOXi^`M6Mi?t3WVmgu<#&K(EvF{-E~i z|B0+I8rRUFT=Lb5l&==rS2g}uf2;Gq%G}eauasIPw2ez~;0mS{F@w;QNGQ4(D$$s8 zh*5NBVK`xiJg6|=$wBcnHy7gLsDqi&;BET=3p)iMtPA8i&b(C>YZ9{r>Nv>bfXll= zXH=u|=HWSH!o0QBCqGS?p56ceRQonvIMvqr1w?(%Fd#!)AEk;TtqP^R&<@R_pIa69 zQkXZ5Lm?3FBXcfuYu-((rSZqSU|AL3VUr(>RRS>Ns|nCS>VUPmcKlO2Es{K(&e22g z(9jU?HQfJ?#>AdWE5Nf=!lAeBbmp`=w)gbZ2h^>hg}S%;9%BV zNu=JaMV}Z?1B-HP;#fKsVYRznbv_X_a_*w(U6zL){^%H`hBN1C!F-#pkA z?X^5qr=rV4likl%_F+`9joy^=S$wZ+1Db*9LzV@Jg{u2T7H>(Xg%x*!tawkFy&z2( zq2F0QUHTICnGW9Xp!VPME{S;{9Rpvi^iL8$oY(xkX9{NI0Gip1V{b=y7~d^3Ic z3iM?JVxISrW?bmTKL8XHFXElco=vC#5?~xf1uN-ufqxulo-~4pclNW^lcQdB@G^fi z7jb-_0lZ48qN-XB99&Xh@KTAv>uo>R2eeV~6afYez9~L@jBaSn(sa&$XOTuKQU4~a zLn5K2Y~J0PjXm||&496@INQpsD9+JuwCKRb-I+^^sZ&--P-H=|pPxm0leb(XEa;kg&{&J7*rwn~lUSn(hD zYUqE6)$(rmi|IKhs9EVbC05?@&q*Z4#SD{&TX7OL-!czEc~`)W3zyd(XY=bc#l-07 zG%L+_jf;hAm`z^GGc5%$oc*53YD%sk6G zvD#1G>^D|TNX87m z{x>LOtgsr6sQS++h!$1)FJH2k^7i_Tk7os3tM<{@OokU;IUC&z|A)D5bSaje$ZQ@9 zGam9361N6`YFjOyPCuA-PAY#=t#0vbJlq(s8{eZ_#y6iBi!8HxcJ~LCiHXL=l<+>^ zPW!Y3=_4XHs4|d#JxJGR_gI{Q^haJ3()E5tiBGB}KGLgTOhWqN>wKiAibX!3L;j|9 zA$y3G#%ywShIg%faUfM1t|98{^P)xB$r1%#d9p--jY1-{SrJ@`zR&)VsdL;bAG3mc zA8M*F&*3=@O+Da)D80x1N4~W!y8Cwt1F%>&8zT{*!Ge1h8;JHJ0T3$l`wy zyfO4ptlNk3a9#EJk;U)vWcdDczb6_7kE2Cze&7Zqf071--1X^)+5um&o`>Ri+@BK9 z`6c$Z5*#U%zP~FmbbklDuNU6JJhGG4)_GAb+mfaCS;bz&*f?aLyhr^s{9T;nkAB}q zB>R?*s(69x+fQ8I=vI6>{bT#G^n*S9VVBs&f3e6hJs;8!m~=j*o4DKy(&6nus&iga zaj$FnFCK8hWnD0dW^LUl@O zh4x==mU9+Lgi~UOAb-W-nvRu`SkHlx1ZuoDen)BnvBY9IGwOW(Sdk|60wXa#tu&5@ zTRyst)h7w0D*2WD6G0P$d%UcLEl}~7u5nzmN|jY`_@YTq+cfiwMgOeS)y8)QL8Yqj;!qSQvm#t~o=D$(E;a3ekD`7S;MG`;O?~ z6C9V6|Af##^lR;D`Q!VJcqWM}Qj7TGtYt!VYEXf9^O>nM_QT}M*Qvy(u>#rc5MVG2 zh2iGxQsW(XSv+u&g`jQ=|FL)Y&ZToU*OGHk%oM(O(w`)4a${0Y4(#SP_KoBjfZNm}7MPMO;@v*n*<6B8 zD4v1*HLcu7M`Mq6$k)xUApRjEu)kRRgIhoLJY&X}3>Z{HSrGq_ZDyAr693@%(@ogi zeEg1e__gj-iJBN^tojvx8)rGMLVi&=-rVE0lEx=9=sRlD zQSy$)y!HQSI~VY%s;loO!az{s1SK_!sZpcGTMY`Dh^Z3@IDw!+t)*()SQVqz8X?he z(}|NH<1p>ul~&uLwH14@XcbXVK`j^CS`;rReJj>WPdZxhh8NzN@AqH(oXLcswSB&q z=OJ^>KKr`X+H0@9*4k@>_>-~kxq!AmUERO;3Q7TBWO%+u)D)jJHLrDEGk@~+I2Q>7mf9mPlu@OCT|G{51QkK`TQLo6d z4&Y-{A4x+1nb@RBVAv1^f(*8G4od*MF{?7IP;aXQf=Xys`*{u6#(72=*Mm{k#D@MA z9NqK0dQ1f>Yqj_ljK!>)ZCm;nD(TyHTKD{6+-re|K!i&%}gMCYw;m*Q4JMK{JDt94>Mc$t-=r^0JQYPhS#UW8GJYzl5{4}GDo@|%{Yzjc-@mbAzt*7Ip|L9k> zPc2-fpI$Sp!8UnZ1o7^>q2 z+?C=rKY7tn^@ryfRpY5wx)rOlxNaVhSPOBE4@yF(&OcmqE=UCZZQ1uvGwBBZV z#cL*8g?oCxunLJ(X3XBzd2fs?OpWGf^?PmK5O+2C5&Q8W!Ez$UV@XB%NDDiTR=~<~ z{nt17Tz`7h+sCz)<@$-;SpV$1TmS4cBL5`(v!t$^U4R9v-L6pB8=d!<^X<$ELbvT# zYumlV*SGXIkTLh5csKXJA+M|mntO3w)$~R3Ap6bwEn;b^^mh{w0iT+Hh1y#(hACxL z>}(DR=@njQ-OeYH(;3gp&Zd7me{Q)UOW)~n{|EEu7Llf#Kb8Mw{o#49LK?n&6>;*F zrcKx}?2^wEUW+8W&brgh4M(!D?a(?A8uZCLkit&$AXs@Nyw)~L`Z$sk7EC`WrpQ%h z%?ZN};hJJ)TA6j9T11SsmT6bdr2T>gyvM5@-z;%exmqY);N3OWN3H0;d;4eay|q94 zxA+}#R~G(DYyUg^hUe|gB;R5GppiyJ;vJ*oZ}Br*;H8B@gSh| z@goAiW)gR;k6pu%M2>;Bl@BN1jSaYah10l#gHY)J)J7%B*-zto+eScb_oGAps9c}H z@GB6N`6^fRb60&s@=p{+V5>3%Yo(=n7sP7l61_DrNvh1wymFoNNZ+Cq+3623+-_zIS^xfNKS8nai zcDo|m?U2{3sTS95QvTm;m%Yh-ddv8`&)PZM#ar}G^c$Y{`(F6BYYZ(?{>&$Fr^6`H z2nN^)e1|yM@X!i@_p7#KU0V!(Ir^cq%@fPalD}BUNKq4&u>U1GPDV4&#MgXp(y5XX zAZxEyP7V+xP+i~lS^x^yF9!|A2OdM-*Y7ZZs0M+;JE_LU8T+3v;Q#cI(|_$13MSbT zvFsp#M!3_%{ZtT10};92>;a+ujMJZ@uN88u!!Us+V5+yf4))Lm)MKHmA9nZu@;zQN zYJ)$2*by_=rk&;H8r*C*+5I)lsh#=oKjmYeaXuNG$sI$cncR`^XO`u)9U$*a>qqj; zDD6uRGYE5iS%yl^gtqW8Ooe_i9VPAl>RGDrc!DANMp>4yDG~Jle^w)fj=nczoR+Q& zOQ?pCbffg@@+rk$$~A@g9@n3vkmr^F0=emSUWqYbTE{~=Ryc4#IDRRw(d2bY`7Awi z_jmQ43O#%~oN5t{ZtVx-(C~Xu@0eC4-GgJbhpjp`isdq?j@-nY*$eisXQZEEkd` zyx^A4hS14TtG!rlhEH{4Om-O zP@qx7Yo7X}0Vp!JnV&4L{{XW*akP{EYKUH4j2V@OL|nc?0!Ru|7^c?(<_oE7KIn0Vcj@V6Im4v~vR z^@h0zaJ|vc2*CtCK73W{?oNNMx1(0I{f`Sj@H}eYbqwXOqlv=!Ffg-=3Aq`&_)Tp2 zajO;i`F7i}3_D);ON}_bk5jFeIWBiSBW`(L^h1!s1?&6=lZZoUT*2q|&n9N8qrlSv{*_x)%5BZGB2uA8o zAvuMtY4B2|&7Fu#@DjEhwB*%l934++thr)^q+#|Pb9DWW>^q}#;px^pojvJ(%*0Ij z|7>8l=Ri2RFbl#ZrW59fFTZTo2|;WL9FMo(1?B7f3^60smE{|FU(;DGS7(N}$w3SJ z?ylEcEts9wI9Y*&jm5p$*)wq>K-IAb0MCiCufoYwp-)?3?+>ofqK9kB0(btI%+{us zBbF2OqX#o|w9G&G-dWyaZTJVsQlU+cfV||bR?55hCe_wi-mEI3 z>V#*oiWamU&D=!}(OR3FUY5b*{mddK-;jpy%?v=YO={@bp!U6J;?oQYh0)iPo9(u0 zvczb28e6Btw@|D1s=WVcqKR=T5@_hU-@z0wIl-ms)Pg$;kqSMi52yPd8go80-N%P9 z{)ebO@Lxb%s}cwJA0i}L1MetxsGnLDq@J~u)NNy2v+khX0;3^hQle3OLXF{*UZVFa zd5YC+d`!R{h#k+DA67gq+Za~28{BCp{P#CN6n8u*l+~I4xEQ(0)jBybn;GhQ#Qe#s?qN$yrZWvtKTYz-q+SnGpYEMObqKriPHU35)>gnMpqB_!6 z6`$AXLn6J3pEY)-Hp@@K%ce&o^Oq_*EnEADiP2lV?sv3P3n*qv#JJlM^@}rV%lXwm z^b7g;SZO-hC&+K9ve2Fz0zT<_PX*rz(f}j!86e^&D*E`9kv!D(_^qITgm^BG%A0d! zkL)=?^L};7+Dh$+9@gnkd6nyifd?aa5#Mlvxu*cW5C5U7{uCR=@3}Yx{-AUE7t` zHe*Y=wk18q^@uB0a$$^z)V;z_x`U+!EQNo%w(FVjPalg^ebP24agQ=YQ$LK*V0vvw znm6TwoopJ5>hhTPKBb@ERa0&7IX8Ub-;eMf#9-}9O%CM?o2}24x{*KjFVI?+DLdumsQdRGs3+Je?H)sPAugZo}~k(iKnkhI!U zp}j7H;~eeW@ph{>odq)YDq~e9->DAGf3qbo@I#6KQ!_DYFjkQkkE9jCgzr|2G^HN& zOKAl$Omw9?;}+IRYvDUHw;8*v5GsclTJt(D(u7Shmkl@_GZ zc+EqrMI1%mp41{XnVeZEpN44SvdZMdpz?Hss;=Q zUwtj;5X6L**vyi=)`3JC+p9MGKxClw8=JX08{y7xv6E;$k}_1lgsb?>O1x$sp!>$A zSMkjr)&&onc!2Bb1AKo93(jR#5Me}9djp9UVaI-1+xWH8^OcY)e)QK;U2s&)zN4A2 zWa8J`udCF1=o)wi8i_7N2@Lv0Ei(}T9)3hL1G~Dc(t8){wI;yY+DbB#Gk{@nlp{+L zZIR>5Z6)~N4>9=-wjY~YPw*Nq7N@^Zbvoh@1mvy|WSmmrEwEPP;#ZN|iZ_a5O8(+w z%byk_n!|r0E0aS(61rU{I-Xda}UdB@CWo}>zg{!mU-*wB5DFE&tzzJ3Ef!Uqa$(4oF%4_n|1W2IYA)adcG^4O+rM`LdeFNSDoj5%>fob}H+#Cvcdxu^B}fK@Lbgy}V4dmM~GDxk-?F z(Yxpl={2kx`#P}+6;Lz!ua%B}U5km_xaoA13p41Hyj1wl?$y-g_F_-!v$y$>H+s~) z?&+|@?6x}l(8vC;v-mG(bu&HU=AfCTs{b_pi_;H(03v)CG;05f45(v6bg+r7U@Lna z?o}f6EEBDOolmNG@;R)+snI`Kb|f&_z?R6nevf}bC$hj$Dx&hR0XbhJPc0Mto8gv7 zSU7j$;Fqka+e=%g!nxyN>xnfM&{M_0QI%Km6;)-vJhn;Ki9okA<*2TInBu%?QqQu# z9`PIKnqoAGQcs1*%I2`_0-(~Z%^+o|gCTasZ zOu?->x0Wx~Bzex|+I^vD(EJYwC=#nV__^ayi{VQ=+D zi}9qS_dvLGHM;|x-k8@#&i--T`q|BGQ-FC@_@P(wIO)RN zQT)v6Yqyeldf9SJ6x!xH8uWbD}S&M(j^1 z4xR06t{YjJGlu$s{BS_Osc#E~d1T1RxU&20{b^(i;Ws&r)?trSi^!auaJV3&adZ%Cdy(Y4!hkSiN7M8`?kKEJ(u z)%#JO_A}q_I|m(o{hgZpK0q2eQv#*H3OQIJT*f7YJhn;+5Y(ie*llhFH22Cw|$XL$*e-PICq1Kq3jY4*_(B34Bx5#qT9$bv* zuP+2H51ZZB^n=|-mer-5K_lpbim%FT#QS*n|Gb64)5jOgUX42$0%>+-P+UMdkV%o|?XkDA>4CFS;f=k00DM|UvQ|iF*yH!JBg{n(|>AK`gqN*(20M#t1+`X=l{nz*r4x0 zVP&K#e*w0fhU?m>_ux5DBJ(2BtAm&>8PeTKX%CCZYY$6R2;GN?c<4U#K?0~0I$47p zXlDZ4>VkSCXEoYtjk?Ycnxxs-F2$;= z%nJHRKuA}&FY(&NC7RsE!J#p^%2K#eN?8+CU4`BSuBKKTM>XtJ@lB)HZV=t6^HniI z`P#muhaf)QP9A`y#i#Q|jPMcPJ+lAm9r(wrWrY6v(=5oi5eLzrR+gs?0s%zup%P`4 z2wk=gA=9*$SLhO6c1lrTyUwe_FDFBwq|?Z{h6Gr{E2l|w`A*L>2Jb5S>qipOIH}GK zC|K==Z4;JkV%kwpaRXYMsZWjq^)P zoeQTN`|gtgkOKRzBQr73A1@IDJ+Kc0z50P(2HG}PTNJnNSS0B;n$iJ(yoqx3SNq~d z7Mw5RTWB>r5dG=H_z&UCiNqUC?t?e|tT4PZSu@*yT&3Q!uc}Jivb;AHN`_E%6?tuc zfGk9^tURgEvvFe(|JnxzQ86N55YzB~FA3;l*v>ZKPCmIh7<&B85{>sacWS%`2_3M* ztn6RprIxut6Txm>8&1jgJyt2U3Uv%ib1u1zlVpTKEAUnire){mMf@w*ze4qI{yu0n zh!^0JCMv0oq_mnV@FoTwcKi!E`#k>T`ad{eUGX;?o&POF%Bqf&1)YK~k&P@mRs z0^M?+*h%+0OlCfyZ_n1cW|%14e&=CgIg;g5rP?2f=BgZ@N{Nu6X8D(XIp4%YB8sV2 z+FDP+yw;leb>;gBWli3TQse*~z^T=Rew87n{ETdN_&SK9UfJ_JKJ&zEq~MbL)?x82 zpHc_MD{U2VUfbHy19Qq#lflOuvp10Qig%}t-d%tf+AF~N=3HvuL3rTRsLZgU<2_enoP}|6C-;$*e53wK)C3eU9Q< zOinqR3N+PJ${4ySad9RZCItCIduMr+U$0>BtHi$O1gBhBfZ}!D zAXSQ~N?qb0a_26b5aa}OXL$rAp#E7?QC`rr9A-`3XWyjUwPbi|qkX<1n_l8KnWrXi z9Q10Bnku9zt8A5hEu35A`faa47Z`_G`%^^4QnoBhNT$w&jv!=CQ z30nL0>(hd^>iAgwvm941i365}k@6d>*>bx`>rm!#{`F{&4pze{*Fsi-^#0o-Ge=m+ zU&$%MS;revKaz!qY0GJ+7NnNTS)n*JJZ(Yh4NUs zPIpEjvk5VQ8^RNwOhgAxTN^1DkR5b#;cN6H(KwXkqCq6fFUKy>D9Ve5Pu>{qcuW9I zG!7>NLL}eqGbAIAhN=6KTsBb2jee={DI}M#0J;E(=oNLKVZ;o{XQlVmXmMUWvWFl` z{xIG5?R)1yu_v~{uu_n$uaFfhFYh5)wZfC1PFYhux?aR)G|Muc1dH(n=9rs`&c^Q`B^|S4g$Wl7sgfd{bR#`4&dzbrAp0 z=7;TiQlWe5@y|QL4d-=2ewjIS#T`2i=O0J)8;*C=A8kc_djd85Lk>u(!gH_p0Wz~+ z4NLmh03?>@-7xwJZ)it1!Z@ZXfNvu!vmq4Xyhw)@l-n!cD=ay9cj2j{Onu2f-ktg4 zC2e8WL!haux@&-xcPWe)p+&5p<>Z{)H%(}>DX}~v_htDH6w`+-w9~HjYd#P1e{({q zbnXg{-t|l-`=ntgy9vDfO1(eUE@{}HPpUu-xmM|>z55(Ms>_;jFYTK5$Z-s)fq|)} zTDwz$TM)g2{@DWyHu``W_l_x*`)2Fc?A#RZlH51@epYUZH#zrBOMO!SK>=Toj1uHc zYC;q^4oH)eQ<@ASQ|X~SH1jYy`Hg0KAu^szT@pM6|=4q=nzp{KC703_K^uN9Shqa?bnAm5T00p49A$3E!`lRVon7VeVyRnW8XB2*4 z80QLKWk(MEDZF#nC=(!Xx)8n+FZDd#9i|DRkDz=P99|q^XlP(wz2f-h@h$4iV#e!t7$$T7T~w;~4g3cEiY?!t(!lcP{6(YUCO|U-H(G8F9_9-a z5R1Ne+YguPcdN->XP|& z$@+l}xKK7EzfqJakvELkpZ!H7;Mx3e@jo}?oL0uV#N%~|^$m#^8WMl?4myAu{f>37 zA-_f@zNA&Z#eRKo%$7JEJ(E>XO%al&TwW-JAT3?|O!_*N6QS`FX2P1=B%4F)-i1}j zwPJAR9VCJ+j`n-^2bMs)o<8(8cf=hucevl2@?@L)=vA8A_-Rga-tTkY;Ko0`NxdHd zY>=h*d5xMP)Ff$I{e3_cT$fvfJ;B)NrjfaL2~xxTMz#ND7nW zYgt|!6etMJ-1>P6mVd7wXhmR*TYQbJq5oVz@Net){Xe9CNdI5dzhXwV|CRq2^>63c zmJgo|1OE@;Gv-arZG(Ty|3&?q|BKQ^gd4QWD(V$|$@PEffd2#dY|do+-}qnF zAD$=S&)1)~Xggt+0tw`#OL;Z-I_^{&k>%Kr zq=$7^SfV98P9hj~x7czy%d-f5Nz55=`Fr^ruO@b(mM8D5ev`(~k6aCyy!zgL4Gn2LR%{((G8xUTKlpbfF1aGiyo!gdLVeA`|7T z#fTItgG1GGKTr)OvpL9@HeJkOcA)i&LfJL(wZAwjt#WPyG&WULG#M@>g9tEwc zUY_nCBK|-D_NmJZDNU9=JA&2UlA@{jlR8+56cQ%7()Zc_L~=o@ht9!yz=gc&_bS}7 zoL%T6DjsWwetUbX1?ID#(C8JA;0|+Qzq;jLulID{v=h$bY#D~%Lw(*{MC+5T3^>Uv zA#oCkNXL-|>r;@=H>oc3WUn2>%IC%hJ$wiU_I?o$ithVCC@6Z5itZR6RQ%76Ke?ut z|83IfStqvgTQ|ScKb*MIKlZY~=>a+VQy{?}mg5<;LYMAMyxu1-z~GW9jL$Xwg3149 z8}GxJfw3f&=NB%|RqxX|#q>SI&meQ_%JP_64XoYvut@c@15-vM%s291hi z=u0%Qr}lGdEj(;of$jC&bBPu~gM+S6L&**eK5!t*lRSmAx9zIt!RU~gaD&U5Je33Q z?%3w!WPOQ^bqV#^!}8!^9S;r6GL}epnyUc@%qjffhC0X0%x*x=Xv)7agiI$Gmu73? zYmvO)9AaFWeGGaFIp)iEm)^E#P;ZAGeMd~Mbd`RB$e7mSCaud%A5iFBJHiwWUsqX@ z)<8W!`Y)F>5KGpl=JkdkwdY8W7T~IC_;QdYMOqxo^p@a75Mzib2 zg}L3x_D6o&slxFn-olbUyxC`n)Ri`pH1E5-rZr7jH2eE7)nSpW^p>DcP|HYgfo#xg zV`pDVp6=H;)~#8l`LW3v|D*!;<%7k7Gw>IRv|6sRUvwY#i|&J8$yEm>v|Kf5iY&EH zwhS4x%*SI6tg6>wSn2)qW?#1I)h{tUI)AIOkeAgVpsM50rYgc4h&mc+TmG#w37TT<3COTZ%w2Xf^W^p)Nu5cY7)*gbVUGxsoDX^Nmc zI#tiQzd?sGKMOv|v`CkOPc~tar{Y4m3TJfX_g<1^#+m-{e?G@(X2QqN%>ExEG^Iih zxujP=B58M$K6`e1f8O?aWb|}@>B`M-|Nh8xQ3Cq&+s$j#@kTfSpIzXeRCb4eMOYr+ zML#uNq95F$vh)-24!FV5PsHfwU0-vj8e_|)SabX<-1U3=;@{oNVGbB;eUt9VX&aZ_ zBS^VlqkO5+yMeE0^*gPQ!RT*;O+AjbajI;pD_d?-^aR%))A2yjq%cg4Wz&C~HWZhff=4y0_3q z0~Vhq9l;jz8ej-hH88a<#-MFm^gKkUb7!%xq>BGn15a=O{#~&M2Q;;SU3ULH-HuJK zS-Y%lpQ7Y{O!?7IB9Q7lh+8Zr0>QOgG8Nu9E6pc=v)5#sJ?1f|lFnjYk&EL=Of0#0 zHiamn;E)27fP%U9D`dG`;sKH(9xQAAQfga z*^=B2=}kUGHxoOC4V!L1v~uEIcqo+c!K(qV(XOMs3e|6zgjm%Vv#lv zv(84p`rLbe%W4Zk-pRdk}`kz(W4)x!#iTY3KSO1}^|Fy=T{(V$`8}-xH?mUB; zo8N<1f5#Pgeh^FH}Flaw@%s-Ue=a`}LkL zRDXEhrBICD2BM2R2>zWk2gNQH1^Rj$Eket$)FOm#B)bTeY5$pW%TSqHhKzC0fWHQD zzxy9Zax9%6GeGu|xzpZ=%wuW{ve*35Sq?<0(cn@MxE9smZ&;NS0_ibkl>2Ts`p7gt7!a_0pYIKXb1&N!|ReQYbNvK zwQz=4GDCZ}{DHYCr3tX*=`u?ElSgjzTFi{C?|15ZYV^w`!!TBFZMz~l9q+4I7z4)^ zCHJ7?l?a0zo|~hy4BECQ&FK~P#i|LW)m?yV zyd(v1z0j}yN<7&qq1a|qd)|#9kok4NRwmOfTW!kS;*#o=^!D49G~XrdPZIY(xU^Q6 z_T#t7wvMFFo`!-5;YW}po&U#MpED`#*p(gg=ssp=(p4azuK~fq91?v;M6U&NM6bDL z^D4Zzu65Lkb7&_6XXsK71j2X3r`opRvE}7dsr7ZpnwTDun%%q(jObko2Oe8)*359% zvt*7f|AT4_cm32}%;1@B9TH#e?3u`2^Bt2N_-j|7%^9@-+Z9{Gr;av{C@2zwp`?mRe!N+<$f`y0yHyV_K{|P^JWD_oIsUl z7n-bzSzpP1vCIDKEI<3CAba;7w6G>-1B5bXe2<0v?#o1!IHxBUZl$$EQF5UMmuTcx zuF{W-hgpj_`bKqv)W6^4{h-GRc;$d8f~z!wt2x66ZrWRr&BC_=vhk*6e4-$}O<+KN9W5WZV+OBC z)1R!!1aP4@Mcx9&pymo_jt=B?kNG10>+5>QSEe<=P-Hvn1KTxHyuh=IQju5CJ3!6v zwwd(n{VzklZ-38ZktJNQYo?Mb#Ua|5cQEEmp|?~H`FakdZR8ueTH@{X4LLwI=H@Q( zZYQ^Y!m5%JR&pNjy&m-lKsXjj!)Kjl0O|Y(H1gYj1hCK`4F2A1FPHyy58VMAk`Kc3 z?&}@DAv8j9k!pk1m_`%4MfP91Lckz6Q5F~#-u5nsZK)aB&Z0vT_jgMS(M4Gwy%FOD zlhWaPXo>OtU*Rv_0CV_ds&m}yBbo;;+PfTa0*lw*f2`wZVpw@=BF%)J_h<8^r`lK- zbu-q-yMwW6sPvVaBj*Tlt>tCjyuasA0W~Aq>l>SrvTi~ISw^OM!D$3ibgmXc=CU z;m%<~DoZ<)#SbaNxNzRBE>8UA&^)fRO%~4Q0haC+Joj?e|6Cio&u>P~0k%2qgv7uE5^voAx7L0%W2MWaQs8R`ypjyC+!{*c`A1O4)ypIIJ$M*Rby zkb`Cfr>WN6Q0#O(A&^3_&^sffd)<%a^m+x759ixBr(g=9oa{dA5iSJ#Sj`Qsg0Pw3 zBBIc#{t4Fm=JdD?LbEr-D6ViU&PU2&0x71qGp(eV-VCj&(o`{~w-M?_D%bRO;c6i) zK#{MljCl8IS0o>=6M5*>Pbg(S;VxC&_$iL#$VwH-Nr-E@CtyZVlG);_@)p9!b{Jl& zc#dDDEXcNk4SSx~#b%*j-VOh<`ompLpX#e~ay)X9BcPd4{+4nH_1Knjxki}l7^E)} z&?PN^k5S%-V~ua6pBKcO%~jODO8Ejnq)O+`23(x2VW=xj)XO^WABU5EkP+OD^48$0 zv_tpfZr0?ro#by8dwYb`ncXk+Hg`yj=A6F}YS64<^be160q;HP1q%yqn%$;Di1>$^N0m=d@BW!CpW;JE z)ny@6Os{jM!49xVg>IZ|ob8d<;B4Km1)R;exGypgzCgUK!o*we=YPxP>RMFbZps3S zBR(GzaQ6Ysrat=r7oaR##5>+xtUf{kMjBcDf1u>|jhW5jXa`=V`8Fztqg8qZF~`yH zpm6f-`P3}@JMq)hMbr^n{v^%h5%Dus{4gF-nZ0=NLtoeP3}%nU`Dd3;!BOv2xcun=VyXrW{u|2A=Iy-1J3$Ak=Sy@9U&n>N z#S_#T6xqV{ZDemomAnmkINbSrvhe+K*PB+SK@4|E&Ph%gm|U9Xq5Aph!w-EvVb6GD z;@taNaGRN}VC%^tYPkx29nm=@;adM}zNxIQnBmg`-ZZ6I+bZ{QdJEBP9KtP{oEYmTVR#wW4UnrS^G~(OVYj%(^>wDq>l~?Fvg4UJj;Ge zmGu2s>;T|OZV-pdDOr~LaiiME`8bAZ4gY?#*YDo<`^7taKZeycxBO-*&n)_AJh9?CyT}}1CB2CQ_T`o?d+bXJfZ#LEm!51%OR*b2x>e8H35Rs%xVyY z)MW|E=ThkJ$2)oEY;S{NpQZ}$QUchAX*s<@tme~8G)ru4u{n?`-S-$+L7Cw-mwOei z5Fg-3w?7i%bEQfzd6d2bKGDFNA6nmUd_0hEH(#0Cf9#X>#wl*tq6`t@$8YJ+ExdVu z?Z+Ov-!*>FSGo`OxA)U{u)o!;Khnl?wD=E-64Nl`h&feSCI-Hb|+`pFGk#xUd`C^2gwE12irt*d<=HV^OKnpQ4BG{(dCf(#8M?^&SuL0 zc$?5!`uxQNZ;0#CA13G!0u%O?AAU@BQzTuh2O!&&oH8^yBbqwlOVyu*Z+)z58?iRm zM5>-|+bb~}@rj;z=ORD*u%X&yeL<8Pz$z&(CWK-L0<9!vl+SzaD|S>|>0MiGjA#38 z;H5zArD|^ez-K(F_@X(aSzmjrcY{xre(i1w?dA%NRiV`A%qnnkY_<$zUO&N*^zQ!@ zu|9eu{@NE!na#OqN`JBYDF^i8&z5|X>6(PU_(lEk*F19v{MnoYYE8mlGx!4waZXZ; zevt_-l6CPc(FGf=)A;Y-=hB>v79=A>1=y-AU?ax&>&j1Hq~9LyfLi5^t^%l3j{dE% z{(V7ntzg!~`EpA7fNXT~ZxaOJJqaM4k50|UsFnfb?L_7C-kN2=SI$%@Hr@bv*I)SX z>|gqV@s5{r!Px!WXK69q{_a4iU{UHxOIT zn{9#xHMSdmo@qTaDD|Y~p{|~MW8KaRB~L2|KlHb}=>-w6n2V)moS~&>=|tg5zucXC^xi^+lpX79Xat zcOg1Nc%JrTnvch0!SG3I($uscSx3T*feE$og9{yosK-Vl_kq;t$KTNc0e^l^zM5F$ zqRA^!AWtaD6xplX9Pz5r-?m~|$uacR-2K#{Xvssr~noeS_5{NrUtW}BvkZrXLI4T2t)se4VyGYib$7@h?# zelpf5{E8Q$@ONJ{_H0urvnCxu_1-nEsWR78y;^T23E=kkyYY^HA$O)}Y$YaYci+Z-&exBf z-OHaM;v-X4Q=|CPtLOLUPwUXF=B%ILuEC;fkliRePxaT(R>Dc8H)upXPvW*EoJad>hv^y=vHU;Wbkizc3re)x}Q{=3oDpX|cS z`sBQ;kQ+C7_a46im@O<7h?TIg=8aCG8%!V%W_tc+9XmCtZEsx-Fuu8*MR@B>(a zq2tzRa&Qhe*19_Bt@2Lv+} zd=9mJId!ehx4X0Imlu)eEfm#Mag(Ybj;*;l?8`GM?=Ee_3479-7rxPAuy@Pn!hIjmb}A&(nwY@2uNC z?djGgh&osmQtm0#Hq@0FNWM%9-v$LK1xoo=tmc>BVYunm)BVYx3XN0`ZM-LqwDFcH zA)1DkHVQ_p9-jwK)uWygE%Z?p6^75UOSd4@V2w_AHSs-ScxyNzyNFasGD^24+Oq@#Z4h3vBXiB9`zf zLR@x^29O&ktkS!MTh}$G93i^Z%#}#`8XOCh&rY-=u}FHzXmaUC8V)+GsvRQW?DLWO zdI{e&JyW4a57tuno_EFNTNH<1{95{hL*J#gBQnFsCmNwMgdcBPI~f|vk4QYJ*f&*q zt!GHb5Sg6hxNbB$J~ez;T{TDFZhd@w*ZSJU!^ zz_tUSz-x}<3GWJ@s$esz=`0Esf!ab1BT`M18IK`|D)rAsx0nY?9f58~>3o*Di0*2H zr*nmrMyM~|AxGE<%YVfP3+;Q&D6j7b2j-5@z%H)^Q4^r%&h&Zmwhl<4E;(N?PuEtz zGd)y2W2ysvj3oWD&Pf0R^f7+uSSLR|=vNGO9n%-@`y93g^y}BtF$Kp4^tb%IZ^thF zUJmGM4}GUDVQn8eW2)khMH=$Qv9OOTYLIv;4#V_o^3ITrgNyBm@FXwl>J34ZcSkb* z6=nYD>JD8KJ@+YFsL~+x%oBPCs@g!Q+^fe~vIB`FXIRL52u&OqJ=EBXh=nTlBCkn2 z0mycMQU!o3QEu8kHxCh6mgQ7Lo`8{L0d^>OrKjLH zUwg`g^M4*|Ne?J#tV`PLlHUIlNk_S)buQ^0l2{)}%Mq--%pdy7Z)fe)Eh?*~a`IaU zJok~`#H{C^DP}!V{10A`BfB+U=r5VJ|H1#_ULfG40_dwn9I$OXutN%hYs`9fkZ}#9 zCeH4}YL2#Qzs)rH^K}Ri$EqxAX|KRkZ->K?F*3(nC9I^yqy0*%R7r%g*XNe)6+Q}s zvQU25?4!4Aah+{m(_u8^OYT!m6uxq_TmSwDaG&{OUqIgeWG*1PH|~4|bnttu7kAx0;`S7CXCF?n}hjg82BsN~{p5@NFW=tpGvw6k8N zU$JMyROomjfq0{xm*U-%earn5X9Jiv4AArw%l$U9C-WTKbO{|*bq?UJMTTmd9`nm5 z5aXr>9NrJ1eSe5&7Im^!F1-I?8c)_NNpx-rh8z z?c)E8(bwknGJ0>gVz;JBzw=n{%DX=*d|&9%_`G+f(NM<|TX@#C-HqN`fryk%^_MZ1 z1sY@+Zm89ZR7E&`CW}nMo>3l16D9oaAL!3+m+&h6*)Q%FI$TjzlT2$B>3OW$Zs7{Y zH}e*aFV{Mj*LIPHy;P6LfwwpS84@2k1a)eA3zsk*KBDK6NeWi}%0*)>79~v{Y>0Yo7RP zpO(BE`ZR+eVWgEjI=t-iT_W4oHEZq4Q zTB%E-zpSesJG6Ds$Y(}w&a?_nF+S*@^y?mUu%j<|C%QOBRTuVR7(8sVS&b%m#f9 zaPMSt61|xi5hw*P?i;DlmMqdaNEcgaQ>J~xo!eju2XLW03)d~Rwj_wnM>x#D>4GI< zLTv@c;L|J)FTSG5lwBNX#8FoaO*j6T)OXx>hvsE26*aY}9)?j{C``sC9$zdXOWHn$A<**k9eS`_~ao>BgykH#m@?+n8DR%;4d> z7`glED%tw|%*GvDs&RRw_s%*2KR!#_Lu{s+Wcz QJV?xPGj^G~V?!4S$Gw62`TVVWiOaWI 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

    6Rc)&D;GEaKZQ)-)^dw(9EG+ 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%0DI@F)27tk04{vYLnTASNb`ahQK5A%Sm z>VM=#IVUnd-+$bYzxrCC8s;zZT9q&C-(f$XQia-2;@jsW*k?WPJA1DRqA6*?}6L zDL+8miSKuu3FJq;QR?$5@%@X^V!W8Y&&G-?c)pVQYr^~o?T+%r){Xrbzrp`UxaW6@ zd~n-c+D{nuLW#U6+g%yEh2sAW#!s04Xf7;{)5CiVB9E$)w{XcmzAE+FJp0j zF7$t}UY79^osvkp;Mcvy70$0o{Lf(iw%mV^@e-Y(|Il(zA98;35?EJ*;Q!+=uoT%deXspMxb{{E56M zr>$tXnBs3x06Ut(Lh8@LF6yvuNJUEIMOk-ps|OT+gjD~iv%oGE{%?a=QSO^KW;^3I zl;0-MK;XP-X9CNw3j8SS?LQp%W&LyfjpIv|@j+AS|6{uGep%Y!0?KQ-KSxmd7r!QM z#PiM6<^Qez$<#DoC}sccF9kpP55DKLYJV|(D0_|ggY=)FMLqpTgZa-^{Ad@Hxu+hF zrtCBGAE7_af6x(+q<=V{;xZKvHtIZ^UvXYHfI9)(Jm-QbQ!_-S2L8~eD3+d zPy>MA&N+|NB?)tp9D-#f=V! zs2A)|z7k7#`KSEF3oG)ijAioWWQ6B4YI%|CUWBIC&=P$zfdHR3k-@frJUw>mLzxS|y=q%b5 zX9D@<_dhebJ(xwkU(>-pc>bOW=h(^lhjvEkfG_xbmv+HAzW&m!KR(|z@)PwZp3i4b zAV0>B^3|d_Ss1^eeh3Hu#QI+u6Dl;bXn&Cx<&1r?S1JB??)6X5f9R30_8oaq&a1hW zpFd^LKiQu`UDO}vaagr4$cwW6nu2>N{(nAu^4tCr<;$x6L|&8`s|E1=-3|Jmhvz%g zU(Jy)`)fii_us+I{a(1FY&&1=5{}t_mviVJwu7AXDp8bcNUi7zW-{tp%o6l7Gj`ttr_k(?5-wwI| zAmb%<-OrDBy`r=87_PrOzivqZaR=rr`VaPc5id)$JIaPPnr2}9Wso2Dk1DiVARYL8 z0p-_&d!mut^94`AyQ)qbe z`25)a3G|Y`=odg^5Lu)v?M4*Txcy_K{_|Kb_LuPzol;%85HcZRi;G{f{|qnuGG3xH z%pW+N=EX;zzw-O{;^3ch`NHvE120~H1U`cq|LrG4@%5SR{0(a%@;C2b0l;x9{by+3 z!7q?bmY6>%>wcItoT@+nfcDY-{DtE(U)aA|Q6=3)ioZ~Dp(vJDe16CFK-L?7qu%)2 zJ~``1s(#C27k3~Zwl5auQPLnW$N`6@EaU!jQu3cyUi?SKOLU3~7cd=jE7jk`^Y`M{ zqJ6>ob1>%ba2Pj-@@u8P-2TQ?`;PCAk=6M;^D79N4$`*M+!!=C~H((V7)KAwm2i|fvHI49D|{+O>CB=2;;{QUVMZI*9@ z|5t?eeK6bK*A?LWWEJ{XSf9dwEk%mslV)-I%j;i8K|_V-BkRC#MOYYaKzX`tuRfd~ z`_FYj|0_`c$o)gB{&Q(bf&Bw&Y~}nxQvdCWUEC=9PZ9|)|FrpeUK!PYXMdOet3B(V z$>+p6G?e7bi3gw0z_Z{Owdhrvw%iO;9dzm?oW zrguMIV=?Hq^2K0QKO4r!lI|5y9DlGuJCD*p3>R$DKY0I&+efY+{%ijV^+tJM^u%8% z{Xdiv6$oaRJ`=|GW`UIS#GlBE^3(c0mni;K=LG`oqrm%p-C`Z2iV=Z4d$(>Pmwlx1 zLw-KDlbug4moKaQ)g=CQkM^|X{ZD!Q-5|!#gWUhoTvxsSNiF?rXwLf=IloQrUo{ms z%KS23qEoQ{iT2-E!tUxn;C=XfF&6a4dBaZVpJ4NW_sde1E(A?# zS-b80uG~L^B>(L1#Xn`dM5ox`0?HcOrhJNTAM8JWdLnLAHQ_hTtqJoV%zu>5##PAo zBeS6Wa*uDo{J<|A|L@%WFuDK9J!yO%$2U-d84N;$D=0I~a`5>l2LJTCAa2C-!_{s7 z%|6){*PPDy4ei%`un*SH?t1yAhzHa(2n{L_wso~D*!}nM{XO0K`#0_Fx_))D_`myn z@a_Li|KPS4$oCgFVgEYJU-voO7UNeop_bcEHz#-e6kmVz&)Q&rJYQVMN^N9@dh4fXeZSv@SYr# zCrPZAQT}*zR3N4Qfu{n9{)zTSDbc!rA}`9V_p~b%e=*pf3-!l!#_HTJ(|`MtYx^nw zTCjf=@}u6k51dB}hT_v3scCv*STCI7!Hii4s5DdQzNL;ukKM1aTs71%$#5BzSu z;r#+s>oTqTH|7^!$WUrvi{xy5xBUL@2IQ|3#s_Rre_HXYK#b3Mhl0+(al=bi3Ea)NUm-SEkOc2QV>*s|R zFU!w2H(!)|$@%5yqoQ8;lOmB9DeIr2qEBLK{#boY5a`!Ld*}fB%Xm2&r*z@(3Hvir z{B;+J8=Whlz1@|t{*MFr@%iFynZw`4_fLGjxK{)CHwj)_0{Jn0DC<>dP>ibIeu9O3 zSifQaLC+554fK=+@}kV}tj$x3e=_8+n}0sc+qUSx$ADKg*{^Ceh*{ z|CjdPvdpT`mf}wV=eFSUi(Vb-2@C&6y-_ZTdQ0{{n@Rd>PelHHss2??Pa^li-1# zKk}mt$aBMkAD=%mIwnDz{O<4ItUboz^buBMnf=yA7zx*w@vRUxk63CD5XWjw4 z@K=)?dhkR2-~jvRSU)6`A2SwY>-Epm@%|6KKT^II_0RlmOo3l~6m^2Iiv##kKTNMd zLdEkgjrh-;YOA-$*MAQ1ul`;9U;ir1^~JUi{1S_`fmmF?dJW~mQ8!%kpXK_k6WCuX zB%UWU;J2VRJf9vfQLY{3|GmNgv3+@O^Q|J*O^ zqXEvFC@cM=RkLluynQ^m&a?mdZ3}Uu{QNHCB|4?FbYVnfhrOI%e*YWfg zODu6e>%v!*3r_vog6A*JKMaEM+xURE(Sh&3;QhYU{6l}>N11(pRr2|IisYZTf3uZ; zA}^-s-+OOd`|rum7ghU!{_uRH91#9#Rld?8G055Zudu0TZ2hJ*z8&kue`LHwr`V(m z?>GMSIez_v&vz{siyLuYYUQBNUrxV7XLx>p9$q+8e13dB9s3-RI|Q!{q?LVYNDfFpieQkR!6oL_sYCNC=B*ju>8XN>%0#nVIe%rmL?<^d%B(se zSE=D4h`xb zErI+tAVyhm?$E>W%P;odLV@2oN7zLf8 z=l6|}>IcVn5D&~#pt$+9O42{JoZP*dm#>(Op5?1@D{-S-zGS>ar`WOq4&;?oo%~(( z5Ac_6Df-Xbq5ibRit^UWpx z??C-q3H?ul{`R#(f7_qJkL(6Q&kN2f;y23uH?z9x=aazy0QiSM`BK+`eSm+YC!O(^ z^a5)~&5;YZ{!Yn04?%x@IY5#a~_cX9UcDP-4Z6&L%>C8|d!~cyGe#C;oF0WTl;hS91OU;C}$~_tGvA z_c>;TxxQ$?U&tG=m+Ql-tNi??wD@mqf1iPW;(Kd5?$3rddXe(@Sf@Sj55?!l@v+jg z1c5V^(BA?2`+MQV%QpCeGI9T(dHv(oAM5|=JH?Ieb32X+|4Ar6M5CNKI^p~H{Aiyc z(5;f^N4fdy&}U<)Mfu55A>AUvLL-~?=@uQ@yg{=v<=817{UaI%M@6%Xp&^l>(Q4cF zeb^Zr71^;C^+=+)!#KW%gG1Q48tk-?xa$>(lQ!bc0Y*J%*52EmjqhfW_qX18ht2X;5ccUP^!e)9ic?6Mp+f#y!l)kGvRR__ysNsPmzE&tZ3T@KyM^ z8}aSq;14*=KF*za6+L%eq;X5Repz?jN2ktzu6#yOw2t2S9n%^2wA^l9{37$O+InUr z#Xn~$%U^>35v!m+#|y}dQm(%~4ZjymoxdK&^w;g)^;hQSWoA;5)-7fG_q|)M7-jz< zcUk@hoA5LHI~5~8RIBdzdR{u5nL2;I3G1jk2!8Z``;xqhZIaRcvVXq)-L{|d&uMIZ zyuGtgf8=*A&#P!tt@#(!C{vH(k7Db~9VYxX#;+uR|8j{18!7(3ld-YIQ1ALHzcT(9 zYyB%^dNhgR&zZ+Z(MTtM6w_d1W@k@u4J z`0ugx6WY`Noj;4?^-GHX3e#VCZqDx*DA$(8{B8U$UsA^JE89P66RV%2kUy^ffbFAg zb`r(8-(3y6zsUA~GBx*lO8-Mlf3;bn|2cmTq;0c-(tpZp=0E*>m39q1%NOdeFU!g5 zPxg_5+&-qenPfKAK9*+lA8q};^J`0UD)wdYkQy%zng40`yPYWh!4V8Jz&pQ_^Dj5@ z%l3c0s>lq=K0e1-`)I;%WA@Qj82NqTrGbMk0nTs?yE3>r4ym#RM}uVVhs_&esO z`PJfC6vvayk~IkakmsQk|MZ*8{wDkyA^ZR7)^drST;0;r4n6GkwAg#aSeojSa zA3301@Os5bKewX%rzo4>p=!QLE><5?{b%fgA`eQLU!7jAKjSyFzdgQZ_2>Ts|EzQ~ zA}RfUXZCT9V9!Unxb|`N8~TsdD!1Y&VeJ3N`nS0d!RsG`{xxf{`eBT(GBTXDk3AzR zAI9d<(Ej!t7R>EqsGt92@0T27eU;RmJ^4|8+wiQ4)+;NT-7RJPOZ?qqFU4Q#EwleP zBfq=;9GX?JhgtKt3#nR$;{S6y^ZyCHN^CP)f5(&5ihYyy^XZVAb=Fb*nRhV%oXGlz zUig)oSrmJvEN;8t7uh~*)rq|*{wj>$Hpy2x>xJJjC99%OG}=e5KW9uE+@GpHBi1ng z+>}Tu$@V$r80`0j@aNOrKJI5c)Eg!0kMiKMhrQYOM>+gIz8@RvD>U&@M2m#)f2`(7 zBQMHz&-VIL{J+Ea9P%qKLR~7j*Z+ALXGdO?a}IuUlj1)v@oUfj8~@2cwPPs$?>`BP zx%G!}?=Q7a)SNTrDE_CQzppEISzKTr%m;7tkkBqDQ=i?qfa1@^#!q-ae$*SKxA)M< zi?U16;pF;^H>&U-H-8o}poaQmJVFcae_P~Y^Tj(e*qrF+Yg>^}K5Qg?gjR zcy3f<%081Ie^Gyf-d^5wATP=cNgYEe{<6h{eOUA83hDr1ANyS)wKsHnkQZg4;mOBP z{0CtFa<~3-#5lE%`;5bH*+R&R@=mLRWhwsYu>Y~_|G2+eLj7m%weEa=uA%<%gZXjD zuO%1u_)>nQ$XxRMUOMnkeq*rlxy+m59SJUGQT%5^A5XPIk&g*}qZ-!HfBe zVf`PLU$?$!ca#?V3%ae3r1*PF{;y<)@;e9eA%Xm5XFJLBAGWXYw2$^5`71U0G>+2$ z9n?Q)f7D;C3olj@sDGzLlgag$b&CuA-Sykg!tZe&k2n9vd_`HPayD}R$bP`@)*tH! zSpVnFZ;Sk`yWlBVKNN-ai*Eg4eu}%D*$eMQE%?7#KKVP!{wZMn7Vp#5JB`HQUI78mj4clUo_9bH26w_@|#H7NV+a<9+x z?BD8N$gkxdT$kd{>V@CE{x5<4zgpQ*p5pHywO`nu()_`163CzZ>Jz^H*wFqqgZYVA zzbV+?L771QGe7)I`sY@5{y7iGkLPc@{Sx_u$k(G$A@Ei-EIK-(Y*c7u-_XdKt{0>| zqq=(hD>^tbI;c-nSkutneL|z6*$da8qFwrghZJV-Q=>!sN0($UE{m&C(UIN4yB1fA zhKEL%Y+f^{dgsoOp1+Eyh4G&}vf^rJWMr?%B1$t-NB67RvZ^b>&f!r#L!+XCyM~r* zJ|H5rNc@+%s`O8$CLOTcpsf0=%0J2c{VU-3EIz;0ULx>LyO>{>uQe~LanFfQDzfM6 zKZxf5B^kd1#C{Ch_%!ziY>UyeN-n@k>PUZ{H;lHm9(U%&(;v??IF- zjGKQTATP>h)2bh#__JIU0B1m$>x+1gAD5q(nEm+}o}Im8=N}Bni!$TYYLzH{*Zcqm za)N!#<_Yk*0vM1NWtIs&|D^c&`~V(oaGsJkem+mYHCI5~ZfKv%HT$P1#ea+W4-fkH z!u~S zD-ik}!QY?#j6cqaU4lj!w)75zAy zN5MWAaKsJy%Uxf$mz7`lKsVNJoZs2n*IoaZ@jEKT@gpzFmW6tJP3ixBw$MmTALjbv zjbCNl{DT2`QC4jf-h<+g87mOZyTbn7__d1cJvjSdKwgw@Czh*9@xKB8vDY@|*H19} zvkwO3MVWs8`)m~d4#;1p1;6bin@7Pu7?2lbx}Lw>rTAC>A`se!`1%{`f8`Y8<{t>i z>y|qUJf`^nejxyQYnmU&$(8zyn}59UE8Sj__L&6bOL-gL|Ks#u63G1bBAX-fM_$** z8~>(}ncq?RuYmC>dmUPT8AS@91BnZI1=2X!g_`s)Nj3l{w!nIH4lc7*BAJ{V;F ze{wgPM)4m%ED$Q3_vMwpQy#^}J{V;FvkRjRQvA7J0zaHrCi7q9uP%vkewjbt&Z2z0JSn@$q2QfBwU9G>Fol&!6K#Z9~^TZvA=LGAUo@?r6m*em;MW2h9sVmM=b! zj(;%7`Fpp^v78kDYtY}eC4T5eRK7&5!l7lhr-^gF)thJvTUl;$I5-tJ`RPw2#XAR{VoO=1-dA zUzOs|&*snZ;IQC#9A@L z_Q4?YC(Rkymg27f{;9(GU*76xXM;Qn|6q{$7YyI9j^aPlK_Jxr!av#T5RdVbXf`)P zA7&gsk@<6cs6+aHlTw0TTNmc~Lh(BsY!1hjmS?Y6bk=fkog~He%YGh z=ks@Yu!Db^&Es{=+P6 z`ty0hu8+9gp#RW63q7Ftr_K`qJg@1$>VLUeJ#u`h9Qcpzsqi0}AN@zE&-CXXFZzEw zu|gqA|IZEqaC-2^^>^lEN?8A`LyB)tQ2b?=3x3CkFxMBMe;of$Oyz`>-+OO^@>2Zk zuM2+LPGO%5tcr>6|5(4NRZ}Ybg8?mtGF?oS>JGGdAdwgG-^(`9uDr&l9t`A0ldZW~bwY*O8mjOfD z&zkc)(lY(o2Ltk=Jeut#IezjE{r{Ele{cHR7&rf5KwgwX1`Z(mpBtflQAY~@_r|XU zBvbeY1M;H$CiXqqKR*Wi&b(nRs5gEm$cys2PmW%c{gsIV;q8kI;-@$>Z?JZRwm>s|g6$B*?hU&rBE%OP$z_~(e);h89YzJ7xTrv*P>$H6}s z&@L#WTl5`G@#k+W5c;4n*B4p;AWo!3x4Mq;s1g^E`O&& z{jcO_U-$Wy;4y;G$B!~nm;i~dK_B&>a`d91Kb>7RLzP{`IH)b&NSkJoiNEKA}C z|5RbWu=%xy{SB_L`rp}%^^alyd^^maPyx*2ShMH~3FWWyc3>N3pG^3E7Td?oU>`k#_8)A2(T7l9%vY5AT5Kc7ulV{L9vmIx z+ds~KaQug_)8QWs$cwUYk)>q&^)5&t9LdCs204Gvl}(ucpPDqfBjrEyo(O)eSvS`g znO|cWi?-p?oBp2{Rk%j+&jtHvgah8Iyez?)#1lj)9`XDrN77ioz zKUFAU<*W3E)a3ZaCG1F5p!H8Ef94{$$npO^_l5rIFk1gDSrcaeF*PQhqU^7o2mYA& z^;=wdJ}$c z!%I%({LiHGgPt(^+Zn$)Ti8dH&X4fMkM#n|HhD@krR>Ak*YTji{?%sd>|AT@#O;Rm z_vpl*$oDUNeH{(t{33GiB{Bil)kv&pqnXUb& zf76@GDSp@bJ;rPc7WVh1KVQekKNwJNl)bOiO+xXH1^eK+2r~ad_J8e=wf@~ZEFQmF2!ySVsNW3wvo5E@&szUw<;RlaW0{`QAL2!5wenCpwokNtDUuQ?U|!GLx_dA(_Q(mo^h351$~)*t6@ z*j{E+_y+^>qI`d)eRfKJzCP0xI??`#`rFw$P5!}vyeKy}%07eQcdgH4AUp7zt<&Ud zH8CJB%Csv-jH3AY`b-`iz;CurldsjpfV?Q{gbWJg6bUKHm6U>oiUHvmb4m zoZ?@J{8z$U@z}?EjxU`_oG}0F{Ca+AivOoYE?Py+D*Q+0uUeDY&cWIrTQ2btw;Sr` zx&6fBm%=|7FkexQ zNK}*TKU_rnAExzpk8gL#rP$a91M;F&{TA<`^mnblWgrdw$7~%gUyF+Yc~O>ZcrrD` z|LLMY*t3cJmHE*=%6Z1kKM;@?WrxyDYg7D*bOEp*5%!VS`J#RF`<{I@Sie) z+XqtoeEl#FxWBZ_kIygIM-+D(`)|88eR@jq^Yz0#*gA{y`(OEIr`UX!;xDod_!oZ} zKh{KO|6SJ_rl97(aek*3H@^B`^A~^`ZO^4ht&1$KhVLme#Y`;>ykm?9}JkUC^NpD8$`Nvzx{$WCOYW~cL z*Kna z{Xt%o5s6OBqxh3t76|(ZbABh|=N}Bni!!KMm;4m}h5Z8Ig!1K8|G`Xu_Q8O>C=Y!7 zk<`D|Ujm^f4Rd|*#_t@$^k*Lo$cu9N!LZ_#{;Q$>u~&%CA6I_=_%>nn&y?R{$@LNW zp9_t&yrO)KKI>V2v3}4_u=nHag8}tMxwq0g^7*dN0fA7*iu|oSkLI@@Nulr$2INI) zw^!Ot*{5bLK!l2l&TJnEzLx|B9KXch;~bxs@b`D}`BPL)RDv|F`CxCtI%Z2`0jHi7%q-Ko8d=+PRwoeQDV36C#U+!FTQ0=3Oe{5X)Xv%L= zKUdtgWdUV>zP|r3shU%OZRneRAF{HJS;*_$YS zzCQ~OY8O#{&Gu>Gd$nLdy;07+c7PtA*&z@b@SE+^!uM*yfV?Qv->EU0(m&g6fw0{c z`hWk>v;JAg#+Pgk>;7j0y&yS%<1w_4x)=WWwG!5THSx(smS4WV3=dAQkJ&yme6JY{ zXcv?bkIszYw1v+jqTAMz)SHu7N~elzDfL zBj3M#jrzm+1#R)_9Vj^Y|M)&XJgBa} z>`(hJ*Eg(J@iOwFd|fL=7-gRz#?ON~L-5G^2z{t6{8QP>Y|lRskQZgInYD*g{13oC zaewtmtUScGze5%L+SN1)|6u43Ur@eC+^8yl|BL6poP_gPIKOj>uj0rc#)mc7za5!) zd_2hQi|V=>_owgR&&xQ!Lt5W@^(1TCnf<+;5AKa0?Sj%T*~_Aoee&!SI^h28-t42+ z4^a3A1KI^;lg~-Nr|je6pUQe`nS^~5*uUM%KBza!QvYa4DgEn!{P6B2>@vbrf2`l^>(VRyg8_L_-dWZ6C(3`GK>tdG{r|o3+uEg9 z_y+^>qO6y-XJv}NC)nR%p}&*q&OaEC7v-*bJ;?P(A4UpVlkS2TaX$@^w*3-+ zK!A@Ke{|VX4JrTm>x$slFN^Zaf5mTqvHzyrXYBj~0quhFWNv3tO8){Wg?;c`9JNuH zU^pQ3*W=j->ok4?@}f*t;FCu2*Mj;-J1^=_+<(LY{9AzEKj5U|2f9=IAM9C%QT+Rs z00`|4QadQw-)D|#{*GLDrWD0r#9!D4&rR3*igefx3I3CyzpuaDRR1c^b04SpFU|7Q zANPMz4omu5_-EaKy$cz?q5pX|o6z4^VHFt**w4g$v)u9FJ}saQ<}1q2t>#^&_z%GO zLC7!j;%|AMALKu&;K>#Z^_)kKH5XkP$IwW_?Pilo@D3y zD;f9~L;Z&HKkdye|63TJL4JL+@E^w)@|Q~d(^nM# zjhx^=IQ|wa__dQ?rvLo4nfUoT2K(&(Ec_qW?_>RJJ0;oQqJF-<^UPU_{|4CKcEPj$ zS58a%2gI7%-~MMhh2k&cC+vgk(@}p1@E?Nw^$D0`%3t|pviB7Kfl^?9SYNO066w&+ z2>sps{;f>;3lBTM_s2BYKXD09ejV09+RlC%|8L!A@ckbR{4-#Es{;C?eUx(&zlD9) z{^96L@#jn>^vCt}HmIi^!0&D!eF~e}XL9(PZz%qapg;1X{@Qt=znecmH|7892Kobd{(H8}zz@w##BSj~con6Z zNl~;T_$zL_1Nkq$ss0zm{|M?&pjS?M;eWtxu)p@s-$Y&Yk>alm`HTFe_t5$uWj8n< zd*|O*deUu*|1J6_L=fYJKMQ~K-RGTOX&%^};%_VI|ICEnHBSokK)a(1E&Y=3|7*zK zff9evUfMoten!lmBQapV2j%Q3G1(Zu(LbLEggR9Cqq}@vgx_C>xNcB=viO+w&nJ~S z|AO%w`iI@~2%WJ1hWl%~%h_2`9<2Ir&$0{;q4>u_{hWwBwYUQI&w&^FpD4vm#^;OO zt7r56r@=n`b^`)-qV22L5iS_cdV$M_cHpTo(KZ?LTNuW<8_$ z?XbQ;f%PvAXy=tHU&gb_`kbIzYm$AkJTuk5>5goZDgHrVf4AKsAC&8Y z-`&6UGw&bvIa_iC#oq?@FUInuYT!q}?`~f#{ImF!6tgJ)LBQ{<@0q{a4WYl9E-rt~ z>W9#yBW)Ca2+Yq!{dL&4*yfb-*FyjBQ{AgDenb7E9rdh#@c9(yyQ}j=eQH(zG~7BP z2gUD@_+?&<&x(It#(k|R{#~$tx*t?S$mdOZtKTLh+hnKsLrZwt2lwOkCcW{0+HkNS z#UHcUlOOlZ#rF@Vw$wkI*sGmb`3WRLW)6e zCysC2lFFCV|HOU+%Id#$Bm3t+tP=b|14Npg4{pa3H=ivC6Oxz^c(Ci*c*y^&&ogZzpLxZ^f%N$N#T7g z_J5Ecc`+U<{uOCQll!ypaGwt$${E(9DAgVb(?8(w}6ceh^_{&}#*plcNWv4=u`w1=V!y|ufN{}(=KI{v1$IeLoX z|BUTph-dv^yZ2@GSy^=ODvE!rkEeZXTOpqNlKvL$v+`K*pR5AU7yjnst7)sfU&Qzg<*T84e{fGbxzm#i`qSvQ z;0{=?p)6JB_8m(9Z0vokD_nqnA@Ddrf4Bepn2*o=eYEK)ivI)5e|8oW_Q3i|_%gLCY*ahn!EXOF-`3b8ZcIL0hpHB_>`w-rLt9K>;e+v1F z?=J$($4_PjjaozTCx!7n#~n|8<=L0P^*7PSa5jP(1ua$W`3S}nF?%+emGj) zy*qy^a(DhPc6*fA>%U{oXtp1JN4EcepOEN|!ED?AZsA>e1*+^EfPTFqyTic%fhs>{ zpj${N{AOG9wkhdo_XZGk5 z9u?drG%Pf@b7*AAW<6MPS-QIo40V||B04fqWwug_26yV_I>dne>=~g7P|2WP%%-7{ z%rG>4zsPRU(V^jLQFdE}@_}kUc6@?b)OChJpvp3`bC1x@YEf>SK$V^Ez>i^IpW5FB zs*#~RgS&;RE}Yk+5nR`&6uUoB?y2Mp&UR%y+~H8c6S&MDw$q+ov)=RM=x ziX`myCw}J=`BCmui}3S14ei%5_I}psI$uD%KgII}3WH)eUS_Z5Sx?7r3;3-ag9;?0 z&MzPF2m9wGaXvStzdkcBJ6|xjGP@nS&k;Az2=(UNJoK73wE(kEidImcGh7|fH|Mw8FG4#I56i!HgL(w> zNBXx?aNf!06n}I>X8$X3)^vE`{{{Ln-uU;||9TI_@6!Kj9KQo|VgXHn+g4e#l_@wccGev9Jg`!_ne3g6_MPA~fNeI0o~ew64(?%5PGI6g1R{wU60boTxN%a_j1W5@fDKhc9sH7WiI=M=Ut zoj89wK0nS&v&~7O@I1N~?&+VY@sPADuQAIji?kw6fB^K z1Qk2F7Mh}d=Va!&$<3YYUU=X4`_KN)o+LM!=ggTiC6k#m@*4mDyvcXR>GVJGV*2q< zxj(nAe7WrNVN!L0_R=69C8lP-?s3+YAL!(N`WGs{{|53~U+C?h{bq20{PHaL|6JwA z8|&hqx`Xb?2-+9-7~?;8RlSpR@t39X2RjtMvHRHMFWJ8Dv%2^{m__nu2J+i6@gKQd z>LOM@C7zy6?R!f5JMA&5^K%1h@QyM5E8pv^&EG6qzv(Rx#6+;#qXsVKk9wt@Z8n6=IY)rD)aiva#{ZV>tXvued%6T zjrw2J#9q>4xcx%B;H@S-x?87zUcYA3{^bZ*XNGfdUf0F}dY5Ox|G9luSJB14kJit4 zq4)*HX@W=nqoU$}@8PU9y7+t3_=a^?P};4S_~*&&PsksnSPJsYLpgT&%*;~J^~+E4 z_#XM~<8@i#_G@=@y6y)3H{=KUbJ6&x&iZYzF8-@Ye*3==|NI6Yx6;LbJCFZVJbL-1 zR)YV72U_py^uLnkA9~jW^@E3TzTi>+Xb{!o9OCT9x_SN{UHrQ@Q2tI1;y1t1*ALP7 zQNF-;-+Si`y8hejXURUN$hx29!}_=!KB3??m*ZF%4>fO>Ec9!hFrbyh1YhY`k{FA{ra+vbjOKVg4ex-<2P!O z?CWT4#>=!WWn4vZ9vP%f_G-RTQ8;vtd;re1-`-^E`k!OB(sNbgxAeWa)Wnm^e4~HOc_6^slG2~k#;yZ z*smPp{fc8hb9`q*yx;@AchCH}9TmhnSB(eL`eiC#y%-~*n!L93s3Dm3F1h5x*Fq9T^=p zaOxBuh&F;>CrlYLxJ9oqJV1K2(R6a#mL0-F)y8!+hDi@}oiZ_(hE>&=G>u&j3}WaJ z45|iW#%+wIyr*r8l#OkJTTU^8J9>;CI6C(-8d%K@Hn<(4g%~?(NVkC`?kJ;Ea~?M5 zVQd=jHm0$p@`uDgwSU@!cFCo|-${eIO`NP5LiW{{@(=kAe&mT~tLxS$okQcV9E@9K zz0CW&hWkm4n_aKWG6)Klx9r~lV726vaV!#I3ne_6qV^;*X7bWRi(fD8WG!cVpP+e}jU z))$52TLrW~DiP9e{Y>XXaRIpC3;S)-`lmB)kuf-z6pk<6A}k`L-+QyHV2TT9AHm1( zn0q4k|7WT9N6fE2ZZ7p7PRS4*)Vgo)XW2iIwGu{!gy^8`1mi+W$S#btRhyv^0_g_N z+y0Yweaip&7;9CWH{j*#gp#KkO-Ly;N$8iC; z;M?u>3w8KQDE&?d-%Ar8?+@wX&t1Ry4jukIlga)<_|~uKr62Dr>EdrVXXt%8{C?+< z9k!nZ>BmfCL{ISU@eM?H`NtS-Rr z!Nu{PY|^zqkE)2x_Okxx({TASRQ>PlFDaOSYab{nnBoG`4gTG>1?T9}Z<76c;q?Em z&;Mxp=TN)od6^n=E>G1DZOy#db zpnq$Bdg;f$Qt76D-7SA_)Zu?e`R|4By)^OfsY`Zq6#B3EW5bp@e4Fy$I4wg|JWtjC z2lVO3KB!eyg0XLSy6Hc%?a2Zie#0r0{t&*GCO-Dyi)R0NTkPJbQ;&E<&B z<46~OO^uvubog^$mod1mZ2zMAM?b@Ri1tS%T0mWH?tfzJD_#8e&uh3-hwslXp-3FH zzE|Q0gt1?aFGTTQr-F&JGACDZ(| zhySeF-_?F2tp6bW2Ub#f`+@d1dW-hgC8~NJo&TO8#M|{GMS;~haKT^im95>MW>Q0n zi$kZv@daTs0pFx!rnmrH@J7?F(fS`A{jZF{DFWYpgVIj~e6fzOnPLKP!He&zUreX} zvfro(w&wWz<7_kp6Y3vplOdSm0&u}^ezM=)I{Z%iWDI8K!u4-cTA7f3myVg@ z0&u}k-r9PU4!@yFzxRV|XQK8G`*V&^`iX!q=-8(i0e}nM(_6nohrc#U+Mn}4;rQm8 zWN$>kx9ONEE&vyN$o*q4*WrJr@Qt~J;|rIth=6a>F;iRsF8Bw|{a@+uOZ_2Zu>Y0) zo;dxxgvA7WgUSL^TtGhw_!o3-+l2ZbRd7G%XZiTMGb!%E?T@j|zk>W{Y>Uq00&u~f z+H%v0y7V{sLdM{nljk2q%U{WUr1rNngz+Awmk9kIi;kJ%0{Z>nx6Nz4M%Vvq-GJJj z(}Vt}C!`&yT2X+rTpXa+S4Pqa%{Ph*zy;rS_ARIA@OQsM^?3;2%193%dPx_5`N}`1 z=AzNuKUvxO^s`(XQ2q=mw}q8Iq#JydwOH$)_xUIMXoWjS)_-68n4JDwJ16(| ztP`c(7nOeCg6~^8N$a2RO;_S$-YxG>9oBzg^JG~D`E=@k;DSGV_p+CD`G3{(3Saq$ z*b>3V`=4k*hEIh2cTX-MnBoF(!C!j*#dmf1m4z(Bw(5WLe$e6cC&n4~(^xYR#yyM! zWdu`P04{j@{F2)7zjq@GS;sCU5c9=CR+uKw9d_V1lZb70O;9ZsE5Nr(rH8+70Oi?VGVfB+Q`Zmf>EbTb z>HnZA|KgCu<#dMiU!xS^ydJ#oe@Oc0{6NrQ^EIR!yzReP+VQ{3NukEMK{_nuM-W%Q zfdl;~>LvUT;V5_DxcFs{QN0!6 zr|kdh%v5)b815fP{6K&2wM^Fcx2Mx>WdB9!ANb&Ta~Em-ukZav;ya^d{>P^O$}C|L z9c}u7KXLrm+WisNsrtvMpBGAh(Em#4|5nN)qNBx^sS{$=E313z^#A5V>W;s|=@0b( z7}-B`&3p$r&JLd={wPPf!AqR~#W$_58x}W^K!3NdSDGccb&l^6h zzb^gXDE*78{x|7|U?bjm{~+O~)PF;k$vdo>!~BD2{nx#B@c!lIXNq~(1?M)M#|5Mt zeB0911-kV2qxfZ@4`CFd`29%V{QhUOC-lS`{3v~E9mHk=& zBmDz^?*)yU>+lz=^jnqn>37LK!|%Vw^_1dJeUxtcpPAF;bRE9GzKbHkx-qH$)bAg> z&WkC!&MRH~(PHHY9sUCK{^3l}*MHdm9p#PJfra&vE`G@p8=C0ws}++y9Cv%3A63-; zqIhf47Xm%Fx$8bCtb2XJ!hf6R1CaEa`t}@%HsPe1Cl$iQuVq zgEIY^_Mhs0^C;?nQj;IRuNd}cA6@^u%!`EGH$%LQ{(mKD2k3W#vs@g||HOAOc{TMv z${qMG#T#Yl((kX|qsL9*^3H}c@8&B^&8pHBUcdN^g#RcGkum57Y_WS4j zmt+iHS!sU~Kj?q$&Y|?v{_gJPnm(P;mCmbW3S(PMpVGzu{@(Yr`x9+f<3IMx;q<5C zJ0I2*Ou+X(uSs=Q%{cg!^$lyb-?mPt|Jm=!D69v<`Jak!j;kq{fNw3YDVX8{>>j+) zYO}A-{+AKHF(gCu8?DAas_Dxg=L-jvzr?tlyqxkM`3}CYV6bK zsk{*Z-#bk9PZSq`3tr=ai?en3Z|;{dctz;nDN#!>0pC4=?13mQ02h4q0}Q?aRIpC z=UlaFnGXLuRsV?Ni@?tyd?Mhx*`$A>xBy)6-6cwF)Zt&O%AZpNzE^|F9})1qx^zwy z7k~@Ce%UPT`^OlCZ=O&@`m0g;iGXjAEKG3$xZw5Xmc3b*{u?r657W6Z&yOnB{!XIu zP6T|>lCYU#0&v0m%zo@g9X|VC@WU7K{XZ7JKH(Dq-=kxuxBy)6(?&Mcjz8b7^zRj+ zf6;)jh=6Z5BzcJ90&v0ay{hCMUHZ!_zd3fraQ>&hf4ED?#|06-f0>V07ff*hxZwAn z(t3an-}g^Jk-+aooc^sYRNje@eus{k;sS8NFMXh!cK=-VU%>%>G2-w|>VGjM@afng ziVMI6KbZ00B3=4@{}vPp{AREpi*Wxp@&5B9`AH#4y#LU#OB5G?3*L3tr`vS+kH~3% zLe!W29`-{K#viEOf6@O&zu((dMKHw$^pk-9`yVeqOZ~6J1DJoq_;zMiVt?eL!8c!~ zkI^v!xZrnp8(cw`{%_xs5jgYo=|}&|*jq&~(d&ml|JR~prnmrH@NQkF9MIu^r}{r) zr_2bM{-FQMPjIx>u&a9WDFcQT(gg%J(g=(}{v<<^;Nb zUGP4ZZu;MDP_RIk{#goN+?wY{70v${$0xt!}mcIu7feZf8Z+Abc!#_g$v_kk+qxA5PcK*i|=PtWcr+@cp zDYLmw*8g#SWb6~jj|@>!eq^8l*gg1!Wmopm;d_q4SAKEg@Y#{=!%hKmLMrgU_$==Neu5uf9>H-?&xcvL79e z6>|4$O!Z^+V7>*9zaPu^-=X!7L{-j|=kB{@ z1XElgf~) zy@UVSchGnpe(TTVqs|k#T6~^=#q;kW!z*-dA4C2BYqR6E>u)MelK5Ubefq1BiG}UG z>5OAbzp?h+*1Ghg{{_ER>}M+6|3UxD%OO1wq5mbCklai$0eT1D^T(V|boj=28G&)T zw7V!i+k5zX(}$`&B0pl_6ZHq|-+SPd9Xk8JW<8}V?EgvmgOIgdu>KqVrC|SC$zPMb z6?dgdfpmkHxnapxUHTg=Q0dQ+^^bQk>pvKO2M*HvU?0MD1A9zGmREoa-v5m)=j!my z`{n&^5`Iws3}6=rC(-!p^h!Q)f0*$NI%kRtzy-he^Raj6@O}SS6bbxpm7``ToPPAT zeLq>`E2}6!S&#>~;LlX6uPuKc{~({RFOvF~_(A&7|Fv$YCYbR4CvL1Jd;(yE!|uQr zP8jrt&i-B^|7PBV3{mbTS^rum>+4^Ziv#Qr`692T{s%7juZMrEr^7Fx{I@1%h$|gc z|Ht58X-f>?J5+C(HMphL2jGIY`}&s}I{b?_Q2HkY_*P4O`lI*{QMqxNr;k5yZ}k&& z_`?X_xH`c1(!^hWl=vV0^2wPx{IwL16~eb#rI-HvI;8*S;?obi2k+9btoHpsJ5T1H z@szaxkNo;4uz#L^$?cDEcQv1o?-rdi#RcGkH#qmz99{YM{j*Ud@cVYOe%jK-fAH0@ z59sjOe;WtvKk&c8KeDh&c^&@k3LpC`{IBqbwCt(<{>J{zI5^5L+tKe-2bBX$0WaHOmPAA6!7oc^|CL*149*L({KetB9^>ZDJ}pP z{E4p9f7Rj7`BBC2X5sh_`<){KzV|Bmr6Y<9zy+VbVVJAK_x;~-B;U&ZcU=0}4;~Zn z*$*C5TmUZk^2_FE=U%OmIao#5ANxsULi*WHB2!!dF8GaoYiq|J-ckCuI~1;e zV-2OB2>31?GsT6d{#Tc~s=rSEK7O?<0Y8Uv<&UwQY03D4&f@~o4SvoG)``0EZ?Bax zxJBrn{YWw){p?4QDJ}pPyw;S{yXx?NS*Y-1>OWfglX&;%cd(_GQ@`sN-oIK_F;?jC zpH}s+-BF+a+|S3mA9K79S)>c5xDd_%;VVjOzd!i+HRAKXFnqI4JU;Xe-l%*1e{|_D zRf7~v!QCX=A3hGZ|5$HtZ=?0zMDRP~eppX1iJ@`(1Ut^e?<5S^p{iUHjz8s1Wimo;?tOUsrr{Z?0rb6_0TFTwYPFCR^=Uu)aR=h1ZI9O(wX;qkszbojXn z-{|(g#qV}nnG9)`v@ZP(o67umo>KJ+Wng%G zk&9)xeQnt*`5gIO6fd_a`#GKe^9c_KVf2w@fa5T`1#*PrWWTo=^oQ{>w0rK}~m<>Hjk`I!lS!_o9d&!_zR z?^s>=J3#hl^+hg|E){!u7@}@EDB!{sgfoi|-S zGmz_{E|qW9+28FnL&zQ!%Kx(qv%et!@!iW?LiTqLeQbyX=pB5?rNi#m>Hql?Y3*dl zzmci@>_8&$X#Rh-iSpmg5KTuB@EfW5550r$+i-t|PXFxR$Nn<2Nd4bl;^_2`bc1_` ztL@XJe?0kDu)1f6?Pm=3HE5ozw}1Bg!NKtV3jx0)@VB8ZCm3+SJ6GPCsl(67r|)b1 zGQ^^W65ox%=XGBk4FA6n`0k(h-mk8M0T+CTdt|Tt-y`;kW#S@COC!Tih6Yp7+YZ@c#?J^FEy3nW7wZbeyV1 z;~!Xhc!LiAX^-+hw7$kXU!VRcKGr>9zO51~!H{n7IqTok`Zv3(8>MMzFu%`@!N>eQ zLm||tPX{jfo#cKP@n`@p%3rHLo|;4HPuc(T{sV;HFH3OzJO+X1P``+8XdZ2YDgyHf zZ92Ca(p=L9gh=JyrE`A}{rB}2%D2R)@Y% z7hV5lmAll?<-c)1rGFgxcTxM7nZ5M+kNG8rN@z*`zDx5@$~KZ_TYK5 zw_g7|zajko1N(4jo`sno|D73f?b$q|zApdARHgRk&H&#%N_>y-y=zkOp?C03zc)Il z(|0ilx@0s7QhAXSZ!-79ez{7cW8dWA2U?` z$Kd}Ve@^6ouWKpaY29T>@{eMF%OxW@02jQ`g2A12_&?o5>AyBZ3|%Av%!~B)&)*$5 z82*3aH3^^I4>8^^#%MRQ;oZU~;lt1wz+K9*B z_(ttGK4k2eTzMg}6OM76$WMD*nIU*f_}uY@3^uDR>*amPTh=!*d_lyxI7HrXXt-wQ z`w(2J3^cm!4{GZWn@PkbV!T$VgGP-VJaYJ$VRB=6ifGu_7Nq3-+!mxmJju3xeH^kq>h$QZ4j2ei{45T8^lmNR0AGGr`i|n^rbblD*7J76` zrf4}u6_87%{h~yGNB4DaP*2?-GmeaQ6a36)PSW}({&u4j-F_y|KVY12JBs&ov4JLJ z6JgxOpuKXKex-h$_eJV_L8Kde`RuZP>(c+_3Mz+}XD0T?5q(sW7X&k_6E ztIG)%{XTU`)3-+xexjkr`%@!&e>P^(_hC=sGEO-Cs2}WAWrcHHSuwac)mOAHk4xt+ zo%f>jJ9}xq$n&I+>q$o{MDh2$-T4(Ae#^y_{xtB7m4tt7fN#;cOXtA%=-eQA5RmWS zgDXvIqZ_~E@iPuyw{ZG{e#)_qqX8FuWaIO-Hdx6$J)Wpx_6W%EKeUQu{DgS}*I|d}@fWY_Ym)@rPKeYzVZokuhf4OAN!Cvf6)FgL>MnKXs;M1|NV{j$*|~{2?0mo z51-#kKR<7ze8T=l;`4iQ*#41zYhyjZg!DUf%!KrNbj*Z+au58kSHFBZm;a?|e=L;0 zAAh6rMEg@!#<4wRyBXs646#^+!t+^GIh|A^D;3MSM)UYELp3FY6Q-J>4(8{NFQ8wSO`B4_wI8?6vLp()dj^jGx^$gg(?!*h2X3fB@f46Mt=UiEn`JX;}b{{`pE z^#4QkpJ@f<&rTD+W4(*A??XAqCiZOEW8 z62qs;yU1Rr(>q^v!>1Lu%ipbPhG0SfE_jp=GD2K}4H z)ZVys?qwT3!Tv=SVKb=!T=3>sm#L&n|H-T51LhC<^dBJ841Yg_e>hwlN8?yHW*&$C zdAnUNll^yq{iFVCa+uowXNv{(-&N_^pQtbM-^rJH11>ny4gSkLy_)LMU-cvTgfk(m z|6rUL<3sKdLoi|7-1vv`p9tgU&fjDoLH7r-`*5DmqxP4;%clC3 z2zVwPGrjY;)W2Q4u3$ny{Rdv|g{wc%)xWFRo;wHiuNWxxpQR!KkJi6v7tkIj>`*<2 zbc6SHdujcn^7jJ{p89SPwSR8^!`}_=A$tp-$9+ctF8JdWrfK~nl-?)t?fS$0gQ)&1 zpPX#pr*&5Pu15MM5>Lo;qXy*<5dv_*d#oOHsxJRusU_=a&v;8*B4(Vh3+Fy4)of9FT-UWV@U*?@h`JeLs!T3hkEa9kpkLo{+Z`2Ojf5sMdg7%-WP5K=H zxZvI9JW)!Qen;(3Vn3JXKN{6P>|d0mxQSr@1|2iO{=HJvA0a}Brr#{dpAuIIVf4rn z*q=cR)#pFU#UV#Bu^0MZDeDb&Il+Jn-uSfv+Wiq2pM#UDPyfsYq?;o_`_J{QN9W$x zlzt+vcljJ`u#7GB{qxm|ZyP%Ox1J`SFn*HwBTvXk(tqOp>kE4SB0_y{(=ijj{{p+P z_PG4Y{VZaA}K1Dk}eCGM`MrV!0 z<^4&*`j75Ug8XnivInBL{Ys+s?~DIlKTcQw)_zwAYZ!e8Xe0G0M(ERDvZ9m|>2IRy z|8(o$%t3#w)Y;#4s{DD=hWP-OQ+W!fKT-enr}~d5QUB4gN0g}l=-4GfXsHe$Z%!$T z{lg~g&r|ki-br=O%;I9r87loF_32-unpVVD1?lgium9RBeDJJQ>v@0V1pcAk(*FA_ zCHxk}A-1s7#J~4UDX&{!>Maq0Iw%?8b!L2^T_3dM4|$_y%XoO6LY4^DhhmwN zE^v9^`XB88@S}X&u)ki@eLq}A4Vy76JK-N#jMnG>+Y$W9?WO)P?}L{PgmFL1T$;So-`2 zKDhnH^y_r>e{aI)UfW0TLzM1GgCrT(8@(ENuIr2knF`+spA-8&($ zKQS)7^uzw0+vWXHM5G(M@jOUBND9S%moWC02g3r4<&(Y=o#uuc< zP>!PczdbA2-qYQ$1pQy+N0)uo&td)NFPHg-`iJ*Nuzw5L|HSn2|L==rJoYL2{twa( zo-_I2zq<7A&X)Q&a`Jppqxx@4_8s021^q#n_G)5^+b;&VNdLTRyKJEJA0MrMyKknp z*C8cum-VRioa87;EKepyg7)~O3zPHXR{DXSQ` z_kZ)xpz^`v?X(vFQ`HmYxwDk^3n0SypZi1!!Gr)@a7UOoaQUyG=BZ))XW<|!|1F9o z=8uZ2_4&_oambNO&|D4w$a$&o@(=v)tw*2L<^Q^eWrSWy8IMeVpzo6ikacUlUqUdQ zqRw49W|~eTI{dr+UJ1d309^177tPkzzh5hS=iV@WQ2w8y%;)cF-nJ4xVIHyfA)OOJ z|Hem@KST(y7w}J(UaQ?7Z9m~#12V)5YCOfhM(Up|(huM-MD&kwNsNbL92EFSH+Yq< zUyj%5f8?9$iQ{DYCofL6Kj1i<>H9Yk@LW1(0=7XV7yPS+$M>i5pYr`>)FY(-(EMRBMQ{I@ zznh}~#x)%*kJS2F;DRIH!RP(`{e@iqqVtdbevkTJi?b5``Rz3E@%`PnNy-acaNvS} zzp$3j;Xg|ALft0W34Ad%z4Vtu|G$#78{mQi7yOSNbsr%7l=r{M^crmC2J^RVg%7(2 zkLv$nsu#oaC;uTJo==EisDrACAGze2UpW2vy}kPW+Itqo^Rp^k{NuFr(r-49`ENDN zLzGDzb_Z?^DF2Mk{vWXAW6oTu$EzA7+y7aS?=ScsXZ=I-sEIn$@4`(T|AgMb*Hqq- z!|Bgc?_X6_`rjmc?};pNWU{j7YxU`8zs($A{}}&wM(4^OBL9(Y@FQP)H|f&P^T#=O zYTkNb^T>HFd3YW<&m~9s=XvBz2*3sZdD2_0b>)9jH?qI?izWQyitF_0$Nc#m1>j=* z=b`laKOeQPlB>fP6Da$-7Ej>YY2v@G>K{kt7t#%mbb}ASsZT{6{xvsH``?EBqjur=cKs^k zpFhACj1|K7=r<+=;DXP%sO@dK{J(_k&zT&`fBS!v|NqRGx{GA)`uB+33KIOl4a(1Hr z5jUon|3_Q@)q42y$vXVnPm{zg1AIG8{Gn&d_R3NDg>-`>-QcAk%GUZP>aEJZ*DB9{ zG^&5}f5n58;Y8^F+7DG0Oz8g_^cxcbaKSIWDO)@L;TM(v&J3w{i66ZGY%QPse)&1o zm;Ani@D;URIA#uf^m~9m+U&yqDH8^Q_dmur24@K?sr@}Rd~-`s|DxQ1-(3EXcKxt* zDV6_F`Lk7j7Ud2+TK-TjP##bYkba~ad`xCV?f2h@-j+|ex8?Z59|E+Z@U4A3z zU$K8&LH$hV9PN*JSslTI09^3mdA~oQEB{Mq{S^oAlrVmvf1ZElZld zyC2~b6?{t1lYZ>}bWVhTbc27n_C8yOe^{m8tSj3;_7AUn|1+1<_dg=!w@t@P$aj~H znGk>rK6Js?+WCi@u|Je2`>}EO?r4gi2>44}nA zqS8aMKC^Gt*S{nHWmegE?PqaT+gdXO1yJ{R)ls5S2Yio_q8g69RC- zkDPVE7+wAI#jElO<4&3GIDBU@#B~6KAG(wzfV^4 z4;bGWktJ44kovck9Izj7mWxAR`^*e9&oImMfzbE$PeTLuXZz7kH&Gu)}F%!m}yj#frh!B7aZk(~Kx6b}nD}1AK z;rQ-#gw3SzJvwFrzH8HOL`&aS&;KS)VjK{2%Uin|qbjC1U`Zq)WPs;MoI9mO8t}09-x?i+*E5FmRxFoew^2 z%Jr`sN&mQ-^xgEdVxri&svW&YpZ;Pe$(;!Avg{JZe>7x`cE+(yUi(!YCwjL=j5 z+2@g3!|8vN-YZQv=x;Wl@ecGonPZ;-^REhm2?0moou7R9H7@_r@#kVcQu)6IwG2Hy zOP~Ii>n5kauloKP=f^J_f+*f?N`)_3|Izg~J-?#zpP!Yu+m69!zv&#H|8c7Qv$E2& zKXFf=?K=H4J_keLGETVvySq947}EdRQpx(ixn1(P9~u3F-f>>MY^Qac{s$xTUj`qf z^p6Xr|6aZRqv@Y=(qKPoOQe_nZKr*Di!S|)&%sc*|E=_+B*Ok1U1=t@KY0J_M8l^> zZgDZGwCexdr%(T+AEcbf|LLt|`kk2h=fDM@*Xzv>b?Lu-p^Vov^ZWzG370>YUTN%5 z{!>+vRQ|AEihb<~f(Zfn55C_x_^Ph_{ak|VdN%cERIu;Yr+?@Sc>~hFLG^#Fruy+` z0}(2I^^nyox&DvVe~+&v^WIiW%x$ddvDte3xhy9I;CEN$&wfE~e=QX**rxK=zsLB! zpOE>6_UC27_dX2p?W4r^V(@zcSn;_heX@%2?WdCQHxs`2IKUTkjxPP?YJK{V@8GR| z`tTxM|7XwxWdE%*M1AFdz*hLEKf&35BnRjf@8wwkd&(lp$JaANyA_fH7rb8GISqCA z?%AaOwi)6`U8xuGfJ{Gd!D)(R68^2l>A4>=#J1B&e&VglN{)3%-G=kA|ILQcrrY}xknb^6~jn)0n{hPb?$%Kr!T`OovRIY9q!P(8?gCtC1z8vp4_ z=iE+iAa2unNxnH08a2D(Oe%lJMd#lX+)4L8O8y^6W!dxxc`?3coKcGQ4=9z`m(-?n zQMFWJ9LDNaiuP?T6^z5sxku-S2fXHQqkqz+fBcg|SXSV_Ow7}#AO6db{#V;jyIna` z@O%*VW5zBZ*&gRpIS?lX^QVD7wbQC?I{elzlOBhJzJJHymr@~eft*aKPxM^bH3jGIm)mZZ4hMbbh%*`9b57 z=o=#*@L^}xoTt11$eMAD4*v)BUI+gd1u^&&W77YXng{Lm%qukgy{Z*x@z>Xh zr2mm)OTX8raD3z5skiCU-??!ze!(%~+v^I)zjOA_hjsXEn| z2!6pa;)@RoPybC-%Fox~uWKRGkMfuA=+hrp{+f-J^>$JA*W=@rwhq6~Gs*Y`M~T1u zdW9dcKh(S6AD{VjjW9my-%rSYE{8<=7aU#sF%J;qFmd@m=#5wZ4dcW9pK6+nUvQN8 zGgZCl+*5e@YhUZO?mGMp(fWU(KK(`2|MvNX+yCO5K7T`ppBJtFjuGFQS~&jHH-9Xx z!=I=2$HDr;{6+fo$JsyL!`;4m{rkp6{|+>G`!vSSkF5V#OZdjxVEsoy4E|pyOFMVe z`Xt2LOy$2&>o8z{CGp~@ZmgNnzC>w$|9(csgZF<+wZCtx^?&(`_30n0#v8GZ74X}r z>u&SH`ycN-yzF9~{;M^U_K)}qV(^Q!zt0QD_sVQruEVd@MB*pXzeJz@xcoO%{bznX z#7_eBkA4^UIbYqPwZF3?_ytFakNUSL{OKKAchaSQhpK3iL*@U{qf37?HEw0Sl$`!3{xfeM znWV#?5y3AwMttYl!tu9!`PE(>{^Jq+{AI_Me&>b4@yGmKVu22SK$T?u7aSwLQH1_) zm~na!9saMX|Cz}DCyy@uEmi(|YTXvHs{O(K;Q3D-UHYTzP=JqqC-}tUzUKYYs^zKqALxJb{z+E7ti=B01u^*N zHc|CV30cpo;w`Wa0Q;LEy<)o74Y2f9d=Ytd9y{9T>w67uPg7||4bL4jF?yBU1Wy<~ zc8tNUgr4_{3a8?&LQ-KQDLu#eAWoF?!$x^89>p?%?sc6A>r51im3dD*^c( z?#>ROJ2m%xL?>KAlb_)s()BPo7Vgo#5P#BI&&7Ht(=+rkv=}&P;@F9!^RH^%(rB7D zabkW8{?}S6huj{MH|yY*Rz`3~kMRRX=Uz6Rl6_I`xJkJaCWdcp9ggc7zN!1bi33R! zH|eE_cLUwGKRZ`GyZ0GGhKx_sA9VPU7{|~s8K1*W!8e!dbXfO&F5`3gn002Jf56{C z*jE$m4BtVFw~rG{_#PtOp@C^4d>6sEAij^7dyf-LaRG9H?;HC5w>tT1yryDsWx0rz z?@f}A2=ZBP9VeLL>rv5^09wtCdlW}G1IZi_d&a- zFW1R;vML|Oh&(@$Qh&jBsvh(^>%o{z@)5PC?{$1`P9S{|byMejjl;z>-+{R?mF_2s z3kkic8{V4SPP;#2nb+kF)<{`CqVl;FC7xrFe{G^+3g0`M^hI<66$2jE7w3^IL?cEd zkMpN1-}Si{TRQ!9SN7+ADcfBsU+^6Y>pGk+Bp(sJH(GSew1nhieR*`ugzuk%j(v&| zFsi>gdB1Mf$+!AS8G-wU?BDTs*lfCl`mZv<@VZBqfy0j-q&)KM-+wnm^7kH!kH1gg z_ZaaK-)|u2(u0Gw`!8PdoQ%ObLE0ayGyEM7^|SL6tsf@hE$y9onZnyw(x=MB=>ggY z&Z2WBo=?HwvE83b`joDG`*QB8P2ZPN*7rU`<<|)LxAvZw`7C?Aa!)wM;P1PMKiM{~9Q!=BzNpR^Z*^%wLHzN4S5{gm5_DX)m|UD2Uq zCVa;iOXznZ_}4V)m?#@AHZ3!9NJ4J8jU8o zf6EZxlm2*pN5OfdS2{12MV!)eatY!aVa4j95QE;pf13ZbcKy*`yW~UOBz^wE|BO|o zu3%bD_80CSJf!46eZpM=95WAzlynHWz{h>{VGUjR-B0;z3<~^%IxnSHenoxxz7qA1 zjPfMjHH1$|QUxcF3w%SzFSPB)rTgSF?%8?%fh-@vcWkT^G&a{0Ojs`n9ie@(Xb(mv zlyCeVNR)g8xxlSYPF}3j-#hP+{e|@By_}x@{!-(r#uPcO19a>gDGVwbOfdm+floQF zPaB|8fa zyp;B1a@E@>>GC(1{S(|*JmFu~TBFzBwR9WTW;qJ6Y>palxHVT@k&Md+w|7OA59kdK z5AU<}X4YT+sWM)Ce_;Qc#@SSUy8gj~&&wFR8>Ajs zj_~{W@`luo{Y2{*zc1qx{6`}Hwy5?(>?K)<&OiOw`u8t&$ZMvPkLQEv_}V1dz!(+x-)lV3Z`g#%>6LkOihn?cIH=~6i*-_u=$C>YR0rsvVqFx!|ML4e=D}BG z8G|)gmJgnX8GgUSJWL~x#-oTZAJd{^CX8=6bj*bL znI0W8#RbR({=%NU+V$HHJSk&vbMyRzSoubgd_<5>j3#U%$mh{9Q$oHmbWRi(kgwn` z{M|&mKkvV1Q2jeNm|yC>sn1``FGc>A?kWnMU)b*{`Fosv&>MKaDR&&vyLJ5&rq zWci5d5A%errL_bT<_n_^!MtIdWB#y5_cFx=$OS%ROx{yE`5JyNW3XrB`3G_Gxfj-= zeQ48{&+19(A&Lu-3w+4u7tGelmredOICu|8{jvY8aQ%|#AMB%f$VA9r>t~vWOoaY` zpkpTFub_K1nfyl#l&zh2^VubI=}e9-hthbg2D^`X}Y_ zXyi5X6v5O5$OWF;XztrO{k>_+2b^iLUP(v3aQg=NyeEqbCYF!q&qGEfP6~ru;M?Y& z)JymN@x~s?+v{k2@k!ZV_cls7GgOS=)*Z?HXRPmc=1aXpfW-LUd9`UgnkXiqUIxG7 zit~Te_3w9(e9rY$pQ&JPN>9F`-Y?AowT06^UOwmz{PEw;KV6rC{uQ(S=Fz;Ee!_pLhpWjWLyOb_(uzN6P4 z%N>3{DoTIOwdxPE^6h$A#^5|6?L3;l-%%6FWzj5lqF@>{A-Vo2N9W=C<}4@q z_jKhO+Ul)NI{A2g2nR#0OOf&g<7==#gV%`=CG3yah43}1&sjcRC&F~O6ZEG!T^zSA zKyToUd;cSJ@@2gupZ0d=`Ug?{K|Y)IxM#xqrANn1kk_SSCdlj1F;iTCT;MIvY@prW zvPX9rgYj56e}nORj5it`37hC)N9LbJ$4uMX%5$$1$xHO3YCp`=sk{@#1(aLx%-8F7 z)0N+IzohbeW2RV-dDL6<<#+vnv9z0{-&}$G?c$bby?h8mde@+O7GPq8&gbx-GO(VUH?U0`FKN>5BrWh zKPHwV{C(?nvQI9D2)w@{zfXFj$ln#w>!fb}%^FsR{QuSwXP!#=LF-M85p{fu5iezY z^3E%FXy+evn4w}&esp^MoZPB4I=sM4~hx*HEHkOHhuYZA5E@bhUCio z?N-VCzb#FZ^$olzhu*-ql+PWd%U|}t!@*I0f7s7XxPOIl7IPo@pCN+(6Pu2i;Qz$< znZ_50@;U#Xqw@O*83t2KfL!4JtUIXnkF-lA-#abOk0~l2#tC49SdZu|qVX0YtVoAQ(S;t;44P`r2Rh4{%bfmcgcKZ|1shDL(rewp{ihl{zONza3bi>qu-de zETHy?zPFmElD`?ExB$BY?>F^Ii|j9DeC;Gsn|F1Fm^VY(ll8Hbld2IvfV1Bh4(%lq ztLWUgC{r}I$$p8C7)S9Ce}c-hyDU>&K<^D+^`Ko+k0luN20pXY!zbzN@170v5&Lx# zlmh$zpeiph|DY3%?;&rQyVRtH&)FXekN3GfEBll~C6Ip?=T;Uzaip36xxhbhH&@Zg zclHPJVY`_$#9Ch_=Px&EVR?ih&)wTe9wIS^^hfQ5bx&oVN~+(jyXc%KE74FZW26FY3>8FuM#1y|2%Wv@hw(xAp$DJLYbv|< z2X<`l(AUpHXC&9pPu5ojCgT4O{VQu_Md4Mc7$aR^-;nQ-@;li-Mv8o+*HU{K^3P&? z`rnbyBl*m#@$x|~@VVd4)%p*{fyw6_pDv(h1K#5L;=X^% z-fd*PiuED=seTskWr~){Kauf;loKTeyyX=V#Z+Lk)cd(xOzK@-7FaKAb(itL{_#6F z$}RYJ^-lSl#&;9`)3APd63J(WIB;~SCvl~M25n}oqA`umFHb4Y(3 zl>W>;dj0Xdat@~dUx+)qN;#tX>)%NAYt(w`Xg;dP{W=22%FMu!H9t|P zaR=zaL%Upr{z?|37byydvL$bN-{fUvf2tM};-yRIg^L2O4{+|wO2}t?m7aWURr$3Z zk^OEzGWvI+(ku3lFHrdS9o$d{;8RXN<0&p5El-j50sq0`HoEcs%!L0oH%31AZ!=ZA z_d$P={&Uoy1nOV)Sc2uKBb1*`AN}4cTz+p;<1aJjQvDo~&-z-gzjWn$4*FB;P2=Q) zT=;!~^{&7Fm8tZH_Tvn)Kby)&BJ9=6M`qv$Q*rn`iuV87t9&<={Q+M+7RxsN(C;6e zf38t|$^P1BC7yGXe2EL{faMGOt*q6IF7%{1V}H=Pi(g76=HnRqY25{_t-w4_i_Qi8 z9u3G}L;Y~kyr0hv=P&GU)@^hHeWZf_67w6q{xHAYRPjBm><{HYT^4Vl-BWgne8lf@ zeC~mhx9jwmJ(B9b4uSqWC0{fimM^To#Juc{G*7p8U4ick4xI}+zo#zMTclr)&P_Ux z2Ivp+Z@lH@tzrG4e3W^R;yEoNp+EcE^z;Y+!_ocMEoI-9T8|uOe})nm^7Z@f-R&&j zmQuFit_jLKz~k}@@;Fb>`c|ez&)hO2mIB<^{=Ax-P?W9k2?7penaiY zuE74xAJfxc1@*l%+JAxlncHRl#>r=>1c5Kesx_DGueX}tj{5n^Cn$f<%tG>o7bD-b z>JC%!8Qqi1DI$n|*Myznckt--{Jldj2*1DK{iF3X%HJM=eD+Uz{f#_9z9*Xspv814 zAKF>qj#BgTaXp%kxGyT-q-EbO)5%w5GU@NEKt5xiUcQ(ui|GR%_abIVOIW*4Ejxx>;onu_uru&V)r4xQ;JwB)B zqXBY*cX(#k0McK|_ZgSu^GJUQ|F^%${4K5`1c(1yQ(cGrgQ)2@NzP%#q`dHhi*>9` zsB7uc@6mvKg?$bfKe09EuhCBCBkJci?^5{~9`sKgB_FPUuTfnP$Y-j2L^})oOVzp> zx1X$Epdb7WZm0wNUjEBoZCO72j`rt~(vGbL$?|m_psuU_X~I!05}-KrhRb)|^!>hY{-XV8 zMGcqJJtMI`%1u+gRcd?){S@HzQT;+(kJDdo^+0>YU#;=UU*Ym$TqyNd#-ba(%M`CR zRO$X*ufJER{@`Hx|Ajb9^{?#jlgFHzY$Fn0Lw=SF)eAL_qDUr_xy zn%=X{kk_3wksYQZGTev2+3z0Oi#YbDt`@?9-z-x?VJ$JrnB2Klaer(rvtdiRuaIh|2x>hFe$a-Y-`y zrSjV=L%=_%6C)q5E97AM|ApAzTjg(Le0*Au;3s~1eWP&wg8uU_ zY=0L9`Rk@B-yzk%g5PA|maHq~!}U1*W#9qDbLO2qgZI}oBmR}&Wc~dV=+F8)J^f*S zP3LxbKj7f+8Q)iNJ<6kUU$}JbLDpaN`CQZ@FcjmWL|6Ll$=cOs%@9I07IUqTIr=Z?edM!#m z=y7q)=aR<%P=0$;{u;dl|KqlhbHvDe7g5MXKI6itF=tQ86ijsRT*%pCjet3?(=0FIoyHBf|Q__)CR*sQvAqk&w?#Q@-QT|9dgHd@NA;i+Tt6kPG}c94J2j$FDlG z{#HclXN&x+*!wdR@>$A%Hu4obs=qyGKO*lR3AvS>6s14t@uSaIToW$8Xn!|R{yHK3 ziIVB%FW%GKhv`eZnNQ9ioANd3Q%{W)pMce|=bqT?H9Df{yx z{^}#ynfOix`3`)N>*@5j?qMpweX5s7f zs&y>ix!3`2hVuesEhI7>e)gvc{iZY((Vy zko7kpD8F{;^z?Vxb}65&(xYHRW!1m(PLXm0AHRb`Zt!g-CUzwKrF@=1RrAN(U3 zWu$z?RYc(Mk7TOrSa%lZAL%&;rgdg9T!`v%i+=0YmYfyDz*cTz)bCVC0)rzg(7u z=!JEhK7S`KmbaMd&T}Ehaw!KQ!1$@5uE({%xF3A_3$se;=7;@QA%ps-fqbHDa(Tq_ z?AIwgKP<7%Xc(`H!|)c0$L&Mi8}I)0DNO*)STLtOxWEr0e|I{j7oh1!p)nF9O6 zI7&X`D>(br;b8jzY3iTqzhInMT^4t%a&63)PB{hj|3-FPUF z&n&0U->7_v?=a6K=kJQOgMDPQzeUN1@^N5R-lbvrP(B`?PWCrA+m2mJj8( z!g9)vzk>WVDx@c0T>j3SAmxMH>B@KCHH&}H$#;<6&&A(?eC~fJU$oq$E8hpx9~+~S z@4NS?{D$PSj{nc}cfq|%e`;Mry7JY$@Vw*whFzc~BDb=1$jKYn#L%U2NTzsz`x+N^14#VD^U zrKi9DbpAc$0`IeW@^d6#O8>9j9%?^^1nq}WS;~igA9%EVL;vrtM@jRvK0dA=7}x(Z zREB{!o4Khm>+g`#pP|M#>bxw3)igU{f3A`b8U>Ha_sSqyPDO|0_U#_^eq=l})RzGI zQQ{;R_H_T#!uP*pZP?V zI5Jt)t1iqIeI4!roj_WS(up%Q@c zmq*C{?CW4>>J5!$((@2>of_1Ckrl;bv~zkhA2U%n2k z)vBS_U+pXzp{e4H&LdHmMK8R!tM4Mv6MhHBb?_U8J#jC|m(sqKyMgpKG(*&`FXa|B zrF>}Dz@zfjs82{P`F&ykCB!|N8Eg~JxrEMXzVoFm$yP7U6kVH8`7;9hhJ5I^80y0K z*%?=c%Lm>+4h^B_L;7=+e25V|D&Iy`|B2ek`MX=q-^IK@qzOJK!b zjC{9zBx5!eKvC;wM6Q%CT23J!c_X#M4{0&R_8HGiHv)@q;rvG1vqULXyMZA9mJx&?n zsZC}+t(#xM???76#YC@is{U)F&)=h!597}&IVlYJiXXZ(dao7dZ*+d*OnN`EzRym` z=lqxC!~84YM|o7fon>~FCizN4odpCTsH_aZt+zuKX5Yhvp6Bh)+Kf9`3xfXZ)5|Gwe^vcGZEPk&9?wbxkY zFG@5x`#@{97(faDWpSs60eIePo^2#15|{}*EB)iOOOr|Pn(c#=w|vXf{&;y%cS z->3glrCwM*)Gy}!ly4#Vj3(*H2R|V0f#mvckm?sgZs0>Ma6=t{pK<8%_Tl;&??(>F z=Z()u?BDLj$cN%>s(61=`olQ5x-7hNlwR8v-u^-^w8Q4+oHJQItBZUd?;m$i{cKDO z-6W5{)`b>Vuc!a7bofEW52f? zO#i;=}}cS`@TzjnV-J#crX=-XYkAExrtiW&i&{mODM{r^HV z!TV7pe~)&22zq?=&Yel~4=}#V{$tJ6S)x{^l+TNikNwJWF#Z2R#QEPy%)i(9Pe_MdD2L+xfrKI>$?{suiGBQjNd8*-IBbd=*j>asYq zp0eXPlra?Iw$AKY4k=I@5&6D`w}PmMF%5&1AKjd^2n@*&^BC(J7D z@6U;JV*KUu`5D4mANX%~V&seVU)ree&|;s|7vgo*_cME`)L%*b5aEyu-2VIecf$D# z`DT%P_J%+{Q~8U}RPlkw$!GtUOIYUEjfRq?MIybK`!tc%)yuGKY ziz~nGugUt0tzYiWXgXoy_(_8&8qs&s6hh|)f=)l3b#<*YuP7ZVwY@guxP<2^jO-|H`BlKmwgZl8Rf zP4Dq|mO12uU4j3*95va`GC76 z&p%*4lEp|8q$|IY5axPngJ;+C3HE5rsVA7;I+yfG`yIi?K2YbzT-x7==yN*9Z@wO5 z-2-OzFzE`O5ph(8<@Xlq>;8wZi2y zo+EjPAfLIC{B9D($>-8;@&$g(8jYqh{ac1G+SK*w`~H;Q z>u7weRb8J7&ZF`{zk4m}`c#biG46h9b55=6)5#_1d?VdY&od#w?!afS&8VT%-wA45 zTZ|9uFW4XNJSsZ;UEaH$_R}Ild3J88BbXBN&+e!r1knrcko|7r2ScU))7ny z**H)<=g8GPb>qvEXnz2EXW$>v>ZC8fTyD6O=cxETy+FSIM8}a2tfcX-A1F`WBKte8 zuBb}-^?oP)(YaM7&|g%(Cr51GsgrLs*XW-I^^547o_zNgA)osO$@hP}9o%YcaA^(z2n(`e{@3F>snV$d0+?T*tQEUIF8x#?&$i5DX zdXcSwOBIx1(+YxhK@k)#OQo__0R=@J1hlSH+<1z56%bTZ6cG@SQAAN(>Vo3RMd67% zE>BQV{^v~2_uiQ>7uxE3|6lq!JvW&o^F1dgnIw~BaNmUf6zeLfKWDE+&kqaH66b#a z-wka_YlPX~1Iu)h*a$sN)$L!he!N{(+mDrPDJIyXQ-$tFG=iQd&Z+b~sY-sLCPRYl z9eBfipvBCT;MA*XM}!#*p+otR^uWs=`{N9KZo!I%0K>D(%x~dU-WZ&Z%Tyo z{A~Kog!U&!znN(0=bcmN&~GL<-~!*Z{h-Uj^mqGcox&>8`n#9b>-zEGd1Y;(_K#@t zprC$GpKZFv#Oq8^cbU(oV&-#-qjZf44!FSUO*y807`~zM-Zm!qj{hsDKj5?Dbbq2$ z_@Z=;DHT44t}(#@7xc0NKJfgSeM9>%&doZ7b@M3ihl#KIk;(koo|ce(`QK}8t(L^Y*S|FU zwJ5&#J;z!ZDoz9kT;QK~-~DY^`Q9;Hr@(hac%N*RN%8L*8 z13vhH5B~DvyY8S%cZcB{OZsQ$tSIuh#+U3rFQ-Q{pP%Z!Sk_$_U=hdw_>OZi57YyB@WFz!}ClvqP&UlJhSOH zQy#r9g|3+Qqb3CPmHl|WS&gZ@iQwwX58$h_wb2nYzO0Aq=pQgXw-pI3?*aCQFZNxP z06v%e6~X6xPnFHU1$_5A7i5qvi38xDE{ADlZh^!v0|iv79Mi@c<~ z57pm4!1u%5i)qaOQR4gIm(-;9!n7}y>kswk6|W&6LjT2$(r+SsPuv|&ej+&F0*@Yh zO!u(zef6dndn~~)I;AN^5gro@!JV65x!3w zpF@5ke4p07t)XH%|52UZqTft#zy*HTrX_EM;q&%CaU$9GR9<|}tqm0u@VT=|UqrxX zl@cBz;8XP5BLN6p;N9SFqKF|1j*zUUI z_^G_#lLRhst7K5<_mQ6#eAs6dhEL@rzh@naZ|(l^`O}N~_8I@S>eDYfOne<1B|GPBR zZm#Cr7HH1nbeFEfp631jc)*@b!LVKv@{RrjO|q)-@HwXYHt`n1IhEyiAqF zH}u}+Sz-7_U8C{EAJpZ_>(ogliRVZCrsSdV2lQbXerJxpZjGlk^+XZ6&T;JtG+#t? zI<4Dbzf(-}Lqu>WSMa`PEw3Mj5A9!kvBt;iaLxMRZ@{j1ol28sy|xWJD)>V`UD z_?~-Qr?5t8z41Ce|NE^i?dUr7@3`#Pp}e$j?_SJ*#4f9&n9TWtHz|LP8=qE3F~MQ{ z27cqjDIL@4{VJ~K$@+(avvr$^@6RngTjNBDgHOV`E@NNuw-WArrRV3M4}2dndI1>* zIoKKQpDRDWm$rE0Pd~oRg3sC*#8)t&V)%MrK?Xt2#CImb*K4~m@mXFfrNB=ZIpG;U zzGA`G@wgzqofX74RB*(`X&lhsn5#7I*j!zIOnfL;@J??&Io*#B<(u}duAwO3(sL@N zzf|S>70y}P5njF#(I5Du&unx2_-t8!=)M!gmwRr-@R{FHgZ?_7F8X^%+oh>Llq>k0 zKIiZB<3ssA@|ecArl-!Ytb+JDNd1VaB2Od0w-W2KrF}H41xR_yQb@cIE<;CDRGsW=SZRZnRB z0bjwOis|nNyvLlSaX^2+pxv$+UO#{fcKJ-l`7uAf`qKXWBF_)(f8SX_d~L^RJvlpr z_~wq*;n8h{o?d|i_Gift@KtTUYwyR0`upwEx_p7Jba2J=ca*fl(cT&d^mp6=+GpSb zkGwne`Y?Q_@&Jq+@a3LgF?_vJ;Hx`T?C${259sx^I@SC8@u7ULllBGp$|{KO48iA| z5Y*oggv-1!aCpj~e-Zg%36Bhz^qwCd%6Co&T|a=Y_=1Y*?;Y&dmid2_uem=N^+Dhy z){P_l`?0xq`0?$O`mynGjqhcVH)lx2@MU8^k?0Bd@O^uyYIywsF7US2^OyVaq5X4T z)Am<$rnZ-*6~x#4T&br$g3ph4Wc_{g!SMDE0 z8dv1MLBGOD!}1GlWEzgUOQ?;X)CKt!D(sf;0t((?5PFaX*n&HmUiK#v6oG_WK3dFYSDy=lf;u; zcZ&Lv(5D2ftI@rIe}5p}@1H!M=5+>W8|0|=FkQX~0q1q8Yza0;BDYk&Q*RsNk(EX` z>dW_eG|cji<6(Ee*{!h9`~L7;>Gz=h>-!Yp8OyY}<)cP~i^Lvp@3Ix6d zbgp8wNrs9pZlYYfiCRnkIQcQJaOkgeohCcsZ$th#`QsEnO7W2o_%HXJWQEP|-q};B zm~Vbp6>5Aa7jVq)76@>2ei!So-s?l<`>JK!>|-@VRy&&(r$mIf2j8xv0-4UA)Juzv9RK z&kxp9Im}8|je6?*>CJlf;%!9OXw41cvue`Kca9fKcQRu_Il*yTB#HJ z<8=(lh@Qv?LYUX-ZzJqnPJ~B?BZSgJIO-4VN%TCjF=a%VuY9T=iZsPx9;=MD%@PAGC zod>cK`0df(MU){xyOhavcai^bYX`&mHwPpAT8uIavR0d!E|=&UF6M zLLIKggyZLZG3*lhPw{<@Q9X1%IG+VI8|OmdyQEcgb}9c`O4s~s;j>TsJ>oynnp@T(VI z84Y{Cfc4Mzt|BjsW67SX`1&b$&e|Pmy$w;S^~LeF)Gr~z`eMhTehtxcr|5oF^oW{@ zY4NGzZ$*BhR1W@{=uhE4E}yVL}DIjf0Ejj ztz6&!q&WF)qQrXc-LzkcuBURSH{g*T^M?5AFUHS5?IK7X#cuL{q35T!0(n5Kjt6e zr|5A%0GRtrfpfj=_lVtJzVB9gAj*%{_e8(2JSs2#D?eCwdl>#Zw(A_6rMg~e{K@t4uXm;XubX^7 zi~Wf4J6k9w^b6g)=r>WS{dD$R8aETA+D~W7ku3q>lQV`~9ELxg$N%Kwb;I!kud{^a z6^Op1ae!anz#n~#_LmT)!XKw=OqIp|@1n-F!th`Bvj?B%Fb;r!8Q~||OzQ>0@W-Df zd_<}6N0*a)MCHXF5m>O}nggn@2&=#KN&m5K$@;4%m9PG$+Mm}&+8^{EQ2w8vFa07J zk6MB+6+=4k-XG12hw1;8WjcrWt>N`|0PQdJuebl4>I3`To2fn$rFEe6zWV$utv~aw z&!+1{1vh9v<{7qqs{0T2J(glh<$xP}WZtMLVfZJ?{#QrZYh8bn^E6+#49*KxC%n9# z7I}iaOfR;X7{cA!}LG?JDowSVUhR4 zY(LTd#2%;poJ2KS1=~~TTP=_@NQbQJ!|-ojq;s&Y&~`IzKI=cZKWjY6$M~%` zs(S?c1|HO3_!n?}BKwBloA;*nHvVRHk7iK$aDFk$k13Ul$OZ6M+t2mBe^?^#7jXU& zZ?k9jCqNwS|70UrSd)^Hmq{vmxbrP^e4Cf zrFcIg>z}S9{aSs1lG>JO`o0JO=Y6^CfWJ28e~tO+ddB=J@SE!~Eibp!|2D`aSNM#Y zGbi|;UvW9#IDaGQzh|0yuKNfb^U84i&&i__`0Gh~g>#JMHmdFrosZQ^=L7p)j&qOs zKs|Dh3+YU5OF*9R5%Mm(<`Ze=c@AQzm?dJYn+1|F~XsL ze6Kcol`>|ja8}g*BO-Wx;bRtU3)p}00KNY1wa-ZZW75?Juzx2U{|5&CK|O;wf&YW6CA^h> zo&bOBQL(pYbo-Nof#_-`V0Hdm+|9i=zlKRfBfF0{_ShZhu?fo;pX@*PrQ%r z{{w$i^oH+2SV)k9<2v;J=5=el^Zhm$`d`wY@KgJ<`fw@V8R7U>Q$LK|K+RHq{~<2x zH()=&|4DnDKi>NvNdLeMUVQzV!@~MMF14TRtapk$&N!>6ea}Br-&Ui2m(}R`OwoM( zo3+$*abL&zrkY|JSWo+7-&a#iyVyQm>OcKh&7+m1FE4%#8cz_Va+YzS_qy>Xv;9Q! zv>x#ObNRms`}lMfm-fe*8Lt1h(f(AI`U^edcKAL`RO%`8hwqVEEwrAbJA!2UaI<{= z*m3P%|M&&?doHK`!|7>iz2LWJh2vju;2+jO>%lyS{v3JFf^gv9S`ds6yV?i11Vjve z_u6^qd-eAOozG&Ke}0nsKXD&^b#3|ZMc5-MeYX zKi~#$FtN?Xu=@M33~Xa#b$h4rC+Bb15q`#Ncg^zX$c{lg7|%qzWGN<7o;<1FkoRqp z&%a+c1iBX#mkUdUzxMw8!24_a4BdaY`W~vk7pEufzodNj^W@3e9-^|oTyCQ_Nc&(t zsqF;yuvF|VdX#?tQnBsV!R`?0#I0khv;F6Z{iFV7yh!!;qRa$-b$$8pf$JtWukU(u$r)rn`VtRlkbl4r{^`OWL+!tt;E&7vxrzUkwq#$v z{itVAeBfa|m7mML`aHs@A5A9&<^I4mWyodLPoz(9C|&~YsQWRme`pXh>hH*hDZ-^FF@cCP@=E?TQxw(A$$9%Y{|5W`4 z%$GWX-+%|$32vxg&FQq_0q^^&hW;O+`V}AOv;SMlhkqsd3C8;8==)kfmb9yxg6O1Q zrCuDa^XF>6KW7;iGkV;23hN)=4}kvnWK!RDP!hkIT|WGq#Gd1S1>653nSZdN+D@Qn zd^aLCqnhoIgK*fvUs7JN z@mgNUg>)tdZt!h$9{kOZf2Z_6o%bo_rOEp1$T?*hk|8)h7uXHdOr41Nw9P^M?(t$L z(tZMedl|oDzUV;sbLBqZ+jDQZ%j-W&_zszWD-xk_&h*hVTdyq~NA}<9c^Llkw+v(f5V@Z<|N$&p8Kw?;V}uX zFZbUm^#$X7)JwU%4=a`s@I4#*ALPfc&eY?V`75aXjAyDfJvAP6M>u}oKfw<6vuK!( z?`$m67v%pDGS8#3bvs!g;pTpB-L5 z;OG4n>~LR4>^Z7}_4lrPDHjRP(aBUy!eg=@-IDNB4E6Hq1- z_OlrJm-7#vcF4ZlW~x2%Jt{}e>4HUp^SNT|U_ThYSX+Yi7vYW(o+a-qZKJ=fbKUnp z^o}cC54*{m|5<6^=kvv!c1is9-Qo80PvOV761Y-v;0LeP>yhDM?a$i#bq;nd-Tp*x zVEaj~zry-+byicw^ySeMpX?>ty{Sh(iXU?dSpN{~+mzl*HC2;$>h>s3@tMl#ejGR2 zhtdKx2|9AJ>mN2bJf_vek`oFIXO5_)d$bz z`?Xy`e;7YvT_5VT&UN4axe^393dYv)-hUw`)<2Y9Lha8nSqN6nym0(Yr6K_T2ElLc zA2Z(zK!00gynuGqO58F0hl&4l+mJ@$#nWwS^4{r3*B#qOSaSC!C)iD@OkA?j@*gfQ2TxFW~ zeR3qi{=}1eQTzE=Qvc5V<kmg7tTdyca_~h5ozAexLF_e_{XN=Py1c;nUSt=zJ+=q9RJHhbcSeuuz$q-zL5FdP~86m8UNy(P{?KCh9Bhy{$2hL zq5G#k+^JJoM;CcNS~unOd&%`hM;=R$t5=i#mvd=Y!ut=bf@U7wNA}0hBQ>CzVlv+s zOyK^HuYaVP==kng%@k8A2i)Kru_Vb9-!IXVaDIY0j7^Y_^|>AG)ybGxspzeN7n z;j|B!=!q)yZp?SRG4;n;o>*hLPQ=H@u-|FbOffAKKZmhPg&*aH>tp)8@&k{*<{IC3 z=kp_DxtXf=J<>kR54RsaSCSp<2lFImf94^n7v?zqF(cfZU(mTH|C{#Jv}oZ^{`oh| z|6D-&jE_l6;8zREhyN1kCty5|J6~pmqx{h>A-<_!qz5loNU|G&xm3se8ijd0-KEbRu`&jaDd{6F}to2NGNx1ZKIdj8>i zvL7cqBZ1#p7_NU4zax5Z^MlV{v;DzBL(D%rWjcQL0R+g?>PqZad}8^GmVW$L|8wvR z!at5%9PR9f!tu`>udhS@^U)vc7JPoq?j!X`=5KQ)--pi$hIf+iRIETQ*uuNLTD!oH zf3wWrc6pg1oRGw?7X3Z^tE68P+oIbu;D12ma@Onq5A-YW_F?rU1orpXC7lQP>o59m zE#IQ&*97!ZsI5iSypj>gH_5pYybC2hje%{t?;#_zd;jL>=y? z!2g_qKhjsnkKIfi0-x(>ggbKW1S4D-_&n>`9m|* zdxGD2G+h7h8ThgO)5;9me`5V7>b2k)gZUqfYYcorv`Xbl0Qftl^T+tx&zQ_#ZFzv( zpA7Y{8CswAl5qV0(w7s@-!!okwJE6ozY3*XWL*&KWUlDVS)%2Qn1BsG><;|&tQ%ho z>wivqTqksHrGg;GIQ{d7_fbd7KmXjSmhMmL-s9fA9jj}QC}BrEtIv{?btkZVJO+@SJ2I=S*t+$^P>)lE*qTU0Lc-kJ>q8Z{!F5 z(bNrzli$fW)FbSNQ52tP(LwY~d6)(PS>z|`zm?)QB!4>jnNql13Aco=dF31a{!Rl# z-z@L12cApwt(TF0#5s?L+fOFXvyemk^9shl#{BaDsi$g%wi9UhzP3TTLc6GQ-S@wV z|IQ`_mxbYP`V*zSC0*^9^j;(PP%lv=MkLme4C8>Y4G#r1E&x81Xl>R_$T(JEy-%~*UyQTi3{|sCL zZyyHykpF`oy}bPwh=~5rIhT_COifeOq<`q9z+a8V!R(;_HS+w5e;Dk4R+V`Y^nak| z+r_RBZh5(-{)cqnPu|=kH|+VliR!QWOP0F%AnE@+8Lt1EX`IFm_)1pcOzx`Cj@W+-0?FaY~Zt=~@ z0YAcRFEsT(=pB6B?w3c0>A&V0%H!9h{?)RI;gA0uu78A^`bYSI^bg$NJ>PlziZJ{~ z6MlPF62DtP{OUj9_z`a6M|ef?*IV(|XJPo?c#xhamnYjF=jm|$=g@P4-9XLMIk4wn zgY~!22nYTmBm6-4^W;7e;ag^=W&7KI%>REz_^oM4{Pyy2{KKW60sODaIuoZ$u>Z5M zo^A)wPNMwpmUap4za_X*G2jM&qVMr1F#a93uD^?=|2F7t%Arn%x^TV@SI>mwzi@`W z6YxLOL&vv&(|CbnZ%Z8>KSRp}{qL3M8p0tL(wQ9BQBJ44eVTW^DdJ)N_K%s=e%_w0 z(q7c}byMI^qjF*g{1_)X1A^^OUU!|3`CJ=uy~u0q%hS2;`yXq)wpSrt(`iETRdtto)bulj37jhs3xWO-3(Aj4EF$4elZz$Qb zN&NQ8is83*|8MZWI-yku#&5~_Z_t0QgK7SFbrQc?RWba|AO9QtqgM=_&iEq+{+9H8 z^|%keTS5Hs{}KKdYNZ{{_;U^XeGf@f&T~oqJI_{3|Ms5$j{b9{Hdw;1ojv_uj9-SGo)RTaWUFQ;4wMsEqKw|-7klY z9~nQpxad9A_|a{6sA5VrevCIbR54-vXg4~PzJHq>KSt>q6UL8G%8MzLGxZ<;^!kUx z^nX+bdY5%?QvdFA|BU|CKdk?@6K32UrhmrIE-JWF=|5KgP{ou=|870fJrm7O@cI;s zbj^hEyG_@apnse4VoK#q{r~>R`4hwRKZNkd?n~<5e*T})zw;04|E(Y6kA>-<@w1Ds z(YRCT->FOUBSfk6AFD&m>*C;6_(LBHPD0qA63U-GuW zG_8Hdm|~U$2>UhfAoAZ`?bmU+{Z1|ezlz@@Ye79wiNB6+)kbJ!&@iv{On3O{{rLNyVlZt z*@r+$ef<~0@$jLdD5%I!gjzM{~|U<}kLO9rB(P=byWek^ZY>sA@;)=V9!{aQ#<1D2=pF zeL2bZD}0~Im>;|!@6nBZeB%7>TFq4a!=|cp70PHo`nTjhD2KF2tI+jTcToS>q45=5 zbX_=p9$)$G$DFT3`utJ49$_8|`r~!1F0YGt_AnKndYC$mOx7X%@zsYZm;9!)Bmnr= z_KENHx9{j5|L`E?(=dtOdg;G|pO$bZY@Ka>@j$Xg(ZAJnU;Jf)AAI!dn?Lq{ecA0%5zd5%LG5{7W_OJ_nG6_0W!}VlW{Ke^-&vL4(fMpmnDJ+`>HU`+92U3lVe8} zct3YUKRQQ-sO|;PWR(46Z|>fN<`RyCGi8NiQf^qN>bo2m2i_qB>?=7n&+(Y<5#l3C9O$N z|D_u$r+<5I3jIqs+EG*g)C`3>*bVr=m2U^W-?5A2I(tl%L`~RB8PmdSRfwRZ|{7QAc`B(kq`Sl-- zJ4a{Zedn3aNp{|${=?fX66c(|@3v5i$#6Iy3OsUMH1Pe)m7@Q9(u4L>Ciu~Af>*Zv zv}){M|M_xz1HLMiaPVrMY<L3M-pOE><*_EU5J_)AjYhuwo8-DT~qe*Ad; zx-SLs7rg$@;*T8we=7SgkOBc8_u;mMe*8N`|9y@2C+CgI;dc+wdd`;nqW@s!=tzkc9mBjA|&i@wv8?OAWZy5eFjtbgO>6?|)zg_#E)qk-R z2>5Yl=EnW_b7g(Q*=GOet;*q#rNFQ1Xt^RO?5D^y90ND-zkmCm+rseQF5fStO{QMT zoU(rwzg732!GGU}OLvFiuM-K{PuV|=->D@2GARe}SMHztq#r-}pC>j5;xB!>a{7@a0RB|=zc>Yc^qax^z1pOk zAAfzpe+Kt|*unnatsH)K5+SYN^u_AmRC zEdVrlO#I;E8(;O1AAdyb|7S!0W&bdK=zkylGCvCYFyJeUTfiqa`fj-&KgKWJjptYC z2bI)+s`;x%+Wt!fU_$?bKh^jpPvV2W`$UzW{rC$+|A*hK$By{ERKezO{F9`8HP5qZ zdWDP^ztZb`U_WgTF5k_7{pU$|Y^Yv;l4~kn{Pm?;fQNolK}9I_4cmy>mTzE$Ner5MZaa0#1A`%{!xF`k^8rw z4JL5$7aM%@hE`Mk_|boU)$IR#R5|^}T8Haj$$63y!DH&bsGRuUf1y_0F#Jxvp#2nl zTsi!zb2$FE*i}XGmx^5AOB#JT$&Y`fj9+%r`V!Bf|MN-Z@JCbN$N0BI@R<5XxLi&! z)C=&JHqBn*$Db?h&z$B#{AHEIpUVDSkqbCY{HWIn;PPXq!O!^VtHAhorL;dAA)x5L z^wY}eKh^lrI$GORD*M@C0vEqoe@`9wMqvKI75p!m_WxPs@Walt<^GBGNA#aB;imqJ zQs6I>aPU!W9{eF-KQjM0re)B6a<)_se=7U2kEvYySt|I!e;fSc1AhEFMgO-M_{%DZ zKYDC<`%~Ha3%!HKroQ{VA3x>~`_q1Q&%yrV|E&Jw$5l@M=+}Yg&Hd(LKYsN8*U)=u zKmLNPmBa6L3)esFDo5X?+~ddH5+7`Kw*_DL@uUC$v4KD5^UC43>~Q?(|Dc^o)L-fU z?*u@D7l>NHt4$s>#E&2S=b^t!LiB$si6444+aE{dDv{eH@E@T695LisoALfoKYr-H zClmnt|DtmGPxbx_`mb-|Kfw44^%new+T$1b@nimK`By>x7i_B}etFMj>L2BjZ{ipI zZ!q)>FYE?<^__ z%^?1=e;B`e0Q?)|_Ru>x><0XvnRWi~>mT;hxm6H<>Ax$df46sd`-5_+sQmyp__oj9 z3SEEF$yk3<@MY!j1E*;}*2(*~pH%j5NkM?mpVg$kU;jnY|94N(Z%CWUzK)z7;rLUH z->Y4#$M4F}e_aW;e;DZ@$q_s)B|P@44oABrmlMpAU*NBtb>7l2{KNBu_{%DYKQ{&b z6I0+{b(NO4qWH%?aq=}`_#c(|6X?J6tBUD=?*NU*?iIBEFJ=FxYv}(5Ssxc)UNQY& zyydFz!tgKboZ*!e@E3etIsCB{_|?v!{gfAfuGmjRc)y?4o#@B!iv7=dTCZ>b{+w?r zhW}R4XY_iF6ZQ8UInPQN>kxl6!eQS6Gr@oxysXM)2Z!OGu`!6htb+Kj9I5Tc*&f7S zAnQb6=cvE7tly0B!As;))nBxm;7{Lh*D^nT^#5mCM*IJ5xc(0`|CXx#bSl|?qTc}C z^}8L{1@O!BcZTu&D)_E)_~U{T_LCU@%KRJV8Oq!L9GI{q{iEuZJ6`nTNB{H0A0?vn zKXbmX9Dd9bn)uQG%$M6F@Js)*z`zM_j+h1bN1v25^W!fT{dcbuw4bs{;yl6MU zyVYG2nEyxnInBUdR!RJ@6SMx>1=_Ak1el3`0{|Pm!04V@U;bJAvGU?ydVqaW9kIcQ_c3(}-6+-Z_;T%( z>XaMY_T<|t)v2R(;pFinBIVmFbs)$`2X=0SLOwbmRm#m>M?|J)sS>Lk{c`u%J!?c=JdlHcDxlJ-Sm4-@m@&1ql93$#yYcMXq5Wzqf; z@~huy!xPcBrv&5wLGk_RA6`oLqxcBR80kZwLLKk=Ps_f4+ud;`3A4A6r>NF?~zd{oh|}oF7a-m+sH;;XDxZ54gcw zobk&yVfbSuI)!tA)<5qU1JL4ThyB>Sn!^Pu?q3c$jADd+Fg@31aG zd463GysptC@xy<1t;r*Jf8AnZe_gYmX=&9^Jx1ZU&Tiel=ux9m;4D`f{SA~1tDLXL zCD=!Y`y49aI6os(F2s-4@onkXP%(LKb8TWi`6PHB{W~oOH3`%IneXZpR^1}+hpGR< zs>yv!tj}V)pZzk~`@hI=iHgq;-XHq_qj$GZOfU5f>bp$*ak|Fz3Hdo+xK#MJzu3N0 z82*NMzn<&2pJe?#VjS&F{)zVJAKu)fuPz|`FVdM6Et-3@^EBFbM%UxbntPN*1?K*T z>i1F2J?cR6yEF;tM#xVTdrjkY+mfGX52a`9cKhav2@ZA-KDp0RYs2u*$RJ&ki(eA1 z|Af9*lfH?*cvY8&^FEyiOmx&(N=)S+r{7Eo{Xa+gCrYV*x)vuYum0c5TXI+!{x^7k zCb?*%{o{|WBs@gGuim4B<%obkO23(a-(5xfD2P(wx1VjHn97U)(9ZEOVfZKY^WdxK z=0fks0vc~srN0~5=!P(M6G2KD+I`(;*iqUT-hw_6hGhcXc(BF{^!hgNX z(4b##yHEW+^7e&q#<|M~jcFpbaIPR|meD#IzhPu}bKem?)f z#lif@=Q-d8AJD7UyJ7g3eJ=@yh2#JHVU5peOM9D$xPQQS)sdt)qUvhcx3&8i^K5q_q*7|DFZzAB2P9VHQ!0*y; zk8pkl#kGil-zp|Q5%9+@sHvEMpUZ@uMzgQ||LNSgIt+hNT&IY(EAoEu_pki*_gk`0 z&eyr1iDKeo2-zP!vx#Dgf1v%b5ls}+QxWZt520&Bze{>Gyoq9(w32Q^o2~6=6OU@2 zrQ@q%be%~YW#c*U_RpPgrMEx73jrX9^UwP2P;`D<((df^BJX;J_dnTxW4ZkOw@2iC z66U`py6SYR&R@xTe=>K^jlubsBS(4u`Vx+P`|cu=e?vnF-BUvtyK^ndFroy1Ak z^_Rc@Q}Jq3xc;U8ziM1Re<#^@gLGw`*VLoO@7MnLx%B-XqIV^J zoW3Q*^r`r*b`+loE?a(pUvX&ZOw#``xSk{HlYZE$l+~Vkx$+(%`V0Xi=g23^>y zDH`c=ZAykyRVBw?jat%mYG15->v@Fs#U?*fyaCBd*PTb|c@#OD;?wgXO4pdm=v)MQ zee!uXAea1SrK=dlXX??K?AJ<;e+11w_t*iYAIsXV8rC%^wwrN~QR)?Y3c zYV{N2ulkY?##wS3wL!*Nut$`?CGioC`aAZ+aQi9Zn~?)QcUaF`{pVBclAjN znk0UAzxb2m$1d_d!`i0h)pw(I&A^{8IGW+Rj&d$9ee&3IXn)WqARp)-axQ-D^Y=ac zI6q$W-}`Ga?^)@pQBSG2Rm1h)h}QA>_5UCF&JXm7`~D&AB*Ib8pO*J{wzLzLB$!3d zXNx|H7r&Cm4wp4UHi`BD>DP2=dkx{QT`KJf&iDC}>?b-lO+X(^w;47*#CN(8ch8quK%lAX+Dho)PF-g+CkOI z*_fuj>_E|o!*OzU;Meq-y*;e{^7jYWS@PWhKBwQ`|L67*Wy`$5tf2o?!sEX_n3@5< z|6Njm-``?#(0{s-UZY9k2L87%c{4i<|4sCKVP_wq+n>td_xFbxzu(XJZC`(x@%#Pd z#Xo%0E8W8IpZtIaU&Zo@ydV6X0l)s29Tn7SL-?bwCEItl zAAVlo`p3tT-T3?(4cUYI0Ke?`dk^LMThLA0InMuUS(V1FH>9hYGsXU^YdNU7^c*;U z-ooGiITh!}RMq_siLNr`oM~mA|9!5`UrBtlD`P6K5%p@*S3OE}^!&07Bp;~yya zOQii-%Im{!O!nW@!G8~bk<9PepXv4t_M0d7HQOcNx36wM=g}qc(_`9m5#bphe=(Nv zmq|X01%JmcsC;ipS0&QExhe3M^a|>~q`Bx*+C#aGn$sc}j`nYf5#N#oz#luMj*8Z& z!Hqb`4PJcyOH;$_zec)lv!Zi~yp)4!y?}rIcFzn7_KkO|&kWXwE$!&K&wghg7refi znsnGY^EK79-yK^=F-1t_93CHEM=`-c@0J8y-RGp0tbe<^*3T3>?sSj_~uho%9*&Utd)!f564w&-$Ox^XJ@jb-d``J~SNv@rM2j zrJcb!Zpb$#Aoh${g?e!?+K|k8iR4 zJ6Q?*s#cK~1^NLu@plvb<2-WYyG?LHF4)O8Mz|#jdZQer9gaviIPCAlb!UFe`p=jC zIr^VxKS}m;TZWn<{dqS9{wb2LY5$I4|8D`0y#L4j&ye!Mxs#A9ubtSB#D`q@az9)6 zWzY8O>9?Pl)ZgFlBKsMXJfG1yEL{KmUWpy>{*L;m3FC;*O3lw^R5|o%^h|f8Z~}cA!06)^9{C=Lf$U8q9_t_!+hdesB(z+uffnU`rAAYQ#RsDkfH&^uRRMX+v za>IF-i=7Bg;F{b&7=Eb4w}eBEk26>IVf~ll{i)zz{})BvoU|XeocM=g{Al1`IY#4& z_R{M&fj?i`CA*#;X8_kg*p-CSbc^RA!V$0JyveWl?PsUp=l7@a&6x@PJMtbC?KU{u ze}>qkgya%LruF<*l?ndT$`5mi6Vdi@`ijC2c3`R`taKg zHGcFPz|H5^&tfO>$+|s(oxUaEYK^uZ*uew%uJwxGxegsJ(Dr8iM?V+xBqO9l`}5n| z;{xaRqx~8G9X)@~N$Ow8dwA4a@bcE*1KCgPajLIGsK1KJ!g^v~{hRoYJ>-?A{Q3ue zUO!-coW$?`P5dAJOY1Y0{qq_Gm+CC=^BRLVg_-t)asdB%cFSdqKkrzbza#teU3%Z* zG|g1gtM_bp zl=0hwzeMo=O7BygFJL7!H`b(l_-h;U335Bt4mgc|LMJ2Kk_6`W)^a60-{2)5Z`kO! zpP1lpb2r()t>+-TBu&HdpE^rt2>s(Z1v`=3sZnxXGW3l4H(cfo@V$3S60}BtRlXw! zdqFvXe{t&K<&57E{p0=P%Zmtq_cS$aoi1ND1^#LCgZS}1*r# z=8n_h@qY#TKd>L`=3u`R>5y-qM~?b{zJGPFIsUzez6&00o28y>uIGGVuP0IlHqB>a zUSl!MbK^JjJuJ6x-t#l+hrl1D$#m<+q@Uw|;3oY}|7?{%H0h5{$yU70mE*x#0vvd% z{qoX-tpCVyS`Qe1&H9Y;>6xaUlk&B#A}=M{eQ=hK9qi{hjMrq`q^~Nq3h!BN(Ct6; zm@W6k`9Q!`(p%$+EzhSH0M)3LmOCQnl0{_BHYX478 z)?YUT{Y3j!w;O8C&7JGp2lP9Gl5@e{IHKaX+Psr^?l9pmn9j$J?@4aul}B(^Pem8 z4=q^9xLGXpoV{S+JabM_W$|Ibe1cMdP|Qo=sLP5q;twEqg?f58#`OS=j^ziEU+ z&-bHTB)%oM!NsfYsC(;=Y(G&$|2sEQ{q^Cuk0>Ahl|!Z6MQ^yzItfR+3O(--{HPa@ z>pv2X_>jxQ|J^CKMHzpIfq%~?!apFXe|2Q}@OPGar-thK2>eY>(Q=`k2mYq=JreWz zwN2zjcq;s>#(mY6@vk)SkA9!*=e#6-x19KIoi27_wEtT^566Ee+JA`;{f`v6qM`@j z2Z#K%VvDCRepm2g{&@>Ozs}A`)L$o}^^fNcINN^){n?^u^F1B(zf9VB=o2`PsY)?? z@3HaT&YfFD+0=A-{} zR5*T`V)0zDF{XZV7pW%@s-T?0)K;i!T*tNZ-Lj6`#>Id)v3c7 zzXYp1nLoUuJL!LARsz3UPW+gEcC&PU9{IMD`F~5khX?(~rC;Y7-xc2>_KfE^@Y<3g z_!*gdX8G|K%lTaIT}AzeMOo@DydP;3uK&B_fe-zg@7;hO?Gnai&@mhY)AC4ad*xKiL8Q0C{dYQttYyQjI!jdvKx}5A<)2 zHzC){(*EGN47u_pL-5B|@2cU~e?-=gy^=+12Y02b^JRReWF0P^yWl4NwEH#A*n`?` zf&cZ_bhy1*heLl|PnK}0@6hkN82`$733-x{B^>E@{P0ZR{RQTKc>S=oH8X+VEhqk+ zQtr^3+)kB9`v5zE{%2!d*~PkCp#NRcZp3B%5%59|lt<4`I>r3@$M`*O5840kN&P$R zi##aMJGiNT^m}3Fz;C5#z2o@{JQKEQ{l~?w8cKp0!=)VMyPB4S&lO%O{MGE-Q~dag z#eUZPha&7r;Zvbza5$r!ql;;l4DUsW$lW!AykopKa$36)41+6pwyk24-L7eYL)#1Ro9(FF_xsqT4&dZVTd<8g^GOm?=skI~cT#L@q@;YsGKLqxI_6L08vY!I&&u-Db%N4$H62Dtc z{CQ%B&Iv*LG0!D}y?qQli(NS)@bj+5AMd97d!-VN@&W(Xtj`1MXY%BHfe&|*{ZG$S ztxwYB?HnDh|JJlGk6p3k|Ap8?Y*EmD=1ms+k>@PzCr9R~oR_rzEy-u(wK~50mJW|d zxGfy`XBUlr&2Rs}zwk|Z{ua{uE5UCcQ$GAHr9WwjymC7=74=uf#khalJ|dTdA1w*2 zr-I>m5}qSGTli_eotp2*kMY-2RBYB5T7M<@)v@KnkNFdOf!3ScMy*v|QeqNLHqDt&p zZlgBCek2@vJO%ofa7z*t0l$Q!yl@@%*J(j?8|y!2tpBe;)jm27tpv42$A#y{R4lCLeaCt2d=q-2kjLGSUCbITlk~O^4`DfkoY+=eyKf~a8=I` zZO}UlS;w6zA>cDFj|2Jkh5c3639!%5&NMRky3qf25nn>AbAV z1^S;Y_|+HszPb7~3OpkI+xCwv zODBpRx`g9jYS_=*<~n{{#vO7SHRlc;t}?WqVJADJT!0_nt*F~q$49s&xWRKIBnp-8gYjw?18>IblQ{dlVv_IH?5$m9F;yxyR z*uROtKoXevA(tiB!7tyiD)9Wm`^TdnB>Yo+?Y|wa|KZfnV^^%1I_w;+2j>fE?CGw|;ayFxxDei1`0YPxYC+y8DmXg^nP zp!wS?)6|9Yb-3ygj{m|LLHu)N{0@7@efCOwh;ZQF4E*nDJpupbDf+(XKLCH8WEc_t z#+U0l`P-j?(*Eb>rm3ivp?;P5F*gPNUoQ^g?|intulr-re$s&RNZqdh{yeGIu{rvA z2b|A|y`lZL1h0wTUUkXDF#LstKkmct^bFU3O8npbZ}3%VzY|8}p6 z;aC47{O#X;=AkhCzs36Z;a9yYhTr)w;m;L2f}Pdg`ueke{CNMB_6d!-ZplzBr;0rb z{tQVE-ts*DK6i5e{!L=f)*ZqA+e`_M{t~RGX)SdAc+Vb@{Ewbb{ol38b!x{g)qZ>X z!OD6It5hVik7dhm@a-qRHa={Bw~|t z=k@tS^L|1u@OE_v^$L@3X&;@^YN4M4yv{hAN(${GL7XV+iTN0Xrf5p;5x(+Ewx`AM0knjccHvC z)1K>Ev~Hc~47u*sApAspo&m~|dEu+tAFD#~iEgC&;=jJHWI6vm^)(dV@84|r`)#NGE0rf? ziaZpIPrgux_67XH2Y0>B?aR(%bUnxZ(gCzSK0Y_OKg#M;97 z!S}O#yG1^H-=a0GUsdts{wdYBeDay^Z2_PI+RyFU9v~ma3(hL7kNT1z`+TwoI-kaR zgVxb^PTF^r{OV|;6b^O?J~aKJQ6%3nh>rP*mRFE?12Yrn1I41cU3Xs6{hP%3K-p!A zTWenDU4{ODyA9m{w#D3RU+WS?|MdxU4u{|WV^+}Loeai*9e7O+xxjOOcx6{u{p0o1 z?5t)*9{(rTQ8Ui{t)u4a{&m#sH`h^nphEsZF7Q1UPa6>?-?F=P;^?K}^6i#&;pz*j z7(^ov*ZPfbud0|%qj^`x1sCbB{m%DQ71O;0z`yQk%Zd8BwWF$HT1xB0k(T*?NZ)>c zh-h9AM4?s=+SDy`{&d8B|n~ybRL}F zU*!?XjGvFINnRpF>s9!=dV+ovwTNiHLwPejIZww&9va=g{~;In4?PEeA12>=THnJC z`&_kr$@4KcRnhu)-lqE#Jwk%}%VVJ61D;{z=j(1+RgY9l%ADlG_1iiJ{dx3!<@nY+ zRGvg%kiI#tqI-G7;6fba0zaYe$k6jke-ink)kk@`+@8Pp{J$jsA>=3G z^NYE^;~ZMUqY%-&Ajk!tmHq6Tu=1;Nug<}ibxKP|hszi5Nar0AK|a-~recD8F}lVC z`CR(V1o`4eQ+guE=hAN`$QPx&m>{1`*O*c{)F1Fo+u!uo-6dO;36L zo>}B&Ng56CHDqUeZd^pd@tiZ)Phgz{>=EZJ!jE+l@M9kt{5WqBe!1NN+2Cu`lta?e z8bpo#1)IJk`-mjvipm(%qqwKtIGTaN#A z(*LZHU#jART;N+9|0}fpEWJeMV9nEZ#_N3i;LUbnQKrdrw`C%;GZ z0++`F_T97&i3sNj+P9IPDCK#A6gNhc>O4VHPRIp5vd%XLg|(meiG1;j%6BQr#{~K4 zcbrM&Q#0!+ri6S`Nj{=f@W^mAa{$kkBRdA~pLY&L^U3q(q~P_Rshj7w=iY||{T-(usWLnHD(oIFpi zBSG-v1OA|Fr z=)c5ot*w~Qe{pW7_(X~R$}OZXBJ@`*%A2W;oKF_JljJ2z?IU@f&YL6JMfS$m)f#G8h^{|~u2cQA=r_|SDqk=D zI*L!k$2+m#eZ7H4x4@ z&!UEs3FQ}GQA;tQ{Nl^WPn0OXwd5y4`NdwWrI-@sx4M>!5~2KT%9{!07k!zo6Qy#H z3%t>eZ$i%>=l7TFqVnF7-&2O!r7QCud-=k%$sm>{1z znXVHhUt_5x1g6%UozvA_;eC_3I<9Wdo zYX0`+R=j{c$nUrBIy9bCcPHB?o>oR&=J!$m$UnYJC0|4?fH(i)pr8HUhsu}z zL&fh=-;5m2f65)ARxWoBM&zEIOx#qh08Zf!cF<+NVqBA{fJ*l`67pJ z9vLQI{{2Duc2-cnX+`1kEf}rCP5JU%%R_u>xJ*kyL_7xY=`iW!!NS_r=TQ^X+dQ;TxB^q*v3S+`%v2)7v{=7V)sY;7*!fia(f;w* z4404R2Q%r`e*9}PZyIs z(fq8$`jGf2U4CpX?7&%Wb|spr#QDHKX}w6Ws$;AJK|Ps;^=z`91a{R-;zPd?$;jNl z91(eNACw#T>c%x53@bmDkDViO>GDgipWyy7>r>r91woWpKk*{@iTW%J>UZ>f?T^ko zSTWrt>8(3yJqyvUZ}j!p{RbrE_gn#oX>JH*^?7Xo=+XSsK`r!as$Wt)FqPN?orwf@Lf&`Rwqh%#D1lT6>^Bb zMamE7;g(8*->=vCVBJql!mp71>R7k8Si-^JpDO_mME8Eh_KE8SB43A3NI$n`B+egp zMi+TeAQw2!9|qp{<^Hh+x*b8j?FMPQQ3;0~p4v}`yHyIksJW7067+G7etu4o@Tn4R zNjUU@`wWyH`NA*n>jug%D)L=R?~7u`(ENh9=$LT%j=fArfP7zd*Ld-qM*4A(TlNj) z$OZF!wTOh9`-E%>e_GZlU_VxYgo8mY#NRvhwF|lYc1rtFB=SAT@*S6GB#Yk z-iCZ=U!py=-f`d0#NKfJEaclE_jM1_c56ujvmMEm@P~Sc9c1Y8wj~^_Sbk&+f41Wh zU0A-z(K;R0Pt0mZ^{-_WwWqlbx5kCbM~`ODl}LU#hrwPJlyAP+p`9HZ@0N(YVcjh3 z_EC%*WZkSK`R52uTh=p2BpeKKfj?90hS2$?fqiufd#J|4{V@OYZxS_=JYS%;P(wy^ z_*2>+rQb}`D82Xo_Os^7COWshZvVJVWcSmUpnn)$=lNkZnerp*dcMAH#hNRoXXrI9 zr&C|hb)qqnU!3m61ZT?+@T1yhe#zw*lm2J6j3178m&$K*a(z#He36$D?Fu-{&8|c< zl`Zwd8XPRYgx$*d$gt0bs87Z@N;r1|?Po;tPi41qIkErCl7MbEzwoKQ{j{Y1-TW=} zDGPk(-%il-Wk@=3mXFU*M!S`&f4xZ7VVV7F^ITBaC;Hviy)BeGk4XC2>ONX;M`5Y@ z+1Y{*eC9{v7KJ_ESw41AkxScWa{g=q*^mEygC7rL!uL{RFEvw4_+F}7Pano0O7;C+ z#?O@M`>76HV@f3-+9B{u>yGlyAM}KwfB9mcr)H$7=!t2G`7`HYU4F1jaML~`V&~CG zx;;d`mW1QE0sVd|?Tg(=*K?Ggd0x3C871Z`WF8}e8wk%6j{M)-UC8fm6VG?FpS5Ux zU9?g1eA?(G<&zKJK`_r(LH#q^Nz_+_TY?Yce1t=eX0kpJ^%CVI$r9@vpr@H7%jWsz z+bQFB{{C?EqojQHL@gic9e8=`-&rZnZ#L^6+8x+Cf7>|vY_k6Gw~HMLOJ$!ML{OAt zjoTM^`vY_3eAOv3zuRLRmEXC^^LedF;pI0?@+%Q;p2G{hqCB8?$T3d(pXRx-W27Hs zo*Ub;(S{)_>x3IYxW{E%x9@seEU;nWGiq}Wl?dbemu@hI; zNuu2Z$N966@80&>exgf)+tw9I=sHz-|hwOVo ze8`RSFr6CPq|B5T;aIBQ}^YX>ie;k_}{5w;M zyp)g&9Ov(rNWN1fAK=A(?{25%LpbD%N%X1mi=F=X(dkZQMXO^n>7@6NZlG z^La}j(djV%`Qa}VV_fol*r=S-3c0}JM*01>&*#PYSy4GJ_+SVkys_bTPWaDlEMM_M zLHWl0PVLJn$@ay*JiPqMD<96q#kpj#jElr>mCV0q3O@5(+-wP-Xv8?!bgB(LKpYnmOPgNwrLV3<1AIN8($846L zS^p+<9Z`kbmjXFo81=8!>2#xFXqkRb3zu)1VV~6@pK<<3ju8$$pD6t;v;LX$6R3Z^ zPu_q1vqV40zwYoBwOPL1$Ln-BU+Wd>m_$iFoNpXYAs^1yEs=bSI>`M8>HdWTs|ga0 z_d_TToP&pQ0xq1BgL9|x-ejbdt8;jvm$hl1$QOKdPLET=#z(E^X=L_QMcxmV!#{pM z;z&I{cPFIN_s!E)2l2=G%xa<~Y&b6@-z(tz^v-BnvqW@I20dTty+WLRGu7xM<8yAa ziSj5v|9go79sy8%MR_w76lgz>>DhT8>0bmtgqOWIy_m~yv7D!g_LJp{UXYb2znI90 zb`#tzzqYwjemTMMduJmY`fWX3;!FKQ`Q^{n;pnfToQ{?Fw%EUA$P)uF3BTs&R^Rgb zqxj=GKgc)vODdnqN&9rJ*5!!g;HG?EoTBrIO$y3){4gEvexUP#eEnoSvpQDWbD1KQz{GJo)j|zMKO59Te#dsy`Ze2^YEm9J?>SrIWBeCi zq00~DaZziX584+?;@29X!|^@9RuT>ddj%hHO+WAa!~!{Ya)Z>rYp6WjhXp((cCHPV zkJr_+gM77{>-(cWsjn(^I_yoJ%dof2&}%9I|St??}M`Cg4vIT+%Mgx^<+O#=*6@oeqy{a zQir46k;_zrv;!YCx%%L+`gdbY$BP}Q`xRVH)#wlR$N2@Q6UXp_%T4w-&*?(-jrKp| zI^NI2|6ZTq^=Ai@jeM7k-)?TuzimO#kM+ICPoqutKVj#+2F~BZ<>!ihmdNw(p7qo} z8<{LW>v~;&2m$BwN&U}1vpjI$RPz(JjU3@cLAz>6f+ok(4`2VB*Ejpm1Hk(h``l*A zYESPp#6^T#!dF;NZ)f>-ihP(q`)Mc1SD2x`dsp9I-Js>;+pq)wZkhI%XqH$X;+(9@ zU4j+fci}v%Y`I{*?}B~cJ!!Ogp%>GV_+8|DC+MSvgo90y9~!MvU*GpkV}Je2m-B&M zc$OkA%}|YcQbS5EoP;WM&{3P6#1Un_Z^OC-Q zzJwRcx=VydB^)dwKfsS!Ud{H)XUqH`@6U0M%TisR)wo>Qr-O0>=Y2cuAm11{w+Q;x zSC#reo*M|K-jV0xq7Q`Qx&QMKa$k`zTjGBv`NT?s?X6r^w*1Hye*PnEz4u3@C+Yl3 zM85bO8b6E!3bNIkio6t%3tZ7W4Lit}s{Tz9xs~yJxKhF~FKT(YseQi37m@HO@;re) zUjg z?`PrqQfXfr)BX;tbEf)bhQ@2lJ}cNI_%Hf$(mrvXt#SV6FeALa-0%>YpO3wu>l5lt zT_fC<_&*m49(7rkPG}GM`wic z!+9s}k%fUfndb{ya@9OvFe>5Z`GVSdlxiY!qy803{Qt+^dw@w*WN+g|9)dC=VL*Wk zq7KF}W4?l6P}EUT$J{0yjAKACtrsJvbzBp=hBjlyjA?CGTrrQC-8HmvF{7@^uIYPE z*ZWT2TXyfVzuj-Y?|c6Ln&(V)ovJ!jb?Q_;Rae$L{h+;1&8>ZGf1=^mZ29bdRlI&T zH>8L%% zM0}7uo6!%M%liBJNz7UBKBn#mu8;EPXUiAvv#9>U`B}t#oy7h~ z<6;BxG0RtY%J{hXh{xHdfmCI-M=FF&kcdtM> zJS;o^?0$g9t6!)o#lqFr>$3Qs#OwR5@rS-%#gDCS{`_V;2pciW1-e7TD%m+!XT+45<8O75Z@G9C4w`Aa+Uv_g}2(xODx^pnN*$$LCI@&?8QKapm$&I>i&5PP%GOk}IO!=F51#3tvNz zLhw$g>gmcrA6E6W1LZ*dl;l?FMEs%f%kMU(v_Db9eJ`#57DMxiepN1CM80=peA#>S z$kw0w7tJ%3?tkii{)Z@^lJg--fOdW0e*4YI=h^rdet)tS^_Ohg-CeYSmrpmNa{XPz zd)BJI1=@dM|EA<71bEe7Q-D|f{WZX=J{AV}ND0suU7;KU9$7sSFv@Rp7-W44^O{qd3)e~a@lP7_wi0vI(#8Tukcz=*B*q|x;@#Z zmn*#3)7`XEmY(>a@_qRBb*1<7n}hSQsjni$=jHRG!ll0cx-z0{J3q4b`C5rrKcaIj zrK5f%Y=3n;SCzbpk85!KmrxFtAR+DZB$sw~1=K*f|d;QNI<_jy$=*|zVSE?;2{AHKkS1(om1eLUWE*}sH}>GAhQ;;G*gGk>+g zI&V|r|JlB8j&z%7@6>PT+Ufg$Gr9j6oztZhLibZ!f9vZ{>lfM8?x+6ge4lUib7~j! z1AN4Mg!}qqh##W$`f2->FfsAh1aumSSGi<=bjyGf(&cj;9~uVu8q)pLrpy1e@*Ti^ zmHa7w{;2XD5#S@{Yo_{*4g9=7<$Hg;=TqVHZ27*~(c^V5SLKUIPxhX-tlU3cz8aQq z@S48zGj}^UQPK_`D(BH*UI-9`JQ~>(^vVz@0Y23;r;14mLuec%H5%-{Jy8(!0@ug zhv#=&@6>et>HUIk_xYVHm2bhnSiVcgdHKm5k}cn7>=&cpJ3K#=ANoFz%BTC}`ktH0 zm)AWH_Dd>{_$d4Oli&NH(*Dvxzw->qFWyr6VfVy(rS|6^!?;*{tGu7Sifx2oKPmnc z@9_cl!MG8_o#3~@0SKSK?eN<``$zF72oJFRX&VQN_-&wZF8U1b_W?$O-37$YA+Eub zq!;10!6$I1$6=rQU;bCQWgoTAi+fZm{|hR=J=_9g_sDv|mb|^XF3M9Vm%q>Wtb5SP zS$FtebP@66RQ%O(A1a;yPvD<+e@l0M!eY*#(|Vx)`*QkqNIy-ll<5lpBsa2qPCN4m zo1Yh{|1bUY+djbfd9m-Kj7;%r&j(>-n|^v%jG)a->w;~(Tx(scES$*xCw_hZ5~?db zK9}Al-|tnu%!hyO8_3IbxDPUBgwwnrZ|-x4yKnD8p76e!yMCn0{T#Wv32=W6`GdRg zQ$*^&w3>*DY43mZQ$4Nxb<_(ju>U$A``+Qh2`C$nfF*EYZKPYKW12{FsCGtR(+7|230v zUjKh`9&GL4AI*bpE*#E-eeQqxU*(q1Xm?*pzbc&nFPsVad$W8$zj$3sDGDSmW83_= z2Qc--Z^`ws^ofXe-$Inq?fGttl)86+eb21_+rj&0(>Bif@3LCfJvN}PbVFO^mwox; zy)LR$|118;m`ixMG(DDd|F_&#=#SBVB~zCw!3K$U=g(Nm8T@&ycgF`U|H9czVV=K~JNS2cMSpKla_M zd%SfZsqnj5GAZ|L2wIxn%e}MikyEnnZ9y-cAC)(>Rc_g*?eN*yO689p@-dS~T1r3c zeY^BJSnt~@%|&_NPGQZ~`*y+6OtbY@hTW*zG z_BGqC?kbi4M%0&?;yb?lg)6Q6<@-T@6N9de?Y?p-W_cTdVqxIZ?Vw^R5L2K?C(CCSn>NA z_I*GzIer&#aZFQtx$^ssU#;NNFI-XQ3bhtD^LD1yjucz8132I?h^O|PCbR? zyA*E$11>`UV*b&Epbuym%3*OrU*nHpS&k5oh)S-N(_{w%oDTh+5A7peZM;D zkNjn>bJ1E|T*I+`JyX2hGo(9d%GUcSdEzhR{7>&tC=0shp?4^1>Cwh>2gKOnhi5yzo2j`^>Ypzu$DDr>p(b(VtrRJ9WITQoN&b z`E6ZnCSUsR+}~Ip?E@3-CTqVp&_6sZz>6QHuKfL;;+>W2U+)X#N%xOc*8l(N`vTGfNqYMJHzNJLik>gUfnNSq&ozf+`K$6V zT8GulUrn@^|7O<{to|E$f4z+w1_QGScR%Hp?U_!gF5;kQ@9fgSSY@#_npRcimyOpJYF zJ9XTTF5X?a{JI~VXF3~l-y(T&zf8(So%?e?vWC98*RS<*E%6IjAHqxi&lmmRU7Je+ ze0?VMvP1NR>3L`4{Z{_){^sO+(f%i;*8lhT@?)A=GO}&`Z(~91(eB|@ef_xJlZf%w z?Ziiic)ZGgZ?MkqY8^vrU*I`ZSbALj%SP}|t#fBCm-U~6d3W01r(XUa*8h&Z23}FA z{x7=;y{O)Z?$GZQUgh6;wC9)bs-N9?9wWT! zKNsL5CZO?8;p>%fV5{B9zt^1MZ(IAH%k$Bh)IaJugadmj-LmKXc785h{yLtoK6o=^da7DEWMOvY^6P$Ao^*da+2>F9uax}d%y;sx z=Zo^aS#Xa_^)i#;HU7sWbn~*le4^h>{Qi=Q9)8?uRlb%0HF$tn&g~iz=CSDK9F2MEpkqehl#gdEP8KO~i+m zFGcx&-wKEBS9+gL;dH<6^8P6Q_o?zf`0tf}6!WL?S>->5^(H))^(7PD?~90^Fvi#a zzk2VF(Vh4uIeYZE(HmR+C)Cqd`@d)!+W+2N6wMVMs$BkI43cNaj{8sSw?rU37g2j& zNIeM`^mEVc>*Ym!X&|A^Ps`$0BmUN-viQ}Na9~fRTXJyn6X%!oV-zgr`FzuFQ2vv< zy3reXeit9ETzGLP~j2XV^!YqDM;$J9a%hO1_?*Hl@ zp5$EjVbor73?EwcM9BX3qk*qm{nt@HR_EKc|C^lAts{Do`@rfEW!t{6efKeD$X)jL z`PO$)L|`w?3%>RJQ$!E#qiT**Z68(s+DDaJ`>1kjA60IpFI%H zzx1Q?B)EX}ta}zpX9V*tyyR!ANh~Mzz`8QR$y;Ud;&*;}7GJ~gw*`3HtEyxaUiKb` zZF*m&{V#hz*G$ZJb8Vlecj|s{ePedsz5Gg9cZdGNPtbn=NdKXT-v;(Q8CUG&@{i&? zAF$ZSZ2V8R$hyDBJXo zeE8yIzyJ3R_N#m2PjWi}6=?gn(PX@D4AA|{9DWIS zy<7P^d4{jQwGDwY49 zOMUtCe@~ac{Qawjv$FZkP0zaZ-b6Goat3;DBHur925LXWo{=+&j9Yv<{Bq4q_^rwU+<2pAL-D;<9neR|2|I1LvD!?t~d7MtiLfC zFmu5wpqn}$ki6s`8R>HUN4QZaf4V&>Gd27nd-56go?fZ`UxogUnP{5t|LmQ-O8sBq zZG2A-p!#z~bd&(~f6h8ifcn4q-QLciQva7e-%$S-z1Q0r*m+q=KMrXX0qXzqpk+|4 z|8wsneFGYmTlOob?NssmcCY-(M~GHzDgC$vU1+-eyJLJz*T=`W4-lv7=ZZD5{>vkN zslQ%`AAq5d8;Ab6@Dsj=0I>ew*R20<i_Sz`WS^_zW!~U)7zEXzrHVD_!Yi23HbfEZ2rUV z&Feh_e7p|@8|0ot`IJ|)^*%v74d0^#e6}a@|2^6uXd5iVcxvGaXCpm;y{~QjG@O|a z0(!NbkpIWZ{?*Dqu2-(2{zDtqKW6f0_;%d?cq@PT{8R6H`_zB_x!V%i{z>|d#Upw- zgR|F0k&I}WeeqFQ_p+!k!@DWH@cwr%cOCqbRQtaO^vz$U&t_S- zmBoza%d)STvD4;h{oW$?zh-RgXQKK(S^Lwz9bi~48QInJ>(AjlIDg*cQh3SRPTcPg z^?Ntv{(Y$5`-SwjH}rHOpS){g_~=kSKd&dg&xn2fuTOn`8;FO>+oIcu^#0Gn z?XaMOIq7lK=iBA)0~eq1^tv;?>_?XI`j2_ytG(aUruAPp-=4z$KYzTJGxh&Z?BL6h zJh^{~vdX7@UPpaVm2Wopg@lipAH4$==l`pd#qa05n?e(qG{2k^Cx7x0hI1T8={ zQyxith(qt1@v7ZFn#K8z*3Uyfz%&3#E$Tm_7g|aYx{*5<9@N* zW&aY&x_2{rk0(bwmSrU~o9AuXZ_>It)X!EuYrdYp5NFE28QyWO99@L@`vt=@^Xd3P zQ&y>LL{Iir$%Anv`5FB;A3xg5w|nD5A844UUF?MQlIq%Qn?I!M|JJQoU+-YP46yt= zya$xL8z4uf6Bj($H_pihF@fq$DyovcUK=TXtafC-UU%t-^|SRmec)TH_gil(Jq{S3%`lRm*6{^O?zbf6V*$z?v-%Ac4-oNMs()*d`862 zyUf#(JgeMFKeT;p=Vbr-H@~h)_s?}4pX_d6Zr`r%A@-}uOFoA9BHQ%V&4@qYd7Jme z)TG|$GtYOaRo*ciPm9DW{|WC4Xx};}p*e@LyzHNwh+n5Ei*F`=U!L0)_w(aIj`(Vp ziFw+beamv|m`_kL)X6|Lmgl`Malta;}V*)Y53m*}Geh|K18LDEBAwHtLalhTh8-H@QcsY@N zSi`x_MH9>V0gmtHs^5|QM9{uY)jXK(McJ4g;KiRN;-j4J&&8j|r8mL$B0lW34CR^h zRgPx%W70nmA0`HP$%XP2+H=*w>G9^2yH_y&wBPR2Rr?y;4Smno<@@E)yp~c7@kMsX zpNMpl9sImf=`Xgor!PIp8O+CphiCD5;u}au;b#(`55mtP{?ln$IjOhaj1M;l3Wu!0wlrTSoUuoLy7`JdF4@|8ft)4cN3b z8-C*U-amSvhcl>Vn(5I<`@vfW{V6@Z7dgJahx{kYb$6FgZzlIA&nHoqZTnJYW_!zp z=U_y;6Da47db4UT9qTpflhrdq$2lwUY8T=9a}2|O!F87Uf0b|hHZNDgHz`9^Z1E?i zf6F;H-IC_dbm}MG{0{n`6Fa*c&+U>wSLRRdEKf-MxmS7^!TEeE=XJR*o({yLWcKF# zO6yJWZENW*-o9TcT;zkhb;q+Ek-qp-(0d5%m&Bhn_VwX4Km2F>Ntll8FHbzH^nQOc z&)wUpzYz#8VFnI-~&dhdA=AQ`lQY`wZ9qVvHu9j zgP-af%&xY-nY((BGpM$|nZE|K0DW%D($juta@8Pbp#9G1Hlz>GerF!P4Hk93GvrgA zh^e$Ef9%@Q?MwP!4cPxohITLOf4t@Sq<%-X^gkp&)$~6;qMlFTBi~+PrhoS7mF487 z{XAZBB{>QEw`S5=i~1!I&ub+og(+G3GZ?;_CApEk!r#}*V|-s%_ha>aHhX_EIs}7` zOwscPBSgu_*1MGT#OvLq9QQ4WcK_4&Did6FGFa62DjoD~4XV9YS%9BGH51W8_S~Zf zm%dM1OZ^$0pRIH|#=|jX{zSY-h-OwYvZX(xdi*=vd$Rli4C$?1G(V*NOf7wP5Ab!w zORpw3pg+zV`&Yf6m<;UiiU=dUnq&}W+5qX*b}0=&=sp=@TEspTnrf75~BaSK^P}Y0m$~@7t-o>yyvI zk0Jey0(`6tRk8KHlk#`;$nU45`)Bn(*FK5;)l<87=qDxbSLToOlf<9jjP(4J{*{afM1pW;0}UCndEpMxi{e)<072Fg$syU2}~ zcG`V!t~oQ!pBemq`(JkkfepKLypNdwpfZ2-KBD;ZKIJ5dv+FO7J9?kAp6N?}Ek4tS zpGmyF|E6~kXAwU=_T?3RHt~`l@vT7oxaMqq%_Y7HdoY9XM)r9(j{3UN{HOUcKSIR~ z2b3aMKa*a6ssAjt^m7KgquWZ)f2!#z<|g-p{!{tBcM-o0)Sng(=;sX7pT?kV&^{L9 z&UT$$3_pW@&wIDhe9`(r+^?1UUAXnz>|sgP?YZ#F|Kf}6gLn9};`;|}$Ts=Gx%@uXNM~veyo4nn@}HF3yS=Ai=UZy?)}N;Jh3oo!>3%el(!h z-O~HGoc_`?vf*|9C7QPd^wbln-;uq?4a>ezi9fSDd-*B!^5crG)xO^yUp3Mh z==NBJfWE)umV&+;K>BSFejBt*1Am5;-|Nx&e6lq5e*g{VXZ>|vUmS|`06MRa z>Oc<=>bt#m#G>(M{W*6WREa~^TWkb`UxHLLySE|z&{(mo?juGpC`tm zzrlPjX~lR2(0Jw!$M^)$coyNefyT2uej8{!i;qB9z<+8yt6}}i-fq1IZm7f`d!M{y z_%6A{kG+{63`rZ{<(BZG20+?_Jfq zlVSax!AWDX{`d6oX&1LcegLMHYw-(9^>+pvZsFb0GT7e$6q%pgsQ%7CMtqTd^^2>$ zS&2V4JmO>IFYxkn3DRE-D-5+Slb>|{tMMoP0^cVD)Qw>Ndi8Y?U>>q${fk?G%`ZR~ zY^9{>Z5p@>ERVue<6rzG(gV~pJ%!%{{eym+E&e4)+dxKqk^NY|FLtTKp9jdF=)!-G zKgr^KvH#b%gFpGkzRp1W$@T5)4E|I6Dc1IN28+rchp;6egTxovudn^#R+aektmNn4 zN`U1$r{DJ0MGF#o%x`NGrTKGOs z1NAdsnC0;OoK7A3naQ^;rSRgbZ0TpVliq4$_w~PcZcemYlX{h*zT8P~F+BBNMECEH zXYp#+w^MIZ=gxIZVD5d{@DcH`^f^htp7?s@ljmp+#LwWAuZ{NWlltzLo*&k8|K~!? zFQN%u-P+7g{=1eE1?6A%+Q)dp;!lx$b_e)NfY&DdV#FtYyA_MZEjb?<+1r{1()si>7!! zOMYgonWYmk{22j#blW9U?fqxvI>&IUeRTHaY58fQ{^5^5L4M-Y`#*p4F;yRt7H3i;-ObLVMHSNKMj`-)3Fec>g~ z)9EjJ!>)hJypPmO{@DGn)+)6Uqsbb9%=+Kf0xaQvB7mf1dO55HrFU z%Cq>{M10s@RIbm+PwB_|RGj-k`_+60UF|d`{rpv){|V{Orag=HOTYb7>HB+hx^}Kl zSD)!{@3V8q`$5qU*>b6TdOxV01P-AdX6|U^(0fR)N%%&FU-uPXk6LfG5&tpQmBP;; z{;pNB;q%0Q!|?7b-~Y@c-brumMvqsyCmibOQ_J^v3T$8P=U{!@RMxM{ z{nS#5p>oNV{+Rd^SK*J|(~i#Y`;m&j+IGHN>IcLh-PaI4VtzNK-ksW=_@MW9gclzk zr(Ub%FeaVn$hU;=N;ML%c%pmNU&qZg{xpz3Qz<`J{}%o8c4ht~Kev=9s9dr`{#+X9 z4Ki65*1O_AzMSVzba=KO4)qly66(-z@r|^_ zp9f|ZFHDbLYF};V;(TzYGJo>U?*pk^vP1r;edYG@?Sjd<|6ALa-lvY4QOS?;{l-@N zmCoPWDL>NB{N`}Q0J zh+p|+$`8}6Cw@KQ1G$=UWmeuKSJN49D(#_Hesxk>er8jD?0o1)<=^evpS(64h{EAwYq7f)FHd2UBfr|@Ur zpDQWSr}`5Uw2=8^xZ zUzKZ{U48!5Pb!~}Hh6sQ8ecCBB&2s36Ux;X;@`T~hZjC3{xjl5zmfRdJ*3a?)HD&V ze9`H~K09%$>4%5!E86?Y$vNHJbk=*^-RG0bJ12YkruJQ9>>ZL|BjsP~Yo)VkfER!N z-FKS*)9*4XU$SpF{q_-+_J4MH$d@es%JXG$h|%J%eEd3KwMED?aJnxz@qX z;Ni`({^9;>ZlL#%8V9=)w9&l}+<M)StY&u<~HM5k1%)dv$hycVncV zKEF8&{%QC3+z(II20g&hcyByi9@T4Tn=GWww>@Ux)3;Nn!O0C?9yPulJ{9w$wL7^V z)L+^I)i8=L`v>3r+n{KNp? zjra=!I^BuiEePL(co*ywNY3Ofx9l0+p0)djYsp{wRdzmId>XmnxTotF)A5T<&dj|U<5o7(M^YQ$Z+4J!N z&dby1H_?jN0Z=i&d4&bNy=53hE$K?nxqWu1Du21Fm ztNHtU($oFd{F#2gglMk{F`*QZ8j!>hi32lkU z^y`Uw;`=jvypqSakS{lJJ*s)V?kzD|$9JF_h#2izZ>%HKi1LjU(xnSc4k z7L9)!@V<@a0ZMlq@w&GuK1sh;c=f9dyHJj~uicA;wj>?x3uxYU^CsjU*Nx(L@qjE| z{9d2*Rc{gLZ%6vM<9s_2zf}(9TlT$6?s!C{@wchX$H*V&<;e60`u+#*XK9Sn{Vch4 zKTB@i&yu^^{Ve&{f-&|xKOOoAfB{!!^$YBM7KJr?&0DkX9Lk%%U;iZ-XW^o=hByP6 zM*fifVsH{QjMszE2v}R+c~GtC{)UatpLxq}&kgrt_Ux$z=^a<^_1k zO`p}g+$g-{=0eQ}*7xl$A|1)M!q*c&gY=`PefS3AR~zN&yA3>k4Dsjjo`*Z!<747w zwev@T_R|wq+9ExEOeg>B`&-Fr-8%S}<9E2!zGR2|(>`+U1J7@z`|?Pi-~0?O&*I;6 zr?4D@JzjiTlKhM2czi@c;rCv}r@yy(I>o_0UGXXW4(trl`E{cYA6@48G>iB~-m}s= zXEyP&TKGfudoL_JHqE~R`S+;F|8eE@d%mB~m-r@I>-YJj8{UIcx_QY>XPG~Gk2CtiB>l0V7Q_N<4P`>Qd-hwH>f;(r*&boo9`Gx4%S zHzMNUEx#OI8hvT-X;sNwwUftd9xl0j`KU*;4?s=8Qk5?b|F`_#?AI|;Q#*eaomGnQ{OE~)mNdKewEY9NrmtB)x zPtA>>kJT0L6}$j{fa#xG|D3#z^LBvrWeT76bq3Ox$-ULr859uT!sq{t^L9Wr{g2`k zpbz-zXrzbluNCGXELVAa{}X&mk`cGBx}mdz;(ardQ(M z;?jS(>mT#4uyL(35dY%!YMntf{v{jMIs@^quo>b5#J_k?{04}B@z!ty#J_k;xB=Dp zm#hx@0OOx~4y(k~An5?{FOR$#RO4R}c{33IihIBfkP+WxKltoQdsX7!n&e;Z?tjd` z;#ANFh=1-#qy?zTzoSt;fcRHD3Go5qUk(!&1M#mg9lSG$C=aK>A5e{d(SfzlU-$e= zz`wW!v;pE@4tX=E%0J|-2oV2D7u{_#MI*k+-h8DK9g1F}KaGzWi>;V$R^O_2^y|Zot&>Xm5CL zC>e_PtN_Q!KY~9%@97oR!24Bz-9RrrU+ag7w6(?j`gku3ur#8Xe-X3|P6Iu2=NsS; zXoK7Il?$tb9>CVW`7NN2xEj(2 z8sHmU-2uw zpPk$@(7j{w{a9Ik_x>^K?*GTE`%&aS9e&M;Ww*Oypt~RG$=}Ty=nh2r<+eNwomO_| zZXf7=+ACWhJ$shxqk#C5-{hr1E_c^J_W(9XR2H)*cFnrKLV4t0yce7GRgCy5d-n?t z`o5CWmtAh z)_;QKCzak#m|v#ddj|e5gMQk-HOjiD2JT-{2wk_&oKV)X!+W zuJine5qff+Eq;mb{m#zv1>IQ5gnEBkpN8)#qFXMR#x=5ZbU^cPP)}NFh z_QxGOK3d1mPb1<#7@L)^Jo9@3_vI4mgU%%WJ<<_=7V(>I%5*>Q`I$|8llcCv#}|k{ zjr6s@H<$SOM?4+ji^PZgolAu5A11%DZ<@am`Mdk;2>4z3`(63v7LC7WaUU~xPnN&; z9O3ilUiNtLcU|VY!1}0X{`|!%obm9+Mf&ALf zx3fI)EtHR_(U*4?@!|gOY~n*p`H$#v_Es}X`gLs^`t(|PzI1jT=fn7@O~-py^*+6> zj3;|o7dzkV+41i75^8tMH-o$3)XSBAaxFb>ryh>_*@$?3H$wOk#OvOo<{4{YU7TKb z=-#6Ib#GB_-CLAf_ZH>WJw>^7FHvsYOO%`0>aZI4OY*Zuk1<_Lei!gvj4|Zzp!d=L zp4iDvx|a1ny0ZLEI)wz;UasJK8RCl)zA?b7dF^zjr?2px8DT@VQ{hpKB~#D)B)LO; zJE$T4=Vd&d{J|ct`g?Y&$A|sWoy?E$5$PPraaid}9{1!qpzxy^KD3ms?31S)ZR1=2 zHtH+Xk-x8F-#Rz8{C(TP3ZB2iNl>=*(`(4E>A31<>z<7cMg9EP$(;=bn0uXNA!bi^ za&xg?Ve`xnLErqhH3mJ?$?b1fK&Jp(#)@M`_QbKX2UJ>L)O#^-@o6ok@Pm=w z5?EoVUPc7#|AwVet}n~$wJxY&wIQ?jLOZs63pWPg_1ol4sxgun4gG*%7b zHwEzr1o5}SL@oXOi66%L{6x15bp}1g!T<3x{pKLQIl7C#AL|X=MUYE^J4Hk%& zml$aoY{K#+lR+O)%`Bitk@niBoUvzm{?^9z$B@C`-5<-}Psla+dg#q~vbDaeV;6NB z=NAdrD-7;l;5s??$o?gi@0FbEwaUIe2=|#<8R6R#J-#^8cVttE-)xU8zK!@z|LXA? z&t?+8PBDu|wUo?O#5=B6G#@+rV;^4Q+`|mtm*cDQQy_j-<|q2b=W`zM)vQK(jG_I> zMf+s#CpGc?-MfB^@hNq`q_|pT{!9N#{14X^%Eu#t9-~H-6?V&(SM!gKdnDwK+G}|4 zq?QTjyW?8_))61^TtN3%BI0$gCC7U$^~4vbe^Q`4G!Xw3^DliP@$Yl4qlAwczM7Sz zM>FliW*_~g$^X>#JRh3L|J=C<@J0Fk?A#iQ#{Zc56AAOrWZa9}Q4Wb0KRfoDh!;Pn zF}%(@#82%@XdRDXtYrSo@P*xcJ|p5gH)PWlpL+&)@wt}x$oX}R_&g}UHuXuO`26+uS$s_T$8MX&i~sNBviK&3 zuV#h(pV-v*{Yw1*qr=(MlrsNwYcCrA>$ndR-Va!p`xnBC|8vNH;l=-D0y^UVk|+D} zDtyF(Mgd;@UnQU;{*MdtBmOTH;A7Gs(w0qE{BL6YDnI{>|1(H$I_>T^j{S9d{B7j^ ziM^i`KVQ~AEAkyBjk~h7Kc)WvSKPNN@H<~j#)bMy;(vIqDn3i^PW!PD2}$ox=egpi z?x*TIAu+>8M|!^H*7f7Q__h-9qTkH$&uM?^G2frG5dSyMACjD>GnM#DuJZJ?Z

    V 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�^!E_|(V{(8PGQZWI)71%I!A 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

    QLjb?Eb3N9 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�cXEi`Wnwo#boM(d@FUsgu%r<@hN|4Ext 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%0A`#v3#gP|#qbNVkMOeBcd+3vhNrSApWPv+m!DRX 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 z

    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�XTJfREzn{q17D3b`s5 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 z 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

    WU=6c338 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 z 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

    Se&eF{{LuNCcodo(XinZz8Vsp-zQF_L-fB7> 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 CcWDmExwKEgLC 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 z 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 z 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

    |IyMsf977P-w{6fpP4kqAhp{2w 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%0D1~MV1jaN2!?I(HP6;bjdCZKo9UY_7L7$Uszm3tU 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

    ;RCi|^O zRHjP&Wf8+goMfU`k=EoHT|5Gx?|A>Zc;WV_X*Y1NMHtaxXu4-02c*Tm{_6F?1UXi8@l&BoSDc-j`qL^~$NU+=o2KKG?q z>$)oJ)LeP~qr%&Ov?=W#-@UPJa!tvCP_p(ubnrYtor*)z6U|qGKi42N5)U1W2uo77 zr-5k`8UhOxb7UO+Z8PH-{Li&9*ko)kV{__TIm_(DX2^^kiO^D5#%>+W$F$NydMjP|HB}p{_aS91< zB_pd%QaG*sZf}GF))ElK8`jSsi$PDCW3#=_;!3GTkPQv3w2yAM<2=d8T#+=&Ko$Ut zNff|&U^t{?=h%sW9!4JPZ_1nr#er`0eEj^hTpbT!G(0E|XnYGSD$xn6nZ!dD-;J(a z@q!Dc57`leag^Fwkero}&C5h{F$H3CWMu<}!cvYMw$Nw@0u@Z#Dz;=MtuSTZX9(ZH zcm|*N|6z6XC<4DODhLJS&LfhuN6=-RsZMK?y4VJHoS*%Be<{@$6#j=ONq%MZ=(6Dp zT@-`vjy-x-G#2c?rJOPL9>QyYQi<9bEVupdpUcat##j6DCHAbcim;78?Rc;N1xFaw z7c0+kCn35BUA~{2zPlzxd35lVy;M$CqXKaDG|p0GCG?W|A|kpXk0Xu^SP(JA0oCzI z-jqGe@B89o=E}|v)!N8jwi5fie+rl$qHbfdDKN_*BOD2@vJ zSx&qU%AgE>dm}`!CBdjh#Udyvs}#UV*qs!|S#vwDu1692ImROMxojQ0oNBeVKP6KM zhAlbI&%H+sJTD{YdAjgGWNJ7N4B*@y_Z~CY5tZTo=^uc^IP$N-=_J!&~F_^O2?*Pu}-r5L0f+Dh@)?;LYqVfh)#b8O1@a z>ac|+awr3%XoGz5@8u1zW;o|qOKrLc%*H*qS6?4Qw=tNY8#U9NrI3cZ$@%K^NFw}5 zbz0llCuMJc4%^M%&gry18T5GLMq4t%SsbHAL|4Nz-Q3@#a4B2eTnN0>7kn4dQVueF z@HL?PRqrREafb@S%){F9MBae&?A}~~O$Q6c5fS@eXfx{+Oc6L5a8)7BJ0~Bpgs%9P z#MBvd#6W45(8s!3zqV{8yGtpIGb)T}s|cwm+UPbmMi$Y^J^d?y%+UIyp@&R``#eBMH|y~0t?go3gU{3)3D9Hkzo3j z@GypRPh-0}DwqpSl>#)EAK~l5pK}yt;LqF1{5MzePgU^^Qn#k-3Tn zr3zGaW-$IP@d$`zl_{OTJE_GENLQTb^9o8X#oF~il&7MZOVobz+kKQbo1bSac)O@6 zjqznmDIZMZwJ8$2)PpDYSAN|Fb*Q6TatVAU^vl2T$^Pv9-&G#%-ydQHm(JWQGK@uQ zjLt~FmYAL0>3-^Gbn=&|Y2XvxV^_o%rFfK}kM@xqguejljlBfyQAwkTXR$fo+L`3A zfTNv}d8C|+F^1JS(`T*zqY-T&rRxE1dsK!l%7!qPqS$z&Psb3g>gmBU^kIaWp~Ds{ zZs~i}yY}hy9``IDIew$X(Q(p{ZFc=9!}r?uv=*DA?2R@bZdPYyVsxwsl1-Vxa}0hg z;kwFIE;1Mo(>&Y2=pQqx!^}(Jy0n^7Up}e6#so}opS;$TSOYvcRJbx#sb~2- zH~Mj4VPtU28eJotQeHiQJ$-3*0h_nL84#8BDRt1Bm{*{a`S@e#aa4?^4C|w&(mng& zBudY4>`rw023AFH+Pz6!9%G{{%9=U^Tkjb4dc&aEo<1s>(Q!L&aY*THwcxu4m3n-c zY*mD>({)wGuBp~;K}8n7G=}O3VHcgw9G<2sR(^#EPcc>nUoD#DuJ}x`Lit{_6V2&z z3zU8Z&Ivi8sk#f-P*(m8cl`uvi^S*27zMDkWbK0-f3s^zSyC}fL^K=fVv^(myV3x} zER9#Q=tqUNm{Al>keU(qhXb45JJhxx0IuizrH`0~(>4U3Q0~qc>$w(`2}- z;yOxDyoBow-`NLwHq{&p{QkH9_|pWo1i6&HM2r+$(d3=mI+lFN8Y0ak{S}L zo?B}xmP{Az)fbHdn?R7-pP`vJQO{3KT*ut05}GU0FzgOaCP%Y2q*%y(u~3{X+7gro6@-Liak z9;djEsesk!I%+c7_52k z5~0dJcEbd~8$+l-rN{SFV-WaXt0>LH-_Mh?WMFNcw>IHJoB*(2Dr|ys@pfg2=gg^> zU@6qoYyr+x@$w_l?UA&5*SR+92`8s{;UW-dks;J|j!;r`W)Wc{5Z$NQeNdcEU1qpt zv#~Jfk!J<$g1(04gD8s5JwOh(=lzX@V{IW%T&M>fkS(0W+ODE6Q?4UvpwP{?U+7{F zep_Gp&gX9|{`@$w;iPPhr+P+6sU*kw<(&ZJwuzO{hCoCv@sJlVK6dUUZns5L*@)o`wxF;j{H;1g^ z6HHrmF{p}R&j+zvh80CT<{$gbY8T&=v2)ysyc?q7v+31Lv51%E;);u?QFElFEu%Px zG;X%4l@+7*^*y1orLSwZ$P&^U@+MuWHC7;Hq`UuH%aL4AA`6!6+tNFI_)b~bG8xvC z?{LVXdDkymY8T@4Wk&CYuyy(5g3d0Ar%wx$`sAa8az0da5~yV%2FaD*&MYuRaMwfe zNNsaxWsd=>`zF;4j*

    LRmUdu0Je_Syr|%z3l!sf8yExH@@hB+fVtL2fWw|Klf+{ zED|^pu`vgmqDKctYc!3jeZiL<1N>wioC(?c?q8s43uB_K7agM8DtRDvMQEfJfbLoK`b-nQ98XRHyvk6?b<2tJaPF`RNlaMy>o znz=3w%qmbZ2B?ifJj?hTz$dArIT)kq3bm}U&$okv+Eo)HnML0Za0>d6DUivc=hoI~ zvLw8k2*D$g$u@T&n=LxVo$o$f>=}CyC$J<9@4NkQ%FZNeJ}(EbcubW{Y~PtGv=?b7 zmf&LW*XOo$5$@9CHe=}iQ7DX}&+3D37{&kl_|JXJzOMug*bJ}7&>%a*fE2ejng_Kn zs!R9IgOSqkVM}$0CArr|yw4P)rQ_YtNk!RsR0rhBWP! zev{2!uvqNfE$62XF&#Q37t8rmcm{wEV*0Z$9b0|NHcjL;CZe6zA-2|E7hM?1zKT|6 z5yf#rR>l-^YAl3l>_?OMZHSGt@Y%&FVk0R~N-QBzaOiReJz<~L7!`mOFf^#4J{wVM zQOS;=CxVet11KiQD+>&PV8^+hT1i$ho3hd0&^w#4KJ|`BEG}DNZXqWuAsmM^%$Cs4 zC>$7NI-{M;kj`yMIKs(e%Vy|wO!02Pr`~hkh+}djNWdRLqsG%Y3z}LQPW{b>Va16g ze4=c23~NrPVce1oV?@)&i-M_N*%p>Mc4E`)wAvHZR*|@(bHz4S!b}wL3I$0b3#fkbSz>HVjhgq)loSpM+v+3il7mGs-jS6Kj6Qj0i6BMX{x?tOTarlOkNx*cJu6`+BG4I?1Udi8TAoR%*)J5y+AkYBFT-+Fv4u=I3kK zaVKG-dB>>aMjT@YgyJAC*vOYICVZWZ@U0m5 znv^hO5EdN<(+RD6h2elBtN78BNf7t_`LgmQ>xzX>jx+AIdJjP|HV5dGIHgYtG_NL* zi%2&#r^pEJ3YZ#VzJUeE??y-eT8~&-QJTG&VXma6QBc!HXNH`K{4#HBbY;Uu{IDY0 zwiO^rD37lU(e|}z{|f2=JfJv2`QUi?wd`kbzLWUo_RfSxj_NmgS@<KxpyTwse zOpESb`d%k{(aJBvU1NJXlct7Uf(N|JG>1DNHI4r$I&apJ`ODXmvW_9fW~$!o*pSYP z#iAAF1VT%{ly@Hq{_5rvY@NKRKyZ5tJ66r5NxqKR>-lx-8@#;lb;-@z8_7Y=vQDTX z3ANdmw=8N&f>da6E5%T`hA5?1C>fzSWG|9%#0B9oDbh`9#D$s^!+;3qOVc%Enj#Ee z8O6H0m*YJ2O8dV#Dh63wcocGWO$T)->dl0QbF5qU3gxF=~)sU4I zUbwCPugm-iM%?C_cxVWELJId{V*i!}A*!R5f^@4DWL$_=cT=^}0;d6y-doi&LwEh* z#VfeQ?*6-=&&de(v5wBq{l5YG>lGRWW?j$zeub|ql5~ZHUDK(ecW={1kZ4#_sL8#$ zKoNX?UaX>R&rP~7*)j?P&zsJ+c6Yw0xL@kaQG_$OQb1k@qdaO*38p7OQB`!t=gB9B?)l`W(s6mE48W8ZG?9VWx)v@arX zv^W`9U|x}*L@<3w0)pn}3WnWSf*FeMe&(^zfa>rOqhE4ZG7Z8P7uMPdG;UCozd!E{ z0=oPBH5~?#d!cjO=HFF2@+(#EXf9j=RvbK9D8+vD?ZlQk{?dwjUlVu93d6<~fpt>X z9Ws>4Bwj!cztCz%cRGt9J+f%6QqV2PS5Mfp^!3(GQr|4zOtHSM0nVyr_|RY(9(>J5 zcFyeIzeCDdVOwo9UBko@(Q$P6G{3WndM&hPmx8%jQ z+2*qC2@|s4B+MC9NS!LFXaJ_fO++l8@E`=e!*7?MBhcU{kW*hM2}pCxg~QFz17vOp z!p+TOI0h1R`hPjpt(4Ox(6-cIF0d0R?ZX@~0R5;kEe(@_V4(>BnQ?rKkjQ$v=-^MQ zC9ZL`Dwq=`J?Di@4C;FFHR}(An3!Xr?yQFWD967_gPc1zq!ZoleQ4uKBi{ZBfYLyI z%^2ro3x5_^Jo7TDVJX}JYvy`H6v~k^=LgJdr?#~z6f?L8m9k6dP zXV8z^YlcDYju#Hbo5QYaRM)MuD(P{`RcE)bs|W*KJZVIkvH=ZzqhzbvY46vG%+1lA z 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

    +HI00p9v-HW8872=BuFCjGaj~}i3h-QBba!; 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≠06_Y~8#-OM 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

    BJi_h1`MBl(RlXbf8F+xtWq#)4 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 literal 0 HcmV?d00001 diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go index 16bae41b0f0..c5568ad9a51 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go @@ -220,16 +220,12 @@ func TarDecompressor(file io.Reader, compressionType string) { } if compressionType == "snappyKlauspost" { snappyklauspost := snappyKlauspost.NewReader(file) - //snappyklauspost.Reader == s2.Reader - // depstubber didn't work, I'm doing following because of it: - s2Reader := s2.NewReader(file) - s2Reader = snappyklauspost var out []byte = make([]byte, 70) - s2Reader.Read(out) + snappyklauspost.Read(out) var buf bytes.Buffer - s2Reader.DecodeConcurrent(&buf, 2) - s2Reader.ReadByte() - tarRead = tar.NewReader(s2Reader) + snappyklauspost.DecodeConcurrent(&buf, 2) + snappyklauspost.ReadByte() + tarRead = tar.NewReader(snappyklauspost) } if compressionType == "s2" { S2 := s2.NewReader(file) 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 index cd6e5178fbf..bd836ef83bd 100644 --- 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 @@ -11,6 +11,73 @@ import ( io "io" ) -func NewReader(_ io.Reader) interface{} { +type Reader struct{} + +func NewReader(_ io.Reader) *Reader { return nil } + + +func (_ *Reader) DecodeConcurrent(_ io.Writer, _ int) (int64, error) { + return 0, 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 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 index a926861ba78..2f3ad377a1c 100644 --- 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 @@ -11,14 +11,20 @@ import ( io "io" fs "io/fs" time "time" + "os" ) type Decompressor func(io.Reader) io.ReadCloser type File struct { - FileHeader FileHeader + 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 } @@ -92,7 +98,8 @@ func OpenReader(_ string) (*ReadCloser, error) { } type ReadCloser struct { - Reader Reader + f *os.File + Reader } func (_ *ReadCloser) Close() error { From c63030037438e350f11871e831c6a93d0574524e Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Wed, 11 Oct 2023 13:18:55 +0200 Subject: [PATCH 028/430] fix a tests --- .../CWE-522-DecompressionBombs/test | Bin 7225718 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 go/ql/test/experimental/CWE-522-DecompressionBombs/test diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/test b/go/ql/test/experimental/CWE-522-DecompressionBombs/test deleted file mode 100755 index c08c64d0d3d4e9adab3e68e834c5430f429676ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7225718 zcmeFadw5jU)jvMD!3e}N2uKu=!HzYkXo4V#8ktA}XJDd15Tj^IMboG#5i$@2apEM9 z<2Y?p?AsPweOuewyH-UmRue!1YL$y3h!;ewdmJwyEmtMK&u8s(CNm+l{l4Gl`#irt z-aJp{?6db?Yp=cb+H0@9_T}7D9vq*Uk>PUwGF_Ls_~!rFc!~1c2}PN901v;b$aNBa zefaHx_iTyN>3+oX&v_oQQ9DnUN0MDxco6O*L%)Ay_$A;x2kU5;^K>XA4FAJ6T-b(l zo;TTW&XalhNBA5GIX`|opr0+Ld`sS)r$Z;<1cz6rySy_soc;8_eVxb{xa z`S&hOf4a#5m#d{-a=9G1OvEwfv9C1TV_#`F=jpW>;XK_$g1?^lcj_t;C-`ylJI~2~ zue-^n-~2tHJ+d*&e?}V#~+-9cSuy``4TH=5k#H;8ghChHjVLhHj@P z$;gyH8?D1;7jqLnnJw9_8s2sI

    O^%bWJ*a$OE!@;eEC+8mwZw2|`6v-9`1pAO%g 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�_KcK&%lmB_)lAgckio&RH zNgoNE8!pL~z?m%@a(?zG=8hQbKYF6VwT9K^^2eA@Go7}N#eTJ1v*9qy zGMf4^lJm?BWxk;qoQMu>Hg7efRmk=sRahPk&EMkgNQ#T!j9#k~4(~wf=k#EP?rzXA~<&#DMa&OH@{T1QCP;PXdfR7217IujskM|%6dvrK!sb_Dj_Gi z-CgGHtf18I^rZa8az=~=V+N5i864TwbP~N&c+uUD4GBM9NmU0fCDgYIV2h!z0628J z6-n!12Rhmi2Mh;rHcPXl2p&H!$WMhRqIR&7uJ=`oGZ++phTlF#TFbA+p?Xo{qOb$A8q zuI|;fx_XFm7^J2iN1&a-@hGXQKpmNcaRXu=pQ(o$p>JeTe#jrPM)2ZBq84>YH;8ei zfSL)45^auusS2E;4Eb0)qmer_!zH_a0zGdu4a5uT>0>>ybi>Fx+&2NY7471DY@XXn ztFxZ0myR$|piK3_+4{+=2Kj83*YG_us;9^0YD%=X51TU3eloa0#66 z)X-p%RYT6#Qt{QRvX3)eiJln0Efx zi*r&gcjiNhX;lQNf9hm^kW@aY_eF+-d#9?(i@p{`wu!r#)D6Dp!VqFRJ{<A#GqJ|-gbyL7(YMT(k1#i@GhBo) zMl%VUX7q|$Qe9<6r-5i}`cgl9Pjh(&Oo0NMRSbq#(Xs5R>$#!fbOzYXA!jmCM77m_ zN!(QK|C&>MuIdaOr;4p5(H&|)6$EdJr7}huK^P>D!}p5@XCC0CDf-ZnzQWT3fyMY zI&T8&h7L(SN-8vP{WIqQC+v_W)x?fJ_ljn~~E;||VY%#V$mYiNs z^pf&dfjVw-A0LR;7DQfPFLz;`Dw;F+M>r9|H3#{Wnj@pm6Zzm6;YI%)eFeR*VSOudIT!i3zm45s>fR%$xRXE%VcBqD2y&38 zZq7;_?Ad$s;tzDU+9>18S@tN9Jb#W|3YX(HIgYQ(NnS*5xv9;>pz)dQ|oa10r-#L=|&S}r1ZdAZwROG2FX$FA0vi?LOx3> zfF!DsZf>eH8W%GKMN|n!8(l^S;|X%7#+@GOvl8T>Ti|$Uq8e=h&HrXb}?X-MHeY@m{Juo{nF@5j*KG|I*&y8aZ;3vGjL3ObJA7LjH`VpTVf%7|!W)iV4Ldn@M*UcUt{jNQ z26v#}ro&DLA21sNfHXhadOY@0>GILyO?S(fD-)(DZV+k}XN63ksJ7_3-l*z^L0iDA zYdS{?x!)HCHD z3%;`(}gG9_K;#x19Gs7z*em_b@_?umu@k1y;`{dHj_QW%`(!RW+- zKxBa%GX_W;jga`sOw)*M^jYd6jd6sr;(ks3CZlPyRM4qthPq1QZh~LO6`!7@4qWXI zPZ~~In|`@>28Z?EA}HIWy2WVvi{Rm!15{$NWz;&oM4{USTe?`s&`CC7xRcAN>~gd( zDqEaVSsWfBXWQsiLlSx&UU~nFh#gD};o@4<6Zf0-Nvo?}V|{r8K_u(J>p`!qk=;J~ zEZjclH`ubQPy-g#ud`Dmd#QAgV$=Iw{r%mW6KRKyj((o+sjO$tp<~0^XSJuxKI) zxS0fWCGyE+o^LZxX?J<*Nf6gS6- zXr)%V)PB7GlQpboEQc^~6h}nb#BvM72KPM?>&;@*KmT{}os>&nlw{whx$8Qo;*&|r zEKSN)Nm6!Yrzup}9eMudMZVK$>3DfuAz$Sk)zc2GS!u}N92~P?;^U=lmLGri1jpy? z@o^U9$sQjuDpJ}}Z)jTH@_?Q4sP-FJqNM7AEtp$%KhE+(W1yu`+kiWPbC&QCaGHhA z`KDv)Ix>&!KLpZUauLQUaOvn^SA@_1-e9p2Nm^#9vBHB=4eTh)i1D-4*mt) z8aSE*h@aG;AINA*0mJ5SU^La+C=b1K4WUfc2NM|_UHD@H?pTy3o+>G!%%0w>Td#E( zzWX*X{OD0s48n@d8@S^L$Ivdt&1KkqXWyS{7C%QtHNQ_V`okUUbj7dDITMk)8Hp9h z7g0Uzoj*2rjhut%tWmPOBUMg$wJa}+@>)naG<(tVmm}?aRIz;$6K5B8 z#v)7jt^sai>30#LJ_R*9%!3~rVL5%d`Y{aT+|MaHYV(mt>^oW(_jB^i)-pLlH}YH* zm8};$6x^;5ju^H=)GuCF>{!ZJ!*J= zxd5U9ckse!D#8U2=+G10c;*G#{VW8ggTKgZzZ^3XP;+La?aD$&g+Z9ca3t@4GUr~h1FKrS}KjPx7>KDxduH0S1q-cM)qbT`XN=P;gFi$|8W1J z(R4XFRsy$(wqcY2^-a*x;7MQV7qfUWy5w(BYZ_o-&;!$UAl7%lGC$>S4fy9Y5Zy?o zx`oWa-7UxqEL0;Hi?D~@pU(~)DQR8`UWEFvi;7dlOpH*YWjP%Y5PQ@tPcuhqC>w`O zMC1jdWRe#hG!NMP#2>U=8~mft0WTD!JvqwPq60QT6eNtBMS?hZU4gCoUqMN#G39eYp z`TS>aHbHawSMj^2FP@4Yk!0u}Ola7cVxO93@x5e&(XH z(`%B6?AUPcN(VxFX$jAm6hsY!PO6Stt1llcgUDz<6+dFA;uZ)xCbhFEtGDl*LZF+ zE(rhg+h*3a9u`)w{)|zRVpj|2Ei7Oh=D-7MBRt`8c|H-F9htUlt39woQm~?*E#l3a zIWHrdee)Wf%jopj*Gu%gy1()TbRF2|_(_3fa&2S*RNVlyMc-4QXiq~9?VqO`3a;Lp zMMMAWFf_D#zeMdk6Zr-a-FyzQy346aG>>9AH|hMhGyjgSoDo<|7Mh?krPuiPrYdhS zK55Q*<2Q=QDdT_g{zT5vFc?Kzt6J0^+C^fLsOP@SaV6e#hV->1Zt8EXa4&`P6UvbT?3- zkt#7rLw0Dz;jISK25EM0ay=KTxAzHYVxG{F zw+{J~5C7{IsqMpJQ8wC#=6Zg0OMH3iXq(1*d6D*W{EvX-`r~yT8343?n_i6m9g+PT zdqG^{wR9W;AGF&}YGZ0u7M%_O-Jb}88uQ%qfaqLOv}m!s086MS*p zT8aCT#oP0%FVSml8ng}hGDkpE1YT=xG33)?P$y4i<4CBkf?Nr25 z!|XF6>RycFAi)c}GOrr?8_UwP728X7ry+G>{pwYc$X$^5^VG8^oj~HzzL0q9Wu03C zk8JD_DcN%mN`(KWaU=$9HCmT~i3e-N(K&uP;>Ar&d#6BN=D>(8hORlv{|QYrL?_wC=>%*=g=n3pm_LcNVENSSQCQg0P<`&>t6Q za|b^5k%g^7_g>?v7ij7Djb$4m2Qm`9G;0rlfBwb;M$^@xF20Oz4NGoA*^tsI5815( z;Sj6eZjf(@s(N=Z>wzKYx;%A?5HbjKYDSZ@@c$ID+49uXu1nlz6t*Y$2`N5~!KXK7 zMM@fo8~o*6it0_Yk68RqlfSHJyi)TQ@(BL&ED)#we|M3;)=*{WEUsKG<0cP~{!d9?$4Owd} zTNl}%fxQO18h05@H<6)lfT4O+%2&@`1);~yT48dNe=VXo3)mz4e8>71mj<-DM8`sV zBL!UtDb6;5CskMFiGJ(h%z6OI!Q)Xg+WeS}#gljd`o_FrokPM%kbr@4(s$0nV@Tas z1$um4laRr5l#Z@Iw0Z(j=!eh=>_2f^Kg9RJbJVFA?9ji}uSYLT>em*~-&McbS|v|3 zvf?+vwK8@JB7S4ZGoACJ8krw)&j&oKoYxG&qzKbk+Cd@og!!l*ug2@>Z=Fc1gR z*gQTT96)wHWIKzpgBXm%XK%I56KA6kuGXTf2hLc`u_%G2?SChi>M_llRS#jcr&+h; zbf-)7G^;*snq`X8+<67?p(X2OvX>Kombx`kkwrwS3UE&`jl-R0 zRu#I7p4p(M)nT6*kDEnnp%~$W#*nvH)xSm$(rE;nL5}B1>u+*KQVt~bLC>RwBpL!l96lP#l`Ost%Yg!&X z=X#MqABIPOfhdKNndFjb?t z`B7Up*@wxpAM@u;btM@8B(G29q6|Hy!!&9Nh~qSBGNw^eFpaA86UyPZ?PB!>NmxihCq z^j+YRA8VtYDpfCrJSPj|?2EIkNXZC64`u#Sa$W5Ig@PYZRifWhS^)J$zr*z6#}F}@ ztr#n=$6QVH0IGT|=P5G(IQTh=6Yqu|jku&k?*{0%{Tt8BXT7w4BY+aoMid^f9COuf z{TpcmQb@q*-!Rq7Si{!-4M>poZ|DK(f9~J#W4P+{Z=i!(8{?lt+shb*??mKakE+b+ zsyIH)U{yJ%yWbZ^Jg0S4dRoV;)r3(_FP1?>?0QbR)CC{fV~N`{>}XB84MTpNaN>ptA>|t1n z%!m0#P5cK;ME|SAK!Y8B&-wELxb4Wy!mWAegXfBwqxB;1Ac9`B=NFrZQ@~&c*+`*1 z`5j65T#zc398fgeGNotTP?YwpTPsQ~om-dZcOi*Z()17o3xnUdJk^2~YTjSkKF&6E zWnPG)I_HHrTo@@in=sl~uEM-R?OcpZPC{v*-5y%IE~V- z`@04IARE6I*Yltf`Re01Bn;Zn2w_D)o4!U>UdZgu7%n z-rzM2m;79YjvRVVaYtoyPB}27ZD}EW#u6Spuv3EpS&-=n66SNV;AA+jZBnp+n zQR;MIK&5MJTSC?|Z46Nd!`i}DXsIx2(&^iE^9ucza#(hMDvRdUAgvtz^sdHCGqSpB zCqdsG|$b&!ry>gimr*LOZ^0k6eK?Z3JPoaimdiDl8em4IIne1r9CcHd*Y*?QGkw;+e;fl%FJo|n< ztUrNt*WGi?5_jm5q`#bkJLe}sZd2ZTUW7v?~CyS#ZiSLk2*qS&4 z7nS`)=KL0g2Ubp#`<_FVu3su|7h45PQzAM34A{l=S@z+w;*V7 zm|WohF%aWIw#|8gSRZ^j$}DcCY%Rv#I$F}8qTw)UHX`L90Xqsd=2gUey^`inOQ7Lv zNne_WbTc+NBUrr0SRxbhLj-RRi>xvjZK1Hj2%mQg2OGFv23+7(1&!Lx`;p z#HRYdLfc}8Z@h39w1SM$WCA4=8>{L|S977Jf(HC%HRfa1Xqi+729Wd#mWY#g(H8a# z7CMvYA?pK9N)~$0guYppy9sz z+-vS_X7NP#oSVfyqf25DEDMNvKJp+_j^qWxJPxpasWd~-Z5(eAg1W%{(X#(?IzEHf zMOQGVI0K#K(Osv*(j7wFPRyqC7^gPJKehhH>YtDZd%ThVZM+;4Fehqew_xzY zS@K_FK@wcV_=PL3`WQc4BeWmw9lDx(H&@?u^NpeJkNe&%;qR8v8PyH-?pYUx`i1Lz zjWinRg~tV1iJp3WZ;R0sL5$?N$Y`36F!GHu8hK4+i@vOqg*5RHUKjL!A_{qkzHnrb z(Kw1(5OWG+MvlIS{zI>hGn$4V!1&RHAc7zIVfpc%OpYAQHJYeu!u2POyk}ZkDa1Ee zN+=i^@`UUAfV5XxUsM77z)fFG>+mWi7K}2QRtTCtMVdcG<70S_|2KY)!#a>KqY8>c zy@B9!CzP**oTxL8?=(^~_P%hZlr)U(u*6rYs zqzgxm(McB-)eTA}Nx2t|9vwQFP#0b#osBJxyV@3yH&@LG-BEYT?Kk7Q;(pZ99fI@I zmKhG=k&+3wQf9D$M*LU*bfo5qZ>LHPx@!S92%|@+YgRz`5CM_wi|rG2JU5vgJ;-~b4pUYSj^3)yBhI=6TUkQvBCt0X(T zn*B!Cz8=fTYB&$)PqyW_!izuw?jA(VJeXS-V1(;qJ-}m_9TtzBz_LW|YT!_6TK8=R zA(%2ElV^imyGz}GHtMPYbpO8yKu%4?P0Q|z=??S|PTa|fu;^W0&dlIix(ZdnaUK|S zv%@@YAuWI(Rrvsi8!oBDavE#DZTl~|{|saR6?TXOYtRt%_HdsGPHY-i(s0(%`Vg3L6lu#oOm1P%o z^H;31ER?_<*TDSzQzP(0Zh2Y))(;-zODt#KVo1m{Tfj!WOm+(>N-VYM(Cr&VPG=;m zE;F`c4g-PiDMqvhY0_*k?(8whgTx;C>>P%uoO(Nh3|F!%4lOK$6gnsIpdyenImAH7 z42>IckRcp>09`yDxn&cbm~x;OLgH3!TiNmm#ji;jaJ%E5-=-Z!Omv5fU7_JD-z)y1 zUAySp!88{l>sEjKN7o)CBfNSR>`6S`1vg(ce|Rj!F2hd=uEb|*zPe?i><`51#XG_P zx*K%b==YE&T>~~NK5(_xBVUo)XT|i+GFw}^ zPm%67=uuvA)WTibs;>MK-5RpzN){+>2M0PJve7kJP>S8$cvdEQ0v+pL&J6^2fq!Of z9IjJrpL4c3{CzX_T`U#tv@g^)hiwdIw1V@Pu+!VDL--)A@NXeFhBltQ2VzZSsa}5D zSzRDYJ?eBy7Mn?Ij`%C-qE7ohtnGV#Ay$~!@R^v#u1^AUY~EjHlZ7M*nmqmgwtp4ie4 z{LAdxEb}RO$DUVC$oJx9mE^Eq=M+(ItET?EWGTl+*_zFjQ+#Eu=>7Wz8a?;lq5u@n&3v(vsP7!t3tnJSo0_v-i6LE*pBRW_p1D-NLo((W6d{-tvCg(i zX{tgBt!}E7@1LNlz;$UQtOPv?TxcNo!^by}n@K5LmxdB{qG2~{xM1t?t<_iHa9u+5 zPRQ~zy0rkphU#n}r^(dAO(~UHrA28GWgKfH7)Vd~J-_mr3)p~#?ZLZsjiIGg{*+M`FJ{o@OdGg;EKoQyx`*}4sy2Zoqzp-Q=J>+ENSV}B^cD3ZSaLG;5Q zr!eXM-QQpKukp7(4g7B`IUYZ|d7fJRs$Cl?fZ~#u_-(Qdq}Y9&)sjrcS+U1`MNofQ z1wG@eLpFToN4Liblecgw)JaCs-*4 zMv~*BlZ`wlBx*z1#T_F8*80G~cM>ND*@@Qk)24h%<4`F};CW$ZKm1Dj#0Oy{2_M0C zXGl91Z~qm61_``x{QnJs_!j9qHev4wJ&!wtJ&`0VF$SL|he!cQAAuM~S~%j+T>?l{_sNMizeP zq$@`s8V%Vyxs1%TGewb!-!*{^0%poCH}rY%Q8=2;OcqRL{ta`fZaejV%FG+#zf0pE z_n$Zs>JE9qG51YsCikV#OSnl@A-K{F3Sj4{NjiQNtwFJ0@D3{sT3*aes91geNd00% z>bM|_k#g!Nep2d+WXkuA&w}RG1Ks+tqn(r5ng=UBgqFe@dc)y|XWbh!mR^OP-_mgS z`a^TBGL~|`RKwvndVcFNW9fehX^r@0+{(Yz_r!e&vD_^MKDaaZIUC@?f*uH_yACJ+ zXs)WOxKRg!hd~{aXSEKSU|GNAh>kY`!p7b-jnMdN=ScPtjc^>Jj2AKOgfXU0vJusa zd@je<4>gTQ#tM>ApT0c~XF_7RYk>gk>m(>k;9s!eH}OU+nsov{o$#j;z618TUEQWF z2m{9pz#$mg_#PDme${Lv@Jsvb1^jlz#9tKnBbR=D+x+^5!muW(Ca7_$A!=CE{_nU)Fx2AFOHsgI5Ii8`rg};?IEa8N|hZCb-7EyZtA|(o-N% z;9tYxWh1VA$XFT?S=u$?r5}baK@m;T`ei7N?I(BTYtEUf7cjB;OrcM$A-U6teXL*? zbWMFVrHetSVBiOWP`@l;K#|&@>`E7j{Haq3-ytHtz?%E8$j{|qy)8fMNb3q=evP^h zuq?kumwyS%-;TIAhv|mHQoAO(D?gTd%qd^?f9e`kDbvPKMfur9_#YAe9)bVGhhMfC zOMeA+2>yn{=A*rz6oQ@_VONG;Sdi0P=IaOh_Y<_#3Ix@iXfqWgrqRqWGz=UdNDwx; z5Cy(|?%<#ujy4*Hdl}JYc?kAKDCq02eg}lodi~jY2tnf@v`Ib1cKi&f@izgS#Q)$m zb6*kqCZBK9w+zX4XPKd<1Ay$Bq4r^yiTVTKA5MjTD1YY8(D|Uv)*qoN<2lW0ZC~5) zHEIjXpM}>%Rm0&A51$Qd=cnS;RH?P-qYFqS=OWIP^Z2S+Y$`v+*_K$pwsi!@MsHJKR11nXl*i80# zq@Ef@jgJ$7#9!rXKQUGW@YS?U_)gwHV`&-iU?R4(KQESjnFA3q7%Nx>PM9v?x?l!eTj(CX=qFlobFzKAJ_?hX ztqZu+!J>|!Sv$uIHHq>Z%kd@C-$uH67D(c&IR@Ds0E00GWE7CEiqi}DofeZ_k2xIr z2_nQo$yZ-c7-Bi?P8!;8A<<7GdbzX0Mz86=u2mO-H(o$2!`mynHNUmKK>q`LlKhQ! zIUAr4R0fc?#B;hO8u@r7F>NTdAPuAX6k?*$;8)U#>=|T=bJLZ>0J?o)7h@Xc7el#H z6{h3)g%-D(5JoAqj7vSh2uKP*-~(3o+Txf@zY`HE2qcNA$wJUaXQ&seCVXM~lP%-^a-lYHOA#_381zu(I zm1|6D+RwAOdTumbhYaw+V;dMoVR*o?{*{x1Z60mhpkp1wcg*x^fEm+USI~ZS0L75Y z85~E~BGa-LJFv>)$ybAxcXV{w9{__UxkZ8dChvcqk{>I@+5(pqiq{(VK8l!NtTeMF zSiJV0v&7vvcFsAjRfW=m&)cPK2Y&|5&4zwoi;?%<8vzt3ZZ+J4( zmo^+eKR>hr{-a=V1{OTd3H^==)Nk^Dr0h$%9JRwRNMHZK9VT}o4Qn+s4zX^nQa4r$ z8$4L8;i~MX-Bn9!!`)w`owYFo#hVvt`p=vR`p>uN*BD9v^f{paKpW^^T1~)WSf5u( z+dMDjg8n`R$sc}x=sBXSB*~GrUz@my_2AoP+Yu1D*339U4+q?F8(Bi^p3Tnr|4#qj zeeY6UZm0L~N_d(%nU~D)@6#nn?=I)=dMe)N+ad2@5i{=QODyMwM+yW^;g#zGv|>T4 z2*4qE-tS`sL1aAyd3YC^&a=!Xo0Q;<_96my*2&Lm$8|nmk(C}kdcMeWx<+_?n_p-B z$K5)sX=km((~YbYjYp&&GGm8;s!ex*qmA%kQ;1_ZKRx#>ml}Wt83;68Rp($I4WGZ* z33kM&S7Srwz{R{uN`}<5k^;DCFv0QT{B4~*m@fcB*lNOBZR{V@Z8Y^jlb4Ey zd?cD8RZkTCfC3v#^!}3ZaEemUtR3+O;U8DiR$!5Ka(ABcL|IcN@l&Fpv$-Xisu00OLTUR{8g1CC2{+Vk%1rGJI-%t4OB9N0AJ*~vlf7{cBrB4rW@h?>`w@S5H)gIzI3r#xK! z!UWBm&n@6(n{ZHUys(z4)4uzT4FAl~ce^kV`gYge4)jryOCg``9}?Y9e`)>mSwXAh zAMN+DjLc_ny9Qn3^S-ZZ@S;uc>&YWk`Clgg{5*KcLl+M6k z?7I9pbDFN_U*DX%CW@6DESgINxP#?$IYb@a{|Z!*_%5(;m3T!Ek^yZ~SP#UtbBN6( z=OjO;U*#P3nY_Y0zknRp+yBn<=ok)5ByeMn0ZpFAjUpIxvckWde>XUt2?Fdsim3aX zLY*ppgcA#N`Ii@Rr$~1qdn?{ciYcseemiBzZO@%L`D@2J6)!qZXU@f)QMgc&;Z$Z@V+^yi#JV?{?Wc5!(yLgD3ijoQJ>ZCW({Qf-ZNDn4*3-ZlDjLT8A2 zv4p<VkO=-k;cbP4YH`Jg*gwGWoxl zvl?gkd(QsNPT^i>)1mNg;w(e&br!$>Fz+{B;KcH6F*Vi9_tH%b!_)OLpDgmQQcyGZ za?A0nc>l9Rsnso7fVhRWTX~@?o z)8zf|o4HQsTRif{vqnSE99(EXyQV#`_@JiCf5(k1eUJoZb7k^xAM7Z=e#EmIcZ+_4 z77^{vEA9N>iG=ay9}YObCdc3UIc`Z+s5e@#fB7^HUCM19taKgic0#WTQ%y6zihu`Z z%CNV;70_xKCeq=~;$u&K$ZFUMY*1~i;F4;xmjeW{5d6>R3oIo^La*LEOZ}l#9IyUt z4t25K-abrkb1QML5JEaLRTgTTuC-44jyy_blqipW(AWof_r(1~RIL5(CUo0gQi zA(c3JvU`>Z({sb@LSl#FH1rrAX@4b~^VqJaf(ueuNc@e|`w-LgNBkqt_FwKQ|KE(F z`I6iJd3(v= z$ZVFC!Dy4;AnUR+I@}#y3PwEld3Z!NRMQ022JEMB_4TI5NgoQ;#pa!2(`g2(uS`Lg zUiV`lx;7i4t!}e-*&U*9F_60tVLvOc)*bw-l;WnDDgv=oUtz}Mo|G4^6qztuVnQYf z-$9;st!E$pSvMCsrJGGCK3VAGexUQON;f0G_8`ED;+$@)t&;vgRdMsqK$YWb-j2vX zyZDgY3~?$;A4g^Q6G`-!mxrH`Wh4E;zhnnLAb{jIh0au9h@Ka~(rW)pKZNM*=+__k z?|4wJphp@6E1MKU{fgD}6aJ>^qWulk)gZo>i&-7xbiUz4Y~lZM;?eiN%`6ZY1v_!o z$t)>%+Xt!Rt4EbMQQ>kE-&I}iYaSPGss28clhZVq>AeiF++!bNvCW&r?F8pi5|f8j z8Hf#HqEU6YQw62Tvg5n!%TxOHt-mndi6=<;TA?fs_Xcjn1&8#1cg17g`t+?|JGfEs zo<~UqZS;|if7azJ(|WUUL(8;J`w>g=q%Z6!inCZ9S}ZaT$*x|~)% zNQ$4nY?Ei!Kxm%w{;-C^`A+`ji-y*`wyxGYr9SX+=GIX2_bBrKS+l5|?Py)7K-9DHKY2xdU37{s zkb4lZDO=XRv;t7HADZ}k>egVx23k!nmzQy1>h!P!NGUkeRRkUUfLO@{-#)%#d$Iz_ zq#B{cW>dG;ugnm$mU=cbrmPn}r0BZbNk3!AL2_$ir+}-W=*$|+e}h#!$sRJi9AB3R zt1Ol15>T-;GI*qZN3UL=4?VcC6NP645=7V_miKfdD@0`2eP^T|+gt{B@ik&0t)p7_ zUJX|Y4C(alnoO zR}TQGF|pjI;a3(M(lE)ow+V}hR}f_3>J{gSgOZSK?^o^a#q*9k^O$Izoy(2J;%w`G7ovIi8u_KvdJHP($ z$^2Gkd70DxCYm~xIHMyk6g{;Qut-f-w{c-jYh0x#*m2bp0X0XGos*uxQ$8btWd|Gl z<9YLJn1m}fQwxB)Z{FcO);smBqz0&hT>9(TpRm))eg8-1|F{8q`(uH*#M&0M;1tHg&T?BSvdMdVH4Vm zrVD&FDdh?=g8Su?-www|uT3s-n;tv zi;_Q6cRqDY?}%l0_4m9*5ppnM?j)gP*KII=y#&o;%J&(|Y2H{Wy|EOf#=_tj%g<5s z@9jCB_x_{zctld({^yAv?98CVtr5XdTjWcJ8q2(Y*Byfrqeo_T&AhYj)K7{C|8zUt zJv-H1+^y5({XJIRUP}L%+jsx+iljRK6{*Lzb5N|(lm-J*$>#?**rE0AKldN*zj#)4 zPHtn7|4D3~VdIuhK#du=K6%nCMqP$?@n>Tu<~)U{!9;UM0g(Sm(0x{fHN)Il%lI*w z^sdjn^ScE+; zANJ4*`|{(AZ(h28(-o3aH6v@MgmU6Z9vOPEFkB}Xih#iw+(!QzX(53i>V4tr$IlYY zz~wLolEOWU#_23}gcw6x} zcw6Jc@V29VZQQ;|9Dd-LUAgnR0oUjGke~J7gLRnzoOCQ^;zIC;$)HZ0m^!7$eFm#s zR|l@bmnl%D`wI2FET2YLzIbm3PPbnfXzV)u@LSpQW!I^(?{zZscTM*E9mQ(QN*(!X z>r<40V857-TsY&TtjTIC?`yJ>HB8ne#0TA-D|%1Xpl*;Q7hC#I@z);nGun*C&dDF% zv2%hwE%E(vr-JzGL%rsrXZ^#um#4>XS)!@183B9^ge!ix6 zBr6ezAb^T-*ovHRC=+PmN%Hp|Y8z&BTnd2Xy;*ph`f27r`~1Zr$EN}*i;QG$Z;sTo2h{wzl7*Q6UD}aV!)$gUp1tA7H9?Fx9D=0?@5H`?q!mc$aB# zuheC%V1tfSfLRkC(va;8u|I1yLz_$d*}dDoxAbn_84ou8|b+Fl#w^3Oz{P^?Y; zQ>E{#oHv`(wK`(%DaR#eX_2ioNAQ~3-esJ;`y1}&{8q|?%c8Cwgw|6weo( zFwr%rDmeH+XvLeV_AZ>B{JA@BbFVM-W^mL<9Ng;NFeYr8MMox=rbq-Wi^6`;3T4PC zzA_jZf`Z;mJx1nHgm1~`847IOymEA^J_}B0LuRpp!e6t(!+~1*#e(mqmecL{dTJ@} zOe5__uHS>Hj}E_nbDO-iE2>zx)Q6FFY4~8j<^eWo@({jc)vf4?Xi4=eYJTC~KdzZQ zL*9v3zSN0VjDmOs_Zs^54mAc6#eMmQ-jiupk5Sc#y8i4 zuh@WO)^~{cDftb2^oha%LmKK1Bv*yLzSTirhL{#SM_ivgEu1SqgNk@|!Bn0}O*Zr~ zgXiu!_N#s?d2*aUE=WV@UX=#0p$`Bp{{N0|JQ&NoQz29N9aUpU_~)@GveFQOFd-hJa* zh7}#QafuwDLsZ1^w@zf}C>0D5LnZ$6vmTh7{5CUIW>#tHy$o5I748sZwp|qW`un{# z!M`w~k3naxQi|#|yc%s!FGE7!b^`E>6FiJDH8?_(5Llvw0YyQw=F@cTxY{4sBmam* z9%#{Va?yHVkjbIOHR6#6deCU-Yb`zOXtg~w9px-Oq$ylfu)@rwEDsf1TYaadkHiaL zgIP0IU;cubs~_mg=n&~&OxKCsr>pR%y&w{+h)&Hc2jvT*$H8UJ1pkO@^Z`F>W#o^t z>%Tfd^bSxp(E)_M?{D*l(j82*$~A@ynN`OB-(whN1do$N#n@j9n-RnX|MKqe2M9BD zgD81_)&yp)oqihns!7qmSD*%Ur-_nTPsn8+Trv>hBmY4)@$;gda%wKGx9hiW@Lx z$?rcljneP50-*NSn&;>DfG>JaH~10@J{-TLhX-tJtfsMCEG%@Y3SRwoAm?_B)Pkd= z)riP&T@GsJF2Ww~;!sfT>Ri;r4)o_(LERMIl5EpO<)^vmuM4vhmVca_a-E0YE}Ipu zzVYG-IYpj-bIE==kE6rxEhQwbt?Qe)=2p$wJIwmL_`g%wp$A0-XfIlXoqK!}ttKDhM{;>ECwXt&d5ZPZf4Ac^ z_&VmBV~VdC<~EhE@USnIa4$OOTK+M*2T@-|d!6CioziX6e}~obsJSyyOe5~^iGcz8 z>5s8U5>@0+D&2|mMS01+39-S`{f~N2C7(y|+f?nnt<1<`xdg+{he*~hIEJbJz%=&+QMr_VGG+EV-|Bm z#O%)DM%;bjYxrr`WIWM|Ke;ykR0>rYMzZ+rI3LLM|FHSjI>&W{;!|9cc(HgDYn|uB z;%jqrMMAr|O}?h^wyKj;6*nfns%TLx-obMvCFfIsU?S$O)cw1T;}PoqX=$&!6h|Fo zr`BZ>661K7pJx1tacT+CT_Sj}6nKN6fL=2?Z%zw$2*b6%h1CD0`7Sw9QK$KVrTqfb zi%UgJ)W%Fs0Sk~ol)Er|Rw5F>yE`eD8c!Y>w^!4CWYbT9m+{yUDr;$J zTs?JzQi97#jV1#ru{w|2uwj^fLeZgw8wokW)s{$|vthZ|osZJsilX4)oTtTFnfezg zkLwOWBi6j1_>>+Qt_#Vl@UDA>asf1|YiY&5{Fi1WEdNyf`_=+A?!n9v%Q^itHI{*f zs+JwlOf7j#UBPO~DQ=ig)n(On9(2OU5Ktlg$>~V-I8HsjjsP_4Yr6fTnG?HuPW0P* zXpj|9yH4azdqo?8_C#JV@-_ADM9pm{`Zc{oPI16LWvx^7G9hD1E4tS|B^i}!513M8 zN(~|qHBbklakUnV1t=@He$JFo#M};6t!w1K^?0ghCm0#HKJi2CyiF|}$VB>V9lM+3 z+?I1`@pB>?nSDfu*150!Ska+%=r?E+@RUpULWiH=4fn1445eQCsg%LL)!tb0Gv1KZ z;;z*Vl8+=<+!Zv$_rDp;>n4BnKY1FAPA&>Y3WL#Q`7H| zQeef*%7|q(fEex>8|`FRKIU6ZN-eT==1+rsPSQ-I;M4kvSZ{Ficr{geA!wtRGo4%< zCO*D6BlE>c<_nKw_MXtlwu!N^BLY?L&K({Q^b}j5oW(OT?Wl^m5rZvxb>_j8*wEox z-qfo4Yo95#Zyxa`Z;oO4q3`tbTBB#wK3l>&A^*jHsC||nwEL+GDV@TN*Jn|GePi>O zz zn?^s~F44=3Rk~AuX&%oTM?2fgRBg_rg2SGja2{FFbR zx4qpm2Ex;}2DbvZ;$m^uacyi(9o30`y;S^052UjjLsMJjOOPLl2M_dNm1m3ytH1t| z_A{2CIY&qa9OURZ3^%#=epfiwt{Cv`22>|D&FH6{P1jn15gR+e$$f>ao#Eu}b~*b| z&<+`!LPtN2evw!g-bo2ka^&TUWGsj9kKQUOlBuv{`&{x6WG}2S_oO!Rz)4wKS7XE( z7mMdYH$Kg7v*CW_&R!E?&UwjZxtVS+aiYtNtYr${qG>Ca&o}&u50jhi z`(}mRN0xXaNn8cn=?Qh_+QPp92H?S8Nk+}`O=a;cxMZ7PEX=Dkl*<=`g-v z{;YNHy-BRW8p`Yu>S(@9Z*vG)fD%s>m3p661R8M;QaV&7rrzNHA?mK{yK+x!s9R5S zc#qw2ra_vptE;B*#S;vvs;%_j`Asz!y}5xiELQuUym@vPe?M^YYKvz@Zk`>C)>a0p z4$Pt0<0gtk!}yRAVPy!+0&$L!o>AiNdd!g9E3+WCqiD^Y`UE;VLD6IUPqw+OkPx)G z;R>FT!I0yg#Z$YAH;B4kdt3^B4d>t4X3D`<9c;Utk?PXQpA|f}{q9w!;g{&w)p>*f_rV2_HW`EXzttxaS4-uN z{y~99=PXr``^~V237Yew#F1&&p+N$>{{4OF^`9QDUOFU{)6d_!1AQ9#fm$_{U!()h z7d1AtR5y;0aoE~IXW{BOx@fvWagj>rFsEdRs&MnDJ!(gHaxGMu z?arfHxh~>ei&IX@@Y8#EkMo6=_;_f13RCO-t#2Jc8OOzXBsiSt-5vS|AIcHbrL3VA zUv$_mMsE!5AM>u_r46LQQK2?`yDtY{?doKK$(~cs_2Nf0hAL{7HH|t&m^vF@lw_2D zX^fG_jsE#{(N6eKkv|;c7biz#?XTOv%FNk-K)9`cAiU!Md2jnynK{#~JZ}9xd6fT| z-8md-)YV2knH?WYjt%5K`vig<#9gF=7B42Jv0pGU5o>x}i5(x~%8A~s>A>QTN4}w7 z;rDY7mr%#EE zJUSGcksC)eUc{@-gF;n*YC;?Py~-3`6rj#jD5oXAzh$viGT35bYG&Fk0M z*H1s&d)@Q@2EqsG{NeL?IG)2tJ9nVBZ606PLBTDyP#nL=H2&nkNy<~Sd{(tsCPy#Z zSQd(2rM1{y`|BDyU@cy!mQc-Yw}hfMvK9+Z2II$7vj6hH+|Nyked%QC0)06*u>W^v zHT=OU7Z0AMMVX9FpzAqOz5<()b}?QHmF^BjXg+eI7UL=wV-<^W6^n6|7UR`W9;dL` zNd>`^=moYV>Bp5Qv#LhfmOPi`sf(;~pEAi-Jr;)-$&3s{w$;j4Yt~1!A_`#+t{pXh zeCumXSJt-N`lXzvOQkM3b@=p7mb!$sMG2tiE&rSGsAXTQulb&COd}aYpgDcW<4PIM zWkCsj5UDQG9*T5?BHNgP#G}k1;8LCbt-JWOrbaq%&a5>xvt^BOplWn_gPNQV!8SQ9 z^MR_$bisA=CyhiB_p21KJ2d33`k{rZ%#&L@Gw(!i$*RG2szg?qK$*hs9#l}K$6dTY{K?d0A7d(31*-P2 zbt*c}$Nq-E=sg_vE~{9Ezk&;^#NEs@&0o2bd$GwMKIFxR7>85tM3z0w+u`cgf#SLx zfhPTl+EAKY9Xb(X+TfAr44fbyx#+?;yDoB@=+q2gjD4?aZ=>HRX=BL0DY5s!fEv@9 zYmOFFdnzxiX8E>e%^ika)3*&B#umY|o-sV@gFbl{MdC)C3jK2Y!-@KRN-M5W**WMU zwx3-ru<4+sdgV}!rY>ClYx4tPqO4MkUixovpFU9%7D!sEzdTqka#+x?FY!zAJtJ^( z2hHZ5pskm{VDF^TfJg6jM&A_|F9C>?fri4A+A!zltuy?E?U|g`W$x_dj_uiqHU#*q z186XH@wu~8(tOzx84#W{pFw&_9RF(kjVD{sHRP>#$JiS;ex4g9kG$00xTca%#^{YAZp4M^KBIPP0|55_0#AL=tQyQN zPORCVRw<=F%$@1!j-1Rrg&{H3lEzLn(nhmr{LKSQ;bKj)51Fg!az>+;*g#iy(b$?VJF#D=h^ny{ zII2Ove`{{|C$Llg`C0g6J_o+8c42@`h zX1?6=6nti?5}%XeZRY3X)clYDh6Zaj`bdY-9~X2##>GwEk{aZ5QqauzbJE|359KzU zYg!?}gVW)6HH@>)aw#-u-Sf^u5nFhMOnoL<{`V1?_PcfN_RBno6%2c46xee72a7o# zFtVT<8n{=cAhN^K7N?%}!&3V4V1$pvdn;A3LZehQvDK#FV1JlL_&{!RK}B0UNs^Be zPgyjqYn&hMjl!8PK*XjbGGJ85XSi>fNu5tG7b}Bk> z`n2yl4nJ;5*Gg}j*veUse-UWDiMwML?;-&Qbz^0&R0!6tJ$Yt$_lYPIBWf4#=<4$4 zq`vZBv2I_$f7)6n^0etRHfRe<1>4PrZspI_TdAutedRv?)!X*@uY8_6!^)erLGH>< zd%tMVbaQ=mdz_YL`Oj#dn@7`Xm92Oi^uav)!FoPo``+noU5DR@WAN`Q-rAZ&E2Z13 z6z0P2CG5!vZQy}j&6x6|SXY)5Q%mbwrqv)>T1I(<1EHR4?h&LEXY{eC7-<=jvP<~# zT#qCS0*VBS6WV5)rjK$Dz7n$mNWK9i9Rw{UW@3q3EVw`?pwT%qO2K)Z?vskZF}`B| zolCJryf$hK3J_9<{ljx**T7b$5j5N6UvdGrrQerul91m#PZV>@x`x3d9LeF;W)_T( zUs?}iFH%ZCyz35$GyT-elt_jkh@P;t@?O)Ctw%VES05nMk^H2|Z65+Bg?=CWqje0_ zYuqz63`R+tY)U#HqGGg=+#)u`T)>{1+l}AEaIMl;+1-fHUgTqUqIljs&NR6&r@0bT zha<+0UpzBJKqX~=vp{U%tirAv4w#82%_yG7zaslQY!2&+UKosC;=}qt22J+WMeovp z#>b|1#e=zP>LT~(vNn7$w|QuagK|D>CNYHMd=OyRI6+;tx%qfA%G0@W=l!Ys810KY zKMQ;c$gm**oLK8NoGw8v_XED6SV6m0&DH-@tJ>{4)Ht2TGV#vbQXH5B>pFgrLSym9>a zJOUf4tP>l10*66;V7zVb2C80eyrG5dlue%%7&R7A4K_u#skkeMi*nvZ?RU7E)z3#5 z{|zdfl*_o5hiuWatA`0SU)3(<3*7^8(VyB&VK0<89R|_Cg5iZT8Na=~aoWvM;%=YQ zYy4WTl0-kl0qpom>`9FuilYvM$Zoc{M+3?|DJdw2GOw_4v6tJLZl`L?q)S7Ql~ZE* zx!PbKATO(Fd^}v8ERg&*)s2|A7h#TxuSan;}9 zP`+_RdM!DTCI^J8zh_<>41L+>!RW*yb0BDBToIXV(P>OZKTi?ZPFOq>3zr^1dO_ z5qLHwuR;}nG&}lVRx#fSj3V>AXZ1V{q@vH}^s!@s-7_NQ>f-+S!2#q9%xdR!l+5M#$N_1SAj<8G}Z8%#h zbAuDvA~TKgUx7dNyqxAb8odA4C*`;u(nu_qn`-9z8nxZzcc1(>(Q8 z3x`dGr!P|x7>JFhfsTWbab)_p>w|dHV0SoQgd#^zj0W2d=$pxr%i0bIztBe6u^2ee znhRpxo9Y!C@Dy*@FS{k^3 zOx2B*L_hUBGIb!ni2@KH(nePDh3&CdeN5W#~Fw-I?nlx*XBN+>>G+qFa}@x3QzPND9Mr4GXQI;KKW% zlY{SyPVOI5)k~axmY2$01EX``?}Dd{*`%%X0#ob_85j;m)cvn)ZSmreSi27v69&F?(xP)HuN~)!@r1s zY!MG|{@!%L1j@fZIdE$7bD>z=`r6*=&*#>~Hpzazt~C95jraX1`{Yc%znJf*B})TD zE=!=#K-Jp01^7dfe(rQ3sY&OW!Bpa^)KXcC zQDA~@bvQtNT7$nIoU#u`5HOo4!<0+Kp@OqeD!|2 zN+n5n)ubA;gMbH{+@tqd<_Gf2@Ik*ACo(AWKRNeO+T5&N-2R_#aB|suHITZ=hOIcc zE5p^5T|vXS?!L>z$O^mNR!4SHpknDnZzn~cppO1gOwcSj< z(Kd{;3HtCaZ}io?w>n>%cfn7UM_kHFZhf=#Kchz&BGT(o4uz-2&jNUs=C^CJpdq|; zGh49O3XGheaA`0afP&UX_STvVu)wBWf!IWn9yU0oBwqY0&~bb5a;epzo{K3;rD%w zzo+W~HI;js`pfl~NRmQ}72{t%uO3v`=ZP0zbe{UoY0Pt?40>KU*})(YzBpWlI0Cvh zQw!`En1efre!IS3>taj0*+Nbwi9YEfU*qQ=wI?kP@ZA|$EI0;(LW3e zaN^0h$1ueMGHd$*YrDnBAAXGKwYHFXiIpsUC?cb;>%F#TA5IIg>zhZA&!hkOW_@4D zmqhkT)MX`3Hl#(vDbT{#Z-Vs6{mXIBzDcC-C0N4L8Z!0mdZ7Zcj2WMHyjrV#P*ccZ$-^HLd!WyaI6rqem07MgGkwL?iPp zIwcT!p)Rtu_SZbi32b^j(D`SAj9<DO-B9iKJ6YMVct%iD=t)Q?oD;Hc@!wj0IUmtPu)JWtjZ!Q@L1grY-~ZnZt} z1zran&99(o+}xUb2`3Z{o*WxBxUTZ$rYRg%lsoTy%OAKuYInH5x=}TadOy0_#SdD8iba!j{zH zig^;Dq(5VODsES!&}Dt%NCut4zUUl@^t?tQQRC=AaYrGw`;Mb^w;1YQJ`s|gW7u&C z%MCjoh@(omk=E`cyvO)-7y`?L3#9o1<34{^#Xo+B!+{*7bW?Ncss2;r!(&LfrT`+` z!zikxMOK>8nCUTwbaWBGy_wT^l_qPp6TJoqJwo}(pEL$)%g9sm@L#Q7dhm9SLdICa zz@nDbo$A8FdNTCYZ$-R#U!tbdUa9lb@A`LyRf8S=GTc{QjYa+ zr||I!=(WV^Se~X)&N6DW*lH|J7jW5`)r<97F#J}$y9ix$O+H0ESn`>0ozgFQTu1Zk zuDDU0$GB!wU#C92#uwgwXxTNCU1Gv^8TAQKu8`Jzto>NQ!+$VAm#wo2x(sDoPu!^4 z5@SW`%h(t0_Rsd_rfbMQ^b{z|KYu_9gU3Io8~)i#zb0`Y8MeufP8L48HY6DuvP>YS zk=<}qZfHFsTs?WOD2grc7rLzrMO5cIYe-VUy!?c=yE)-Sn4JU_*nUSsso(6sco2Ly z&A}^J_*{Imwt~*l z;k(0HF3f2vN*;ry)#S^SsdFSRY1B2Uzd;+|Ar9?1*lZO_IA|ujoiIu-&(LpD?oOuy z=Mxb+Vsmfc?sOt6jAy78EAjb65i|KvEt*Iq_bZf!bFzuw>M;`svn+Nb*SVm$fF z^fy1}o1P?&e|Sc3`aYEqVK@4|EaRUkQk{zNf6>YuE&KdIg3d<&n40Z^^0$uQ6Is~) z*1`M=R}V3t6uDnC?;}{I7Ta1RS7K03D_k~pA`T4vpl`jSri#v*d>-+4!5g0^Lg}z&F+@954X--Tz3ncbsjB;IK*Pfaqu_IwV|u zqBoTJ=1mQy+#8Db&ZW3<-~Y26@3izw1b{1h0U(5`wuLgMCt=v&n7IF1C%_3-9W` z>~aUQzlNvK_%vU5S6<8ec@!3lP4Yd1Y{=Q;BN(>FovdXuo?Y)RJer}V1djWaD|;j3 zt$mqgDf8X)AN~Y&-IG5v#rL7t>9|~!$PM zet?LDm=v{-jr`PmUsQ7w>nbM|HWQO@ilOSMKK=v>XT`0zr?zXIQAX<`>uQb4AK0`r z(6ug5dJqk8J?VcVb8Ew^xjkrG}4sMESIX=Z1 zh{3~ypPTuaRkdC1Fewfn?Le8WZSAMtobkD9$46GxhIjM_{!#sETmGIqcQb$Un>uR4 zyZiIbEOh4A86dfUTgdJl8e%V+ADS4u;4l3D zSY$1Tvk=8J{5~GkPoibg;xywu^Dj|75~*(GG}W)MznRkH#aR-O`qLQ3s+?jpVS@u^ z{b^B>gUXxa(482J(zVVgoQ}_p+YPPjn$Oi@vNq(-ZF);f)1TqwLJXnde-4zs6sk)4 zTfZX=P;wp9iNc@Q&b&Y$(8vH>g{JdE>Kw^})vJZc)C+cu$+cDwOB5eySNs_fvR-;P zsOo_!95oQKPKgC-pO?D5kv)(ANvP?uNIlpHwY)px2bi7)i$?Tw0uodkXh zr-P9ai-1O3z9?Kh!@OGL{*u>Bg({2tPGr8%N`;71AFP^R)^vQh`b_WLWu{50Svh64 z&G}`uY>`_AONrD^w_?-4nQcKnPXBUm?rv2hE zj*XqmX$>6RzPZuXa*8Jh8h*Uqw`>|^uEY`@(UjPGE*RBl_+Ck56B&ayzab>WG(uDJ zMfQi^_&e~K>Zy6*4gE0p3biTc#N30+CKlE#n}h7S@Xhp^lq5^t4ihQ|Z4Hx{gM4pf zQssx3BcB9|LV`H)XJXYQAOqR2;|72e(TN1e*HHr`sy%j1A*0v%muN3kxO)2=TB;&< zENurOXF1VZXmSAydo%Mt(G<;k%DjSBTH(HPvwdp~^QG`Xjme+638ew`V4PJLVg+Tl zq9g2nSy;7D-%3Y7Pee!9V7|xA%%$YL)ld}sGSpXwIb0^qbiC=(>ObZa^cjaS;>L+g zFJgt|pN*>;U_@m7rO1-3uRUYkD~8*vjfZJNQnAL0BLy+=36jUe-G@fC@h`dP zRntnE+1dk*p(MSG`fu%@8S*49eoiwY2Rm@bI6cLLU`+ir_I6P6oMOKIYome4__^zvgeDrl9}I#=3_c43{c^gm&PBS0BK|R?I00+{l=vo!Z-4)DzCqS&)ADhlYyj}1J*>4it^ZH|^ zoS2_{fr|qF9XhA2E;?H>;&trJQ1mqIYj{aH^krHIN*RAi=?)|+)BXZP@)}!LHY>aXQAo-sLk?ZEl9t@)#f|Lzov2KBePU;C1T=_fv@#j-4ERWT3_<7=qC=!qq?Dkp`oG z-(Um*qjF;OA@dz4G@vn&pZrgPGO?>}U;{wTte>3AROr{#$+;FLSen5R#UJm(mL`h- zG)6G>86)XF3xl{Zi~cX~CK)UPo)zrPfbYpT-Lgc4)epW+TSh;KViLrj$Q92) zM~HA$wb${F+soby?^o4Jgr}Fh7u#;J%=0HC}IWs9%H6U zdF#E%>@gv&jSgwdZ0*_9wPK7JtoRK@Xohw+Ez zhF5+tDK;_}+jveMyJ$!mO_KgtaK%A(tsApgqKSx?vL|sR4p4pwQTn(Oo9bg96;k=_0bXk|SLX`5Md{D=P8`Jbb*GG_jd#)l+!{C_|HV^i}F1F-YIg~*zTfs=C9 zV+Fd+zg)PFXTAFmu0SdtO)nXZ%P3rPonDI&wu@lr|5dn0O8@7BdV~MVxv7;z{t=`| zVg2#I*mWthuDB%Y`yj`}Yu;;w_hQ6Zh+c0IozL+S^HgnQMT{#21Ga*0#K# zJ8uLjVF=EkfBdVsaYO#`Ysa^4Z2n#148F&V2hh6+R{F-Pd|XXVT@`9b(-#=9UMA1% zA;4ybr1Bf3gpw@ePTyoz2#W&jij=3vOk^gFsJ4~7q7C6U`qwVYKMNlN;exG`Vi!c^ zXNgD7b-ME4X;X15t(OfFh~-lZtENon2jn-yb`@%g6)dgy@XkHC-eO%@2CsG=GEr{N zG#d4ci9LO0GO?!zCUg^lh9a&V--{ylX1vlFDPig3p$vUg^0|#c{Xpw(r0ZrvNO1jIP@CJ5=d06H2v4JToghWG1J`S(R_wb7_ z!}sd|V0vAZzxg#q6nu&(%tiVbQHPY1s|+Pzjy!C8oan7=R4|#t$P6}}lSmkaeAl`i zpE8Mr_Tu6%Yk^EESJSAn)%nNd;)(0uOt5GnTWKXNdxR!1?T0JSGBi0HWqS;9mab;M zd7BsI)+$d<*F@E4VlC)T|9ZIPw=mM$Rzc@$yta0A{$P9p8=D6Ns`fTvF6|+f)U`hK zya>Z5e*oUF+@=>2H$iZ4EgNuYx{l#SHj|;wxKOf9Qpy3`{M7qteuIz;wD*i6F3De{ zzA^Lfp3jH$lPz`KrQ>=b_t?XDxrN{V`}TirHhdpx|L?H&|7WlZjgVUW_5)1BKX3nw zT#e;F-Tdw81?Xw~2V>Wid3LAbe$Y8i)kYm;iT!H)4QKRe_NTtXD6x@q6-QFYU8a6{ zmZ|@cJ=_G7UsinbOk?VkH=i-}-DahZFMdwr?q%hxd;{sc3rE$*A?bM}Ib2buUGcNh zmiSC@Yg`~7!5ZMgq)az;vhP`c|L(p_i8yE?6f>HpqZ zSmj4_G{}JNS_3&YUzmZ}99cNDAp;vDllcyt5(I(B zOB17)oj$#_-^A#`(`Sa?>|eKR)Oor!J9=S+%o-VuSD)VC*{*M$Y-hgG>7pwqj8&em zMbL_{qEnsRCi=>uJ>_qo(-9@Ca5)FR4 z=U>>HRUT+fD3S2V zwxqtLkGmu)lHd~G4%?;Ezd48#uPai7*i-mV;o~n zaXPDKPQBX0oN{`aQ)WrrA79XWHEzi=r!tC*_sg!&=l}Kf@jaMYpT{ma%=$e1f3iN^ z&8-ue_1SNw&8_%H+FR#mUS4JGExSl-SS0BOW}V(huhSoUu2Y{zR~G#oIap?Q2tzdU-pU6mT65qBq(`hVOGdv3YxuwVban;qsSeExCl zuphoImYJ~$|1mr42A|0MAGgDH8}#dDhn;>{J1k{i8GFn@czuLDma)TbryI`>JNaYT zVa5b|>7z}s^@+29!Xi8ZuXbuWV;FHXqA1!*CML}{v{(< zQjE;fM`23!3%?D^??oRf8Qt4cA^P~ViVYh3>)qP_R{D747ov}Et?x!3fBE#sqmQM# z{uTPbq4rPFM<0HQ{|WlI>;Hg0j?AJD!d8%{d^A)zCHJkHtK!EiKPIWHt0g9J@v?k! za9#<-E-+-$+CQ$`jrwr)_t(lPt@`@zp=k<9nP4e?g5S z`x;-9b!7bJA`dOue|phJP|{V88A`gh8cN!5P9K!?jj_Ec>31ngvh>rD<-ZX9Oz$pV z9uem>`kCDuDn|m48h;&d8&AfODUjXAF0>H;>z<6^f~7=Uz;W5z1Xi0%buaa~ryt|! zv>$^#X2y?U{nrE1o{V#{JsDSCn4j@}Fis3> z-x*iN%bD!c6T;PxuGZoc=ss8LznxgN5(n1EI5)bj;ZTS5d7#+I=fUUlc~F01WR}xo z^3__(UQQ48)A#N4(D*;v?O{?(nbQBh6w~{y&qMl=+#a*~aC@B5x7%Y~H@64=E0dp+ z?fB46t3DkcKTkP6+zI5g#D$?gas47IQ0}SdMFzl^IFzDKPo@e|KaWn*?<{u!(WiLU#=zv!@~&q^zis~BI%F|Z<}e5o1RniAqA?FUq&2P17 z%FIR89AES6xcBmptgUQo-cIEfX%F*5WYb<^TwC(-RPDrqH~h=5P z(uDj=CL!LbJd(VR3=09#X_eS4AoO0-CluEy378{+uI4}wyHCXDM2~R4e}oyY&Jf!6 zat05AY=>GNm@0bHmOhiATua;`n^df z*BJUOI;#)*CC2`t^vi*RJ?QraOTV9BXeMdl|CWNY37A4rJqXy;C+SYVW*^+1_q{|yA3@)c@Em14c7C~nAjL2oLy2tII(q2lCKeG&1qhauueED<{%5#Qej5oZDN zQIx!$I%IGzHXjxgy_7Ypu)7bZ<*YtDg0{5$?^(2r{UU0%{42l05HtKMMa*lIpPC|P zQSwDSDOvGv17F{yeCJ1#ayFQ;f=~S+YlwYNw0ru=hau;)`nEGHeRpQ)d!`fd=rLlG zj!lH*AzqN&Ksd4s#Is_J-F@$wDJ!<(OiSJkhP!18)z(ohnpBhL%J&EmvA-V4HpmuJ zOF5HlWAeARKP*SqAD&D*vgVU;bIQeON7j68o3nZ9=^g*H!;VZ9cx8X^i`JKwf{Jjz zmvf_G9Cq)lVaOfWe>2$NsZ|1Kj}6T>Z$eq=*k@{SMU_|3@HNrF|2DNJXL* z$e34+Fr6f{)jjK{){OA*B(jFg6VpX&e{zVljceSp{Qk;0H#1;MU6`G_1K~Z|vTwzI zFjC9TkWuOW7nuIfXIHYVomYkbja3Rn_IU|K8@+@gk`#^XPJ6U#U}>+zO9oRr}Y^z`A?y7&ZoyeXiV$u#=nCsQLS^hPpMBblAeCtxj}^38(`fA}yu6=53f z2@;*@azaNpVm0kk3DG0gy_QlNQ{^}my}p}y8DdEr)c@C(?DEf3zg@?ZJ& zp7ifUCLO7p6Ysv$Qo|Z^nij|ap5?@&MVpRPBth2rU89Bvr4+k(@rIVyR<3M*#Sla= zdaTj{8bVc@L^119*IW%lFN67 zs~>tobZ{i%+1*$zoiB)BbDp4%#iFxDRaTd=0I%dkZhM9)j=6Sk6b7BGQNom z>3u@~BH?7QrMPb%e;A7Ut|YSP>wn$9*S|MNAH%=*WQqy=tNuOh4*iGno4#$VONg+C zix2r?@|!9Sli!s7u1^nvYa0N zh%6`aiQy#~FJF0gFW)s_E1JYiZCxVEsVME`yN(B$EGKW<(n~hS={2JsDDP<5hvhh3 znPSMP9H;-045xH_$EG@+4{Rw{pEd@0uD*pmTz&ucLo1^zA+%npPEUDAayV~adJaD< z4T)LRw+`tyD)4(oUCtrUBu*TD=; zpKhtH|B*&}He>Utfcoj;ct!xTBs$bYIoCLpI^Amvvm`O%N)My3#nkis@jwtZXG@sB z8INK2U+Mm%I?nB7ju0Q9meb#4o&!<3^*4}R=AHPe?#=bON`EgA-%{Q1xW;!Oo3op$ zobY@CVPjN{W)1^oBbGNtWNoUegYE)#g=vr)WA;PYA0z5C)t6BWr;X#&l$m^>@V3U* ze&(p<19@EbYrIL57T$e8+U4k1{L3Her&8|LzqI7Ng_C5kcpKy?pNo5Q_#`U3mn+-AHd{yIA@e)gYUj*7@`!#pHpy;r6(Y+Uf0_DeJvhGjCs$*kn8de44*&}$a-wmVZ z_Nf}Jpug?_y9dcN_2$a}xz*t$TTsT>#|wEo()@?M~HZ;(N9 zMA}7w*L(*4k!?*TmYkZw6mae?bTO^9A&g?9oU%E*TpmtuFj-y0wDz8iCT%v0`%Xx) zEZN^fEz0;3Kc~T-%jeZUIh2`SW~&YpQmV61c(xX{(rvEd*uDn-&{4w?bVLC^vp?S5 z?&aNZ{$~yE{7CNr^>pw2FmoD3J1@uMcR61qD0nJ9Y=7%@bZF?)9bp?iYdDRXbAIlk zLH9cDN)IP>v&~`^YcZWog7b~z-7yt$aYYbcuQWjI-{Y}tccKSSnQecC@-Jcqw8on3|sj)TVaNu|OVwHBU|u5Z`C6ObhM^+y9xr2R<6eaqsdT)!6=V8_|G-px1CGZ#6B6nzAxZ=^E~nI zLNk^ea__Epe`1J-IHCZ^Knl5WY_H4SYLKSNXJ|Vorv*@QIZ5WNxiA|ITpar5WZa=%~Gr^3}Y8y?4LOfQ<$UI)g)jC_jO8B@*GHD%e)Hp3?EjpqJ%-OVy zT#i5~wYFbLUeHXw{D$P&oa@8%)~Fadedjcug|&Ad_*ay}9xn;4O>glY-mE-lzp9IH zz~6XIb;Hnxi|=Q`*rce+VfxseHwILS>|vWNsCQ%fqDK1*XK)!$%|`EkQ}dH7a65&m zY=uK|z0X-idCq9ay=oMV3vIPHHKwD?UA&EL0ZzQ&+An~4Zo5BtKy0rN74iWA=2PkmUfv&b`Ob!F}c>Lsf6` zN}RH;rj1bao3n?oijhACn6psiKg?B>8*IxwN1Bj(vzdPmF^{QjsboUC(VK%_04kWf zL4JvuUQ>bas-k#2RQ1gU+HL%fcnr=MBU=c%3Fb-(7{n(wmD{vd=cbvIV$V&CQ^o{O z^)h^iUHp8T?n@nM{u38Vew!f#qj%ULw1e-yVB{`c8Q{y^Uup2TqFxf*Grczh;Wi%$ zxOW%;+ohOgtY8j&I0@`bKanRSMC2P-F|tx{TZ3|EwaQ4)<1wODB}a^*V~7oEM(}R=P!>wSg(~% z;WnpmJ>)J2n19J1`P))``*);Oo}$@;hVUWUa&u|?bA*4-yTkB~ax$#(5HdY>oj9Cz z6~5P|36@yx{O%I9BT6Dtgh|vA+*S(2ye>LJMmcdR}B_@TD8G{=cib> zS@`GIacq0+*4&m`b90C&gxf2VTkSVsL}ZJ9`LT7a>;0|!XIl*VuJ?l><1VyZr zYzT+^d?*^%Je#=-RmIJumCL{XTo&Q^G&_iS4TIS+gjXWM(`GB0^co38yrp}RD z9@tFLUQCY?8=V?Jhl=!u*Z7>O`9A-hk82I~uQ8f^Arp24TgH=lwVkf5th$-%#3wRI zq-z*nYbGh^@keabg`I9={uxyr84Y~k;Gtq|)X09hf>S)Z{&Lk<3F z%5Y?7^YUPdmlxu_4n+qjjoF+aXu)^iUyyGm#c;ebH~J}~FK)Omh5GNGZB^Au!;jsh zE@K6`e?jx47{ng4^3^EaRn<<12xyBgzTT}14TG^1YJyAL5%$Y#(*51l zy}t#vzoPB*$FbVz58m?<%Re6+W8nF87tg`(9CxC5ZbPQv_X3`~@14P)!M3LvDH!ed z+l$Qi3%?2EqxJoIZe$puwLc3$6%UgfDsNu}+T8fw%3R8=hvzr=I01@vLpIeYS!R$( zyao>s^~*Y80D0kE7pd4E8Vll(BZX1Hv{$k+FuJp19aa7~-FF!svmB02v9^t1#}>mK zWT~RWseYI=9whnbj(A+gHKng!6#rfzoHn0oJ~0p1;ywySwm556!^*m>HS0F318}39 z#2XXn;EzCvyszVjBv}nNLU-F2tlB!~mtc8ux+(YAtUj<5mSGRLc}IBWfjyS}4-jAv z(leLdtQAcZGvX|6|D8JoN@Sn2=?yegqm^>L^*Z#)P;8>K)L``Z?|f29R9@g&UNtsF zAosaI``gD&iRBkj3|*&)zfZZujlt5*PT{+RU}ai6rTYSl|1M?BAN~(Mn-m?pyOjWN zd!Ri5>aVX|OjTDX36^UNt-vPgM!vv9d`PDFVyHA3=z4zgNh99~6mFj!8Tp3Qe-F}P zPU9uGg&#Uf`fn}eO2_+uvFVa!_L|U+rpJ^@s1OrE<79BQ(Y9deYCvR3>;qNuQG4#S zr|OuR9jL@LIqnr)WKgc#G@AHEy*G=M5{*Zo>E|U+rM*h2e(->b_qIK#UFrGF2^7LH;uw6NPlrGER&DW!_1R(Z`=3x6EEUu?Muy zocC&0820{E3~$V#-TiC*k8iD8W-pC`AU5#(=WHUA}dQMr>aoEOd@>gqW_#zMgLbYI<6HlI!d6FE;??`9bc-z0tDIL1n z!ez1Rh?5I)3~C|YN7?g`)QtO%xc~*Za(8k;!MJq&y~zYk45Hckdnx>(rd#U?EQ#`3 z)(S4Ty0tEBNjS$VWk*8ev6kBMWOv$JhrBr3)k346H!}8qz79qwpky42d6{SUuMUcu zc(t>o{q9(cX9s%D(OF!v1 z2WsY07UGH$@z%}p1PTY7?+TQ^F&xWYVGYz5-D^=ujs5Tyo@)cYZAm#35vb~+Q4iCy z6P;3m#+45kF57^Bh@C9ye7nec_%LKKzoIKyOJwU&zJMa(vW_)RH;X@?ZyW;mnJGi7 zmy~V@Jhd+e45tA>fGBc)@`1%I-KdIxTO8;gJ z7?f!+Hnc)nC0ZZi-~J_YA=KnGf_G++b$h_JHQ2QBBJ*NXd1=v|L342dJrmSDpx*T| z*)3B0fQ>ciFu)#^s?mVI-8b)t=7bAni-?MY1lrp8*WJUMTHP_cs=qu93c)?BCzp?g zt7K-V$9GTZyUbJXJOh+`a&K@_fI&vw+54fG(h1}!Ww z)WEE_nQKcG0u56FT#fwB;MXc1VzGg@z$!t2Y}PXFKG16!XOr-kUdFV2!)jgztcl;j zy`@@A4@Mp_)hzpH)tiB(v~6Z!Iwmd{W#7lJC+udxv*|_u$hgcrwj{;?Nhq=d!I|>! zh7Xqbm)^l3&FKL%JSBw5SJ`FkAao%!^h0Lc$b3<>`#NWDX7EREQ(d?|1<PQUMp>j6}``$b+cn!Y|M zA?tj2%fau;@U$g{3aZXPQ69ld?sp5M;&-^WoKTP>?{AI!BEPZ*E&O-4AIcuCNi)mV zAk3%;7s0|4Lkuh4iH;PEY)a&F1tu0Y{;}(j z1xiLMtY||r>_Q0We4w_(9=*chjwl6H^NNsk7vt#eBylY9S(Sa6H^Xw{%~MZG7y`d%h&nGI-?KRFb)a^;kZsT$Y9|ss)h}c=uEx5 z#B214;((iSZn=N?(RML5?RL7JcS`X+Gq84t%h*tg5J+pKB>o|%@RdY?xDln`{|h3o zS$39KaU4C*XLcvB5g?h^E9DKnVKlDoPG|o%v{1aC2c6u`1ipNZrK}~-ZYKg`FxELb z>g{9~(whzo>}rQhJQeq?U||RIxV!(H-y8Xx*hafRij*<1?Q*)-#_2T_yUN6@C`ukI zeak7_T)S+Hg-C_sw_#4tTW9#&Q9w@3Xw{=HW;W;vzTLIfsd|5oJGa;wje#MGcQ(D_ zX=B0CSCYi|xw!@Y%;MxWkEEztZu8)$tF&Ujp+WtZs}rZ%lP57*7oizc&4ZE-CVr(? zA_tQLF@)4?u@{`g{qH z`N}G%fym!<=v3)T!9t2^Ur>mSD%EuED~i0Hi!bddGt|fy9oD&5A%_%L=}GcHGS1r< z6NR+y?s*d(ICcx`yp`D|A95vWm8`SWVI60hUgy_BrOyQmcd*X8SZ8$}S(A7ZMZ}<1 zdm6Pg|4Y`*OMGUP@WwO*Qtt{Da$09woR`gt(=NkQD^&;PY^KZp97-_vxLW`6DyyG4 z1l0>ah+_h<@)G-zwSmZUOc(7ZK1sLP1mEMgv2Q-@@iuC})pL4ABMMg&3<~F&6Z@v| znYSkgsrXUBpGQpcqVFf2BwMZyuBM|JU|l8d&y4<|TVWd=PjO%O^8MLND0x=~2+Lm| z1gkt4I1+)+xV9-)MRY2KNL}&Uw5T5V1yj!-<*xW!K5E((UDpPqV^2ozc9Ew*vO1nP z!rHN6f4oO*__FpgIf$#5(bB?QPPE`xOD?hgU&*iLe0+aCw_*_(^o6xz&Y(I)ht*m5 zIYQ;`zrUBClbA~58Nj_?X8xvmuoqF%oKNZ7Ojg@*lgOX=46Vir>cYVs_e@+<1~kgs zM+fa35zJY->`^pr^Y%S@`^VStc338?dj|vif1JGwd{o8tz`ubkhR3o&6No%CNYwC9 zgNi0%bb~=}VA1$SP>V$=J`0in%EQ1Wz;fNXTC^&*#n$($YAy1xngC4zTLrWV@~h8k zC$6msEg)F)|DH2*75A3n;LFpern2#WPsbF8g-ab9pB!Mp6XTOb>|KZsz zpPdB@gD+n=l{(xaCpL5J^8V14FP-44ZL&Cx5ET|VQtKjS&{+Tdxb7Xf1pWxNF8FJ? znn=_IcS510jW0zs9vtdQdwPE^Aq8|LO1`UzEEIY=V&znxz$s-PyH78 z#a1&7Jnt|N7&D&)#4l#+2{Xj}XWUE8E=6axi7lg)xph4+8hs&J$!>81VLPStyMCs3 zjUrh0Uy(Nc8@6It3(x`P1xbkRUtK9L^}YR)drzwP&u#Hn>-fG{N-WgkTUJZ=n@cHf zH3KysHSh7pqctAAj8x6ws`eMlUvj^)$K$0=?B~8hILg}p9acMw<#<_9v#KRh26r-I zBrCXblWajI(n1ADa5PaV=sM!ZX!@9|jl~w`EpGOhnVr$rM83rOjD=44oph5c^2;nA zK&z!k-lZMd4;1UN1)5&-wC(K@=~$;!?fCi_qQu|d6b244{+PK?7#6sLwHsKoqfE6y$!eMFZ#3l0hc1!KobAG>q67l%0~G#2)S%UWvir>T=}u3R&H z!Bhdrp%RzhBE1`$(sG`Rw3z>jH|VUFo=ggWk}a)_ch2bYoE#x%@E&GeMt+{hMuiY~ zBYP5bnOyWp>cWfy~WKVSl zvu>UvP zxza!j%N+9(C9H=7qooe|y9f!foM5tdc?{6n_fXxQ;se|NFM`b*zXfh!YJS+~#%1D} z5@*xu$+0WGEqkwaxQjP|H{mMkJ%07I z07~={t}fu__*6RTYVgiqk;gR?`*!O3;UGsn{#r+_l#TUR4prF88{+yucp3grc{&hW2?#Da_aacuOgw+>o^|ztl-vbt&X<-{k)16Q_){YMT>1k z&!M7roa}f<`b-2<**T@GrJxyIN5wosj5o7>mE~)_Tox$Nb4t=%cVH>4yW*qv)-^Kv z(hKa60;LoPt_<839OFayA5p&vM%~cQGSql;hR~jP-)=&(BU+NWQQ=$+EIWObq zms!5Vu>Z}We@03chEuWCh|$ z{92j6yho~ka+3{eJvX%!vGtc&kd%Jr=AWL6%%)x?xO+~~XPif@i?W^AIavhH&ATJ) zX0Hpoft5jV^kqqqnJ>g5VIgoXaI>2#B!X&{FDz#*x77skSBR;Jn(c9(POOo}6^bde z0IfDxHnGP7H?gtT1lfip%_q=M^!MmOg}^fvVN9#e+d7-NH~Y_=9rj`1@Qhm97SM@9 zq!a(VJIkkWYf>N4-_~}g{U*Pa1(@s-O?902Anl)-T)*ZzZlL>J62h~o_DDCdk;k$? zGk<3uwu({WOJJf(`1O%3*MVmL%2~u4Pz%;ubm9GvzX{dv4%XiROhU|@o*H1dmN)ghIa%wmBT9hbK_UN)^Bp(u zJukS>48ScF^uaQHv1h5s!EWW=BNU}b*1FJAj?WDFLiKxUx@(Ip^X$rzJLBzYf*~(( z&FpS6D_(52QW8j?J`5Fw+MfLP@(axiHvhkp-zk;fk9@P&LjBPrWMz|OM~7Dh!s-Y46hqM5; z?)x;IK#8Y1z#pE353pm>fJy)K6L<|fH9XmoRiIWg4fYwCu%By(El)bWPff!22&4vm zP9N0q`4A#kg{Me)gR~U#LWy=1+UI85-_zTmot$_$=|5*^tY0ncl~MoUjl{>ktMw1o z|BPHTi9qc+LX$%CaaU#cZzSx00D0!Z!{Ov%-8%VNvWwdJ`ygADGVD`U6h;nq=O#+% zv)qFDn~cAa0;ZdQ`IJ--j9J|gf)4Ov)x!CkNw1D?RzA&bmrrn-NdEd6VVsPc;^BtP z!G%EnPkxti3xw6x>Enhf$W-zkpmoR z(-GayPC zbHkwla)VLwn?xCm%utyItjfhij3qN{52v#`@kxKBe^VtQ<(qG(+4Bc=92S>oF`3EA zw$yUEz)p3^2%E+HV;`mOPL;a##Op-Dk3U3M$wV>*|9>Jw{+O{Jr?X+ab>epj7Ox|f z|EDMUKTAmP(yb@Gyae+HmAJ12;MYH)C&H zH*>JcNjQZ-6~vq}3!yzebJu_lywcuGPY?w%Dw9}X<->#&egv?a|HL$^(6(9SgVV6C z7JNP0*;0e%j{Ocy=##R$=18ec#pjtlclU?sgh(_f6}0^~Wa2OGfS;Xs<^4$0_)*($ zY4uTD_x3+@%bEB}sE^EM=7rYG`ebF)N4J2dbxa!n1Q!L`$G=W8jttV`LvYT`+brh< z>o1ZRm{fn*nQdqNCiq7?af~Pw3@FFS=e2ff|L6hoMJk#hUcR?K zXd(g={#*MZ`5Ir?&C4&b-_Nn%Kb-phb4dVxq0K+Y_vSt}1)3LZP5$z82v!0n?|Y;C zeXs0KQvSYygn0YpVAi~!-mR^#XO72k4Cg&b_KJ+fK+wKk@C9lGc7vHWOSj%a17?gF z=LXP7)Ftbw#L!Hmm7nZH}0+o4v{~-vT+$T zO8?0EW!}-E7YoQ(e)ukAV({hcQFP|5uW|m}bNSTH4g9-CFb?=selY#H{z-TX)^rrTCj zZr^X3Pms0nfL~~V!2SGi|DOk{TM|_MG}1kSTqh-C{x{AjvXT~C?Yf%<27An@oSGE^ zZ+=tkdrhn&lzfDemOo#nSPO|l`EiPasiHc^EIcSxJ_4E)Mu!5SItTytrbJICvME~$ zt^LDtX8u1NLU^VM8t$hDuI_r)*TDIc2m4+-9@u7v;33RK%SCe|z84b6EeH2?eoG}RVO?@To1XMkoPXqX>IdWf{7 zAbRo^X%G5AH5Me|7rst5X~z%XaxAW=N;4?8yUfF7w*J93Ny`bQvlWx2TulniJ!xq0 zza4^hq9wr!6`6=~`-4ao!Kof1EhmWH5h>wyQTG(0;c18tg{IV^dGGX$_V|ASnqujq zEDw#A6Er_fL-WY~B-yqt{(ep8n6-}~#mgBm%guCJg5an1zH)JCEdsh(k z6Gph(L!{*dQQHme?Kw4t=0K#qJzoEGXpzq%%F0Cabte$@6-31zA}uF~?n^`TI&N{> zo(DWc48@hFW)SC9!$csHJ^Z=z1;~?<|7n24zit7IZwGX9CZK2D29R2WmZgK~k_KjE z3e1u1V2;ZK^EsO*UenFhqCNe44K4a~DC zFv~qKI;n{e%UT85#X4!{87zJx#O7wAXy}vV-rqiN*-FbvC-h1~b8ZSvQrjHi1GnNjN4lTkeEG>HK+hG(>=c}J3$vOF|ePSE@`4b3CFlVn?0_x)tsV$saVM05A2pizDK z!RIU^XgNWXqiB-yWn>D`H60Ok81}lNi21u^BD#|J20O%tdx*50Ao}%`cCx+A?V*+p zI(ca5>eos#Nb}nEBxyc-Hf_+4PXiN6fmwe?YM9N=1oO*R0h0?=RDWEa4l0laYE%kT zod+tVKU#jt)E^rynR{g7n!Y93`cniClaiK`)<1k5txxKYf5qKvo8K=T*&)XDDvRfl zlQKy2=dZw1K$dy^8H-2D37#^+<0&V%q|j`b|NUI^yhT%%#*fBT22sMmWIepAsU#5=uq-^iA6IZ6OBKGW`T!B%L$q zK`ho;G<$|-v?fo~d|mMM_0VWJL9;~BB<1hgFOr12{(BM0)>Y!GGO@gQ16YPq0rS!m zLNksrcLc?;X)T$MLXi6d2&RExSSEruM7!5*ofmrurYV9AliEr3HEw4+f?vM<`$)yk z2@t$KB!f=9rzGjL+dEussv?-2hT#4bf~!3Q#OSBxIv3W-_dB;$bqa|-*3GIJGA%|CQ+R;Gpp0gEk3Um2|*`&)tRK#dHYB0 z?d_VX&bzmLe|w1_@b4U)(cb@)Ri+AvP9B2sieN?>f+z43TY}F20R+_`xIGg=@LOc1 z>iZ8rW?7Yf6V)edIw@fp>*D;pAtD#`k#Upk;z8lZJJrY(6k z&a&j8KF?+X`e!Tk(P{tfN7CwZZW@?5DKOD?FjF$YTy+HX(WP@N9ZcJmG^>_aN@giK zgRKH$gSx>3=%tDQFYM;eolxZ)7ri()9LpaJo-pP%Cz?NnRP3DR?R411mhZ?9TLEVS z3`aeuF|1>6P-D1kOEC5~s1eNV6zo-B^gP+Y+)=sm+-RQ*<#~&JE|KRCd9Hh<$nfK< zeOb(e(|B|MzCwOE>sX-Zt|NZMTQs0Bcd&1@G?K8skX!7lSbZ2TW@H3&rC0$Eut6in@sx*T(5Ty>SVBS>s04j#wC<0nu{q;J88Ly0Jd59_OXRlP z>uRUt@~9@oS9{JXLPTtgh{IvNCUF79qyAH+xSKyhexkWN4brFlB7W-19~B0z#ULBk zQ^Cp3*76fzngL%^JxtY~%TH8N@;}g&{O$a>qjC}5*99Y6Xsrzi4mOR!ao(dYQhxpf z0n37q1|<4f`LkTz&m`!+)0_DbLd{50@`P62{_4=yq{pB=!aG z`;hlNaQI$|@Ib@nZe}an9Dq@theE;$HWzY~cCkRlxl*$k($3vns08gv3(S)cG`?E8 z3)^(*r8w%l%25}DU9P^4L=$Czk#pc;FCZy4Vip5&Nq;WSs34?fe<&CeCx&qAs=s*r z;OuL4vIsyrK!61C%Iy9b?46Gk+3&ygh1GrmT%v&eTUh#OaG~<|$Tu_GCF)Dpjda2b zoc}iGPt*o?3~d&-Jbof=YoP}Fz@N*%JGNZvrv9^XkN0xifO84qiJNMVl_41z$%}5x zA%?M6a9IUnp9gq*`x3wFfJXd7TT=d^s{!iyheRTVA<=B@*b%hE?&XvZY z$9Bp6{SY07Z}W_^X%j#4kMr9$)#v~Y#Tles;2G&bQKWuD5$2bXKo#u7Coe0i;}iAC zOYeoG|67+!5_-;0kzug`H}lbI#1$N-c2$%zczg%v}U?zy?_ z1DE)lt*r!|NFeqZY$j?drMf;jqUF@l(Wc79Rk^weSDGse1Ua#VExkmS0)u^zquFb) z=xiELf!|v9w<1jBkPoPRD!UNtBxGok6MIGXX>-c@7AJaB(Jm*(AF~6Q@3=SnIA*uG zm{YKF?M~^k*Jqr-uFBy%twi5=R;o#YlbTJEDzRynSl@M0Q7$rXw*F7uY{|Yek*)JN zV&9@oa5Msq*-mfd0OF7pg zQa&1~;;YH$P#?1#FEV#}h24|JMQ_X*7yTq0J^Fn2+UCMY`O#Xc_qgcaOl`8%9Tb_v ze=a@v2|Ms^4-pD_r&fT?>GrI5d~;Kn(IVv^!1TV_!=(47CGyO0V5pB!&fj<0?shR9 zo+Zsq^{+OC{vB_7BSo3SFxt^O*zgyx9hXS;>I6I|7w`B$T5v?zJ$_tta!xqfC%%gA zf?ERzFOadF#qICS1sv-jdbv^xyhK-3!jPQ!6E5m6e+r%0L$*uBHEt@`b=X!WGGLNa zG=v0g;z0F+_*z68d%H#~6Ep+4x$E1{r#zdvZ`sw6N^7xfwumFjM5?qvLf4 zAp7woaMDf*ZR;+N8qDRZ<00p>@ky-EIJ7?>Q;CA&D7=rrXmKh9I>-Q=+{r|VuaQY73rewh~@udoX7_7 zQY0M+Zh!95bA7F>R%wk_l=BP9ws6WbeK#BBv_#L{drV41ZqHHr1{;2%uV>`m z+O73Y{Z`9bGcn^|Vx9Id{(>uS?GyRzXimC3BG^zO1>qq!vfX;}lzq*j2UL29^#M(kHkS#z-dRE0mkPvjrKZ-d~U zQ7*Xh>bxoOz3XLr;?Bf5Iz=Oa$NEZqZAILdd$p4|k-wotF@HHR%{qfYGe!~YaAM;X!FWY5 zUJ;B}1mhI}DInl42uKG3dl|S)W7+ydcMbov@~58bHAESA+^dO08edW~wskA7sSSv< zSLBnFh|CZ9q^}#1sgVkpGdLf1Hso@5z|io znAn-zy>dsJoVoI-6P9ueEvti2AUK2UtH} z#xSd#`}MWGdMmtlBfkI?zC*LDSCrR>D(}(2M$4HuY$&B>gB-UB4|5Daj5;ml_QtZ@)*p0Y0 zP5sQyp8Vqg8S~DGhk|S6BUy)p{nJCi4hrmIV4KOn75Osfkf6=Ak{k>ChOi_jO0*UM zjX7dLJ|wE_L!o*EQ!e_|T0zEu1I!lFQz|RwFgflt`o63*9}^1XlB8{K8Ats#*6_)C z`2?Bv0MSepWSbWyAxU+|t#g>TW!(VqTKEH?+vxGV?VF|1NDr>DXeb(EepfQtCuU6}q<$i{4sHvhMDN*rKZR z6V8NrFnvvfL3g#W`&TxOp}CSORgj;-PO(=Xhee4pm3eljQg6X+-l)R9_jd-(UYk5s z_WY`^`cH)1*+F3XuJj1ly6X_6qS__SP&$bp*>Vg=M8_Ajn|YM~FY{dcjRzXQ##Xdje?686m9NWhfXuo&X1-)l`#-)COPGcqYyO-+{J+>A z)5xb@9oT;7KW{j(l87(0Z~l>pQ~CmB!XMmSM10{$$R7)Imgzal1tkwSFuYwwqeV)^!sGxXb^XifR{s?2Zi>hP_!f24d)@5#opyRe%ipCdds z```YZ-KK=`#oYZ8nm4QE40cue9_zI&XPi5wa9qRRYq`Q=RMJ1Wly+E2@ci!~)f-_} ziUs4!h85MmR~0QPO1#}sBxJn*ApD(Ar{Gur|AZf0k@u76V-34?Mi$CslFPFhZdMjkdrZsW!09sfoEBvHEf#8EgXT*pB4Lu*hhlSU{t~Z zn<_A{V*U$&ZkEobjc(v+o{6yy z-j}RKYDSY~r>T6=8`WwygP#jpdv#zf+s)g$Y0YF(W;$JO#Nr!5{`sz9OU|9*vbA{D!8eVhNtYJ>!%s+yLu zya$pw8R^BYyKF4`JtEr>bKqfqSkVoT3fz0SZM1pm-(XJCPa?3(UZ00Q<<#wtJ3r*U z_5{n1O4t9~U&s0?Ie6jy)>~w;7mEvPSQ-Auo4ujYAmz>Q;Z~r1tMg8^s zbpywcQr0xDOEfTzccQ)jTMf5H{lAj87Jq~v+fF$HF6uvwck?2)tqxK_Hv7oD7xj;j z52OCeqGvmwETn5b^vRt2C|;B11lEz^JTJwy@?$`vOjKe;M%jO zD4Ps1xyXDDbJP@#SL2?!`&#K4aaF|p*PR>ouJc%4B&pI4U zq-A5X$Qv6|-6aA(b|C{Zt^#J1Ifp$ zez8MyPnk<@H_091`LaeZ-N@(TQ%waqte@VN^`AwtTQ-Sk9Oa`c zllqY^5>%vq1<3@hT^_&)Vt;F0d#F?W+NW4Mzp#h2T|aS0p-!O?*!r!N{doXG&w~l` zYoLrAeU|0_u{^n1aD7Ohj&z0&xJ;g6{>L9@9ysP3l!?jypk@a8%g@k2Kz@S1Yf65f z<)5tiqW_?&#{AEm!>5anfjQLUgMWoCX}#=FQ-e0b*8gFofv1DWJ)izj7iY@S-v8|6 zOO!b+b+WRPf0TLga!+F1_S7L*EmY>QTEAVLSR1@_26|Ai;VAI9`AaU6ts(Uas4V{m zd23+r4b;ewT}b;lf1;n8&(*!muVwk?@|)a$-3#F#&{2~79&z5V5f+wO|G6|nN_+hA z1v?@AW#G5<&j0u_sdrwHX?n6ly(8uMQmm%80K3BjW+r^u$=8Zr*cLZmVnIEm2xD;i z7gA4te$J2FC*-s&kSS9fW57k~XiVzeLO^rgCRrh|b;MtBz1Rn2`@E3!a;+Ld__&T$ z<1CSr?15$?oetB%FOrk-ev*iRkS7Kh`JW@}Gb&j(mv3uIRED(F={&BLszb_Pkv)!i z)p3_-#h%-!i^A5!Ni!c^+F4iJfp1Dh9D(d2tL0~e@3Du!36x0%8 zEGXMP?_3$Y$bcRkIE4(r*J<`m7JnxxQKgsiKY~;kfqIJSLEf zoAqo0&S0Q@kALs@6aQZ$)V3;GRgaX4CS0C!M9e&0dcgJH!mnte-f;w7P%DGW8khLj zjAVxKKhIz0;^|fVME!lCVjTY*E7uHm&}oI{G50caq|GmuH!Qst zbOXA8cQSI!OO%n?2a|h78~AeM#ojPJ@MyrU22JC(YD{^!H#GNNSrKP#lH{7#Y*9k6GdWCXsEADhMcSt{YhpRE0l zU9%Et71$S-^mUGGpcYUuzh6u4a2DqTSNhEgvfaRw0xCA*JuTd$nT$6jBNo_rzkH5! z%k?)%nJoWvQf9J$tgXXT`579xLVjcpW1LN*&;z#YgZy|JmH!r=O~sF7)cF@m_E7(g z{CI1_Mp7Tr*G;ni+sOKl?HPwiVjWE!gUZNHDrC0jPE23f2z83$B=U64RuKcHA zVT3Mi{_X-mB+w#K%){Mb2>+g6OWXW&CFRYtQ2Ql+io8_>#8}{eZxaW%)c%Z4j`>eK zlfptelT8R*JkG&NEvKM7H*Ia@l$%$de(I^GXt~4!o)OEtsOjS)2XAd_+WHafynN%uRu6JOUH%#P0WzkTGab&gd8Z*O|-*n(Bk>3YP(T{pJY4sn!z;dN|tYb-OXEHN-h|KAu zSQcCfR?ZL_YFh4>p|V0`NbqO9@c7C0&5It^#k~KiUxj5es&x{m4`Mq_)Q1mwFq@gq z>EJx@aWI%Ik0Xo&S%gFLL&M1o@6wC1x%;s&p4it!^_gy6(@L%TdwkF)LjB zw(nyKvyJ@Jdz`JG*@NN=f{_=+2^pJF5?b<74?)gN2kdwMI=}Y$=K3D*l5payvS}yr zu=?-$V3uuztus6~Y?l}(Lj;(WELoNpr5X==kGwBLz6q-DfU z6ss?C5Jo0@lI()D!Dw<^y~s-Qrd(7N^Jia;nu%0X8ram4~Kb=Eb|A!?B+jL#dc$fZQTWM zeb~+R*zw^BDB21>?9@-!^7t3w6mA|ao zg7r5skfm#$AkW+&pkw~|6CnWjeP#y~F)t}XFI-+0hOMXb5%e8ti%+kixUNo~lHv`d z#^KVdSkxgBuhyUZAIVSFRxgw(hJfZV|Xy1;6LMweODyExJWRckitwK$oj8!fPCfpUkX9mCX**kUnO1a240XP zH-E@^P_F57a)^r5oB>B`Qi3EeB*Pt%r%C@J=_TuPb;~Ohba=A= z!E>vyky)3g8DVRC$_>=Et1!(Yf40OEjOJY%cyYb7MHP%iUhe&pyV?uONaarTa^sS_ z+~$_ccof~sjPY`p@FMz!mwz+)cKz$+3l+$pX!GaIBp>aO^{~BuzjlMdI#fokHV^U@TsmLGxn#<@m zGo2?ckEh=feG_-lEUe+n}!d5`-ACO2V#9C^eF$#YiI zyHAkDvfB)biQePAN1AeVBml(|E3*mwnA<`n*Ro17E3YA=oZQe%2_QVaX$qOHRt*vS5QO0IrI! zUtIuN^Ve6=`#8o^UpC4Mk^OJb9U5u>?xWg2quwWBfD~^gA@1RSi1o*PdomVH9oA1X z`y~Aj;&w2tGCQjITJ(dF%W*pFNc$r5QT+=Sc;DwHhEuQW&%+W_bUDqA`TvVv;HlQ; z?i?Xli~m#7>oIt6{xo!VW)*d#@{h4{PWYH{YHo56oonLoKdRmHE4)5RNMChTlmq^l;JBA;47U$Px9}NzGzW`PRX+^% zKn~uEtS%8_cd))22@)(gDQ>E^bx`vhm*oRZoP?!8Jt+38&K%k5-d!w9*QU?Q@qG+% z)*@`>-_g#%^-ge2qMR|c_yH+WzYUF3;;pm@is<@~D56bAwY~0^KhAU62f_Md5g1=EVCuR2}+k?T{pD%p}LX zUmBiV#+C>~){a~s|BltnV*XB|_H*a@?N>q{&SV~hZ~iFzaV#!P(%E0=!kTG|IYKlO zpiIKoA)q_e_LOc2?Ft8*7K*p2LIxzk{eewq)AG^SlsPx0(hWSt>*%tk;6jabZCR)t zLP@KCRF?Up6sX0Ck^lTz31#Km3lss#E8 zONfWoy<26-gtq7d@*w_;L&%Ten}jb5;IDpPaHYvyAXL&ZMG~oqt6D25J>{5*e^l8q z=)I)u*z8Tgo_%$vmHm&_lCSf}Q{+>bBJ+`ryqKTLiQAlEriC0c3RedBJ@|irp6}H) zJ%j^YaSautL<}Q;=PQbTrku}57cl=>D4ZW`;UATPUy_9X6M_FRL0^1-(0<>#iSJby zZeF1PAD45_We<#5O@fRScY(5uw)#5z)x|%hkj|QK%LGre9P_yVmxwYeKbG5)=M~^_ zKTg2i0Jyl>a9_6SH?0#>p_G||(R;J@)tU5^CnG~5V}_xdU2#Vv)bz zX@#7Gj$5~3E+Wp&zl$s{zO*cVk-RLPOh%-9-Y|jeH^*Pr-IW}(uF=AG%yxu<`FT5tIwb+_ z!1En9MLL;W{VY-vyxdV zKjwJZ#pVT@osd<8ZCxdwPxSH~Gu_TahhIm&$Sx~?ica5x)sR^&mXhY&Ky zY>%UF10tvOjsFq$$oGQaB5)+-hwOhln&CxYxX5P!6st7b^Ac-@^Y?w*7V#gya;&ct zx4>?~?pJyefmGeRXVRU;1ce1&l_xjRdSnr*F5~xib{*sf z9w5V>oHpQRJX)C9@=+2&+aK(UEL$d1AK|Y#`@e0oMPE2ksv@$3>qNfpR6A7bJyPm@ z-`;QA#Q2Jl^=V*e#xZ0tzDDwWVyvcA1Hjx!(Yo?Wc=XluZT63q2iEUr@|)bh;=BiG zr4C2S2M3@D0)PmqHve&w5RHmN*xy$BrPl8mS;LtcMk|pX|52OjjH6OE)wP~Y^(}PR zjyBaW#nNo5Cbx(_R!rb-K8BtiEIs|e{i&Wl@vq6AF7jp!+rRHn&YK?!`Su@Yu)^k0W9?qrZ~pQt?p`qmc`M>BDB8UfY$ z2jM55BxOfM@u%(ljoOmmb`-$yfN>Ev6}5(6N%{7=6~}C31*}Tzr%_C6vmP5U(rG87Qp#sSFK-r-&YIx7}%Oy~9rQ(8lx0 z(L!<)Yn93~m^Dn#e@mIbPkBx-L00Ib;z$tlCbS~=LPGYQDir9SI7H-H{~`Ww>;#Fe zk@CAVOXk@V1z3~j$UNJRSNW%ix=G%3bf>=ckhfp#QM5TcbG~0oMX?kHE&M5%xh&+u zV&Y#F{D)vJCO%2A(!X2KCsKHuk+7yJh4=To%0I>Q8_D~pG%zBkxSJo}srz&1e5dN7 z3XR8=Itvv#3)<@LyWe-~AaUZXN?FX=#lG(!j1L^nbFhQ%ZyhF*Y3r9->dX%=i2dT0 z!y`_zlt!rLtP=Y(P|=AL|u(Eqa$<+naLrUZdLY{Z(cA=T^0UCpXGk+dUVq-&3{q<8gzx zhRfE^yp~OICFd^b(WQ#rb<)4wX;!<&A!k%Yb7e`}iKKs9^Bv|Ue!Zk?G^s`2#Kquu%39{0ClyY$ z?ohRK$_~!FT54Ijq{mt8!)ObaHP)_@8itxHPj6$(&3WG@o{&<ZJ1R;i6xIxt zrAF=&^$>26BgTJ2F>%*0pe18WVe_bg5~PhFMqDlA_?)#T0La{KXU5ykNUAE=lVE2? zpuu=ZJM)LACph&&C>g;8?eUj0rzGoFH+!J3=3L^;Lu^yIgL8GYI!uu?%^AGanOq&l z2+qB{CR>zj=GFphS$Y$vK?P{+dyCK@zPLQyU|=vwp5J(pAh~tF>2TfC9Cz1C(u9& zD5d&ahnl&Vu~eDRn#Eh^e5dHu3fuJ~rt#$bQ|(bNc-K8r4|c|3^00K|M#?8gjDa)=Mv|RPVs7n_cazCHkSpuJxvhfSxo?EL#=U zw8e3;0}90`&PH60TR2jmvAc{TdN&N&L+qZq4q8-SwZ3k4A%#p7 zXM{h!%e}qarKDHterfg%Eg>kO*TD6_Wj}-~^f6dmjpyZJjqwIt09& ze#OtX|kpYGEO=#h6o=SaD{jn(Q+>*X9b-v+?cBzBYZy znc1~hNLnFVbo-*0Ekha$**L<5k6W*!mnz(!i^ZifHl{5;I_k>v6p0@VHuRKSFK8}U zFX4SjJ8rynH}aeD^vwUk6NU7c84}NA)!P@PGem3mOnI;I(mQmYfIB-!D8@eC5l-1x zx1Qh({)(LfOp*?4$&L*cS{NOj?08%`cu_AmaN2^fudQjZVb=$6B%--tF9&l(8UZ$Z)1sXA{Qw^hHPi5@f9nJCm8zHL!2lSij| z!5-0PSA@KnCfY?*yy$Z$jHM#rTOB`%;`B+iY_ zYJkhX51oNKoY(kP{$Z8f=X8BjW#!k*AQIJ%(=hy|blGqj&rKhfSFN^%+m5apxFg(k zbDTTfnYOvCL5@I>pnJNtLhGRn$@rFU{-BV)(A)R zLy2b~<|NJ{qvo*0Idum++bq*JnKh{HV0P^gRii#3kwK%M$oH?K_{vMJ*Lz7Jedamz z;VD$yJaA{0+(lWU++)T*p$oy~vI^Cu@0#bWF#*3;qxt8vn!5}YP`!2B|3tR3nb}I7 z33JPw`H6*b{6tWkB`8huN8juCRd4Itmx4#(ub_1|~0qpMuT;c&X7Vw8100Z2>vOk^dPiOgwG$+9`(bSVi>bhDFS%EQzI#=pDiKFC(jzV5=qKQRgTQZMhr2pEnuQ1;Lf~%g2npKIX zL49S7W8Qm)1X@^Xs^ux>|Kr(YiD^sqyR}|+f%)o5&Hl}3vSse{`~zNoq1kHlM_x{T zk5v8~^3@h;ray*g7$$$tvvs&rWQ<-X(R)c!KA6|%d19gUBM}DT|NPMUKYJ&Q)C<0l zmU%%#OYSUsi8pa^KOw*HLMgx0u1qn4#Kr)fL+5bcbi<4 zlkgAUCKsMSDOIPYah3c1kVe~AHlT}qe@fYaPVzmcDCFPv-QVkdNK^U#J%$Q9>U&W9 zoqy(o}az))G?q1hUALlGH8C>M9yFcBy%;AKEjf@tm8b2_>x zImZy&lbosG|NW4m0Hf4J9ZL;w^yK$oQF>9zv0=n@-U_a?ok~7O7GaVT?z|^g8p#v8 zDWw19dOq=QuK5*5dfodlqtpgD$a)st*$rH(ZN#(f=AW;R1WTElC`hfYdUkPv9{jE zrxICbj%@%I49BTEqjE<_8^f_N1!H6V>$v|IPekA|t_8%7Fnlknk$Ip{8ZH}9Tn^B( zY@Vc$>_4ep3D>;DV3DPZQ|0FE3cE``1WVYx$M7?5FfOU3B~;nXFFQu~2G9VGzQ=Jr z(RWOlba$2zmX(I%v^94`qH6`$2BFDvVX9NM`wlMc^ru$QD^pC;IU2KKFJM)6iTL`F3WS@&|iW1bm&yC*?p=_@Pzyw;WfW4BI< zWGjFBx65CsJc|A7A}Llj(gwDl3L^NQr$>_m5Sk@?|H*`8T; z|0sq$Cu^xk_MsG#T!a*tX^K9Qv|la1bOnHcQoB{5&lBjSS_REkIxu5P=|a^{nW$KU=U=P!yIa53wnhUNlB7UN z1<3C|P|Ilug{pWKoki4*bXHpYP#@+rON0$|Xl+Y>DH`;X*i=&3!e& zMIVYpa7Rp%5^n$ZdHl;mX-0Meh_yif_i>vxecW}y$9gW2tl$3C*;(){y^6SHNdg$-}t2USh`F+VmFjC_g{Tj_Ip(F1T{TPV2Dp2b0MkZ{5z>0q_K%y!GaSw7ZB zrg7{-)V7k z`Ttq=2@!9!gycj;Tv&G+?KcPiCV4WI(yik~0!$K)t`f1K81 z=~tNu;EOeNw|C2`-5qu-rj276bfplFt70X*;;rG^s`jzw{as^l<%Ks;q9B~rxOW|E zN&!CG{D}!pp4dTk4&Ir-zN~Y3XKUr~y{g-pBBHdUMj@$DX(DD$xt5(P(QDaPI2g|$ z;`gBu$Ousr&Hb2CX~C)H&0jOub;Fa(TZw7n4gU(S<}&-qZzu6du6%Ore4s74w&+B& z^8tnSlXJ-GCRt;ECQUw(^(OX(IRbOXLEMUE#7$HOE!)9MMom-yKJ!Hjxtrg1!N#_C|1EEcE_Dv`HedPl_+i zZ|x?>M^tLuSwladGtk}qK5QPx^}^%Fm2I9^ycao~8rJ~w9d;#<2kJbUHb1trN zwa7X#y#bUcIy0@KJ}Mvy-H@?|?2VK+_+=3Lc}}2G#U7cTL?YyW#&hv9NSK3UBDYe=2N4jA3x)C9)-Pqj<;Yzt)qOG|fs_ zP$Jn1cu5RmMrPO5Fd%ioSA4*LvUl2FL`R5`eC89@3ZZ5ye z+BMqg>INQfW4F%HY~88t1-+H77Uy^d1iG9f)t$=t@3@^)x?(Cu-xBs6Zs8NzlbA<* zr-o@Vla-@M^>bcLS^=Gb?-0rPud^63i(e4ixaM%Td#64cz>7-Wu<9tW3eDekgDS@RP0`~nFv$Iya9ZvcWJw>rPVe0e5I1qa|x`I z;XDZ~Uq-16GtVy|Lf`3ppO8arSW$gab2c@urjmr5_Gw$^mY>SA@JHFZ!G&EYU3)2p znG5n!VmRw>fa~v(%=dTU>3`!Z@e2$h9;=h|(-G#Km~;?_EG`npx2G1ZltYQw+FDP;^@Cho9TgRV@@O zhGX=z1z#^=oiu+i<17E`pfz)1j`shBfoq&k! z%7ROyD*w$4LdE-=p?1F6IF_6MADZ`UPLb(Fj=A$*{yc8KE?G<&wdu^9Ma(9?c#R=7 z#Ws7x9c1?w5Wlb>3e6jYQc%kqlfY&EN`ilpJadA8ckK875+z$#gM9#>J_kKc1f1}V z)ookv|DGvG^>4?UdvaABd?62Y@b7PlS`m1bXQXHOqx^~jlOwD49Mk16ZzErWl$|Yi zv)aM_&zl(RPp8drc778M^KjT`o^gC<<;xrpxq%%AWfxwsUQF^5n_dWemr*9{`iJln zuWDJef-L!m7wu@0m>6n$jEn9b7geP;(S2O>D=hPYgVl$~-)16!R*BTNu*~Z>qFjH59JfTW^dW{YMIVRz(D>R{Q<~ha z$yg86&;%Lln{-NLCRQt*4fOO$g-?;2Luq$GqKpazzUg6^K56HJvkTMYq}?7a^*i_n zD_IJO$3O(Ua=40snz_tl^JhU16horE<13^E(fnU(_BO7wZSmjBv-~4hs=NN<39sMmT*xPe<}O=jz5 zU>A68?55pzpchp5r%)kf)0F%1Cf<;oukKC}J&iwQ|9CYM874yJp|{aTl}{IZQOuMi zM!`~kX(06tuKBn}Fj7E~crsyk58{bub(7HIo~=J&`w`bM2NyduKOEhy{LOv4!TK}F z3A+wj_NLlw9&o}|=crlbBBbCwIuCRTXWg^v7;v^NY?PnK>}kH*es!zFIO(g&#w(E< zUm6#`R%$DOY|kpBdSN;@Bxf%**ZrRStVCZk`fyQ%Z0%)NqZU&eP;4%W2&X0|?ZeU3 z;mHj@6G{;uMdiXS2l?J3XjjDY$$l&T~_^Zp_(U9i@CstE5Ni}|iu{jBc zPYP?yJL5lg$A@V_SpAYn?0#|a#j(#b+N?K5+r4zg{JOKR^{=#q`8{%=OKo=s;(`s* zA&kXzBQ?vNl#v?ySxklJVd7irp@rzUYyYWM`Dnobyw%p^2Ae zPJC39u2=Nh1Yhl6WM7l;7sn!E`K>R?bnd<8|3Np-|32%ypPVSiflfMqVoQ^Ug(pYAZx`5Wv#; z3ev?WFRUl!&G5^3LL3oiu*`Di;4ShfC0du!4IHb;s&< zF+uRS3qKqwz!nkkm)t+g`NflIe5Ko|qO5Ud7qJBO!EK^%)PjJk0zXn}`}myA?fHQk9Z0ny9_e4cq3*xn3hM`JJMx zcp1C}^iIXT_o^nZ3rE+RpWocp7Is4gR*S^WcS;y)OBqo(#UjwzQnh|(&G6A~6+k!5 z%c?8OJqwM#HgLP3I>-*2-LlFmNIFUrs!!qK`BbZEu zCypmqcYhqAxgrOu7~*98=Er2IdbMB5(%Iw9i8A`1bosNvLLae)LWKhT=QpE+dBRE0 zTuVu&@#b_}xK(!IsKWP{LiDO~q^-(l$0e(>B#BS#J8OxLpf-7_+T1`cl{q!qsN-j+ zRH?UAX}HDmKoW~5zi!IZ4P6d_k;Yivkn=yk`|MVkCar$L9p6d)1euE!lS8ZOZZGaE zMr>XZT`E>V17A&768+vrH&GX>brB}I`?R{X!oGxczsz5(Zo!75B%SLW5wemk$FDrF%knkfW!l6qp zDHaT?J z2#VSQK@(3(r(z=%vpJnpVD?W+XDL-eTQ`VtAjLngFyuV_zq+n`?7zp-ruutGl$CHj zUesv?&c5|BN^44jYd+~Dp+n`pfDe|L%~ZXLKi|*jj{j*j-q87`ml< zo`Vf|^FUc6*Gh7$~V>xZ_Sm{GEtXn%gxEPfMw!3+!Xh<@@kUEkA9N;U5HS? zwP`>I)_w*>iSt)n8+Dz+Xa8AN?beH9>q z@En37DarOCGESnM`71Cni9flUG;sz_FlaHDV6ctm+}+7Wc`aeQVTctwvhuzMahXv_wUH3PXL6_e5_y{z`;?%Ox3>Ohk-{7J}0B2Jc z!-ISBNZC~pY%0aZIFDxzADwZ1^dQsApugGv&2_Ta#X|U9D~1#}oAJBf9ETXw#I*4{ z_jnn*fBweuG-G#0Y8(nX<~p&w(_8QIhD~m3gFeYN{A{`Xs!+Ilqvh@;5@HkcFOefL zR3-ZbzMXjctYD6RIGsmY_rsDh7aZ!J)h~v$^T&AA7Gz?XEoY605m97$wQ3R)n-?Zf zvh1yy12kUq^De=adA$%CU8`c%A(9dwiVH7j=f5frhx)uK(#Sl3?PC8&;^Phwu_K&vDuhJUWlA@F9mq<*!XEXuIH<`WgM9z?i7lV`&y1RbI!$klk- zc2NdIe4))y$=1O#Y%}LyAy1*qG{xqYE7A$CGqLn-q2MoWjnkza`@qs)w%vN;b9S&G z2jg4+J8;-`awIYp-wVyjYQ{U;7fTENSzm}Ls8o3@Z#SiwAe;UbSn!#5z07XCUdFw3 zn$Sm%ivI?}a4X0Saw|x%VLNZKva?`#EK!3W5#CXc4iZ$DWt;R$1vt z6S3;=F&obl*7vTrqGb-ogG9FUv&@8kVSpat;47QL!L^&tkM-CnW|u+Iv!&))?M$k) zf@URQR7JlM0y*QN8^^g_iR6~a_jw#sRkCU3jaiS%x6?c>)MFsn1+4t2D&Jc$iupHd zI9Z(15%jh_BS$;@A+H;`bjf@vtF2^TPfDVf{vNLtkiOE+p4Q48bhMFf7fXUzpPVdq z+LBPp1F={eW~1amVyE-1OiIn#E1i6phuCc%JnyU4H)Z%PXx4Z4c8U>&QughPKRfP7 z5pPFX@fO05w_ikBO<>09W1=-J1y0*}xrt^Wbx6hS9<%0psdSQ2rB7V1&!AZ-@gULA zRxC`vO~t}#63I9Kn0Ef3GfCGkw^WhZi&S%iB#2uTE}DXUj<3>X$J3Xkvv9n1;`ay- znA!609@xX0MBUS+49tY!`X+7DNVeBHKD4>bgqbec$kI-G;RA_JmWnH7GQo)JjAXhO-BnF z6U$>T;cVYqGukP;FDWVRvywvfj<-~eG^b*#lJ12O^e#BnMX0o}L`de3($7?Z3+8;D&5ev`0h8tfYcOAcv;;F8ZqlU)-4W4IXF$NgU$`E?9mm@ zjeK-ig*u2T-uifS{pMN@z5d=>tbwuAmI?eYCSS|EqVdVBrfjptbb(ku0OwYnU%n5O z@=xm+DHoBWO__3@90?a`#Angf8B>lfMA8J|b(f@bQAa`8(#})DKQoi}la%PKSEhKB z9m{Nq5kK9FYM*6?XtO>4;RDF(U5^z)zlN~XPXd)hESto|9%g&~j^)o-yL=5fPl~-E z*zgmPpL|m7xR+PgcT%ou?L02Jt|IdBVeC4<)UvhW6$t68cl`sBS6sLxF zNsE+EPw*0-e|)%X@d^@V$&jXVedh&NX6M9{EIhh?L$F@NX@yLb74>fi8}6ZWeAnn4 zl=TZ>nf&3miKwsA6}*W0sx09eL_I)6KFB}~Mz-?R7&mVnC6%jkD;9i6AiNJgy0epP zy@ja)>C6Q0bJ^uRk|lhVy{j_k@ZieJZ(yv{oat~`pwsz0get!_`pN!fpiT=%cZ8$w zRz^Pqzv*{_9$P<3*a=dRtrJvlu|W{nbUXL8w0RPYnY;1;5^NOrRH!1f3;A;JTJ0a= znmjzw{Z?G9tI?f`Du>Kp^+k12R4KCvhni?O%REtL{&R;_>8j0*2m-R69YU6xmEQBR zN=&uQy0!;d(r;>?S?gt&n&CEko@CSaWHaW?a`KJ%2Lbv)PqMPfvICi+Uuu@iYs`N_ zfGo(ZSvW3R5C&}EB>sdnIW;VKifqjP%>@*-25k8A-~PSOy$h~!(51Dpz z9l_Bf9+|0uVs73$(!qU%sTO=>^@=+;t6qVKKg<)Gw*o#6ED7+Ct%D1bBiF0 z`LmCPm=bIRe@Xn1@MeLz5a49a=tpK(GHw5^_42FDaGU?;3FM3C*z12U-!WTn*YAH+ zOulfI&7b4ths+B$zkeqDiR7Eps8?KSQMlB(F}M;l@_>FYy-$lT4c&NVr&>;jhyO)mV=dx^hQ}&$WI4Vu zl|cQ9xeRV+;yAN=hGK8-1#FR^<{BUqA10t98z#y4mbraPa8U`}nUsIRUyP_*xtMQy z9g)9s{@e?7e9rT&hv_gCb%$9MyZ1m7vq-*{F^YmN@e6aP|2vY*BwUi@B&=wi9Ji}7 zj2Uk~x=&gyL)5hJjr4}cldI%4<`3tPFLJ>=?&X&V|KMXF^NVg|%Fs7Uz07Lc{|9da z|7D6lse{QRU$(Kf$o9{z`u+2%@5k`HIhGIX_iM>Fdm)nPr9jl8;*ncgG<;|4dZt)f zf0Vh)!aCU9YrTxGgLJ8RM=~st=@Hl_Y5UVD*X#=)T3qmb>(1{Coz|s@CpB{G%AeY) zliLPp;0ztl#8l0!=uW$q4bAV1d8R2*$SPw{y9p2b>yOs#y?0(`&N*}D%$YN1Uib2M zGFPRTUm%IjbC!JLM!R@0!!}? z_L#_?5vex5!}^z{af=edt*@<*5?WiA^_~Ecg!iNESZv0eC!- zT1@j-VAcJXUiRI|&!3UW#{`40WcQm4R(P@&f%vg~Mz6{R2ikG-4PN5xl}z_xtzX+3 z(={An)tcpXJDx=o&&qLD>`tS(q*AL1mN;1@#_{sGh=QCpW2Wv_CTkY6P17dlOK+oN z7?jQ7Q}A0jpGjxmZdm>4J6S4nDwf@}Fn(#_I!#cVDGJWpwnC4A=vMD)T!h~k>}_~Y zE5>F0U;TN*_ zb05+xXjQ%RG#YepI{dCj82K=Uvwj6~ZG7#^zH4J3Sn{5IuG=6t$CtBLBL#w6iH^O2 zyvMrq%U>C@%UkgH5(t*EPY>swSgHEoq)NHew%k)k?n&yTOWn+q7r*y){UjP#uQb%D zrPQQT*gZV?jhTn)ZM1uPg@6pn8@u?vg$3TGEPy)$m*f6*1u?t_+N(%1{nfv~Kzr>; zY<%5z2GuRW9^YX33~~#fc?{fap`5m8yN4mRFu@OU_ONJTz-ufKCI$vBx1Lm8t1z3) zNekz-5_haUxw2>|1iGc)m~Hr94PyVV#L2Zg^xSvUI(B1Pd4!V64@=d03lL{2i9JD3(-kXpDZwS-oweG! z@$nN{_QyxLl_7~DNId`w)WVe)6OJdV3{jnBelM|1obTm-&XYJ_Pv}UYlv&$f?5q`G z;?5SOBz}^zKi`{$sOHLID*MSo`=t@^^4Vp1!e+?-7!fsK-mX8(mLG`jcBZS!&u;!M z4(N59!;X$>^G7egHg>&uzukXcZ`~kqUGAKM%(g5)+J;Ujt=1@4jQe15*?D@d>rgW8 z&V0i|nGydH=W{qgjViEJ!-FW8T=xiMvItkMzGY~(UDffht;3aL!^iq9e&&tZA!XJu zkvy$GRJPGCv=SwAg=p&q&R^*R+YtzMI+(6lhiB6*ZQcTV0fL@85PbH^1gMSsnH6{D zhZB9GrXx((IU(%mmyhP)(+_&xU)G|=(7!E~;fYyhtajbwg~@kxB*RzC;e=V<2@79W zW`;BL@@;DI7ZpXshn^jxWo=~f0e{I!n_%ICRTh)&y3;6E4)hepN#J5gwmrgim>$*y z=37pgx9gUXRJ+r!=S6&XB>%bv*%ccyy?NvN628M{j=^^FO%{yk}83NCep5d8Grn~Cu&HH#~08ahCkN3sd(~_^WRA)B0 zq>0%i2j5~pz1BS8r)v@1y?(OtneyclDV}cZ;5WptdB6$wqq6x;EmfHl00jYK55#y3 z1}pq(>m1dCPK2l-&so5`-)-n{_>UqAdig+VGTHK(|wwL?g9 zD>T+W*;K&=XLgvh%k|rAF0+g*mIcO{;_F+|4RU`Eqo4oUdOV6}=~+>?Y93w)iLkF$9WWULmXeZQX%%xPKZbY9{}5bYL~Rap zjE{|<(K#hA|CW<+XViL}L_8Ml!rZwn;vdS*@rlF0?jRIY+@oxWw4Q&HRr%HNmlXy- zko+YTCx(ZpvunLOBl%2-rX$Nvx#mx^t{L9EB$~e_vV2?llS?+-()-=W7;Xn=zxC6q zIH!@edt*A;`U(72q3S|j+?GsLRlfX#UU<4+y%M!x&1Teq%9YI?&%f6*N`7os0ecS3 zD1??5%n2v!`}_v`XzzP z`oDyF!!{%zMU!!&NmvWrkty>&XY2O6n`QvsS61s*F8Gxxw&dDZk<*A_Vmi&;qnKp3 z90kz>_Up%H!P19H z-u76ZL%*gY6D7mn@$xE5hVr-B&(arRSZH%|KBRXlbEr7=));3&(Lr24G%|;SO<|C}zn|jSA?CSE@ zNr|x0uLwZ9ZaGWWp*|gANs*l`{CQ{-Gr~HGbu^cVhSlN zbuV+QpY2Oun9a`o9Me`WLUxUB(Q2wvx+CD|DbSQnlUZjU!K$Z?m9PIq$(K(a7Z z$f32CSTA27(%S6Ks{ZU_4yE%}GE(kaH z&(U~zmcDB?;Co98zu6^S%lL+RL3|Pp-biIqU{sEsE*ohx*;}BzBnMpoZ2Qe!P~ZQm zoL+Mlax009Kud0?& zieJxHUBAv*A}$r)U`@{Uj5te=$_>qzNTky223EAIde|V)`0d3=g;@43MCRt@1@kBy z)cNvtgbSP5U$yfK(CilfP(z6NY-+rNt=JZQIWP{CLF1)&_EP@q!iB}Ve%E*}e-nmW8rzCL3qOB%W-J*q(Z<@kFlGuc0@x)Y z=)%+jtXs)Qu(A$*J|@hE`(dqfE{NE1V~N`#$qr2Ij`(|6h+9o44C;`^YN?rZg;iSi zbfGL2(M$6#K0y*v!D;x<o?LCB{WY6EO^Ar8`@!qSY-_-NxPO32{y1H(cfz_&` zi~a1SW&=5?DJBDN5Bs;D9x_j;rV~}uBv;9lzmxMM0W|pB?C>?$kMr3lJy&ydD}fQX zi+ZiMz^lbAB!Nmex82f}4~e1_cBXR_-7Jx6p(3rsqmZZO0epv3USJxweV&ypT!C5 z$+7lx2Xmd)H1_`PHmzw^#$IPl^PbnYGy9eGOdB=WrR<#)voqBpTEMntuohk3ZXY?Y zXeM|IsgKN6XCQcVW#`3rAnPmsu`>fjd8V1xsv`5QPXz)xAz=+^##P? zv!l-+$$qe&at9HiPSsiZd0eiONNp56&1_HH+1*Lq*=~ts`-SDnu20Uo)IxvfhuOY8 za#eTVp#RehXnJ?s$JyR3^3&Bj(idyMpAN0eR9DmW3IfpGzoF`%n>iZBW{3W9Ir_Q& z{i?fvHvZlYpOVuw{>vff)gKdg1oG{a@Qin;XZN_CwWIzrbt$YX!mz?B=w{m2EYN@a zAls?Gh(=k0nQz$C=Xlv|ECqgmCS&Jc7!a8|OOVYlK zv>d%bl6GBeyUT{9$bBUnrl{g5cUfpj@L!gYtqGaDvKdYaoVbqt6G`Px`$EUk6S{*R zJAI=!p=?-7HMP^PPuzum&x9Y+P9_+ ztaCi3_$#Z07nV^{1wH!`T-77}G?)HG`pMdE{RI2|tRkFD9^zAM{Qb{L&m5p5xk0Hb z!OY<%eSsV&KGGE%oD_7i0cD?24Ao>|rsFv7&ss{H{_)?ig>emMHIOMWPf#urXWgaf zH;Ji4Q@sd14QIAw$t7!!MXJ_@V&hLxnZ}@LwVBmIxy$EKrm9rI0g7xE*0r_b&$Dbs zqS}?jw~baMrQWjpexiSWnLzF1yk#(IUfy*cYIjxGy{s%q zviUF0<<}=OKbQZltpa+kzLH;BhpoRXmtUXECAs{6bos4%VucbY@0^DO2`S&9m01a5 zu0ACz43Es(D)tc^{)^;eE`D>!E=pRN1>gSB=XgA$=t|^OPAO_SZuNP=d@+l+Nn1klMeN z_9ah4Ewiv%oIw!X1zu=1n~Pd>N(V&>!EW7`FOw%_R$hC6 zrO0{|Xoq`{byCJ)f4NMe8@0Ia%PenNlNA4kcPu4Q8K4s5x=hG-avc~gi9V}bpdNW)O?k zI^9)leZkzqNv9f=Cor1-g6v!)gV`yBF3{i#bT(lv>5U5nt=7D86uT3E`EyL<79=~i z70!Y(g^!Wy2K$P6}V8(&If{+Eq{Z_PvMJMd|H;jEm%SG-U&XJ+b#yv z_jNlP=D5E5!SeqJKJOt8QB*De-{r7cx;i{7A8sju3u(M4yGWjwZREd;|J>Rw-@C_n zK5f`BF3rSp_7t+E%&(y+2*sS+2b|G$I#T>exm#=m=I@}_wyRKE8Y=j$VEJSvSfXFo z1|99wVJ#t-1RJo*OAJ8_=jU~8g!oNYFtxR=aQ16EdB3RaihoSlDR1{j{yNA`*BzRj z+wD3i?e)!W^=V&+|AHkG0SkI-Uk9axuj@0zyC-_MLElhUS1EHTnFSSlj$69@gZ2tA zu6&4%KmKWidZ6_Xrc`Zek&#j;vzb1C5D2n9Tie{1*|%f)l)RY)GGGsnfMQnX#X;{c zzSuMIFENIykF+}AUpo0}m#8!N%9xaV>KNs7i2P$N`%lu@$*1N9pFezzbNR}8kNdMf z)sj;rNDiNPD0lEwdD#}uz^1=i;XhhBd^kkf1K>k$AB^(i}6Z#=9J`4vc_D_yGK+Ni1Ma<%T?ENy`$EF%| zY-+spEozbre(eGFHM{3x%<(>b)kg*hEabLa0y_?&81&@Ea{qu%pyNMA(Fa^;`SWb$)uOcYWJ6c9dG7 zVeWDnr@l+ZKB}mSjM%4uPyUG|I!}U9*Ri+kC*+)rEiW zAW!C4Uw?5KZ~cgB`>NXaE+XS|e0AxU@nr6);m;F1ec`U1yTA8zZj&+*qLg>jZ)izY zE?DaZG$H=|u{{|`CkIQ@jP3n-M^uKsoUi*6dzd~C&65A^5&#vQ;CKJ5hJW6M0oMK@ z&e3xi9?6;cc1suMpIuL4s%|&M+Rd$t5<@8;pxD?zzuuP6Oq6v!#C*nPzpZ}vO6QiV zsu*tNUSQ&9dZ>e4o`zYloK~Zm`0ZD&59q`*Jk~(=u~;Klyfb0OAi^TnL#knI_$!8>jgd{dZhzLPnBJHmaj^wuq zKlKsp!u)F?XiPq#6?AHhabA0V;+ofhtDr2JxS`COlB_@%Zf1&$o4NV@BaxrZW&P=Gb`(G z*sz@ttjM%R+m9!V>X}X^563}pN)*SQKgLLBdIGvEZc5azjzmeXH zW(nbdT~GW_tlGHUAhdtyzDlyQ725s|9cdJ^xkFN)i3xNl4qO)if&BIleMF5O6w}0p zZLkNgt#9L#{;8~sH_g)Va~vk|^E}f_hQqcZ^(W-U_tOs_q#yGai5Qy5V)h`Go3ucr zdB4B1XZ>sEI@*1e?AGk3LtEKclUG$U$m5&MrTnHOS&{sjE}VE}hu*cn?VCMifdFGt zAT`~~x^Ox9-Uv7N<3ETUwP5B9{^mD+)9!!u;s%!$U-AEW+~4#}?gayP-%hXZYH#vqztCjsZ7?}5MeK&i% zJ0Y_ckhopQObLne%+E*dBe%`RBYM&)jaA!316o|biGA9OX_WDOR167Aa)nif>xjV3Nxr&p&&9BC~ z^GT^v?Sb2V4hmWU(68#QgH)ycXW5Ctp4|+Lv$6F?A20ByPb1E36$w=1BXB``WcQY6 z@~ioT0JV~6gNI9Za=;Oo!q7?w@p~cnbngk*9Jw|+QhOwv3JLrP$yL3>i>;=9yu){= z?eYU8px#L9>ssS=y_h*(P6gR>Kh~A63%4`UeF)@84sOcv2$*xBgiEP}zSY>kT){_P z|LTvz>T$ifo6$zI9a&Rkpn9Fc2~%lMn{CPS!-DKSTYIkB#A&~HYzi_8vCRE!k@%iS z;9Pz>y-}ZauRlJ|3vq0?+N(URfy^^b*HKz7Z9BC_wBG$%WaQ2i*EQXEWDRTYk(+p4 zjgB}9Kgw58rsJD*)M--&*|AAm6!63j&d9^BVJB*2D>1K5u%c$UeObqg`2`zhu=Df+ z)E|4EZjjU*Ni;LrlYUd3)o-@BoL|}t=di>0C6Emh`96 zYWxTAE~zc&kmFv|QDW2Y$sEDeJKKD=?RrT=25T0gCQ|uXU;)Yjqo}?pTKR4u##Rt7 zp_*jbzfv`cva)FWnzCR`{Ow5l`fycv*lH>cPFSe9^RZl z)2x}NRRhXc{$5jddUgB;;;b*6Q+9UMu2tNzF&mN)1olkPr@9i!*EDq6+&N`qcjV6~ z*2C#L@~Z-OwPk`jci!Jm(iep_ax28jml{up$v^el-xYo4^!1W=Sdq!C7cyo}h-KO>55tV;&RK5$ zNag!cp3SOPdtfrY`ROjul@kZlaVp*zb3i$*?y#kBrCJ?s-PQPdrjxH3HZVVp#Q zBW3YFY#PG)D6Mz3a4t*KqJ0gR=;dT3ayYX`IIL%nN7mrji-%UggJKmLum} zyjLjNkB`H|cY&piw9)>~5a~MYZ?ZM`F}1Wqg#}vrv-ma-$WcWhNj8{!c-&v6ne9g$ zAkNZ{?Z1k1^6Tt_;TH?i0r-WRYrhD|@@@mk?s)o;s@Urm%h9rKEGvFhnY?!#miNkj zAote;P!Wjz7}gRxE(aaZNA?RAHY}s1ao1kJT}?IIAj-0+Sofo`IwC$i%nrK#?sif? zpPU@9)&uL}QIMX$O1K--L;LSNne#tDNlx#)-yJc+S~A-$4JL|aMg?= zZ}(=(o;%J*e0gOS@vKjW^0Ghbt*kLu4n6??PIF$^g9u$=Pa}(H&?r-kN*`c4-@7iX z*#kJ(aoZ{&wgE(41;elFA%KPS@u#*j!~ToK*~Mf<)CcWxGj(f{2p z{ARa)*n5UWmid_9gZKd)0RK-d;s2XqY~i2qg}^)gn~)#9n$C&6)N9|qoZ6!=;lNU) zgGL&Qyf+wWJNNHPwnyeI^)Jq5C4VIz*7J}c1Sk9sS^t`PpR|@8V{Kkuk980 z3Ib0Re^aYy1qIU{l}PN~+VZNR=k#pC6L{g=s#EKXSHWK<(!Zg({>>hCVE@(}c0m8W=zd2m@O3(P5n>x1 zdwUvV|MN2Qv*l*vhX&>;FhO9^di@Q4L@qh~5`Ila8t4;P^aKxl+7*~5FOa~Z2lz{c zUMU}6OxZJbo=$b(+7}4ENXo1t9JJe}RR>O9ga34|+1Kr?CVOz&MCVL=86dpD&eFU5 zzP+=G(}8wp>2iu{AEItM|NWH>lDcv#-PUyEO-BTRI2~NR&A#@#sfgdTR696Dy#vGL ztHTxfv>N6*^HtPjJ%v`Kw22WI=#e@mm-@x@{|9}_(%+9r6j-pDkH}XWmMAcv{TFDM zDrHhZNjQW@>rjcj30gLnW`H6Y@#fwV{1QrJ7KR_;eIE!4`bK%OlY;J--Xl(My^JOYnJnOmdrN%&Vr=6-4s zG=VDCa1?E)yn5W~&i9PP0hqEK<}TZgPE4+uo26B^DhMPNr)K?_?0o6u&shNW8L zx@lE%Ugh5d3+$8|`+P#v*}{C#l zoMBDRZx-q%vpC=-9v5VhQ6E*uqeDW8?-j%whm@tD^pJ9|%SPvQJS)rI1VA#=D=f>t z@Bl2!7|1g-kI)@6Z7y{(sg&MlWoG_R+>?O?RH^e{b@<;%Ejj*`p-7u$;hA|#=VR9F)44qgQjA9x~20%jDO<-m)+IR$is*ixiG9LLx2yEca z>Cu`bIvf_NaZfn_3%?z3AQtu>j4N~O>HBZAK%kub6Mwc6vpt;8J|g^(7=FZ~9%q!{ zyFp!eYLhJ4<@A%ed*wM6h&>91;;(JU1eR_~k>Z$3`sdue3rPyZ0%QY6gK#{*j0Hg- z_Al~oJZZywu{ZL&)?vCz4#PsXcu6lNMnxx%iDa0uxaO{4y;%waXU6WIxi*&>qd|A( zIGJ-Gu;L4}5|2nn>5DIT#LENpL78g3Rq>X}^i3s(pTSdnOKeZqj3eRbWbyI5TT3Um z*mG&|DwgeAto<3uO2HzMVb;nGGmeBbDskFBf9>Uwd9YhTZWG~IAZ~Vy9q(Mu$|}#K zPAbUDKDY8Lh8J?oOkNx@&HMd)5~i=}A%E+;=~GcTe0s%{yvCw5>X52P6vfvCR(v#~ zYpw6LXi?22;exFbp!z$YUQwhNyc*}d$4_j0^Mg|qUnFq*UwB1m7Or@djSHxqL)|TG0nbQ4~{s`$b&S13j+ukuY z{U>jbF0Xg9h;(zUz=>IpeD^n5n6Idu$0$en;kL-gReTtu4@dC9;U9(7U1E4mU!M+e zy?=?}_YO9aoO~(hL7z;YuEN)Tg)2Z6E5nqG!A&0|N;>%xSg~^iTfy_5rOia)gC}#d zS~bW1)@Hsgj3Qek4Uz*ETl~WJFR`CeWVZeZG9yDsDrr6iA|wY8-8WJv;SnMio&YM0 zF;()&JW6&x5N(y(;7vRQxXgtXZyt?lAtD=ceAR{wZk=80+0sg$cC@YYZ0^F^+beME zjSQ6x7tj~}93~fi7H{GHq)lG|28&2o*7EYRqrp$I@XSZSp$*ZoaUeJ}Cl%q!YI-2b z;RpY=tb7TJxyHrD-@4fHpYx4GC16I$3^p&Y8=v)!ELr$V58I%e9E)$}k=0qU@CF{t zg719ZwYso@M|2_?P?E!2-#IXp~;<>CqFY6lG5FT-*JtJBwQ zWg}GCnN-H0K80sDfSOKPT{uW}tExZ#!B+LpUmRFf6;-7&zq2*{g>>`ycR%mSJZR-R z;#;d6NB_pJb`^GzL7jwRQ}cT`vBo!gyWfMP@?0gZ+#Wk)=t@9_T5>?#+pwKeGEI+K z-Y|D)9U;1A?lUo-m)S0DDMKY~Yx+mJTvH0zEi%9C<8yB+J-Y`ny2XC(N%U#H+L!&o z7A|#cJTEb&K9QHK{aoXV#zzso)e4d+^-hv-@5pAiLv6Qpd?kqup6(|wH~dssV~B9R z4B6jft};bg=%mU7)87Z|96b9!IR5G3Ul^7z?Ko}NcG**ksYGGpLx}J8x!Y;0g;Sy< zlC^An48MY}NWa6Kt$8zX+D_0NIhkVaapQ>`XR928C~!Asokr{gR=bK+blLD1S?6Fk z3nvSIH)=BWFZm3is1k&UKvCeQWlw(N5sBJ*dJ?MK*!XI4M(@g3E7ZYF;YxGU$r zVY~Tq)3Eqz?$sJWpzlT!=;;|*OXNm`%-t)!HSHj_YvILmB%)$L=&W+d!gE#CM^=6= z##dct!Xvop?DW|9nOroPcgt|-ckb`ySK#$x^M#Y|+mPS#FBxp(U%6Ri^Iv^oJ`MkQ(y4Hm*?F=p z{@KgfiQoa3QffAnVlFy?Ki_dp{NZAn&@4pxvx+5`encPAkF%q8aQ zw!BC^Y$}N@-@&i-;O5lVz`(q}^QPH-Ga}<(4}isWIle1P-iSj8b1o#=PLfFCn6EQY z@?^PXzP^c)M|iT@0rZf1CGH#4bfdT-Xuhp&GKO#|_H)@$-P8ltQdDR@v=N3VmpM<_ zOBFw6HURa^_)TS8t&B0Otf^Jzrtp5`lgNYvS0&D?hj78lj>bb`?Y%jl^olKFw`r$? zz@w=d|D*od!E0)JWp$I)IiaHaOi#`oj`j7IXGO;xpSZTx0c%lG^BZXBG-0u)K$hH|%UITPjuaqHgXl;a>CT(!Dt zAUCq&tnwxiBF$A`OBm60B(}T4jCOgLj6qtu4BACI0A}skm20YNX~mDl1~`ev|@_c zyD-D75gzVKIozmFLywhn)a1n3FHwwOv7FZ|&?;h%awN~j{PJgAV5@kURu)xl++MYN z!;b1uAU1yUj}c)_ePiQedT3-v=%!j~fn*)Pv%0mclb?KVO>5a^0mwgcc&&$kvp<%- z&MR3AKQ@bHTVA-qV#6WIIT>Hy$>W-DbhUCVES=yUkELgGm&H|{{FewIS~jw3_bXK+ z|0Vcdet%-?TikS!3+LErCc(f5=S z4&Sl1qG&!*-Q-NhPRw_riODcieobOPK2;r?NKVO{IPa~-Lq4tvEL*FMDz?hnwR!+dT9($^A=3jORd^;9YU2W)31{X8o|-(pD!z8qo@v#UF9jA{%_+NSOgU_v z+=T1uxfOH>v&OAU^vl1N@!#e$^1Q~8HHg|8cZ+0o;HmA=#B~idf#1F_!1I5-W1#JF ztrwr{!8zm1R8Jo?)#$KE?E7^@U6$cyIsP{Ocfz%q_uiEf2p^AIH0Amf^K)Qc4ZM@M zs2*-F!vHkz9KFK%$y@SMY>&1M=RJ8#Z#`mI&5Q3`Fr&U@_P4G5EYP|RhyzQXv=W4U zzQDY#==EB(*K7WqHg8w+M9p7EdgI0Kf!GsDP7cr(8pn`NTXl?8*~ds_w+mRba4l*# zn32B~TX6x>r;9D94_#>t$ zCjZ2H^_$GTGht8P+k4*_89iFDpvG5+J3sK{D?Muc8IxV$DYikr=`-Z z)E-{gST=O^c{j+*dCC@?(|-A+bzi};a;O)0W-Tr^)tCT!*^aXuj?dyT@Dvk&;Hj6T zy3SHpP;m>3RoeRl8ATwX>oJ_9ytX-siEHuAJs?6YSwaLgSN*~}I1jYm z3S5Dwm`rAjYnqV7{ZS5tEbb?PL`ZQE-2dV+N^5-J~mW#c}(N6zxm8 zX%tV(X(wd~vqTg?o;=R4{?XAg2@8m{M6VF(VfXplBPQF=$|;(;WN7x}p8aTMb^9E1 z^q@&#-jOsMc&ZWXvi~AnxPZp@-zC*eml8<+f+}4lf&ekg*!;*``h}owVYnUy)Rjkl z0jPcV2bJ!gMr0L}`d!bE5)GDID4wF|!s(VWg~iI};m?^k340#jsXTBKGD!@h7Wn7Gn?*0`x#A=*1vmY zWJ(rxWl%ejNcb=FA+VIyHZG^El%!ivH$OVcDW|*1b+~dB9510n7IS8qO**$DtGA|c z;8D_atA7u5$>s9@4yxojl1UAjd{WTwLg=;kxavz<0PJ{Wx)vaC0f?3z6?kfm1tsv5 zJtQ@qfDs7DyUSY0X5nXl4EQ&{m91a?LtdiQWxtvkld<3f+1>h>5H*4T2HW> znB3Md*?-vEtK5ULv(C`kncK~+lbKudZP0Zl`s&t~8u8te#{?n5J}nTpTla~BX?s1U zuFQ|TuGX?0H12h^+4i|FVO(JTvGyp4QxM30n^h44ODAx@TpF{ z^dqM#*vv+qSvo;LT?NPuNV89MVL)tr%^lJ}!Xgm!7@joNIb@qzeZMO7{R{WePc`F~ z??2-b@9cI}q?>)3155vC!An{A!!2DcO^2yh9YB#)ZZiEgyc=HV@+nP-wrlr2)C z&#${8`kJ5Cevd1qcY7Pknu5TG&ph@TN=HGoa?6c7GBJ0V`@5yG(sZE8g}J|%7p{G< zif;O!U0o9cPhH6#oj-nSDqji2UgWbh*8HYT>EH1zEvJn};7?m@`6qrcoBL7TPz6f4 zRqI4ss&N?0jtV-OAfgh675_p#!7JG?Jre3Eqavm~Ma=9zweQkMT+y0<+${@y#< zAKxQMVf?Z7G=BZTa)yT8q?`9S43aFo)Q>~4BKtaX0vyfGxdF~UfZFsZZaOr05 zQ`&!J>)xIHBtaFvjfY8hGRqHHqPR)X+La=SE7194ooeU(!Gx=z89pF`kPkzN`KiH0 z_U{v5NxMFzRIq^Y$M+V;%4`{!-(Kq6y4llUk*W(Sk)Ir8Rf%#l^>R{U&yK_OXWGZy zP|=0j)h!?Z6!O_>+JuKcrH!)z|_ zW%@KoUM5n^W#bb2g+NjGwf{ulzcRb}Fg9o^Z&CUDQt_yJ!RSPSHPh5WJ6w3p8%J2i z9hPfvsyH>9AKhLD$eLXH zD>&>xtdR-2Gt6{O@8vq7>pJgGDMI^fjs;sJLK4b+|*wc21 z2aU1%z|zB7w+4Q+5_`Z1Ol8B(gQ_W6c>M1`j6E+kP#shKnW1K$OAO``KVb$pFZqol zV3@4}OKHEggSg>eb-91~N2)@($9|*S5AZcbU6n3%VJ`JyrN;KJi<@KmOe(-zhM=vFQhH9u%{bn0!W-zQ`#_+BRj-m{%d`^X6gSkPjflRS~ z)*k{<5my%cv0>MT`(e#&dTqPIQmdtDfT-fgnCY`&JN7?MU%0-JO;DTTaJ@TnO8-fp zrfEkR>(irUCQTOpVze*xtbR0mPgd}mPVWCv+ePUx3%QS|sl}tHjNg)bf>BKA;Q;OWqo!t+TJ$$QCQTQJbx3cc(j% zFhHc0P6)7QcnNvEQAE*NdGiS-V`SRngaN0r3U60RVn7*d{>Eq1+UB$;xd#@`BcWw{ zAKTYL^HufLbxt#gFcCDje&A!%%Bb}3b0)og1dTRI2PJb`BZLQOW5=)XSnAKr5O!jy zI6Br|n3uOh>+X`Bhg)R>@kA}>X`*hrYas2gH22E}bkRedyfpQmc-IgQgeK}Z54IH)G zK_}?+I9)xemj>KG5WHi7)Z^B?Q7_^49NE2D_ldP{?;UCXbVAL@jwn})<*(BD1njF1 z(izncl66p-Mk>-D+79M9=l7cA!rov`RqWn^BMh~CMlGG^CkuMvhg%x0NT#>1CBEobY;q2dltc@C3B?K|joO}X%oE&4yqxqBN9MK8@*q1BU za@8AcXJ*Jr9GZ-}DNB>r6VT-8Ut5~cQ!Qn_?el1zn8VU%v9&f?JWYkQz?H1W7GHp% z?yBKuAOLPT=W@lOyN~R5>0UI75^S~>OIi2t7<+-2l$AA>+Cmi*;~Z9-Gv4b-clEGT zHHXqe4lWq>86Ur(b$@(>R6CGast+W7u68sWzAT+%gi&ppY@Of}G|iBx!(~(-PZQ=# z%{mPTw%CqRML|j9QnO1l5BTO)n2!(46j^@^ozc)q?_?djCb%ED>s@CM_NICz&Pcu^ zue-14Fq~st*Uf^o-&gEg|Hb(c6pHTtF|Lcm-B$^`Qp}J*j`tn$Ei8Z3jEF2v1I#hm^vt1VX7<_TtwKV$T_*GzLgIl8+-6FixPv_Ut0c`K=$hpyl=moh4-?3;q3vseYEobcpr91u5dSgj6K@exe<*=xH4lu%Bd0Y zY~7iaetd|1%QtnGzxf}OX91LFKG~5gAKAZrV7}>=e^{o+-_C@|W!@UU=~*PftGFS} zdta!493g4Aj)JlAzq5I3?P}ov@oXNc(IRU2VxHX?CAgo07cWxcW5)`cOy7Kn^MUml z_8?pMDy5%vfeNdM*c_U`|F+rsXokr@6-d-P&l*@fd3p+aaqN#{-`>yu=qgA#S2^22 zz8V-{p>qHf>BHjV{Py3tP4J!Xw~vP2AA%~xgB`NTJM%Q};e*t|U2AXqg2xXqQSOiJ z3vmJCwp1V+hZm&9keNM2HA)(>wa*q3X_?>HpMbS5IsRfc&fG&E|Fsf=6^mf!F#(_< z6#$jS$g$S7X%8`$w-aMob53%&N!S6EbrIO0y><=l5<$mYV%I<0bPSXB^=_3_69HA} z0$(ax{yWX*zYt4mgfmhMP;Tuz*#(MR&WOk}zo$FuCNfXaCy-nY{>$F#{lCSZXwJsB zu|x|Q&w|7Xn@GyZ!lUVh`KJe#V)l?N*ef!>pjIKN=)Z|?vw!^$Talfu|E5LM|D*lt zpZI^O|H|C>Ocb6#bzek~0BK0L0|)}n6r2jlQ*1$_U)j!fxCis(o1pQo{iQ?p{8bDJ z{2uzJvokcs<(*XxU(Mz^ z3q;Pwg@_y%%)nby*pFoWLqEToM-3ffX2C4uc{4>CQjS@eH`R8`VRPZ38-px;Jx8&%@y0*gh<$KhK{tjox#=p{leYA;-md9Vk zS0X#x92f9xhD`Q@2S{1S3SP_!rCPn;EF?i#{4A)Js-dnGj)=sOukR-kB{vFtQ>RK4 zQToFL)W1Rm&`^_%|4|!=r6Fo6a`YKW&s2F)ddxw(=i9$h-Tkw!Oo%>uM@aNk$Y_U?!U)!n z;hT@diqW@a`4hB*KEjMMiux4p<373|BVGI72}G9uU-*+NA&8Ru#s3`rlHK#;xK;pr zybi0s#gA9{c&(mq(-8x8&r|nm+3soH*EJi;g#@ad&dOON6k^7@#npjW|UU55^Q*7Y?jy?e5yi&g}FGHmgc!;`p&> z>h&p@u(;*3UNbrTS2Zi}<2HN<_5U10{a5Y(w)g*~{X^Ao%V+r*^MJq5TKc%Qcz^|~ zkKmZu8xTMyU^xE0uA6`B#7xs+;$-UaZ;643hZ0S;Oy}9&+m@}ivRLVZH zEfr1P>*+bUBxJK*1IHvE&ZFjN{D!h}g-M~#;yDR<-L1jEyprgwQR182ha--daNN_6 z7s&F-ia&YUV9H?DK{$RBtNCLXG)z? z4);^ad#0SDls(5d0H?2RSx66MoE?mlgLO6b;M;|_1wCz|5^BSFBG1|GC0SO;JF@r_ z0;|#^mcBdLafOZR#KwqA^TxL95@6Q8EScjCJvjP&(oLUwNRvn{WPtguM);dViTwI) z)!HDZv{cuvMdY`a6N`E+<6rxnIRnozB+o1}xu0vdK_Zi3$hYpA7?nZW7Zk#1B2~n* zb%NsfO{x7phl>VxWd_iZdTbZ*wrD(qObyHj9@gjgrufAZtoigv<+hsmU!#FZ{JdQ= z>aWC0h{lcX`dFeoRe`&o#jWJ6Nc?ZnQQKs(LyPQ~!==p#5HTkt!k_ za%XccFyEdyrUw<+8JdpMseVr8>i!xxJ<%O&{s+J)9b?an4AD53ufJ2ZOqH4qRyJyy zsO+5C&l|-JiA18qEIO*wKFLRJu7D$6SgtODV|HW5Rvd}{#abgQ`ci4+S{HX;d_!=?x z9D*&UI5GD7E&GVEw|on+{1Z1j|HR**hg&6Z?)yvBRlG8m@$2GUbf(aCX5r8IYRm5y=eNGMTbz!cg=24z@+}&AI`Rq(C*M42X%3fN9 zGQkCx@`}VY()Uf`cOjrk_D!ES<}It=&a<$y^};|Rj2~WM%tl->lxIf1p!nHW?G*!5 zY4^qA2_7g{kmmO7ICl{nR!UcESqrt8+OT8gS*Fh+E=H=KF!LOjfLieE5^{chRix`# z6;q8-eqGPWI=GVh$47WjNSM7eedSoXXAkSz3jhhIK z21ezv@9$VEHrcF5?6aa7Kh^c(f1(`Mi@#mf`ds7Y3z8?k8OeVkGWXwkA@Cf7B9L8& zzmPI=lRRQ_;{FfpWQdMgYUXyr#?nmifgPy^?p1+oOfS%dV*rJu71U*BS+{WwTpd-T zR#^2>YAm##+fW>5PhI!P>=zSRl_Nu*K&5S zDntVkSv$PFalf^LW^gT9t(IoXU_+rysrl@cp8e1WDc$e>)#ht*@FmVIg6vp26E^}t zqgDqug%Tw<&R~be9`DjDmR%z#`oRdZ)%v#R8^j7J5XFcwYt6IPOlQ{wGDk??-vG>+ zJN82m^J{6&K2XZZ=i)J4W`PRFY>=L0;dg(HW_dQKF`a+gN3&G#n16<#f7;H|Jj*OT zW*+Ho#P3;u^fC3lU$)dxi%zB8q9f}}RLL9p(@jrHI zWJQyg;Nnck=FVtkd-Fv6mwQ)nJ26tQhE0gkBq`)ZO@0S+v8%s#B)=1}Hw44EBp|i|WP9lJlS7dc*`6X&hD1hf zi^gBm)IB*l?9dvng;5g|TgUS2`-QD_$Y zqPfM}(_g0;#~5tCfsBY-HI=KHG1|3*1(c5`ex?RE+ra)Z=h;psyO+2}-=dXUXTCtV zk7m3;3vZJj9i9%1f2?#l1pXS|mHh{|`D8=SQD8^2o&VBL{|DvIjbGw-uA~tkzoAyA z+4ZKw07D!Hi}V)Y4@?Ox(mWz>E`_WbYMy)BfSp%|De zZCd<3`xDEWca&`YfJ2L<6n5E#suQf4d{v8BVz64XU+cO~)h%ZQ0YON%InU!2t=huW zk-1gC6`9fgE|aq#q=z2NYLMlw=bx8;!>v>bVtP$sPQQ^oL8Jeag|}I!R84nF_$Dpn zVScUd>o6o=K~36h(gj-I(1Rih#$L2fH`V4feFaWT64t|aI8T|rXJ{&MQ!n=Wizt$v zPU7c!?8DUJvR&uqo+VUc?j5HB*%>G63wy37`D`w`Ky9}**7SslP1Td5iA6#U4q}Z* z*AVV6GWW995x-*47gtnj3{vk^IH8 zTxaB{_w`(6KZALk%{`s#=|&CmV>Z~dTA*m=);<^~9Cou+6aU248)&V!Vq0Dn%s%79 zFm-mO7mLl(J}b=TI&9vMg_D&y6PB+;EujU|-%?LCsB2Q}Q7u$gqNMJ-?A%u`DtZ4} zP7AOwKV;&VZBkNG(L~7&7}z5DTWjJQBconsln3rwX(dKp4VP+>KIm%FbwSxBV6M43 znmG0_N<eN`>3dIiQ!^T0FAvtoDI!2lVH_w5uVv9JZ_Ec{S?21Fa7(r0GpED!ZM}CHzFTM%)-;Uwuz0*!cV{L zN=}#lw^)Ufg`Yf(CEk-E}W*$W~#mY8aXt@Z|J^(|YCRuL>%y zRi#tKq+!XZdWoly*q&j(nTz_QN1rFZ7FrCe#gKYeZ|>mOA8QwSPe9()lWt)DHA9>> zUS#&IWk{ppPAaD-99Nh$&i*E5hHPly-ZM+R_{>>ea_04^s%5~FS3SRvZ6N&?FYz#&n7ECaeR`Md0}E(EL3cZ1sBw3PqM|M@i{FeQZI&1)dQQkMw>)21u$@0XJe*!o;hWi@U(e( zHEo-7`EoE`w9F#5as6N1(NnRq`nTmwEt5i8%$28S`L>b+n3E5VKV#ke3F)z;3EtE= zS-cXb?fELhdG4w%5pnLDdFX2rDX6N4pPwAir^epM^jdTzH!40Jro@eXqm?TI^Y61X zw?cDa2R;5X@7NzJku5UR%YDcC8aI|TV3k)vukurPjT4Dp{2slJX@kGg(tEMGTUbV| z;rL-w0dstl7=Wo!{xQxmXfI5);9Cfp>u_{O0>mD&{<~(|4^$rENJOxx-xYddtqS`7||u<78t+BW=#%4*R){5G_PJFf%l9Ogz;K#X~wid zxa=Re%c?$06LORsg&#~;#^S&0C%;3OhVP0y^vbLdGAH9g0EBU!Z`LqIe^~s91GLs` zz{P>YO%M57;7-2H_R~Y+Y~BBDe(myA-9LHs%$KOzKfhluHDo7BiR~CbRQSLP zmF0d9amtF0vf2ge-bRo++CurM>9^hD_n4nM{La2b@F9J2`0Y!IskUeremS}*G?oj# zTJxL1es(opfjhw9Y@`7TRd(fUo_($-Tc^MBMJ#OBuT!&Y1FJe9VBI=E8fR-Sookco zcj}424Rz?OHNB8a^Annv{411TUOI^^zT%&SM00>?w%bAbi2uwyJDlA3xsVCmhXFZ+ z-bJbD0;Zmp7hPm`Bj){_mh7>^c>~EFcIPI|hDttR0L%-cK)4AS+~AWN2Zxzsm`! z4~sc^OkmlnWg3@N8(**5-O2IVUYSAc)&%Co_&O~%dpfXu)7CbHS;SfFkiUh;O%uni z7yh1}t;vJ#GHY{A*lMj?Z2Z>39q5_lGWU{&LLV)GFQRk&?3(G1V}4mHl~&_!_ZEM; zAGgnYX{KB={=S*YGly%^=Z>=;B}254R2v<%A%fOfHC}QTlS;^%RFXF_bzmY#nU|G8 zQ|(%_>{PLU76TWTh3EHEfB-gVJHds>elmozQ{pmoW54(Tut3d5g6@ zxertIL6$X$Y^urbpH8bt5M+zG;X4KyOafPh%$x7p;urrLDKJd+UATh}Kv-{z^pq?- zZ!Sr!Df7%3ep1Lh_JK=UOws_7@IN9gpyOa>>OXAS)pwGnlQ2&H?6rP48a-oN`mJ+F z7gM?PZGL*W8A!UhEzO@_IoNL0p5-wDpn1KmdiQO7I71(<<->lHpLwFar%13f9sYf@ zSq2?!V)MUY+{^hI;fe@y2xhn@Je{*t;pxyt^ z(0kk~!j&q~JNrUoXK}_e=-N^wT~U^~$If+j51NC-d_o$iI0gu_>urm_C%*~)PNJZ> zR&<2erPlufV&5QQvp(hgpPv-=>F20+VJ>~NpC0t-=hDaCP5J&R-_K7Ex%8)9dTFlw zd-_1r{`rx`yqbF;xOu_>dH!#xNxgIBXRqCd(q{didr~=-Ui`n>hk}9mFH@Z_e;EQG zTWG@DWvmyQU6j{!5VKc;w<1$QO+>#}4S{+?id3WpS`CP-BVH(thICd7iT|Gn@C(@386;5K% zR#f};57;WR2VQ1e$&`4irbHKN!b+`;Z|*2kHITHz&Tq%M?v*F*ECPSYOWC;miJoGg z9dzT;?&)wu2VSy!0qlGfK;gUp4gpc^t?*u;mt^5IT^K$bFirF7eaXH0kNc4Oh%X)k zj{d*epZ*KG$$#H#KKUDb^0QL;U&y~^Sr76DbL964o<7iDFXLc@lE>NP=ag(9pw-k?pVu#+cq%nhFrDLii&->NVn*AIcAo78wig9mgf`|h z(rIl9$DV&_OW;!`EfHAp|JUc9WcHq^%v^fuVPc>0$o=6UhIkJ;sp#Q*pT<-tZ!?Yt8v z$~~dl`6pC;frEk-SI|C8$VegndLjG85yEWocfX9{dqVLzeo`E9s@E&=DD98TXi@-6 zPF1Q(j#0^rAsH(&Tc60qIIQ;K@$_M#B-H(XEo}Itwsc-o%we=sa`kRlk41EfXnnihzp&j6#=+hBu9vTN> zXl|>rt9UUi)3@2i_9!+p`TU1arC7V1%6L4M27UP2vV+oM+)T;BYb*R;{UhD@{CfBJ zEVqL#u(YsVlb)w;a?|ZE0{0 zKcc}jy(Wq$*`FK-jkBrA!X5mY!y#V!Pc&q!)?KrSSs{A`icE?d&F?=zYKveimHSxR zOv&o=)J(}8{LoCvQ+iF5+{=&b7~>-GU^HGBx2aeqRPZ-YBJ;JD&w4isZ34F zX9Z2?+nT2 z-iJVTNSI&z;edgV{txjxJ6T@m^rJ+{Ql{Z1k*$f;L^RhpYPBbI`HGw znL_8}6z95zH+##m34QT3wtdF%qlGFlGz<2!J{+$S&Dsz;!W*^2y#`_z(;z;s%r_Cv z_YiKqKpz;x6&lUuw$mel0{hNTi?1?)#GVvn!|zk(67C7%IE88t{CK6-4t(@|85@zX zRAv1$$4YQf>m~uksfU8CUjULlG@TrPU$YO=h43Nm3$R4-Ly?~CORgpd?cBG0KK5uI zZ`v_0V}Cx!Z~s-l{amT$J~sU*E_2G(6Vo|fDki?^g?@ZtZA;F(S8R(wf)2rb+wJz> zw81e>N1;?Z*dWI4w&TkunI%A}H)@mr9*8}rI+Ft`vfXV>=mYW;xlp{6X+{e#rh-TH zxPUu^VZ%E#JFc??k)wyN!AS#76wl5Ui5E8TX!CzV`S0`dqrEtdkF|$Qtx`5K+fNQ< zle50O$-?`80gn#^EYti)!M0<$sBOL_#}{@a^uqdqH}`#N?r9QFj4EU-^!r^_z79Ny z`1jYRLa@*OMHaSSFy}b=HE4rk5dU$nZ%N8NzuYv5f!nI*L~&9-@#5Rv+f4U1 ziyy2e$&zpCeL+84^Aw)Vd=3@TUw1x@$l+gO#kH;J6V4%^_7!`s_$Yo-nFq}lB5I{C z&aG(nUCcZAdPg_>A;Qgl$ef@E^CLBwpyyYaElalY(Rw3|Y5UlFRKh=)Imd#uOjF3m z^mAEW9(I!C@NW>4$h@)c^DfzU+8WuCW2UfKlge6DDwOca8V|Db#{7KdjS-?&2c9e` zb2MOMf4J-m0QbA$;GfeyKLCHpf++hWBU-2nYrlKC%;w{q4SW4d5wdh z?@PUL^s2Nr_?bwpS<@qY6W^+hc4&-+P!6ZEpD8E#-pz? zNRc@mrLjmY*otj~3yVLH!EdHU> zohrQiTg%C)!?Ip@;qP<d7~*(_b>upOUl5f-(3Gu@LTsEY~! zJ0l!cN0{Sg?6vAi{9a|ruybkq#pavftj&C7a^m6+-8UNF-Q)6FyF|Y*%*JKDoj}KI zTb^epQ^$X2jaB1z1Mf*60;VQ}sjXdi3RZ3i#2x_pX#7QDITkA#WeDzwNm-hlnA3q@ zMORa+umMvyqMj%273yKHApG|ZG<(pSL ziLXaR8j!Lt>@V{sT-ImHYU-w;>YcMdVg#po-p8f$?RKZnSwLyG%f{@&|BRX$M-5hY zt$Bd~PznI1dZ{`@h^7!PXE1d4=W%oEZw_GZ^vMTI5stsVK_mYBP_HgESYf!NGeUfr z!yNo<3AQY={cO5=b&DPpv~Uj5S?xXJ_HQl5Z_Bmd665A&s313{2Te z^*~Af8bV_hiI|+<`|y}l<|}^LMD?Co9@l89OwiKC$%k!gbAZ^1zEKm3>b7c?)>S=f z2Viso=9~xyGXDJ_FYkinuz@)G9TVlIjo784BHJ(!<;JA7)r&m$zK|u4`Nt#K**fNg zjQqPgod0@Vp-+Ul?>`QSC12Y3MZU1}(hWo;e{ozi}BmZ_^q1zy7fzMfBldsAyio7EVYAF>oVT~ zsM~(S=$!wgcBcqr`>?IFV3Q(vwecKHOoBh|FKgi$>rvp=7Q2mgE=Q$S1#Z2bmuTXG z`p77T(N^4+BFS32-%9)kkN6MX$j)efM}%uaiQ?93A?5z$G( z_O$0lv;JjK$b#w`&H?5FmA+cJ>9Q@48){&F#D1x*7q%uR2CdBXPWRLJh$~ed$@~{d%P2M5M!&tp`P1d!vyf-o*mELZ;{5t4@q%{r@4oo8h+Xht zC6^{9MPIv@Uu*?_yhbv0b>Q4z!20iaO#El0PzX%amk6f5Io5X+wl~@^w=ox(U^F&?fbzE?Xm1$eJkm(h`3YN|JlDw^7~UKzgIKf+$8#Ji}N>4bR?%`pEp^eE2paGfa%TmQ&%uwdtvn*0uyuiQNp>6*J;$x;>CKfr&xv2408 z-&6c!mc!;fhXE$trgBH1mAwSycKVo<^z)pyGX&_|Q8orrtyTGS=PF#P&3e9}VWp&; z3g@%VPgHl1!REz8W}a*n+`S^^KPMF zF0rCbPI!EVUVJty7tu6Drh8q49DLI8x_sF*#46Gg^8H@qdcdTO2HFjyH)@Z6D@yqP z0B-;P0^DEW5FjO>C%A`OaP0!hY6m`Dk+n;J%c^Vf&$DCJxPYU|$Z-TO_I`^F82H*+ z{5g#~1s6&VIs;2cSV+O%GQ;Y(<%;8bCjZ@}<0&_V^as=ej8%J0A}+Mu?W2pemIP}^ zI4fslS!Y0or`|&%GKX;FH2EQFgIkkBBg8;v!1Yhuw7F*VU3&qAU>t)gg4i?wKNi;w^cYH$O% zu4|*ER>ijV+uEwVsP$4ntO+RL;sr>*Dq0tqei+m z7$gd-Eu?B=FL!c{3sJGEp+nLZ-coAId{@o%ASd<#0$S>CC7nMw^j@?y`({T=APTQH zY8#gN8kFq>z;MpOL|b#3#aL1wV|#Pw|08u>CVk&(E1_NH4|wS=EzDPb(L+Y0dON=Z zr#~;C_rCtjNtdS1tDn~zmT4)RRS#^ZytifohKt>dTFZ8B;H;vnh;?Kx0gw{|UzP!; zAG?I8tei;kLeihj3YO{ID-r~)NrWE!(m1UMltXft(&p5zP@6^fbp|+f5k2o}R>{0o zCx2BmnPexz#t+D-pb<+VjYaNyx_gVp@Gh@F?h~Tbg7Kdbz@A0An^6APGuXT+Egx$X*w7fK`#>IKGE&4NrNIJGJ6iyDe;2>M7 zlcBYzNjDjY2hV!kcPj0sMzrl6ukGz~lSSv9lel_YUUjnksIlX+CMHI|a!#Vinigt? zud6BCP+hp5i+2ypXlT*07s5A<$DPG1TOVG0svaQ7xzYHh>QUQk;x9Pm;1iSsma%qe zTaB)X($KNa&fX_!zk?3Y>eax;38PnV;mt%8Zu>_~_FGOPX|678jTY{&DNEP)t4^NT z9xdFfvklEUPHIuW?>383q zGv038ConxU+J+r}pc=$|y3 zs6iTzmX90l@4ZF$@#}OG)=r|SbCUy6+x?TU@sBL$dTsBVn-~ehY(bmX1@!=VDLmNKnUzZEX-Ootl?qL87uSA5kCSGU6K&OHoG&>M5W&OyXUyumOgYnsy0g{!QqVw=Zhn7LYtKbdwov{4E3$;jXeOGT zKFa<$X5U)5k_xj}lhhQx&N<{+^IYX91p6wG9}(=wY53+J$NBZU{srr}8t%D@w!K|b z$dR1=B0k3;z9|ld*{0qx;jupS1q2@rAFC6-;7FFge#*G4)ai`s#N_F~_D?JE2k`SN z`yrKS*>)doq~6yuLVZ?myy2Szu%m6;qJ#k@%ZYh%@M8 z+5Ye%?Nd={xUqo;^%_+|W#QZ$Xcn`lV|m{BgDpA$M`Tac;*(&y2yqd2{_Ac-t0r+4rGIe z=KzZk6MD{Odis1a0dJQ1i_L^(&1{D~C3Y?($qJk0e$r&~kJUEmYe6abA1(D$@&9(I zU+GA#qT+dex@R6G-JH$tE#q_IzVt@ervY)DX-dy3D z`qdOt;dbPopW2|8V#=D;phxg+RWlj7YOuy%M8OU++Wmnk4vgO}qpAXxUN6*8Ksi|d zj&*>%F`4u}N`J^tf7PWwrCwb~W9AyaB~dsVcfGzWJwy|Nixtm4)Waw1(@;!KOKj)| z3!k>ulA+PMoBMFpKf$lR+0{R9l}&HZesjLkkMq+-6Tmlxbn~(h`Vlpu>B?40G^L}z zIF2{09TDCMNT4GToW4}Af?023Vj$-Q9CXpPziB#uL@li4^oeM@S$Sihh`4KjI6-xG`7TeOFYWa-F1d_=y;>}8)$#2nm)}ln2(x!d7i~Pw z{RbKS+pQle>6pKMU`eJJ^n-)3r^k$a@^k_hy)u(Svz576eS3GY`bM*NU_qHl5MeIx z$sy!a1v02IH+@t`E|j<4H5`O5+c*=qEp}n4lZBxc71raGJ!>tx3M>lDZ(~|U>lGFq;*t{Ld{@X z$KzeL0`txX)MpDO{%9u!ze#|~KH$s~*{$rqm+jGp#6JZMOPOEtz3|qF6Gt zXD$OC)_^ahHb;<8Ir;wcZ}Z8PfjZ=?!1Rg zI=T@dHU5~y#ST_+nxE$J)>&8#c%?JxVt?$hW!Hs(9sOS4J43%Zy2m1ie+}x2jkF=; zYA2>_=WOgPcK22DQWKf9hhwEKf{+5dbF5LpBsliS?vl)pOi|h4#IUZohr*^Sa z*2KB%&kSQ5M$tGhRyux=eUd#9CPr-l2lmOIs2M2R;x9wqzY|-?G$~u8C(~6$G{!jO~v#;(W-zZ)fs9K(H&&N_+*XXPC+3n;<94P*rRmo#QBSsx>&GHfx2TK8qSF zQa@7%J2M=YMuWhPHVH}Yo3b$Fd~Wl<9d^*>OU%hMpT0iI#&pYvM>k=dRnypi4u~ki zvAcK?4l%R)!X#0*V{T&~P%Dveq*Ax_#pD4(53SB#qYxp`w~bXaDF71`pOeUWIU0U! z?K$zBmpLkK4U-ZKk8#I{rq~ABk%D3eoq1M7U^A8OHa}n`2=lSmEQ@|FDXd=~vDE5F z_eJ~S({T$gpssZ;CSsP79p*zwtvY!Y8!~7GO$Rk+au#^qGi)}9zbssKxZK{lbo&Yo z3G*=m#s(y+kR%zyxzbsO(-&*X4DeTO(Rb4FYTRpOfpmt>S!YWYaYF@4qGq_n z1+87TC$U@f!sfVVXs0o&&_OUvs%AkwC;L-t5$3M*oA4KLPp$GC3D|iBFP#`zEftt? z#M%)s%;dqYLTb{%PAd7c4im2oxC(N>Ww#W~Lx*{r`>AFPag&3!TUgB`T_~ei%l3Rn zO2_#VhFjM=ZDl!CWTh__+vP>$Y;)~XAh5P~&rP0Q5Y67@t{Y`(8Et>gE#B5e3!je` zu8$@Mp3FM6CS27@2#9F-%r=}Sh~)UboyGQGu>Draim=zSlgsEf<_djlpflD4e7!z{bKIQukN?X zbq{OQabCZd<>L{P&#`8T7Bl1zj6)aMs28VSiIsg!PZg$T;Dogb1zz*k8157KGtc3{ zNCBSpUC*`bW)5H@Y>h{lINO%&kdFeMhByymdLDQ3RU2&(g-y;|wCz1s2I~%!uiTs7 zo;UrKu~!JJbtqTKk-G>i-0l_bFKss8xbz(jdeDpw+GlWz6LQ3& znRBDIPa_jrtJa7$vnIqZSd$kkAAZC{spN@3YBS5@<{}L!jnsxA^qx&LVWZ|96`+4(papi^K&VNLXnGVY1`*Ubl4F zvs#irybxP-R>r>S?P+mef6rHG+Ye9#J25*4tl|DlmBQu>VPLK`A2+B z0hw*B!M!dYeVl#0*}k%!pyi&jBZdM`xQ!;JEhlRA7{=a`0M?BBI5I~KR!9^+q6!d& z>V-MKR4;=rRprV2uh}-%h=nVhqf=B{i~B0uH%g>buwaU2Hdhn#U(Q8fz09${H?Kd$ zYJ9GpOZ7dpya0N@CxOv>IafP(+;xF-FI#9hWLGCfzFb|{TvND8H>E9_34Ar^>KMw< zzNAkrY`%eQs6XGODIEWX>athDi*#MOq${>GE7pQ(Y>_q$qAhRdOiYaIb#9`n7fLr~ z+7>VAL~A?CQAFXJs<~K_DS~`2QNJxl++H!~VhL7h8?R2>Y1=K^c>Pu3m`Gd=mRP|K zOlnP5p9bNvWm^tQvoX->7_|znf>wpIOtWO*EQa}Z&sLjtAlG&|qrQNqyc+y#YRcMX z_iL(&KVLJ7kXrl_>BpD<_I^2>+1YDnD^Y=ArpkshSw;FZ)r@*p=Jj_4F?*i$>Nfc& zX^a1?|B>GhRzNY?bg4!<&?dhnV5s%tFL|R{_?iy8cUW*TN+hn{eVV*ct?tOuD%_b) zIeC-|obuJc|MFMPp@@osNZasvR4fIEhHAN1h_bBr1KW9%oF-kr?I>hAACOn-3~Olf z^ZWWpVwv*}^jVL2+_BG(kdE1!m*I9+M{Ld$F|kkm?;DB;RM3`?9@QH5PEtn`!r} zx-CWH9wF8NgwF^>Mt!e7RmaXpMD( zR<}$t{iTFfbAANTR2!*I9R3LxGvVMyaM0J;_c}M36X8ak_L{<15nhFF;Ga_y9^Zmx zwyuA)Z0D>HG?wneA51LV){)CfS%=rGe3$T;tf7Xz=8I3Q1heCkHz7HCJs4Oo4SwzM z6o47#awUl>__<$!XRQV8$x3ag07yChV zZ+N3tbMS-X99!}K=GyjR+kjo-ksl=%s)Ngqokd;c$3yoy`7zm!KU>0FKLavqd9p;TOT>gT0Az{?5{P2# zEk3_M;;Pdp&ew9L!aB35cV#GYZ2BvhKR>SivQ4vWH9o$?#uKlH%&11YlpVU4bvHLk$^`v;p|DEp+9BM5P5~ zVJeVEtR1tnG||{Q*CHNqq;M(-)IYK7B@cA4as`^O<;O9_cp!d;XJc&^Xy{CYt|PeJKH`) zUSc1@H~X(EDkz^Gj;$40?zL@~LLFZD@}KpYB?)r;lZtRGskiu+OivSY^Q3^+3~!DW z?uaI5FqoS>H1xtf_=AQfA7bOzjN|-AU$%;twWkT`CbbCp#E{f!X4(t=O{x71aP7DC zVgWw4YMhEK%4Rrx38TW<`?zAQ)ed-OT_RkuL{Zh0l&Zb`hR$S}+WPsnNudz@VW0dI z0p;Vbf|IV2tC?Geb^JGx*Wn*rlN`vr2lqNl3~Cc5gA`8w3ScWQ0TiWTl;VCsRsm#I zH3og$Mh*JVC#w^abEDy365XXrh6!eB*jVm|xva1sbnbfR$n!UEBY@^I-Khh@>msik!X*=}n4qhI%S!D>2#Pa4e zul3A4lEqBmURIW@2%>E^LV|5DOFI@zIL zWUnH~EYyeLE90edK9xFUgH7aU;(|@sW(czGTM%pFt1CO%y)b$;os%r;bx!hxUQIH3 z;fFx^3HD6?c@?%<^W-$&Ug)j->sv=+^8 z81&_A@#R#_qKe-30ro`SNzcIUM}VZ4dU!80u928 zsb{_wa;(kjtd-^@Weu3B(7xnem%JC0~xzo9s#oX`2_voiCM zb(3JqJ>a#!=ubucMhCuriGl1|{&o{U^5CY|)*J%JQycEF+zhiLhKmW7D0>7~E!gU| zdWElf?dxeyikO|0cQ~va&Bc;PAontimmW(8DJ&6jvZ^C$0D6o;)j2pV6mF!p zYpG58BMtT|T_@IEo6a@2(Ui5tNU$}&&zj# z#P-!S*;tdb!Y#S->_KK#UL+jFSTJ;8LVv1ddcIUVbQEkv6ne_{z7=zTS^zVI= z4&1;TNlPj9+BbMdkKDodb-=$Nod-N-!`Yv;+iK_s^LYkRpX^T%q(0eO|C14XaIA0P zbISG=_2dEuR^U>=5v2vGod=yr*$i+@O{nDEfgv&XdQY?H>1&;S3iei4q~C3-4zFzG zbQaoZdla9i>asPM&^fOD^qXF5t7YYI6*l43EgU*YKN0W`F_q5;p&FE((9;kmH^=-+?Q7^KNz;g@->)B7~0DcnS=jjymF%p*s{a{halc)B^4htnV3ix6eTd$d z=};r;YR+1;tM>Z-3ImUOH0u|DZm%!&QDKem8^J+y1_!G#JY}c3OlKX5j9>lnxReW+ zCOWz~>iS^0IeBJFGV2h@Ke{S!>p|xM~%L6kG7c#8c-#;CSt8;3J4o5X;}J?Jrgcc#7W z54Qc88UA5TE72TSEEA|3AMSVR=OrK0W(&@)$r%S2lI%GrLUVw(gM%H(L9Le%bz$aS zEwq8xvo~{U`zu~s?3fPq?;mo|8$l%|dTkerkGcB?odHf=1qM5ywD5h|hc8d}2NSi8 z)044x5FRJZWzkxKnKhY)rR}+Tk?d{`{hP&(MRS`UIF6*ph z=ti!sGN=9TXPBQ8gVx*hb@ii`?cJLXbsRqFV#O!fx)>{$R&1}aoT5u zKB#durJL|%yYY1{u*%+IKfl!p0?pu=>A^dW0KwW7~+4*_(AJ&vj zET}ipvMG`Jx1)*kefwwZlSp{+dZ}(@uhg%{zw@U&b56K!tSlx4QsZ!90GTI$1`ht- zCLCDP=wM+0G-z!J8n|i!-A1dj+VlWxfftQ zoCg3E^53BS;k3#2di_hZ-v$X<5xUFL$5Ne`NYoZH(;}%b-_KtBLFDu0OOUartU$ zI-#Ye>~D43Q-|0cK&_lI?H)z$}$OkbvRI?zS#d9oR6w2Q?* zCFU%Sm#Z(GR79a0q$!I?zQn>mrIRr^!?hg`j(@d)_hkhAOoWDfG9ioR^WrVBb<70$ zy?EadezbphNegGQ-(Xzw@T|z1IdfBL#cv;a=pirsFgK=cFH8$?E#(`gdoi{;_5eDD#A0+D{BB+YcpuQ{dzYnyWZa zYc+1?Y8GPqCKs=W2%O6=QT-D0b0bY&_82`Bd)adtf%&X^q|WKl1D$`%<*RdX_!WF;$7#U_Gb9q^ z6lZ_&m(p*N0{|J--02tbtBZDcN&c9Hw~1oDm$f_sHrN2NM~S>7MjZ3vqcmVvb;ELJ5%h(4SDY-SOC7Q+HKqsE zcl6Qq?|(Y_$H?b@gRY?yIJ-^woHfj0H?nVlNO{GY9MTtfWvgx&uNa)sWna4d>A9C5 zKKs7v-ism(TXgx>;>YjXbVKj=Yf34Ap59C`P1~ibVA8w2J-BMvoH}v&^HphhR~46T z<|+;j9G{w4L(E0j%i<3Ki;XIs%&nExEt{~wv92~)5uuZ!;lk@=W2Bj$%XI0DQi ze6h0o*B>LhFWw-cS>hm%ebTG`44t2_{eg)sN0)86;k58Y%{#sDaV_DC*6DY{&hXc< z!z{6t?F>)uwKF`pmzO;um%;5`9GOyoR8YQ0nef9KY`Kv;@t%8k>Pe8^twF8X)SB&O z6KGpg&7NI=d)4!RyWm;jUlt~xt(Pq7Lc)$e>^AO-X`P2!as=+sHZBoU+pT|JhyL9u zbidA04}rrr3_gzY0UC@z(Z53>$nXzv^V|Nb16{z>1}*i_zjFcB=l_BPVT}k?yRT2( zF``8V45qXuEc3%ny|RcfV?*f{+e?DA^=EAb%=&jt|~cR z(QIwivG(lnLPhfkZrlwwev7x@*4@l3` z>iL7nUmVr|BaojCe?fc~7E9qqS(}@z0RmlU<{jg+Fq*Xx@iKol&+G_?llQ2XPJ^f_ zs$c?AwCIe(WHMh2q$v)49T}^f#a`0B4lOccrgooU5}^~Q+43L!dm2hgky@hT`0%Zt zb&9C0!b`+8lf}ya1eayi<(WKoxos%Ekpvu?f+QNa5tPVI>i)9tk&Fo&4R={^Q1IBl zV{ZV`-}FnA&%^m_*5Ael1bJTAo=@11?VR`p{JGuboc1<3zerA(KIN(meLg}ztXNO| zI)i1&@7WW5+(tZnp6JXOw+n48vrlwqiSm!td&@S|tJ8aBYzfZ3V6>zLezYdD@g{iC zJoF9b!v}&HLh{qln$wSdO=e$yHd$g@S+q>Ql9w1Xwq zsC;j%WEBecke~FTcQ~?9Ar~I&Tj|z}7=8SINJT@seu%7XE|=Gu(*i*F&_63^(EB31 znSSa<2bFdbB|o5R9rI!*Q8Enb4tm`6*UgXEU<3M{teU4++`O`=fscxxRfh<$cMNJP z42dvfSszl&O;5UUp00N0iYaG=pLC@}xw+(F{!m=ZTq;S$c@@dBoQAj+`vVfUe_3tt z?Bc9>I2_^&1Fg&L1V|wGOMQZ`)|wBjsfSbbguaE+=i*9&P6$?ucb+JjQ)CJ+>&6y} zlGQ-vEPg}gEdR7jF2pfef;yOcEk11k9moG)?}1YnMRAp-QHQ@U!{gKFWM~rq1bn6> z<{(&zR{na|6>9~?*8Z6#cEge|ZWzQ^poX73Z_LdX6n$w;Y!tO*M_U&eVAQ{8{I(tZ z#L9<#BnCay{9wNIwTUKf+h&vHZ-cnd0C-;fQGGOt=TOCkqA?m0V(4lz;ZAom^AF6( zTx9blR$y#-QqJ~oDHFBcJd8#qYZeFw-ftERk{7jJyg%c!Oz*MsDzd><)518 zghp$FKIxxBs5$de8$a}4`+s2n>4%i}@i#+Cw9~Zx$;Y#E>r)>vx1O__%@J@rMiZd} z7N11tOl^%kx6r;RCLFRu475{hmM;LNWN3N`a%X@|CztKA><3FBOj28hk!tm^{(dUU zU+k-9-pw}s7n$_!Dj@U;zr|*&EB~8J`g%T?`)M=%b=5!CwZ8pJLF*6sSat%eimS`%BXakZA5N#s~za|9;q z)up@TVXXd5;b2nwVsnAAC*9e5%a3yBm=B*N^Y2#Oa9XYCVXmH#5!EEw+IgBTzJ^ek zihh4_H=Z+N8)#(qP5il?Cm-gDk~IyM((KS~9hsA_j|G;hqO+;ZKzT~{$(y^HQV9g@{mwxeJ@~;#B!bsXOgRdeMxU&S@%gv7N z3Odo9`R0xECmEVFijnOPj?6|46@wBnXS+eWdT2mYPxwiB=6E*?&dDU*Lz1aiT@)=a z8(K6FSg1D?Z|5h9qj2ox?xXO;4K%VtLovX%WR=Wl z!0)!Bm!#Q8mRFpQKkXH#IH#* zZ-EKUmn#>PoQIjE3qB?Q!WG0PX6T_G6kU@C{Hcjur&8PhN+0&TgSg~w4ByGt{)X_K zEn_y->pXHExJ`ymk(cM`g6fiQ1`3d+JoC^+ow1$%Syy`P{^sVNdpq!#*U2jhCowi{ zdT}gw=HWQw99Eqi`h^h88rBWyuD)OuRz)M0uYpk zbiNtoZ;qElwp8*$KRie+`atOrRiXt+vte54RrD zA7RzrmwUr?I$YC|I)gpk=%&3mFlzDLsJ6iGS{%T6a9agAH3`D4%A9J?x7K98Q%g4=I~M>e*p#*chGDr-@UQ} z*MG??TQlp+_Bh>p9AX(gEC?^7vp7SCS7*P7ZGQIiTHQPHWDm}Nz;dy}+%<=RlBHv< zN%Gjm!Nk$uX28wxfJCRp$lCvn=6|N<`a+FI#EV@gk9T`SHo*!g+xbSg)@%kv2aqpo z*+;Xl*7ib+Kt6p~CpSrjz-9e&ZgMCBsqSPhUHW8Z0VhV)2{f;@ovM`o%G&GmIaO(o z@8sllO7ky^1X<=!v(>>J=3#!_S&{pBY7(_EqR2dxe?ezj?QuUjr0`VprLp0%#-tr?yf8-uj9R0~wM5NMH@{?tgMUEX4NTv56XqN+ zGZ)P43ojZ;iRwfjJaTiQI+3K!nTqPNRxP7hm@B{i#Kl92b4WczcsMc~dlP#aK8QL) zb#7wlVC#ZcQ}$YAcnO9o`!7_w2%LBM6z ztc7nnoZL0Zn)WExk3Fvo)M(46+nK zZ7;mUh43Q?YhNcb+)dA-+Iex_!4v4zya`~)uT(85bU6Jbt#pnhjw}ny@S-0oKQvPl zzcjmRq12JCK;3aZe}R@uGr95C>D&VGHFqG7G@{5hKuTUqY~N49w@P5!^5L6?s&M=U z#T)&+H`0t>Mfp7NH~8pXng zb#v3(UYuUAXDO3=;+%+;xvFi+7AJA1BXL>qfPBQc=(p^n@Zw>rQTs~vO%hs~M6H`Y zUadRY?v%U@RGZ8R7AiXxT%e6d1)#7c6W4*EN-)$K*2)tM^8=Cna^D}1_whKP=PvIk4iR&_il8?V!DG-6NYt=7rBt<~9I$LmHbOfyN2 zFtpHbmVS4d7W=-_Ecd^EWPdj*%X{vV=Fg=(nqm4gSbuKi4{p`wS$>5-^Ar!v%VyU# zq<*MBDgNloTl^B=y-u_dx_&%!@(}Q5j=Nsyx6422|4ZlD^p<|4Ly6pf=%@SZlX))v ze>3UZ=acC-JcKM`#8CJw{3C?LPBX!PF8ygr$vwZjQr79+^=~dD@6V5{ zodP?Gd|23}W?H=yaZY3{SZ$>CPf`TQ#8loSyg`SP^K|i_8T_RBXupsMiE_+|SysyB z;uK>*mXjX0z7RGKo*GnAELtwX#yIC`6lFef2Xm;naGY-seR3Z(grrqG?}Y zIWt`KiN9C87YZlZ&Y-+8xUW2hn}yF8+?L2vlSltHx_%?7{BlYd%(88lt_ow z5$?214&0z8E%n&~uf{-Ybe{h&9{ zL8)GYreR`*h8ZItL4t!Bh!#OYm$_TWp zo}Zi!>Ep?Y!n&JlT-&|Hr`bKN9pRSq^V(MtjukGiFVbk_k-phmJXp8AE}qEb6#DvB z#^%b0HPY7pw!<-kC4Vz`qL01Q`yDuQ_!-$j-w|5xf}ikW48mEWX)!POnjio5F4`CLvb+m=2xq-mKCrz zf`iW)4F`XOn?&dFtjvHz?4c?6ReT%aD zPXQ5Ho1tGjl;xSf&$3DP$@(E|vc4vb!-#(&!JIpTKUcZZ<`S|DQ|YqvG8nwg3ov-O z4{{f0%AV{Stj`#1YfZFwaI-O;gOd-S%09gg)vK)K#-Ti2k7Ll#i3rOZ{XSiR{pfoZ z;+ii4&LDxaT?ElVA0u3ke%_mOgc|!Fe!6eJ+p3PuhBVCWuBHdiCg-8#bo4Q061_VJ z;Qpt8GITwpm$+jifBKlssyC;~#(J`n$9g$(H*(LmD_J{N&2sa@rVbzRzYN z%usWTj|}j$6-@wa3^hY$(#Ir&XC835+Q#`EHFIh|w~rnDJBR++OUX646f|j@1fQXn z1?nH6`d4hrnw6IxO3y;JW2TqHlmk=Ew|&=w_QxV0G;?ME*tKHLk3qf(JHSp002BXi zJ@<2A(-2@RFNF05J^ua#keSH$e^1dbQKFyVC!H%xW9jBnoLqBG)`E}VbJ?Ge`;-@v zR!!B3LHhNwbE~rn6DL2P?AnNzJ)^if+bbbj^C7tWjPZ^?e9SJkv8D~m{$DbOAKv2i zKKvwoiBGNtfV1}Un84+g`-b9P1&@549PxTj#$#xUH;Ngj*6Ya)Xc&23Jl9*$k_9X3 zPPndleEjD|+4PSs8z`jTa5y`BA~Z`yb5R<(Q){|@V%&Hp@p|OPqxhDC13CKVS>0@n zE>}R&$d7}?pR?5^AF-8>BJO{R>rMA*W(qH^;;)F9^)YIW*V>@G`qxmtxJ`x}{H05` zrq3?joIX}^yqN8>jSkAS=ENQD)H*7~Dlw_mFHnEh&;N@TQbi^$dqm9MWY^C97Fr!9 zzbow_@wlsn0|{Vi=3B0A#6|>}>+Wd{bBC>L8N)hNja~u-0+fA4##x<_5V|yKoss-|qT8(?}Su?!2dqlM=k*??o4^KaA5 z!R&EGuzm1+_(^X}e0^+Pju%_jB&>$3H^n!_)}uVyJum2Da$dN4z0RM6vs&KCYhn@6 zZ$r9oQ{qA_@0&z^AzVP zY}apPFV^L*j_;Al5E=J=c18G(H5Fra)s@8$#P)Dpv>8RPGW_V=0$&lVk2F>KRSoV` z71jJXokKm#RtGIR4z&8kc>$Lv2F>3%Aqz*s)6gf9p*fpSrat)%%Jrbj-S?qp0MoJ) zzS0}`>faqXQF(8B(8^q-fazU{G5;5S{HX;X&Tj*06WITxm`*Ga8_S(`t!bhqq@q@5 z@*{6=5oY=_Iw<*O7K9-sM~c$1YKEr>cMX_JC}m$LliahKP9=FL-5lFDr*4p)pZ%nq#@^|Z&@~xB zB2dWf^q%|3$uFAPI(^II`F8(XuJm{MGErX5oUi2MJxs9Ho&~pReK7_%v`5z8^2FXu zre4daPKW*1%0#$ECc+(Qs#G=SV>ab>UDQEp+1OD_M75{_{DMEh=TbF9Ihe&6*7zEm zjdLRC&+#3p<3CTs3n;^j=M;H~fkn$;Ou45#I>17xz4E~s*Ojwglp8OeD|RBV1ZL@L znqNzV@y>2qL0iO!-@qpl*l87-7B5eO=o9Xz(}uPX03p-8Lm z7~Pw{+GTWgQYDyfdi+}Wg8e}RtJ@#6I;_*b_G^FFsu8A%mJhx^)ycod>Q=Rp*#0?k zBd;x%!oCB1TYUw5@2Czx+KYi{arU`!ja-iV0{w-*E3Gq=GW3_h)gS-O^@mm`hTtck zUH62-%si4>LH5RV^^=J$m^i1PQl8QTY}eGBJ|nh&X8j<2>NRr+Ff^rm3z9?ir8k*0 zdg;T+r0+B957GB*zDqM@mC&r&i<6nM#3w@yX-(s87OH3DC-Y~_*u>Yj3M^UZO;h#a zUeVazUULfgn+-{Ts^ZI5TVUKH^_)8colE7-ZD)hbWa!MZ_%M_Y(x3SR9W%P(OfI+@ zYSy0akDr)RE(t?ZKZg5zjGaDc{KAVqr1L(F67L2{GzC8R!G}qZHes`O>H#C zVmz0~7=y^D2tP?^7<@1BTD$o!VA5n&!8}!8srj>UbKRFSqW`u!+Tje%RN~EDsmIm^ z%?YAs(F>qp5SM9+qFA5ORQlI&TVy3R6jDD*HxSpRuUq^3zDoO}Kd=3H|Ih7bcWa-JrIIlw?ntSl|7!p7C7;*-G5@mv z;YE$qo0%g(Vu>d91wVIWU1H?8tk0s zO{*>%$kDWgEdre0)q2zBYf{waATD&5QbQKMm-C}(b7LzDLj=rJZ`$D_)eLSom+HfG z$+YRqq{LVvMsO2W*UfJufC_l(xrIo&bUbv6YT>z-=S6zX@!NVlLb^ln?N=45mgrpaE4 zq9FU~nyR7^kVGi@9K@5nv}lB-Idex%uPk(gy1dxlPwTeE_WmE?ZXIXZzmUgBbJ8W2 zz8+o0pcT_5^tBX1M{9gLkSPD%z091> ze-~Nk`mx}HhCXsw{J5nmtG#Xx6X*4;8CtArnmz~3jVq=$r^m7WFRwT=oaGY5Zs}6? z?;FITl#+4+sbc*Lx3@s@2J{p2e*y)oh}Z%+!N>=1jdV@1~bd$`0A&V@2gkel$_ z(&pvO)Wa3+=|e!}f@cNDWvi>=s}iB_0F5vU&`rPblURit1)W*j$W}BQ$B?kuMAJX`tNeCIlS-) z)q|RPt5xffJfSjj#92L{!B4jW7M`*`IhOv$VmllczNr23>cnW>8ra?>0vq&ci&mC& zv4j~DJxxAs$?^|ZO~^`piA;Oe43FqM7?5(S(MCZI~q%mzdwao=3FQ@WNNfRR#Xo3w*q2uE=A4(WSZJB~0@>6ghO# z4lP@>rf*|tDM;F>EFOk$8PEJ>T3iW!^ zLIa2$y|*QntSCiADSYx9E%3$m2_d4_Ri$_qq)={9gg-%aOE1I^weD&%0#l zeP3EurHu{CMkBo|Ke0SCY9H-e=NFMfd~}y~Op_I%wG|^ex;29ZyK%-LWtRVfnW*M$>(k`0GSCQ0wBlx zqKen27TNoBl-g zPR{ljV)V7w_a%ULP9%NA!p(Np30G}mDG}s}zY%*cJA3EG zbmP|gUFjEAs5W!hBn*J&0(xX6OE)aL`7fTGng6DWQfBC47klhhezgp_CM&DWX~JcG z9P~7joDQ)ECR?bwCd$ku)vW7&;L|dI)#zY86%U;Q-qnshPmK2D`@_=jcqV6qHR}m|H5$;q_H*KvYPPQ-px`kbY;h)}(KLJ}zpUX5A z)8Qu+6Z>nfIUc6?VK)#Q{dBrtrvf)FCgfG#w4GjJ^e#oL*r~V8Y&zOwuq98?Uzm4` zYkwX{^H|rP=WW`?tqvrG7mw7pcxc&bMkyXz&QGj-$TOXsSPRVM6C8S+6YHRb@6^$W|E;RsQIY|J#%SynK~!r>BF1~Fm~fAi?{}U zV&z+&rkE_Wp{cx^0qlCq@i!SNwBUs%D6@|*O;=1*wrcZ>8lhNRNBCCY7$f;aH)d6< zQ^jl*Ls&x{G64a&@>9#yW68O9yZ01jqadsPVOL>%P~&oP+Dc>Pb9m0GCkjsJDm~GJ z#k?=Sg=`BR1WBmB0o5YkRhEdX{hN0i1wcwdp1FFI3k6^e-*$cb`L+>}vZLR=!0+=A zOJ=)M4i}WJMjP=`F+Z~Bgfs=mTJX)WJ3w`s=aecRq(x5(2MGd2=@!GdMaVVy z>+K2?wqGNqvWdF2tj9m;BMtnN2C$XBkJm5M6R;QMa!KgHKk+Har{VRB2}a1>5UrsT zo5zd9m`*~+`H!*k-YYe#Lpgsq-kyo#9)fHVYvN}yD5vaxMg(v`{V#`Towp9*1#<>_ zo8;SUZ5ulv9@eK~Bt>-EVjkhK$x0uKOF>*#L731wj8)Y9Y}PD6e}PXI^W0Fr{4w;Dx)T$jjZai%g;(r2 zvMC;Vj>kl3HGc^qvh6_Ztxx&*IIm6dLBHpR4XB%F68ikN&PSZoLEk8s@+k$go-jI@ zNpbDd3<^t{@$9=kt7oFs5oRrX?g8x&Zc!bA| z*^T8``KKpq)WJ`9(Qn+yzr&ZVBmavj-9}#Wpq6o%{XMGA1GpjvQmh7~s2YHrXFljr zXqwbP(zK9L0Tb_$g?a(kLTX_~9XIcc55RSDlNjOb<4&@+r0SAcNj% zj$?4!DR24FKX0n(FT!**vPn;h`og*||70DW1g8Wf2iBlYSM%W7r#dP5n+qv$LuMFKtnG7Pd(BxVmy#v91{l(NjMpk&{ zBj`KVNn3j76vWw_#q2VzG8;v*>PA!h7!DoR9Ut3USog))-U@8_$xz-5le>xpun7UN%wLzhJscBF{6Em)-BoQnX(=^?IOfwqpm#jlcPEl zUpf&q&Tn<{@}gyKQL?AQ_|puH*jNdiC4GeF_<}qnz%92|k;O~iZGVV~v5X`vTbB@W zVk3`<1r?+NU6I@l7aiJa-${^p!|c4cTZiaDZj;Qnhf^xys?gDGH7FB;YFB#W+q7** z-9J+qU$snY-gq1GH@3gMzR#XlS?~0|d(VDvT3dXzO=N{^`OC)l>+9JZAw?HCAhIL+ zWtXKi*GGRcQZlP${}~?MTvxv47S(UsGsu|`CSGqFsXV$Y2w@T}ZRRF;o#xoH%`4pq z0fisd-CGeaIWxPX4aK(J^Pz2{NnBH7&kPVW zOq>Q9T=!>ygq1}N?sa8RQ}A#f4`iGVOX_#-2!6T5)8pEs27Ssw7--z=RY?At3sOVP zlK#q}yzZo3AckG=Y%`@UTg@;@AEjc|Pc_!`EfVBYo<5m998l>}2W1LaKb@ko!H~u+ zH8lCY5sb6OcTskxoy-FSRP01KPyRFkLMp`N;Kv5gzEq|%^eo^XCzwLt{6E%Lrwf={ zYWRRq_tz&&C))J;hXm{UtCS94fq%YBU->%gD|OIJ@Y5?S{g^2(y@X@7gQUD_2}gDv|5=was0v-u-INlzwxMoWWe$+bU^r89Uq z!JO=pt3RY8Wdh_EuA(CC3p_zBlzsAVl(mcKMwfVkGYj9TMoQI4wX5ZxJwbOyP``_U zbZAyABu4)F2g(%hHWn`H>|@^@at zgBvZ4^7^6wdLNm2{fGZ5PUm%p|Jux}hakAw{@!Z~i+b*|?<*{ z9*nz7T+2}049TPWY>Ft48<-!kFPKcd#7ZZz&~b?I*Jzzc-UU!B3y;(&xGK`I+?N{B*y6Q(XF;#41go9-Yme{fmaUiE7R|5N<(bIt88@y+cd_Ro|bOS&26fc@J6 zfQ5lLzjKU$4d$#0_G7(}IHPpkB78-k6}zB?1P`6&+wPAUMWB0v|L)dD3F`B8ggg;v ziRio7t{=v>qiV@kMF8sN^q_>7gS%jSgCTGb7(k=mpF2P7EuUHc{kki^_wAFsvRuMV z61^9{1Hz9+OZ3n$wtNRI;2Mf@B2O@e0TFEF>;9wNu()^g0k1uj+piqfS-)^=ytB{> z>4Vj8Mt8uDT=rY%3{kX1{^LEGH;cPAVqO{Ex&HKTJK@UKKgX{hwD`R5EgwRE)DQMx z4&OZZSo|+gw5=9Vzy@4#7Jtyvm{O1xXrcPX*+YM=5OJv-`FJ8{b1S@WuIN8tH%M@x9=`fiFw&o%}E1>qdXQfbX;M0erLS0{o@;X5KC6 z3g6?y{tNs~JstS&VAlVS@F(~#%fQz*D}XO5_^P_WH}t=OuX!x+?c~toKZmay{$!(k z`s@IIU(UeyAm7Zd*thFEzIFNk1^yy}@4SBrUpM*_e1~V?`w{%*RS3SBY`*_T_#<*{s5}GTV>1H$jS_rC-QfFp$bSLfePe)c zGv>kn2);hR_tUci{2iKsFU~j9h?TT6e_Zh2z?UWXPX15fBe-Oa}9|0q}g{_wx7KfLG->I-lryHs_2XK=rJ+3n3Fh8I4_Uu)Bl z4p?levU!cojgWGKQe+XvCQ=+L@Apd>oWHu);l6Gs^%QfFWv6~?TeOh}Z$T_U!wb7gCwdcB9f8m;}tTh$c{O_V&MRYRF zD&9OOIN;ndMD~eLJ=;DNCH6Nl0kA#(KeO08cS27JmmEe!;7IA(pw`rtMzYq#5Dl^A_Ix#Vafmh8tJ%P9#F8>8bk!?+7#6g2^4;gT6(k z8loi-U89)ayy|%9T$O7*Q^QZO%DIr&46aM^5|z`VWv|W}FS_-(hs^p96Tz|XutMO& zsX_~qS}#6fZmj$~+fbhQExYLKztTFlyJ@rT%;`3!t6jNVJR?>=j!V~ z?)WPRV&*?>I?ZKTj| z3Wqs2SAVo=F;{Wm<`VTVIydTYA5BccKvKaj#gZygHi-(T!dKiQ%Fm7l5K zd8P!<2N&~dx*zjORI97`I8thlOU{VKH3Yx51@bNZ?q@^U7OH-2uPasc+TO~9?L2#h zO_lMREyZ#T%0Va=s+?-?rLA{Y!C?A9|}LQ;csMxk!d4{|RP)NBRVV;SsAfkzd27Sov+L z7PnTUYHfOyv(JpM_{r37(~!7`;8O}HgwSQ1V-iy9@P53i`h8DQeU;SZuA`oMLyrHt znCLZgKkR7F6>Twx@%Z@%#O?fbSf}~%d*>tnjsPJhTT{51(vSIROOJUk_|T(#olfnu zxFvp`ota1c>+<16AqLQgp;+-b={@sRnx0==Y_8RL0t5jQPXBhIH`|%4GB}^24U#`- zATjTc@ycp*!wc``wP9|rEM4$hTM#S%!o8Mnncxac^|2yHyEjIFdWo6Q2h(qJUDRnQ36DZ6Rj8h$L2M?Z^UWc)>;U^p9DPll zNT>?G;twmvQjN0`es~ zoj>+TZMGr(^dUQq7E_^fKH)~`4D^iqj<<5@R$v$^;Uq+!Ola7JLT5b4$&Bl+f|76` zLI862N&MCJP3C>hx8i>jnOR5;)vhvxr_4qYi+Pd7fH3a$m6dT7qTTA6rk41sG z#|4PQZQgLAUs&c*{mr%QFYObk6pvbg9uTho>*n`Yz*U9^C>jxnmOo{m`zrn&rp*E_ zjVCdwpy9fciGkwkXYlCx)gPSb+o$`FW-$Mzuizj;(T2HXzQ)XS85gcYKa}a#y!B-b zxCTEUC^VSK;Bu|G;ta>#k%qY?S#=R}swH6xjjS_EH#|0lW!!kfm59H1_6X@8qu;0!DNVYcg9K_}B6oq>Q@>sW&s1GHj)?e+eu_&4B zhN!sqTU0dtMVkTpd!-U@_3QTQjjs>#dF+%|WYt|+104-u{v}oj6LcN3C06W)Ymd*F zlS9DAGASQ$EOao(>SIU#xaVuFSbPMqOoABeTL+jDW@C%N$SB`!$~^#6ss z!;RNi+Ptn91NfoZMx+8J&BXX(!gy749rwcax?)~Y$%wsMQ?_d6VfAk{+(48X&ZKs0^**yg50m+VusXVzTyhv9a>^ zf2>}izOdC{#@cQ%KYM=m+Tzq*5L~RhS=k(nq6}aR2YDNPa_Cg%a>^hl24^GhnOL*T z{|pcThAte+2fH4Jx2W%N6YB|$J2#ZjhkaVlVPo7M$ zil&N&0}V4v5%%F*e^2i4irsy6xNJ+?d)3LxzMNr;j2phLs_@0^1JT&tkvBY>x`td@ ze^B6?Jo=e+;GCSzRfTJ^5BRO@tB!97KY5yKrM+S1skYFuwv|17E3NZe+xykYsNc-y zs=`;QvRf_wqOpA=Z+JTOE(o%vUe<#qBV@-=H0d$;08|oP4?y1^7k(1irRH4?FG1<} z$w2N4+rzgGr=$Q%74ncdqhc$a%9l#T%-WZUPCm%V9R zrgN1_0y|FO{vSywY5XjP-juMTAyi84aW zl~Es6-HdwYAyMqiz@ixG?WvCv{_vOPkNyqUma-224Wk|_zeQC$jiDmV9ch|g5l`kZ zcAum1FK2?tCT3E+g7UlT`ZU~7l2tzw?osw)M8!}AWk<2+maRimijXRzmfT0OR>jv< z$G4K!UjtUzu&*I})5{{hgGB~M&>xuy>=po!C+*be(>mM*xEB{85#wXt_8-eIYy`OHaR5wJT z@p;%Dc_)}?q{&97)7h_t4KBeINxlmeVHFbhT1N#l4BM+Xaxx}|Vh|N>EJJ!VjLB*W zH{M8Fh}4L+F0MJVlxgj~AF5#~K@l^8#?`Jro!NE8xr~1%OM%(T_OHw0FDGhQ8T^kj zT+sx1?emlU6{J>k=Kg>90NI_$HCZ%zjjb`?tk-68rni&nt=157I&xjEMJeo+Rrgi% z78?dltVf8oqva<8!^(;ANGN+)cQQNT>&ytOkdhO8B3F8p`#H+2W>{41bWt~@32o_? zSLAZi1ox)t;0ELfab=T=!wY{3)?($Yw+TIi(5@obPuTd?f~xh*h|4UMi}r04#FZ7gayxu0d4 zpsv;hukxsWY3!VrFz&8sLR$One(`UpcrRCcv+T9vJ2Q#m)c0WU!PnpTYIYxPllrX; z)?VNKBBIIZcSv5bK#An@RP#aUXYHny?50=5`6nrzt77FaX7#r1biv&3DqO}zL~b!R zlnTv1^fgnLtAD8~oUIBUJ(54q>*+hLbWCUJtT#UPSknE{2q~`JP2B8IW-rQUupNg` zip}wUuBn2TEAf`9sI7mns;*Wee*M#Mt8nKtPZi7`jkG<<31D{cO;Pz%{Yrf#yk7#$ ztH{p!Z9n}t!<3#3eP?%oguj7szkjaQKdcBa(O(t*O?AJK3v znpD0=5D4OS3|doJf>Kb4z`8h(L(-*Nd(ObVRRH1>i69c;bALW#avgLTFPgc4TRMW2 z5(|+R*YQoQAGUtntE+FQjj>~XC1Q;|8|mSnwt6475ZXWZK z9h$86!qz&kgp6^o|zP}>2G#TR|E??oTk*JU-SpcLp=fi`RNfe z*rk83Yx+FW&4sS%zdTP-Yd<;$-P$pnxsCx;1G%Y<%$^y-^B;Vyq5fg(u`cmwAr-OZ z9|HhWSbTvVy4r?9(i$8;s9K+1wbLv#WDGe7DWIY=?0w;M|1f&H_Ua44Hlh zG`YLWuJ}f_+{!fy<~3}-T`F*Jo15qu^Xrsu3V%2FeW)w6hgyq4Gu#E47O^E*d4DW? zK%^i|oQ=@4hbQqR+@UXkYR@A{MnTe8lB_fmey8l{hTn$yG*UOv^@RE3>uCPT(9oaC zj0_zg-#vfl@u=t_t{nawI`Ci71OF&#mwYZx|utDb?(v(2J(Z(M+q+ytNNHOaQh4B+t))1 zP4y$p7N#IDaQVH=M)v%&r#b3qY%&`AJT#t?_M5cW(UZTdxxRnvO}g{b%_rcTlq8{mvnY>rCvZT<28W?yB|w9jHFPyh#7R8YXLiyUyvz3iUJfr&b@*JaRXEx zOW|6o3S|W#S7l^^cAArSYxLENGIx)!@6_MXJ_}>czX$E(Afb2uTET^?P~7+tcYKhRtKgqf?!OT6Cn&kpg{4$rHB=xN(PQ*mHl#=Ly%dxnXr z1ZSPo$YXi*&ZZ$^A{BPYIt1 zw=Zi;P@PA|McZb<#OZ-rvbkUI`!8cQi3Jb5zn{(wa3jBI4SCRglu^ja z*0tyh2UwY(t4zlq63_@f#ie>ca=ua8rNaP%3#TuK4_G zTuwK{9Ub{Urb^W)t)R~r#UL?XiXA?xAUWZ3j@i8xOT5Jm>V>fl?-Pan;Q0H*MtsA( zI9~mb0OF~6`%A#)%%ww$e%M`MED4r*Vc+icuSV|-#78I?LVVz>)dre98U9NHDD&z$ zZoL+QXHQZ9^M^HPtRV&~U*iUD{@SE;q2_i`Y|bbwf_9oBgIV{zmi9(fUCYRZUan8ia*!tL;%j2N-pVW38)2@l$0M zD+1aAS$Rf@k?tdb$#{`Y7Yo$mQ7~{qlkr)FzjL}g{$Zazsh5vU=FFY`cYw{|R^9G~zl$X3gpxUPN{zC{d zmaji~`m;BGLjN0!Z+kk`n{Zp!0a@YZ4p!IeRW+(%aO;%1)m*EFvzu$xY&J_UYgGI| z{TZ8lLXFZzF1Fz?n#nirQ>pH3(<0qfdnP5{mPPMetr@ZJ3N>cIYu$Or$*!417s5by zAC=3@xUa^K>&n?|q4MX%Z-m^UmU%p-+@);T?4Yd0k{vm1uX)OK5N9&nO-!%Mrv$=# zg1EI=VRTa*1igjMTWJ2hQYx-eGGD|R>gFQm(`LC1+E1)W6NzL8aBSe^hgE3f%&2pc zx7o-5`f2$n02`WMq}$4=mQkKWpox}M6k~+<;tGhV{C0}g-zhrK_~%6Hf9Z3(ROc%o zaJT5pJ4i76w%kN9Th1;s?d6D*HD=roVEzv(IU!|y=pyEg|MD07NMO~J1U&ITlf-Rb6>&@QB>aEj4Fl#Mf^-W zjSQ8>-$O0YhFM254!S00-Mi`~~ZmIuIVpCo$hD0)$oRVK6j% zP%3$Mic0IYXVX~q-VL{Z!|o2++LU7n(zN`OZf@Jr;wU5g9z?JJZ0dYAaI;Z7{a>X=L=H=xm9Mpe2kmkt;cD<9>k&RO5?Y2%+@ESUf>y4HTuhk=uG5QQ_*oEM(SCLDRu?KDEl7D1qM)8QTNeW$BmY9??8VMmADd_!GgO$AGyT ze8B-}hJ;0bFuo_XfI4^Q+pN*6c2!>k`u-XL9Kb(8;uTlA=t$^KxtWNsm28;UJ=TAN(O;}2w+kJa z+*Rgxx;#Oe_S+Cb`Wj4vDAX{&bev0r?jE%J_!r-D2Cxbd{_dEPdl7qEQ@fZ#Y?(QK%w$4&GJAEkv=5B#*Dm{v`gbysMhaqD!{MT3@d0 z(-s32zpZHfJidu8nb@DJO$e?!oj2gHKq|U! zS<7JL*guy`YbT4f2MCLCalnB={mUj^G47fxF5~)%62hD|DY82Y=XN6n{q~K2xxIR5 zys0C4;uJPUFGLB&rO3zc3a~L};YYj%)KPH3W_JdEIWq68d>`Z@N z^sMliS+Vg|8>M{LCrwFN)nPTrFYZoRX2`bvneB*l&sv0_Jc&=VW5V0GOa9V+u_EOR zb()NpHCng_|Ga(cEJiJuKemK`Moqb+6YfUxl97>Db8kvx4cy<%N7a5IL8SilMOybq zm(1Una$4-qy+=>AEcU-=28L6w!N72C1rDLwP{6G(Qbfw|>@~x65APSJa9Pj^!?V{{ z*1eMj`y1YW<*-D4CrX^jC1vctmNd=yDHl!soAzUMtyxT>=$!fBVOYZ)E1zhxO8R_( zo$X)P|0=V;;G2op=!)IMIxdi{guMH&kI~YwKAU0<2Xq=SZ1ijE*P)>l5URbgC4=y6k8dt`VA!!F7|vfNNQCQCE+<@)S`%jM zGa=y41d#M2nI^3MK|%etL6WJtb?1?ss#=q$+DKv(F!mGFpD&Bf{+a=6qc5l` z!=P=l{ef&zFJvc*8_(vBoe={VJ}aLcuJwDdV1u_~EuCXJITESj_LW zdbwb%WX(jbv6*MDM#w4K2+gdi%iR1=#M#>U$S1g8%WdAi>-==hn|7gwmW{h51RI}& z!tsX@YK?tmF- zxupIfwebUNh_u{EA}?8PjRd&?hKo#&dxPUcT94+WpJ)eI@F@7Avn3lt`WP2Isxdli zITeY2M&~`Qr@S?vMn^T0wWj8b8(F1n;7_&8ev=>49tYekboLK<1A&Ab&bf{|rQ|7lac@R&^VqdFzmm1f_}|u>nn? zxNL59w*#W*H zn{xDYBtf?<@cZ6>eqcgr*FQg?h}GF#`}$QUyTA2I0%5I-uPmmHLt{(-7>uXlWO4mp z(^q?u8(s3%|FzzWG-&!)w}z9S-|!)UwEBPLzd4LMylZu#cK_EK&Qm4*Vr=^DZ!!)` zpj(wWaq?-jyU1w4pE@uSc|5kP&bSwQ{&-ypZAqm!?jtpjJjQMB z5v+_j1jj9iZTLX(&-#DHp)yYaq5jm`b<(p8`Q=kU@aX##wQt*-7ALKbf?#&T*g{;# zH{1`c!yng5e_gZeavJyieGG0&UcYd8uLWGI<*-brjlUcp;$OtW**+!{7~OAKi1=q9 z0b4*pQtl)8oX4yR=D6jr2DR??{Bt|}z4)E*x6hY5;twz4wIB)SFT)`oq$}g^aENr! zVb2`~TRN_jO&21r=1uxjtl@_HV%y$|l?=M`vY}ZwzZh#M2h=YvpLA+-MYmp4dHvR2 z`}4X#*S0j>E0Z?YsmJ=P0hb*Qh;7>}Tz1B@F%}mt4Uz8r&pTxKr{O#W*j%|W#AZPT zo9zgv9ecG-=Fjyz7OLYntZNO%jg=YKVq9j zjEdj$FP5T2#z@q3DMu!CHj(mk3bXiLiYF( z7;rBJB^XsT%Ce$L3)HEh^QzW}Xi}{CzG&SbN7?9-HLT1eK|9+M#7yD7688OPoj0nBl_PWZ8{kf?#eQ8v`*r5 zj*>?y8NH5m4IWUyTE?Le)&EFLHLJC1)~-yCH$?LPMCs7(Yk=GZhcTp6Vo z#rm&tl|W2A52=U=l%*7Lw^Msdm0(;QIrieAjDQFf`ctpYQ?G8|Ns(ZqOXk{Iiqr6O zQ?{1kG`wF+ZT%4%c$X7Q10TC9310v5E+p8ph~dgm+pZ7dug=S-!_iZW(bRpc`KEK4 z&ze<$LF>ov?&-yzG?PS*tSi<8;~%~0eG&6W_rR=yn7*g)7XqYo+iH> zqVnGUhn-B%sxZ}BdkrYkBT>at+_O8Ddi7eFn7v-rGf>cU?&md}z~_#aS>q&}A3|5( z!BibfcEp?!`PW4(5=9F~QwpE$D?oE~er57jZ%ocT|I(pZ&5;;?ahuG2_fp+qpd(w{ z3t-P!o0(CEsGCq@Pc}2xyJ;Id6jj=FgL){f&9;*D(>H;a!?I11BN`$ESTRE5ne@;% zL@!Ka9~4oD%y$2`FSqD6L}m`{lf`!1qSwC0UFA3?GzWHEL%IV_(|ZBk-apDjw9n$P zwsgU0a9dp+izh=%+F#jZH>ZYudIhJ2Bvm zlTMAgqQZb24YX0pi3saKKWmyi1&x?WDu9!Q4p(C#UmY(0VvQt7b{+~EK?LcA!8&@kME4`Kd z;%pN*4C3%9m|F+0)wGkPfTLukj>>MjEt!8H4US9A+F0{Sx=wsI29bX2j(9~K)|=nz z1W!UCG-V71E+Sl&ygmI7EheiKrXN0H2keSpGsg0iuJ1k+P;7j9`NS@Y-zcl8>*^EU z)Hz+-@c5FWzkoV&3kmp9;veD@_ERL8LM8m!Cv^QAC5T%^d~%4!ayt>F91iIwVzD_Wo-aeY8rD*aZb=x!hE`(B~`LpM&U z0pp!!fyFqHvav7UNHytAyZx9%FJJ#br-C|)IR61}B8-7d>V-moVR|3elWlESkPd(* z^Dn+cbMJ>}C%GeeOdsq9ajJ0#a)7-1n)#0-Dx3EC7VCaPq>!@iv7^6fotJwkkI1`m zDSy0YSVN=-Ddn^CRIUi3!G`(C*fYEh^ZA~D=PB_wJQ06F(_+Rv8{h3Z|3ILzyBUhE z8k?&mD~9MOiR^zZmq>r%$~x^8sUFvLqlW78H98(ke249boIN3j^boUQu$7vw$=r9U z&)|;aoAFzSTw4vcM>Rv=!nO|o^S6C<9>0H~;h-iW-JAzsH}66_ca@ykNN#F~-;2>M zeD%H=^G~Y0?n`ZBV}hqpy!41M^t}3D_u>cQgT00&=hed3bZ}8&eR!SfUkkW^SUIu8 zOr@01o%=Z7m(5*1*Akyd@spfq{zs$n6}s2_k9HqahF;z#nwt2c^^%PeQr7=5MCXe2 z;ns~8{%5^p|pKB9m{Y8`~pnr{@4`MCF+b)@BP%J;svH zt*1k=`14EUYF)!_yX;p|-$X&bngpelAL;FTRV~`&i6!T#D9nkNB5R_v8%P_Lobxzo z!;`}rzaaj>XyG<@cyeUp7p~*qJAl?6m8&Znzn~DyFQW&Fq7*fB79 ztD#Y`c@~Cf>=BYnsx3GVmybgp#NYwGhcAY;44_){$5$ZN*X1 z#K9~vc~DSiO(gFz>?mkYop7SKJylXS+sExWdt)K-oyt)N;m738)2GPWQ9@h~x8;2k z&cl*34Xbvt%O2YT_*g6P(kt|Z!5^*vJ`>bEZJ)M_;`24r(oD6RZ(t~o4~G(GH^Hg> zD*l4WlYe_C_dgB|Mmm=C2y54y#eyYP^5&!qq_&{^ZULGw8qSOjbm$GXjCSl$^ZDwK z`G>e(zEhZ24J{TBBhxAGhe4%5zZ&er?(T#40ySm&TLi_?k+h1pz7WMjqOY{v&`#wH z=zFY%5{k}ZaZYHHH!Qj2r=~eJDN}JLk!)c+O+?Yi7&L+W)M2mVG1!cQ#IK6&^PQ`c7{g7q{k@2 zP)^I`5Iqrw;C~lLJ~7XjPAt8Qyb~`ugYZsTT zqM1D63q8z7L3|;Q-uoV2#T*l={%`$NJw#%|U{R%7I@t=*;tLIde+2P`mNNnP>OQe7 zf{$>2**cS`2XrK%w-T26gaZ{BNZO%$$R`XgAfZqR3w=W8Ou{UmuR>LJIOA+245BgyCDs||AI%wGE*Y!(D#uDyZU6duV$C;fA$sMA0U*K z{}12i0r~YZ>_D`vAJ!Uf)sELsv}qo+6!UsW=%1(U@jP3XU?MQ;Tz)od?7wrsh*i&9 zIPMct@fH0@bVPoyCqj;$6mp2^9}#bC%1QJzk^4BAoPRw>Q>%wt`PYCkQyq4scu)czU!L!`TLkNZt=5^~p(5Szn}bZ(BmY{-B2ELO>Lx>{%d$g^8YxDEy? zX70XRvGp)hj+#!^a=;c0&#VTYV!1i4+j9bvr!QAf z$@+8Eaod8NMN;@_t3buOKuEFIyuCW`&9$FKtS*1 zfesCEZqn~V!2S=8lOZvK?}{Da0~LQA4h{eZHq!f%vjiGWr34P5eH6Llxc2-;)_7b- zO}9~7wkU3wjE$@o_#|*lB|sA+v0;iX-pRm`el~z3xIa?<-=_!d=c%uS&5_s6l;eK( zOB=Pb!vSDuSPyEY=_A;Lr8jxP95il*(%?evFtuuX3roTHsc=|t} zjs6Q+sds2?Oy(}6-iB^D4VBq);Awhyuh?F>&kY9^@sg~Xw`eNQ?mz1W?t8Ybr1yD= z4JA#{2Kfqsxt_`Vk*c9**M@VbVPmZ6J!;6Gt{RdZ1Zshe|Crg#4Qw*Eu;?R46p-<0 zz5)3X{~~94kJz#^&aN18>bYl>#!9-%lLcRU^8q%yY^O!cw=} z^Mf9L@(&8eaIiVJt&ZGvCAYHmqe~5ug4q>WX(piT+t)0RvS3U4x|kFdoF@Jb%6n@o zt?6B2_U0#04r2}7y2cuarqtSq0jUHmbe#TIih&#zBQ$dUP_`gq*&EtQ95Veq*MQV? zMa(?+07{nZhl?Kh+7_QZ7z{f;q^@?l0}N3c~@>)yX##8CD5XVbgSI5^nlg`7`O|8_ZF8B2ES ziggWx((c-8RYe)d7y_-wRhwT9l@HI^C3}%&J(TPD$cD$=>&Z z*I3d!hR~g2S$vD#3)(9Mh(h-j`TR!; z)Gkf4)|y9Lw4%v)L!qD=9P5Ha@{80$dX-w5Rm&K>JVCVeVP&9Kpehs8v4lNqTcPk8 zOP-1LtToDMRSF6FtcnsZBj3vO;^+#NcV&-a9-qnnk8Hl+p?k)edxQq@r)Nmhx!FGM z;Wh!Q8P0C60u-<5B=v}PGRDftKjbRDaesWsD<)MaCZkC}F)`#Hc`2F22Yv%rc=S|w zK{Y;)k^A39x0-g+H`vE}hFt>t1S%V6En+6ObB*(*-uY(h^a%Zw?I11Be>#xKCM{dm zgp&tK^7QjAUj_WVOdiojKDDK@H=%T~J@)4hJ$tN@c?WmtREp7$F8{P!JF5-xh3Y%S zzv@_X6+wWCHIl{VB4cCc&V^xUyuj*AGwf&?W3{;(7c+2w8W`j!pD=6746H2{fQV~B zcXz(ccTu8f@PF{NHvajB&EB8?nyF-t&I8`_)2zzu6K>JFmOp+9`QmD>Ymi^)^G|x) z^6z+pd^0D1qz{;;MLxe5`EKE6{w!8YWDMT3*Y!~zn8QL~n19y3zH;3?ByUX)Ao2B2 z3!20K`z?cHa|nsg9}|Lud3%A&dqHtzD~;QZ1>?$?2yXhu)2MBuFkzki7@v|%x$}Y#g#uH z`+YB3*ny+&_~QFtN1uZJ7sFn~wzvcs`$ogr#cBB~$ah;e@uxctnaw|CwYR5Icv|L!LY|xZx`*fy znzSjiO)v-|cddu!#Oi=X(I11nJlFj%_SsdxBTqBM)8~pHzrcMW(!55H%uxf>SGZ>w zI(its*0E`WVNy^}p=ZCxP%lI?>G2%yHBTGjfBq^{{3*cDvy9KQGS8~W$14{pW$%D zkheAYL6#^8r?;Cx1Vu+2QL4KakpZ2Ep>b2jHZ~SXO zkk9f2LF2}d?_LKX?h~~{SBmyLD%W{n#)ZHD-)6P1uiOX^$$=pxzWx2|Vsmdaz-BcxRB9oMbrqFUSYG@K&Z6F>RUzs@q0t8mQjYh%jyZBi7M(n+9ahwQZTQ{bN3wFFBs*=IT5 zmnT?E9VEPHRBOB;AMI43o3v{M*2D`;<(9tSS7+pps4X3El9b2X=#smhr3b04D?8V8 zZl1G(=j&>kt9@RnI3ipC$LAb=_4RZ%I_puTExGG){T#$Ofc)z3)qb^4b(h+& z_KnWcu2jl>h{<)Q?shbM#$t!pHBuzj^bX6Y{PS^q*b<9!-}-7xCP!zEM%o5?y293n zi~eg}*>!7F;VhDLMESN zbHBk0yL?HmStvbSR*66nY5`SXF6nyH_mYc6ge9+YfVer`dEi!~KgG{@fb+I3ta2qf zj=G#Fjxw6%RzAtZ4D{paBm^_9kZpWTwu0o)Zklj;ZZtc5eAz*FmmZ)m*TCWp0Gt0_ z)_go6WDk!9xdDIfC5Ct22L9aO>-jSV;1xuH3;4rH0>gd&Fw07vKig3|3GC-*g}hBP ze01HHQbejF=|jy7)Wmu@D{HyZn56TCgXkTrxbmIox@J{th@81FU`g(ePwc{t_J3q2 zZnTSk;^fM<_Pf*!fRJhqZLWQshFIV>*?!*gj=Z%sAMjPMwq9QIfX4k}yEJY3%OZL% zWM=q$`j+-M@cjL+R1m;Wg}2?<=#uqfF-0kb&>YzMoHPg;OAo3bzFG^0gi{ynJu!nZUo_9}{W_f8+>;dcc-`MuHMdf^L9|wysJsPVW zj4Mt|EncLCp_ajFkyVkjI*tO21xSu@DLnz}ox--?jx!;yAo%`(*Z%8JQ|%x@3d^4z zBxvcBp#=4R^5~E@!`Mx1!Jm^icVypvQ+^x{GDkdr!h7A9J_;w>pOXLbLlkfYezhiA zaSu@h;=rcM{xz`uSNrOde3gNrA@cmWIC#)8(f^`f?$o!y?@h}*J;qko3bXnbFFo=^ z!!FvWP-){o2Db!l2x!VtR_Xd@?vofg8zTE0$Dn@xk$Qpq?RQ^4(mR`<^si;l^40Jg z-v3$5FdV%TO)WZ>=8ykSY?I8;KeqUyRT{E!=tuP5pZ<8NJ>7=SR{x;^?h2fIo-po3 zhES_$7yFEQ7MDTDrKl?Xa`>hH_4KbZnn4|-YD-^Pa|SfpH5lJlv%&LO#qnjrcvkeb zBPlCdFEhi#QzPKe+x8~>O>W{i?1;Hj&S4iZ6JF{H-ez}oli?cTre%ti6-y@8Q`72l zLjGrEwdM|?3^tKdOZkBz!h7?7V9zY~SramsPRH7{KH4yw;xRTl;?p{I&}pq^<4n)1 z7Fffyj?x{{-y_|U2qDGzpi5LgS6lk^YIW&E=>kPs!ZL3*`Tm{shPO?ye%`1j1HcRo zD#ez3k=53ETF=(pMRd01TILS^K^zX;ampnT!6LHs_g9w%J-eFnHaFboKLvD5*?+^@ zkUNrOI?9pYNKF;!o7xTZ@y-#2qIASn-bUGm$T5^!aX;37H!AO&R=V*)3JYifsrnZ$ z&DB$?MjKO|PgXnmIsC{yZ{XIJX%t!7pFh}%&KcYV}|OkdgCF5!n5B?e(hLn z%qMgWf*CdItv_#qy3h+``QHKXYZZs9qxg%A!y?OdnG|7NIu}ba` zF-ct+j9qr1xhL*}8)E-G zpN<4*Tw8qs0pySdQ#kZ0RerReQDOQi zB8qTgVs#TV=>6ARFI3$0eJS@U=LmO8kVUnn-@YK~Kh8YMYL_FAc{{9mradg}ss{WP zhh$wW@vZBuGq+Fx_rtkq1jExaRw=Wr$&V?er#;*;X5T?C$R99s?E$Dm^0jnNKB{Sx z`*XOZ_Fuvg4!OQKN^!FFO33;sO zul@ad-Mz}LG0m$?oENjHQ<*ru%$7zx40hXoveVeOL#IKb4Ur$kG;!6ZlJer3?(SCF zA^D623`*E zecsQQk6J?`A0E-T)clNb$;)U3Z74ALk~!a6TRQ9rgnsqDwWWiOV#*MIt6Otq0FT-3 z39heT_U*mZ+QH4y5NHH6qRO4dezyf}FRua*OtprH z8_L8zJmPmS@<`ZrG|sD?V+}K9j926W9j2u{pjubsa3)iFy!07y56s+oL6yk@AG1Ag zxn|m&`Pw~(J&!n3M*n$M_+WQPSoog%DWwnCIG_`~2T+VxD15$h@QWxQ#W>3u0&r-j z5WwX8V%6Nx`{E-BQpY+E|96JpJ&gN^mETw8FX%}5*2uAXK59mg^G#*oALzEzUm0(U zVQl-R47rA+IdulMX>lUyyja8%66l+qciEEh#Tp{(?h6RZt@@SUU)_!@Gyy9(y_h|xh_OMp(E2P5PNA_^*D6*27^6NZTC@$c5wz$< z%R~1Cq6Pn{|8jl<`X>HXA9RRN{}JOKFBrHkZ%0Yv^%j^iIzmcZ2L0e1h?0c@fIP~a zbpPm}-Ij%PMKQFPD$!Y($vOXj&EZ3{TGu2Z)5(gL&N@0EN}6Ij=Fbp{aLfe#<_aoT&#R7dB)6 zLu+D7vjXUJIT*pNkvk`AT_qe2+>GXQkIII2WyH3Y+VpOGEJ+NxHLb6<<~9fXCdREZ zE2P3aO#2gB6#+1OsKPf4UR#TjVO= z5cvbW^xD`uXpt8GE^SPG*S~n_1A2jVHoxK^(!dQ=HTkcprA4P=wv>!{F9(K^`a>G-J&f9 zsvO7sw7a9z+pgdN6GrdNC&6sxoqfW9EQB{hL43a$J%~GQww0OOx!SUOvvD zP%wXdkZ3a%wuGH*CI4|2E$_(S@#4qZJ2Ec~|hYqYab&eW7 z=PW}#*P^2Sn>>my(~`w*d*VYkyM|%Le*q}C1i>JBtU~a8YlnTVBwfw0d};ZCvFONg zLpYc7FLuY{rE_5gSv5Htw6Uplu3NT580AI73|xh1eJ1f`nRa8|X=PLQPkkkJkHd_O zp{M8^QCzvIN!8%~rV|)F-2$pH{=q97&fcVuogTC_tB?`=_XvHHYfW=RL!SixMZ5is z3hFz=OaD4R^qA+4w?ce(0o&WUj$|lmiP#+H88BqImJmk zK)`jK3EQ6CL(ox%;vYva6gdoqNUV@?#i>qJ6|;{Xt^Wn>q>>5AAxw@n+{vMwq{+#6 zX|Vy@!zI|QHbi73EB*#1O2r1mu8Y%;&01SiE@bO=)afvC_?S9D3eT$5*cMMH>zuyJ zzjG%IPVga(to?+S(>z;03B>N%F zgIw7nY2J^|W?HuSCI*$K77JSXwJn%TKMU9YWJ@dNj2ZuNL~nEs`&Wm+_53cxmOFM` z{|B=+hI+-y|GI-kW~H^I=l2zj9+&Y-EkBwIxd(tDm;Q}~K9}$?{<9hL(vIs6l=VV# z=^*x2@o%Z`+S!1Q8g-*ggnm%iH~zTO_vnzTSzoxBkzhRL-d&_QM9(!dYE@4XEOo;? zREB@U;+?+Nq%BiRqhb*)3(&xG!q-|(h$cEo`yWM+!mdo=MYC}i@{_16eRi>o6Ig{A1xKG(I+OeaMfJH2aUrUN4z_<}ud5&N7m1z(ne(_Px*g#v&wfhTm?(g$= zs?7Dcp7B=^{J$D0vZ51zmdUo^M&V49vZ>E%eo`4W{b-Zo3^O-E|6wBAx`8aKkQ~cr z0lJp8azspVT{*SIJ108!RcMT4um{)#|aiPRB5_o9i^F*{yXti;KT2l5+l7Quwtyoy~;>HGRSl{C3RV1Qa3b zZfdA4z4U3xkgo1Y(@ucGC3FBS_$I$z-w=OVkQX@lAATnNe+f z@c4g+rh=J{RvWn2uw-l`-GZ!mT>a~PQ4su*(=5tro-L-Bm9n#S#E063Sq@-MAiI`y zv!+3K1rgR_ZX=U6#*Eh&?(b|t?l4(6$S2uF+=%lEEu!{5>QOQJDTwm21jbyLVHw;q zQ7Bf;S!vjX>I_+idt~iSb%T+?U}Q0e)>^vJNL%kS{`I!1wEN?`R|l8>Hbmw=io(On z1pVe--*Gs4WadoGpGFmvMGp|%wnuku5%aIw39y<6|14yxbWvEC!bDSIJw7s6AM#(I zw*<$?uAZiy$`j!_$8)Z+duDtq4)XEE)p0OEe5mG~+A<~q-EZ}ATT zoxSFil)GbRHfkmg)<0K+5Z3p*%@+NfsZpVB6A|q(=buBZj$!VunnJov9q8eXCFhP3 zsRyImdxB5z!FoD>4SmDIG$V z0X}3r{t3Ge8qaVC`xmkl@8-+@_#LfY(2upj0KRo^E`%&hM7C)z?$Cx^wU!%p$Ep1I z{Dq2w@hPq?b^D=(MC)02nd(r$uiq9cL}0I+fxsp@u`*Eu8d7uhBy~x16|s@~$UNF6 zL5uRgBDdV#kE?8Mf-j{uNWY^nf!&~g*NaWD9XJ(VJ*2N@F6OJaZq!ug%1BNr`An-! zzD(Ia5Y>q66U~aDq%-;agW%8uOnkE>=XcQ{KWpq#=wL;4*iQ&oYCF?wDaXEk`h0h zk3MN9h8s@2;CC1KlV?PG(+T1FZN(=55Sh=rOI;nzl#BIt>1SWJ62Ix_=E#*Wy=*PF zFXKV~tcp{40sfOHMz@CX=B{UQX-f3d%cWGz_df7PzEY}4feyO!ECuOTP%T72z1!g> zRxjVCd3GOss*-4}sWf2|jKc+GYc)6Z&k@JZmyyZ(&Gg-FAau8j{PF$&mJiy-w{0_x z`a%Bo$~Q;h`nBe_(VNz8g(aXhG*vqj*Eij(EV?w;BJBSp$P9MDyq zbL8zUXd{ItK0ysNyKpS%MooVt9u6nvga5esN@=`TYl_*{k?gC&4PR7 zpAaS0t@8=5>L`Is%x)P8Dc2(bcK*2w3lNmewd!y74(H-SGV=ICn+Wk&HW&AFgzM;? z=85RL2+`V4vz2(*Kw2;ee2n>*A4>BU9&MV2A_n82-dNLrT&jL^bXF;~Bi}~E>A9kx zU^ixmfF|0NP7d0L@eOvrwR&F;mx~HwiPGmtYt3zxS#H)=HC$YMfrr5yi-F+|^4wiE zURoPy(d?UNxjeY`IX}>|eyQr>&&h%h4Y22zg?~jCn_q)@8MwCPU19QH^6-$H5p<)X zODx!Tq4o6$wR3dPP9fcp1p#4^yJ8S~>Cqva4hy156*%{W-@zXZf5MXGXGj|RoIC2D z9$7`-b+acfPjSN)-S!pzLKXco!217I(cD{wk66R4qRv=iw(t>SKW>}Vwi_GQf0Azi zh9e>sC70g8-(ktxySpGql5_P|Uh-wlyTWhDD>YrXP^hLO7w6V8Udw(R@NU;3WrV%{ z+K{k6xy=&(Ei+j@kOlPbQxo#Kk?!l(k>KSaljqS{Ow{@AL7^Wp1wH@6w-GA z-thwZae*02F7-gydZ4$|yj$`*F2WSg-2dLn6}-G-SHju|^~gW2wsh}Dc&X`9Te_DX zs*gi*R)tAh9#+!c&`mOb`Xe!RJ&8oa&PjCOX3jp%lR${eVIW>w*AvEAJq~}0G7N(% za{#x%$Y z2M5eGfoq3r+8%bqW=L1^-SG6+L>GC5M*t`jpDPOd5R$pSC$(WjYa;(C9zwI@ul3cG ze+0T#b1`pgiDBgtBoR>*Un+BTmM#+vZ0cKqZ*gc-#}okgI)cX_B=f7OFSL6mbFWjA zvUFb2uE|T(WJj7b@ZzP9(?QN?xD7S1j?m)^&Lxa^Pm<>mqiPtkQLC zhPgk2KUKWK)!NUK;vm=%}tpR7ipg-xsW9oPiy(Q zmGiT1Gh1Sk1wUGbB7-K8e;B#`#wXzy_5PNH)NY+yeH0(A`^b+>UPjmc&-XKVV2o{B zB{NmYEUN@g9ujL$xlBnu|8KQ6L& zf8UFIx9}nUELKZo{0Cr;^1vJx0;BmERLA`Z9+J0C4IuILPYd!3++sX1z}e;y5}!XN z1jo%M-*pot{d_aczoaHRz`k{^eR|#7B=k`y|4sti?`8O>-weGiY%@rQid*pO=}&IU z0sWz~no%s}_x~zO&ML0H7&0D5cAnqn=yNgC&aJq}6GL9CVZPJ?M5|p9jm^T^ z-^@W(xA5P)CXk!!ioQ=VT5O(N4R`CGtN1J|)+ zq?k5X*(GxO@t}pB_P`F}*?sguAdE`*lJyU-ZsBL``v0e;bQP`)jOza!8@h>$Ni+|v z0VJec{Y}C8t=H~)-8P86|3}fCaQx6}iiJKl#=IdhueS7!->@jhV%E@m`r(9v`fxwm z6eUaF&6CnotlgyB@}y1laBfjxPckJ4bKNS&y>$_nMVRaOYo`UGsUisMjKY`k(A zyb1q&X~I&bW2dCACE z{m;lMsmr5>aJhes4(jEev!5Y$Qv`;vYwsfNn8(?a_zk-szTJjX2geflLX5d_XZwMt zL&-KNfNuZk?Ulcl$1<$hkUXs6!M;-&0v|&1scr$D>pqrKtCw20^p!3jOV$bGdHLT5 zUbLR5yTlftJ~#c2VkCY+0dN>7B;9TN$JlX1pGUaFZqR`2G*ucxc6{FdDZP}QxLFU? z1@3AzO|61vJ;;`g262>D4ps5enywl>hV(vb2dxH*?0o>M<-sQrkWrspqE9fR=>w}@ z!2|_Va$?^9ZOy-{TT|V)KfLgmj#I9Tm%iDL_Qs`VTxde^THf5_+=v)UdQfewrC)5n zL3P&meTQnS=&33?pru`gX2n0~7XP+e&1flTx%!}C(9cQs zcGNb5iefVkx^Hj%BsvV-DuoC#-x6HZ<9fa*!qCCypi5T2Rgs1`n|wTz;J}^1x9DAC~d>b^4dccYup6Dw76%U`L<`FEu zt1G}Sy`5my|C+6vJzzVQe9GoSuy)SeZhCMxFH5Pffa6^af1rBaMke-)B zQv6KrY-Q42@Ii^#Bij!;W_t`X_p$;7m_dIpXY%esi6NFffp-|#h@GHQs^wZ6_T0Oo zj3vR9w}>2)`6+u1!-n=w*z0|LQsbCer!y_D%&GblkPPb?p!>Vp7^p2T6X+f-83b z#*fmo!SGaTT>OBzccFI-UX9f!xP|BFF~H%@X!yKOdo-kZo71CZ_?L43L;skDNV7Tp zBlfcY695`@Igv2j6+{(;B&$T9i*PFqTh`{zM@*=uN43O-Ym9P|;7v$jr& z2-=r48*z1JZM41xKv)J2`lL`)ygD|A^ zJ;sJd_c4{l63_O%8*o$T-(!Bg3tMN~FhG?7OjEPf6jvSVBiz6}(`Y8@8PZ zia~xgS^!FH>AM}_0a)y|6Z>2BpW+$g_>|kS>j_JCGf(qJ{X}Y1awV`o7YxEPtKy|HyWM z22rUte>Al9n0AT(S;Ys8+IVe=&B`T7cEMAyvmCQ0(iyazI$3M)<1ILk^EPLnmhS^m z2w|$FBX6=B5I0vU5iz#>)p?nB0qFpzU9^aPCairjGHn#*RROJ1JAIv6m7HnjwkJ?~ zvP!l@>sOg^bPEjd)4NHkXei6xQW0HjrGmq$)i1Ryq!ecWLYM@@7ambiAZ`Y8@8?ZJ zGa=T1P;>d31%RMJZGeitr@bKmt_$y!Y(_ctMF9GN2R+dGVyFJMLq_7WouGK!+P$yu z8h&m5Z9Z!^Q#ahjJrOA(TZcc-P|TaQYj5dmwGgBnX~SeO$W>t*Vo+@!%NZ*f+X{|9Kd`*R%7^DIV0B%WGgGAJ6D0vP59DM z%kq-GO}J73*Y{ly;5H?mp#ryjlb;ew-C>}ZQz!qGRo5Y8xTk(heGQRwwG7qT%st=} zPF_z!A0;gC3D4{FzgDlVP68{jG^ie`z5c|TnbaKxhR?Y$v2ho|F!6uxgYU3Ywcv_Pi_w?7YDkt zi8H!uQ*eD1z_b$!a^FZTz>TB zzn^+}@5%QM&)!hEVsp_`_ivc7*N4LgzJ!P(G;n3&waRVp4^LQO)V#lSp_>EOr?^%y zTE7>~58PP3Z3{}&W-=u3>s#Q!<%w67{z+neC86hLoBI$>jI{O=|B=-W6&u-{;&yZx7^5_Fi<IVPv)I?ZirRUs1;nQhY^DBE7@?lLUo6R%#=JJ;Exr zcBQZkmI34-9r!Qa34&G)7m!tmgl6@_ERkj*7E64|VB0Q>-N(sz^9!8Csw1e)$iV&l z0tPv;Nq7A%!QI0P(u(9vP1TB$#_Gc=qDvajO4hIRa=wYD*O5SPmmqjxAZ-vFuiY?#c$;J=}?ZJzBFS9;mVp?B3$3Ro_p}3vwx=nYUp;G zr^5}C)RFXl>BEL_HfZnRvo=dvVEqSaHkQY?WHS${pGqGNhRr^taPDAYNHQgK4Nu-J zsv45KUvEQ7UaNUK{fyWD_d&$mwO)G_u6Udcv5q&e17q2Pls$N(SK5NWZ;)_ z5*0uqZ1HivV`%p9L=*arFn7@on45h5u!f#s?fcB$jj2f|meKVT*?eEn8nP2pQ+%ha&fEsIRDP$LMFDgxwAg%*J zGQaGhpruqnaJq&;!^o4FX&=AX-GF_D3)ssfN~@6ojK4MZVh@P+u`Nfcg%7aF;%4h-|^S;a;MXZBXI=IS%o9-i}7maPaum_)R{>#t!^b835Jv z(r6vSi=7XZ{?;_3o4bJkh#a3@hZC#!*|Pn~Mbs}CbJBZ0KYvL`#qF*5Ck9LE)G~w_ z;OFPkpx+q8jK83S88On8O_Md5JENl3Y#fRSF%u4BQYr_Wy? z3j-L&#_XISrX*(6gxbq_UBp_uNksM=TS) zS12)&|EzvQTiLnGcnl!Zj2gPEb!3)WZVjXf85RqgCPR%%}wl+1xTmn+LjG^3h_Jxh^vEVEnFhuFS{8@HaL%UcK-MOAGD z{cRG3X2g1$It`R#`PNOQ@!HbcteU{+%UX!0e0BR$9j4z)p&u##?Wr*TY7=i8S&QxMlb?|}QGnAKjmB-!{Jhnzo=dZQ;``mEO+&3pxDw(fi^Y&}xmaJbPcro&9ZYOYF1?@Mrhj#am3(zGd8&EZJ1kJ9)QtixtGe<=Sf zZKfZqBRN#0t#V|=a#hNVKdH8~gMn|{z=P;2;e8(Bj)GX+$$kDiKOy}dyX(ZEQ&;{K zX`b+eK{w)}Ugf~>jOH1}T-1k$*54Kszi zYn5?Y5QYeyc|UdOADfD|k_+y{yf(xV3-2d2%^BJa;5h#(^7zfwZ)@Zly{W>zcyOIw z#A)J^FRg#D7`Xry?idFcNs@5_%5zKVjP2Yv5+=g}CCeQ;&*N*bTa>V@@duIBSy^3! ztUQ}Pq5s7l7m)A$fAj%^8~6wH!X3jcjPqx)8X=>wy))8|a2(~~I4pz%`m^@+mFw;y zdF#Lc65sx`pt(G^c(y^hIfTULj|stX^T~JJ1W7;N%;Mvy39||3qb|=Ztj`=1QbD$; zz~@O<{cb7V@)d;3~_thk)%dV7>7hJ7!lO z6l;hLjwLwdd)ug8xHq(1Tl(Bh>eNvI#Y#-=xj!#e`~D1e?3t@S5@9xfx`+K~Iit;* zxHJBKXie=If13G*ivWLB0(NX|>ALCknfr}(aZ*9DUcIgU0AamWnZ!+TV z@ERn2D3G|zG#h}T%nQ7cesXN7BHw2CX(VWWrq>MnaMLMdMD^iEmsr9Pmy=+2`Zq`r z2Vrlz{mdQQj)N4tYTy0^nfl+K<=Y?YM(c@~KE0^WILMkHt61%CpJ}-x&m-6P$D={+ zU_XC1lkd*EnLjtE33?RUGZg=vZk2s-HkGND@Q*P;buqW0-ZFo>e*j0ozd~T#4IYw3 zAtXM(R|t+9AxQoJy4;7pnH!3!$@s^Tv2Fb0Cn5i+W4;Iey)uS}Jj4dAwsh!?p8j?_ z>vow1=icCHlF_V^*wq|0`Q1+FbbsVK2pu8N^bo9n-hTE&#{78iUzeF$r=J&eBK2L) zKTSS4MIQFF0>1KMhjX@Cc0EZ_5^jC`U_fg)xqB?}oPX?w zg(%UAH6vE{W$P(fSrhvqNpm0BY9^zmlGy6mDyM(xT;<#rNY+g=XT1OB0IS!;_@a5c1@-V$~T-Canvr*f>bPF@ zuQ~p>e&VGYt>mGUoXfkb2&;W^6cWWe6q8R19v<^ztK%x9e`-o4;-!P$S5s%i;w#X< zSW}jw{SNxm=a}S@mJ&U`@zYpz!0K_a=yflD8Xeul+YwtpXXykADZJAO)N9}JxxeIc zNh6N~wdzXDK)syI&A>c9r_|&VI*pEhL`}@Eu0_}`cOPL-3uWvQwlFD-CGi>L{&Pei z?u@sL*hvJs6SqJrCYIrGJ>6qdjZ569V==bg+84VI@HfQ2 z^}@{j-}{H*{4dx14`xQ5EN{X2>_cNEBdU3b{n+h*!{s(+`M;a|gZ~UMym51Z{gjh-UDV=~iXVM8kJ00vcMA)7-`BPxlA?-5q z1cG0x+6lpG3m4i8YQz{$0L=<8B2!6{m=Y`l(Zb6}fgaprHPqh_`FuLGXa3~- zL-rz-0+;e)@3pRE34R-&?SWJ-bT|0yV+I}RHMl^22l;t!gwOv?+vn16R*>%&`bLlF zPt7J!uNV!%d-((|{#*Rn;X&WDK5mF)f6awS6-(qj_d1UlWWs=!t9hNx=1rtoMe3FY z_O12Xd3*I47U{O0b}^bv|H|Xj%OCB9wV%m^czuT?co7F|)n^)!$R@%Ug*xF*Xr4q@~q|xC~)VU^20i95Itv&Llj}s>J@V zI@{ke`&)&VeJ4#R>M}l%XKYPmYMj1GbUG^55QZ+gVAyUZOF=tU_T|q+z((W~VP(gt z^@%x?hFEKeS?mxDkTjFq^h52;3uBE^m1wqD+^x{K+dt0Sxv_@GBVPp5cKxoI!U=Va zcmLL6T(d~Wb28JG-RIp;+f1sbzxM$w7%5QV1FXZDiTJ6AtFq(7lKTlwKz;+*W-K{d z#Bg9qb8p;WGy1PTVRG4yO$-@kJ(T{v0$JvkObVcLzt-zR!E5n2*56*%z1=C8^sa00 zb)l!fX+Hntfx)bIAN|`21%w->)Oz{nEp9?kUu&C9|tOmkIBV0)s7G5K!Nt z|8!LmPt7QP0kX#^?;KJmf)QzZNo;})o_k}0@Be+7{s$1!1NuKj{hyfWzg`~-UWw1@ z7LfpHydBB(Klqx}i}=?xpMP?3rvK_NBOUhN=RcGAejWMlmma2be~{__NbCR5-SvO+ z@gaY!E$wlg7)HM9J40csPcIH6nj3jDr#G(e4?y#9xbuw6_~$gL{4eoIC+{29FWPdC ze1ONaaYEr|Q6=B+`F`1uD(gxw*mimrBX@JO{`U;1X(4n=GmguAZ2koNLWO?*&1{>0Osw|vFM)?@@*J8_ z938=LvUzScdP>jQ(krgfXc1SgV_*5M6cN=jZlTIwgvF;nGy0po6I?2sjG^39qvFq% zB*kp2Urn!bQTos#{Vg*+LjAH(w2+*uk^x1O#Clerr%}kMEq&{1ficJ!ULJVk&G=m2 zu*4Q&4gBfQ5Pfmo&e#PUS(p8pLa98hWj*ObVaT|IpUDH-=tuF{I2q{=^H~4rse64I z63q+OGie~bHq!x*-&@=8>-|1T{~gM=X}>l9f;&zHWN0aOUT*g166$h*!}m?#=OE$_ z2x3kN^0cH^t|uE*zxD@7qRmh)o-MiO|~+a=3ZUgA~m4F&Mt+dpNRN50{2#;g2JInwQ$g0N=KNa0Jr#l!gF_b{2^+EzOZ1Px5h_j*q15tea`oZT?JX!ljR;=A^!NDF)_%@2G~74 zBwSS`QNu&z^Xu_1SMvb>#h||oQ1<%pP>r7(!;U@uEyJh5PCY<|#nj3TlZiL9Be=nQ z!Cw6Ux4gprTKjxk^4ZNeF~UD=wiKWp6d8^hayh649wcwbE;JFtwBe0u^QY5xGi{L0 zIhp9(F;>lG1rQUxB_@kV!|3Z8Qm8M-ZLGk@jE9!~?J3UY*Wp3msF3*u2sz19^IY94 zLMksYBJ(9i6F<)GV)_VB(rZE#+4rM@?~ANY+CZ^2T(0MzRs$W*FawQ-_0fDsV+mGu zpP#yO|Ke?i-vS`l5ay)khs|bwt^HWgzUQ6E3)GJS2Nfg2Y!^w4g|(7*+a?(N>@qB^ zrN7@Oi$cV0YBXXfU{>a;bB|?e56AynRP3;i!cQzv8MSJH?@D7nW+XcSBs-b!N0CEidp-atT3P%cGu=w)nW+YTS^c(AC@@Wg3Q^)q^u?gJdolfh zvcG%G1@DjWzI^m$c!EAQSAvm-$WvjGTSo$dfa&gaZgE7HUlyu!h;nX_+ zJ06zp&;Op!(Ahk#`#6usWd7%W*13fl9OPLl;?1hrn<1-vL78Ix^?eI@Vsl+Xr(u9_ ze-KMf&fyyGt-8zM*}m(Q12ZnJ;2M>Rl9d(FVJj;yTO%&O?1>z3=^wl`x$7o!+bz(jyGvTestU_;4>BYY;L_b*W zAu9s1W0tFMWn#^+=-Df^qQ=o{Q*|F9ViS<+XoP_1cePsbY3h{t`m=od*! z@vU;~JY(?tg?>5b>yi6}v5mx2eXV$ML4lRJqi+sh$4i%Q5EJeVv>V2P%H(|k&Tg?< zp^rlqpWDBwPQz%TYc!9ecvKYaerk@MRX5LQnvq0;UcbPWw;zv03_^-=Y@$jnDe}%O zR!O?2U%y`HaRMRA}@*eZ>|(%5O(o)IKBof^&TV0|;|V zJPcYie^0u4bw^udxsn#ooyi89vdV^0cP#(73%Cvo#*3Vrg=r2$&SOOS@mqP7ssxL; zI@UK&sNQv{N0kbby6&m0-CS{2!|h5`oQg1L23S$FCYhGM4?N^Ls!j~u6KLiqX^*MY z2}q8oky2MVsHt{*ai4>NcrR8K*l$2wcX)`}ezWpHp!peL zhUVw_eTF$Qs0+z^wO6(^R=8l@IH>IPdZ$`1pn&NjM`~H1Y>XKDh7dM`BPEBZg(bV; z2D!nrWTea~TioH9zjAnHvGDE^s!qbJgAS3q?LvrWNB+e3)t&b{QgrkK9o?z#j`}Pf(8%`{d2jMMWvAVFW-XP~aLPk}nd!N3uW%r93EqZYJD?juXFvarwUvgCEoLS+8G-nHYrZ+89x-fZcw^J2dGAf;Oa z2S)%eos;I{+W$EOr(HkOJ#RG~Qi4R5YhN&nTcx>Y?;T$=d-mCfjT}q-QpGB{GA7bF zheno9w;+yV!)6LSr@v79LM>AC=hj(%B`p1&kgf$~9#eqJrt?W=ei4*P?*K)Af&R?q zKU(?CZq|J)aW*J}Nw@Lv_{aW-_}l-7`0xG?@fZCM@uzl+mwd+oQD440J0~OG$w3W{ zDxO>$a>w;96jMWjJ2vt{fpE$iWd0f@lAQN!$tK<;syu0*e<)eUvzA3#Rmc2Y!g+Lm zTIza>gX_%%X$}t(k&(aNvi3*FU-3VbJV+6i|8|Lw`tgw$MymqzriEimTY1r`o3Dl< zw=`zehj`53f`IDS((^0?)g70cv7ZI`#1NKE_sAF=0^+gqWoU#)%sraj<5nKDG9`y| z%;@~|RHM(Js8Y3vqHwtSvvRc(zRqSXSCUn^JIbQ3nPXVgq_`CH6};3{EkB0Jp>>hC zsI+F+_14t26LFG1BYT5^MgLaqG_QH_8LeJ)kGJPddqr;B!3(@$yS(_493jL)k*WDX z^X;3p#iTKwy^7&_TOlVE+p5OvMBXYM-0Sf%g;&RNcdb$XVcxWyZ@Ese9fMM*xHjgo zKcE&B*2bc(MC-kGXnxxy%1ZU()6dp_}a&XBf}gyT~hgA~IZe4A6fIeF&JpCOfTNH7DD^_*-<-eT^M;(gbI94Yt0;5o4twWtmC;MkfRD6AwWf2Q^o0I;fnk}9~_r8OD?WX zC!V5G$non$??QplD*6vamS^#aWe0%9r2*lLK=?eCuvgeqv%p>0N{B5hc_j>Tg>A|v z3~9uG%e~mWtwf~~VQ;^q1a+;pJxWAC`yZx((ZuqMa;z-2NRo#{gy*{D?+7_obUG$honT4W_J zgWIhv=FQxXDG+m&7%~$R^N3~?j-nLXZ5*?5L|4(ypKlZ^lb%F!4me3O%OgD9{5z9^ z(>yv_=g=$Cy9`9glZzRF4iYX zy%`Qdu(8->Z{iWDT%hdO7ZjKsY$x0Nb=-fY+ZWItvf{xlz~br00)gF+*(v9wrr3+z z63nXa#mFp8mFt(oDV&fPbw*oAd?nB&Iuc9mq}VI;XCdwsYsOHxjr8n9YrHh3~FoE{_jbu&ei3 zoIiR&Ulnb$DLVf#8@iZjC#{d#Z#e~yEm?OT z9ZIdIkq#lkUw*hl9hVY@z^(`QZ+M#M!ts1)3A9*eWF)FzK;|-=`HwO(!XlFGK~Kv%UEJE(pCHP`8_h?_poU zjzDuCucGVeNZE^(4-WzMvEn}afcJxJGjXJbEXj}{?V*N9yN-r)Sqa+mK1TS zz467?O)docQgvsThRgF=%>1I{zC|KRCH~^kH5G!+svnAc&Gvow(SL4QbsEGwyG%XPi#pn(yADT(l1UFCXt(= z+));sjclX4%PB$rKXBR+L`QncbJhyQXzZN+BqROCwepSX`krd~e#+1h!pu|S9ZMGKieL=-gH?f8iJYhgERQsgo$ik%3qSch^F(?u9pP!^$BF*f zLQwbjE=}{fuAd6bxyyvr+-K^%EVJ=0x<8(K&I-7VhAQnJGn<6?`BwDz?n}9d-g;XszkP6bD7r)4Mj@uv1r8*A3lT~H#SAf~bo=d3YhQ|*&gP6DZ zqW^xFuJei}z?c+cBw=1URl9ri&;Mi}6OLb7vdJkgJvISsBjjVrCwl_f)n zKtx(v$de%-WLlTB)Kod`Vku=$_oi-2$jro%Cn;uF3wIAfnSmPsY|fXflg*48-81vS zHHQ&g?)lr{J~6hMkw#8{)d#~x3vbJm%*SSdDC< z%GAW`hE_2>R53qX7$4B1CVuHq{Eq#8)%YxebE~OUbxp~|h}0uc6`OB6(VMzEeZS!+fdvEDETLDYlO}mLDZHr&tyh&yfo{&*GK{Dl=I&o9 z3G$AjW0j*w3IUw22a+3HO^E{}HXDu=WnNA|wD33^UwAwZ?mrVll78@63newwt-sk5 zPY1D!fE>G{ZM?sMFlr;OeywT4E`8OPR9Ad5x6+&XhV6eeFM$Q&UaH)Xb;Oe_$s@DI zu<<3G@kw<(4Y=E;&A&&Fsc)#YlW4%kdyBJ7=wYQ$Ky*lh;-f=m^N3V_{|{nB{mnYI zmhF~H;l+eInILzZQpPH;vXA_$^@!)r6TE#737$O=U09=V<})6V%Ar2I#x%VA6AAZk z*6h!#?Z=B4%;sP8qNpQH4st&>y_%5f=%y5sw)2-3UQ|R-UB{|)GR9S~GieofSuXvh z?cYxj3~p(q1g~OuVBxIf|4l+x2U1?j9&I zb%Dv#NfBmInV^8KJB;!LP3M53t<@Dh=FXG+-m){$dDuo007lzsSuP@SDNI%U2PaPtzeO_lG3)S_Io4f_PH0eN>B z_~TE6;Ijn|dzT@~gn{&sg_N_yTt{cnoNz}gL=yCekMdM(y0y@ox}9-5PiZUOxOq(? z`S%`Lz~tUQNHx9I?8g6Q$v%yi{x(pm`TY{hMJ~2wgi9K`jIRxW1wR1>%ArzX88_A5 zRCMTtWBKCzKAtKT+}s&YL`V^79e|C8rKj`TBCk}DJ(fajj$^6v)$ythEyzR@Oi#V4 zI@X1y%y-TJwZvVbox$3vn_!DS`=c$Qn(vCOfranTPlPrRdP!`+)>>|@u62h%@!zqv zAvY9Vm3pFz{uFkTOG#Z*@z;i+_)~4mKN`-d2F0FAqjl3w*@<*Pmx_UF+yT0pg(0sd z0l8Wv92-)(nK1^9)(@zSJ*;(gI6AzHu#WuGYz+3}9Mu||mpp^?iD>@sG+4N|m52W9 zJd?_ee=|F}8y7SOV zE@wsS+ilwCeQB^Z zQ46?Z9toQ1W9T!XtmrF?&Zqo}&GiFeAEOxh4to=Rrs=`YJAaMXF|P2V ztsMW|vS&B7jJ_P*tm0ri2K(1RAf|>xt?HE6LwED2jXkDiKuv6=zG^DoZ+J5qW=TQ^ zg_)@~U}|D&#{2St8N-`7n;(RBITrXW(b`sSGr!;s`IBESy372~K6jX-ZPFd4r+w}= z2NWL9t*T^cWX}`a4tGjG5P0u^zRb>(e6x?c_8du&v+~<_eA%j85@66w7uqy75oLpB z51M_bx{&H*6{BjI5H*rS zm6uwOx&O_2HOLtJv~06A&|QR*dRe2MiHRR45xHh8f&cPNL|fy;=-AOdm!kmfEsF#H z&}P0XU9*B%Fh>O!nR3nzf~vC)40l%Gc7A{05={*(na$>~jb7EOn|=8lKfb`+iCqWT zJN9R?3%`^7_#$&B`AuJTugxj0p#CH26Ap}U{_|8E;B85M&*CO`P$}U92#5a6PNI%{ z^ukKpZvA=|gyi>;y;Zx@{tbyO(40-Q78bVuN@evd#1&xR&iLBUa3RRcZm5z9ySS-x zM74UdkGbYz%{JODrmKssRb9KqEES_8gLW42`90Vj?Vk-qd1BsYcMMEqr!ir!V9pe* za`PvLr1@`yB%~Vrr~6TyPjyi@q@x^t4)Wu{ufzWp|0L_t7CXZ40p$X8kr^=o)IJVs zO}i`qw(;O`pbEJcnhho#XtcymV`y$5D|9Bs_c_I_b;fMSw zy+1j5p|$VApNhg-)^qm0lp<}aJukDhuz!(V0Oa97Nz{EkNuMB zUy?Ig?xfe6D$jQx&3tg52_LvdSv12&6+b?Xo|41iVNI2}N>_heEdOGgW_H?taWA5= z)x*ycm0``G-ysY5Wg7jy9;b~`7)sl+jb*Quy@8L;B}W6^zyAiE&l0gIjq76CNKsLdJ3eKpsD-Nd9i+JvF+}giSI+aR-s5UsJ8~UHTTq!wUcNaE)+|QF+ z*8=JNINtqY09v_a(`eq8k?-tPZ0$syUJo|y$<^d*=7d3U6~8a zBjat`R#XZt#1XS!~gU1L16BkDk6cZT7)@8A5$q0KVj=J$;G~>z9eX?@@;j9 zr>f8npYbEhh(P#}RtkH>qwM6AIy(CD=C|4ZIV*6_mjXYTPIZD^vcF1(kM#w!#Gy?(o2NoQFY&r`W^=vk@^na^e3N1L%~jO=Qe;VaWiPJJeZml ztCQydN&I6D{eOfMO46v}AGnRe%)bslc$oioo_H@7Z#g(ErM+UHxT-@7#9W}UZ{d&m z%3+-;+|c~w8ui+5e=Q|d{kN3+D%fw+z4w9CP4h@1YtnV7&00w)-+2A$Tg=PX{|((P z1zP)3=&inZx#k3O(_RfKX^BsH+P@|V{x(^mG_Wp~KVzjPU~UwN=hpD*=zmPoDH`ic zKZpddkTnKLBi1kH6aM`CwTjo|#SPn+mz1<@5fR8i_y+YqM&kLm5Bcl~C~{}up4E^Z z9Fo-BANUR1;V%Za+_Q50a|m;}&p)h;=$Ju*t}}CPbu|jYEVi(lEd436 zW9RxeclUpR>!rdP3%I}X!K{X)y|aF+da+2lsnXc2oXEj!80^6w4bx+D3aVq{FwaMR z3svl`KRP;xR1=CvbfoIM*qmZ-e!Hl|Z{NPTBVbP)46r+L+f5(I9duYwI;mnD(W&>* zEL+oG6-DA;;HT}FXmUR(1qND>2|I$#9Sz6FW(|nV!9moX`o7Uw%oG#Klcy1vI>C13 zgOAYO33R1p;xPX5tMOm{jFxV(=OqM%V-c;~s$(&I+4||C!@pMSX&A~zEncQZd8i6w zmC`F_AJlCeKVPexI3OE)LmdWdv&y+WN6ky?FLwu){2KAo*5E|dU_BVO6mR+GoPR;< zG}*SfG;?-oH3T@Ssj_*rgmrsPUTkDrWFAY7j|8@0@l`rIwabj4k#g7;=#4^_a8&^)WKX@s+Sks* z=5(r%y1jD>bo49NPJSK8hS@r7V5U!B+<)~Q<5Jq$vhsor$;J3 z{w;&2;k30)>yX5<6C+yFci!E39;3-Q?UVyuw}yUX*TIYjtS*Oktj!wV4qNm4r?GV< zG}c+=Zg0}>uXFnS7vZV45%WKMlFBY_E>WEm=4%rUu7MG3u8_bJy9nB8`8iAT57QHU-IHT)*bl zz&)+zlhHOlFVm2>g&AK{W&Y`!al3?bTg}xr7G1a5;iA6z0a5nw`=dk&aDfASKY-2U z`uRRpNH+so+V!Zb>Z8;K)}OSW*#EKOL}ylodqvk`>5^Rl! z-stMsLa|vXDvL0F5__$Ni3~tK!}NzQ*=Q|RIhfo($TK$HDs866E{2!Es$y5b>aYzq z*N?Jj`2EYYhLMYWr4EAHO3kh@HtOiV5+zcx{PlT1db-(tu8ltFU7|bn3$}mB9yFU> z{D_Z;7bUptk-nMl>q=U1}2q2oiBr?Ayswi#&HjxtK@zrh2GOkno(d%zF zn(b%VmJVM}%`8b?C_+qQ_UjJszg7pcjLR}*>i!(R*arn3iYf7?c2dhC0ZivVLD=~V zA*mteMpx2M;Xoz9A9t#EmJx0yy2zr9M2Zi){&`;U_bLj2t})iwO;aeM^8ECAce?3k z6UkDb9d>4};S>MdgUr4Wwt0`Wr<*rjAjfqDIn^1zfvzSBjwSxduZAlV%zb<9`%nDs zv?rZm1x0&Pm*)xD$bF6BsZD)(*WAL9hh>Wg@KFuJ?9WG{(0*KAa;*8jtI2FJIX8mQ zp9;NcTz%xGqK9^pKm!2$Ja6OGs@;ykP8EX{A9VP6z|U{-z{B>fj%jjspHDGS}Z6dYwC=J$!_+)?L7>%8?6&25Y|0RmH6#6Tmy86u_ zD#=~GivRwKQuI$@UsxUZoYjBL>N0eg&GJkX30*B>gCUre9JJ?iWgiJbPJSCqg?;(0 z2pFaK=H=lo`+6GPpZV8}e}g4Dd~|*viVZYtA-*{OAaM%jV*2_Y#PW|Ksy+8V1nQ3& z>LXsQK|2cXttdQS_uaub~f;Nxrg2-J!tfkOU7+LfQG!KVqv>c`r}N z$|v$P!)98|?|{^J%SietET1s{Y{&lJYyXh@6~RwL=KAhe03{Abclh{ig4Yq&v7Qd& zCY_#uaX0C3TzFc7>z4nVddcE-L~kFjhx!MdeTv0hEdLIQ#AHdTPga?^O?-CbF5uVP zlgv16H%SgwX~xP+pFapJ)Zp^*Umh!bkR0jtoiuTdta%Z_wP9vugk9376@-+)tbY_A3dU5=O1Vy{Yw1=E_uD|&1mIVRWg=) z8jpnhqqlP30tXOCfV#F&k?iN-oGdq=cl}A4X066zAbwd#>SQZq+s&eN_(wN8;hC%v z26x~zSLwiIF(>*)z+IRVhpc(lQozpoO?Vc2&_WyaBw-jcHvEx79_3wssVC_kpqkV6 zV7_Aoc%-fZ_`^{?wix>b$v+=Fgqj`wYUeghzs*^kzd8xtV*6Lx`W9kcBRU-n7f{AJ z%`by))QSrd=Ijo+X#0h+-rR)I-I5YB%CADtYniu>WJW0~N}8VkGvd8?Uu!El0;&Wf z1?HCTcc(xPTfT3XK}&9a{#UxaW>c^9g5^sc>1Mk2UEN6^MJQ1Da`$R*GExiT*m4PM z72CKzh}*4ClC(fum307t$6OQW|HD$Qkeb6X#EY1 z=Sj{lFc;Blx?kNr6CZKCDab1wbzqBPtUf};I zPAMLyfVJwBSfA*|wu3|4J{pw0F}f%6-dkn6q2MJ41SvM^!k>chj$C({XVuoXyr~@) z+v{tFt@A1l1{SV%>5eCz7a#e;uIk>sJ_n*T)4)I9Pd*=_-+u>ZPZ4&|NR0Y9sl)Nx zZI=MPYR{%!)x&x@k2|AQJxK??ppL<%-yiv)1JAJ%72FDIchj%Q8Fm$`8&Np1Oy9(y zmyTa|59~H|U!s3r{zTeGeY^27MuE!+bbVxg+cP~#=BsCf|Ji5yxX&}+6Xn9v6!lru$FeShZEu@zr6HwOcJI@!U#@>20k3`;#b~Ur5rA@$OA&X$(3*15N_u44 z!5H0NX7!iz_e-Ff88F)QMwzLL95_`M3@m#ker2{7{fRYYUSw~{aZwB>j+nxdHL|e{ z1bZM#`q}#xlD?yFyJk&%L6dlE@&;ku0`4Sa#53-{FmrlzC1*|6MM-wB(lo8}J9S7G zP6e_kO~>;;EQPO^y|VdZYa(0hj^C7K*h=Q5%lVp{=qa6lp1;3|wgy^C0mi&Eq&X`- zvJVaZ3^To5_YoNX0S&Kz6`<1+F7eErD5lBeMb}2x;T`B+u{e}Int$b!M?REKr# z@pR$*HL4rE7`tjsv45boQn_d8MuIiP%{|bOR?a72=3f&@$&I!RD5j*(Vjkmdi3O++ zx1apy-!VxSOm|ZO$7GQO(wBSSw`2Z;0MQ?8>i{VgjlgpMg9O>jJ>F1YwD3(H^K<`O zzr?swt!#25LFT6G(r(++Em)ys=4&T|w|MTCC%}>H{@e6E-8hmei4Z>6Jjo$yQCptn zOthv5HT2+Q#TRiXN5B7~9G`v*VhKBcJgF%IjqkBFfn}R7jy7*n&s4>4%I;_n$9n46 z%NbSC-DR)MKPUp8buw4-5r)&6Cm#futah2fSL4Gpk55iOlDK-2HPQFV_Sr*Hw`zb` z!NK|EyAExnd3>5b-O6*Bl|Q!V{t$%25#0sDACj8+`7qgVmepwvsn-L!BQLw~CSJjH zg~fCZALb}^WJKOjI){VpYxBJhr=)c#6h#yzcYG24(paN_^Oz#tpk(Bs^3||(cURjx z{DOhI*P`8xwmDVvxm2gCFLxX<=_DA$yse8T_t)TR1K8f#qh*#e89-l+#Xxkse@)<1 z>L-i?UL*4`*BLjz%Z+H87$z&!la$+za=re~WJ8j>O5`!1#MaK?prf^8bwW15c@?{6 zRmRUNU@S7d|6!kcoJuZIhw4vi#ys_M*Nb7=?8PwWmFQlW-&>4(v78c}O55tdcjcCc zzdQOnpOVs;RF^OeAq}cj9$Y-PWF)HT=&r7GS@v30bl2vOs>*g@nAb3e<^`HpQNzv- z2sA&6w$ph5@jIVE=GblS+n=2pt1qv6pc6M{+u%P16HLkDt(Oqbp*^jWJenG7`F z2!Bjf+4-kx{@x}EnhmF2OImB8#(u(-s`$u)kfiWkRe`6T^4S$K%EjU6My1oXMsrV{ zR*4RHc{$D3b~Xf=R#7+itd93RjXBU zaNP)5>_Au>?B>S@IQ!R~DX4XWlPnCx;~oBgLiy?WOZYE$;-i((<4=kXqOWL+eY>0+ zgvbdITmsGp#|PxaFJz2A~n0ZtS#O*J09wozt1v?;zd6a z#Y*JzCnW#Hww$R?tZoRbu82Bme#-5}>@;hc_5)qpm`cR*67u%Z{0)L5`+C$jO5aybM7yeranIF>5ZZgZak3A;GgY22-#dIaH8(^e z82?4~p~1?`Z=b9>iaR+rzU`|KYgn9O? z!^l4OK2oT+r)a)YRqSpuEzlV7%3fDhCn45Nx9QlgM4B)!zrmFBrT5e%ymlxPttz*3 znL92s!z>;u887$P6=*AR!K2wDlNc&&lLNfm{9Pd&DtVS9J(T2C0?ZT2$USYh3!!sW zhjuTHLd4R7P6;gi9wMTD;uYsC$~cC_hN@EJSH&~EEfhb5(mZpsD{bNObcLp=v?^Q8 zF5p!r_m6igqg7>W(-D|%W&G+y*CJc0Eu+6HWBs2f!zy5V5CHw|v?(o;)l+5bRvZt= z)QRo#c!EQ5zvI35EO=dg-|1clECIQ9Z=ad?6xH-`-*0+O3qX3c@0Fqqqlfn`Qpog6`yE0%qh1u-muO1iy>&w8(!R3bVqknzXQKN zv~BB$9NM;XSZ~r>jo9crqoOYnV6tt?WUg;_y~{pXZd=A3Tj{1?Qtd_d_nCRRCc`gm zh;7E&W zPA7OR0d{|33~9}4gZb$PJ($z|tl|PzKXy6XZiRS}**p;OiYq$p$C|Dm&vpHHOds*w zk4}b%ouGUxvTWI<&k}H!0v;v6tyYBp&wO5%oOs{}9L#bnoN!n(m6H-)OpId>_XwR- zwwsT-wzqq0|`fWU`iK!A_Hex-e8 zz0@y}P#OG8FG?gQGdoe-?4#_4da5SOaT{HBhl=MgG$xu;5F) zd688IGmgc8lyd@i>q5#Ky^8kwsp|bHnqM2k{7jM%F~f3#cMymVpt6F0jKN-6Lck2o z+8pOk6VahmKz@kiwFlFFqx5Cu_YpY z)x6_D1R~3T9$x&?9wCfF!WHk#d?R)Fgm~W*5@3SF%%Y*5UMYU)U@@zhq)w7c!nSu# z%5L*|Z`c(IJXM#6^%&a#_U^Rl=;hunp4B%LZ)&1IbKGPt$V4Q}ec|ZarUf$+p0sZc zZ@y!Kq&cQg!AbL;0zn^xs?AjJf$+%NnJ$-k-#$^`2hrd1Za#bKAjda$m}B&j zcA3j;Z~An8jYijZivY&ZsxPgLz8`A)usGBKiN9NHNqnzX71tD?tyxpk{BHfrH7y+} z)_$u+IX;F!E|JEU_t(d|>|(X1&fCM(dN=HU8QpPYc2A z%y4!-46IBJb6P_6*aV-x-hi~;fwa7Mq)DxKev)15XS8~;kNqm9eyLI{{24xcnum@X zr%U)akQzm{bZC^XTW4UBQQWwGH2g3r+TYVCK!O=?E3R4OaZB^{st(*A1X&6lUH>#I z9rl-&ODuG+0?YPWHT65d1)jFFXWeSJ0_nL;c&bm}t}qvHY`} ztnw+)Eas|0%3ZI;bN@NKnDg27;6g3(d#0ZkLp_N+?!_?rnnSI3!B=$S-n;X)@HtA6 z1*rk%?0o;+mgpdMv^zrDQ`Ii#<`j-xo6G-8&9J&Np!VoMf|VXKy~d-treCI|NXF^4 znrq+u&h}~7KQ`*>+fWvB%1lpb9D3Kr@^HJ7C$}-Wh#pO8nJl2nMTW&9!%|epIC(KK z_Kihu<<=-loM{7lH>m1Cw zmd>L*D#dw&bt0f*PN>VPi`TR8ueS;r_d1{UDSTA5aj#G+Sb@tNn?py__PxK|MKg;kQoShH}rkf)SGc z9koXFjuuu#EF#b4fgRsG)wRDl-PTozJeF`Dkw@|B5Sim65`+}tEogREB*qG-+A8(v zR;AcnAEBE}`8JKA{I&%??!-TYzq1Mar2>V<=v6{pwXMz_%#RPS>uiry4hDIX^OB8_ zEmUQ9O*Rofh@qP>_j~~QHXV*WU;p!0Ca*LNv*~&=L~yD&NPBKEuli$xjpqmWaCVn4 z+G4ivn5*q$HXh$lZ z`&K4koeNl%33$#0Je3J}#03;dSzwJC?{NVOGAWwV%7eey^C|Q9Rg{aUI_R|db4yA_ysEF=e33zCFzpi(^5sEfq5;h?@X>42<^)=B9ASY|A!qNs68v?zv~B72 zi`2m|D4XYCpyd;4BGhE_w_+E`z4+xN19#>1;WmjP2>Fl1^Ez;Mpyg@zdIF)pcCUkY z{fQ4ih1%mQyNYezjzG%{KQF1i?dRo;WXsq5%%tE%s67aXNl-_}CxHTbYg*vTtqr{b zv6G0>v$vn5RBf?IO8JFzlW?69Yy%&9zQB`~6bsa+0#)oo(#|jug9X4w4Ca?PLiu~l znQk6K4uu)IlL&2g&~AMPrB3m{&xUq3>({J}e z`o~e2X@u_+5FLhOI#>bUaRJ|6NeZiLyTS$B^?L%C|2d!S0!C+2jC28mGXW>NfUHcw zu`ZxG10&l7lw|^TePrvg@F_~^O(}MLvC{=U_z;1jDzm`_#4-UZT)^y1z@skUTbY0# zxqxscV4({*Clk=%0xpzF)wcLr0uquho`08-eKxZDArqtj>E_2;dfgx2rR}-bA}A1m zDb~Eq+ufPB8~ryh{`eylXHDn|kCo)e9=0a`DR%82^j%^!-N{xXQu*7PnFHiM zo;frXVE)-@_m}yS!;UUoVSk_FSGHWa5Ai~!hDt$f(L1~!_H0%@f1nkKtZ?6qaaqyApU)(j zom)-y-*iDZ_Hz#$fvI-s3hh74V5B$|k{18AALf5(Cpv9h6O`61TP=Ff{yI0XQ|$W; zxwdSSL-7pT%)E5jU%$xOjmf{IRTHo{6nzZ(FDuI7!K2yf$YXw)qzbBkAOvvt>VI3@ z{Y4MO7%4~yU-B^lzEHQ=z9UehnL3Iku*HAHhFftUHxhY&UQt$kQi37E6Y{sc%6ncO zXq|M{Fo3coIlrdJ+@po^8D3O7Pb@xF zjY?DVxz*t6=Vxtu?O9bp9c}AS-L($5?ACKu6f!XHFqcbi;{hIIwy4pF)6 zIsRqkzdP1up^@}YDzt2I5UKtom0p|%Y4;%;#(R;DV;X{?<=^}E_h!ue{+{k&*G zpNs7~hYR6Qr*NJRR+oL7yse6ytWY@oRi>zEe3>P^FTpmH0TZj`Xfntm=?!2b3Tj$N4MsRb#{^WO%gcGUM>bUX?`9}!2c4qe?@ zjbwiqoDAr`pN)F$1LSLcT*HUuFMM`vr0BU7fo12F2b(%h=U^G1r#k-e#?3)5eg(9@ zb>=B-X<71l(>kc_V7q5O4ro(HaW_(Qm2`YNlK+;PN{)Ga``iPzxZRMPnZawKlS5e5 zhk4+?yRr%4wJ7<1=T1wPrF<8z-TCU~&sXSDfBuAMMC^26Ik;Lugti{`adVfHC+smC zm^W2gGVZTIS$PCj5ZPC-TaS5M zrG|Qqxs2|MNWHQ+=X|+l?P&MfOdcAjJdWTt(XEwWT%aS|icBMTVk70+bDFL%!lX3qY!YIR`QIvXMSbEIMFllOUew)&GPK5p#=lm4|k;ppz>Y$pK++Pu<^HdyFcb~`XoDamjW+r&%&#~ffWJl}P zvVQh4I2!e&@LD|%OY#f5TnJnoFqtA@{er`u&bHe*FrxKw=dloUEUg04ozC`#S39ax-;D$BXs#nds9yFz| z^V0WzQgOE&o_7qKZxC^21INQ1b!mK?LA1%@54H6XXvnp%i4y$wO=_zA+jL~e`T{q< z%pppC5K_G+Fp;O0(eQ78J@MmF0ThHJ75nmTqw3yr=2WPgFp2DaWnyE*n-vt z>=oP;T*&uD?bSW?pqt{TVOuelg(z<(cyUhN8{S+@o~khZ@wz_kl#v@Nafco?EdCy;95mb{(Xe|ny0v+ zP}}H`nBL;!Iy_Lo&Oy3ngIvwLSl=F|&O$hv;j@y1Bpx+$C^dWFF$r_icBt=$Lk7C* zpFec=&uDMunb&@M_L(;}+@Klz%hOm3o_&LacE2QP(a>!HgCnM`k&Yv5>eLDk5>LS zgZ^U|W$R}{f2Rq??HCM^O%7Ewejn%wKaA&o;~)%bpyIzvyn46Tr!V5oaUBOa|K=d| z)cHW2M0N28*ex>4{%s4n`g{sGNkE3DftWE4{&6=DRi>yuL@n=~$v;T&mmLJiW(VY9 z9VF|7{{ZlrQ3jh!UG#UC18A%OwdME~HQRdFHe~&boGhQS%p*k61oX45W+jp4t14iI zgD|$UfFSlUz=!|5M&Fhn(zjxQu7BeI&G0`bVA@G;F2Wm_F1Kz-SkbpJOU;{D9e6J1 zl5oZ9*|l!GjS)l6QF z?9m}*#Re=%=Uy3jZse6-#iz`~&~^c~Sm>=sGSP3DH;7hOUwKf?J}2F5=qpsQtA15; zFE2iRl6kVyHMLaDDv(%8qbV%)3mV78?tmjP zSHFK}&rZ)BYnztS(>R-6EWrg=&kNC{E*@=JY>I10CkAmDSBK!C>ETOGKC7y$e@`a! zwto>aS|^!y+o#OFoG%1#t@Yf1(>f_(o*;ZVz%-wAvq?0C-CB^GmZ`1Q$J6<8OSEqx zLfE=;{}*tY;SmGQ_fQ(4uLvv}O)TD+sNLpw!tuW6*T$n+SqD4hcE4@k1>s?M-+!I( z{voZYvPdiwj8btLtToig>c!0^nsPn=prbmOt##j^f;E+0j7KWxO@*D`j9&=acZs=$ zP0emh$&10WV(zS@y1G#-BU=vJtG1lLGFOn?Ha;kPut&_|(yjFo_G(6K!Qdd3TZ?uu zTh)!D)@0UrHH3=);@Ih(`+N9@3^XrMWc;%1n&@9@WAm^}cutT)E7BL+g|jz?R&-u! zhcLV=wC8OuwPQvMJn<63A=($4N2`O#TW}w!x$ihjzb^+O?F394AMHDNT6MH!T&AY3 zX;e4e47Qn*I7-5o$(nD2q5A$8$8IRdtBt;C{soR|qnKqJxTw9lKs+idIh2&x54;>$ zbQSPva;o>V3!^0yYvW(duB~|e*2?jL=SnUMRs1Os89@TJ#%a1X^L}X!S8Ahwp?=9n zm|?Aetkl<&Z|2J6>x6-ij#NGXProIkvt?AXmJxj6g(RD3fsQ9tP4w@AOKZ=gvJQAF zl_TGI6Kh6vB$Bx}HQ#y31H)lSc`~yMS&kov^*(>4b8<oO^~eA1t@Sm5=LUpoS=>jaqwUwauMt$bz81^;rS+Q}u6X^n z-c`*xCCPixK~>QtS~KDwc776lv^;^%vo>~mNo~aq zC3&+W$wIzq(-KSUSS;6{8S*bR3A7XdNWO2ilCO>Ku8rTR2Fb(kgM@HlNrH!N%Rq+@ zIV;dSr>3{J(w{uq^uS4cOY6Mhi!Ya*G%HatcNsU@x|w!vYEp<7SY{KfV_n3hY?Ooi zMtCDLNjP2y#(r7SL;>O01bw#yY+YpWhi@f$=Db1lh zXt$)Rm3Gj+f2f)#huDj04}vpM$~AS^ zE7gZ0mH+vc+H#uI56`%C7=;zoMz6P}*Tx_xKDg}UyHx3VmfV~h1|&bF02I@I2zPyG>N2`suUH6YYpr7CeXOI4kV3(*1V>xWmZ ztr`ii=e{ZA?Wm1SEHZsvb9skiF3U@#Rz)g*WaCwsK$`XJMYBNC=-gzXHYr$t8U?mg z8fNE8$5zuk)^Q`5;)fg;su}TasQo34ujK7yhrojZW7>}r&K#fVWZ7w$Tsx!0lFZWl zJ3Yb4FbT~&PL4)dyGb#oCrKQJ6ACk4^b>AJ3P)c_*EAHxAZu?pnyQVyO}=ZD?*@ch z@v9>A#F}_6sjX-aL~i3NjOf`IYI{HDl6cM-oUCyPS!_}%`KF9Q&&-{kDHyLbdyUDv zV0M?pa>j(IW@D}NIk=Bvgj1D9*aFscLz}1&#xWdyLG#DUmij9rm8X3}eQ|CrULvzC zp8JPlS29>HV<68d2*oaC^j=nk>6^leWdg?&fz|azZFF^Q^h%Qcpa4}%Bl2Am^8&i~ z)vE=zv=&(Ax}>FO;4!%C)Xl08T;sAL@g*yov|pHKYZq;-qgM*_p41XowG2lpThicu zP+(55;KqnrYGaM?iaCI5RCT+68*4$-M(eyZ7fa3n+%)8ipciPlmiI{InHK5^R0=3> zn)$}n)724x2Wn`OmprFCA}t1g#%YU=r5(2n2d9hCnUEGAz9dZaR80XrNH z_v_|x2xIv|90t=kOwAJlCt&}Ph6Mt5ysvhq5eT#TLIjRZBQSNA+6VqdHr z3wHo`)6`g)FtR$;EsZ^^vdb@Q6b5SoQ|P$j}-mk;;b!5B?Qs=0G2c z^g8_Wyl49(`BiCfG3))NU`z>D;0xfUwXs_{{MJ!_VWe{H*M+Q8La}c$+r4Qf(J<_n zG$2CS3BeABk#;pBY%CB!_l2))8Ac3iZfYY z(Vb8%kyTB%j?AhbP7SCy=E@lsh^9nV@KLv71@)W!c$vUA+e)|qj4=~h(m7q zm##HO?-7E@m0lDJ_s>I`sz*^0c;b^#&w5s@Y_u%l3I=flO*9Gqb9JIKa^|-mVJ3E{jw|ll0~D?A^$X2 zO!sb^QmZ*76p%XMlF0*!)H$=C3Avig*IpA>PX`ie276 zkL41(G^||Lhk8n91j`$)C3}LBEd{gBV*d7+2sM2xf?GlPkuRI^mWtD5PAr$%c9ciO zL`%h0ay2`v4TQHzjr zL9NaPXKUIjQ~Z#MH)dT1DdgM~s#rIx3e^Nn zNNe6Q_7Alj*jRWTwPoqfMMIEu>S)X7cbH)eLjUzRUO6gjj^T-NL`#&O_H~mv!1zKj zr=VTDvRh`1eJT~}!<~FoN8d7AZMuVCa<0YXc@u@nbu=o3Q0S{40!y#>n5x8o&=G3; z_<~E~=bc*{zpW#*nc5wgT|Ex%;w@-UXMJT_w7%r*w01F6@z21*fy#$+<0q>ACe`K| zTcCZtl2?ux)Y%Z`upOqxzP?5M#_+~gq5_|^f!j?fPjhlQe5;v6Q?Vc?Q0@PGWn(oK z(B=!nBK~fes%U~zJ3vPCwphHuaoN{GW~!& zGf~HmEjJAxFo+`7fzNl515@jyd)D9oGXJQ~{HGq4Kd^8q-H_2=M;c4B>e=+V%HO6n z%h}aDf&$N)H&meoUZ<9h_F|fgIA!m#9bwlyY?NFrqD4$$Z;zb_!L;{n^O@t{-*(`S zhXRjS!*|k?3JjWoRJaqNN&KyM*-EwTAMV#3oH_j29V0hCJdfPxe9ALHb zw$2@Hew`yTM|sz+IshE*B4b~eU2@Q#0MT=b+s8RJ9MApHL)yC<0KP6)Kd|Bntb9Lf z)|DP|X)P1$&AC|przV(>*-JcPMW3es7xR^VsP zss{c8fURXl;pn(xZAg@IbSIv>Ig`q73WhU-*{q&y z>84J`CL2#?^VfE+>R87vF1zF4(H^^^t|juu^fO_L0f@BCJxADL>A?O;=2A@~7-cjm zI(`MaZMj3Q=l*JF7d>0JU7ACKpwoU@oO3lde% zY@s^P7O08kh2sOx;+E(@^Ixepb)BTTPLUG0NVG#Q%WjIi8djy|x5I=1}0V1bNF|wEYrr9b)NTH064wRQb&yNKTpA@o%laCcX8KBM|YkGRyj= zc<~9e_hoZtv%^}k2!|<_{c}f-qOVElkxNyx^3>Nd1t6cE1pLUFAe!B-ztnV!7g?Qa zCR?>R_Q8=`%Cj5Zmcc}1g~al#hF25x=;UemEIfNTob4rKY>`3zz$1~sJ1z2V9$no4 zgV~M08XKW=DiZ3w*i9_)W|8P7zGoHlM4=+r<^8xZKt-hnXdYY~*|^F8hYTn=x-KLa~i^{OIeP!k!J?jOTvM)JC3psdd)H z$sC#-sq|F2`hfYxHZ3yPwc`Z0t}E@sCH2uNxZijvql&7GA04S2WD^&ddYhPYD-&6s z>XP9q8149iNag+sf>vNI%OsFSNC{}%73jNn_zBLk326M+)N&F`L#ZBe2&T#y}tGKA3zCXWt4Z|3WTA4)|OewSm`apihC_c5^HGzTpr{ZE}uOY)< zJRR*2{KX7fo*u7`or#gleNC}>`}bYtCd)UPwDOG*X#O1-(}-nu9*sQcUyi+L}4R%~K< z^a=*;LQ4p|1FF?eH!uSU3bv3ujeuV$I)Ov0 z*cG1n3#hXuWu?0RC*yy_?L2elYyFoi=tuJefKFk7T@qD{^CojBUO zmq}e@2OTZr3879D^J4r~+40NM3i6f>xBIJp#C;3V?<*@ASR$V&1h6|8xuqbh{>wrJ zr#5c_v7goFG4?8EmfuX5zHELYX2ACD%XWS}K=-DeQLU6?g2qF`NsRyTLL!ZySzxwr zc74ue1{%)Ea%7oE<$R^E_?ek!exFH_XOrk2p-AO7(m?9+%nxk}?(TM*cu8)Aw}Lp- zLG8`6Pj?+G$-k$Eh@0OAQ%Qe*14$ELc$bMxp{N5js%NQr)qYcT`HS*WIF*Q0mih_i zrxVz{4idl@oLx#h*V7pu*{hmC&v)ZL=K80)A~KOAy32Acz3j?7kBDDTXYtE$d!X9k zx87Dp_!S=cKMcRZyYNdzEq zj8YQO1yqv{N+1(v<*OFdo|$P-Wj-hu{eWP-_8LFCm9RS`RYsLsY$45Xke*FLvixJ` zUtKOGF&7J1RKR|DI54G1TP`Kc$qv|!X<+6qA5fD39VrfZ^WWPaXi zn|DSA&P5guM+{v4=U*rPXCTS+I~>Ri0hy67_c|aS-;~Btt`B5}nWOy6lz+1lb;D1n zQTeAQ%oQ&GvP}M$sJ|HWbTdZzXDk1mhvknxXi>s)Dq;FN5I@L(Sm1-0V)o*}(R@W9 zE;_Qd71n@{QPyMQTd-y z{*6l19R;vb3}q7LGME3A8EF)*qTxb;XGSakEahK%czy&nq%+#@^52`uzrfEQG<&y` z^()GM@!|PBg$x@<$)_NvJ4cHgP~66wFS8u;X)#52naGB`_a?0dv&hV4n2B6eLX4fjK)3#^PTs zDKIw*#BT&*jS_XiMBurodlOK{-V8W;lS{_?#?gvk!;%2V0>f zHaYjly<(g8WCq%`U7>9gk2qF<&gcdxm=}1iNk@sqYgKN-JnjJ9m;p4XE1;zUv>xo3 zca<)E{jxM0`2Tp!=lsc2I(@#l`Lm0CZm|-V%Rs@4J*_gm7$@a^?79i{E2;-~ishXb z#J_O_Qca(Ib)8^a-5+9H>@J%zvTCoEAPH#!ix9OD(&TA2`eO$+WIyH$atf_(Zof_# zL~+xoEwfXbD>+NVR%9;xjo*^=>ZmBmwJ1jv6MU(wj+0$St<61lG)KmoD*N!@sB?2G z>-(ddD)*nG&pss4>E}ART}vI+(Q5lQvbQP_xe@UV{b-Q$0pSAfFFWrw_MzWEhnbU@ zxeavTc1G)uc;S~X36YR1dr(|>NWJ(_w7;VfqvH%S6aOi@MbgYcj)MXBpNq*59k7;F z?TL}SJ#HSTNKXzv@VkJQ|9Iuj0KP5Or@q}(IdRlDlp_5jdxtgPFsgDD5mwQa3c2M^ zyz&WxVgt6}fT!2295R(RRSs3#8hSTX7TQJ*B(CR7VC2^yy!V`SeK?+b)CD1~=kA*b#Rnv+0>5pmUeqUbyxELPQ@>eX zQnTWfL#YpqEaH)TT=H@}Kg=qkJ!d`$C1%JA$OdL$XTFb)A>{(4wEYm>w1TxP{vX$~ zZITiBy1j^gXIJ>WoEOW#;d~rdtb99vW?;FTL*O4}C`QW}hvPQToPuOT3HT&JKkx{u zuNB>3cKvYU<4r*MWfV6pe~PcH286&m#>riq_z=EMYVOgra@|RM)%Q=}ESHzS%1`>r z=ic3`a2mXYOYXLCoMo0449q%ql%eQ}J#FbccKd_mNN}$u%Zg9UyKBW@f~tBYW8ERS$& z8S^WDcvJ>$Bs9|3Hg$Y<4V65))NYmB@#GEfWJ9 zr7Q;%5-9l?5+!EXs>7E191TJN6lgw91Cln$KOMJ%G_5#61QlpGD6rOop0j9gw;htd z%YZDm??EA_4jVA^zl=^k8cmFPf^>S94Sz3oCAhn^&WqQpSx>9lx*?D#_UcaY=HFKE zWzI6%t5zG$u0oYgoB(AEGyDdcEhu6%Q0r{tst>K43~Nq-Jh-2HJY@zc+uuqlrGsI7 zteyygaJ&M&1bHda3j)Mq)r)SN&K=_jm63ge8ZK1Sq!@%Sf1hIOkB;m+*l@J_&>gY8 z?11O~FtkS`o#MqTzfB}enUHINp`VHDJHBB+q;l67vB+GIZ_j~IkQ8wzdU$mPc$R5k z)3V#nkm|ua5l7!{CRw~7rKz*fuj0t7=Fs%6K=<2q{G~@-Y*eq2x?iRKjMyyNbkMdb zU-wrYZ0PGgor7;{xT&oY-TTc=GVq+{vqD*mI2mQhoa1Zw!r*FY?p1}2alC}4eAe*3 zLOE3*AMzNXH&e^D7mH~bV{hMga2EB?H3vFUPZ7FOp{C^}pCkG8<5rkyUy(C|`mZnz zynnqlPSB<;G+u12AG8}2&;1>+gp}eHkQpQ374raqsapBfM?RtH!=I8~cxZ$+0(1sT zTuYWSG}oX}JL~3SWF#~@k0wXfOu2fsrEoV1VFT#;$%`Y;+L3OizIkYmF%$wT-^vaw z*s7}0fy_gw-tmAGSoD$&(&kC_4r@*DECGyEc5^g>n-opwhP3%<2TTl>bZMR!9Vk6@ zXXvF6GCHD6s!NOb=GbXE*IgD;bYgL)eBgf_kdx~?soMQl1PW@hQCg5p*!;E!#mwx& z{!&+o=tV_rY!GM>;#woZ^kM_k{$sp~{((i>8S*MF%L^>rqPG}a`82N1V)}M`fEOf7oM&0J_8PN?pmbu@1? zObKT&QvLO+Nx(9iMso*&=G0^4U&f&{eSWPjts01Y$o}_ihcyU|tx@3%+r->w?x?|} z3GV~LrBW%bjr9u0j+vII#WBD!wdntAE2^-EySp`&uYDSA*7)+tpoW`k5Y29&SNz*3 z8v3|fDL8(Ti0nVuQ06|B+rqBCeQ7nMVDs0&-~uGFpnExsZ@}Si(z4>%0yp_ukyMlK zdb5G!P_#}*UFqb}GRinJy&2EIn;zMl+fc<3)N9Ihf0btbugI|->UPF8&E41W8r2;L z>ZV(>6q#r>K~~mu<4k*g64>~cZa4=hB|s63)8q;;y0>HV|0?gWK=Vtsh4?o-zF`D= zGiOW8D;1(n)`4?X#kSv!!Bq3Gx**lgIu@VM@xCG0RbwtzKi&W&WUHy#ynTzYJ`E|4nQ_7;2&+dQYxz? zRcVC70@qMwM)ksasT_xi=6d#b%|hN%knH?c>R`6_%m}9|6p%J9#8h_uh|kOlDrP4h z^F#_-q%|x;vI3EXB<;veovKMVKgVMnoR*)@gFDd)iw)V#Z`tOGmv6n)ENivP=SA1B z7|&CY!?7=R^nHM+^xYEQXIr8hdm|z^Amb;%>=& zKHvz(o@#Qv8@+!!=`9UijE`k~T06hhj*>E|PfoI}>n5C6!Uu4%Old)qV zdQm2NgC8Aq^tF@95`Xfy$=+MpAM@i!`|%nNS3rd3CKcq@vuSye1dnNn`f-^RPDNhB z`CepsE8$u7Bh5R1w1Cgc=e)UuXfqMO=JYN=Xsi;;7fk0OX%aNm7}=jw-^Z38*`L=i zhk4|mr)U`Yy&9XG*W5FaQ2QA2f#xJoyja9xMRq6AtsEfS^Ql+1)r%Y`n3?;0fl@$h z#b$!5)-4Iz%hhgKW+ezR_b3#ck=3r4Q2D_yu0el4h!}GPooH_I(@cVxwLpMxag$45 zOEcx>(?5{pBilL_q~=}FX7NA9=8|-bjW8t?i>&LUW8ztykpIm-oI{T6FPQne)N$r< zfq5S=rUx1S4`=TJUsZMVex zTb|~jamD}gSNL&VkcbIlB-EXck{Co9DCfWisY-UO{1I6zA zHNf{4gRfiav%RSGfs{x5hM&lwl+69{#7sx;ovVU_K5VJ7O#mLo)u8Oil-^nHEAH9X z0h&gd8?Cc(BbCH6ssE1b|GM|(bk&#rBU(T)ljQ=@1^h+xY%(HdA#lU;)A#-tNy~gCWBO-k#R-{8+)|Z)nMraVk}3TZw4iWhkk!Nq zk%1e%e&lF#se5EmWiEZ3H`amjZa64S?AmBJwXE+|H>y{I9^uo0 zXvgkN+eGwJ7iG}yxt$rbTgW%c-{mLk`b?ef+o~}!XwB_aCOFcHvM3dI^6`oSx;7@E%#S8-IUOZZ~8_WJkh8zB`l=HkM56{NGL{;$CX$#yV0QZ_OARH2zsrGh?^$^j~IkRIG3+^xEv-pj#vB+I=@< zfcfrcELpxTJ^>^gB>-P2rgjQt`TFWRAax;MnZNtMO?AXg4*QT!bmLPV{%1q4!afv} z7k!16CH%a=&HZ1iv5%;VS>oS?t^=mAaW>fH-v5FYzjk6~F>EB={amHU6`*Bh%Yiec zMO1;Vi%q%D`%14_LZv1objkAxT6#0$u3;@7pRzpAT#7OK_CTJ<+s z6uR|~Tc3x^$Tdi?`66Wu1>8fTbiWjo=v^WB9rCB?wd9pd?*@c<5$`H_ovQ-NDBw2x zTA%qEBP}JTPhSdO+)r9?@7&&Pw#8lxQgpMNnsKmTE`ddz<~>xDwK5}WbHvf||`&?wwOHoLQG0yPO0W#{?Ha4Q~#{W zsz{vO&UT&kjrjU2`q5Z+$p{7$X_BcDEl;E=!Gm-{>}fL^gLnGQ7$nn{*MZU(vn7y$ zppK{nc_<2ED_2vHqqdDJ&1leYSmR2Q)wyO)S}mDEV*9em86Q(5xOeTr+@y8;LCT=x z3-u^`s8q_QV<60%d1$vh`Z_`r1tmXzx?xF)`w@ZTItw4zW*eI39+a$GeVJlCLEhsn z1Ap0(T0%k(+MNK32xaWBjYKGmnw`h5+xX0W4f^qQE4=CGgBDKqUbsh>dc0()mPFh_ z^+Wh^IZ@R1o)fgD$Dz6zg6f9%J-O@w`pjfC-dWhO0i$D_2XzXZf~QdWAmiDyKYBBs zVr@@0nZCu{gjec8jEnTt)_1;o>Fji}P?)1Yf4mi|;ag#PWRWl_97&1UZvbt+$?kGN zXNTUUfY+WK8k*R3)#?>!?K1@`3fA2s z6CCnenu|Rwu2@BFQyl0%X8My}jhh0%K}I;DOyilq+iA1kXk7Fxj)FDoqI zp<#7n*%9{e#I7~s5%mw_pe&pM$KDl=>1L%a9E&FE?<`Et>4^M(U!14(!Y@-A?G-ixQx{auD`{MAKqsK2G3DB+ST3iu zgfw3)ek1k;}$un#ZG2cW5BsHze{9c-QqZeAi!tAPBPaZ$c1ewB?@?-5&XI6TL1he(w zXYj+%RoiXmUh``wgOY!j1tLFN zH=}_2Z6m)~7hlV%Rh_@`cW1qn9@bS&h7MCxOJdMK$`k8zIF%*`b-;JKU4o!%xBim; zl0tZv_)^J1e<920E#YMbxLx$K{OSLNHpfYFO&?%y?1z10cOPz~xAR`e&%Y)~2aLM4 zO@ZZ#p)YB{z3_d48HP?1KYcJ%BD#V_UYtoid?1<`eJjksmdet*3IW^5q2Jd5fpX$A z5Fon6z0?f7+uCz#?9I=Q&Z~!Y5J-3X%=3Z-I3=YHr?`Oct~Vo%DPf(QnfRyJ?bho$0C4 zo!jI)22odngiWv0{i#ishwoj$C4?`jfEIwzpYIT`zJPz!Smen4`N__AVSf1Xo*{W+(# zpddW|;;%K1B&*1i8mf%(?P*LJ+f=z@iNvl`*6G5$#ZuyAiX z+mhJ?JD=N+Ycu->3p*B)5{XIMg*3YAjB~Tb6F9pcAE_ecH~8V8a=LHzDh<`=e@%nc#i8-P5Qe4;45=wF zuW0i8PW@1{d3~fA_z(pANzPM4C3aUc>093lw!Wz=OSit>36MCIXQsP6n!EyV(CEUw z9voi>q|xLF&yThtjW|9$zg->M3slbZiIaeppmJsU%4l+_he{f#?DbIT<8%EAKRqC- zD#|f=t9+aF`h-Yl`4N=YNQqD1b^vHXKrpK6t?6KE8Xz#Bn$qnaC?LUW+!ERiDCgSv zALinEjB5fy~BTCk$ex$l{{W5UYuCWJ`!zZyIXRJw#vF&O0XQRzzCX$lkFFxDdUe z8#;;C0I+8`m0uO#jIThX`2&U$C1BX%w>2i3suRU7H_+-9$YL(qfcu;yb~M(rqj8~S%uT_^)fHr}9{+)%i&h&zmf9O>!0mA1uNXzwJ`JNHn5<$)EQ*I4%2 zVPZwb=ca_Lh|at!hXNIiCi+#!pRF0y8tpp?wz7$OxKPgxnBiFz-B5Fx4%N9kLjPau zU%65li#&xOmY;l3C|>pD#nAZvjr%%QRMLR)|0^EI&RU^4bT{Zp-`)9o65d=xd_$fI z1?3Y?4PPvOMfa4U;fqSSFWAd!UuMrwEC7gaV^Fu0P(L0fTfz5vfra^kt>KF`_UG;? zzYJfj%u0LN&b+5SWvd-cF4Qe!)vfL4K+=d|o0C_QYz#m3iK5o$^!!ml>2nJRe_Aes z#(eHugs!Ltoq*n64Q9okOaBJ2J@vkUt=}TRwq^c7SiB68#qNjm4&aQ&=j9_(ocg4_ zx6M%~|IYe)$QujA0dc}>Yv>q$PiBFmyBqrf{iBJz1ku+_E?RCFd@h{Wh6#%-DuLA#M?u5ILzs&?O z5gU_Q=eT)+d1>tm;XxG*fl!?qk|GF)?)82S-rCS=i8H|PWrU@Y=$ zWLjz|zxAf;ynMoSBV7B|Mm?gS1q7uj*4$P_maX;k7i$LkY^ZLz zM#};D4W(Xt&dhVdy4M}iv+kFl&;+2&4A!4ptU&|q@&9$c_pf(je^06@jXZpVrI0^C zTJRmm3%Q5s0*+((<|f>tso1$ffMWe9y+zZV#{l!)ZF9oqWPveczwT{Ty5wZ!6h2StJg`rF4fV10GI$sQ~012WTq+KnR!R&Ckh>QSWgCXyiUiVz9you|9#PbY} z@%s;(4v74whL<|Mm^P>rO|yU012T^h$VWBi8Dvs~?U%a9kH23Revai@kY!stMGOy$ z?Z8L<4S+(e0+icLomx-|d6OLZ@=zdx=PLbXjQ8hT*K8w}cs$>_28{*)8{9*G)o8Tb z8LZ+zl=4-yqqYlN8YEbc?wV5hoJf8`^1m;nv{9R^usRgNZuUww&9x=URpR<7W|;9` z0G2Np1ws7ILp{K>N_YtY#$K`$V4Lpk0kDNn_5j#H^=shIGhO&I*5Cv>oTwhiQI}JP1$AJuG?edgoQ^bKPcngan%6~|FXAy)wt1ka z#|gAH$E4?({o}2p+fw5}Ly6TJG5rsMt&aY*C4C8|?AbZhrner7K^i^cuI<6G8zqlP z7EF%3f$+O-=1a)Xf}g3T!feMDO{`=1g$rwG6x zHC`voPBQmh>>!*k_49+eq5b$sY^m^H7mp+dZ6!HKjK~hMH+cD_jSvc}6=qPbTK{;= zb1(1>+F)QN2-stcH+Iq@xw z2NR(V_RH}HaZ=VeF(&BW%}A5SYjB6%ot@ROcC#xJ-I@If2VXX++XybWWUkBtwpsNT zhLk!ITg@x0`IwMm4@DMcNb2^~7I(-F-4;_>bPV=C{9E<4(AL&e_ZuKXAGx55Z>-;M ztH#77zbj-C?kJvs$^2ge6VuWa&og%3cWZ`a9LWc7 z$cpaQ?zj_UMhhI8=Wr9TAv z%0 zlFT_u#lh^8U-6@@6)il5{$HU$;vsIo2q@&e2<{W|a6x%fKhEUs%R$@8MJdG6K1*nb zl15WHgP5j?S)HlLG%BHn z`mqn-D8u&Jzl_sMGWS=v04B3zPr$vWMWe|R$;o#+dW4ZlofIN=DB^hi-~WJZA$^9p z$k7&Z$BJa@3@${8U=&SM=SQavQP?gb8gfiBUO*Y56{mA*l2>zj;LkIU)b_lvMmJ8p z*EiaC8gWdQ6&0ZijOk3LFomlGD6Tli&s9a9{H!8*Wl={>_6HTm{$)aP#GW*6@3bZv zXl!~@P4>o#@u7Rt>$^T$>4}MCNZ$m)>%I{X^T5U2sEjCxzET1ce^WeW`t17*0yfpD2CW4@pa^_o$icD zTH{8d1l9lfp<(9}x-s>0nv@~;d!%MMm7b&5WNz{#(rwZ{Uh2~W_ia5Ta}&iRK{)W= z4wDM-F9z}Bckw5zzoE1KnX`LLtMO~$RiSMZ-Q(W{4Me%Dc_CLpx9#l_2NiM^U!vV# zKJz4<@ksDYV-TBDVETthQ?5~>TE&}XQ4Qwk?5-$srZP;Ow*_r9@AinU+W{I_|M zFV0dhapWqUked9EQtygFCE~g?92q9k6r~>Md$jb9a{4;^Z#?AlFssduidQEmG5kuY z`nJzpTpfQNnsLZ^&6+4O^JcB6PE5$J&i+$P{N$qaL)~cJFRtyr8d690qh|B9Lm=59ZEp7VR&ML@7aPVHr7h?b}M*hLMvK*-nH|1r9dO<<&buv}ll-O%k ztmy#ps<&1O)qd|ubRZbpd(v2vN-%!|e`<{^zRW1&1)RT|q^C|8aK1NH#+R<)c8)vq z;Q2=hGaK>`=y!{-Q{Fzd11>koSM;iO^rz_|rZ~eX0o_44rv+d)dz6*n1UJD)&I_k#2eJdVY)w40GfB;??RykHdST=FEjNEF%zcSA<`m>sNp>rRhC)-E57pxVe- zZQ#k}B#fu`JJc|Hxy$MOHsAX~(YSNzJ@9o)H>v+tn!Tyw!bwaQ0HAfAMO)?Wqi=P` zSu4W$|C9T*TR?A5!gVOk=3(J`P75(Mrw(!SzxXOsu9oFoJwuAymCT@~q8XzX7mGU7 zarSvW^Y^sGr)oA(qafhyeQM&Z)uVQbNS8?cjZPibTOCc@^T=@oflrP&IvW3p9;e3G^+}m*u($E(mW+P{#6xtb$vj|{w-{GQjb}mO-&_!k(`H|l3eh5w=2Mh-X<7w1-Q6|`aa#5fGVw%+L-Hg zp^)rNZZiN>G_EiMU;W_f#0nuT?$~b%MZ`$#E)?uTuguJ^xOD|mXO?16HlxJPY6-Io z^A>=49redX6PFf{nHFcK^;0+NZ=$brYO;4kPC9$*EiUi-<9f9 z{KhKIJwxbZqw$G(!NN7(%jlAPrIl2V+RSIjgyNBB-`&XIgCtkL2sS{xb9S*`aec+k zAju!sh)4yFr(OtOaD!u@|_2|u}sKc!gg$)bBH zp4IS@=KmATe?DtnJ8}BUv~EZfT~~sFzPZbF`^Ca%gzs8Z8`t&u%r0u&KI5bGHsq{7 z4a48`H0pCD-;)TofDv=QpG?`zSv2wWT7s-!QJ{$`-7V_o)(mlQJEnD~3#mg9Q!>PtU)>+LjpqFNfBDeP z_5T1}_8w#SA`y~$;Y}7QA=2~!d2|8VY8ngt2|^KsoqFYpw&t;%#%x^v1h4cE>ao*| z|3sAuua}7ASL8tD!KqQXR}{I5MNEXuvzgVt>SL%E_+(lIUCJ1UhvkiMtvf zSj75SHFbY?N|u}r79wEn;m;v2*IjrAn2ej8-!4(B#IGN&9$G|D*DMYH5p^%TJB}^` zlG}BHlA776J~+=;haQr}S^i~#BGv!o{Log3&=Pal!lT+9tqA5hl!lU8BwGTa^AgpT53Z`tUGa<8rtA^v}+ryilC-d(|O8 z-l+8N`Se(~@@--IgG!(1)4$a%eU+sHA2-@3<{U@m;ACd~gyjuvgY}Zkoj#l_&;zwU zmrw2zxz`*p@1`Ct9UEEv5Aud+7iqqka+=W9_IqJTP|C3vd53{{oA{R1a9D_ylHa+U zlBCAvG6rPTAG@y69$apJRkA;#(O~29$1LX{cgrD=gD{Kx#O~A09@I{=C1ojCcAq z7F)wQB$mvXU)_HdE__B53W{BNW-$#%7QG5wT#XEPxZpj_1Rl!=*6(dmYpk5p7 zd6pC|sTDr;wSo|-TydCcD7)0B?&?e(pbq`rH+FpmWlVYX__z3az5n`~r}(PTNxp4M z*!YSxzK9>+qi2zx8Q&_>-Q5&4O?$8z`51Y2S1{`3kUqUI<6ZG-Fk^S>NKI)n_myX; z;5Zu4`lVq$-7MSX5P|qaKC~p3XgxF4NWm>evLJ7whVD6;&o~YE#jp?VOV&XTTlZT( z+M5bV)oB*apN7d+c;XT(-2ZHnGwYuc(5;iXeWcD0Z_|;avS=87IpZhYEmNbN7z~Z| zpcj0``TpGeI|?CKa{gCc5GC~dbGWbc2EiZM7XE4Jz5>x7y5znHez?iLrnaAubEGvd z`F!{_*5$ewUyoAx0s25VClP$@Ycl*!@?nPG1^(Ii-4vdsNKjr=%=4_gJkNniuzWYT zyUTfJ57-=I+;%xOTl;UK0KzQ>DU~&1ily7^J{1gPA%mJp!sDLnB*uwh2;-uObMvAA z=mC57ZHaGa7PXsKKXgx#CRq2;see(FFiY%xTDh)UZM5g>U_9RumExx3x7t)FNzLjEE6tGw2u`<_of zUnD$_56n+nn69C@i9WqvRSQE%Ulpc5p!8FH`W%T+A^%z$rfc|auung}Tl;gvbb-UY zFFrv0v~KBFgy{m0d%>rlT}u5S{*DXN8}( zgRqaeRllZ4GB^4tRTgRtCr+a-@NK%bLQ@j~+Rbg)P%rut`9Le1XHv?=Zl>dtLEop6 zKBQDl-xgvf7iCN671r`iWm0EIyaf+m=S3SXr1fl7xJ~bg$+cQfn|OBLmXVDs3m(bz zXqx~-T~pjdxwmpC>j;uU_^z_VCacz+>Opvn2sIp5_^~uh->Iqx`}9{O{fIn~J~vEP zH{AQa{>sxy7l9@HiZI=}_5$hVf8~nQNx-|BT!J`9;6s6LIyfK6FE<&u&Oe(B+~}W; zCbaOZ(n{BIRv7`xe}A%Q4)3EeftEvmennC;_g~M`r6Tq5R!-OQ;Wh=NHK&#v`9OTq zOF5@7_@6z5f8_tstJh^^{U7?7S+%AU;3BfzAaSUIYz@+-p>kx7twGjhZ#oCnQ~XQv zKp@T;_dmQFAk7Rh`a26ZNJU%@2!wqBRB?*AF?ViH#?dcLUY>|Ue){{}_9lAt`XOZS ztWZBhn`4oh&gM(Vg@^((aK@$kNSkg*0f&M7{`qEd3oK%*qn6h;adaFRwl!d2|=2Hek{X9geB zkbfK`e_tpqOKYkR`{U9NXX|XN%47bi(KT`Yt^40(?jZ3Wvq9g=VQc39XLX(P??1dV zj}OM7ruz?f-N6U6=UMJjJ}`ewf_vyI;dEFS#|-@IyWl?+^%aMB<$S0+x)Jugb!&?I z@DHKsONQE;FHn85_8p>!T6{+j`#1noN8oX!t$1<_hjwNG2-(FUA?~A9UeTqjZ+}GA zM07x2OX_EIu!Zsb{$By~l{~aRAV^kZhx!Zb=QkgxCg61(>6dYF*!Rh64VW^B`_j^r z>0~nZdet#O-He&vB&@R_^j(0>?i7G;`ys08WNz+_=hFckioE&!)7z!MR?r6IVT5W$ z6GIL76#C5@Ohw`ENBFzMr^M)MVmD6DYIs+`Db)DNHS?^D=iI5PooYExc5X2P)5`tP zoQ#dNMXe-syx+nIUt?t>-vb4?jv+Cu{Jkm)j;!EE4nt^5 zzkq*2;_Nj|{i2D*%a0R3|Nd%za2k19uV@#d+3TX&&!T#q_cHoD)Tr^Da<%<1NVb?p zCoyu(n@IhoTZ71WE+IEeT_tqY`{>mz>A~xBN4zmUOP|(CTM=(Hrj7$Q0r`&l^w^I} zcPw}(KJv5I$M;HRw7zGJ4%fC;2C*j;k|C?HzJD;Sm5IvZ0NNJ?s%fj4-oE~eA*<29 zy%&ZEn|{1E2zmO^Wtw^qnJPaq1LHxH;GZRjINCZY{!#0`V_M%I$vr}??S17BOha?z z-vJ9+LY`2^sZBdLpST>hhl2+8=QBu)?HyWQ$loIy2p>4|obPf>SEN_zdkHY9c$8Qt zlOw-+87USc<8ORc|2d0$=;%+Gt}TY?BJ$Q+VsbJ1W$4Yi_Mr5m8K(*RrpRu}T5{_N z8`7Dx6m?4T4qDS?4`H|I^=1X31;OjMmZQ+rONr0Pt2Bz`+A6ulDv_Ct5N>!+PR>i5 zuKPibK}|`-6KS<$@3iYkMd`lCq+JRrwj445AhyO^Su6q%*rje=h8|P>nsmC7LlazK z#Prvzz+JHX7ur9VKzQN;amG;nR_KQF>Rz71pAUV`?|qq^`3Aj8Xw$08mA!i_DRrDy zri+jOC8e2|QOgQ@sKh6thVBMQ;J~T{oPIS{=W7xP03`nDTRo(+f43UvR`o2@VmH@I z8yAnIR}vZBwPAYT$JgeaLD~nAE|J4c2-C~M@%!|ML=H4($WLK9v;>VV>Rfj(S=?6a zv+n%{1J-qAAqZIit1j!L&H1$%+WdKBC6Dd0zdqoVcb6g*hRS;{Gu0NrKct${^)AAN zS{YL%s0gW@enXk0#h!u6orZk`WP*u(1Er@l*|kAwdqcnF(#57v3p!qua?5u39#OrD z${S?4UQN}z^HACQqCT(JN`YfzgOer~$J#rdB3D+Vavjr%acfItkvvFsJDcikoPSdG z>_Jkpt6xrS;cdaRHi9L~I&noFx2kO6PMaM46+Aakl4ed8$ZkigOD(rQ&o|t>>)|dQqS{Dl zFctANsWnOrzc=1=QkI75Q{@i9P%mVt{zFaTXMU*HGSs2Ju1Q{)U6nYzCi~A7u{|2< z8iu;1x?^L_v45^<{#&F;myK5?h89&ZS&NAJk0y#|6m|C)hgR6XxE!{msKY(;_i&C!LA)T88^YGMml%&YTBrT!08yxt6WToeF=Jk zCc;k!%6#F!4v3C!le^z*qd&!bK(5Xd_xHbuI*Y!v@l-wSPuh7jQVPN@`*-sxbb&>3 zFP}tajGPFN!8D6}GRM7zJ2rG}PL!o;dXWp|UWClvNG^9Z1dY@U14zx)hcT9_ZQKN( zbcSMYnDlj2SkT&n=HOqdFUj1ur6n<%@hLtzp2U8~mtKAdNlZ5VC&?}IotdV6r=aJW zzp}4G%yQZWQM$TtR1cr*NA&<%G%83?W@T2FE8}!G(AQLd1~nPEn`=#bb%7}2SRel< znfu16WHH^;l(2Wx-3t&gI{s!ZNzA?WN8`f8I`^n3+ocbD0 z!q=DtxU1%8?@7MT4~Bg%SD#nwB{LJ3)mfwOPoOrNi4B5LW+vJ^egATQQf(%FZK=$J zuRr8Z*Xj(w=cv}*8kV*O8F0Cq<6(a3F=Vmn_*Pg&E#nL8|AK~W6QcQbC-^>XktWVY z_|J<_W7)9WsBlD&gd>78bgyi2%!xtPGtB+*=;hwVf?&u`I^7 z;E3=QKfZB({F8F1N>k!~9p($|%fm@`moOpj2H)u5OpRfAI^JU9mM|tC`JuoquI|2P zllyT&Y9?oMdJ({6UkczHo<;qW4umYKgwDtWTZln$Q#UK%-QQE)m|&BGRu>SI3V7rP zNt2|_2+nI{+2kWL^4q6t$|KFU3X;iTEq{^NpWA=vxmj#d6OG=NWOe<}ptMD#Xm*+h z(Z5-5ru&8QX|+o$Q-B<<<-;GgFgR(+SnJt%4vfCuzH3`Nx0Gt*!_Ly*k!R}fpfl9a z!e=xDM4)8u6AJgktY*1E7uv*?AA`-Xj1TA!Cu{fp6*PXSoxMo$UOs)BnnD?Ps=z#l z{UK6e2V|=XSA(I|u{HUec+BS5pp5Cd`tVhDhVxJ7=w*~>flyH{8_@Z&bv2kbH%-DJ z(eICHN?Rk}Z_tQ3){}t)>dhUICUM!!Vly7e;n?hkNdTjvC`yS%<0wI8x-NP`;_N=v zrC**sOi_M0SvR9NJ%FT)e`@K6kwxa>g$rYl;11m6 z$6>tOEio_IBtzIw92rw=%ccSeUyot+qSrF@_FSfSD7FZn=D~S`*IuRCS0!EW8bDm z91q?_S;K|c?oEEdjc4QF#z;EtKAhBJB?+?&Buf>#v(8gzGCB}7f#5&_`-fCpr>NJ< z>hk;ZSrbCsF&Ix#ozs2T68p=jH7c4bRuZrB%}nymJ88vVbhD&;i`gZlOjVw(^sfG? zK(YHlRqvfNaHZ-2NN*jq{oU1J|7un7bai5mG|-yL?)|jq5KnscRtC;;O)atN)Nf=n zVEv-@SF7Z9=RHIZ)^+ndF~o3xs{A*DkZT)WZA^HoDl;7G|IPcYO*|Qdg`s>P@$tc4 zhhhV=LGKU#t^o-{QJLR}TO-a|dR0;4AUr2M9xHnu1u{twC zd8d@i!z4%@l^N^7<}b2HN|+D^bzKgbp*;aGNHP)_HdyEPbkg-6{vFv`AfoKu&=Fq| zL&sj>fza7#70MYWlt8t#@!Aoj#LWe%74r9wJyRzQnbvZ*>ND8hTlKD$;~;+Z`&F;? z!K#BIus(zfz(*uRgh7y+lKS940`BQII@An&3e8Qbg%8F*rCYl2M0xGn(-cw;PbhmrvJHA_>oKbsA(>Y&;+lzDGupXnZGN}p; z#rOZZF8N`s8VfWCdWRs$HuY0DRmVE+OePrb{D}lG&lv*pH8Bh}qzl^{`MDX#5ecVfgmj#!&a>K&?+r=4>=Qt(*4eh4{WTKQ`GMH7c-K9<0|}> zC^zRK;H1B#h2Gi!-Rl21>%VnfRnh-Kt!)AXX=kXBv0P}bx^(A^pAtgdyf>KyjB!{#Wwnt@|-T@QN>aGUE_PBquO+Ach{>y>%McM z$G!?t8_nsd%J@6(A;4`Evs#@5;!$b*!$vX+o=!$PRiG~yz(6m0L;M4M8LQ#(g+5CT zvo5G#IM~fU>ik3zw@y5FbH4R2TKZZfb|otzjX2mgqrb#E;{{Q<4eo$`ecj?4XwBtM zJ#g*>m_oM4$u^8$emc)v{d7+=$&v%c0qx z#9ckqXC;{!B+YyYV~`Niqm~#X z?-H780+{d~-Z;yKo*weI*q+Kr?0uC>p82AZo)~&b`kR;+e6*2w3A(dK z`u<4lNuTM&od=e`(RcpNq_WAf_`8~bF<%bl zmwn9Nzepz~lGgl>H=ca$t zgBEJ9kN{+a#4C$UAqHMsotjHXk1-jxn$HB9&YgZbKYxX0aHpTn((uJ5dSLis5JNt2 z!}WoX+j2P>#4z1}@tJL&*%z)ronY%PHM+NXR`2kvZ>v8xvMjH0_bClSf(}^k4(U9J zZy0-%gTR}ND;z5M4HFwm?R`P%j+;^ao}FKrJbzO~V|)MECDqIC^Z$;Dmad!4-GpP7 zRU=JoetSal>`A6$Dcv=*)#~W_b4?3Pq90ia0oA_+n9FCMqHgew!RTKj-)5n7RpUnV zNe)omuL4`LT1?6MfA|kX7Inj4n~&ly`GELfO)|@)Me5s;oV=-VPyfiGKk~ujPvh?K zk>-bZMWXBzx$UQ6&VA%G{3QFV?=eA5Fp{)-z18^s;H#ljJ$=V_?m143tSPfU+HpP6iG(+!MJ-qrKM z*www|#(wMb5>fWwX4Jg4zCA!(n^WV8;t*T=FUc?3|I^mjRQ@vIY`*NYmx-CIU#&TV za(Rm_e&VMRL1uffLZA7!K>g!i7MA?L`ld65fBqBb8J4CvEIYx1gz zq7WoXgLqvYjygKY#+mf>0saLMHv>a^b)1t+T(r&wYsgJO5a+kuwPWiBJtNK5#aP*C zf2_h^2LJl|&4DTPUB;)m3EZiSPulJ}jU~Y?amg{X{G+Vr;UI$eMZnWKcTsVyEN2}+ zX&8{vN~8*wi zIzOViKxZ?m^)vx&yTl{12M^mN%ggYrecr7MFj=iSLKCbq*J^LIQy+N&12Se6Oe%V5 z4^yVP9IFw55~$itW`M{nPHR1a&YjYKOT<`4ReAY zuY2=Ip5CuQ2_G;8NDrC*CITB-(UF;;e+ zbpvC(cO?jtQ(!g|kq&cz@C>t5&b3O zr@j5h-x`j;rkC*_e2CrPdqJjtNOxx+G(VABymv%h0W`cA&jusgwT00*Z@acB6kbK_ z^(mOynTKn`eyk-t+kW#P^koYyNEH${#jk%E|9MG|7r~q&ti^6YmfJig#5axZaAytY z3+rvHQdn>0`kjUW{?4MnGE2C|<>0Qa*n6mTl` z;ZuZ_Jf=SEEry=>fd_+7!a(fm*Wt2&9P^yK`sCEPvE42H^6cYOqRVfz}fPmN^ee+I` z1~}CQJ#-HiFr*B*HzE%$+Te70*gEx~@w9Og1H?@@& zGyFmEF7$Gl4w2RGpMXISy>9K4n&d!E@m53G-hV0poMWYg(~2vkJT^d4G>yUK57FXN z`AlV*zM$rzNOkgT;3C523)IA;Sw`3lP+bf0I9wvlkf4*ERE#$+X4ejFjO+C3r)~Uy zX|UE>r;e#}V(DR?jo+<0(c@oU>W&$peA1_p(Qlm-}e>Neh;UyE@)*f47q2VLVGbM1vRuroBNb}Vue)$^@ zPr7fD03_{HkXQ&p5})T3%?h=}7pi!ytk~Kd;ucz)cy8aJioDQwpB{t6eTGRV-S>J} z83<((ulv)liwG`)uV+o|*ekoL1vw zHnudDU1p6AmG+EdOe?Fh+=ip2P4F}K9X;%a(2WOYPr--nUrYY=`LZ^~gtuC%9IEJVCavX?^$Z(U_i z{fGxWjwb>d$bYYNxv)RdT&z#5^+HjF#F8a~e4?dMKgk<9aJoY3-y4*E97(>f9Lc%a zm5H1kl;0g$^tW7rcHj?`>U%=RPM;($T`;jCrM9Sykj5$j4b*&FG3I~ zj5qL+c{;-RyumBY?3z3?c&jKY%_?sydO*!XqF(1Wapi!V78eBqTHg910p$UHB@HRw zUf6l)2K?3^Ag)MUnU~{^3=8?O-QmYp&wa+)zrGxa^;4G;D;lYbLG8-W2l3}<>Bh*S zzi4|ycRaP1Qz$RX$(^X&g#;1`&xt!86l9=-+tjJVeUI4d{hl}tiJIre;BDw}P9xpj zBA+DstV-P{5E!?!#(z=GqM*g}&t0Kx$=tKvEDFz$O$f`ikPG>Jl}auPORf$}PH{!P z*xBQ;*Lh^;^PLC#FZbli*sFSD1kv#GaF9Q1Ih<1 zGZl{2Of^f=>y%wgek!%=ZX?Z7F;jiJ{XCjwo%OA-m0&sh!#%isAc==)gP8}9&$od?$H$F3_`Bw@#_*R~VSbZ*}RMyavKOX7Dj=jMR2Y zRwoK%9+;dhPwhyvw&Usk2mxBc(pq#bI;W}uv7e*Ho%ZUFhiU*W1jz>Lad-$1ap?ix z-S4XnPYSOGzs%3qR(`kBa_ZGxu1u%F40Rtt#$3gzmW=+VSjC@-~;%(7q1oY`)}`( zn5V>R!=jD6klyCgS9TVj5Ed>E`77z}(+T`J%y;4|IvJ`+V?Mp@Wa^jRcC&k=Dm%34 z{(>jbphAs6^p63ly+jTf!zKC6z&iHKU+I|GfZMEL0I7TRQc1I>e;r5D`s!<;O7|=B zxvThW>2p<$$syYObz5BoGg!cNMUM(ZxZuyc5(o0SkP0Q{y^=$)nOVg4Hfd_|^u(1% z>O_ExYB_eT5-ZF;8jJADky}QI6Z^3~BS#d%5Mp0kVUMu!58dzdn9M!nYk)|;p`srs z+!Q(j__SC?168vxL;75vC-^KxfzjN0wcVavhaOWZ4YP;jo{NEW4?n z^dnR8=LhTk`i&+U1s;*mM*Sw1h*IiMXo%^aQicbiQ|B4r|92vtv=c{DfHjaC;a(J( z!`J`sA)1N)j1zv4%K1f4VZYy%TFFEW57X=1WS>4mNGeS8__24QFF)Ol_UXHJl0Kj_ zy)8_i>JIbilTV>v!#dMfS-RgwyHkA!hh(|{{Fa94jg)YMefr%UG$Cca;2Wm*Sf=o#ml}UwYBT5Ey99^uDU>RU*>xmZYDG{I_Zq4u z#~f<(ll|ZPfk9$3ktjOcucEwk~zdKRp07T5*4K(*C_O@P_I0h zWM@DNmGpoQ3!UL7{w*!ao5woIcMp9ooG$o#etIGCQLZX_-79DBVFtp@r$~&-Oocv* zlS!?L(aF9|5j1PnFj_q9w}<)9bF^`8v~rotpr15905olp+m58LDdo7(!7JqG2i4&) zV`thRP;*+4*!tyE(rj_1RCJY$5`Fk42nT!gA0kDlOLZzF0H6>=(Bcpf^Hz(F?g#Sm zBSX2q<8-sd)OgP-vg{@aGwu%4QsNb1s&?tjlDU7qjxFGvpY82fp9SqQ=#~c@@zn6f z@_@!=_agy&9QKfuNDp!+nJJxT>5Ah_72g9MP?){gm9vhV*k{UklbJuab3|sTfn?!Q^ZPd`K*Nh*2AH=ll zQq%44uz3S2>MIfNAmZPeeh}^DsjmQon0!M*JmQHkGJ)a1mU_Yp5dedLxM_s<=|;cg z(ezh^5G&m|^Cga!ZqZ>W0&)~F8%7`Ye(NA@t$8`qmSLwmymNHL%tU6f*!s9499w>( zAhx%IgLBD2IT{pR&BR`h+2PU7(0cXU_%@kdZc#69K(b#q`%Q&`F5NV9ht9qV0M~fu z!+bmc#?o+i4G%$^zCF{j|IM^alXtw`a}!*TlQx`l;R67Fw&USJ9%j8}ZJ?t*5oypf z$?LNzHJt#*7u8c-@aKBXs(e0C^FhB zO0#GEMeP2hibUlmJemPj>6%%f#^mW(V&xa*;VJJZ@vpsLv8_S(p`O~s#^2!yGVSj) z-@{8y68lC6u}avUl`?y%#%oXq&^|uQGYV@G1vRqHjM`R{y$KiVnJ-31y;7ab8Hap7 zfb3o4?+JX~M4vWz`ZPPYlRgQqfcR+nXMI|Kykg{Wj;|&5PBuQ*sYA(V$GNa`E__CL z!D5jxuV%bxN=5wHjDMK+SGR0nf2AGU>twB55*{5x1mDKHq=XiJ`PsxzmsgXQB~YzH z3ujJ^j>0*v9~vu_O1xSHC3aG)q?ZZPc!28J!2K8BKV&p`$UZ=5c9(NF8>fXnbfNSW%xmxKN*gaFj7Y{Or+eyMzSs zd86~<7mpqYRL5wbK_{9eh9!Q%OmU~j_h=xp%x{{S7{k|i7gXm+z!#+uAF7im-N=g_ zF%5;dl;Q@FNo(9QD_BOY%1(DRXWQ%!xsBN^A|3g;QqvperY~dNukDFcHr^_;cJ;P^D-^;+K zBh;-BBVaUWi@j1-`kl>@Td;S55OvJ1&vT%us!UW6A`_nuzc)s@Yda&g z9pg-aW*QUf;uV$@lMpQ+xhYCwt~vijlIyP#7pXkorV1Q3UTYxiv)Y*IN0M1F_yc6- zmmn4Y(RwlXUcrvl0xO=P)j^LHy51J{!q3qKSnW|`u{-3cqm$0kUdi@SIee^1UciZ( zSE^&X^KL$~S~T*VenIxG8t!Q0l8o~bS4Hw#DoUSkcx7UuC{kVe=Y|)?Cn_TYyHm~h zE2%YdKW98p8bn5Br$F;pC~8++$t^A=ZpzS*d1@`>1CN3L*TzC~fWU{9EU7c8vx=0)*Hatb^ZSG6W^m$BTu-u2e21IxMKL#kxZUG7?ji8*%=q1PM4s2gBO)?b z{3n@~UPtCX`tjY>H9q-I)}!OOsJJg?KGw&^S=Y-po5;CUo*gK9FDO?O?yvALRvsQS zo$ng{$`FBUzL1Iu=uPwoIli~&q)tbBZ2^+GSN8nkPG&eBLyqe?FxBgBKfL?kG?V|? z`2Nr}J`81WT2H$mTjfjU6`iI2211|mMD5VgpH_&!yeI*qoc%G}gJe{5Xc`g|KpoTF z!!t&IYRE(BP3{wDBHbAq+ucz=L~t4``y-`DgB7-9e%`C{PrE!c-rdct5|=#fA7goq3yLvQHyG zfw4jVjKeW}2$3mZWQLx-cip{CY(HpamF!_IN4#u{RbFH@-67TCw$w%H-7S%Kk4@e7dHw;d!4w{X<6S`j>=i zT2KE^qei)5ZFi55P?@Zz@;7kNoi&@;ENwv>c#-FX&`ew(Ps{WfQK3&_` z@MrP?5$=MnBD(GCECTJLw!2?ZqaE$B`j_(7yK2Z#)YF$=0-z8_rZmnusjtEiJexjA z%Ojddlrv+MiP{ms^9L-GL5f4Lxn~@L%{A;ECX2R}7!@&MEI!T&QWGxsF_{o$^BZ;V z=tKqd7^0jZ#-cQk8>m2qfWbaiq!f&Zzfj>3Rsm&1T|03xWL3~g_r-zTkL02^JAy` zF78=s9)fl@0*#%9)A$L+W(TBi$TtW84EH8F0u*bIx)MfKE|rLh2|Q`PMA_8*vxNA9{j-&~zNe_krPqIt2p68e;Wp>yc=;Mb3ojh!%#&B@D(+`d~QjLpF} z@V3A5NFYj#jLi~cH143qnpjMDN(&)_neyFnKh+Kc+)3P_ z=8~6l1=D?cl1JO&6^&0lN->;!s@I>FuYk}1VXO%^dv0Zi@OjdVzFcuQ)g*K8`!*ks z<)fS6Km1xTc<_75a;1Fm80>DRenX?wGa=9R@S8-lA^eczkQp@4sfl5?-=ocL1O6N9 z6!=RCjA&{Q8;3<-eMJhP>b^iDv9d+bNZfiaKirVag1cpj9!pziQuREY?_Hbm%=yI; ztgMAio(j>J6^fO8Z)sru73)85-Xh%4r5d~&o>eBIQXU@Pn;MPZq9$WyXIZhsT#FSO zJ|R)Rx?P1P#IIc49(IGey7doVT-S$9mRHEctm|2`N;>mOIZ~R3j}gz)8YCBR>Ohfid3|5UR$YF5u;-;@!n15C1Rp z>4ZNkl4UAyh;863>@>!Kg2f!IqK%Qit35fZqiC!91xB*{T*txCr)2z0uiGDo<7?v^ zENN%t(V5)!)2eHRw~#e)t0CTvAfAO8*HPak8N`b;-Nd@hAfNd_|3?+S(|g5{=98$d ztMZZEE6?Y}Z8`U#W3q$G?!%Fqu*^79ZGe#pFw&6uCA?#N=TkD?gkxRX)JDkk_)xPb zxEsJvH?CjVfl~iEAVKFEV_zJ7-CgPO(MFXohr~T zTm6`*Sf(uy6Zspbjze`3KeQ$>bXyIc_%-o?+bE|VafUUr2qK@UCsuZ)l^J9ex)xus zdVS@FcHfs45gWAKkz4HWR{RlL*T(|lUjnlg;VkC88JHmxPy- zx~Jf7h%5eciydwOnU;u*bUaJ(0WDT2pF)xY%*-b({2M1Q#|o9w>MpUzZEm9f!r#au>{E;( zM2;_l8-^07gbqN7%kau>n~yJyWyU4)h4xt4kM7c}N8HC~WNYMQKDZ`+L0&X|2-*B> zy&730xBjqLtZcfK7;NR~zb}V~@Q%vF=B!_(XknC_$ zTKy`C4h6*Jp@Ed4+2;%Qc1hjQq=NocjUllwQL`V2Ba)ViiV6@LIe z9Xl%{t-ls`V{5)8oo_sj2ZBr)?<4RrzPy|6&`Lgnt+f06NC{};qKR*FWaK)$cb}_{ z&((Q}!dTg_EZfm!GyLB>!qz>e+G5FMWVM(^OD--Ng5zv4#GnKf#EI4ME5=rrUXf>t z?x&=&k4$=j{e5hAzew{VyjCa9U^59OkTcItttA$kYz|h7rzMwoX*_Du_y#xaDlcdw zw@U^eie4upgXdu$UM^%7yn>LsKRVfqMh&@c3EnsVza(=Ir`BC~Hx?6=;X|O{2&_=pT7KQfSPP`JGd^aRUyq4aK#J-DdlT-MKx)*{*HBnFvHxN_=pllFtOUjOyGVXj%X> z6liso_~1mv?7TBViswJqGp`x`V}x9ru>z~XB;js6sp%y0Hm-P#u0mnhh79AqlkVd! zayqUGk!E)2kY#SSZb{52kL~N*a3$8l<&q4af<{U_oS~U9Nc>n}{1`p8#XC@|`731| zBU1(`2Dq8V8oRgVQ_}AP$;iRQ*pk!uRI)DBAyhK03`6<@?vq_Xt#ncxsNL##d<y_sYnl6AinrY0*ksm--i=4Ko;Gb!Jd{q#XB4nr0MDpndfK&n9;VsBhUT-bVZka*7e z?^fx0wRmet8aT!DR7e_TKt9&AG;JZ&0Nt4CF4Vbk@O7$XXjut#S=fHeP>L2&3fV8g zW>DJpB-ZEkz6-RO+M^lVIA*_zSEaR9(pR=$4W`P;493u}b1=|H#uI6}8?aX=YR6W` zIbTpd3HG~3bc&&Aa5Xpbh#Y0IBht5~Tn%JnI}k)4f34K?a;Lvd5d zK+6xfC!A8Rf_v_LQ>G%#b zS_-Gw%K7h%U~VhHP5(rF$?&n%Q3qmuCwUCr`o>hqfU={3H2K z%r`G=R1yOrm`2KhRPnZ{!?v31byQL9-T_mFihphiW>Wa?9kVki8pO!y$ozbifu1eHhnQTA@a_c|h zO=@3Tp7QGuO8|@T30s7*r){%t>pRl?XKG2w!0TEvg#@6Ils2X8@31)apu-{KC5Q0` znf{>vN?wM1*w(>*;5!U8^#LaxVat-qKB|G!y=Vywlncl?pJi+2eY%dY&e&De1Ez=yTez4bT-!wz8@l32=e01;=eJ+yp zD;+*(e%_keV!2%$k1yVjE7?A;=JSw61sK=(zp&Cax-)UhxOfp$deT`0K_ljg8l^;A>d$ zHmYCI9Qw~&G%EC;gTfJ=&4}h6IHGR@gHSpKNxtTypx6Zyaqk)SXF2u?nvKofCTq}J>xHA03Nv0LVp|`DJpx1bsnsjiG;J;4& zD5z{k=I!oHoJst8OXK)zl0iwxM7L-c%zUuFE^qI=|Ha`=Z%xg87 zYc;+qVh^>Z4rTQ2QD|jvv$`LWSoFVcGn>A}oyDHB2M_pvs3tX5h!^%VBc}O&(#J^i za}Z8HfYe}ey1xH!y-jV_P}kX__&?Xf{zFaOX;`w_z0INn_M%U1JbH@nYTxrqEibjM za|iF`f9-`r`jHP|O6GntFYxleYr9Z%Y|vFrRRDk3)%?IoR*5O|Z$XPZ_t-gZx*5l~ zF|G3U{s2n*lu*OygDxu04N6~|hb;0MDW<}ZgvZCd^I%?k(@%+`XUwh(pPRKSZI3IOh~a4K72h^HW}Q`iZq=FBD-H;QHD4RNn}k) z4dbJ-oic$h!hz4l%8ph37WmDLmiY`N2?Hj?$AnhXaH4nPvk^YNZ;wvX|5n%IHhbKl zuYa<~ZF*eO_4NrJLj-z=$6isz9qtZ-DBJfF8G9^Kt=r(DDk4ENc+EV{H zEoo0epX*PBZ%^z&Lan98l<+4KY~z5NVCL7&Iho5L&gh-M`tdF9Ha_WxmTW`G6|8U6 zkN#o2s-N1`hx66cPowGs-9l5)60B!6k}pc79X~drxxzgOAK1TQxO0ESbG=v zsEe!rKOqSO1UK9y3P{jcgSQ5YnpCM94DyXG7?ola+oq2eX{&971fn1$Y=Erm>e_n2 z;?u|0_Ni^Hk6Mc$KAM1X(`tZLxwPJk6IWZr7P(mRdw*uWyPJgI<@x{dW%m31&dixJ zXU?2CbLPyMfqbjeH%&mG-C5SGrHA{+o$)8ce0P%{Lo6>J||SE zyKC@^zgYOzrvf!`oT!0Z<^>jE4dZXibv?N9A!(YmH%a*G%-VuMT#uAFnVT+3m$i^m z5h&*dT(%DY8q#!JABqeq)HSvZq)JWB)l0Mgl7|alU`1`=#W=7L4Nf)=y1~pPS*@vL zb_tn{U_gseqcs2Mh=Y3rXK2~Q)Mr;-rv4oS3p*E`77A8`%WP3(wb>*!4*zxZ>5H=B z(`RNf>_)KJUEN!b-R}vDe=_iy+|#05WZ%M>8!dzVHJ)ypx-8FYT$7*8TJ_@{ZvHP_ zbIaw{e@#cJs)3`8@7_|5L^dyGclcSE(HYfxtMnqcuYKn&P8$cV=(si%9d{BIcDvv% z(P^BA1R;`1d=%FFJ!R2}+)MFZ8o|IOK=i@$z1GB6z08kz>`gREFK_|TKnQ~~<^_y< zY8ZPhFrf=ymLO`NdqS0&k7DaOvRuK*ksI!SQMj;V<3EDOKTFsb?eT$Q37eYlRqYdqKh*0azK$^q55U+`ybZNHP^{#zhCmzN9t za=OBVgRlZzj~n_B;Efi%$+4>oVdX2aY_a0ovET&1AtSa;j($6@y%!*6fd3~J{-*YR zyhAEBy;!1g4l;T(4l)_-*D{V(3V*&kRr&^|>#IMUsRQgaZ%L|R!BK|GLJ7nQN$(P<-(~iVxs^7iM z9^BmIGLw<2+J}gzaZ|MwoMU17FQ@QAbn~+Ch6c_$e$~}Lm}BnGX*^^bGr()?uvKg$ zetoh3GW$3NtjisnYnx;Fqy4w2am?+mqL<`Ml6-091!biy{6|>qVapN~mc^b+c@L@o zEw=?0eZ(xEWQL820W6js$az3Xz5KwwY;Y;x?));97xs?3@^ic6=l#hp+V5JG_=eBN zvnO59e4FL{PCRUf%jDRV&VLE~RA_eI#j*aGUMw;Uc4}XVe>5Hv4vii7YH;Yvz5KD$ zi=~fQZNId+!3PO{y3qDB(-a&dL5G*=v|ZNZGOuOZ-U{lb+8kJkgr5g*dbjb{zu^=e8i8m!c-on zUnr9pMN_JY!H9nlwt#N6k^$W$HuRy)Nf~8NOL4$@@z@EN1fHMR^g-<=FPd{VNw)ul z#yMW=enNuUgRIY}a)wXx&|+%#jk+5RP2yc`j}Hw2AU?KbX)lL}=+pD$IvirFt9zVW z@sFQpmq~|Dto|1_zkUU*{5~%6U3=s?fJqMb@rD*qw%hRG@qemC=?^UaEnmVbwX(?w z-0@TXHmp3>zAUz#sc=i$()HM>iR>lbcI_l0>(-XIV3d!LQW32QdUDr@*34v`bEx9u z?G>&23DfvyUIlkq#V$SM-#^w~L++J=-Ck)S;(=nWV``NkWo73Tbz04h; zB0+0U19N@YtD(qC#tQ-otFQ(a6N2yBQ=BOEViz*TuRxx?(glb%*9apV`PfYUT8~8u zHLr-HUf>dL8Q!uWP!V1!hRmE1ufu+^iS^p7VN59%X;B4CaO+*%;{A5?oJkGOquip~kbKmlLyAE!vYeX*Jtw;@>-jGXLkGzo4*|ANGZ=<|_nZ8DaKsM;zUIgb`rt zzrwFSm*^06`5J5a7IZ+MzdFHz&W|?B>kNK~N8)M!GkltRcBW_HXGg6xVp9hWmL9N7 zUgFj?GStuhMJNC40`fBkWuwwi{_8L~tYxSTHS>8CTeQh|Y6kb5ei#VnQ0uxTJDHZb(A%6ptjuF5mw4Cg zP2gnxvD0bt(i+Da_6L2PV;FZh*xC8jcJ1VJg753M5x$~Mh>rT==6v(|b z1Bg)gsNWrE_!Z{^3QxMbzl+b-R4h29~a%Di)dX_81RicVckO zwZ6$rx=hg=onZSUFmOH_EBae({|4<})?_2sk!&>}P1(g>Y-%A}b5id?K4@p~)LuVd zDzywHCV;i5vUq#wPu&<8>_@nH7NxwRblWX#2Zh!bOomABG)w<1`W!wdxBuX<$=J=mn>+W9&M1L(i3}MR6{|G`+!`Q~^H>bC zjl;$=r$CKj_PLpd`EtCOkf%Ai%Ec|?@;cLcZc=K1N(tS!f&S9@BF0qEF2FI46aNSe z=nSv)=G?kH3eipT>)KPp2mN}V8XH(D6E=qi+Zp`0*k}eJ3`$;Hp(>u|QwM=`Vnhfc zl%-`Ht*m0RisF(uI7!IZspSjE`oWR7Pn{uXr|QTt;w|KEWj^EifUEBofQk$rGp)rN ztN7Mh#6X+i6qyID4xn^i)jH|8Q#VsV9zji;u0u~zZk$hG0Q0Zs57;GoI(MbFv=<|n z{qif%gHD!j-Xdsb^ZSmjrGSTP7Rm$!Ik_iZ0IGjuj=rjm-z~UZXdeL zoDdY!Ltv?lUZPNuSU)c*%a0<)uvzlHmF2b5M3*8@XBQ!Dq?fmTLN28!1{Ljg0o+iN z%gWb5pH1!kzhX~65=O{+^K5`L)|9_{m8vxt!vIL7o!gUA>8pQXbsNihLg6ls0k#># z2P#V{tmY;tkRA;-U{A93N%P@?#8s*+YNzXRbVXdp?IbR*@t$Yx5`WexG{Z+>E+Y)ayalK73tVD2Zg>3{txo zjEElbWac6t7YJpU#as$l%O~CRBldSRN%%Mfd⋙Z5$4@7pi()M#$U&+o%%DHaze4 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%0A5@(h6wbT0Ov>!}`r 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

    hGN?Qh!+vrCtS~u(80TSZcfs!2aS| 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 z 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�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
    ScWg|wUcCH2KF>$>tgnr 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≫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�l0(5%CJj;6m0?LjQ6R`ZpL+S9y{qsXsMd29m=u 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⋘>fTzFA3M2~NOR*?AxYv;l=Ok-M!g>PY)!``c- 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
    Hg<6id9JErcs6rEsk>z>xh`BST7~vunCm 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 z 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 QJV?xPGj^G~V?!4S$Gw62`TVVWiOaWI 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

    6Rc)&D;GEaKZQ)-)^dw(9EG+ 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%0DI@F)27tk04{vYLnTASNb`ahQK5A%Sm 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

    V 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�^!E_|(V{(8PGQZWI)71%I!A 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

    QLjb?Eb3N9 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�cXEi`Wnwo#boM(d@FUsgu%r<@hN|4Ext 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%0A`#v3#gP|#qbNVkMOeBcd+3vhNrSApWPv+m!DRX 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 z

    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�XTJfREzn{q17D3b`s5 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 z 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

    WU=6c338 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 z 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

    Se&eF{{LuNCcodo(XinZz8Vsp-zQF_L-fB7> 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 CcWDmExwKEgLC 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 z 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 z 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

    |IyMsf977P-w{6fpP4kqAhp{2w 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%0D1~MV1jaN2!?I(HP6;bjdCZKo9UY_7L7$Uszm3tU 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

    ;RCi|^O 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 z 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

    +HI00p9v-HW8872=BuFCjGaj~}i3h-QBba!; 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≠06_Y~8#-OM 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

    BJi_h1`MBl(RlXbf8F+xtWq#)4 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 From 46616d6b42feca7687d215d60f119bf44e4ea0a5 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Wed, 11 Oct 2023 14:53:08 +0200 Subject: [PATCH 029/430] fix a qldoc isuse --- go/ql/src/experimental/frameworks/DecompressionBombs.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/src/experimental/frameworks/DecompressionBombs.qll b/go/ql/src/experimental/frameworks/DecompressionBombs.qll index 9b7f6f57294..03f1453ec05 100644 --- a/go/ql/src/experimental/frameworks/DecompressionBombs.qll +++ b/go/ql/src/experimental/frameworks/DecompressionBombs.qll @@ -4,7 +4,7 @@ module DecompressionBombs { class FlowState = DataFlow::FlowState; /** - * the Sinks of uncontrolled data decompression + * The Sinks of uncontrolled data decompression */ class Sink extends DataFlow::Node { Sink() { this = any(Range r).sink() } From 7d60f03131f17e30b62dafe24faa28d83bcda5f4 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Wed, 11 Oct 2023 18:04:35 +0200 Subject: [PATCH 030/430] fix tests --- .../DecompressionBombs.expected | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected index bed0de2138e..ac026a5576a 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -21,8 +21,13 @@ edges | test.go:108:25:108:32 | filename | test.go:108:2:108:33 | ... := ...[0] | | test.go:110:3:110:19 | ... := ...[0] | test.go:112:37:112:38 | rc | | test.go:110:12:110:12 | f | test.go:110:3:110:19 | ... := ...[0] | -| test.go:121:2:121:51 | ... := ...[0] | test.go:125:37:125:38 | rc | +| test.go:121:2:121:51 | ... := ...[0] | test.go:122:20:122:29 | implicit dereference | | test.go:121:43:121:50 | filename | test.go:121:2:121:51 | ... := ...[0] | +| test.go:122:20:122:29 | implicit dereference | test.go:122:20:122:29 | implicit dereference | +| test.go:122:20:122:29 | implicit dereference | test.go:122:20:122:29 | implicit read of field Reader | +| test.go:122:20:122:29 | implicit read of field Reader | test.go:123:12:123:12 | f | +| test.go:123:12:123:12 | f | test.go:123:12:123:19 | call to Open | +| test.go:123:12:123:19 | call to Open | test.go:125:37:125:38 | rc | | test.go:136:19:136:22 | definition of file | test.go:137:25:137:28 | file | | test.go:137:2:137:29 | ... := ...[0] | test.go:138:48:138:52 | file1 | | test.go:137:25:137:28 | file | test.go:137:2:137:29 | ... := ...[0] | @@ -34,9 +39,11 @@ edges | test.go:147:20:147:23 | definition of file | test.go:148:25:148:28 | file | | test.go:148:2:148:29 | ... := ...[0] | test.go:149:66:149:70 | file2 | | test.go:148:25:148:28 | file | test.go:148:2:148:29 | ... := ...[0] | -| test.go:149:2:149:87 | ... := ...[0] | test.go:154:36:154:51 | fileReaderCloser | +| test.go:149:2:149:87 | ... := ...[0] | test.go:153:26:153:29 | file | | test.go:149:50:149:71 | call to NewReader | test.go:149:2:149:87 | ... := ...[0] | | test.go:149:66:149:70 | file2 | test.go:149:50:149:71 | call to NewReader | +| test.go:153:26:153:29 | file | test.go:153:26:153:36 | call to Open | +| test.go:153:26:153:36 | call to Open | test.go:154:36:154:51 | fileReaderCloser | | test.go:166:22:166:25 | definition of file | test.go:169:41:169:44 | file | | test.go:166:22:166:25 | definition of file | test.go:175:28:175:31 | file | | test.go:166:22:166:25 | definition of file | test.go:182:28:182:31 | file | @@ -180,6 +187,10 @@ nodes | test.go:112:37:112:38 | rc | semmle.label | rc | | test.go:121:2:121:51 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:121:43:121:50 | filename | semmle.label | filename | +| test.go:122:20:122:29 | implicit dereference | semmle.label | implicit dereference | +| test.go:122:20:122:29 | implicit read of field Reader | semmle.label | implicit read of field Reader | +| test.go:123:12:123:12 | f | semmle.label | f | +| test.go:123:12:123:19 | call to Open | semmle.label | call to Open | | test.go:125:37:125:38 | rc | semmle.label | rc | | test.go:136:19:136:22 | definition of file | semmle.label | definition of file | | test.go:137:2:137:29 | ... := ...[0] | semmle.label | ... := ...[0] | @@ -196,6 +207,8 @@ nodes | test.go:149:2:149:87 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:149:50:149:71 | call to NewReader | semmle.label | call to NewReader | | test.go:149:66:149:70 | file2 | semmle.label | file2 | +| test.go:153:26:153:29 | file | semmle.label | file | +| test.go:153:26:153:36 | call to Open | semmle.label | call to Open | | test.go:154:36:154:51 | fileReaderCloser | semmle.label | fileReaderCloser | | test.go:166:22:166:25 | definition of file | semmle.label | definition of file | | test.go:169:3:169:73 | ... := ...[0] | semmle.label | ... := ...[0] | From ac5e9c75e1cf8455d67b0cf94a44783efa851b28 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Thu, 12 Oct 2023 08:06:45 +0200 Subject: [PATCH 031/430] fix a mistake: remove vendor dir from go root directory --- go/vendor/github.com/DataDog/zstd/stub.go | 16 - .../github.com/dsnet/compress/bzip2/stub.go | 35 - .../github.com/dsnet/compress/flate/stub.go | 35 - go/vendor/github.com/golang/snappy/stub.go | 28 - .../klauspost/compress/flate/stub.go | 16 - .../klauspost/compress/gzip/stub.go | 47 - .../github.com/klauspost/compress/s2/stub.go | 92 -- .../klauspost/compress/snappy/stub.go | 16 - .../github.com/klauspost/compress/zip/stub.go | 117 --- .../klauspost/compress/zlib/stub.go | 16 - .../klauspost/compress/zstd/stub.go | 42 - go/vendor/github.com/klauspost/pgzip/stub.go | 47 - go/vendor/github.com/ulikunitz/xz/stub.go | 45 - .../x/tools/go/types/objectpath/objectpath.go | 827 ------------------ .../x/tools/internal/event/tag/tag.go | 59 -- 15 files changed, 1438 deletions(-) delete mode 100644 go/vendor/github.com/DataDog/zstd/stub.go delete mode 100644 go/vendor/github.com/dsnet/compress/bzip2/stub.go delete mode 100644 go/vendor/github.com/dsnet/compress/flate/stub.go delete mode 100644 go/vendor/github.com/golang/snappy/stub.go delete mode 100644 go/vendor/github.com/klauspost/compress/flate/stub.go delete mode 100644 go/vendor/github.com/klauspost/compress/gzip/stub.go delete mode 100644 go/vendor/github.com/klauspost/compress/s2/stub.go delete mode 100644 go/vendor/github.com/klauspost/compress/snappy/stub.go delete mode 100644 go/vendor/github.com/klauspost/compress/zip/stub.go delete mode 100644 go/vendor/github.com/klauspost/compress/zlib/stub.go delete mode 100644 go/vendor/github.com/klauspost/compress/zstd/stub.go delete mode 100644 go/vendor/github.com/klauspost/pgzip/stub.go delete mode 100644 go/vendor/github.com/ulikunitz/xz/stub.go delete mode 100644 go/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go delete mode 100644 go/vendor/golang.org/x/tools/internal/event/tag/tag.go diff --git a/go/vendor/github.com/DataDog/zstd/stub.go b/go/vendor/github.com/DataDog/zstd/stub.go deleted file mode 100644 index 1551a6ebb1a..00000000000 --- a/go/vendor/github.com/DataDog/zstd/stub.go +++ /dev/null @@ -1,16 +0,0 @@ -// 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/vendor/github.com/dsnet/compress/bzip2/stub.go b/go/vendor/github.com/dsnet/compress/bzip2/stub.go deleted file mode 100644 index e51c66a76de..00000000000 --- a/go/vendor/github.com/dsnet/compress/bzip2/stub.go +++ /dev/null @@ -1,35 +0,0 @@ -// 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/vendor/github.com/dsnet/compress/flate/stub.go b/go/vendor/github.com/dsnet/compress/flate/stub.go deleted file mode 100644 index 1130904695b..00000000000 --- a/go/vendor/github.com/dsnet/compress/flate/stub.go +++ /dev/null @@ -1,35 +0,0 @@ -// 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/vendor/github.com/golang/snappy/stub.go b/go/vendor/github.com/golang/snappy/stub.go deleted file mode 100644 index d7c0bcb6480..00000000000 --- a/go/vendor/github.com/golang/snappy/stub.go +++ /dev/null @@ -1,28 +0,0 @@ -// 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/vendor/github.com/klauspost/compress/flate/stub.go b/go/vendor/github.com/klauspost/compress/flate/stub.go deleted file mode 100644 index 971f4f06d49..00000000000 --- a/go/vendor/github.com/klauspost/compress/flate/stub.go +++ /dev/null @@ -1,16 +0,0 @@ -// 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/vendor/github.com/klauspost/compress/gzip/stub.go b/go/vendor/github.com/klauspost/compress/gzip/stub.go deleted file mode 100644 index 6590497526a..00000000000 --- a/go/vendor/github.com/klauspost/compress/gzip/stub.go +++ /dev/null @@ -1,47 +0,0 @@ -// 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/vendor/github.com/klauspost/compress/s2/stub.go b/go/vendor/github.com/klauspost/compress/s2/stub.go deleted file mode 100644 index 8e0ee2d1b62..00000000000 --- a/go/vendor/github.com/klauspost/compress/s2/stub.go +++ /dev/null @@ -1,92 +0,0 @@ -// 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) GetBufferCapacity() int { - return 0 -} - -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) (int64, error) { - return 0, nil -} - -func (_ *Reader) GetBufferCapacity() int { - return 0 -} - -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/vendor/github.com/klauspost/compress/snappy/stub.go b/go/vendor/github.com/klauspost/compress/snappy/stub.go deleted file mode 100644 index cd6e5178fbf..00000000000 --- a/go/vendor/github.com/klauspost/compress/snappy/stub.go +++ /dev/null @@ -1,16 +0,0 @@ -// 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" -) - -func NewReader(_ io.Reader) interface{} { - return nil -} diff --git a/go/vendor/github.com/klauspost/compress/zip/stub.go b/go/vendor/github.com/klauspost/compress/zip/stub.go deleted file mode 100644 index a926861ba78..00000000000 --- a/go/vendor/github.com/klauspost/compress/zip/stub.go +++ /dev/null @@ -1,117 +0,0 @@ -// 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" -) - -type Decompressor func(io.Reader) io.ReadCloser - -type File struct { - FileHeader FileHeader -} - -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 { - Reader 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/vendor/github.com/klauspost/compress/zlib/stub.go b/go/vendor/github.com/klauspost/compress/zlib/stub.go deleted file mode 100644 index 29d59ab5e2b..00000000000 --- a/go/vendor/github.com/klauspost/compress/zlib/stub.go +++ /dev/null @@ -1,16 +0,0 @@ -// 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/vendor/github.com/klauspost/compress/zstd/stub.go b/go/vendor/github.com/klauspost/compress/zstd/stub.go deleted file mode 100644 index 7c0590a2778..00000000000 --- a/go/vendor/github.com/klauspost/compress/zstd/stub.go +++ /dev/null @@ -1,42 +0,0 @@ -// 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/vendor/github.com/klauspost/pgzip/stub.go b/go/vendor/github.com/klauspost/pgzip/stub.go deleted file mode 100644 index b7fb157d3fb..00000000000 --- a/go/vendor/github.com/klauspost/pgzip/stub.go +++ /dev/null @@ -1,47 +0,0 @@ -// 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/vendor/github.com/ulikunitz/xz/stub.go b/go/vendor/github.com/ulikunitz/xz/stub.go deleted file mode 100644 index 6a2780cd891..00000000000 --- a/go/vendor/github.com/ulikunitz/xz/stub.go +++ /dev/null @@ -1,45 +0,0 @@ -// 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/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go b/go/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go deleted file mode 100644 index fa5834baf72..00000000000 --- a/go/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go +++ /dev/null @@ -1,827 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package objectpath defines a naming scheme for types.Objects -// (that is, named entities in Go programs) relative to their enclosing -// package. -// -// Type-checker objects are canonical, so they are usually identified by -// their address in memory (a pointer), but a pointer has meaning only -// within one address space. By contrast, objectpath names allow the -// identity of an object to be sent from one program to another, -// establishing a correspondence between types.Object variables that are -// distinct but logically equivalent. -// -// A single object may have multiple paths. In this example, -// -// type A struct{ X int } -// type B A -// -// the field X has two paths due to its membership of both A and B. -// The For(obj) function always returns one of these paths, arbitrarily -// but consistently. -package objectpath - -import ( - "fmt" - "go/types" - "sort" - "strconv" - "strings" - _ "unsafe" - - "golang.org/x/tools/internal/typeparams" - "golang.org/x/tools/internal/typesinternal" -) - -// A Path is an opaque name that identifies a types.Object -// relative to its package. Conceptually, the name consists of a -// sequence of destructuring operations applied to the package scope -// to obtain the original object. -// The name does not include the package itself. -type Path string - -// Encoding -// -// An object path is a textual and (with training) human-readable encoding -// of a sequence of destructuring operators, starting from a types.Package. -// The sequences represent a path through the package/object/type graph. -// We classify these operators by their type: -// -// PO package->object Package.Scope.Lookup -// OT object->type Object.Type -// TT type->type Type.{Elem,Key,Params,Results,Underlying} [EKPRU] -// TO type->object Type.{At,Field,Method,Obj} [AFMO] -// -// All valid paths start with a package and end at an object -// and thus may be defined by the regular language: -// -// objectpath = PO (OT TT* TO)* -// -// The concrete encoding follows directly: -// - The only PO operator is Package.Scope.Lookup, which requires an identifier. -// - The only OT operator is Object.Type, -// which we encode as '.' because dot cannot appear in an identifier. -// - The TT operators are encoded as [EKPRUTC]; -// one of these (TypeParam) requires an integer operand, -// which is encoded as a string of decimal digits. -// - The TO operators are encoded as [AFMO]; -// three of these (At,Field,Method) require an integer operand, -// which is encoded as a string of decimal digits. -// These indices are stable across different representations -// of the same package, even source and export data. -// The indices used are implementation specific and may not correspond to -// the argument to the go/types function. -// -// In the example below, -// -// package p -// -// type T interface { -// f() (a string, b struct{ X int }) -// } -// -// field X has the path "T.UM0.RA1.F0", -// representing the following sequence of operations: -// -// p.Lookup("T") T -// .Type().Underlying().Method(0). f -// .Type().Results().At(1) b -// .Type().Field(0) X -// -// The encoding is not maximally compact---every R or P is -// followed by an A, for example---but this simplifies the -// encoder and decoder. -const ( - // object->type operators - opType = '.' // .Type() (Object) - - // type->type operators - opElem = 'E' // .Elem() (Pointer, Slice, Array, Chan, Map) - opKey = 'K' // .Key() (Map) - opParams = 'P' // .Params() (Signature) - opResults = 'R' // .Results() (Signature) - opUnderlying = 'U' // .Underlying() (Named) - opTypeParam = 'T' // .TypeParams.At(i) (Named, Signature) - opConstraint = 'C' // .Constraint() (TypeParam) - - // type->object operators - opAt = 'A' // .At(i) (Tuple) - opField = 'F' // .Field(i) (Struct) - opMethod = 'M' // .Method(i) (Named or Interface; not Struct: "promoted" names are ignored) - opObj = 'O' // .Obj() (Named, TypeParam) -) - -// For is equivalent to new(Encoder).For(obj). -// -// It may be more efficient to reuse a single Encoder across several calls. -func For(obj types.Object) (Path, error) { - return new(Encoder).For(obj) -} - -// An Encoder amortizes the cost of encoding the paths of multiple objects. -// The zero value of an Encoder is ready to use. -type Encoder struct { - scopeMemo map[*types.Scope][]types.Object // memoization of scopeObjects - namedMethodsMemo map[*types.Named][]*types.Func // memoization of namedMethods() - skipMethodSorting bool -} - -// Expose back doors so that gopls can avoid method sorting, which can dominate -// analysis on certain repositories. -// -// TODO(golang/go#61443): remove this. -func init() { - typesinternal.SkipEncoderMethodSorting = func(enc interface{}) { - enc.(*Encoder).skipMethodSorting = true - } - typesinternal.ObjectpathObject = object -} - -// For returns the path to an object relative to its package, -// or an error if the object is not accessible from the package's Scope. -// -// The For function guarantees to return a path only for the following objects: -// - package-level types -// - exported package-level non-types -// - methods -// - parameter and result variables -// - struct fields -// These objects are sufficient to define the API of their package. -// The objects described by a package's export data are drawn from this set. -// -// The set of objects accessible from a package's Scope depends on -// whether the package was produced by type-checking syntax, or -// reading export data; the latter may have a smaller Scope since -// export data trims objects that are not reachable from an exported -// declaration. For example, the For function will return a path for -// an exported method of an unexported type that is not reachable -// from any public declaration; this path will cause the Object -// function to fail if called on a package loaded from export data. -// TODO(adonovan): is this a bug or feature? Should this package -// compute accessibility in the same way? -// -// For does not return a path for predeclared names, imported package -// names, local names, and unexported package-level names (except -// types). -// -// Example: given this definition, -// -// package p -// -// type T interface { -// f() (a string, b struct{ X int }) -// } -// -// For(X) would return a path that denotes the following sequence of operations: -// -// p.Scope().Lookup("T") (TypeName T) -// .Type().Underlying().Method(0). (method Func f) -// .Type().Results().At(1) (field Var b) -// .Type().Field(0) (field Var X) -// -// where p is the package (*types.Package) to which X belongs. -func (enc *Encoder) For(obj types.Object) (Path, error) { - pkg := obj.Pkg() - - // This table lists the cases of interest. - // - // Object Action - // ------ ------ - // nil reject - // builtin reject - // pkgname reject - // label reject - // var - // package-level accept - // func param/result accept - // local reject - // struct field accept - // const - // package-level accept - // local reject - // func - // package-level accept - // init functions reject - // concrete method accept - // interface method accept - // type - // package-level accept - // local reject - // - // The only accessible package-level objects are members of pkg itself. - // - // The cases are handled in four steps: - // - // 1. reject nil and builtin - // 2. accept package-level objects - // 3. reject obviously invalid objects - // 4. search the API for the path to the param/result/field/method. - - // 1. reference to nil or builtin? - if pkg == nil { - return "", fmt.Errorf("predeclared %s has no path", obj) - } - scope := pkg.Scope() - - // 2. package-level object? - if scope.Lookup(obj.Name()) == obj { - // Only exported objects (and non-exported types) have a path. - // Non-exported types may be referenced by other objects. - if _, ok := obj.(*types.TypeName); !ok && !obj.Exported() { - return "", fmt.Errorf("no path for non-exported %v", obj) - } - return Path(obj.Name()), nil - } - - // 3. Not a package-level object. - // Reject obviously non-viable cases. - switch obj := obj.(type) { - case *types.TypeName: - if _, ok := obj.Type().(*typeparams.TypeParam); !ok { - // With the exception of type parameters, only package-level type names - // have a path. - return "", fmt.Errorf("no path for %v", obj) - } - case *types.Const, // Only package-level constants have a path. - *types.Label, // Labels are function-local. - *types.PkgName: // PkgNames are file-local. - return "", fmt.Errorf("no path for %v", obj) - - case *types.Var: - // Could be: - // - a field (obj.IsField()) - // - a func parameter or result - // - a local var. - // Sadly there is no way to distinguish - // a param/result from a local - // so we must proceed to the find. - - case *types.Func: - // A func, if not package-level, must be a method. - if recv := obj.Type().(*types.Signature).Recv(); recv == nil { - return "", fmt.Errorf("func is not a method: %v", obj) - } - - if path, ok := enc.concreteMethod(obj); ok { - // Fast path for concrete methods that avoids looping over scope. - return path, nil - } - - default: - panic(obj) - } - - // 4. Search the API for the path to the var (field/param/result) or method. - - // First inspect package-level named types. - // In the presence of path aliases, these give - // the best paths because non-types may - // refer to types, but not the reverse. - empty := make([]byte, 0, 48) // initial space - objs := enc.scopeObjects(scope) - for _, o := range objs { - tname, ok := o.(*types.TypeName) - if !ok { - continue // handle non-types in second pass - } - - path := append(empty, o.Name()...) - path = append(path, opType) - - T := o.Type() - - if tname.IsAlias() { - // type alias - if r := find(obj, T, path, nil); r != nil { - return Path(r), nil - } - } else { - if named, _ := T.(*types.Named); named != nil { - if r := findTypeParam(obj, typeparams.ForNamed(named), path, nil); r != nil { - // generic named type - return Path(r), nil - } - } - // defined (named) type - if r := find(obj, T.Underlying(), append(path, opUnderlying), nil); r != nil { - return Path(r), nil - } - } - } - - // Then inspect everything else: - // non-types, and declared methods of defined types. - for _, o := range objs { - path := append(empty, o.Name()...) - if _, ok := o.(*types.TypeName); !ok { - if o.Exported() { - // exported non-type (const, var, func) - if r := find(obj, o.Type(), append(path, opType), nil); r != nil { - return Path(r), nil - } - } - continue - } - - // Inspect declared methods of defined types. - if T, ok := o.Type().(*types.Named); ok { - path = append(path, opType) - if !enc.skipMethodSorting { - // Note that method index here is always with respect - // to canonical ordering of methods, regardless of how - // they appear in the underlying type. - for i, m := range enc.namedMethods(T) { - path2 := appendOpArg(path, opMethod, i) - if m == obj { - return Path(path2), nil // found declared method - } - if r := find(obj, m.Type(), append(path2, opType), nil); r != nil { - return Path(r), nil - } - } - } else { - // This branch must match the logic in the branch above, using go/types - // APIs without sorting. - for i := 0; i < T.NumMethods(); i++ { - m := T.Method(i) - path2 := appendOpArg(path, opMethod, i) - if m == obj { - return Path(path2), nil // found declared method - } - if r := find(obj, m.Type(), append(path2, opType), nil); r != nil { - return Path(r), nil - } - } - } - } - } - - return "", fmt.Errorf("can't find path for %v in %s", obj, pkg.Path()) -} - -func appendOpArg(path []byte, op byte, arg int) []byte { - path = append(path, op) - path = strconv.AppendInt(path, int64(arg), 10) - return path -} - -// concreteMethod returns the path for meth, which must have a non-nil receiver. -// The second return value indicates success and may be false if the method is -// an interface method or if it is an instantiated method. -// -// This function is just an optimization that avoids the general scope walking -// approach. You are expected to fall back to the general approach if this -// function fails. -func (enc *Encoder) concreteMethod(meth *types.Func) (Path, bool) { - // Concrete methods can only be declared on package-scoped named types. For - // that reason we can skip the expensive walk over the package scope: the - // path will always be package -> named type -> method. We can trivially get - // the type name from the receiver, and only have to look over the type's - // methods to find the method index. - // - // Methods on generic types require special consideration, however. Consider - // the following package: - // - // L1: type S[T any] struct{} - // L2: func (recv S[A]) Foo() { recv.Bar() } - // L3: func (recv S[B]) Bar() { } - // L4: type Alias = S[int] - // L5: func _[T any]() { var s S[int]; s.Foo() } - // - // The receivers of methods on generic types are instantiations. L2 and L3 - // instantiate S with the type-parameters A and B, which are scoped to the - // respective methods. L4 and L5 each instantiate S with int. Each of these - // instantiations has its own method set, full of methods (and thus objects) - // with receivers whose types are the respective instantiations. In other - // words, we have - // - // S[A].Foo, S[A].Bar - // S[B].Foo, S[B].Bar - // S[int].Foo, S[int].Bar - // - // We may thus be trying to produce object paths for any of these objects. - // - // S[A].Foo and S[B].Bar are the origin methods, and their paths are S.Foo - // and S.Bar, which are the paths that this function naturally produces. - // - // S[A].Bar, S[B].Foo, and both methods on S[int] are instantiations that - // don't correspond to the origin methods. For S[int], this is significant. - // The most precise object path for S[int].Foo, for example, is Alias.Foo, - // not S.Foo. Our function, however, would produce S.Foo, which would - // resolve to a different object. - // - // For S[A].Bar and S[B].Foo it could be argued that S.Bar and S.Foo are - // still the correct paths, since only the origin methods have meaningful - // paths. But this is likely only true for trivial cases and has edge cases. - // Since this function is only an optimization, we err on the side of giving - // up, deferring to the slower but definitely correct algorithm. Most users - // of objectpath will only be giving us origin methods, anyway, as referring - // to instantiated methods is usually not useful. - - if typeparams.OriginMethod(meth) != meth { - return "", false - } - - recvT := meth.Type().(*types.Signature).Recv().Type() - if ptr, ok := recvT.(*types.Pointer); ok { - recvT = ptr.Elem() - } - - named, ok := recvT.(*types.Named) - if !ok { - return "", false - } - - if types.IsInterface(named) { - // Named interfaces don't have to be package-scoped - // - // TODO(dominikh): opt: if scope.Lookup(name) == named, then we can apply this optimization to interface - // methods, too, I think. - return "", false - } - - // Preallocate space for the name, opType, opMethod, and some digits. - name := named.Obj().Name() - path := make([]byte, 0, len(name)+8) - path = append(path, name...) - path = append(path, opType) - - if !enc.skipMethodSorting { - for i, m := range enc.namedMethods(named) { - if m == meth { - path = appendOpArg(path, opMethod, i) - return Path(path), true - } - } - } else { - // This branch must match the logic of the branch above, using go/types - // APIs without sorting. - for i := 0; i < named.NumMethods(); i++ { - m := named.Method(i) - if m == meth { - path = appendOpArg(path, opMethod, i) - return Path(path), true - } - } - } - - // Due to golang/go#59944, go/types fails to associate the receiver with - // certain methods on cgo types. - // - // TODO(rfindley): replace this panic once golang/go#59944 is fixed in all Go - // versions gopls supports. - return "", false - // panic(fmt.Sprintf("couldn't find method %s on type %s; methods: %#v", meth, named, enc.namedMethods(named))) -} - -// find finds obj within type T, returning the path to it, or nil if not found. -// -// The seen map is used to short circuit cycles through type parameters. If -// nil, it will be allocated as necessary. -func find(obj types.Object, T types.Type, path []byte, seen map[*types.TypeName]bool) []byte { - switch T := T.(type) { - case *types.Basic, *types.Named: - // Named types belonging to pkg were handled already, - // so T must belong to another package. No path. - return nil - case *types.Pointer: - return find(obj, T.Elem(), append(path, opElem), seen) - case *types.Slice: - return find(obj, T.Elem(), append(path, opElem), seen) - case *types.Array: - return find(obj, T.Elem(), append(path, opElem), seen) - case *types.Chan: - return find(obj, T.Elem(), append(path, opElem), seen) - case *types.Map: - if r := find(obj, T.Key(), append(path, opKey), seen); r != nil { - return r - } - return find(obj, T.Elem(), append(path, opElem), seen) - case *types.Signature: - if r := findTypeParam(obj, typeparams.ForSignature(T), path, seen); r != nil { - return r - } - if r := find(obj, T.Params(), append(path, opParams), seen); r != nil { - return r - } - return find(obj, T.Results(), append(path, opResults), seen) - case *types.Struct: - for i := 0; i < T.NumFields(); i++ { - fld := T.Field(i) - path2 := appendOpArg(path, opField, i) - if fld == obj { - return path2 // found field var - } - if r := find(obj, fld.Type(), append(path2, opType), seen); r != nil { - return r - } - } - return nil - case *types.Tuple: - for i := 0; i < T.Len(); i++ { - v := T.At(i) - path2 := appendOpArg(path, opAt, i) - if v == obj { - return path2 // found param/result var - } - if r := find(obj, v.Type(), append(path2, opType), seen); r != nil { - return r - } - } - return nil - case *types.Interface: - for i := 0; i < T.NumMethods(); i++ { - m := T.Method(i) - path2 := appendOpArg(path, opMethod, i) - if m == obj { - return path2 // found interface method - } - if r := find(obj, m.Type(), append(path2, opType), seen); r != nil { - return r - } - } - return nil - case *typeparams.TypeParam: - name := T.Obj() - if name == obj { - return append(path, opObj) - } - if seen[name] { - return nil - } - if seen == nil { - seen = make(map[*types.TypeName]bool) - } - seen[name] = true - if r := find(obj, T.Constraint(), append(path, opConstraint), seen); r != nil { - return r - } - return nil - } - panic(T) -} - -func findTypeParam(obj types.Object, list *typeparams.TypeParamList, path []byte, seen map[*types.TypeName]bool) []byte { - for i := 0; i < list.Len(); i++ { - tparam := list.At(i) - path2 := appendOpArg(path, opTypeParam, i) - if r := find(obj, tparam, path2, seen); r != nil { - return r - } - } - return nil -} - -// Object returns the object denoted by path p within the package pkg. -func Object(pkg *types.Package, p Path) (types.Object, error) { - return object(pkg, string(p), false) -} - -// Note: the skipMethodSorting parameter must match the value of -// Encoder.skipMethodSorting used during encoding. -func object(pkg *types.Package, pathstr string, skipMethodSorting bool) (types.Object, error) { - if pathstr == "" { - return nil, fmt.Errorf("empty path") - } - - var pkgobj, suffix string - if dot := strings.IndexByte(pathstr, opType); dot < 0 { - pkgobj = pathstr - } else { - pkgobj = pathstr[:dot] - suffix = pathstr[dot:] // suffix starts with "." - } - - obj := pkg.Scope().Lookup(pkgobj) - if obj == nil { - return nil, fmt.Errorf("package %s does not contain %q", pkg.Path(), pkgobj) - } - - // abstraction of *types.{Pointer,Slice,Array,Chan,Map} - type hasElem interface { - Elem() types.Type - } - // abstraction of *types.{Named,Signature} - type hasTypeParams interface { - TypeParams() *typeparams.TypeParamList - } - // abstraction of *types.{Named,TypeParam} - type hasObj interface { - Obj() *types.TypeName - } - - // The loop state is the pair (t, obj), - // exactly one of which is non-nil, initially obj. - // All suffixes start with '.' (the only object->type operation), - // followed by optional type->type operations, - // then a type->object operation. - // The cycle then repeats. - var t types.Type - for suffix != "" { - code := suffix[0] - suffix = suffix[1:] - - // Codes [AFM] have an integer operand. - var index int - switch code { - case opAt, opField, opMethod, opTypeParam: - rest := strings.TrimLeft(suffix, "0123456789") - numerals := suffix[:len(suffix)-len(rest)] - suffix = rest - i, err := strconv.Atoi(numerals) - if err != nil { - return nil, fmt.Errorf("invalid path: bad numeric operand %q for code %q", numerals, code) - } - index = int(i) - case opObj: - // no operand - default: - // The suffix must end with a type->object operation. - if suffix == "" { - return nil, fmt.Errorf("invalid path: ends with %q, want [AFMO]", code) - } - } - - if code == opType { - if t != nil { - return nil, fmt.Errorf("invalid path: unexpected %q in type context", opType) - } - t = obj.Type() - obj = nil - continue - } - - if t == nil { - return nil, fmt.Errorf("invalid path: code %q in object context", code) - } - - // Inv: t != nil, obj == nil - - switch code { - case opElem: - hasElem, ok := t.(hasElem) // Pointer, Slice, Array, Chan, Map - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want pointer, slice, array, chan or map)", code, t, t) - } - t = hasElem.Elem() - - case opKey: - mapType, ok := t.(*types.Map) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want map)", code, t, t) - } - t = mapType.Key() - - case opParams: - sig, ok := t.(*types.Signature) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t) - } - t = sig.Params() - - case opResults: - sig, ok := t.(*types.Signature) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want signature)", code, t, t) - } - t = sig.Results() - - case opUnderlying: - named, ok := t.(*types.Named) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named)", code, t, t) - } - t = named.Underlying() - - case opTypeParam: - hasTypeParams, ok := t.(hasTypeParams) // Named, Signature - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named or signature)", code, t, t) - } - tparams := hasTypeParams.TypeParams() - if n := tparams.Len(); index >= n { - return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n) - } - t = tparams.At(index) - - case opConstraint: - tparam, ok := t.(*typeparams.TypeParam) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want type parameter)", code, t, t) - } - t = tparam.Constraint() - - case opAt: - tuple, ok := t.(*types.Tuple) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want tuple)", code, t, t) - } - if n := tuple.Len(); index >= n { - return nil, fmt.Errorf("tuple index %d out of range [0-%d)", index, n) - } - obj = tuple.At(index) - t = nil - - case opField: - structType, ok := t.(*types.Struct) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want struct)", code, t, t) - } - if n := structType.NumFields(); index >= n { - return nil, fmt.Errorf("field index %d out of range [0-%d)", index, n) - } - obj = structType.Field(index) - t = nil - - case opMethod: - switch t := t.(type) { - case *types.Interface: - if index >= t.NumMethods() { - return nil, fmt.Errorf("method index %d out of range [0-%d)", index, t.NumMethods()) - } - obj = t.Method(index) // Id-ordered - - case *types.Named: - if index >= t.NumMethods() { - return nil, fmt.Errorf("method index %d out of range [0-%d)", index, t.NumMethods()) - } - if skipMethodSorting { - obj = t.Method(index) - } else { - methods := namedMethods(t) // (unmemoized) - obj = methods[index] // Id-ordered - } - - default: - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want interface or named)", code, t, t) - } - t = nil - - case opObj: - hasObj, ok := t.(hasObj) - if !ok { - return nil, fmt.Errorf("cannot apply %q to %s (got %T, want named or type param)", code, t, t) - } - obj = hasObj.Obj() - t = nil - - default: - return nil, fmt.Errorf("invalid path: unknown code %q", code) - } - } - - if obj.Pkg() != pkg { - return nil, fmt.Errorf("path denotes %s, which belongs to a different package", obj) - } - - return obj, nil // success -} - -// namedMethods returns the methods of a Named type in ascending Id order. -func namedMethods(named *types.Named) []*types.Func { - methods := make([]*types.Func, named.NumMethods()) - for i := range methods { - methods[i] = named.Method(i) - } - sort.Slice(methods, func(i, j int) bool { - return methods[i].Id() < methods[j].Id() - }) - return methods -} - -// namedMethods is a memoization of the namedMethods function. Callers must not modify the result. -func (enc *Encoder) namedMethods(named *types.Named) []*types.Func { - m := enc.namedMethodsMemo - if m == nil { - m = make(map[*types.Named][]*types.Func) - enc.namedMethodsMemo = m - } - methods, ok := m[named] - if !ok { - methods = namedMethods(named) // allocates and sorts - m[named] = methods - } - return methods -} - -// scopeObjects is a memoization of scope objects. -// Callers must not modify the result. -func (enc *Encoder) scopeObjects(scope *types.Scope) []types.Object { - m := enc.scopeMemo - if m == nil { - m = make(map[*types.Scope][]types.Object) - enc.scopeMemo = m - } - objs, ok := m[scope] - if !ok { - names := scope.Names() // allocates and sorts - objs = make([]types.Object, len(names)) - for i, name := range names { - objs[i] = scope.Lookup(name) - } - m[scope] = objs - } - return objs -} diff --git a/go/vendor/golang.org/x/tools/internal/event/tag/tag.go b/go/vendor/golang.org/x/tools/internal/event/tag/tag.go deleted file mode 100644 index 581b26c2041..00000000000 --- a/go/vendor/golang.org/x/tools/internal/event/tag/tag.go +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package tag provides the labels used for telemetry throughout gopls. -package tag - -import ( - "golang.org/x/tools/internal/event/keys" -) - -var ( - // create the label keys we use - Method = keys.NewString("method", "") - StatusCode = keys.NewString("status.code", "") - StatusMessage = keys.NewString("status.message", "") - RPCID = keys.NewString("id", "") - RPCDirection = keys.NewString("direction", "") - File = keys.NewString("file", "") - Directory = keys.New("directory", "") - URI = keys.New("URI", "") - Package = keys.NewString("package", "") // sorted comma-separated list of Package IDs - PackagePath = keys.NewString("package_path", "") - Query = keys.New("query", "") - Snapshot = keys.NewUInt64("snapshot", "") - Operation = keys.NewString("operation", "") - - Position = keys.New("position", "") - Category = keys.NewString("category", "") - PackageCount = keys.NewInt("packages", "") - Files = keys.New("files", "") - Port = keys.NewInt("port", "") - Type = keys.New("type", "") - HoverKind = keys.NewString("hoverkind", "") - - NewServer = keys.NewString("new_server", "A new server was added") - EndServer = keys.NewString("end_server", "A server was shut down") - - ServerID = keys.NewString("server", "The server ID an event is related to") - Logfile = keys.NewString("logfile", "") - DebugAddress = keys.NewString("debug_address", "") - GoplsPath = keys.NewString("gopls_path", "") - ClientID = keys.NewString("client_id", "") - - Level = keys.NewInt("level", "The logging level") -) - -var ( - // create the stats we measure - Started = keys.NewInt64("started", "Count of started RPCs.") - ReceivedBytes = keys.NewInt64("received_bytes", "Bytes received.") //, unit.Bytes) - SentBytes = keys.NewInt64("sent_bytes", "Bytes sent.") //, unit.Bytes) - Latency = keys.NewFloat64("latency_ms", "Elapsed time in milliseconds") //, unit.Milliseconds) -) - -const ( - Inbound = "in" - Outbound = "out" -) From 761aede2df2d4b90a304c0839a648dcfc225c3bf Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Thu, 2 Nov 2023 21:01:00 +0100 Subject: [PATCH 032/430] perfomed review suggestions, make Decompression Sink simpler, uncomment the isBarrier, fix some naming issues in tests --- .../DecompressionBombs.ql | 36 ++------ .../MultipartAndFormRemoteSource.qll | 13 ++- .../example_good.go | 3 +- .../frameworks/DecompressionBombs.qll | 85 +++++-------------- .../DecompressionBombs.expected | 14 --- .../CWE-522-DecompressionBombs/test.go | 4 +- 6 files changed, 37 insertions(+), 118 deletions(-) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index 491426b0427..0b8f36fbc94 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -47,37 +47,17 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { ) } - predicate isBarrier(DataFlow::Node node, FlowState state) { - // //here I want to the CopyN return value be compared with < or > but I can't reach the tainted result - // // exists(Function f | f.hasQualifiedName("io", "CopyN") | - // // node = f.getACall().getArgument([0, 1]) and - // // TaintTracking::localExprTaint(f.getACall().getResult(_).asExpr(), - // // any(RelationalComparisonExpr e).getAChildExpr*()) - // // ) - // // or - // exists(Function f | f.hasQualifiedName("io", "LimitReader") | - // node = f.getACall().getArgument(0) and f.getACall().getArgument(1).isConst() - // ) and - // state = - // [ - // "ZstdNewReader", "XzNewReader", "GzipNewReader", "S2NewReader", "SnapyNewReader", - // "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", "ZipKlauspost" - // ] - none() + predicate isBarrier(DataFlow::Node node) { + // here I want to the CopyN return value be compared with < or > but I can't reach the tainted result + exists(Function f | f.hasQualifiedName("io", "CopyN") | + node = f.getACall().getArgument(1) and + TaintTracking::localExprTaint(f.getACall().getResult(0).asExpr(), + // only >=, <=,>,< + any(RelationalComparisonExpr rce).getAnOperand()) + ) } } -// // here I want to the CopyN return value be compared with < or > but I can't reach the tainted result -// predicate test(DataFlow::Node n2) { any(Test testconfig).hasFlowTo(n2) } -// class Test extends DataFlow::Configuration { -// Test() { this = "test" } -// override predicate isSource(DataFlow::Node source) { -// exists(Function f | f.hasQualifiedName("io", "CopyN") | -// f.getACall().getResult(0) = source -// ) -// } -// override predicate isSink(DataFlow::Node sink) { sink instanceof DataFlow::Node } -// } module DecompressionBombsFlow = TaintTracking::GlobalWithState; import DecompressionBombsFlow::PathGraph diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll b/go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll index 06bae726349..bb5f5d1f6f4 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll @@ -3,19 +3,18 @@ import semmle.go.dataflow.Properties class MimeMultipartFileHeader extends UntrustedFlowSource::Range { MimeMultipartFileHeader() { - exists(DataFlow::Variable v | - v.hasQualifiedName("mime/multipart.FileHeader", ["Filename", "Header"]) and - this = v.getARead() + exists(DataFlow::FieldReadNode frn | this = frn | + frn.getField() + .hasQualifiedName("mime/multipart.FileHeader", ["Filename", "Header"], "RequestBody") ) or exists(DataFlow::Method m | m.hasQualifiedName("mime/multipart.FileHeader", "Open") and - this = m.getACall() + this = m.getACall().getResult(0) ) or - exists(DataFlow::Variable v | - v.hasQualifiedName("mime/multipart.Form", "Value") and - this = v.getARead() + exists(DataFlow::FieldReadNode frn | + frn.getField().hasQualifiedName("mime/multipart.Form", "Value") ) } } diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/example_good.go b/go/ql/src/experimental/CWE-522-DecompressionBombs/example_good.go index 63ed5f1de49..32b7ca45efe 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/example_good.go +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/example_good.go @@ -12,8 +12,9 @@ func ZipOpenReader(filename string) { r, _ := zip.OpenReader(filename) var totalBytes int64 for _, f := range r.File { + rc, _ := f.Open() + totalBytes = 0 for { - rc, _ := f.Open() result, _ := io.CopyN(os.Stdout, rc, 68) if result == 0 { break diff --git a/go/ql/src/experimental/frameworks/DecompressionBombs.qll b/go/ql/src/experimental/frameworks/DecompressionBombs.qll index 03f1453ec05..299aa2e55c7 100644 --- a/go/ql/src/experimental/frameworks/DecompressionBombs.qll +++ b/go/ql/src/experimental/frameworks/DecompressionBombs.qll @@ -3,13 +3,6 @@ import go module DecompressionBombs { class FlowState = DataFlow::FlowState; - /** - * The Sinks of uncontrolled data decompression - */ - class Sink extends DataFlow::Node { - Sink() { this = any(Range r).sink() } - } - /** * The additional taint steps that need for creating taint tracking or dataflow. */ @@ -30,30 +23,20 @@ module DecompressionBombs { } /** - * A abstract class responsible for extending new decompression sinks + * The Sinks of uncontrolled data decompression */ - abstract private class Range extends DataFlow::Node { - /** - * Gets the sink of responsible for decompression node - * - * it can be a path, stream of compressed data, - * or a call to function that use pipe - */ - abstract DataFlow::Node sink(); - } + abstract class Sink extends DataFlow::Node { } /** * Provides Decompression Sinks and additional flow steps for `github.com/DataDog/zstd` package */ module DataDogZstd { - class TheSink extends Range { + class TheSink extends Sink { TheSink() { exists(Method f | f.hasQualifiedName("github.com/DataDog/zstd", "reader", "Read") | this = f.getACall().getReceiver() ) } - - override DataFlow::Node sink() { result = this } } class TheAdditionalTaintStep extends AdditionalTaintStep { @@ -83,7 +66,7 @@ module DecompressionBombs { * Provides Decompression Sinks and additional flow steps for `github.com/klauspost/compress/zstd` package */ module KlauspostZstd { - class TheSink extends Range { + class TheSink extends Sink { TheSink() { exists(Method f | f.hasQualifiedName("github.com/klauspost/compress/zstd", "Decoder", @@ -98,8 +81,6 @@ module DecompressionBombs { this = f.getACall().getReceiver() ) } - - override DataFlow::Node sink() { result = this } } class TheAdditionalTaintStep extends AdditionalTaintStep { @@ -195,14 +176,12 @@ module DecompressionBombs { * Provides Decompression Sinks and additional taint steps for `github.com/ulikunitz/xz` package */ module UlikunitzXz { - class TheSink extends Range { + class TheSink extends Sink { TheSink() { exists(Method f | f.hasQualifiedName("github.com/ulikunitz/xz", "Reader", "Read") | this = f.getACall().getReceiver() ) } - - override DataFlow::Node sink() { result = this } } class TheAdditionalTaintStep extends AdditionalTaintStep { @@ -231,14 +210,12 @@ module DecompressionBombs { * Provides Decompression Sinks and additional taint steps for `compress/gzip` package */ module CompressGzip { - class TheSink extends Range { + class TheSink extends Sink { TheSink() { exists(Method f | f.hasQualifiedName("compress/gzip", "Reader", "Read") | this = f.getACall().getReceiver() ) } - - override DataFlow::Node sink() { result = this } } class TheAdditionalTaintStep extends AdditionalTaintStep { @@ -268,7 +245,7 @@ module DecompressionBombs { * Provides Decompression Sinks and additional taint steps for `github.com/klauspost/compress/gzip` package */ module KlauspostGzip { - class TheSink extends Range { + class TheSink extends Sink { TheSink() { exists(Method f | f.hasQualifiedName("github.com/klauspost/compress/gzip", "Reader", "Read") @@ -283,8 +260,6 @@ module DecompressionBombs { this = f.getACall().getReceiver() ) } - - override DataFlow::Node sink() { result = this } } class TheAdditionalTaintStep extends AdditionalTaintStep { @@ -315,14 +290,12 @@ module DecompressionBombs { * Provides Decompression Sinks and additional taint steps for `compress/bzip2` package */ module CompressBzip2 { - class TheSink extends Range { + class TheSink extends Sink { TheSink() { exists(Method f | f.hasQualifiedName("compress/bzip2", "reader", "Read") | this = f.getACall().getReceiver() ) } - - override DataFlow::Node sink() { result = this } } class TheAdditionalTaintStep extends AdditionalTaintStep { @@ -352,14 +325,12 @@ module DecompressionBombs { * Provides Decompression Sinks and additional taint steps for `github.com/dsnet/compress/bzip2` package */ module DsnetBzip2 { - class TheSink extends Range { + class TheSink extends Sink { TheSink() { exists(Method f | f.hasQualifiedName("github.com/dsnet/compress/bzip2", "Reader", "Read") | this = f.getACall().getReceiver() ) } - - override DataFlow::Node sink() { result = this } } class TheAdditionalTaintStep extends AdditionalTaintStep { @@ -389,14 +360,12 @@ module DecompressionBombs { * Provides Decompression Sinks and additional taint steps for `github.com/dsnet/compress/flate` package */ module DsnetFlate { - class TheSink extends Range { + class TheSink extends Sink { TheSink() { exists(Method f | f.hasQualifiedName("github.com/dsnet/compress/flate", "Reader", "Read") | this = f.getACall().getReceiver() ) } - - override DataFlow::Node sink() { result = this } } class TheAdditionalTaintStep extends AdditionalTaintStep { @@ -426,14 +395,12 @@ module DecompressionBombs { * Provides Decompression Sinks and additional taint steps for `compress/flate` package */ module CompressFlate { - class TheSink extends Range { + class TheSink extends Sink { TheSink() { exists(Method f | f.hasQualifiedName("compress/flate", "decompressor", "Read") | this = f.getACall().getReceiver() ) } - - override DataFlow::Node sink() { result = this } } class TheAdditionalTaintStep extends AdditionalTaintStep { @@ -463,7 +430,7 @@ module DecompressionBombs { * Provides Decompression Sinks and additional taint steps for `github.com/klauspost/compress/flate` package */ module KlauspostFlate { - class TheSink extends Range { + class TheSink extends Sink { TheSink() { exists(Method f | f.hasQualifiedName("github.com/klauspost/compress/flate", "decompressor", "Read") @@ -471,8 +438,6 @@ module DecompressionBombs { this = f.getACall().getReceiver() ) } - - override DataFlow::Node sink() { result = this } } class TheAdditionalTaintStep extends AdditionalTaintStep { @@ -482,7 +447,7 @@ module DecompressionBombs { 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 + f.hasQualifiedName("github.com/klauspost/compress/flate", ["NewReaderDict", "NewReader"]) and call = f.getACall() | fromNode = call.getArgument(0) and @@ -502,7 +467,7 @@ module DecompressionBombs { * Provides Decompression Sinks and additional taint steps for `github.com/klauspost/compress/zlib` package */ module KlauspostZlib { - class TheSink extends Range { + class TheSink extends Sink { TheSink() { exists(Method f | f.hasQualifiedName("github.com/klauspost/compress/zlib", "reader", "Read") @@ -510,8 +475,6 @@ module DecompressionBombs { this = f.getACall().getReceiver() ) } - - override DataFlow::Node sink() { result = this } } class TheAdditionalTaintStep extends AdditionalTaintStep { @@ -541,14 +504,12 @@ module DecompressionBombs { * Provides Decompression Sinks and additional taint steps for `compress/zlib` package */ module CompressZlib { - class TheSink extends Range { + class TheSink extends Sink { TheSink() { exists(Method f | f.hasQualifiedName("compress/zlib", "reader", "Read") | this = f.getACall().getReceiver() ) } - - override DataFlow::Node sink() { result = this } } class TheAdditionalTaintStep extends AdditionalTaintStep { @@ -578,7 +539,7 @@ module DecompressionBombs { * Provides Decompression Sinks and additional taint steps for `github.com/golang/snappy` package */ module GolangSnappy { - class TheSink extends Range { + class TheSink extends Sink { TheSink() { exists(Method f | f.hasQualifiedName("github.com/golang/snappy", "Reader", ["Read", "ReadByte"]) @@ -586,8 +547,6 @@ module DecompressionBombs { this = f.getACall().getReceiver() ) } - - override DataFlow::Node sink() { result = this } } class TheAdditionalTaintStep extends AdditionalTaintStep { @@ -644,7 +603,7 @@ module DecompressionBombs { * Provides Decompression Sinks and additional taint steps for `github.com/klauspost/compress/s2` package */ module KlauspostS2 { - class TheSink extends Range { + class TheSink extends Sink { TheSink() { exists(Method m | m.hasQualifiedName("github.com/klauspost/compress/s2", "Reader", @@ -653,8 +612,6 @@ module DecompressionBombs { this = m.getACall().getReceiver() ) } - - override DataFlow::Node sink() { result = this } } class TheAdditionalTaintStep extends AdditionalTaintStep { @@ -684,14 +641,12 @@ module DecompressionBombs { * Provides Decompression Sinks for `"archive/tar` package */ module ArchiveTar { - class TheSink extends Range { + class TheSink extends Sink { TheSink() { exists(Method f | f.hasQualifiedName("archive/tar", "Reader", "Read") | this = f.getACall().getReceiver() ) } - - override DataFlow::Node sink() { result = this } } } @@ -699,7 +654,7 @@ module DecompressionBombs { * Provides Decompression Sinks for packages that use some standard IO interfaces/methods for reading decompressed data */ module GeneralReadIoSink { - class TheSink extends Range { + class TheSink extends Sink { TheSink() { exists(Function f | f.hasQualifiedName("io", ["Copy", "CopyBuffer", "CopyN"]) | this = f.getACall().getArgument(1) @@ -726,8 +681,6 @@ module DecompressionBombs { this = f.getACall().getArgument(0) ) } - - override DataFlow::Node sink() { result = this } } } } diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected index ac026a5576a..395b3be30f3 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -4,17 +4,11 @@ edges | test.go:59:16:59:27 | selection of Body | test.go:147:20:147:23 | definition of file | | test.go:60:16:60:46 | call to FormValue | test.go:106:20:106:27 | definition of filename | | test.go:61:20:61:48 | call to PostFormValue | test.go:77:24:77:31 | definition of filename | -| test.go:63:17:63:28 | selection of Body | test.go:97:21:97:23 | definition of src | | test.go:77:24:77:31 | definition of filename | test.go:78:25:78:32 | filename | | test.go:78:2:78:33 | ... := ...[0] | test.go:81:12:81:12 | f | | test.go:78:25:78:32 | filename | test.go:78:2:78:33 | ... := ...[0] | | test.go:81:3:81:19 | ... := ...[0] | test.go:83:37:83:38 | rc | | test.go:81:12:81:12 | f | test.go:81:3:81:19 | ... := ...[0] | -| test.go:97:21:97:23 | definition of src | test.go:98:29:98:31 | src | -| test.go:98:2:98:32 | ... := ...[0] | test.go:102:26:102:30 | gzipR | -| test.go:98:29:98:31 | src | test.go:98:2:98:32 | ... := ...[0] | -| test.go:102:11:102:44 | call to LimitReader | test.go:103:23:103:28 | newSrc | -| test.go:102:26:102:30 | gzipR | test.go:102:11:102:44 | call to LimitReader | | test.go:106:20:106:27 | definition of filename | test.go:108:25:108:32 | filename | | test.go:106:20:106:27 | definition of filename | test.go:121:43:121:50 | filename | | test.go:108:2:108:33 | ... := ...[0] | test.go:110:12:110:12 | f | @@ -166,19 +160,12 @@ nodes | test.go:59:16:59:27 | selection of Body | semmle.label | selection of Body | | test.go:60:16:60:46 | call to FormValue | semmle.label | call to FormValue | | test.go:61:20:61:48 | call to PostFormValue | semmle.label | call to PostFormValue | -| test.go:63:17:63:28 | selection of Body | semmle.label | selection of Body | | test.go:77:24:77:31 | definition of filename | semmle.label | definition of filename | | test.go:78:2:78:33 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:78:25:78:32 | filename | semmle.label | filename | | test.go:81:3:81:19 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:81:12:81:12 | f | semmle.label | f | | test.go:83:37:83:38 | rc | semmle.label | rc | -| test.go:97:21:97:23 | definition of src | semmle.label | definition of src | -| test.go:98:2:98:32 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:98:29:98:31 | src | semmle.label | src | -| test.go:102:11:102:44 | call to LimitReader | semmle.label | call to LimitReader | -| test.go:102:26:102:30 | gzipR | semmle.label | gzipR | -| test.go:103:23:103:28 | newSrc | semmle.label | newSrc | | test.go:106:20:106:27 | definition of filename | semmle.label | definition of filename | | test.go:108:2:108:33 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:108:25:108:32 | filename | semmle.label | filename | @@ -314,7 +301,6 @@ nodes subpaths #select | test.go:83:37:83:38 | rc | test.go:61:20:61:48 | call to PostFormValue | test.go:83:37:83:38 | rc | This decompression is $@. | test.go:61:20:61:48 | call to PostFormValue | decompressing compressed data without managing output size | -| test.go:103:23:103:28 | newSrc | test.go:63:17:63:28 | selection of Body | test.go:103:23:103:28 | newSrc | This decompression is $@. | test.go:63:17:63:28 | selection of Body | decompressing compressed data without managing output size | | test.go:112:37:112:38 | rc | test.go:60:16:60:46 | call to FormValue | test.go:112:37:112:38 | rc | This decompression is $@. | test.go:60:16:60:46 | call to FormValue | decompressing compressed data without managing output size | | test.go:125:37:125:38 | rc | test.go:60:16:60:46 | call to FormValue | test.go:125:37:125:38 | rc | This decompression is $@. | test.go:60:16:60:46 | call to FormValue | decompressing compressed data without managing output size | | test.go:142:36:142:51 | fileReaderCloser | test.go:58:15:58:26 | selection of Body | test.go:142:36:142:51 | fileReaderCloser | This decompression is $@. | test.go:58:15:58:26 | selection of Body | decompressing compressed data without managing output size | diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go index c5568ad9a51..b06dd4bbbff 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go @@ -94,12 +94,12 @@ func ZipOpenReaderSafe(filename string) { } } -func GZipsafeReader(src io.Reader, dst string) { +func GZipReader(src io.Reader, dst string) { gzipR, _ := gzip.NewReader(src) dstF, _ := os.OpenFile(dst, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0755) defer dstF.Close() var newSrc io.Reader - newSrc = io.LimitReader(gzipR, 1024*1024*5) + newSrc = io.Reader(gzipR) _, _ = io.Copy(dstF, newSrc) } From bd1ee9b937255f186b90c5d3b855cc80ce887883 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Thu, 2 Nov 2023 21:26:05 +0100 Subject: [PATCH 033/430] fix tests --- .../DecompressionBombs.expected | 12 ++++++++++++ .../experimental/CWE-522-DecompressionBombs/test.go | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected index 395b3be30f3..7934d6fa10a 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -4,11 +4,16 @@ edges | test.go:59:16:59:27 | selection of Body | test.go:147:20:147:23 | definition of file | | test.go:60:16:60:46 | call to FormValue | test.go:106:20:106:27 | definition of filename | | test.go:61:20:61:48 | call to PostFormValue | test.go:77:24:77:31 | definition of filename | +| test.go:63:13:63:24 | selection of Body | test.go:97:17:97:19 | definition of src | | test.go:77:24:77:31 | definition of filename | test.go:78:25:78:32 | filename | | test.go:78:2:78:33 | ... := ...[0] | test.go:81:12:81:12 | f | | test.go:78:25:78:32 | filename | test.go:78:2:78:33 | ... := ...[0] | | test.go:81:3:81:19 | ... := ...[0] | test.go:83:37:83:38 | rc | | test.go:81:12:81:12 | f | test.go:81:3:81:19 | ... := ...[0] | +| test.go:97:17:97:19 | definition of src | test.go:98:29:98:31 | src | +| test.go:98:2:98:32 | ... := ...[0] | test.go:102:11:102:26 | type conversion | +| test.go:98:29:98:31 | src | test.go:98:2:98:32 | ... := ...[0] | +| test.go:102:11:102:26 | type conversion | test.go:103:23:103:28 | newSrc | | test.go:106:20:106:27 | definition of filename | test.go:108:25:108:32 | filename | | test.go:106:20:106:27 | definition of filename | test.go:121:43:121:50 | filename | | test.go:108:2:108:33 | ... := ...[0] | test.go:110:12:110:12 | f | @@ -160,12 +165,18 @@ nodes | test.go:59:16:59:27 | selection of Body | semmle.label | selection of Body | | test.go:60:16:60:46 | call to FormValue | semmle.label | call to FormValue | | test.go:61:20:61:48 | call to PostFormValue | semmle.label | call to PostFormValue | +| test.go:63:13:63:24 | selection of Body | semmle.label | selection of Body | | test.go:77:24:77:31 | definition of filename | semmle.label | definition of filename | | test.go:78:2:78:33 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:78:25:78:32 | filename | semmle.label | filename | | test.go:81:3:81:19 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:81:12:81:12 | f | semmle.label | f | | test.go:83:37:83:38 | rc | semmle.label | rc | +| test.go:97:17:97:19 | definition of src | semmle.label | definition of src | +| test.go:98:2:98:32 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:98:29:98:31 | src | semmle.label | src | +| test.go:102:11:102:26 | type conversion | semmle.label | type conversion | +| test.go:103:23:103:28 | newSrc | semmle.label | newSrc | | test.go:106:20:106:27 | definition of filename | semmle.label | definition of filename | | test.go:108:2:108:33 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:108:25:108:32 | filename | semmle.label | filename | @@ -301,6 +312,7 @@ nodes subpaths #select | test.go:83:37:83:38 | rc | test.go:61:20:61:48 | call to PostFormValue | test.go:83:37:83:38 | rc | This decompression is $@. | test.go:61:20:61:48 | call to PostFormValue | decompressing compressed data without managing output size | +| test.go:103:23:103:28 | newSrc | test.go:63:13:63:24 | selection of Body | test.go:103:23:103:28 | newSrc | This decompression is $@. | test.go:63:13:63:24 | selection of Body | decompressing compressed data without managing output size | | test.go:112:37:112:38 | rc | test.go:60:16:60:46 | call to FormValue | test.go:112:37:112:38 | rc | This decompression is $@. | test.go:60:16:60:46 | call to FormValue | decompressing compressed data without managing output size | | test.go:125:37:125:38 | rc | test.go:60:16:60:46 | call to FormValue | test.go:125:37:125:38 | rc | This decompression is $@. | test.go:60:16:60:46 | call to FormValue | decompressing compressed data without managing output size | | test.go:142:36:142:51 | fileReaderCloser | test.go:58:15:58:26 | selection of Body | test.go:142:36:142:51 | fileReaderCloser | This decompression is $@. | test.go:58:15:58:26 | selection of Body | decompressing compressed data without managing output size | diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go index b06dd4bbbff..c9e9fae8108 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go @@ -60,7 +60,7 @@ func DecompressHandler(w http.ResponseWriter, request *http.Request) { ZipOpenReader(request.FormValue("filepathba")) ZipOpenReaderSafe(request.PostFormValue("test")) GZipOpenReaderSafe(request.PostFormValue("test")) - GZipsafeReader(request.Body, "dest") + GZipReader(request.Body, "dest") } func GZipOpenReaderSafe(filename string) { From e421c4944094e4c1349bb08bd7ebdb67a7142ce2 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Mon, 6 Nov 2023 10:53:52 +0100 Subject: [PATCH 034/430] fix multipart mistake :( --- .../MultipartAndFormRemoteSource.qll | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll b/go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll index bb5f5d1f6f4..1a726f0f1e2 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll @@ -4,17 +4,16 @@ import semmle.go.dataflow.Properties class MimeMultipartFileHeader extends UntrustedFlowSource::Range { MimeMultipartFileHeader() { exists(DataFlow::FieldReadNode frn | this = frn | - frn.getField() - .hasQualifiedName("mime/multipart.FileHeader", ["Filename", "Header"], "RequestBody") + frn.getField().hasQualifiedName("mime/multipart", "FileHeader", ["Filename", "Header"]) ) or exists(DataFlow::Method m | - m.hasQualifiedName("mime/multipart.FileHeader", "Open") and + m.hasQualifiedName("mime/multipart", "FileHeader", "Open") and this = m.getACall().getResult(0) ) or exists(DataFlow::FieldReadNode frn | - frn.getField().hasQualifiedName("mime/multipart.Form", "Value") + frn.getField().hasQualifiedName("mime/multipart", "Form", "Value") ) } } From 7af4b8de7b2c617725fc4aab55d919d005bb7dab Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Mon, 6 Nov 2023 10:58:00 +0100 Subject: [PATCH 035/430] fix isBarrier according to code review --- .../CWE-522-DecompressionBombs/DecompressionBombs.ql | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index 0b8f36fbc94..ed591868760 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -49,11 +49,12 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { predicate isBarrier(DataFlow::Node node) { // here I want to the CopyN return value be compared with < or > but I can't reach the tainted result - exists(Function f | f.hasQualifiedName("io", "CopyN") | - node = f.getACall().getArgument(1) and - TaintTracking::localExprTaint(f.getACall().getResult(0).asExpr(), - // only >=, <=,>,< - any(RelationalComparisonExpr rce).getAnOperand()) + exists(Function f, DataFlow::CallNode cn | + f.hasQualifiedName("io", "CopyN") and cn = f.getACall() + | + node = cn.getArgument(1) and + TaintTracking::localTaint(cn.getResult(0), + any(DataFlow::RelationalComparisonNode rcn).getAnOperand()) ) } } From b8c800608e1d02376365857ad20edc366b5945e1 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Mon, 6 Nov 2023 11:01:01 +0100 Subject: [PATCH 036/430] add an extended Class of string for FlowState --- .../src/experimental/frameworks/DecompressionBombs.qll | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/go/ql/src/experimental/frameworks/DecompressionBombs.qll b/go/ql/src/experimental/frameworks/DecompressionBombs.qll index 299aa2e55c7..ba03757b9c8 100644 --- a/go/ql/src/experimental/frameworks/DecompressionBombs.qll +++ b/go/ql/src/experimental/frameworks/DecompressionBombs.qll @@ -1,7 +1,15 @@ import go module DecompressionBombs { - class FlowState = DataFlow::FlowState; + class FlowState extends string { + FlowState() { + this = + [ + "ZstdNewReader", "XzNewReader", "GzipNewReader", "S2NewReader", "SnapyNewReader", + "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", "ZipKlauspost", "" + ] + } + } /** * The additional taint steps that need for creating taint tracking or dataflow. From 75e01d3648a7440b90fe0dd5b9465ee1362e204c Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Tue, 21 Nov 2023 20:14:54 +0100 Subject: [PATCH 037/430] Thanks to @owen-mc that provided a good solution of that I couldn't solve that myself --- .../DecompressionBombs.ql | 30 +++++++++++++++++-- .../DecompressionBombs.expected | 14 --------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index ed591868760..7085b8099c9 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -48,17 +48,41 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { } predicate isBarrier(DataFlow::Node node) { - // here I want to the CopyN return value be compared with < or > but I can't reach the tainted result + // `io.CopyN` should not be a sink if its return value flows to a + // comparison (<, >, <=, >=). exists(Function f, DataFlow::CallNode cn | f.hasQualifiedName("io", "CopyN") and cn = f.getACall() | node = cn.getArgument(1) and - TaintTracking::localTaint(cn.getResult(0), - any(DataFlow::RelationalComparisonNode rcn).getAnOperand()) + localStep*(cn.getResult(0), 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) +} + module DecompressionBombsFlow = TaintTracking::GlobalWithState; import DecompressionBombsFlow::PathGraph diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected index 7934d6fa10a..a99da03bf00 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -3,13 +3,7 @@ edges | test.go:58:15:58:26 | selection of Body | test.go:136:19:136:22 | definition of file | | test.go:59:16:59:27 | selection of Body | test.go:147:20:147:23 | definition of file | | test.go:60:16:60:46 | call to FormValue | test.go:106:20:106:27 | definition of filename | -| test.go:61:20:61:48 | call to PostFormValue | test.go:77:24:77:31 | definition of filename | | test.go:63:13:63:24 | selection of Body | test.go:97:17:97:19 | definition of src | -| test.go:77:24:77:31 | definition of filename | test.go:78:25:78:32 | filename | -| test.go:78:2:78:33 | ... := ...[0] | test.go:81:12:81:12 | f | -| test.go:78:25:78:32 | filename | test.go:78:2:78:33 | ... := ...[0] | -| test.go:81:3:81:19 | ... := ...[0] | test.go:83:37:83:38 | rc | -| test.go:81:12:81:12 | f | test.go:81:3:81:19 | ... := ...[0] | | test.go:97:17:97:19 | definition of src | test.go:98:29:98:31 | src | | test.go:98:2:98:32 | ... := ...[0] | test.go:102:11:102:26 | type conversion | | test.go:98:29:98:31 | src | test.go:98:2:98:32 | ... := ...[0] | @@ -164,14 +158,7 @@ nodes | test.go:58:15:58:26 | selection of Body | semmle.label | selection of Body | | test.go:59:16:59:27 | selection of Body | semmle.label | selection of Body | | test.go:60:16:60:46 | call to FormValue | semmle.label | call to FormValue | -| test.go:61:20:61:48 | call to PostFormValue | semmle.label | call to PostFormValue | | test.go:63:13:63:24 | selection of Body | semmle.label | selection of Body | -| test.go:77:24:77:31 | definition of filename | semmle.label | definition of filename | -| test.go:78:2:78:33 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:78:25:78:32 | filename | semmle.label | filename | -| test.go:81:3:81:19 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:81:12:81:12 | f | semmle.label | f | -| test.go:83:37:83:38 | rc | semmle.label | rc | | test.go:97:17:97:19 | definition of src | semmle.label | definition of src | | test.go:98:2:98:32 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:98:29:98:31 | src | semmle.label | src | @@ -311,7 +298,6 @@ nodes | test.go:297:25:297:31 | tarRead | semmle.label | tarRead | subpaths #select -| test.go:83:37:83:38 | rc | test.go:61:20:61:48 | call to PostFormValue | test.go:83:37:83:38 | rc | This decompression is $@. | test.go:61:20:61:48 | call to PostFormValue | decompressing compressed data without managing output size | | test.go:103:23:103:28 | newSrc | test.go:63:13:63:24 | selection of Body | test.go:103:23:103:28 | newSrc | This decompression is $@. | test.go:63:13:63:24 | selection of Body | decompressing compressed data without managing output size | | test.go:112:37:112:38 | rc | test.go:60:16:60:46 | call to FormValue | test.go:112:37:112:38 | rc | This decompression is $@. | test.go:60:16:60:46 | call to FormValue | decompressing compressed data without managing output size | | test.go:125:37:125:38 | rc | test.go:60:16:60:46 | call to FormValue | test.go:125:37:125:38 | rc | This decompression is $@. | test.go:60:16:60:46 | call to FormValue | decompressing compressed data without managing output size | From fabde6e0ff11470fc1bbd93c6e14a8aac547d041 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Tue, 21 Nov 2023 20:54:38 +0100 Subject: [PATCH 038/430] fix tests and remove tarfile tar.Reader as sink --- .../frameworks/DecompressionBombs.qll | 13 - .../DecompressionBombs.expected | 734 ++++++++++-------- .../CWE-522-DecompressionBombs/test.go | 342 ++++---- 3 files changed, 601 insertions(+), 488 deletions(-) diff --git a/go/ql/src/experimental/frameworks/DecompressionBombs.qll b/go/ql/src/experimental/frameworks/DecompressionBombs.qll index ba03757b9c8..42af56e7b8e 100644 --- a/go/ql/src/experimental/frameworks/DecompressionBombs.qll +++ b/go/ql/src/experimental/frameworks/DecompressionBombs.qll @@ -645,19 +645,6 @@ module DecompressionBombs { } } - /** - * Provides Decompression Sinks for `"archive/tar` package - */ - module ArchiveTar { - class TheSink extends Sink { - TheSink() { - exists(Method f | f.hasQualifiedName("archive/tar", "Reader", "Read") | - this = f.getACall().getReceiver() - ) - } - } - } - /** * Provides Decompression Sinks for packages that use some standard IO interfaces/methods for reading decompressed data */ diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected index a99da03bf00..70fd9862516 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -1,341 +1,401 @@ edges -| test.go:57:18:57:29 | selection of Body | test.go:166:22:166:25 | definition of file | -| test.go:58:15:58:26 | selection of Body | test.go:136:19:136:22 | definition of file | -| test.go:59:16:59:27 | selection of Body | test.go:147:20:147:23 | definition of file | -| test.go:60:16:60:46 | call to FormValue | test.go:106:20:106:27 | definition of filename | -| test.go:63:13:63:24 | selection of Body | test.go:97:17:97:19 | definition of src | -| test.go:97:17:97:19 | definition of src | test.go:98:29:98:31 | src | -| test.go:98:2:98:32 | ... := ...[0] | test.go:102:11:102:26 | type conversion | -| test.go:98:29:98:31 | src | test.go:98:2:98:32 | ... := ...[0] | -| test.go:102:11:102:26 | type conversion | test.go:103:23:103:28 | newSrc | -| test.go:106:20:106:27 | definition of filename | test.go:108:25:108:32 | filename | -| test.go:106:20:106:27 | definition of filename | test.go:121:43:121:50 | filename | -| test.go:108:2:108:33 | ... := ...[0] | test.go:110:12:110:12 | f | -| test.go:108:25:108:32 | filename | test.go:108:2:108:33 | ... := ...[0] | -| test.go:110:3:110:19 | ... := ...[0] | test.go:112:37:112:38 | rc | -| test.go:110:12:110:12 | f | test.go:110:3:110:19 | ... := ...[0] | -| test.go:121:2:121:51 | ... := ...[0] | test.go:122:20:122:29 | implicit dereference | -| test.go:121:43:121:50 | filename | test.go:121:2:121:51 | ... := ...[0] | -| test.go:122:20:122:29 | implicit dereference | test.go:122:20:122:29 | implicit dereference | -| test.go:122:20:122:29 | implicit dereference | test.go:122:20:122:29 | implicit read of field Reader | -| test.go:122:20:122:29 | implicit read of field Reader | test.go:123:12:123:12 | f | -| test.go:123:12:123:12 | f | test.go:123:12:123:19 | call to Open | -| test.go:123:12:123:19 | call to Open | test.go:125:37:125:38 | rc | -| test.go:136:19:136:22 | definition of file | test.go:137:25:137:28 | file | -| test.go:137:2:137:29 | ... := ...[0] | test.go:138:48:138:52 | file1 | -| test.go:137:25:137:28 | file | test.go:137:2:137:29 | ... := ...[0] | -| test.go:138:2:138:69 | ... := ...[0] | test.go:141:26:141:29 | file | -| test.go:138:32:138:53 | call to NewReader | test.go:138:2:138:69 | ... := ...[0] | -| test.go:138:48:138:52 | file1 | test.go:138:32:138:53 | call to NewReader | -| test.go:141:3:141:36 | ... := ...[0] | test.go:142:36:142:51 | fileReaderCloser | -| test.go:141:26:141:29 | file | test.go:141:3:141:36 | ... := ...[0] | -| test.go:147:20:147:23 | definition of file | test.go:148:25:148:28 | file | -| test.go:148:2:148:29 | ... := ...[0] | test.go:149:66:149:70 | file2 | -| test.go:148:25:148:28 | file | test.go:148:2:148:29 | ... := ...[0] | -| test.go:149:2:149:87 | ... := ...[0] | test.go:153:26:153:29 | file | -| test.go:149:50:149:71 | call to NewReader | test.go:149:2:149:87 | ... := ...[0] | -| test.go:149:66:149:70 | file2 | test.go:149:50:149:71 | call to NewReader | -| test.go:153:26:153:29 | file | test.go:153:26:153:36 | call to Open | -| test.go:153:26:153:36 | call to Open | test.go:154:36:154:51 | fileReaderCloser | -| test.go:166:22:166:25 | definition of file | test.go:169:41:169:44 | file | -| test.go:166:22:166:25 | definition of file | test.go:175:28:175:31 | file | -| test.go:166:22:166:25 | definition of file | test.go:182:28:182:31 | file | -| test.go:166:22:166:25 | definition of file | test.go:189:45:189:48 | file | -| test.go:166:22:166:25 | definition of file | test.go:195:41:195:44 | file | -| test.go:166:22:166:25 | definition of file | test.go:202:47:202:50 | file | -| test.go:166:22:166:25 | definition of file | test.go:209:29:209:32 | file | -| test.go:166:22:166:25 | definition of file | test.go:215:30:215:33 | file | -| test.go:166:22:166:25 | definition of file | test.go:222:48:222:51 | file | -| test.go:166:22:166:25 | definition of file | test.go:231:22:231:25 | file | -| test.go:166:22:166:25 | definition of file | test.go:241:33:241:36 | file | -| test.go:166:22:166:25 | definition of file | test.go:247:47:247:50 | file | -| test.go:166:22:166:25 | definition of file | test.go:256:43:256:46 | file | -| test.go:166:22:166:25 | definition of file | test.go:264:38:264:41 | file | -| test.go:166:22:166:25 | definition of file | test.go:275:33:275:36 | file | -| test.go:166:22:166:25 | definition of file | test.go:281:29:281:32 | file | -| test.go:169:3:169:73 | ... := ...[0] | test.go:171:3:171:12 | bzip2dsnet | -| test.go:169:3:169:73 | ... := ...[0] | test.go:172:27:172:36 | bzip2dsnet | -| test.go:169:41:169:44 | file | test.go:169:3:169:73 | ... := ...[0] | -| test.go:172:13:172:37 | call to NewReader | test.go:287:2:287:8 | tarRead | -| test.go:172:13:172:37 | call to NewReader | test.go:297:25:297:31 | tarRead | -| test.go:172:27:172:36 | bzip2dsnet | test.go:172:13:172:37 | call to NewReader | -| test.go:175:12:175:32 | call to NewReader | test.go:177:3:177:7 | Bzip2 | -| test.go:175:12:175:32 | call to NewReader | test.go:178:27:178:31 | Bzip2 | -| test.go:175:28:175:31 | file | test.go:175:12:175:32 | call to NewReader | -| test.go:178:13:178:32 | call to NewReader | test.go:287:2:287:8 | tarRead | -| test.go:178:13:178:32 | call to NewReader | test.go:297:25:297:31 | tarRead | -| test.go:178:27:178:31 | Bzip2 | test.go:178:13:178:32 | call to NewReader | -| test.go:182:12:182:32 | call to NewReader | test.go:184:3:184:7 | Flate | -| test.go:182:12:182:32 | call to NewReader | test.go:185:27:185:31 | Flate | -| test.go:182:28:182:31 | file | test.go:182:12:182:32 | call to NewReader | -| test.go:185:13:185:32 | call to NewReader | test.go:287:2:287:8 | tarRead | -| test.go:185:13:185:32 | call to NewReader | test.go:297:25:297:31 | tarRead | -| test.go:185:27:185:31 | Flate | test.go:185:13:185:32 | call to NewReader | -| test.go:189:20:189:49 | call to NewReader | test.go:191:3:191:15 | zlibklauspost | -| test.go:189:20:189:49 | call to NewReader | test.go:192:27:192:39 | zlibklauspost | -| test.go:189:45:189:48 | file | test.go:189:20:189:49 | call to NewReader | -| test.go:192:13:192:40 | call to NewReader | test.go:287:2:287:8 | tarRead | -| test.go:192:13:192:40 | call to NewReader | test.go:297:25:297:31 | tarRead | -| test.go:192:27:192:39 | zlibklauspost | test.go:192:13:192:40 | call to NewReader | -| test.go:195:3:195:73 | ... := ...[0] | test.go:197:3:197:12 | flatedsnet | -| test.go:195:3:195:73 | ... := ...[0] | test.go:198:27:198:36 | flatedsnet | -| test.go:195:41:195:44 | file | test.go:195:3:195:73 | ... := ...[0] | -| test.go:198:13:198:37 | call to NewReader | test.go:287:2:287:8 | tarRead | -| test.go:198:13:198:37 | call to NewReader | test.go:297:25:297:31 | tarRead | -| test.go:198:27:198:36 | flatedsnet | test.go:198:13:198:37 | call to NewReader | -| test.go:202:3:202:51 | ... := ...[0] | test.go:204:3:204:15 | zlibklauspost | -| test.go:202:3:202:51 | ... := ...[0] | test.go:205:27:205:39 | zlibklauspost | -| test.go:202:47:202:50 | file | test.go:202:3:202:51 | ... := ...[0] | -| test.go:205:13:205:40 | call to NewReader | test.go:287:2:287:8 | tarRead | -| test.go:205:13:205:40 | call to NewReader | test.go:297:25:297:31 | tarRead | -| test.go:205:27:205:39 | zlibklauspost | test.go:205:13:205:40 | call to NewReader | -| test.go:209:3:209:33 | ... := ...[0] | test.go:211:3:211:6 | Zlib | -| test.go:209:3:209:33 | ... := ...[0] | test.go:212:27:212:30 | Zlib | -| test.go:209:29:209:32 | file | test.go:209:3:209:33 | ... := ...[0] | -| test.go:212:13:212:31 | call to NewReader | test.go:287:2:287:8 | tarRead | -| test.go:212:13:212:31 | call to NewReader | test.go:297:25:297:31 | tarRead | -| test.go:212:27:212:30 | Zlib | test.go:212:13:212:31 | call to NewReader | -| test.go:215:13:215:34 | call to NewReader | test.go:217:3:217:8 | Snappy | -| test.go:215:13:215:34 | call to NewReader | test.go:218:3:218:8 | Snappy | -| test.go:215:13:215:34 | call to NewReader | test.go:219:27:219:32 | Snappy | -| test.go:215:30:215:33 | file | test.go:215:13:215:34 | call to NewReader | -| test.go:219:13:219:33 | call to NewReader | test.go:287:2:287:8 | tarRead | -| test.go:219:13:219:33 | call to NewReader | test.go:297:25:297:31 | tarRead | -| test.go:219:27:219:32 | Snappy | test.go:219:13:219:33 | call to NewReader | -| test.go:222:22:222:52 | call to NewReader | test.go:228:27:228:41 | snappyklauspost | -| test.go:222:48:222:51 | file | test.go:222:22:222:52 | call to NewReader | -| test.go:228:13:228:42 | call to NewReader | test.go:287:2:287:8 | tarRead | -| test.go:228:13:228:42 | call to NewReader | test.go:297:25:297:31 | tarRead | -| test.go:228:27:228:41 | snappyklauspost | test.go:228:13:228:42 | call to NewReader | -| test.go:231:9:231:26 | call to NewReader | test.go:233:3:233:4 | S2 | -| test.go:231:9:231:26 | call to NewReader | test.go:235:3:235:4 | S2 | -| test.go:231:9:231:26 | call to NewReader | test.go:238:27:238:28 | S2 | -| test.go:231:22:231:25 | file | test.go:231:9:231:26 | call to NewReader | -| test.go:238:13:238:29 | call to NewReader | test.go:287:2:287:8 | tarRead | -| test.go:238:13:238:29 | call to NewReader | test.go:297:25:297:31 | tarRead | -| test.go:238:27:238:28 | S2 | test.go:238:13:238:29 | call to NewReader | -| test.go:241:3:241:37 | ... := ...[0] | test.go:243:3:243:10 | gzipRead | -| test.go:241:3:241:37 | ... := ...[0] | test.go:244:27:244:34 | gzipRead | -| test.go:241:33:241:36 | file | test.go:241:3:241:37 | ... := ...[0] | -| test.go:244:13:244:35 | call to NewReader | test.go:287:2:287:8 | tarRead | -| test.go:244:13:244:35 | call to NewReader | test.go:297:25:297:31 | tarRead | -| test.go:244:27:244:34 | gzipRead | test.go:244:13:244:35 | call to NewReader | -| test.go:247:3:247:51 | ... := ...[0] | test.go:249:3:249:15 | gzipklauspost | -| test.go:247:3:247:51 | ... := ...[0] | test.go:251:3:251:15 | gzipklauspost | -| test.go:247:3:247:51 | ... := ...[0] | test.go:252:27:252:39 | gzipklauspost | -| test.go:247:47:247:50 | file | test.go:247:3:247:51 | ... := ...[0] | -| test.go:252:13:252:40 | call to NewReader | test.go:287:2:287:8 | tarRead | -| test.go:252:13:252:40 | call to NewReader | test.go:297:25:297:31 | tarRead | -| test.go:252:27:252:39 | gzipklauspost | test.go:252:13:252:40 | call to NewReader | -| test.go:256:3:256:47 | ... := ...[0] | test.go:260:3:260:11 | gzippgzip | -| test.go:256:3:256:47 | ... := ...[0] | test.go:261:27:261:35 | gzippgzip | -| test.go:256:43:256:46 | file | test.go:256:3:256:47 | ... := ...[0] | -| test.go:261:13:261:36 | call to NewReader | test.go:287:2:287:8 | tarRead | -| test.go:261:13:261:36 | call to NewReader | test.go:297:25:297:31 | tarRead | -| test.go:261:27:261:35 | gzippgzip | test.go:261:13:261:36 | call to NewReader | -| test.go:264:3:264:42 | ... := ...[0] | test.go:266:3:266:6 | zstd | -| test.go:264:3:264:42 | ... := ...[0] | test.go:268:3:268:6 | zstd | -| test.go:264:3:264:42 | ... := ...[0] | test.go:270:3:270:6 | zstd | -| test.go:264:3:264:42 | ... := ...[0] | test.go:271:27:271:30 | zstd | -| test.go:264:38:264:41 | file | test.go:264:3:264:42 | ... := ...[0] | -| test.go:271:13:271:31 | call to NewReader | test.go:287:2:287:8 | tarRead | -| test.go:271:13:271:31 | call to NewReader | test.go:297:25:297:31 | tarRead | -| test.go:271:27:271:30 | zstd | test.go:271:13:271:31 | call to NewReader | -| test.go:275:11:275:37 | call to NewReader | test.go:277:3:277:6 | zstd | -| test.go:275:11:275:37 | call to NewReader | test.go:278:27:278:30 | zstd | -| test.go:275:33:275:36 | file | test.go:275:11:275:37 | call to NewReader | -| test.go:278:13:278:31 | call to NewReader | test.go:287:2:287:8 | tarRead | -| test.go:278:13:278:31 | call to NewReader | test.go:297:25:297:31 | tarRead | -| test.go:278:27:278:30 | zstd | test.go:278:13:278:31 | call to NewReader | -| test.go:281:3:281:33 | ... := ...[0] | test.go:283:3:283:8 | xzRead | -| test.go:281:3:281:33 | ... := ...[0] | test.go:284:27:284:32 | xzRead | -| test.go:281:29:281:32 | file | test.go:281:3:281:33 | ... := ...[0] | -| test.go:284:13:284:33 | call to NewReader | test.go:287:2:287:8 | tarRead | -| test.go:284:13:284:33 | call to NewReader | test.go:297:25:297:31 | tarRead | -| test.go:284:27:284:32 | xzRead | test.go:284:13:284:33 | call to NewReader | +| test.go:56:15:56:26 | selection of Body | test.go:151:19:151:22 | definition of file | +| test.go:57:16:57:27 | selection of Body | test.go:162:20:162:23 | definition of file | +| test.go:58:16:58:46 | call to FormValue | test.go:121:20:121:27 | definition of filename | +| test.go:61:13:61:24 | selection of Body | test.go:112:17:112:19 | definition of src | +| test.go:62:15:62:26 | selection of Body | test.go:151:19:151:22 | definition of file | +| test.go:63:16:63:27 | selection of Body | test.go:162:20:162:23 | definition of file | +| test.go:64:13:64:24 | selection of Body | test.go:174:17:174:20 | definition of file | +| test.go:65:8:65:19 | selection of Body | test.go:185:12:185:15 | definition of file | +| test.go:66:8:66:19 | selection of Body | test.go:195:12:195:15 | definition of file | +| test.go:67:17:67:28 | selection of Body | test.go:205:21:205:24 | definition of file | +| test.go:68:13:68:24 | selection of Body | test.go:216:17:216:20 | definition of file | +| test.go:69:16:69:27 | selection of Body | test.go:226:20:226:23 | definition of file | +| test.go:70:7:70:18 | selection of Body | test.go:236:11:236:14 | definition of file | +| test.go:71:9:71:20 | selection of Body | test.go:246:13:246:16 | definition of file | +| test.go:72:5:72:16 | selection of Body | test.go:270:9:270:12 | definition of file | +| test.go:73:7:73:18 | selection of Body | test.go:282:11:282:14 | definition of file | +| test.go:74:16:74:27 | selection of Body | test.go:292:20:292:23 | definition of file | +| test.go:75:16:75:27 | selection of Body | test.go:304:20:304:23 | definition of file | +| test.go:76:17:76:28 | selection of Body | test.go:316:21:316:24 | definition of file | +| test.go:77:15:77:26 | selection of Body | test.go:330:19:330:22 | definition of file | +| test.go:78:5:78:16 | selection of Body | test.go:340:9:340:12 | definition of file | +| test.go:112:17:112:19 | definition of src | test.go:113:29:113:31 | src | +| test.go:113:2:113:32 | ... := ...[0] | test.go:117:11:117:26 | type conversion | +| test.go:113:29:113:31 | src | test.go:113:2:113:32 | ... := ...[0] | +| test.go:117:11:117:26 | type conversion | test.go:118:23:118:28 | newSrc | +| test.go:121:20:121:27 | definition of filename | test.go:123:25:123:32 | filename | +| test.go:121:20:121:27 | definition of filename | test.go:136:43:136:50 | filename | +| test.go:123:2:123:33 | ... := ...[0] | test.go:125:12:125:12 | f | +| test.go:123:25:123:32 | filename | test.go:123:2:123:33 | ... := ...[0] | +| test.go:125:3:125:19 | ... := ...[0] | test.go:127:37:127:38 | rc | +| test.go:125:12:125:12 | f | test.go:125:3:125:19 | ... := ...[0] | +| test.go:136:2:136:51 | ... := ...[0] | test.go:137:20:137:29 | implicit dereference | +| test.go:136:43:136:50 | filename | test.go:136:2:136:51 | ... := ...[0] | +| test.go:137:20:137:29 | implicit dereference | test.go:137:20:137:29 | implicit dereference | +| test.go:137:20:137:29 | implicit dereference | test.go:137:20:137:29 | implicit read of field Reader | +| test.go:137:20:137:29 | implicit read of field Reader | test.go:138:12:138:12 | f | +| test.go:138:12:138:12 | f | test.go:138:12:138:19 | call to Open | +| test.go:138:12:138:19 | call to Open | test.go:140:37:140:38 | rc | +| test.go:151:19:151:22 | definition of file | test.go:152:25:152:28 | file | +| test.go:152:2:152:29 | ... := ...[0] | test.go:153:48:153:52 | file1 | +| test.go:152:25:152:28 | file | test.go:152:2:152:29 | ... := ...[0] | +| test.go:153:2:153:69 | ... := ...[0] | test.go:156:26:156:29 | file | +| test.go:153:32:153:53 | call to NewReader | test.go:153:2:153:69 | ... := ...[0] | +| test.go:153:48:153:52 | file1 | test.go:153:32:153:53 | call to NewReader | +| test.go:156:3:156:36 | ... := ...[0] | test.go:157:36:157:51 | fileReaderCloser | +| test.go:156:26:156:29 | file | test.go:156:3:156:36 | ... := ...[0] | +| test.go:162:20:162:23 | definition of file | test.go:163:25:163:28 | file | +| test.go:163:2:163:29 | ... := ...[0] | test.go:164:66:164:70 | file2 | +| test.go:163:25:163:28 | file | test.go:163:2:163:29 | ... := ...[0] | +| test.go:164:2:164:87 | ... := ...[0] | test.go:168:26:168:29 | file | +| test.go:164:50:164:71 | call to NewReader | test.go:164:2:164:87 | ... := ...[0] | +| test.go:164:66:164:70 | file2 | test.go:164:50:164:71 | call to NewReader | +| test.go:168:26:168:29 | file | test.go:168:26:168:36 | call to Open | +| test.go:168:26:168:36 | call to Open | test.go:169:36:169:51 | fileReaderCloser | +| test.go:174:17:174:20 | definition of file | test.go:177:40:177:43 | file | +| test.go:177:2:177:72 | ... := ...[0] | test.go:179:2:179:11 | bzip2dsnet | +| test.go:177:2:177:72 | ... := ...[0] | test.go:180:26:180:35 | bzip2dsnet | +| test.go:177:40:177:43 | file | test.go:177:2:177:72 | ... := ...[0] | +| test.go:180:12:180:36 | call to NewReader | test.go:182:18:182:24 | tarRead | +| test.go:180:26:180:35 | bzip2dsnet | test.go:180:12:180:36 | call to NewReader | +| test.go:182:18:182:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:185:12:185:15 | definition of file | test.go:188:27:188:30 | file | +| test.go:188:11:188:31 | call to NewReader | test.go:190:2:190:6 | Bzip2 | +| test.go:188:11:188:31 | call to NewReader | test.go:191:26:191:30 | Bzip2 | +| test.go:188:27:188:30 | file | test.go:188:11:188:31 | call to NewReader | +| test.go:191:12:191:31 | call to NewReader | test.go:193:18:193:24 | tarRead | +| test.go:191:26:191:30 | Bzip2 | test.go:191:12:191:31 | call to NewReader | +| test.go:193:18:193:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:195:12:195:15 | definition of file | test.go:198:27:198:30 | file | +| test.go:198:11:198:31 | call to NewReader | test.go:200:2:200:6 | Flate | +| test.go:198:11:198:31 | call to NewReader | test.go:201:26:201:30 | Flate | +| test.go:198:27:198:30 | file | test.go:198:11:198:31 | call to NewReader | +| test.go:201:12:201:31 | call to NewReader | test.go:203:18:203:24 | tarRead | +| test.go:201:26:201:30 | Flate | test.go:201:12:201:31 | call to NewReader | +| test.go:203:18:203:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:205:21:205:24 | definition of file | test.go:209:44:209:47 | file | +| test.go:209:19:209:48 | call to NewReader | test.go:211:2:211:14 | zlibklauspost | +| test.go:209:19:209:48 | call to NewReader | test.go:212:26:212:38 | zlibklauspost | +| test.go:209:44:209:47 | file | test.go:209:19:209:48 | call to NewReader | +| test.go:212:12:212:39 | call to NewReader | test.go:214:18:214:24 | tarRead | +| test.go:212:26:212:38 | zlibklauspost | test.go:212:12:212:39 | call to NewReader | +| test.go:214:18:214:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:216:17:216:20 | definition of file | test.go:219:40:219:43 | file | +| test.go:219:2:219:72 | ... := ...[0] | test.go:221:2:221:11 | flatedsnet | +| test.go:219:2:219:72 | ... := ...[0] | test.go:222:26:222:35 | flatedsnet | +| test.go:219:40:219:43 | file | test.go:219:2:219:72 | ... := ...[0] | +| test.go:222:12:222:36 | call to NewReader | test.go:224:18:224:24 | tarRead | +| test.go:222:26:222:35 | flatedsnet | test.go:222:12:222:36 | call to NewReader | +| test.go:224:18:224:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:226:20:226:23 | definition of file | test.go:229:46:229:49 | file | +| test.go:229:2:229:50 | ... := ...[0] | test.go:231:2:231:14 | zlibklauspost | +| test.go:229:2:229:50 | ... := ...[0] | test.go:232:26:232:38 | zlibklauspost | +| test.go:229:46:229:49 | file | test.go:229:2:229:50 | ... := ...[0] | +| test.go:232:12:232:39 | call to NewReader | test.go:234:18:234:24 | tarRead | +| test.go:232:26:232:38 | zlibklauspost | test.go:232:12:232:39 | call to NewReader | +| test.go:234:18:234:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:236:11:236:14 | definition of file | test.go:239:28:239:31 | file | +| test.go:239:2:239:32 | ... := ...[0] | test.go:241:2:241:5 | Zlib | +| test.go:239:2:239:32 | ... := ...[0] | test.go:242:26:242:29 | Zlib | +| test.go:239:28:239:31 | file | test.go:239:2:239:32 | ... := ...[0] | +| test.go:242:12:242:30 | call to NewReader | test.go:244:18:244:24 | tarRead | +| test.go:242:26:242:29 | Zlib | test.go:242:12:242:30 | call to NewReader | +| test.go:244:18:244:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:246:13:246:16 | definition of file | test.go:249:29:249:32 | file | +| test.go:249:12:249:33 | call to NewReader | test.go:251:2:251:7 | Snappy | +| test.go:249:12:249:33 | call to NewReader | test.go:252:2:252:7 | Snappy | +| test.go:249:12:249:33 | call to NewReader | test.go:253:26:253:31 | Snappy | +| test.go:249:29:249:32 | file | test.go:249:12:249:33 | call to NewReader | +| test.go:253:12:253:32 | call to NewReader | test.go:255:18:255:24 | tarRead | +| test.go:253:26:253:31 | Snappy | test.go:253:12:253:32 | call to NewReader | +| test.go:255:18:255:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:270:9:270:12 | definition of file | test.go:273:21:273:24 | file | +| test.go:273:8:273:25 | call to NewReader | test.go:275:2:275:3 | S2 | +| test.go:273:8:273:25 | call to NewReader | test.go:277:2:277:3 | S2 | +| test.go:273:8:273:25 | call to NewReader | test.go:278:26:278:27 | S2 | +| test.go:273:21:273:24 | file | test.go:273:8:273:25 | call to NewReader | +| test.go:278:12:278:28 | call to NewReader | test.go:280:18:280:24 | tarRead | +| test.go:278:26:278:27 | S2 | test.go:278:12:278:28 | call to NewReader | +| test.go:280:18:280:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:282:11:282:14 | definition of file | test.go:285:32:285:35 | file | +| test.go:285:2:285:36 | ... := ...[0] | test.go:287:2:287:9 | gzipRead | +| test.go:285:2:285:36 | ... := ...[0] | test.go:288:26:288:33 | gzipRead | +| test.go:285:32:285:35 | file | test.go:285:2:285:36 | ... := ...[0] | +| test.go:288:12:288:34 | call to NewReader | test.go:290:18:290:24 | tarRead | +| test.go:288:26:288:33 | gzipRead | test.go:288:12:288:34 | call to NewReader | +| test.go:290:18:290:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:292:20:292:23 | definition of file | test.go:295:46:295:49 | file | +| test.go:295:2:295:50 | ... := ...[0] | test.go:297:2:297:14 | gzipklauspost | +| test.go:295:2:295:50 | ... := ...[0] | test.go:299:2:299:14 | gzipklauspost | +| test.go:295:2:295:50 | ... := ...[0] | test.go:300:26:300:38 | gzipklauspost | +| test.go:295:46:295:49 | file | test.go:295:2:295:50 | ... := ...[0] | +| test.go:300:12:300:39 | call to NewReader | test.go:302:18:302:24 | tarRead | +| test.go:300:26:300:38 | gzipklauspost | test.go:300:12:300:39 | call to NewReader | +| test.go:302:18:302:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:304:20:304:23 | definition of file | test.go:307:42:307:45 | file | +| test.go:307:2:307:46 | ... := ...[0] | test.go:311:2:311:10 | gzippgzip | +| test.go:307:2:307:46 | ... := ...[0] | test.go:312:26:312:34 | gzippgzip | +| test.go:307:42:307:45 | file | test.go:307:2:307:46 | ... := ...[0] | +| test.go:312:12:312:35 | call to NewReader | test.go:314:18:314:24 | tarRead | +| test.go:312:26:312:34 | gzippgzip | test.go:312:12:312:35 | call to NewReader | +| test.go:314:18:314:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:316:21:316:24 | definition of file | test.go:319:37:319:40 | file | +| test.go:319:2:319:41 | ... := ...[0] | test.go:321:2:321:5 | zstd | +| test.go:319:2:319:41 | ... := ...[0] | test.go:323:2:323:5 | zstd | +| test.go:319:2:319:41 | ... := ...[0] | test.go:325:2:325:5 | zstd | +| test.go:319:2:319:41 | ... := ...[0] | test.go:326:26:326:29 | zstd | +| test.go:319:37:319:40 | file | test.go:319:2:319:41 | ... := ...[0] | +| test.go:326:12:326:30 | call to NewReader | test.go:328:18:328:24 | tarRead | +| test.go:326:26:326:29 | zstd | test.go:326:12:326:30 | call to NewReader | +| test.go:328:18:328:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:330:19:330:22 | definition of file | test.go:333:32:333:35 | file | +| test.go:333:10:333:36 | call to NewReader | test.go:335:2:335:5 | zstd | +| test.go:333:10:333:36 | call to NewReader | test.go:336:26:336:29 | zstd | +| test.go:333:32:333:35 | file | test.go:333:10:333:36 | call to NewReader | +| test.go:336:12:336:30 | call to NewReader | test.go:338:18:338:24 | tarRead | +| test.go:336:26:336:29 | zstd | test.go:336:12:336:30 | call to NewReader | +| test.go:338:18:338:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:340:9:340:12 | definition of file | test.go:343:28:343:31 | file | +| test.go:343:2:343:32 | ... := ...[0] | test.go:345:2:345:7 | xzRead | +| test.go:343:2:343:32 | ... := ...[0] | test.go:346:26:346:31 | xzRead | +| test.go:343:28:343:31 | file | test.go:343:2:343:32 | ... := ...[0] | +| test.go:346:12:346:32 | call to NewReader | test.go:348:18:348:24 | tarRead | +| test.go:346:26:346:31 | xzRead | test.go:346:12:346:32 | call to NewReader | +| test.go:348:18:348:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | +| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | +| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | +| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | +| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | +| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | +| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | +| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | nodes -| test.go:57:18:57:29 | selection of Body | semmle.label | selection of Body | -| test.go:58:15:58:26 | selection of Body | semmle.label | selection of Body | -| test.go:59:16:59:27 | selection of Body | semmle.label | selection of Body | -| test.go:60:16:60:46 | call to FormValue | semmle.label | call to FormValue | -| test.go:63:13:63:24 | selection of Body | semmle.label | selection of Body | -| test.go:97:17:97:19 | definition of src | semmle.label | definition of src | -| test.go:98:2:98:32 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:98:29:98:31 | src | semmle.label | src | -| test.go:102:11:102:26 | type conversion | semmle.label | type conversion | -| test.go:103:23:103:28 | newSrc | semmle.label | newSrc | -| test.go:106:20:106:27 | definition of filename | semmle.label | definition of filename | -| test.go:108:2:108:33 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:108:25:108:32 | filename | semmle.label | filename | -| test.go:110:3:110:19 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:110:12:110:12 | f | semmle.label | f | -| test.go:112:37:112:38 | rc | semmle.label | rc | -| test.go:121:2:121:51 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:121:43:121:50 | filename | semmle.label | filename | -| test.go:122:20:122:29 | implicit dereference | semmle.label | implicit dereference | -| test.go:122:20:122:29 | implicit read of field Reader | semmle.label | implicit read of field Reader | -| test.go:123:12:123:12 | f | semmle.label | f | -| test.go:123:12:123:19 | call to Open | semmle.label | call to Open | -| test.go:125:37:125:38 | rc | semmle.label | rc | -| test.go:136:19:136:22 | definition of file | semmle.label | definition of file | -| test.go:137:2:137:29 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:137:25:137:28 | file | semmle.label | file | -| test.go:138:2:138:69 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:138:32:138:53 | call to NewReader | semmle.label | call to NewReader | -| test.go:138:48:138:52 | file1 | semmle.label | file1 | -| test.go:141:3:141:36 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:141:26:141:29 | file | semmle.label | file | -| test.go:142:36:142:51 | fileReaderCloser | semmle.label | fileReaderCloser | -| test.go:147:20:147:23 | definition of file | semmle.label | definition of file | -| test.go:148:2:148:29 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:148:25:148:28 | file | semmle.label | file | -| test.go:149:2:149:87 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:149:50:149:71 | call to NewReader | semmle.label | call to NewReader | -| test.go:149:66:149:70 | file2 | semmle.label | file2 | -| test.go:153:26:153:29 | file | semmle.label | file | -| test.go:153:26:153:36 | call to Open | semmle.label | call to Open | -| test.go:154:36:154:51 | fileReaderCloser | semmle.label | fileReaderCloser | -| test.go:166:22:166:25 | definition of file | semmle.label | definition of file | -| test.go:169:3:169:73 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:169:41:169:44 | file | semmle.label | file | -| test.go:171:3:171:12 | bzip2dsnet | semmle.label | bzip2dsnet | -| test.go:172:13:172:37 | call to NewReader | semmle.label | call to NewReader | -| test.go:172:27:172:36 | bzip2dsnet | semmle.label | bzip2dsnet | -| test.go:175:12:175:32 | call to NewReader | semmle.label | call to NewReader | -| test.go:175:28:175:31 | file | semmle.label | file | -| test.go:177:3:177:7 | Bzip2 | semmle.label | Bzip2 | -| test.go:178:13:178:32 | call to NewReader | semmle.label | call to NewReader | -| test.go:178:27:178:31 | Bzip2 | semmle.label | Bzip2 | -| test.go:182:12:182:32 | call to NewReader | semmle.label | call to NewReader | -| test.go:182:28:182:31 | file | semmle.label | file | -| test.go:184:3:184:7 | Flate | semmle.label | Flate | -| test.go:185:13:185:32 | call to NewReader | semmle.label | call to NewReader | -| test.go:185:27:185:31 | Flate | semmle.label | Flate | -| test.go:189:20:189:49 | call to NewReader | semmle.label | call to NewReader | -| test.go:189:45:189:48 | file | semmle.label | file | -| test.go:191:3:191:15 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:192:13:192:40 | call to NewReader | semmle.label | call to NewReader | -| test.go:192:27:192:39 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:195:3:195:73 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:195:41:195:44 | file | semmle.label | file | -| test.go:197:3:197:12 | flatedsnet | semmle.label | flatedsnet | -| test.go:198:13:198:37 | call to NewReader | semmle.label | call to NewReader | -| test.go:198:27:198:36 | flatedsnet | semmle.label | flatedsnet | -| test.go:202:3:202:51 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:202:47:202:50 | file | semmle.label | file | -| test.go:204:3:204:15 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:205:13:205:40 | call to NewReader | semmle.label | call to NewReader | -| test.go:205:27:205:39 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:209:3:209:33 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:209:29:209:32 | file | semmle.label | file | -| test.go:211:3:211:6 | Zlib | semmle.label | Zlib | -| test.go:212:13:212:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:212:27:212:30 | Zlib | semmle.label | Zlib | -| test.go:215:13:215:34 | call to NewReader | semmle.label | call to NewReader | -| test.go:215:30:215:33 | file | semmle.label | file | -| test.go:217:3:217:8 | Snappy | semmle.label | Snappy | -| test.go:218:3:218:8 | Snappy | semmle.label | Snappy | -| test.go:219:13:219:33 | call to NewReader | semmle.label | call to NewReader | -| test.go:219:27:219:32 | Snappy | semmle.label | Snappy | -| test.go:222:22:222:52 | call to NewReader | semmle.label | call to NewReader | -| test.go:222:48:222:51 | file | semmle.label | file | -| test.go:228:13:228:42 | call to NewReader | semmle.label | call to NewReader | -| test.go:228:27:228:41 | snappyklauspost | semmle.label | snappyklauspost | -| test.go:231:9:231:26 | call to NewReader | semmle.label | call to NewReader | -| test.go:231:22:231:25 | file | semmle.label | file | -| test.go:233:3:233:4 | S2 | semmle.label | S2 | -| test.go:235:3:235:4 | S2 | semmle.label | S2 | -| test.go:238:13:238:29 | call to NewReader | semmle.label | call to NewReader | -| test.go:238:27:238:28 | S2 | semmle.label | S2 | -| test.go:241:3:241:37 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:241:33:241:36 | file | semmle.label | file | -| test.go:243:3:243:10 | gzipRead | semmle.label | gzipRead | -| test.go:244:13:244:35 | call to NewReader | semmle.label | call to NewReader | -| test.go:244:27:244:34 | gzipRead | semmle.label | gzipRead | -| test.go:247:3:247:51 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:247:47:247:50 | file | semmle.label | file | -| test.go:249:3:249:15 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:251:3:251:15 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:252:13:252:40 | call to NewReader | semmle.label | call to NewReader | -| test.go:252:27:252:39 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:256:3:256:47 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:256:43:256:46 | file | semmle.label | file | -| test.go:260:3:260:11 | gzippgzip | semmle.label | gzippgzip | -| test.go:261:13:261:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:261:27:261:35 | gzippgzip | semmle.label | gzippgzip | -| test.go:264:3:264:42 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:264:38:264:41 | file | semmle.label | file | -| test.go:266:3:266:6 | zstd | semmle.label | zstd | -| test.go:268:3:268:6 | zstd | semmle.label | zstd | -| test.go:270:3:270:6 | zstd | semmle.label | zstd | -| test.go:271:13:271:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:271:27:271:30 | zstd | semmle.label | zstd | -| test.go:275:11:275:37 | call to NewReader | semmle.label | call to NewReader | -| test.go:275:33:275:36 | file | semmle.label | file | -| test.go:277:3:277:6 | zstd | semmle.label | zstd | -| test.go:278:13:278:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:278:27:278:30 | zstd | semmle.label | zstd | -| test.go:281:3:281:33 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:281:29:281:32 | file | semmle.label | file | -| test.go:283:3:283:8 | xzRead | semmle.label | xzRead | -| test.go:284:13:284:33 | call to NewReader | semmle.label | call to NewReader | -| test.go:284:27:284:32 | xzRead | semmle.label | xzRead | -| test.go:287:2:287:8 | tarRead | semmle.label | tarRead | -| test.go:287:2:287:8 | tarRead | semmle.label | tarRead | -| test.go:287:2:287:8 | tarRead | semmle.label | tarRead | -| test.go:287:2:287:8 | tarRead | semmle.label | tarRead | -| test.go:287:2:287:8 | tarRead | semmle.label | tarRead | -| test.go:287:2:287:8 | tarRead | semmle.label | tarRead | -| test.go:287:2:287:8 | tarRead | semmle.label | tarRead | -| test.go:287:2:287:8 | tarRead | semmle.label | tarRead | -| test.go:297:25:297:31 | tarRead | semmle.label | tarRead | -| test.go:297:25:297:31 | tarRead | semmle.label | tarRead | -| test.go:297:25:297:31 | tarRead | semmle.label | tarRead | -| test.go:297:25:297:31 | tarRead | semmle.label | tarRead | -| test.go:297:25:297:31 | tarRead | semmle.label | tarRead | -| test.go:297:25:297:31 | tarRead | semmle.label | tarRead | -| test.go:297:25:297:31 | tarRead | semmle.label | tarRead | -| test.go:297:25:297:31 | tarRead | semmle.label | tarRead | +| test.go:56:15:56:26 | selection of Body | semmle.label | selection of Body | +| test.go:57:16:57:27 | selection of Body | semmle.label | selection of Body | +| test.go:58:16:58:46 | call to FormValue | semmle.label | call to FormValue | +| test.go:61:13:61:24 | selection of Body | semmle.label | selection of Body | +| test.go:62:15:62:26 | selection of Body | semmle.label | selection of Body | +| test.go:63:16:63:27 | selection of Body | semmle.label | selection of Body | +| test.go:64:13:64:24 | selection of Body | semmle.label | selection of Body | +| test.go:65:8:65: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:67:17:67:28 | selection of Body | semmle.label | selection of Body | +| test.go:68:13:68:24 | selection of Body | semmle.label | selection of Body | +| test.go:69:16:69:27 | selection of Body | semmle.label | selection of Body | +| test.go:70:7:70:18 | selection of Body | semmle.label | selection of Body | +| test.go:71:9:71:20 | selection of Body | semmle.label | selection of Body | +| test.go:72:5:72:16 | selection of Body | semmle.label | selection of Body | +| test.go:73:7:73:18 | selection of Body | semmle.label | selection of Body | +| test.go:74:16:74:27 | selection of Body | semmle.label | selection of Body | +| test.go:75:16:75:27 | selection of Body | semmle.label | selection of Body | +| test.go:76:17:76:28 | selection of Body | semmle.label | selection of Body | +| test.go:77:15:77:26 | selection of Body | semmle.label | selection of Body | +| test.go:78:5:78:16 | selection of Body | semmle.label | selection of Body | +| test.go:112:17:112:19 | definition of src | semmle.label | definition of src | +| test.go:113:2:113:32 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:113:29:113:31 | src | semmle.label | src | +| test.go:117:11:117:26 | type conversion | semmle.label | type conversion | +| test.go:118:23:118:28 | newSrc | semmle.label | newSrc | +| test.go:121:20:121:27 | definition of filename | semmle.label | definition of filename | +| test.go:123:2:123:33 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:123:25:123:32 | filename | semmle.label | filename | +| test.go:125:3:125:19 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:125:12:125:12 | f | semmle.label | f | +| test.go:127:37:127:38 | rc | semmle.label | rc | +| test.go:136:2:136:51 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:136:43:136:50 | filename | semmle.label | filename | +| test.go:137:20:137:29 | implicit dereference | semmle.label | implicit dereference | +| test.go:137:20:137:29 | implicit read of field Reader | semmle.label | implicit read of field Reader | +| test.go:138:12:138:12 | f | semmle.label | f | +| test.go:138:12:138:19 | call to Open | semmle.label | call to Open | +| test.go:140:37:140:38 | rc | semmle.label | rc | +| test.go:151:19:151:22 | definition of file | semmle.label | definition of file | +| test.go:152:2:152:29 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:152:25:152:28 | file | semmle.label | file | +| test.go:153:2:153:69 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:153:32:153:53 | call to NewReader | semmle.label | call to NewReader | +| test.go:153:48:153:52 | file1 | semmle.label | file1 | +| test.go:156:3:156:36 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:156:26:156:29 | file | semmle.label | file | +| test.go:157:36:157:51 | fileReaderCloser | semmle.label | fileReaderCloser | +| test.go:162:20:162:23 | definition of file | semmle.label | definition of file | +| test.go:163:2:163:29 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:163:25:163:28 | file | semmle.label | file | +| test.go:164:2:164:87 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:164:50:164:71 | call to NewReader | semmle.label | call to NewReader | +| test.go:164:66:164:70 | file2 | semmle.label | file2 | +| test.go:168:26:168:29 | file | semmle.label | file | +| test.go:168:26:168:36 | call to Open | semmle.label | call to Open | +| test.go:169:36:169:51 | fileReaderCloser | semmle.label | fileReaderCloser | +| test.go:174:17:174:20 | definition of file | semmle.label | definition of file | +| test.go:177:2:177:72 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:177:40:177:43 | file | semmle.label | file | +| test.go:179:2:179:11 | bzip2dsnet | semmle.label | bzip2dsnet | +| test.go:180:12:180:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:180:26:180:35 | bzip2dsnet | semmle.label | bzip2dsnet | +| test.go:182:18:182:24 | tarRead | semmle.label | tarRead | +| test.go:185:12:185:15 | definition of file | semmle.label | definition of file | +| test.go:188:11:188:31 | call to NewReader | semmle.label | call to NewReader | +| test.go:188:27:188:30 | file | semmle.label | file | +| test.go:190:2:190:6 | Bzip2 | semmle.label | Bzip2 | +| test.go:191:12:191:31 | call to NewReader | semmle.label | call to NewReader | +| test.go:191:26:191:30 | Bzip2 | semmle.label | Bzip2 | +| test.go:193:18:193:24 | tarRead | semmle.label | tarRead | +| test.go:195:12:195:15 | definition of file | semmle.label | definition of file | +| test.go:198:11:198:31 | call to NewReader | semmle.label | call to NewReader | +| test.go:198:27:198:30 | file | semmle.label | file | +| test.go:200:2:200:6 | Flate | semmle.label | Flate | +| test.go:201:12:201:31 | call to NewReader | semmle.label | call to NewReader | +| test.go:201:26:201:30 | Flate | semmle.label | Flate | +| test.go:203:18:203:24 | tarRead | semmle.label | tarRead | +| test.go:205:21:205:24 | definition of file | semmle.label | definition of file | +| test.go:209:19:209:48 | call to NewReader | semmle.label | call to NewReader | +| test.go:209:44:209:47 | file | semmle.label | file | +| test.go:211:2:211:14 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:212:12:212:39 | call to NewReader | semmle.label | call to NewReader | +| test.go:212:26:212:38 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:214:18:214:24 | tarRead | semmle.label | tarRead | +| test.go:216:17:216:20 | definition of file | semmle.label | definition of file | +| test.go:219:2:219:72 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:219:40:219:43 | file | semmle.label | file | +| test.go:221:2:221:11 | flatedsnet | semmle.label | flatedsnet | +| test.go:222:12:222:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:222:26:222:35 | flatedsnet | semmle.label | flatedsnet | +| test.go:224:18:224:24 | tarRead | semmle.label | tarRead | +| test.go:226:20:226:23 | definition of file | semmle.label | definition of file | +| test.go:229:2:229:50 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:229:46:229:49 | file | semmle.label | file | +| test.go:231:2:231:14 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:232:12:232:39 | call to NewReader | semmle.label | call to NewReader | +| test.go:232:26:232:38 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:234:18:234:24 | tarRead | semmle.label | tarRead | +| test.go:236:11:236:14 | definition of file | semmle.label | definition of file | +| test.go:239:2:239:32 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:239:28:239:31 | file | semmle.label | file | +| test.go:241:2:241:5 | Zlib | semmle.label | Zlib | +| test.go:242:12:242:30 | call to NewReader | semmle.label | call to NewReader | +| test.go:242:26:242:29 | Zlib | semmle.label | Zlib | +| test.go:244:18:244:24 | tarRead | semmle.label | tarRead | +| test.go:246:13:246:16 | definition of file | semmle.label | definition of file | +| test.go:249:12:249:33 | call to NewReader | semmle.label | call to NewReader | +| test.go:249:29:249:32 | file | semmle.label | file | +| test.go:251:2:251:7 | Snappy | semmle.label | Snappy | +| test.go:252:2:252:7 | Snappy | semmle.label | Snappy | +| test.go:253:12:253:32 | call to NewReader | semmle.label | call to NewReader | +| test.go:253:26:253:31 | Snappy | semmle.label | Snappy | +| test.go:255:18:255:24 | tarRead | semmle.label | tarRead | +| test.go:270:9:270:12 | definition of file | semmle.label | definition of file | +| test.go:273:8:273:25 | call to NewReader | semmle.label | call to NewReader | +| test.go:273:21:273:24 | file | semmle.label | file | +| test.go:275:2:275:3 | S2 | semmle.label | S2 | +| test.go:277:2:277:3 | S2 | semmle.label | S2 | +| test.go:278:12:278:28 | call to NewReader | semmle.label | call to NewReader | +| test.go:278:26:278:27 | S2 | semmle.label | S2 | +| test.go:280:18:280:24 | tarRead | semmle.label | tarRead | +| test.go:282:11:282:14 | definition of file | semmle.label | definition of file | +| test.go:285:2:285:36 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:285:32:285:35 | file | semmle.label | file | +| test.go:287:2:287:9 | gzipRead | semmle.label | gzipRead | +| test.go:288:12:288:34 | call to NewReader | semmle.label | call to NewReader | +| test.go:288:26:288:33 | gzipRead | semmle.label | gzipRead | +| test.go:290:18:290:24 | tarRead | semmle.label | tarRead | +| test.go:292:20:292:23 | definition of file | semmle.label | definition of file | +| test.go:295:2:295:50 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:295:46:295:49 | file | semmle.label | file | +| test.go:297:2:297:14 | gzipklauspost | semmle.label | gzipklauspost | +| test.go:299:2:299:14 | gzipklauspost | semmle.label | gzipklauspost | +| test.go:300:12:300:39 | call to NewReader | semmle.label | call to NewReader | +| test.go:300:26:300:38 | gzipklauspost | semmle.label | gzipklauspost | +| test.go:302:18:302:24 | tarRead | semmle.label | tarRead | +| test.go:304:20:304:23 | definition of file | semmle.label | definition of file | +| test.go:307:2:307:46 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:307:42:307:45 | file | semmle.label | file | +| test.go:311:2:311:10 | gzippgzip | semmle.label | gzippgzip | +| test.go:312:12:312:35 | call to NewReader | semmle.label | call to NewReader | +| test.go:312:26:312:34 | gzippgzip | semmle.label | gzippgzip | +| test.go:314:18:314:24 | tarRead | semmle.label | tarRead | +| test.go:316:21:316:24 | definition of file | semmle.label | definition of file | +| test.go:319:2:319:41 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:319:37:319:40 | file | semmle.label | file | +| test.go:321:2:321:5 | zstd | semmle.label | zstd | +| test.go:323:2:323:5 | zstd | semmle.label | zstd | +| test.go:325:2:325:5 | zstd | semmle.label | zstd | +| test.go:326:12:326:30 | call to NewReader | semmle.label | call to NewReader | +| test.go:326:26:326:29 | zstd | semmle.label | zstd | +| test.go:328:18:328:24 | tarRead | semmle.label | tarRead | +| test.go:330:19:330:22 | definition of file | semmle.label | definition of file | +| test.go:333:10:333:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:333:32:333:35 | file | semmle.label | file | +| test.go:335:2:335:5 | zstd | semmle.label | zstd | +| test.go:336:12:336:30 | call to NewReader | semmle.label | call to NewReader | +| test.go:336:26:336:29 | zstd | semmle.label | zstd | +| test.go:338:18:338:24 | tarRead | semmle.label | tarRead | +| test.go:340:9:340:12 | definition of file | semmle.label | definition of file | +| test.go:343:2:343:32 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:343:28:343:31 | file | semmle.label | file | +| test.go:345:2:345:7 | xzRead | semmle.label | xzRead | +| test.go:346:12:346:32 | call to NewReader | semmle.label | call to NewReader | +| test.go:346:26:346:31 | xzRead | semmle.label | xzRead | +| test.go:348:18:348:24 | tarRead | semmle.label | tarRead | +| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | +| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | +| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | +| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | +| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | +| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | +| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | +| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | subpaths #select -| test.go:103:23:103:28 | newSrc | test.go:63:13:63:24 | selection of Body | test.go:103:23:103:28 | newSrc | This decompression is $@. | test.go:63:13:63:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:112:37:112:38 | rc | test.go:60:16:60:46 | call to FormValue | test.go:112:37:112:38 | rc | This decompression is $@. | test.go:60:16:60:46 | call to FormValue | decompressing compressed data without managing output size | -| test.go:125:37:125:38 | rc | test.go:60:16:60:46 | call to FormValue | test.go:125:37:125:38 | rc | This decompression is $@. | test.go:60:16:60:46 | call to FormValue | decompressing compressed data without managing output size | -| test.go:142:36:142:51 | fileReaderCloser | test.go:58:15:58:26 | selection of Body | test.go:142:36:142:51 | fileReaderCloser | This decompression is $@. | test.go:58:15:58:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:154:36:154:51 | fileReaderCloser | test.go:59:16:59:27 | selection of Body | test.go:154:36:154:51 | fileReaderCloser | This decompression is $@. | test.go:59:16:59:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:171:3:171:12 | bzip2dsnet | test.go:57:18:57:29 | selection of Body | test.go:171:3:171:12 | bzip2dsnet | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:177:3:177:7 | Bzip2 | test.go:57:18:57:29 | selection of Body | test.go:177:3:177:7 | Bzip2 | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:184:3:184:7 | Flate | test.go:57:18:57:29 | selection of Body | test.go:184:3:184:7 | Flate | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:191:3:191:15 | zlibklauspost | test.go:57:18:57:29 | selection of Body | test.go:191:3:191:15 | zlibklauspost | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:197:3:197:12 | flatedsnet | test.go:57:18:57:29 | selection of Body | test.go:197:3:197:12 | flatedsnet | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:204:3:204:15 | zlibklauspost | test.go:57:18:57:29 | selection of Body | test.go:204:3:204:15 | zlibklauspost | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:211:3:211:6 | Zlib | test.go:57:18:57:29 | selection of Body | test.go:211:3:211:6 | Zlib | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:217:3:217:8 | Snappy | test.go:57:18:57:29 | selection of Body | test.go:217:3:217:8 | Snappy | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:218:3:218:8 | Snappy | test.go:57:18:57:29 | selection of Body | test.go:218:3:218:8 | Snappy | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:233:3:233:4 | S2 | test.go:57:18:57:29 | selection of Body | test.go:233:3:233:4 | S2 | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:235:3:235:4 | S2 | test.go:57:18:57:29 | selection of Body | test.go:235:3:235:4 | S2 | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:243:3:243:10 | gzipRead | test.go:57:18:57:29 | selection of Body | test.go:243:3:243:10 | gzipRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:249:3:249:15 | gzipklauspost | test.go:57:18:57:29 | selection of Body | test.go:249:3:249:15 | gzipklauspost | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:251:3:251:15 | gzipklauspost | test.go:57:18:57:29 | selection of Body | test.go:251:3:251:15 | gzipklauspost | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:260:3:260:11 | gzippgzip | test.go:57:18:57:29 | selection of Body | test.go:260:3:260:11 | gzippgzip | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:266:3:266:6 | zstd | test.go:57:18:57:29 | selection of Body | test.go:266:3:266:6 | zstd | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:268:3:268:6 | zstd | test.go:57:18:57:29 | selection of Body | test.go:268:3:268:6 | zstd | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:270:3:270:6 | zstd | test.go:57:18:57:29 | selection of Body | test.go:270:3:270:6 | zstd | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:277:3:277:6 | zstd | test.go:57:18:57:29 | selection of Body | test.go:277:3:277:6 | zstd | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:283:3:283:8 | xzRead | test.go:57:18:57:29 | selection of Body | test.go:283:3:283:8 | xzRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:287:2:287:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:287:2:287:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:287:2:287:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:287:2:287:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:287:2:287:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:287:2:287:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:287:2:287:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:287:2:287:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:287:2:287:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:287:2:287:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:287:2:287:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:287:2:287:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:287:2:287:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:287:2:287:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:287:2:287:8 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:287:2:287:8 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:297:25:297:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:297:25:297:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:297:25:297:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:297:25:297:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:297:25:297:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:297:25:297:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:297:25:297:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:297:25:297:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:297:25:297:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:297:25:297:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:297:25:297:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:297:25:297:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:297:25:297:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:297:25:297:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:297:25:297:31 | tarRead | test.go:57:18:57:29 | selection of Body | test.go:297:25:297:31 | tarRead | This decompression is $@. | test.go:57:18:57:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:118:23:118:28 | newSrc | test.go:61:13:61:24 | selection of Body | test.go:118:23:118:28 | newSrc | This decompression is $@. | test.go:61:13:61:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:127:37:127:38 | rc | test.go:58:16:58:46 | call to FormValue | test.go:127:37:127:38 | rc | This decompression is $@. | test.go:58:16:58:46 | call to FormValue | decompressing compressed data without managing output size | +| test.go:140:37:140:38 | rc | test.go:58:16:58:46 | call to FormValue | test.go:140:37:140:38 | rc | This decompression is $@. | test.go:58:16:58:46 | call to FormValue | decompressing compressed data without managing output size | +| test.go:157:36:157:51 | fileReaderCloser | test.go:56:15:56:26 | selection of Body | test.go:157:36:157:51 | fileReaderCloser | This decompression is $@. | test.go:56:15:56:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:157:36:157:51 | fileReaderCloser | test.go:62:15:62:26 | selection of Body | test.go:157:36:157:51 | fileReaderCloser | This decompression is $@. | test.go:62:15:62:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:169:36:169:51 | fileReaderCloser | test.go:57:16:57:27 | selection of Body | test.go:169:36:169:51 | fileReaderCloser | This decompression is $@. | test.go:57:16:57:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:169:36:169:51 | fileReaderCloser | test.go:63:16:63:27 | selection of Body | test.go:169:36:169:51 | fileReaderCloser | This decompression is $@. | test.go:63:16:63:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:179:2:179:11 | bzip2dsnet | test.go:64:13:64:24 | selection of Body | test.go:179:2:179:11 | bzip2dsnet | This decompression is $@. | test.go:64:13:64:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:190:2:190:6 | Bzip2 | test.go:65:8:65:19 | selection of Body | test.go:190:2:190:6 | Bzip2 | This decompression is $@. | test.go:65:8:65:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:200:2:200:6 | Flate | test.go:66:8:66:19 | selection of Body | test.go:200:2:200:6 | Flate | This decompression is $@. | test.go:66:8:66:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:211:2:211:14 | zlibklauspost | test.go:67:17:67:28 | selection of Body | test.go:211:2:211:14 | zlibklauspost | This decompression is $@. | test.go:67:17:67:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:221:2:221:11 | flatedsnet | test.go:68:13:68:24 | selection of Body | test.go:221:2:221:11 | flatedsnet | This decompression is $@. | test.go:68:13:68:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:231:2:231:14 | zlibklauspost | test.go:69:16:69:27 | selection of Body | test.go:231:2:231:14 | zlibklauspost | This decompression is $@. | test.go:69:16:69:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:241:2:241:5 | Zlib | test.go:70:7:70:18 | selection of Body | test.go:241:2:241:5 | Zlib | This decompression is $@. | test.go:70:7:70:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:251:2:251:7 | Snappy | test.go:71:9:71:20 | selection of Body | test.go:251:2:251:7 | Snappy | This decompression is $@. | test.go:71:9:71:20 | selection of Body | decompressing compressed data without managing output size | +| test.go:252:2:252:7 | Snappy | test.go:71:9:71:20 | selection of Body | test.go:252:2:252:7 | Snappy | This decompression is $@. | test.go:71:9:71:20 | selection of Body | decompressing compressed data without managing output size | +| test.go:275:2:275:3 | S2 | test.go:72:5:72:16 | selection of Body | test.go:275:2:275:3 | S2 | This decompression is $@. | test.go:72:5:72:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:277:2:277:3 | S2 | test.go:72:5:72:16 | selection of Body | test.go:277:2:277:3 | S2 | This decompression is $@. | test.go:72:5:72:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:287:2:287:9 | gzipRead | test.go:73:7:73:18 | selection of Body | test.go:287:2:287:9 | gzipRead | This decompression is $@. | test.go:73:7:73:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:297:2:297:14 | gzipklauspost | test.go:74:16:74:27 | selection of Body | test.go:297:2:297:14 | gzipklauspost | This decompression is $@. | test.go:74:16:74:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:299:2:299:14 | gzipklauspost | test.go:74:16:74:27 | selection of Body | test.go:299:2:299:14 | gzipklauspost | This decompression is $@. | test.go:74:16:74:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:311:2:311:10 | gzippgzip | test.go:75:16:75:27 | selection of Body | test.go:311:2:311:10 | gzippgzip | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:321:2:321:5 | zstd | test.go:76:17:76:28 | selection of Body | test.go:321:2:321:5 | zstd | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:323:2:323:5 | zstd | test.go:76:17:76:28 | selection of Body | test.go:323:2:323:5 | zstd | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:325:2:325:5 | zstd | test.go:76:17:76:28 | selection of Body | test.go:325:2:325:5 | zstd | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:335:2:335:5 | zstd | test.go:77:15:77:26 | selection of Body | test.go:335:2:335:5 | zstd | This decompression is $@. | test.go:77:15:77:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:345:2:345:7 | xzRead | test.go:78:5:78:16 | selection of Body | test.go:345:2:345:7 | xzRead | This decompression is $@. | test.go:78:5:78:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:64:13:64:24 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:64:13:64:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:65:8:65:19 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:65:8:65:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:66:8:66:19 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:66:8:66:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:67:17:67:28 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:67:17:67:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:68:13:68:24 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:68:13:68:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:69:16:69:27 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:69:16:69:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:70:7:70:18 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:70:7:70:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:71:9:71:20 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:71:9:71:20 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:72:5:72:16 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:72:5:72:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:73:7:73:18 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:73:7:73:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:74:16:74:27 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:74:16:74:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:75:16:75:27 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:76:17:76:28 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:77:15:77:26 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:77:15:77:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:78:5:78:16 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:78:5:78:16 | selection of Body | decompressing compressed data without managing output size | diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go index c9e9fae8108..0246ad9c123 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go @@ -23,13 +23,6 @@ import ( "compress/gzip" "compress/zlib" "fmt" - "io" - "io/ioutil" - "net/http" - "os" - "testing/fstest" - - zstdDataDog "github.com/DataDog/zstd" bzip2Dsnet "github.com/dsnet/compress/bzip2" flateDsnet "github.com/dsnet/compress/flate" "github.com/golang/snappy" @@ -37,11 +30,17 @@ import ( gzipKlauspost "github.com/klauspost/compress/gzip" "github.com/klauspost/compress/s2" snappyKlauspost "github.com/klauspost/compress/snappy" - zipKlauspost "github.com/klauspost/compress/zip" zlibKlauspost "github.com/klauspost/compress/zlib" - zstdKlauspost "github.com/klauspost/compress/zstd" pzipKlauspost "github.com/klauspost/pgzip" "github.com/ulikunitz/xz" + "io" + "net/http" + "os" + "testing/fstest" + + zstdDataDog "github.com/DataDog/zstd" + zipKlauspost "github.com/klauspost/compress/zip" + zstdKlauspost "github.com/klauspost/compress/zstd" ) func main() { @@ -54,13 +53,29 @@ func main() { } func DecompressHandler(w http.ResponseWriter, request *http.Request) { - TarDecompressor(request.Body, "gz") ZipNewReader(request.Body) ZipNewReader2(request.Body) ZipOpenReader(request.FormValue("filepathba")) ZipOpenReaderSafe(request.PostFormValue("test")) GZipOpenReaderSafe(request.PostFormValue("test")) GZipReader(request.Body, "dest") + ZipNewReader(request.Body) + ZipNewReader2(request.Body) + Bzip2Dsnet(request.Body) + Bzip2(request.Body) + Flate(request.Body) + FlateKlauspost(request.Body) + FlateDsnet(request.Body) + ZlibKlauspost(request.Body) + Zlib(request.Body) + Snappy(request.Body) + S2(request.Body) + Gzip(request.Body) + GzipKlauspost(request.Body) + PzipKlauspost(request.Body) + Zstd_Klauspost(request.Body) + Zstd_DataDog(request.Body) + Xz(request.Body) } func GZipOpenReaderSafe(filename string) { @@ -155,136 +170,187 @@ func ZipNewReader2(file io.Reader) { fmt.Print(result) } } -func serve(w http.ResponseWriter, r *http.Request) { - if r.Body != nil { - if data, err := ioutil.ReadAll(r.Body); err == nil { - fmt.Println(data) - } - } + +func Bzip2Dsnet(file io.Reader) { + var tarRead *tar.Reader + + bzip2dsnet, _ := bzip2Dsnet.NewReader(file, &bzip2Dsnet.ReaderConfig{}) + var out []byte = make([]byte, 70) + bzip2dsnet.Read(out) + tarRead = tar.NewReader(bzip2dsnet) + + TarDecompressor(tarRead) + +} +func Bzip2(file io.Reader) { + var tarRead *tar.Reader + + Bzip2 := bzip2.NewReader(file) + var out []byte = make([]byte, 70) + Bzip2.Read(out) + tarRead = tar.NewReader(Bzip2) + + TarDecompressor(tarRead) +} +func Flate(file io.Reader) { + var tarRead *tar.Reader + + Flate := flate.NewReader(file) + var out []byte = make([]byte, 70) + Flate.Read(out) + tarRead = tar.NewReader(Flate) + + TarDecompressor(tarRead) +} +func FlateKlauspost(file io.Reader) { + var tarRead *tar.Reader + + //flateKlauspost.NewReaderDict() + zlibklauspost := flateKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + zlibklauspost.Read(out) + tarRead = tar.NewReader(zlibklauspost) + + TarDecompressor(tarRead) +} +func FlateDsnet(file io.Reader) { + var tarRead *tar.Reader + + flatedsnet, _ := flateDsnet.NewReader(file, &flateDsnet.ReaderConfig{}) + var out []byte = make([]byte, 70) + flatedsnet.Read(out) + tarRead = tar.NewReader(flatedsnet) + + TarDecompressor(tarRead) +} +func ZlibKlauspost(file io.Reader) { + var tarRead *tar.Reader + + zlibklauspost, _ := zlibKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + zlibklauspost.Read(out) + tarRead = tar.NewReader(zlibklauspost) + + TarDecompressor(tarRead) +} +func Zlib(file io.Reader) { + var tarRead *tar.Reader + + Zlib, _ := zlib.NewReader(file) + var out []byte = make([]byte, 70) + Zlib.Read(out) + tarRead = tar.NewReader(Zlib) + + TarDecompressor(tarRead) +} +func Snappy(file io.Reader) { + var tarRead *tar.Reader + + Snappy := snappy.NewReader(file) + var out []byte = make([]byte, 70) + Snappy.Read(out) + Snappy.ReadByte() + tarRead = tar.NewReader(Snappy) + + TarDecompressor(tarRead) +} +func SnappyKlauspost(file io.Reader) { + var tarRead *tar.Reader + + snappyklauspost := snappyKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + snappyklauspost.Read(out) + var buf bytes.Buffer + snappyklauspost.DecodeConcurrent(&buf, 2) + snappyklauspost.ReadByte() + tarRead = tar.NewReader(snappyklauspost) + + TarDecompressor(tarRead) +} +func S2(file io.Reader) { + var tarRead *tar.Reader + + S2 := s2.NewReader(file) + var out []byte = make([]byte, 70) + S2.Read(out) + var buf bytes.Buffer + S2.DecodeConcurrent(&buf, 2) + tarRead = tar.NewReader(S2) + + TarDecompressor(tarRead) +} +func Gzip(file io.Reader) { + var tarRead *tar.Reader + + gzipRead, _ := gzip.NewReader(file) + var out []byte = make([]byte, 70) + gzipRead.Read(out) + tarRead = tar.NewReader(gzipRead) + + TarDecompressor(tarRead) +} +func GzipKlauspost(file io.Reader) { + var tarRead *tar.Reader + + gzipklauspost, _ := gzipKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + gzipklauspost.Read(out) + var buf bytes.Buffer + gzipklauspost.WriteTo(&buf) + tarRead = tar.NewReader(gzipklauspost) + + TarDecompressor(tarRead) +} +func PzipKlauspost(file io.Reader) { + var tarRead *tar.Reader + + gzippgzip, _ := pzipKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + gzippgzip.Read(out) + var buf bytes.Buffer + gzippgzip.WriteTo(&buf) + tarRead = tar.NewReader(gzippgzip) + + TarDecompressor(tarRead) +} +func Zstd_Klauspost(file io.Reader) { + var tarRead *tar.Reader + + zstd, _ := zstdKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + zstd.Read(out) + var buf bytes.Buffer + zstd.WriteTo(&buf) + var src []byte + zstd.DecodeAll(src, nil) + tarRead = tar.NewReader(zstd) + + TarDecompressor(tarRead) +} +func Zstd_DataDog(file io.Reader) { + var tarRead *tar.Reader + + zstd := zstdDataDog.NewReader(file) + var out []byte = make([]byte, 70) + zstd.Read(out) + tarRead = tar.NewReader(zstd) + + TarDecompressor(tarRead) +} +func Xz(file io.Reader) { + var tarRead *tar.Reader + + xzRead, _ := xz.NewReader(file) + var out []byte = make([]byte, 70) + xzRead.Read(out) + tarRead = tar.NewReader(xzRead) + + TarDecompressor(tarRead) } -func TarDecompressor(file io.Reader, compressionType string) { - var tarRead *tar.Reader - if compressionType == "bzip2Dsnet" { - bzip2dsnet, _ := bzip2Dsnet.NewReader(file, &bzip2Dsnet.ReaderConfig{}) - var out []byte = make([]byte, 70) - bzip2dsnet.Read(out) - tarRead = tar.NewReader(bzip2dsnet) - } - if compressionType == "bzip2" { - Bzip2 := bzip2.NewReader(file) - var out []byte = make([]byte, 70) - Bzip2.Read(out) - tarRead = tar.NewReader(Bzip2) - } - if compressionType == "flate" { - //flate.NewReaderDict() - Flate := flate.NewReader(file) - var out []byte = make([]byte, 70) - Flate.Read(out) - tarRead = tar.NewReader(Flate) - } - if compressionType == "flateKlauspost" { - //flateKlauspost.NewReaderDict() - zlibklauspost := flateKlauspost.NewReader(file) - var out []byte = make([]byte, 70) - zlibklauspost.Read(out) - tarRead = tar.NewReader(zlibklauspost) - } - if compressionType == "flateDsnet" { - flatedsnet, _ := flateDsnet.NewReader(file, &flateDsnet.ReaderConfig{}) - var out []byte = make([]byte, 70) - flatedsnet.Read(out) - tarRead = tar.NewReader(flatedsnet) - } - if compressionType == "zlibKlauspost" { - //zlibKlauspost.NewReaderDict() - zlibklauspost, _ := zlibKlauspost.NewReader(file) - var out []byte = make([]byte, 70) - zlibklauspost.Read(out) - tarRead = tar.NewReader(zlibklauspost) - } - if compressionType == "zlib" { - //zlib.NewReaderDict() - Zlib, _ := zlib.NewReader(file) - var out []byte = make([]byte, 70) - Zlib.Read(out) - tarRead = tar.NewReader(Zlib) - } - if compressionType == "snappy" { - Snappy := snappy.NewReader(file) - var out []byte = make([]byte, 70) - Snappy.Read(out) - Snappy.ReadByte() - tarRead = tar.NewReader(Snappy) - } - if compressionType == "snappyKlauspost" { - snappyklauspost := snappyKlauspost.NewReader(file) - var out []byte = make([]byte, 70) - snappyklauspost.Read(out) - var buf bytes.Buffer - snappyklauspost.DecodeConcurrent(&buf, 2) - snappyklauspost.ReadByte() - tarRead = tar.NewReader(snappyklauspost) - } - if compressionType == "s2" { - S2 := s2.NewReader(file) - var out []byte = make([]byte, 70) - S2.Read(out) - var buf bytes.Buffer - S2.DecodeConcurrent(&buf, 2) - //S2.ReadSeeker() - //S2.ReadByte() - tarRead = tar.NewReader(S2) - } - if compressionType == "gz" { - gzipRead, _ := gzip.NewReader(file) - var out []byte = make([]byte, 70) - gzipRead.Read(out) - tarRead = tar.NewReader(gzipRead) - } - if compressionType == "gzipKlauspost" { - gzipklauspost, _ := gzipKlauspost.NewReader(file) - var out []byte = make([]byte, 70) - gzipklauspost.Read(out) - var buf bytes.Buffer - gzipklauspost.WriteTo(&buf) - tarRead = tar.NewReader(gzipklauspost) - } - if compressionType == "pzipKlauspost" { - //gzipPgzip.NewReaderN() - gzippgzip, _ := pzipKlauspost.NewReader(file) - var out []byte = make([]byte, 70) - gzippgzip.Read(out) - var buf bytes.Buffer - gzippgzip.WriteTo(&buf) - tarRead = tar.NewReader(gzippgzip) - } - if compressionType == "zstd_Klauspost" { - zstd, _ := zstdKlauspost.NewReader(file) - var out []byte = make([]byte, 70) - zstd.Read(out) - var buf bytes.Buffer - zstd.WriteTo(&buf) - var src []byte - zstd.DecodeAll(src, nil) - tarRead = tar.NewReader(zstd) - } - if compressionType == "zstd_DataDog" { - //zstdDataDog.NewReaderDict() - zstd := zstdDataDog.NewReader(file) - var out []byte = make([]byte, 70) - zstd.Read(out) - tarRead = tar.NewReader(zstd) - } - if compressionType == "xz" { - xzRead, _ := xz.NewReader(file) - var out []byte = make([]byte, 70) - xzRead.Read(out) - tarRead = tar.NewReader(xzRead) - } - var out []byte = make([]byte, 70) - tarRead.Read(out) +func TarDecompressor(tarRead *tar.Reader) { + var tarOut []byte = make([]byte, 70) + tarRead.Read(tarOut) files := make(fstest.MapFS) for { cur, err := tarRead.Next() From 1aa4494dbc8c0d14eb99a32c9d9c8ea7d7bc5a88 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Fri, 24 Nov 2023 10:09:21 +0100 Subject: [PATCH 039/430] stash --- .../frameworks/DecompressionBombs.qll | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/go/ql/src/experimental/frameworks/DecompressionBombs.qll b/go/ql/src/experimental/frameworks/DecompressionBombs.qll index 42af56e7b8e..25d8787d3e8 100644 --- a/go/ql/src/experimental/frameworks/DecompressionBombs.qll +++ b/go/ql/src/experimental/frameworks/DecompressionBombs.qll @@ -605,12 +605,7 @@ module DecompressionBombs { none() } } - } - /** - * Provides Decompression Sinks and additional taint steps for `github.com/klauspost/compress/s2` package - */ - module KlauspostS2 { class TheSink extends Sink { TheSink() { exists(Method m | @@ -621,6 +616,23 @@ module DecompressionBombs { ) } } + } + + /** + * Provides Decompression Sinks and additional taint steps for `github.com/klauspost/compress/s2` package + */ + module KlauspostS2 { + class TheSink extends DataFlow::Node { + TheSink() { + exists(Method m | + m.getType() + .getUnderlyingType() + .hasQualifiedName("github.com/klauspost/compress/s2", "Reader") + | + this = m.getACall() + ) + } + } class TheAdditionalTaintStep extends AdditionalTaintStep { TheAdditionalTaintStep() { this = "AdditionalTaintStep" } From 2cb0afee733e337aed5c84a5ab57044bd5e9c0a4 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Fri, 8 Dec 2023 11:12:57 +0100 Subject: [PATCH 040/430] fix some qldocs and some spells --- .../DecompressionBombs.ql | 3 +- .../MultipartAndFormRemoteSource.qll | 1 - .../frameworks/DecompressionBombs.qll | 38 +++++++++---------- 3 files changed, 20 insertions(+), 22 deletions(-) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index 7085b8099c9..cd782d6de0a 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -12,7 +12,6 @@ */ import go -import semmle.go.dataflow.Properties import MultipartAndFormRemoteSource import experimental.frameworks.DecompressionBombs @@ -28,7 +27,7 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { sink instanceof DecompressionBombs::Sink and state = [ - "ZstdNewReader", "XzNewReader", "GzipNewReader", "S2NewReader", "SnapyNewReader", + "ZstdNewReader", "XzNewReader", "GzipNewReader", "S2NewReader", "SnappyNewReader", "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", "ZipKlauspost" ] } diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll b/go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll index 1a726f0f1e2..3ebb606613f 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll @@ -1,5 +1,4 @@ import go -import semmle.go.dataflow.Properties class MimeMultipartFileHeader extends UntrustedFlowSource::Range { MimeMultipartFileHeader() { diff --git a/go/ql/src/experimental/frameworks/DecompressionBombs.qll b/go/ql/src/experimental/frameworks/DecompressionBombs.qll index 25d8787d3e8..d0a9a719e92 100644 --- a/go/ql/src/experimental/frameworks/DecompressionBombs.qll +++ b/go/ql/src/experimental/frameworks/DecompressionBombs.qll @@ -5,7 +5,7 @@ module DecompressionBombs { FlowState() { this = [ - "ZstdNewReader", "XzNewReader", "GzipNewReader", "S2NewReader", "SnapyNewReader", + "ZstdNewReader", "XzNewReader", "GzipNewReader", "S2NewReader", "SnappyNewReader", "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", "ZipKlauspost", "" ] } @@ -36,7 +36,7 @@ module DecompressionBombs { abstract class Sink extends DataFlow::Node { } /** - * Provides Decompression Sinks and additional flow steps for `github.com/DataDog/zstd` package + * Provides decompression bomb sinks and additional flow steps for `github.com/DataDog/zstd` package */ module DataDogZstd { class TheSink extends Sink { @@ -71,7 +71,7 @@ module DecompressionBombs { } /** - * Provides Decompression Sinks and additional flow steps for `github.com/klauspost/compress/zstd` package + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/zstd` package */ module KlauspostZstd { class TheSink extends Sink { @@ -181,7 +181,7 @@ module DecompressionBombs { } /** - * Provides Decompression Sinks and additional taint steps for `github.com/ulikunitz/xz` package + * Provides decompression bomb sinks and additional flow steps for `github.com/ulikunitz/xz` package */ module UlikunitzXz { class TheSink extends Sink { @@ -215,7 +215,7 @@ module DecompressionBombs { } /** - * Provides Decompression Sinks and additional taint steps for `compress/gzip` package + * Provides decompression bomb sinks and additional flow steps for `compress/gzip` package */ module CompressGzip { class TheSink extends Sink { @@ -250,7 +250,7 @@ module DecompressionBombs { } /** - * Provides Decompression Sinks and additional taint steps for `github.com/klauspost/compress/gzip` package + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/gzip` package */ module KlauspostGzip { class TheSink extends Sink { @@ -295,7 +295,7 @@ module DecompressionBombs { } /** - * Provides Decompression Sinks and additional taint steps for `compress/bzip2` package + * Provides decompression bomb sinks and additional flow steps for `compress/bzip2` package */ module CompressBzip2 { class TheSink extends Sink { @@ -330,7 +330,7 @@ module DecompressionBombs { } /** - * Provides Decompression Sinks and additional taint steps for `github.com/dsnet/compress/bzip2` package + * Provides decompression bomb sinks and additional flow steps for `github.com/dsnet/compress/bzip2` package */ module DsnetBzip2 { class TheSink extends Sink { @@ -365,7 +365,7 @@ module DecompressionBombs { } /** - * Provides Decompression Sinks and additional taint steps for `github.com/dsnet/compress/flate` package + * Provides decompression bomb sinks and additional flow steps for `github.com/dsnet/compress/flate` package */ module DsnetFlate { class TheSink extends Sink { @@ -400,7 +400,7 @@ module DecompressionBombs { } /** - * Provides Decompression Sinks and additional taint steps for `compress/flate` package + * Provides decompression bomb sinks and additional flow steps for `compress/flate` package */ module CompressFlate { class TheSink extends Sink { @@ -435,7 +435,7 @@ module DecompressionBombs { } /** - * Provides Decompression Sinks and additional taint steps for `github.com/klauspost/compress/flate` package + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/flate` package */ module KlauspostFlate { class TheSink extends Sink { @@ -472,7 +472,7 @@ module DecompressionBombs { } /** - * Provides Decompression Sinks and additional taint steps for `github.com/klauspost/compress/zlib` package + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/zlib` package */ module KlauspostZlib { class TheSink extends Sink { @@ -509,7 +509,7 @@ module DecompressionBombs { } /** - * Provides Decompression Sinks and additional taint steps for `compress/zlib` package + * Provides decompression bomb sinks and additional flow steps for `compress/zlib` package */ module CompressZlib { class TheSink extends Sink { @@ -544,7 +544,7 @@ module DecompressionBombs { } /** - * Provides Decompression Sinks and additional taint steps for `github.com/golang/snappy` package + * Provides decompression bomb sinks and additional flow steps for `github.com/golang/snappy` package */ module GolangSnappy { class TheSink extends Sink { @@ -570,7 +570,7 @@ module DecompressionBombs { fromNode = call.getArgument(0) and toNode = call.getResult(0) and fromState = "" and - toState = "SnapyNewReader" + toState = "SnappyNewReader" ) } @@ -581,7 +581,7 @@ module DecompressionBombs { } /** - * Provides Decompression additional taint steps for `github.com/klauspost/compress/snappy` package + * Provides decompression bombs sinks and additional flow steps for `github.com/klauspost/compress/snappy` package */ module KlauspostSnappy { class TheAdditionalTaintStep extends AdditionalTaintStep { @@ -597,7 +597,7 @@ module DecompressionBombs { fromNode = call.getArgument(0) and toNode = call.getResult(0) and fromState = "" and - toState = "SnapyNewReader" + toState = "SnappyNewReader" ) } @@ -619,7 +619,7 @@ module DecompressionBombs { } /** - * Provides Decompression Sinks and additional taint steps for `github.com/klauspost/compress/s2` package + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/s2` package */ module KlauspostS2 { class TheSink extends DataFlow::Node { @@ -658,7 +658,7 @@ module DecompressionBombs { } /** - * Provides Decompression Sinks for packages that use some standard IO interfaces/methods for reading decompressed data + * Provides decompression bomb sinks for packages that use some standard IO interfaces/methods for reading decompressed data */ module GeneralReadIoSink { class TheSink extends Sink { From 737f3e88997c1740ca56536391a081645d82533a Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Sun, 10 Dec 2023 18:10:23 +0100 Subject: [PATCH 041/430] fix stubs --- .../frameworks/DecompressionBombs.qll | 22 +- .../DecompressionBombs.expected | 784 +++++++++--------- .../CWE-522-DecompressionBombs/test.go | 1 + .../github.com/klauspost/compress/s2/stub.go | 4 +- .../klauspost/compress/snappy/stub.go | 4 +- 5 files changed, 415 insertions(+), 400 deletions(-) diff --git a/go/ql/src/experimental/frameworks/DecompressionBombs.qll b/go/ql/src/experimental/frameworks/DecompressionBombs.qll index d0a9a719e92..8d42d9fc5c1 100644 --- a/go/ql/src/experimental/frameworks/DecompressionBombs.qll +++ b/go/ql/src/experimental/frameworks/DecompressionBombs.qll @@ -605,7 +605,12 @@ module DecompressionBombs { none() } } + } + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/s2` package + */ + module KlauspostS2 { class TheSink extends Sink { TheSink() { exists(Method m | @@ -616,23 +621,6 @@ module DecompressionBombs { ) } } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/s2` package - */ - module KlauspostS2 { - class TheSink extends DataFlow::Node { - TheSink() { - exists(Method m | - m.getType() - .getUnderlyingType() - .hasQualifiedName("github.com/klauspost/compress/s2", "Reader") - | - this = m.getACall() - ) - } - } class TheAdditionalTaintStep extends AdditionalTaintStep { TheAdditionalTaintStep() { this = "AdditionalTaintStep" } diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected index 70fd9862516..1b4d662673b 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -1,176 +1,186 @@ edges -| test.go:56:15:56:26 | selection of Body | test.go:151:19:151:22 | definition of file | -| test.go:57:16:57:27 | selection of Body | test.go:162:20:162:23 | definition of file | -| test.go:58:16:58:46 | call to FormValue | test.go:121:20:121:27 | definition of filename | -| test.go:61:13:61:24 | selection of Body | test.go:112:17:112:19 | definition of src | -| test.go:62:15:62:26 | selection of Body | test.go:151:19:151:22 | definition of file | -| test.go:63:16:63:27 | selection of Body | test.go:162:20:162:23 | definition of file | -| test.go:64:13:64:24 | selection of Body | test.go:174:17:174:20 | definition of file | -| test.go:65:8:65:19 | selection of Body | test.go:185:12:185:15 | definition of file | -| test.go:66:8:66:19 | selection of Body | test.go:195:12:195:15 | definition of file | -| test.go:67:17:67:28 | selection of Body | test.go:205:21:205:24 | definition of file | -| test.go:68:13:68:24 | selection of Body | test.go:216:17:216:20 | definition of file | -| test.go:69:16:69:27 | selection of Body | test.go:226:20:226:23 | definition of file | -| test.go:70:7:70:18 | selection of Body | test.go:236:11:236:14 | definition of file | -| test.go:71:9:71:20 | selection of Body | test.go:246:13:246:16 | definition of file | -| test.go:72:5:72:16 | selection of Body | test.go:270:9:270:12 | definition of file | -| test.go:73:7:73:18 | selection of Body | test.go:282:11:282:14 | definition of file | -| test.go:74:16:74:27 | selection of Body | test.go:292:20:292:23 | definition of file | -| test.go:75:16:75:27 | selection of Body | test.go:304:20:304:23 | definition of file | -| test.go:76:17:76:28 | selection of Body | test.go:316:21:316:24 | definition of file | -| test.go:77:15:77:26 | selection of Body | test.go:330:19:330:22 | definition of file | -| test.go:78:5:78:16 | selection of Body | test.go:340:9:340:12 | definition of file | -| test.go:112:17:112:19 | definition of src | test.go:113:29:113:31 | src | -| test.go:113:2:113:32 | ... := ...[0] | test.go:117:11:117:26 | type conversion | -| test.go:113:29:113:31 | src | test.go:113:2:113:32 | ... := ...[0] | -| test.go:117:11:117:26 | type conversion | test.go:118:23:118:28 | newSrc | -| test.go:121:20:121:27 | definition of filename | test.go:123:25:123:32 | filename | -| test.go:121:20:121:27 | definition of filename | test.go:136:43:136:50 | filename | -| test.go:123:2:123:33 | ... := ...[0] | test.go:125:12:125:12 | f | -| test.go:123:25:123:32 | filename | test.go:123:2:123:33 | ... := ...[0] | -| test.go:125:3:125:19 | ... := ...[0] | test.go:127:37:127:38 | rc | -| test.go:125:12:125:12 | f | test.go:125:3:125:19 | ... := ...[0] | -| test.go:136:2:136:51 | ... := ...[0] | test.go:137:20:137:29 | implicit dereference | -| test.go:136:43:136:50 | filename | test.go:136:2:136:51 | ... := ...[0] | -| test.go:137:20:137:29 | implicit dereference | test.go:137:20:137:29 | implicit dereference | -| test.go:137:20:137:29 | implicit dereference | test.go:137:20:137:29 | implicit read of field Reader | -| test.go:137:20:137:29 | implicit read of field Reader | test.go:138:12:138:12 | f | -| test.go:138:12:138:12 | f | test.go:138:12:138:19 | call to Open | -| test.go:138:12:138:19 | call to Open | test.go:140:37:140:38 | rc | -| test.go:151:19:151:22 | definition of file | test.go:152:25:152:28 | file | -| test.go:152:2:152:29 | ... := ...[0] | test.go:153:48:153:52 | file1 | -| test.go:152:25:152:28 | file | test.go:152:2:152:29 | ... := ...[0] | -| test.go:153:2:153:69 | ... := ...[0] | test.go:156:26:156:29 | file | -| test.go:153:32:153:53 | call to NewReader | test.go:153:2:153:69 | ... := ...[0] | -| test.go:153:48:153:52 | file1 | test.go:153:32:153:53 | call to NewReader | -| test.go:156:3:156:36 | ... := ...[0] | test.go:157:36:157:51 | fileReaderCloser | -| test.go:156:26:156:29 | file | test.go:156:3:156:36 | ... := ...[0] | -| test.go:162:20:162:23 | definition of file | test.go:163:25:163:28 | file | -| test.go:163:2:163:29 | ... := ...[0] | test.go:164:66:164:70 | file2 | -| test.go:163:25:163:28 | file | test.go:163:2:163:29 | ... := ...[0] | -| test.go:164:2:164:87 | ... := ...[0] | test.go:168:26:168:29 | file | -| test.go:164:50:164:71 | call to NewReader | test.go:164:2:164:87 | ... := ...[0] | -| test.go:164:66:164:70 | file2 | test.go:164:50:164:71 | call to NewReader | -| test.go:168:26:168:29 | file | test.go:168:26:168:36 | call to Open | -| test.go:168:26:168:36 | call to Open | test.go:169:36:169:51 | fileReaderCloser | -| test.go:174:17:174:20 | definition of file | test.go:177:40:177:43 | file | -| test.go:177:2:177:72 | ... := ...[0] | test.go:179:2:179:11 | bzip2dsnet | -| test.go:177:2:177:72 | ... := ...[0] | test.go:180:26:180:35 | bzip2dsnet | -| test.go:177:40:177:43 | file | test.go:177:2:177:72 | ... := ...[0] | -| test.go:180:12:180:36 | call to NewReader | test.go:182:18:182:24 | tarRead | -| test.go:180:26:180:35 | bzip2dsnet | test.go:180:12:180:36 | call to NewReader | -| test.go:182:18:182:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:185:12:185:15 | definition of file | test.go:188:27:188:30 | file | -| test.go:188:11:188:31 | call to NewReader | test.go:190:2:190:6 | Bzip2 | -| test.go:188:11:188:31 | call to NewReader | test.go:191:26:191:30 | Bzip2 | -| test.go:188:27:188:30 | file | test.go:188:11:188:31 | call to NewReader | -| test.go:191:12:191:31 | call to NewReader | test.go:193:18:193:24 | tarRead | -| test.go:191:26:191:30 | Bzip2 | test.go:191:12:191:31 | call to NewReader | -| test.go:193:18:193:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:195:12:195:15 | definition of file | test.go:198:27:198:30 | file | -| test.go:198:11:198:31 | call to NewReader | test.go:200:2:200:6 | Flate | -| test.go:198:11:198:31 | call to NewReader | test.go:201:26:201:30 | Flate | -| test.go:198:27:198:30 | file | test.go:198:11:198:31 | call to NewReader | -| test.go:201:12:201:31 | call to NewReader | test.go:203:18:203:24 | tarRead | -| test.go:201:26:201:30 | Flate | test.go:201:12:201:31 | call to NewReader | -| test.go:203:18:203:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:205:21:205:24 | definition of file | test.go:209:44:209:47 | file | -| test.go:209:19:209:48 | call to NewReader | test.go:211:2:211:14 | zlibklauspost | -| test.go:209:19:209:48 | call to NewReader | test.go:212:26:212:38 | zlibklauspost | -| test.go:209:44:209:47 | file | test.go:209:19:209:48 | call to NewReader | -| test.go:212:12:212:39 | call to NewReader | test.go:214:18:214:24 | tarRead | -| test.go:212:26:212:38 | zlibklauspost | test.go:212:12:212:39 | call to NewReader | -| test.go:214:18:214:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:216:17:216:20 | definition of file | test.go:219:40:219:43 | file | -| test.go:219:2:219:72 | ... := ...[0] | test.go:221:2:221:11 | flatedsnet | -| test.go:219:2:219:72 | ... := ...[0] | test.go:222:26:222:35 | flatedsnet | -| test.go:219:40:219:43 | file | test.go:219:2:219:72 | ... := ...[0] | -| test.go:222:12:222:36 | call to NewReader | test.go:224:18:224:24 | tarRead | -| test.go:222:26:222:35 | flatedsnet | test.go:222:12:222:36 | call to NewReader | -| test.go:224:18:224:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:226:20:226:23 | definition of file | test.go:229:46:229:49 | file | -| test.go:229:2:229:50 | ... := ...[0] | test.go:231:2:231:14 | zlibklauspost | -| test.go:229:2:229:50 | ... := ...[0] | test.go:232:26:232:38 | zlibklauspost | -| test.go:229:46:229:49 | file | test.go:229:2:229:50 | ... := ...[0] | -| test.go:232:12:232:39 | call to NewReader | test.go:234:18:234:24 | tarRead | -| test.go:232:26:232:38 | zlibklauspost | test.go:232:12:232:39 | call to NewReader | -| test.go:234:18:234:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:236:11:236:14 | definition of file | test.go:239:28:239:31 | file | -| test.go:239:2:239:32 | ... := ...[0] | test.go:241:2:241:5 | Zlib | -| test.go:239:2:239:32 | ... := ...[0] | test.go:242:26:242:29 | Zlib | -| test.go:239:28:239:31 | file | test.go:239:2:239:32 | ... := ...[0] | -| test.go:242:12:242:30 | call to NewReader | test.go:244:18:244:24 | tarRead | -| test.go:242:26:242:29 | Zlib | test.go:242:12:242:30 | call to NewReader | -| test.go:244:18:244:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:246:13:246:16 | definition of file | test.go:249:29:249:32 | file | -| test.go:249:12:249:33 | call to NewReader | test.go:251:2:251:7 | Snappy | -| test.go:249:12:249:33 | call to NewReader | test.go:252:2:252:7 | Snappy | -| test.go:249:12:249:33 | call to NewReader | test.go:253:26:253:31 | Snappy | -| test.go:249:29:249:32 | file | test.go:249:12:249:33 | call to NewReader | -| test.go:253:12:253:32 | call to NewReader | test.go:255:18:255:24 | tarRead | -| test.go:253:26:253:31 | Snappy | test.go:253:12:253:32 | call to NewReader | -| test.go:255:18:255:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:270:9:270:12 | definition of file | test.go:273:21:273:24 | file | -| test.go:273:8:273:25 | call to NewReader | test.go:275:2:275:3 | S2 | -| test.go:273:8:273:25 | call to NewReader | test.go:277:2:277:3 | S2 | -| test.go:273:8:273:25 | call to NewReader | test.go:278:26:278:27 | S2 | -| test.go:273:21:273:24 | file | test.go:273:8:273:25 | call to NewReader | -| test.go:278:12:278:28 | call to NewReader | test.go:280:18:280:24 | tarRead | -| test.go:278:26:278:27 | S2 | test.go:278:12:278:28 | call to NewReader | -| test.go:280:18:280:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:282:11:282:14 | definition of file | test.go:285:32:285:35 | file | -| test.go:285:2:285:36 | ... := ...[0] | test.go:287:2:287:9 | gzipRead | -| test.go:285:2:285:36 | ... := ...[0] | test.go:288:26:288:33 | gzipRead | -| test.go:285:32:285:35 | file | test.go:285:2:285:36 | ... := ...[0] | -| test.go:288:12:288:34 | call to NewReader | test.go:290:18:290:24 | tarRead | -| test.go:288:26:288:33 | gzipRead | test.go:288:12:288:34 | call to NewReader | -| test.go:290:18:290:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:292:20:292:23 | definition of file | test.go:295:46:295:49 | file | -| test.go:295:2:295:50 | ... := ...[0] | test.go:297:2:297:14 | gzipklauspost | -| test.go:295:2:295:50 | ... := ...[0] | test.go:299:2:299:14 | gzipklauspost | -| test.go:295:2:295:50 | ... := ...[0] | test.go:300:26:300:38 | gzipklauspost | -| test.go:295:46:295:49 | file | test.go:295:2:295:50 | ... := ...[0] | -| test.go:300:12:300:39 | call to NewReader | test.go:302:18:302:24 | tarRead | -| test.go:300:26:300:38 | gzipklauspost | test.go:300:12:300:39 | call to NewReader | -| test.go:302:18:302:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:304:20:304:23 | definition of file | test.go:307:42:307:45 | file | -| test.go:307:2:307:46 | ... := ...[0] | test.go:311:2:311:10 | gzippgzip | -| test.go:307:2:307:46 | ... := ...[0] | test.go:312:26:312:34 | gzippgzip | -| test.go:307:42:307:45 | file | test.go:307:2:307:46 | ... := ...[0] | -| test.go:312:12:312:35 | call to NewReader | test.go:314:18:314:24 | tarRead | -| test.go:312:26:312:34 | gzippgzip | test.go:312:12:312:35 | call to NewReader | -| test.go:314:18:314:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:316:21:316:24 | definition of file | test.go:319:37:319:40 | file | -| test.go:319:2:319:41 | ... := ...[0] | test.go:321:2:321:5 | zstd | -| test.go:319:2:319:41 | ... := ...[0] | test.go:323:2:323:5 | zstd | -| test.go:319:2:319:41 | ... := ...[0] | test.go:325:2:325:5 | zstd | -| test.go:319:2:319:41 | ... := ...[0] | test.go:326:26:326:29 | zstd | -| test.go:319:37:319:40 | file | test.go:319:2:319:41 | ... := ...[0] | -| test.go:326:12:326:30 | call to NewReader | test.go:328:18:328:24 | tarRead | -| test.go:326:26:326:29 | zstd | test.go:326:12:326:30 | call to NewReader | -| test.go:328:18:328:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:330:19:330:22 | definition of file | test.go:333:32:333:35 | file | -| test.go:333:10:333:36 | call to NewReader | test.go:335:2:335:5 | zstd | -| test.go:333:10:333:36 | call to NewReader | test.go:336:26:336:29 | zstd | -| test.go:333:32:333:35 | file | test.go:333:10:333:36 | call to NewReader | -| test.go:336:12:336:30 | call to NewReader | test.go:338:18:338:24 | tarRead | -| test.go:336:26:336:29 | zstd | test.go:336:12:336:30 | call to NewReader | -| test.go:338:18:338:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:340:9:340:12 | definition of file | test.go:343:28:343:31 | file | -| test.go:343:2:343:32 | ... := ...[0] | test.go:345:2:345:7 | xzRead | -| test.go:343:2:343:32 | ... := ...[0] | test.go:346:26:346:31 | xzRead | -| test.go:343:28:343:31 | file | test.go:343:2:343:32 | ... := ...[0] | -| test.go:346:12:346:32 | call to NewReader | test.go:348:18:348:24 | tarRead | -| test.go:346:26:346:31 | xzRead | test.go:346:12:346:32 | call to NewReader | -| test.go:348:18:348:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | -| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | -| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | -| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | -| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | -| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | -| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | -| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | +| test.go:56:15:56:26 | selection of Body | test.go:152:19:152:22 | definition of file | +| test.go:57:16:57:27 | selection of Body | test.go:163:20:163:23 | definition of file | +| test.go:58:16:58:46 | call to FormValue | test.go:122:20:122:27 | definition of filename | +| test.go:61:13:61:24 | selection of Body | test.go:113:17:113:19 | definition of src | +| test.go:62:15:62:26 | selection of Body | test.go:152:19:152:22 | definition of file | +| test.go:63:16:63:27 | selection of Body | test.go:163:20:163:23 | definition of file | +| test.go:64:13:64:24 | selection of Body | test.go:175:17:175:20 | definition of file | +| test.go:65:8:65:19 | selection of Body | test.go:186:12:186:15 | definition of file | +| test.go:66:8:66:19 | selection of Body | test.go:196:12:196:15 | definition of file | +| test.go:67:17:67:28 | selection of Body | test.go:206:21:206:24 | definition of file | +| test.go:68:13:68:24 | selection of Body | test.go:217:17:217:20 | definition of file | +| test.go:69:16:69:27 | selection of Body | test.go:227:20:227:23 | definition of file | +| test.go:70:7:70:18 | selection of Body | test.go:237:11:237:14 | definition of file | +| test.go:71:9:71:20 | selection of Body | test.go:247:13:247:16 | definition of file | +| test.go:72:18:72:29 | selection of Body | test.go:258:22:258:25 | definition of file | +| test.go:73:5:73:16 | selection of Body | test.go:271:9:271:12 | definition of file | +| test.go:74:7:74:18 | selection of Body | test.go:283:11:283:14 | definition of file | +| test.go:75:16:75:27 | selection of Body | test.go:293:20:293:23 | definition of file | +| test.go:76:16:76:27 | selection of Body | test.go:305:20:305:23 | definition of file | +| test.go:77:17:77:28 | selection of Body | test.go:317:21:317:24 | definition of file | +| test.go:78:15:78:26 | selection of Body | test.go:331:19:331:22 | definition of file | +| test.go:79:5:79:16 | selection of Body | test.go:341:9:341:12 | definition of file | +| test.go:113:17:113:19 | definition of src | test.go:114:29:114:31 | src | +| test.go:114:2:114:32 | ... := ...[0] | test.go:118:11:118:26 | type conversion | +| test.go:114:29:114:31 | src | test.go:114:2:114:32 | ... := ...[0] | +| test.go:118:11:118:26 | type conversion | test.go:119:23:119:28 | newSrc | +| test.go:122:20:122:27 | definition of filename | test.go:124:25:124:32 | filename | +| test.go:122:20:122:27 | definition of filename | test.go:137:43:137:50 | filename | +| test.go:124:2:124:33 | ... := ...[0] | test.go:126:12:126:12 | f | +| test.go:124:25:124:32 | filename | test.go:124:2:124:33 | ... := ...[0] | +| test.go:126:3:126:19 | ... := ...[0] | test.go:128:37:128:38 | rc | +| test.go:126:12:126:12 | f | test.go:126:3:126:19 | ... := ...[0] | +| test.go:137:2:137:51 | ... := ...[0] | test.go:138:20:138:29 | implicit dereference | +| test.go:137:43:137:50 | filename | test.go:137:2:137:51 | ... := ...[0] | +| test.go:138:20:138:29 | implicit dereference | test.go:138:20:138:29 | implicit dereference | +| test.go:138:20:138:29 | implicit dereference | test.go:138:20:138:29 | implicit read of field Reader | +| test.go:138:20:138:29 | implicit read of field Reader | test.go:139:12:139:12 | f | +| test.go:139:12:139:12 | f | test.go:139:12:139:19 | call to Open | +| test.go:139:12:139:19 | call to Open | test.go:141:37:141:38 | rc | +| test.go:152:19:152:22 | definition of file | test.go:153:25:153:28 | file | +| test.go:153:2:153:29 | ... := ...[0] | test.go:154:48:154:52 | file1 | +| test.go:153:25:153:28 | file | test.go:153:2:153:29 | ... := ...[0] | +| test.go:154:2:154:69 | ... := ...[0] | test.go:157:26:157:29 | file | +| test.go:154:32:154:53 | call to NewReader | test.go:154:2:154:69 | ... := ...[0] | +| test.go:154:48:154:52 | file1 | test.go:154:32:154:53 | call to NewReader | +| test.go:157:3:157:36 | ... := ...[0] | test.go:158:36:158:51 | fileReaderCloser | +| test.go:157:26:157:29 | file | test.go:157:3:157:36 | ... := ...[0] | +| test.go:163:20:163:23 | definition of file | test.go:164:25:164:28 | file | +| test.go:164:2:164:29 | ... := ...[0] | test.go:165:66:165:70 | file2 | +| test.go:164:25:164:28 | file | test.go:164:2:164:29 | ... := ...[0] | +| test.go:165:2:165:87 | ... := ...[0] | test.go:169:26:169:29 | file | +| test.go:165:50:165:71 | call to NewReader | test.go:165:2:165:87 | ... := ...[0] | +| test.go:165:66:165:70 | file2 | test.go:165:50:165:71 | call to NewReader | +| test.go:169:26:169:29 | file | test.go:169:26:169:36 | call to Open | +| test.go:169:26:169:36 | call to Open | test.go:170:36:170:51 | fileReaderCloser | +| test.go:175:17:175:20 | definition of file | test.go:178:40:178:43 | file | +| test.go:178:2:178:72 | ... := ...[0] | test.go:180:2:180:11 | bzip2dsnet | +| test.go:178:2:178:72 | ... := ...[0] | test.go:181:26:181:35 | bzip2dsnet | +| test.go:178:40:178:43 | file | test.go:178:2:178:72 | ... := ...[0] | +| test.go:181:12:181:36 | call to NewReader | test.go:183:18:183:24 | tarRead | +| test.go:181:26:181:35 | bzip2dsnet | test.go:181:12:181:36 | call to NewReader | +| test.go:183:18:183:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | +| test.go:186:12:186:15 | definition of file | test.go:189:27:189:30 | file | +| test.go:189:11:189:31 | call to NewReader | test.go:191:2:191:6 | Bzip2 | +| test.go:189:11:189:31 | call to NewReader | test.go:192:26:192:30 | Bzip2 | +| test.go:189:27:189:30 | file | test.go:189:11:189:31 | call to NewReader | +| test.go:192:12:192:31 | call to NewReader | test.go:194:18:194:24 | tarRead | +| test.go:192:26:192:30 | Bzip2 | test.go:192:12:192:31 | call to NewReader | +| test.go:194:18:194:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | +| test.go:196:12:196:15 | definition of file | test.go:199:27:199:30 | file | +| test.go:199:11:199:31 | call to NewReader | test.go:201:2:201:6 | Flate | +| test.go:199:11:199:31 | call to NewReader | test.go:202:26:202:30 | Flate | +| test.go:199:27:199:30 | file | test.go:199:11:199:31 | call to NewReader | +| test.go:202:12:202:31 | call to NewReader | test.go:204:18:204:24 | tarRead | +| test.go:202:26:202:30 | Flate | test.go:202:12:202:31 | call to NewReader | +| test.go:204:18:204:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | +| test.go:206:21:206:24 | definition of file | test.go:210:44:210:47 | file | +| test.go:210:19:210:48 | call to NewReader | test.go:212:2:212:14 | zlibklauspost | +| test.go:210:19:210:48 | call to NewReader | test.go:213:26:213:38 | zlibklauspost | +| test.go:210:44:210:47 | file | test.go:210:19:210:48 | call to NewReader | +| test.go:213:12:213:39 | call to NewReader | test.go:215:18:215:24 | tarRead | +| test.go:213:26:213:38 | zlibklauspost | test.go:213:12:213:39 | call to NewReader | +| test.go:215:18:215:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | +| test.go:217:17:217:20 | definition of file | test.go:220:40:220:43 | file | +| test.go:220:2:220:72 | ... := ...[0] | test.go:222:2:222:11 | flatedsnet | +| test.go:220:2:220:72 | ... := ...[0] | test.go:223:26:223:35 | flatedsnet | +| test.go:220:40:220:43 | file | test.go:220:2:220:72 | ... := ...[0] | +| test.go:223:12:223:36 | call to NewReader | test.go:225:18:225:24 | tarRead | +| test.go:223:26:223:35 | flatedsnet | test.go:223:12:223:36 | call to NewReader | +| test.go:225:18:225:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | +| test.go:227:20:227:23 | definition of file | test.go:230:46:230:49 | file | +| test.go:230:2:230:50 | ... := ...[0] | test.go:232:2:232:14 | zlibklauspost | +| test.go:230:2:230:50 | ... := ...[0] | test.go:233:26:233:38 | zlibklauspost | +| test.go:230:46:230:49 | file | test.go:230:2:230:50 | ... := ...[0] | +| test.go:233:12:233:39 | call to NewReader | test.go:235:18:235:24 | tarRead | +| test.go:233:26:233:38 | zlibklauspost | test.go:233:12:233:39 | call to NewReader | +| test.go:235:18:235:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | +| test.go:237:11:237:14 | definition of file | test.go:240:28:240:31 | file | +| test.go:240:2:240:32 | ... := ...[0] | test.go:242:2:242:5 | Zlib | +| test.go:240:2:240:32 | ... := ...[0] | test.go:243:26:243:29 | Zlib | +| test.go:240:28:240:31 | file | test.go:240:2:240:32 | ... := ...[0] | +| test.go:243:12:243:30 | call to NewReader | test.go:245:18:245:24 | tarRead | +| test.go:243:26:243:29 | Zlib | test.go:243:12:243:30 | call to NewReader | +| test.go:245:18:245:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | +| test.go:247:13:247:16 | definition of file | test.go:250:29:250:32 | file | +| test.go:250:12:250:33 | call to NewReader | test.go:252:2:252:7 | Snappy | +| test.go:250:12:250:33 | call to NewReader | test.go:253:2:253:7 | Snappy | +| test.go:250:12:250:33 | call to NewReader | test.go:254:26:254:31 | Snappy | +| test.go:250:29:250:32 | file | test.go:250:12:250:33 | call to NewReader | +| test.go:254:12:254:32 | call to NewReader | test.go:256:18:256:24 | tarRead | +| test.go:254:26:254:31 | Snappy | test.go:254:12:254:32 | call to NewReader | +| test.go:256:18:256:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | +| test.go:258:22:258:25 | definition of file | test.go:261:47:261:50 | file | +| test.go:261:21:261:51 | call to NewReader | test.go:263:2:263:16 | snappyklauspost | +| test.go:261:21:261:51 | call to NewReader | test.go:265:2:265:16 | snappyklauspost | +| test.go:261:21:261:51 | call to NewReader | test.go:266:2:266:16 | snappyklauspost | +| test.go:261:21:261:51 | call to NewReader | test.go:267:26:267:40 | snappyklauspost | +| test.go:261:47:261:50 | file | test.go:261:21:261:51 | call to NewReader | +| test.go:267:12:267:41 | call to NewReader | test.go:269:18:269:24 | tarRead | +| test.go:267:26:267:40 | snappyklauspost | test.go:267:12:267:41 | call to NewReader | +| test.go:269:18:269:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | +| test.go:271:9:271:12 | definition of file | test.go:274:21:274:24 | file | +| test.go:274:8:274:25 | call to NewReader | test.go:276:2:276:3 | S2 | +| test.go:274:8:274:25 | call to NewReader | test.go:278:2:278:3 | S2 | +| test.go:274:8:274:25 | call to NewReader | test.go:279:26:279:27 | S2 | +| test.go:274:21:274:24 | file | test.go:274:8:274:25 | call to NewReader | +| test.go:279:12:279:28 | call to NewReader | test.go:281:18:281:24 | tarRead | +| test.go:279:26:279:27 | S2 | test.go:279:12:279:28 | call to NewReader | +| test.go:281:18:281:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | +| test.go:283:11:283:14 | definition of file | test.go:286:32:286:35 | file | +| test.go:286:2:286:36 | ... := ...[0] | test.go:288:2:288:9 | gzipRead | +| test.go:286:2:286:36 | ... := ...[0] | test.go:289:26:289:33 | gzipRead | +| test.go:286:32:286:35 | file | test.go:286:2:286:36 | ... := ...[0] | +| test.go:289:12:289:34 | call to NewReader | test.go:291:18:291:24 | tarRead | +| test.go:289:26:289:33 | gzipRead | test.go:289:12:289:34 | call to NewReader | +| test.go:291:18:291:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | +| test.go:293:20:293:23 | definition of file | test.go:296:46:296:49 | file | +| test.go:296:2:296:50 | ... := ...[0] | test.go:298:2:298:14 | gzipklauspost | +| test.go:296:2:296:50 | ... := ...[0] | test.go:300:2:300:14 | gzipklauspost | +| test.go:296:2:296:50 | ... := ...[0] | test.go:301:26:301:38 | gzipklauspost | +| test.go:296:46:296:49 | file | test.go:296:2:296:50 | ... := ...[0] | +| test.go:301:12:301:39 | call to NewReader | test.go:303:18:303:24 | tarRead | +| test.go:301:26:301:38 | gzipklauspost | test.go:301:12:301:39 | call to NewReader | +| test.go:303:18:303:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | +| test.go:305:20:305:23 | definition of file | test.go:308:42:308:45 | file | +| test.go:308:2:308:46 | ... := ...[0] | test.go:312:2:312:10 | gzippgzip | +| test.go:308:2:308:46 | ... := ...[0] | test.go:313:26:313:34 | gzippgzip | +| test.go:308:42:308:45 | file | test.go:308:2:308:46 | ... := ...[0] | +| test.go:313:12:313:35 | call to NewReader | test.go:315:18:315:24 | tarRead | +| test.go:313:26:313:34 | gzippgzip | test.go:313:12:313:35 | call to NewReader | +| test.go:315:18:315:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | +| test.go:317:21:317:24 | definition of file | test.go:320:37:320:40 | file | +| test.go:320:2:320:41 | ... := ...[0] | test.go:322:2:322:5 | zstd | +| test.go:320:2:320:41 | ... := ...[0] | test.go:324:2:324:5 | zstd | +| test.go:320:2:320:41 | ... := ...[0] | test.go:326:2:326:5 | zstd | +| test.go:320:2:320:41 | ... := ...[0] | test.go:327:26:327:29 | zstd | +| test.go:320:37:320:40 | file | test.go:320:2:320:41 | ... := ...[0] | +| test.go:327:12:327:30 | call to NewReader | test.go:329:18:329:24 | tarRead | +| test.go:327:26:327:29 | zstd | test.go:327:12:327:30 | call to NewReader | +| test.go:329:18:329:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | +| test.go:331:19:331:22 | definition of file | test.go:334:32:334:35 | file | +| test.go:334:10:334:36 | call to NewReader | test.go:336:2:336:5 | zstd | +| test.go:334:10:334:36 | call to NewReader | test.go:337:26:337:29 | zstd | +| test.go:334:32:334:35 | file | test.go:334:10:334:36 | call to NewReader | +| test.go:337:12:337:30 | call to NewReader | test.go:339:18:339:24 | tarRead | +| test.go:337:26:337:29 | zstd | test.go:337:12:337:30 | call to NewReader | +| test.go:339:18:339:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | +| test.go:341:9:341:12 | definition of file | test.go:344:28:344:31 | file | +| test.go:344:2:344:32 | ... := ...[0] | test.go:346:2:346:7 | xzRead | +| test.go:344:2:344:32 | ... := ...[0] | test.go:347:26:347:31 | xzRead | +| test.go:344:28:344:31 | file | test.go:344:2:344:32 | ... := ...[0] | +| test.go:347:12:347:32 | call to NewReader | test.go:349:18:349:24 | tarRead | +| test.go:347:26:347:31 | xzRead | test.go:347:12:347:32 | call to NewReader | +| test.go:349:18:349:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | +| test.go:352:22:352:28 | definition of tarRead | test.go:364:25:364:31 | tarRead | +| test.go:352:22:352:28 | definition of tarRead | test.go:364:25:364:31 | tarRead | +| test.go:352:22:352:28 | definition of tarRead | test.go:364:25:364:31 | tarRead | +| test.go:352:22:352:28 | definition of tarRead | test.go:364:25:364:31 | tarRead | +| test.go:352:22:352:28 | definition of tarRead | test.go:364:25:364:31 | tarRead | +| test.go:352:22:352:28 | definition of tarRead | test.go:364:25:364:31 | tarRead | +| test.go:352:22:352:28 | definition of tarRead | test.go:364:25:364:31 | tarRead | +| test.go:352:22:352:28 | definition of tarRead | test.go:364:25:364:31 | tarRead | nodes | test.go:56:15:56:26 | selection of Body | semmle.label | selection of Body | | test.go:57:16:57:27 | selection of Body | semmle.label | selection of Body | @@ -186,216 +196,230 @@ nodes | test.go:69:16:69:27 | selection of Body | semmle.label | selection of Body | | test.go:70:7:70:18 | selection of Body | semmle.label | selection of Body | | test.go:71:9:71:20 | selection of Body | semmle.label | selection of Body | -| test.go:72:5:72:16 | selection of Body | semmle.label | selection of Body | -| test.go:73:7:73:18 | selection of Body | semmle.label | selection of Body | -| test.go:74:16:74:27 | selection of Body | semmle.label | selection of Body | +| test.go:72:18:72:29 | selection of Body | semmle.label | selection of Body | +| test.go:73:5:73:16 | selection of Body | semmle.label | selection of Body | +| test.go:74:7:74:18 | selection of Body | semmle.label | selection of Body | | test.go:75:16:75:27 | selection of Body | semmle.label | selection of Body | -| test.go:76:17:76:28 | selection of Body | semmle.label | selection of Body | -| test.go:77:15:77:26 | selection of Body | semmle.label | selection of Body | -| test.go:78:5:78:16 | selection of Body | semmle.label | selection of Body | -| test.go:112:17:112:19 | definition of src | semmle.label | definition of src | -| test.go:113:2:113:32 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:113:29:113:31 | src | semmle.label | src | -| test.go:117:11:117:26 | type conversion | semmle.label | type conversion | -| test.go:118:23:118:28 | newSrc | semmle.label | newSrc | -| test.go:121:20:121:27 | definition of filename | semmle.label | definition of filename | -| test.go:123:2:123:33 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:123:25:123:32 | filename | semmle.label | filename | -| test.go:125:3:125:19 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:125:12:125:12 | f | semmle.label | f | -| test.go:127:37:127:38 | rc | semmle.label | rc | -| test.go:136:2:136:51 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:136:43:136:50 | filename | semmle.label | filename | -| test.go:137:20:137:29 | implicit dereference | semmle.label | implicit dereference | -| test.go:137:20:137:29 | implicit read of field Reader | semmle.label | implicit read of field Reader | -| test.go:138:12:138:12 | f | semmle.label | f | -| test.go:138:12:138:19 | call to Open | semmle.label | call to Open | -| test.go:140:37:140:38 | rc | semmle.label | rc | -| test.go:151:19:151:22 | definition of file | semmle.label | definition of file | -| test.go:152:2:152:29 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:152:25:152:28 | file | semmle.label | file | -| test.go:153:2:153:69 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:153:32:153:53 | call to NewReader | semmle.label | call to NewReader | -| test.go:153:48:153:52 | file1 | semmle.label | file1 | -| test.go:156:3:156:36 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:156:26:156:29 | file | semmle.label | file | -| test.go:157:36:157:51 | fileReaderCloser | semmle.label | fileReaderCloser | -| test.go:162:20:162:23 | definition of file | semmle.label | definition of file | -| test.go:163:2:163:29 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:163:25:163:28 | file | semmle.label | file | -| test.go:164:2:164:87 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:164:50:164:71 | call to NewReader | semmle.label | call to NewReader | -| test.go:164:66:164:70 | file2 | semmle.label | file2 | -| test.go:168:26:168:29 | file | semmle.label | file | -| test.go:168:26:168:36 | call to Open | semmle.label | call to Open | -| test.go:169:36:169:51 | fileReaderCloser | semmle.label | fileReaderCloser | -| test.go:174:17:174:20 | definition of file | semmle.label | definition of file | -| test.go:177:2:177:72 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:177:40:177:43 | file | semmle.label | file | -| test.go:179:2:179:11 | bzip2dsnet | semmle.label | bzip2dsnet | -| test.go:180:12:180:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:180:26:180:35 | bzip2dsnet | semmle.label | bzip2dsnet | -| test.go:182:18:182:24 | tarRead | semmle.label | tarRead | -| test.go:185:12:185:15 | definition of file | semmle.label | definition of file | -| test.go:188:11:188:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:188:27:188:30 | file | semmle.label | file | -| test.go:190:2:190:6 | Bzip2 | semmle.label | Bzip2 | -| test.go:191:12:191:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:191:26:191:30 | Bzip2 | semmle.label | Bzip2 | -| test.go:193:18:193:24 | tarRead | semmle.label | tarRead | -| test.go:195:12:195:15 | definition of file | semmle.label | definition of file | -| test.go:198:11:198:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:198:27:198:30 | file | semmle.label | file | -| test.go:200:2:200:6 | Flate | semmle.label | Flate | -| test.go:201:12:201:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:201:26:201:30 | Flate | semmle.label | Flate | -| test.go:203:18:203:24 | tarRead | semmle.label | tarRead | -| test.go:205:21:205:24 | definition of file | semmle.label | definition of file | -| test.go:209:19:209:48 | call to NewReader | semmle.label | call to NewReader | -| test.go:209:44:209:47 | file | semmle.label | file | -| test.go:211:2:211:14 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:212:12:212:39 | call to NewReader | semmle.label | call to NewReader | -| test.go:212:26:212:38 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:214:18:214:24 | tarRead | semmle.label | tarRead | -| test.go:216:17:216:20 | definition of file | semmle.label | definition of file | -| test.go:219:2:219:72 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:219:40:219:43 | file | semmle.label | file | -| test.go:221:2:221:11 | flatedsnet | semmle.label | flatedsnet | -| test.go:222:12:222:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:222:26:222:35 | flatedsnet | semmle.label | flatedsnet | -| test.go:224:18:224:24 | tarRead | semmle.label | tarRead | -| test.go:226:20:226:23 | definition of file | semmle.label | definition of file | -| test.go:229:2:229:50 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:229:46:229:49 | file | semmle.label | file | -| test.go:231:2:231:14 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:232:12:232:39 | call to NewReader | semmle.label | call to NewReader | -| test.go:232:26:232:38 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:234:18:234:24 | tarRead | semmle.label | tarRead | -| test.go:236:11:236:14 | definition of file | semmle.label | definition of file | -| test.go:239:2:239:32 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:239:28:239:31 | file | semmle.label | file | -| test.go:241:2:241:5 | Zlib | semmle.label | Zlib | -| test.go:242:12:242:30 | call to NewReader | semmle.label | call to NewReader | -| test.go:242:26:242:29 | Zlib | semmle.label | Zlib | -| test.go:244:18:244:24 | tarRead | semmle.label | tarRead | -| test.go:246:13:246:16 | definition of file | semmle.label | definition of file | -| test.go:249:12:249:33 | call to NewReader | semmle.label | call to NewReader | -| test.go:249:29:249:32 | file | semmle.label | file | -| test.go:251:2:251:7 | Snappy | semmle.label | Snappy | +| test.go:76:16:76:27 | selection of Body | semmle.label | selection of Body | +| test.go:77:17:77:28 | selection of Body | semmle.label | selection of Body | +| test.go:78:15:78:26 | selection of Body | semmle.label | selection of Body | +| test.go:79:5:79:16 | selection of Body | semmle.label | selection of Body | +| test.go:113:17:113:19 | definition of src | semmle.label | definition of src | +| test.go:114:2:114:32 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:114:29:114:31 | src | semmle.label | src | +| test.go:118:11:118:26 | type conversion | semmle.label | type conversion | +| test.go:119:23:119:28 | newSrc | semmle.label | newSrc | +| test.go:122:20:122:27 | definition of filename | semmle.label | definition of filename | +| test.go:124:2:124:33 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:124:25:124:32 | filename | semmle.label | filename | +| test.go:126:3:126:19 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:126:12:126:12 | f | semmle.label | f | +| test.go:128:37:128:38 | rc | semmle.label | rc | +| test.go:137:2:137:51 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:137:43:137:50 | filename | semmle.label | filename | +| test.go:138:20:138:29 | implicit dereference | semmle.label | implicit dereference | +| test.go:138:20:138:29 | implicit read of field Reader | semmle.label | implicit read of field Reader | +| test.go:139:12:139:12 | f | semmle.label | f | +| test.go:139:12:139:19 | call to Open | semmle.label | call to Open | +| test.go:141:37:141:38 | rc | semmle.label | rc | +| test.go:152:19:152:22 | definition of file | semmle.label | definition of file | +| test.go:153:2:153:29 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:153:25:153:28 | file | semmle.label | file | +| test.go:154:2:154:69 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:154:32:154:53 | call to NewReader | semmle.label | call to NewReader | +| test.go:154:48:154:52 | file1 | semmle.label | file1 | +| test.go:157:3:157:36 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:157:26:157:29 | file | semmle.label | file | +| test.go:158:36:158:51 | fileReaderCloser | semmle.label | fileReaderCloser | +| test.go:163:20:163:23 | definition of file | semmle.label | definition of file | +| test.go:164:2:164:29 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:164:25:164:28 | file | semmle.label | file | +| test.go:165:2:165:87 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:165:50:165:71 | call to NewReader | semmle.label | call to NewReader | +| test.go:165:66:165:70 | file2 | semmle.label | file2 | +| test.go:169:26:169:29 | file | semmle.label | file | +| test.go:169:26:169:36 | call to Open | semmle.label | call to Open | +| test.go:170:36:170:51 | fileReaderCloser | semmle.label | fileReaderCloser | +| test.go:175:17:175:20 | definition of file | semmle.label | definition of file | +| test.go:178:2:178:72 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:178:40:178:43 | file | semmle.label | file | +| test.go:180:2:180:11 | bzip2dsnet | semmle.label | bzip2dsnet | +| test.go:181:12:181:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:181:26:181:35 | bzip2dsnet | semmle.label | bzip2dsnet | +| test.go:183:18:183:24 | tarRead | semmle.label | tarRead | +| test.go:186:12:186:15 | definition of file | semmle.label | definition of file | +| test.go:189:11:189:31 | call to NewReader | semmle.label | call to NewReader | +| test.go:189:27:189:30 | file | semmle.label | file | +| test.go:191:2:191:6 | Bzip2 | semmle.label | Bzip2 | +| test.go:192:12:192:31 | call to NewReader | semmle.label | call to NewReader | +| test.go:192:26:192:30 | Bzip2 | semmle.label | Bzip2 | +| test.go:194:18:194:24 | tarRead | semmle.label | tarRead | +| test.go:196:12:196:15 | definition of file | semmle.label | definition of file | +| test.go:199:11:199:31 | call to NewReader | semmle.label | call to NewReader | +| test.go:199:27:199:30 | file | semmle.label | file | +| test.go:201:2:201:6 | Flate | semmle.label | Flate | +| test.go:202:12:202:31 | call to NewReader | semmle.label | call to NewReader | +| test.go:202:26:202:30 | Flate | semmle.label | Flate | +| test.go:204:18:204:24 | tarRead | semmle.label | tarRead | +| test.go:206:21:206:24 | definition of file | semmle.label | definition of file | +| test.go:210:19:210:48 | call to NewReader | semmle.label | call to NewReader | +| test.go:210:44:210:47 | file | semmle.label | file | +| test.go:212:2:212:14 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:213:12:213:39 | call to NewReader | semmle.label | call to NewReader | +| test.go:213:26:213:38 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:215:18:215:24 | tarRead | semmle.label | tarRead | +| test.go:217:17:217:20 | definition of file | semmle.label | definition of file | +| test.go:220:2:220:72 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:220:40:220:43 | file | semmle.label | file | +| test.go:222:2:222:11 | flatedsnet | semmle.label | flatedsnet | +| test.go:223:12:223:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:223:26:223:35 | flatedsnet | semmle.label | flatedsnet | +| test.go:225:18:225:24 | tarRead | semmle.label | tarRead | +| test.go:227:20:227:23 | definition of file | semmle.label | definition of file | +| test.go:230:2:230:50 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:230:46:230:49 | file | semmle.label | file | +| test.go:232:2:232:14 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:233:12:233:39 | call to NewReader | semmle.label | call to NewReader | +| test.go:233:26:233:38 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:235:18:235:24 | tarRead | semmle.label | tarRead | +| test.go:237:11:237:14 | definition of file | semmle.label | definition of file | +| test.go:240:2:240:32 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:240:28:240:31 | file | semmle.label | file | +| test.go:242:2:242:5 | Zlib | semmle.label | Zlib | +| test.go:243:12:243:30 | call to NewReader | semmle.label | call to NewReader | +| test.go:243:26:243:29 | Zlib | semmle.label | Zlib | +| test.go:245:18:245:24 | tarRead | semmle.label | tarRead | +| test.go:247:13:247:16 | definition of file | semmle.label | definition of file | +| test.go:250:12:250:33 | call to NewReader | semmle.label | call to NewReader | +| test.go:250:29:250:32 | file | semmle.label | file | | test.go:252:2:252:7 | Snappy | semmle.label | Snappy | -| test.go:253:12:253:32 | call to NewReader | semmle.label | call to NewReader | -| test.go:253:26:253:31 | Snappy | semmle.label | Snappy | -| test.go:255:18:255:24 | tarRead | semmle.label | tarRead | -| test.go:270:9:270:12 | definition of file | semmle.label | definition of file | -| test.go:273:8:273:25 | call to NewReader | semmle.label | call to NewReader | -| test.go:273:21:273:24 | file | semmle.label | file | -| test.go:275:2:275:3 | S2 | semmle.label | S2 | -| test.go:277:2:277:3 | S2 | semmle.label | S2 | -| test.go:278:12:278:28 | call to NewReader | semmle.label | call to NewReader | -| test.go:278:26:278:27 | S2 | semmle.label | S2 | -| test.go:280:18:280:24 | tarRead | semmle.label | tarRead | -| test.go:282:11:282:14 | definition of file | semmle.label | definition of file | -| test.go:285:2:285:36 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:285:32:285:35 | file | semmle.label | file | -| test.go:287:2:287:9 | gzipRead | semmle.label | gzipRead | -| test.go:288:12:288:34 | call to NewReader | semmle.label | call to NewReader | -| test.go:288:26:288:33 | gzipRead | semmle.label | gzipRead | -| test.go:290:18:290:24 | tarRead | semmle.label | tarRead | -| test.go:292:20:292:23 | definition of file | semmle.label | definition of file | -| test.go:295:2:295:50 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:295:46:295:49 | file | semmle.label | file | -| test.go:297:2:297:14 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:299:2:299:14 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:300:12:300:39 | call to NewReader | semmle.label | call to NewReader | -| test.go:300:26:300:38 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:302:18:302:24 | tarRead | semmle.label | tarRead | -| test.go:304:20:304:23 | definition of file | semmle.label | definition of file | -| test.go:307:2:307:46 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:307:42:307:45 | file | semmle.label | file | -| test.go:311:2:311:10 | gzippgzip | semmle.label | gzippgzip | -| test.go:312:12:312:35 | call to NewReader | semmle.label | call to NewReader | -| test.go:312:26:312:34 | gzippgzip | semmle.label | gzippgzip | -| test.go:314:18:314:24 | tarRead | semmle.label | tarRead | -| test.go:316:21:316:24 | definition of file | semmle.label | definition of file | -| test.go:319:2:319:41 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:319:37:319:40 | file | semmle.label | file | -| test.go:321:2:321:5 | zstd | semmle.label | zstd | -| test.go:323:2:323:5 | zstd | semmle.label | zstd | -| test.go:325:2:325:5 | zstd | semmle.label | zstd | -| test.go:326:12:326:30 | call to NewReader | semmle.label | call to NewReader | -| test.go:326:26:326:29 | zstd | semmle.label | zstd | -| test.go:328:18:328:24 | tarRead | semmle.label | tarRead | -| test.go:330:19:330:22 | definition of file | semmle.label | definition of file | -| test.go:333:10:333:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:333:32:333:35 | file | semmle.label | file | -| test.go:335:2:335:5 | zstd | semmle.label | zstd | -| test.go:336:12:336:30 | call to NewReader | semmle.label | call to NewReader | -| test.go:336:26:336:29 | zstd | semmle.label | zstd | -| test.go:338:18:338:24 | tarRead | semmle.label | tarRead | -| test.go:340:9:340:12 | definition of file | semmle.label | definition of file | -| test.go:343:2:343:32 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:343:28:343:31 | file | semmle.label | file | -| test.go:345:2:345:7 | xzRead | semmle.label | xzRead | -| test.go:346:12:346:32 | call to NewReader | semmle.label | call to NewReader | -| test.go:346:26:346:31 | xzRead | semmle.label | xzRead | -| test.go:348:18:348:24 | tarRead | semmle.label | tarRead | -| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | -| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | -| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | -| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | -| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | -| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | -| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | -| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | +| test.go:253:2:253:7 | Snappy | semmle.label | Snappy | +| test.go:254:12:254:32 | call to NewReader | semmle.label | call to NewReader | +| test.go:254:26:254:31 | Snappy | semmle.label | Snappy | +| test.go:256:18:256:24 | tarRead | semmle.label | tarRead | +| test.go:258:22:258:25 | definition of file | semmle.label | definition of file | +| test.go:261:21:261:51 | call to NewReader | semmle.label | call to NewReader | +| test.go:261:47:261:50 | file | semmle.label | file | +| test.go:263:2:263:16 | snappyklauspost | semmle.label | snappyklauspost | +| test.go:265:2:265:16 | snappyklauspost | semmle.label | snappyklauspost | +| test.go:266:2:266:16 | snappyklauspost | semmle.label | snappyklauspost | +| test.go:267:12:267:41 | call to NewReader | semmle.label | call to NewReader | +| test.go:267:26:267:40 | snappyklauspost | semmle.label | snappyklauspost | +| test.go:269:18:269:24 | tarRead | semmle.label | tarRead | +| test.go:271:9:271:12 | definition of file | semmle.label | definition of file | +| test.go:274:8:274:25 | call to NewReader | semmle.label | call to NewReader | +| test.go:274:21:274:24 | file | semmle.label | file | +| test.go:276:2:276:3 | S2 | semmle.label | S2 | +| test.go:278:2:278:3 | S2 | semmle.label | S2 | +| test.go:279:12:279:28 | call to NewReader | semmle.label | call to NewReader | +| test.go:279:26:279:27 | S2 | semmle.label | S2 | +| test.go:281:18:281:24 | tarRead | semmle.label | tarRead | +| test.go:283:11:283:14 | definition of file | semmle.label | definition of file | +| test.go:286:2:286:36 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:286:32:286:35 | file | semmle.label | file | +| test.go:288:2:288:9 | gzipRead | semmle.label | gzipRead | +| test.go:289:12:289:34 | call to NewReader | semmle.label | call to NewReader | +| test.go:289:26:289:33 | gzipRead | semmle.label | gzipRead | +| test.go:291:18:291:24 | tarRead | semmle.label | tarRead | +| test.go:293:20:293:23 | definition of file | semmle.label | definition of file | +| test.go:296:2:296:50 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:296:46:296:49 | file | semmle.label | file | +| test.go:298:2:298:14 | gzipklauspost | semmle.label | gzipklauspost | +| test.go:300:2:300:14 | gzipklauspost | semmle.label | gzipklauspost | +| test.go:301:12:301:39 | call to NewReader | semmle.label | call to NewReader | +| test.go:301:26:301:38 | gzipklauspost | semmle.label | gzipklauspost | +| test.go:303:18:303:24 | tarRead | semmle.label | tarRead | +| test.go:305:20:305:23 | definition of file | semmle.label | definition of file | +| test.go:308:2:308:46 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:308:42:308:45 | file | semmle.label | file | +| test.go:312:2:312:10 | gzippgzip | semmle.label | gzippgzip | +| test.go:313:12:313:35 | call to NewReader | semmle.label | call to NewReader | +| test.go:313:26:313:34 | gzippgzip | semmle.label | gzippgzip | +| test.go:315:18:315:24 | tarRead | semmle.label | tarRead | +| test.go:317:21:317:24 | definition of file | semmle.label | definition of file | +| test.go:320:2:320:41 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:320:37:320:40 | file | semmle.label | file | +| test.go:322:2:322:5 | zstd | semmle.label | zstd | +| test.go:324:2:324:5 | zstd | semmle.label | zstd | +| test.go:326:2:326:5 | zstd | semmle.label | zstd | +| test.go:327:12:327:30 | call to NewReader | semmle.label | call to NewReader | +| test.go:327:26:327:29 | zstd | semmle.label | zstd | +| test.go:329:18:329:24 | tarRead | semmle.label | tarRead | +| test.go:331:19:331:22 | definition of file | semmle.label | definition of file | +| test.go:334:10:334:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:334:32:334:35 | file | semmle.label | file | +| test.go:336:2:336:5 | zstd | semmle.label | zstd | +| test.go:337:12:337:30 | call to NewReader | semmle.label | call to NewReader | +| test.go:337:26:337:29 | zstd | semmle.label | zstd | +| test.go:339:18:339:24 | tarRead | semmle.label | tarRead | +| test.go:341:9:341:12 | definition of file | semmle.label | definition of file | +| test.go:344:2:344:32 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:344:28:344:31 | file | semmle.label | file | +| test.go:346:2:346:7 | xzRead | semmle.label | xzRead | +| test.go:347:12:347:32 | call to NewReader | semmle.label | call to NewReader | +| test.go:347:26:347:31 | xzRead | semmle.label | xzRead | +| test.go:349:18:349:24 | tarRead | semmle.label | tarRead | +| test.go:352:22:352:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:352:22:352:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:352:22:352:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:352:22:352:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:352:22:352:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:352:22:352:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:352:22:352:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:352:22:352:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:364:25:364:31 | tarRead | semmle.label | tarRead | +| test.go:364:25:364:31 | tarRead | semmle.label | tarRead | +| test.go:364:25:364:31 | tarRead | semmle.label | tarRead | +| test.go:364:25:364:31 | tarRead | semmle.label | tarRead | +| test.go:364:25:364:31 | tarRead | semmle.label | tarRead | +| test.go:364:25:364:31 | tarRead | semmle.label | tarRead | +| test.go:364:25:364:31 | tarRead | semmle.label | tarRead | +| test.go:364:25:364:31 | tarRead | semmle.label | tarRead | subpaths #select -| test.go:118:23:118:28 | newSrc | test.go:61:13:61:24 | selection of Body | test.go:118:23:118:28 | newSrc | This decompression is $@. | test.go:61:13:61:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:127:37:127:38 | rc | test.go:58:16:58:46 | call to FormValue | test.go:127:37:127:38 | rc | This decompression is $@. | test.go:58:16:58:46 | call to FormValue | decompressing compressed data without managing output size | -| test.go:140:37:140:38 | rc | test.go:58:16:58:46 | call to FormValue | test.go:140:37:140:38 | rc | This decompression is $@. | test.go:58:16:58:46 | call to FormValue | decompressing compressed data without managing output size | -| test.go:157:36:157:51 | fileReaderCloser | test.go:56:15:56:26 | selection of Body | test.go:157:36:157:51 | fileReaderCloser | This decompression is $@. | test.go:56:15:56:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:157:36:157:51 | fileReaderCloser | test.go:62:15:62:26 | selection of Body | test.go:157:36:157:51 | fileReaderCloser | This decompression is $@. | test.go:62:15:62:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:169:36:169:51 | fileReaderCloser | test.go:57:16:57:27 | selection of Body | test.go:169:36:169:51 | fileReaderCloser | This decompression is $@. | test.go:57:16:57:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:169:36:169:51 | fileReaderCloser | test.go:63:16:63:27 | selection of Body | test.go:169:36:169:51 | fileReaderCloser | This decompression is $@. | test.go:63:16:63:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:179:2:179:11 | bzip2dsnet | test.go:64:13:64:24 | selection of Body | test.go:179:2:179:11 | bzip2dsnet | This decompression is $@. | test.go:64:13:64:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:190:2:190:6 | Bzip2 | test.go:65:8:65:19 | selection of Body | test.go:190:2:190:6 | Bzip2 | This decompression is $@. | test.go:65:8:65:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:200:2:200:6 | Flate | test.go:66:8:66:19 | selection of Body | test.go:200:2:200:6 | Flate | This decompression is $@. | test.go:66:8:66:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:211:2:211:14 | zlibklauspost | test.go:67:17:67:28 | selection of Body | test.go:211:2:211:14 | zlibklauspost | This decompression is $@. | test.go:67:17:67:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:221:2:221:11 | flatedsnet | test.go:68:13:68:24 | selection of Body | test.go:221:2:221:11 | flatedsnet | This decompression is $@. | test.go:68:13:68:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:231:2:231:14 | zlibklauspost | test.go:69:16:69:27 | selection of Body | test.go:231:2:231:14 | zlibklauspost | This decompression is $@. | test.go:69:16:69:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:241:2:241:5 | Zlib | test.go:70:7:70:18 | selection of Body | test.go:241:2:241:5 | Zlib | This decompression is $@. | test.go:70:7:70:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:251:2:251:7 | Snappy | test.go:71:9:71:20 | selection of Body | test.go:251:2:251:7 | Snappy | This decompression is $@. | test.go:71:9:71:20 | selection of Body | decompressing compressed data without managing output size | +| test.go:119:23:119:28 | newSrc | test.go:61:13:61:24 | selection of Body | test.go:119:23:119:28 | newSrc | This decompression is $@. | test.go:61:13:61:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:128:37:128:38 | rc | test.go:58:16:58:46 | call to FormValue | test.go:128:37:128:38 | rc | This decompression is $@. | test.go:58:16:58:46 | call to FormValue | decompressing compressed data without managing output size | +| test.go:141:37:141:38 | rc | test.go:58:16:58:46 | call to FormValue | test.go:141:37:141:38 | rc | This decompression is $@. | test.go:58:16:58:46 | call to FormValue | decompressing compressed data without managing output size | +| test.go:158:36:158:51 | fileReaderCloser | test.go:56:15:56:26 | selection of Body | test.go:158:36:158:51 | fileReaderCloser | This decompression is $@. | test.go:56:15:56:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:158:36:158:51 | fileReaderCloser | test.go:62:15:62:26 | selection of Body | test.go:158:36:158:51 | fileReaderCloser | This decompression is $@. | test.go:62:15:62:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:170:36:170:51 | fileReaderCloser | test.go:57:16:57:27 | selection of Body | test.go:170:36:170:51 | fileReaderCloser | This decompression is $@. | test.go:57:16:57:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:170:36:170:51 | fileReaderCloser | test.go:63:16:63:27 | selection of Body | test.go:170:36:170:51 | fileReaderCloser | This decompression is $@. | test.go:63:16:63:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:180:2:180:11 | bzip2dsnet | test.go:64:13:64:24 | selection of Body | test.go:180:2:180:11 | bzip2dsnet | This decompression is $@. | test.go:64:13:64:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:191:2:191:6 | Bzip2 | test.go:65:8:65:19 | selection of Body | test.go:191:2:191:6 | Bzip2 | This decompression is $@. | test.go:65:8:65:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:201:2:201:6 | Flate | test.go:66:8:66:19 | selection of Body | test.go:201:2:201:6 | Flate | This decompression is $@. | test.go:66:8:66:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:212:2:212:14 | zlibklauspost | test.go:67:17:67:28 | selection of Body | test.go:212:2:212:14 | zlibklauspost | This decompression is $@. | test.go:67:17:67:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:222:2:222:11 | flatedsnet | test.go:68:13:68:24 | selection of Body | test.go:222:2:222:11 | flatedsnet | This decompression is $@. | test.go:68:13:68:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:232:2:232:14 | zlibklauspost | test.go:69:16:69:27 | selection of Body | test.go:232:2:232:14 | zlibklauspost | This decompression is $@. | test.go:69:16:69:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:242:2:242:5 | Zlib | test.go:70:7:70:18 | selection of Body | test.go:242:2:242:5 | Zlib | This decompression is $@. | test.go:70:7:70:18 | selection of Body | decompressing compressed data without managing output size | | test.go:252:2:252:7 | Snappy | test.go:71:9:71:20 | selection of Body | test.go:252:2:252:7 | Snappy | This decompression is $@. | test.go:71:9:71:20 | selection of Body | decompressing compressed data without managing output size | -| test.go:275:2:275:3 | S2 | test.go:72:5:72:16 | selection of Body | test.go:275:2:275:3 | S2 | This decompression is $@. | test.go:72:5:72:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:277:2:277:3 | S2 | test.go:72:5:72:16 | selection of Body | test.go:277:2:277:3 | S2 | This decompression is $@. | test.go:72:5:72:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:287:2:287:9 | gzipRead | test.go:73:7:73:18 | selection of Body | test.go:287:2:287:9 | gzipRead | This decompression is $@. | test.go:73:7:73:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:297:2:297:14 | gzipklauspost | test.go:74:16:74:27 | selection of Body | test.go:297:2:297:14 | gzipklauspost | This decompression is $@. | test.go:74:16:74:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:299:2:299:14 | gzipklauspost | test.go:74:16:74:27 | selection of Body | test.go:299:2:299:14 | gzipklauspost | This decompression is $@. | test.go:74:16:74:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:311:2:311:10 | gzippgzip | test.go:75:16:75:27 | selection of Body | test.go:311:2:311:10 | gzippgzip | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:321:2:321:5 | zstd | test.go:76:17:76:28 | selection of Body | test.go:321:2:321:5 | zstd | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:323:2:323:5 | zstd | test.go:76:17:76:28 | selection of Body | test.go:323:2:323:5 | zstd | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:325:2:325:5 | zstd | test.go:76:17:76:28 | selection of Body | test.go:325:2:325:5 | zstd | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:335:2:335:5 | zstd | test.go:77:15:77:26 | selection of Body | test.go:335:2:335:5 | zstd | This decompression is $@. | test.go:77:15:77:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:345:2:345:7 | xzRead | test.go:78:5:78:16 | selection of Body | test.go:345:2:345:7 | xzRead | This decompression is $@. | test.go:78:5:78:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:64:13:64:24 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:64:13:64:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:65:8:65:19 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:65:8:65:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:66:8:66:19 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:66:8:66:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:67:17:67:28 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:67:17:67:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:68:13:68:24 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:68:13:68:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:69:16:69:27 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:69:16:69:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:70:7:70:18 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:70:7:70:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:71:9:71:20 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:71:9:71:20 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:72:5:72:16 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:72:5:72:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:73:7:73:18 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:73:7:73:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:74:16:74:27 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:74:16:74:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:75:16:75:27 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:76:17:76:28 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:77:15:77:26 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:77:15:77:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:78:5:78:16 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:78:5:78:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:253:2:253:7 | Snappy | test.go:71:9:71:20 | selection of Body | test.go:253:2:253:7 | Snappy | This decompression is $@. | test.go:71:9:71:20 | selection of Body | decompressing compressed data without managing output size | +| test.go:263:2:263:16 | snappyklauspost | test.go:72:18:72:29 | selection of Body | test.go:263:2:263:16 | snappyklauspost | This decompression is $@. | test.go:72:18:72:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:265:2:265:16 | snappyklauspost | test.go:72:18:72:29 | selection of Body | test.go:265:2:265:16 | snappyklauspost | This decompression is $@. | test.go:72:18:72:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:266:2:266:16 | snappyklauspost | test.go:72:18:72:29 | selection of Body | test.go:266:2:266:16 | snappyklauspost | This decompression is $@. | test.go:72:18:72:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:276:2:276:3 | S2 | test.go:73:5:73:16 | selection of Body | test.go:276:2:276:3 | S2 | This decompression is $@. | test.go:73:5:73:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:278:2:278:3 | S2 | test.go:73:5:73:16 | selection of Body | test.go:278:2:278:3 | S2 | This decompression is $@. | test.go:73:5:73:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:288:2:288:9 | gzipRead | test.go:74:7:74:18 | selection of Body | test.go:288:2:288:9 | gzipRead | This decompression is $@. | test.go:74:7:74:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:298:2:298:14 | gzipklauspost | test.go:75:16:75:27 | selection of Body | test.go:298:2:298:14 | gzipklauspost | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:300:2:300:14 | gzipklauspost | test.go:75:16:75:27 | selection of Body | test.go:300:2:300:14 | gzipklauspost | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:312:2:312:10 | gzippgzip | test.go:76:16:76:27 | selection of Body | test.go:312:2:312:10 | gzippgzip | This decompression is $@. | test.go:76:16:76:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:322:2:322:5 | zstd | test.go:77:17:77:28 | selection of Body | test.go:322:2:322:5 | zstd | This decompression is $@. | test.go:77:17:77:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:324:2:324:5 | zstd | test.go:77:17:77:28 | selection of Body | test.go:324:2:324:5 | zstd | This decompression is $@. | test.go:77:17:77:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:326:2:326:5 | zstd | test.go:77:17:77:28 | selection of Body | test.go:326:2:326:5 | zstd | This decompression is $@. | test.go:77:17:77:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:336:2:336:5 | zstd | test.go:78:15:78:26 | selection of Body | test.go:336:2:336:5 | zstd | This decompression is $@. | test.go:78:15:78:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:346:2:346:7 | xzRead | test.go:79:5:79:16 | selection of Body | test.go:346:2:346:7 | xzRead | This decompression is $@. | test.go:79:5:79:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:364:25:364:31 | tarRead | test.go:64:13:64:24 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:64:13:64:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:364:25:364:31 | tarRead | test.go:65:8:65:19 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:65:8:65:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:364:25:364:31 | tarRead | test.go:66:8:66:19 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:66:8:66:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:364:25:364:31 | tarRead | test.go:67:17:67:28 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:67:17:67:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:364:25:364:31 | tarRead | test.go:68:13:68:24 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:68:13:68:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:364:25:364:31 | tarRead | test.go:69:16:69:27 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:69:16:69:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:364:25:364:31 | tarRead | test.go:70:7:70:18 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:70:7:70:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:364:25:364:31 | tarRead | test.go:71:9:71:20 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:71:9:71:20 | selection of Body | decompressing compressed data without managing output size | +| test.go:364:25:364:31 | tarRead | test.go:72:18:72:29 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:72:18:72:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:364:25:364:31 | tarRead | test.go:73:5:73:16 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:73:5:73:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:364:25:364:31 | tarRead | test.go:74:7:74:18 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:74:7:74:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:364:25:364:31 | tarRead | test.go:75:16:75:27 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:364:25:364:31 | tarRead | test.go:76:16:76:27 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:76:16:76:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:364:25:364:31 | tarRead | test.go:77:17:77:28 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:77:17:77:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:364:25:364:31 | tarRead | test.go:78:15:78:26 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:78:15:78:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:364:25:364:31 | tarRead | test.go:79:5:79:16 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:79:5:79:16 | selection of Body | decompressing compressed data without managing output size | diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go index 0246ad9c123..e50d0bd4bd1 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go @@ -69,6 +69,7 @@ func DecompressHandler(w http.ResponseWriter, request *http.Request) { ZlibKlauspost(request.Body) Zlib(request.Body) Snappy(request.Body) + SnappyKlauspost(request.Body) S2(request.Body) Gzip(request.Body) GzipKlauspost(request.Body) 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 index 8e04aa782d1..5d057944d0a 100644 --- 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 @@ -55,8 +55,8 @@ func (_ *ReadSeeker) Seek(_ int64, _ int) (int64, error) { type Reader struct{} -func (_ *Reader) DecodeConcurrent(_ io.Writer, _ int) (int64, error) { - return 0, nil +func (_ *Reader) DecodeConcurrent(_ io.Writer, _ int) (*ReadSeeker, error) { + return nil, nil } func (_ *Reader) Read(_ []byte) (int, 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 index bd836ef83bd..6df6dfdfb66 100644 --- 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 @@ -9,9 +9,11 @@ package snappy import ( io "io" + s2 "github.com/klauspost/compress/s2" + ) -type Reader struct{} +type Reader = s2.Reader func NewReader(_ io.Reader) *Reader { return nil From 572777f11b7e382da950c84ec117e02dd6c331c3 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Sun, 10 Dec 2023 22:18:49 +0100 Subject: [PATCH 042/430] fix a bug in stubs --- .../klauspost/compress/snappy/stub.go | 26 ------------------- 1 file changed, 26 deletions(-) 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 index 6df6dfdfb66..96330aa7d15 100644 --- 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 @@ -20,32 +20,6 @@ func NewReader(_ io.Reader) *Reader { } -func (_ *Reader) DecodeConcurrent(_ io.Writer, _ int) (int64, error) { - return 0, 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 ReadSeeker struct { Reader *Reader } From 7121282b27184a48880ebed9e72238126cb8591c Mon Sep 17 00:00:00 2001 From: Malayke Date: Mon, 11 Dec 2023 23:05:04 +0800 Subject: [PATCH 043/430] add new query for detect DOS --- .../CWE-770/DenialOfService.qhelp | 32 +++++++ .../experimental/CWE-770/DenialOfService.ql | 64 +++++++++++++ .../CWE-770/DenialOfServiceBad.go | 27 ++++++ .../CWE-770/DenialOfServiceGood.go | 30 ++++++ .../CWE-770/DenialOfService.expected | 18 ++++ .../CWE-770/DenialOfService.qlref | 1 + .../CWE-770/DenialOfServiceBad.go | 27 ++++++ .../CWE-770/DenialOfServiceGood.go | 94 +++++++++++++++++++ 8 files changed, 293 insertions(+) create mode 100644 go/ql/src/experimental/CWE-770/DenialOfService.qhelp create mode 100644 go/ql/src/experimental/CWE-770/DenialOfService.ql create mode 100644 go/ql/src/experimental/CWE-770/DenialOfServiceBad.go create mode 100644 go/ql/src/experimental/CWE-770/DenialOfServiceGood.go create mode 100644 go/ql/test/experimental/CWE-770/DenialOfService.expected create mode 100644 go/ql/test/experimental/CWE-770/DenialOfService.qlref create mode 100644 go/ql/test/experimental/CWE-770/DenialOfServiceBad.go create mode 100644 go/ql/test/experimental/CWE-770/DenialOfServiceGood.go diff --git a/go/ql/src/experimental/CWE-770/DenialOfService.qhelp b/go/ql/src/experimental/CWE-770/DenialOfService.qhelp new file mode 100644 index 00000000000..b91f1f7e3b0 --- /dev/null +++ b/go/ql/src/experimental/CWE-770/DenialOfService.qhelp @@ -0,0 +1,32 @@ + + + + +

    Using untrusted input to created with the built-in make 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 DoS attack by consuming all available server resources.

    + + + +

    Implement a maximum allowed value for creates a slice with the built-in make function to prevent excessively large allocations. + For instance, you could restrict it to a reasonable upper limit.

    +
    + + +

    In the following example snippet, the n field is user-controlled.

    +

    The server trusts that n has an acceptable value, however when using a maliciously large value, + it allocates a slice of n of strings before filling the slice with data.

    + + + +

    One way to prevent this vulnerability is by implementing a maximum allowed value for the user-controlled input:

    + + +
    + + +
  • + OWASP: Denial of Service Cheat Sheet +
  • + + \ No newline at end of file diff --git a/go/ql/src/experimental/CWE-770/DenialOfService.ql b/go/ql/src/experimental/CWE-770/DenialOfService.ql new file mode 100644 index 00000000000..95e4cb62bd7 --- /dev/null +++ b/go/ql/src/experimental/CWE-770/DenialOfService.ql @@ -0,0 +1,64 @@ +/** + * @name Denial Of Service + * @description slices created with the built-in make function from user-controlled sources using a + * maliciously large value possibly leading to a denial of service. + * @kind path-problem + * @problem.severity high + * @security-severity 9 + * @id go/denial-of-service + * @tags security + * experimental + * external/cwe/cwe-770 + */ + +import go + +class BuiltInMake extends DataFlow::Node { + BuiltInMake() { this = Builtin::make().getACall().getArgument(0) } +} + +/** + * Holds if `g` is a barrier-guard which checks `e` is nonzero on `branch`. + */ +predicate denialOfServiceSanitizerGuard(DataFlow::Node g, Expr e, boolean branch) { + exists(DataFlow::Node lesser | + e = lesser.asExpr() and + g.(DataFlow::RelationalComparisonNode).leq(branch, lesser, _, _) + ) + or + exists(LogicalBinaryExpr lbe, DataFlow::Node lesser | + lbe.getAnOperand() = g.(DataFlow::RelationalComparisonNode).asExpr() and + e = lesser.asExpr() and + g.(DataFlow::RelationalComparisonNode).leq(branch, lesser, _, _) + ) +} + +module Config implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof UntrustedFlowSource } + + 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) + ) + } + + predicate isBarrier(DataFlow::Node node) { + node = DataFlow::BarrierGuard::getABarrierNode() + } + + predicate isSink(DataFlow::Node sink) { sink instanceof BuiltInMake } +} + +/** + * Tracks taint flow for reasoning about denial of service, where source is + * user-controlled and unchecked. + */ +module Flow = TaintTracking::Global; + +import Flow::PathGraph + +from Flow::PathNode source, Flow::PathNode sink +where Flow::flowPath(source, sink) +select sink, source, sink, "This variable might be leading to denial of service." diff --git a/go/ql/src/experimental/CWE-770/DenialOfServiceBad.go b/go/ql/src/experimental/CWE-770/DenialOfServiceBad.go new file mode 100644 index 00000000000..b3a57d4f5e1 --- /dev/null +++ b/go/ql/src/experimental/CWE-770/DenialOfServiceBad.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/experimental/CWE-770/DenialOfServiceGood.go b/go/ql/src/experimental/CWE-770/DenialOfServiceGood.go new file mode 100644 index 00000000000..2b833b3b6d9 --- /dev/null +++ b/go/ql/src/experimental/CWE-770/DenialOfServiceGood.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 || collectionSize < 0 { + http.Error(w, "Bad request", http.StatusBadRequest) + return + } + if 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/test/experimental/CWE-770/DenialOfService.expected b/go/ql/test/experimental/CWE-770/DenialOfService.expected new file mode 100644 index 00000000000..2e54b95447d --- /dev/null +++ b/go/ql/test/experimental/CWE-770/DenialOfService.expected @@ -0,0 +1,18 @@ +edges +| DenialOfServiceBad.go:11:12:11:16 | selection of URL | DenialOfServiceBad.go:11:12:11:24 | call to Query | +| DenialOfServiceBad.go:11:12:11:24 | call to Query | DenialOfServiceBad.go:13:15:13:20 | source | +| DenialOfServiceBad.go:13:15:13:20 | source | DenialOfServiceBad.go:13:15:13:29 | call to Get | +| DenialOfServiceBad.go:13:15:13:29 | call to Get | DenialOfServiceBad.go:14:28:14:36 | sourceStr | +| DenialOfServiceBad.go:14:2:14:37 | ... := ...[0] | DenialOfServiceBad.go:20:27:20:30 | sink | +| DenialOfServiceBad.go:14:28:14:36 | sourceStr | DenialOfServiceBad.go:14:2:14:37 | ... := ...[0] | +nodes +| DenialOfServiceBad.go:11:12:11:16 | selection of URL | semmle.label | selection of URL | +| DenialOfServiceBad.go:11:12:11:24 | call to Query | semmle.label | call to Query | +| DenialOfServiceBad.go:13:15:13:20 | source | semmle.label | source | +| DenialOfServiceBad.go:13:15:13:29 | call to Get | semmle.label | call to Get | +| DenialOfServiceBad.go:14:2:14:37 | ... := ...[0] | semmle.label | ... := ...[0] | +| DenialOfServiceBad.go:14:28:14:36 | sourceStr | semmle.label | sourceStr | +| DenialOfServiceBad.go:20:27:20:30 | sink | semmle.label | sink | +subpaths +#select +| DenialOfServiceBad.go:20:27:20:30 | sink | DenialOfServiceBad.go:11:12:11:16 | selection of URL | DenialOfServiceBad.go:20:27:20:30 | sink | This variable might be leading to denial of service. | diff --git a/go/ql/test/experimental/CWE-770/DenialOfService.qlref b/go/ql/test/experimental/CWE-770/DenialOfService.qlref new file mode 100644 index 00000000000..e5896bb61df --- /dev/null +++ b/go/ql/test/experimental/CWE-770/DenialOfService.qlref @@ -0,0 +1 @@ +experimental/CWE-770/DenialOfService.ql \ No newline at end of file diff --git a/go/ql/test/experimental/CWE-770/DenialOfServiceBad.go b/go/ql/test/experimental/CWE-770/DenialOfServiceBad.go new file mode 100644 index 00000000000..2d61cdbdafc --- /dev/null +++ b/go/ql/test/experimental/CWE-770/DenialOfServiceBad.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) + 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/experimental/CWE-770/DenialOfServiceGood.go b/go/ql/test/experimental/CWE-770/DenialOfServiceGood.go new file mode 100644 index 00000000000..a66edf74a83 --- /dev/null +++ b/go/ql/test/experimental/CWE-770/DenialOfServiceGood.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) +} From 87b1028aab8fb91353497a2dc714bf6db94ed777 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Sun, 17 Dec 2023 19:51:56 +0100 Subject: [PATCH 044/430] fix pgzip missed sink, apply isBarrier directly to CopyN sink, add new flow state for pgzip --- .../DecompressionBombs.ql | 40 +- .../frameworks/DecompressionBombs.qll | 57 +- .../DecompressionBombs.expected | 834 +++++++++--------- .../CWE-522-DecompressionBombs/test.go | 21 +- 4 files changed, 478 insertions(+), 474 deletions(-) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index cd782d6de0a..b23e686a6b2 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -27,8 +27,9 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { sink instanceof DecompressionBombs::Sink and state = [ - "ZstdNewReader", "XzNewReader", "GzipNewReader", "S2NewReader", "SnappyNewReader", - "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", "ZipKlauspost" + "ZstdNewReader", "XzNewReader", "GzipNewReader", "PgzipNewReader", "S2NewReader", + "SnappyNewReader", "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", + "ZipKlauspost" ] } @@ -45,41 +46,6 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { addStep.isAdditionalFlowStep(fromNode, fromState, toNode, toState) ) } - - predicate isBarrier(DataFlow::Node node) { - // `io.CopyN` should not be a sink if its return value flows to a - // comparison (<, >, <=, >=). - exists(Function f, DataFlow::CallNode cn | - f.hasQualifiedName("io", "CopyN") and cn = f.getACall() - | - node = cn.getArgument(1) and - localStep*(cn.getResult(0), 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) } module DecompressionBombsFlow = TaintTracking::GlobalWithState; diff --git a/go/ql/src/experimental/frameworks/DecompressionBombs.qll b/go/ql/src/experimental/frameworks/DecompressionBombs.qll index 8d42d9fc5c1..29895ca1c0d 100644 --- a/go/ql/src/experimental/frameworks/DecompressionBombs.qll +++ b/go/ql/src/experimental/frameworks/DecompressionBombs.qll @@ -5,8 +5,9 @@ module DecompressionBombs { FlowState() { this = [ - "ZstdNewReader", "XzNewReader", "GzipNewReader", "S2NewReader", "SnappyNewReader", - "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", "ZipKlauspost", "" + "ZstdNewReader", "XzNewReader", "GzipNewReader", "PgzipNewReader", "S2NewReader", + "SnappyNewReader", "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", + "ZipKlauspost", "" ] } } @@ -252,11 +253,12 @@ module DecompressionBombs { /** * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/gzip` package */ - module KlauspostGzip { + module KlauspostGzipAndPgzip { class TheSink extends Sink { TheSink() { exists(Method f | - f.hasQualifiedName("github.com/klauspost/compress/gzip", "Reader", "Read") + f.hasQualifiedName(["github.com/klauspost/compress/gzip", "github.com/klauspost/pgzip"], + "Reader", "Read") | this = f.getACall().getReceiver() ) @@ -277,10 +279,15 @@ module DecompressionBombs { DataFlow::Node fromNode, FlowState fromState, DataFlow::Node toNode, FlowState toState ) { exists(Function f, DataFlow::CallNode call | - f.hasQualifiedName(["github.com/klauspost/compress/gzip", "github.com/klauspost/pgzip"], - "NewReader") and - call = f.getACall() - | + 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" + or + 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 @@ -651,7 +658,15 @@ module DecompressionBombs { module GeneralReadIoSink { class TheSink extends Sink { TheSink() { - exists(Function f | f.hasQualifiedName("io", ["Copy", "CopyBuffer", "CopyN"]) | + exists(Function f, DataFlow::CallNode cn | + f.hasQualifiedName("io", "CopyN") and cn = f.getACall() + | + this = cn.getArgument(1) and + // and the return value doesn't flow into a comparison (<, >, <=, >=). + not localStep*(cn.getResult(0), any(DataFlow::RelationalComparisonNode rcn).getAnOperand()) + ) + or + exists(Function f | f.hasQualifiedName("io", ["Copy", "CopyBuffer"]) | this = f.getACall().getArgument(1) ) or @@ -677,5 +692,29 @@ module DecompressionBombs { ) } } + + /** + * 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/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected index 1b4d662673b..ef81f974859 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -1,425 +1,425 @@ edges -| test.go:56:15:56:26 | selection of Body | test.go:152:19:152:22 | definition of file | -| test.go:57:16:57:27 | selection of Body | test.go:163:20:163:23 | definition of file | -| test.go:58:16:58:46 | call to FormValue | test.go:122:20:122:27 | definition of filename | -| test.go:61:13:61:24 | selection of Body | test.go:113:17:113:19 | definition of src | -| test.go:62:15:62:26 | selection of Body | test.go:152:19:152:22 | definition of file | -| test.go:63:16:63:27 | selection of Body | test.go:163:20:163:23 | definition of file | -| test.go:64:13:64:24 | selection of Body | test.go:175:17:175:20 | definition of file | -| test.go:65:8:65:19 | selection of Body | test.go:186:12:186:15 | definition of file | -| test.go:66:8:66:19 | selection of Body | test.go:196:12:196:15 | definition of file | -| test.go:67:17:67:28 | selection of Body | test.go:206:21:206:24 | definition of file | -| test.go:68:13:68:24 | selection of Body | test.go:217:17:217:20 | definition of file | -| test.go:69:16:69:27 | selection of Body | test.go:227:20:227:23 | definition of file | -| test.go:70:7:70:18 | selection of Body | test.go:237:11:237:14 | definition of file | -| test.go:71:9:71:20 | selection of Body | test.go:247:13:247:16 | definition of file | -| test.go:72:18:72:29 | selection of Body | test.go:258:22:258:25 | definition of file | -| test.go:73:5:73:16 | selection of Body | test.go:271:9:271:12 | definition of file | -| test.go:74:7:74:18 | selection of Body | test.go:283:11:283:14 | definition of file | -| test.go:75:16:75:27 | selection of Body | test.go:293:20:293:23 | definition of file | -| test.go:76:16:76:27 | selection of Body | test.go:305:20:305:23 | definition of file | -| test.go:77:17:77:28 | selection of Body | test.go:317:21:317:24 | definition of file | -| test.go:78:15:78:26 | selection of Body | test.go:331:19:331:22 | definition of file | -| test.go:79:5:79:16 | selection of Body | test.go:341:9:341:12 | definition of file | -| test.go:113:17:113:19 | definition of src | test.go:114:29:114:31 | src | -| test.go:114:2:114:32 | ... := ...[0] | test.go:118:11:118:26 | type conversion | -| test.go:114:29:114:31 | src | test.go:114:2:114:32 | ... := ...[0] | -| test.go:118:11:118:26 | type conversion | test.go:119:23:119:28 | newSrc | -| test.go:122:20:122:27 | definition of filename | test.go:124:25:124:32 | filename | -| test.go:122:20:122:27 | definition of filename | test.go:137:43:137:50 | filename | -| test.go:124:2:124:33 | ... := ...[0] | test.go:126:12:126:12 | f | -| test.go:124:25:124:32 | filename | test.go:124:2:124:33 | ... := ...[0] | -| test.go:126:3:126:19 | ... := ...[0] | test.go:128:37:128:38 | rc | -| test.go:126:12:126:12 | f | test.go:126:3:126:19 | ... := ...[0] | -| test.go:137:2:137:51 | ... := ...[0] | test.go:138:20:138:29 | implicit dereference | -| test.go:137:43:137:50 | filename | test.go:137:2:137:51 | ... := ...[0] | -| test.go:138:20:138:29 | implicit dereference | test.go:138:20:138:29 | implicit dereference | -| test.go:138:20:138:29 | implicit dereference | test.go:138:20:138:29 | implicit read of field Reader | -| test.go:138:20:138:29 | implicit read of field Reader | test.go:139:12:139:12 | f | -| test.go:139:12:139:12 | f | test.go:139:12:139:19 | call to Open | -| test.go:139:12:139:19 | call to Open | test.go:141:37:141:38 | rc | -| test.go:152:19:152:22 | definition of file | test.go:153:25:153:28 | file | -| test.go:153:2:153:29 | ... := ...[0] | test.go:154:48:154:52 | file1 | -| test.go:153:25:153:28 | file | test.go:153:2:153:29 | ... := ...[0] | -| test.go:154:2:154:69 | ... := ...[0] | test.go:157:26:157:29 | file | -| test.go:154:32:154:53 | call to NewReader | test.go:154:2:154:69 | ... := ...[0] | -| test.go:154:48:154:52 | file1 | test.go:154:32:154:53 | call to NewReader | -| test.go:157:3:157:36 | ... := ...[0] | test.go:158:36:158:51 | fileReaderCloser | -| test.go:157:26:157:29 | file | test.go:157:3:157:36 | ... := ...[0] | -| test.go:163:20:163:23 | definition of file | test.go:164:25:164:28 | file | -| test.go:164:2:164:29 | ... := ...[0] | test.go:165:66:165:70 | file2 | -| test.go:164:25:164:28 | file | test.go:164:2:164:29 | ... := ...[0] | -| test.go:165:2:165:87 | ... := ...[0] | test.go:169:26:169:29 | file | -| test.go:165:50:165:71 | call to NewReader | test.go:165:2:165:87 | ... := ...[0] | -| test.go:165:66:165:70 | file2 | test.go:165:50:165:71 | call to NewReader | -| test.go:169:26:169:29 | file | test.go:169:26:169:36 | call to Open | -| test.go:169:26:169:36 | call to Open | test.go:170:36:170:51 | fileReaderCloser | -| test.go:175:17:175:20 | definition of file | test.go:178:40:178:43 | file | -| test.go:178:2:178:72 | ... := ...[0] | test.go:180:2:180:11 | bzip2dsnet | -| test.go:178:2:178:72 | ... := ...[0] | test.go:181:26:181:35 | bzip2dsnet | -| test.go:178:40:178:43 | file | test.go:178:2:178:72 | ... := ...[0] | -| test.go:181:12:181:36 | call to NewReader | test.go:183:18:183:24 | tarRead | -| test.go:181:26:181:35 | bzip2dsnet | test.go:181:12:181:36 | call to NewReader | -| test.go:183:18:183:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | -| test.go:186:12:186:15 | definition of file | test.go:189:27:189:30 | file | -| test.go:189:11:189:31 | call to NewReader | test.go:191:2:191:6 | Bzip2 | -| test.go:189:11:189:31 | call to NewReader | test.go:192:26:192:30 | Bzip2 | -| test.go:189:27:189:30 | file | test.go:189:11:189:31 | call to NewReader | -| test.go:192:12:192:31 | call to NewReader | test.go:194:18:194:24 | tarRead | -| test.go:192:26:192:30 | Bzip2 | test.go:192:12:192:31 | call to NewReader | -| test.go:194:18:194:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | -| test.go:196:12:196:15 | definition of file | test.go:199:27:199:30 | file | -| test.go:199:11:199:31 | call to NewReader | test.go:201:2:201:6 | Flate | -| test.go:199:11:199:31 | call to NewReader | test.go:202:26:202:30 | Flate | -| test.go:199:27:199:30 | file | test.go:199:11:199:31 | call to NewReader | -| test.go:202:12:202:31 | call to NewReader | test.go:204:18:204:24 | tarRead | -| test.go:202:26:202:30 | Flate | test.go:202:12:202:31 | call to NewReader | -| test.go:204:18:204:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | -| test.go:206:21:206:24 | definition of file | test.go:210:44:210:47 | file | -| test.go:210:19:210:48 | call to NewReader | test.go:212:2:212:14 | zlibklauspost | -| test.go:210:19:210:48 | call to NewReader | test.go:213:26:213:38 | zlibklauspost | -| test.go:210:44:210:47 | file | test.go:210:19:210:48 | call to NewReader | -| test.go:213:12:213:39 | call to NewReader | test.go:215:18:215:24 | tarRead | -| test.go:213:26:213:38 | zlibklauspost | test.go:213:12:213:39 | call to NewReader | -| test.go:215:18:215:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | -| test.go:217:17:217:20 | definition of file | test.go:220:40:220:43 | file | -| test.go:220:2:220:72 | ... := ...[0] | test.go:222:2:222:11 | flatedsnet | -| test.go:220:2:220:72 | ... := ...[0] | test.go:223:26:223:35 | flatedsnet | -| test.go:220:40:220:43 | file | test.go:220:2:220:72 | ... := ...[0] | -| test.go:223:12:223:36 | call to NewReader | test.go:225:18:225:24 | tarRead | -| test.go:223:26:223:35 | flatedsnet | test.go:223:12:223:36 | call to NewReader | -| test.go:225:18:225:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | -| test.go:227:20:227:23 | definition of file | test.go:230:46:230:49 | file | -| test.go:230:2:230:50 | ... := ...[0] | test.go:232:2:232:14 | zlibklauspost | -| test.go:230:2:230:50 | ... := ...[0] | test.go:233:26:233:38 | zlibklauspost | -| test.go:230:46:230:49 | file | test.go:230:2:230:50 | ... := ...[0] | -| test.go:233:12:233:39 | call to NewReader | test.go:235:18:235:24 | tarRead | -| test.go:233:26:233:38 | zlibklauspost | test.go:233:12:233:39 | call to NewReader | -| test.go:235:18:235:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | -| test.go:237:11:237:14 | definition of file | test.go:240:28:240:31 | file | -| test.go:240:2:240:32 | ... := ...[0] | test.go:242:2:242:5 | Zlib | -| test.go:240:2:240:32 | ... := ...[0] | test.go:243:26:243:29 | Zlib | -| test.go:240:28:240:31 | file | test.go:240:2:240:32 | ... := ...[0] | -| test.go:243:12:243:30 | call to NewReader | test.go:245:18:245:24 | tarRead | -| test.go:243:26:243:29 | Zlib | test.go:243:12:243:30 | call to NewReader | -| test.go:245:18:245:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | -| test.go:247:13:247:16 | definition of file | test.go:250:29:250:32 | file | -| test.go:250:12:250:33 | call to NewReader | test.go:252:2:252:7 | Snappy | -| test.go:250:12:250:33 | call to NewReader | test.go:253:2:253:7 | Snappy | -| test.go:250:12:250:33 | call to NewReader | test.go:254:26:254:31 | Snappy | -| test.go:250:29:250:32 | file | test.go:250:12:250:33 | call to NewReader | -| test.go:254:12:254:32 | call to NewReader | test.go:256:18:256:24 | tarRead | -| test.go:254:26:254:31 | Snappy | test.go:254:12:254:32 | call to NewReader | -| test.go:256:18:256:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | -| test.go:258:22:258:25 | definition of file | test.go:261:47:261:50 | file | -| test.go:261:21:261:51 | call to NewReader | test.go:263:2:263:16 | snappyklauspost | -| test.go:261:21:261:51 | call to NewReader | test.go:265:2:265:16 | snappyklauspost | -| test.go:261:21:261:51 | call to NewReader | test.go:266:2:266:16 | snappyklauspost | -| test.go:261:21:261:51 | call to NewReader | test.go:267:26:267:40 | snappyklauspost | -| test.go:261:47:261:50 | file | test.go:261:21:261:51 | call to NewReader | -| test.go:267:12:267:41 | call to NewReader | test.go:269:18:269:24 | tarRead | -| test.go:267:26:267:40 | snappyklauspost | test.go:267:12:267:41 | call to NewReader | -| test.go:269:18:269:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | -| test.go:271:9:271:12 | definition of file | test.go:274:21:274:24 | file | -| test.go:274:8:274:25 | call to NewReader | test.go:276:2:276:3 | S2 | -| test.go:274:8:274:25 | call to NewReader | test.go:278:2:278:3 | S2 | -| test.go:274:8:274:25 | call to NewReader | test.go:279:26:279:27 | S2 | -| test.go:274:21:274:24 | file | test.go:274:8:274:25 | call to NewReader | -| test.go:279:12:279:28 | call to NewReader | test.go:281:18:281:24 | tarRead | -| test.go:279:26:279:27 | S2 | test.go:279:12:279:28 | call to NewReader | -| test.go:281:18:281:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | -| test.go:283:11:283:14 | definition of file | test.go:286:32:286:35 | file | -| test.go:286:2:286:36 | ... := ...[0] | test.go:288:2:288:9 | gzipRead | -| test.go:286:2:286:36 | ... := ...[0] | test.go:289:26:289:33 | gzipRead | -| test.go:286:32:286:35 | file | test.go:286:2:286:36 | ... := ...[0] | -| test.go:289:12:289:34 | call to NewReader | test.go:291:18:291:24 | tarRead | -| test.go:289:26:289:33 | gzipRead | test.go:289:12:289:34 | call to NewReader | -| test.go:291:18:291:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | -| test.go:293:20:293:23 | definition of file | test.go:296:46:296:49 | file | -| test.go:296:2:296:50 | ... := ...[0] | test.go:298:2:298:14 | gzipklauspost | -| test.go:296:2:296:50 | ... := ...[0] | test.go:300:2:300:14 | gzipklauspost | -| test.go:296:2:296:50 | ... := ...[0] | test.go:301:26:301:38 | gzipklauspost | -| test.go:296:46:296:49 | file | test.go:296:2:296:50 | ... := ...[0] | -| test.go:301:12:301:39 | call to NewReader | test.go:303:18:303:24 | tarRead | -| test.go:301:26:301:38 | gzipklauspost | test.go:301:12:301:39 | call to NewReader | -| test.go:303:18:303:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | -| test.go:305:20:305:23 | definition of file | test.go:308:42:308:45 | file | -| test.go:308:2:308:46 | ... := ...[0] | test.go:312:2:312:10 | gzippgzip | -| test.go:308:2:308:46 | ... := ...[0] | test.go:313:26:313:34 | gzippgzip | -| test.go:308:42:308:45 | file | test.go:308:2:308:46 | ... := ...[0] | -| test.go:313:12:313:35 | call to NewReader | test.go:315:18:315:24 | tarRead | -| test.go:313:26:313:34 | gzippgzip | test.go:313:12:313:35 | call to NewReader | -| test.go:315:18:315:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | -| test.go:317:21:317:24 | definition of file | test.go:320:37:320:40 | file | -| test.go:320:2:320:41 | ... := ...[0] | test.go:322:2:322:5 | zstd | -| test.go:320:2:320:41 | ... := ...[0] | test.go:324:2:324:5 | zstd | -| test.go:320:2:320:41 | ... := ...[0] | test.go:326:2:326:5 | zstd | -| test.go:320:2:320:41 | ... := ...[0] | test.go:327:26:327:29 | zstd | -| test.go:320:37:320:40 | file | test.go:320:2:320:41 | ... := ...[0] | -| test.go:327:12:327:30 | call to NewReader | test.go:329:18:329:24 | tarRead | -| test.go:327:26:327:29 | zstd | test.go:327:12:327:30 | call to NewReader | -| test.go:329:18:329:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | -| test.go:331:19:331:22 | definition of file | test.go:334:32:334:35 | file | -| test.go:334:10:334:36 | call to NewReader | test.go:336:2:336:5 | zstd | -| test.go:334:10:334:36 | call to NewReader | test.go:337:26:337:29 | zstd | -| test.go:334:32:334:35 | file | test.go:334:10:334:36 | call to NewReader | -| test.go:337:12:337:30 | call to NewReader | test.go:339:18:339:24 | tarRead | -| test.go:337:26:337:29 | zstd | test.go:337:12:337:30 | call to NewReader | -| test.go:339:18:339:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | -| test.go:341:9:341:12 | definition of file | test.go:344:28:344:31 | file | -| test.go:344:2:344:32 | ... := ...[0] | test.go:346:2:346:7 | xzRead | -| test.go:344:2:344:32 | ... := ...[0] | test.go:347:26:347:31 | xzRead | -| test.go:344:28:344:31 | file | test.go:344:2:344:32 | ... := ...[0] | -| test.go:347:12:347:32 | call to NewReader | test.go:349:18:349:24 | tarRead | -| test.go:347:26:347:31 | xzRead | test.go:347:12:347:32 | call to NewReader | -| test.go:349:18:349:24 | tarRead | test.go:352:22:352:28 | definition of tarRead | -| test.go:352:22:352:28 | definition of tarRead | test.go:364:25:364:31 | tarRead | -| test.go:352:22:352:28 | definition of tarRead | test.go:364:25:364:31 | tarRead | -| test.go:352:22:352:28 | definition of tarRead | test.go:364:25:364:31 | tarRead | -| test.go:352:22:352:28 | definition of tarRead | test.go:364:25:364:31 | tarRead | -| test.go:352:22:352:28 | definition of tarRead | test.go:364:25:364:31 | tarRead | -| test.go:352:22:352:28 | definition of tarRead | test.go:364:25:364:31 | tarRead | -| test.go:352:22:352:28 | definition of tarRead | test.go:364:25:364:31 | tarRead | -| test.go:352:22:352:28 | definition of tarRead | test.go:364:25:364:31 | tarRead | +| test.go:57:15:57:26 | selection of Body | test.go:151:19:151:22 | definition of file | +| test.go:58:16:58:27 | selection of Body | test.go:162:20:162:23 | definition of file | +| test.go:59:16:59:46 | call to FormValue | test.go:121:20:121:27 | definition of filename | +| test.go:62:13:62:24 | selection of Body | test.go:112:17:112:19 | definition of src | +| test.go:63:13:63:24 | selection of Body | test.go:174:17:174:20 | definition of file | +| test.go:64:8:64:19 | selection of Body | test.go:185:12:185:15 | definition of file | +| test.go:65:8:65:19 | selection of Body | test.go:195:12:195:15 | definition of file | +| test.go:66:17:66:28 | selection of Body | test.go:205:21:205:24 | definition of file | +| test.go:67:13:67:24 | selection of Body | test.go:216:17:216:20 | definition of file | +| test.go:68:16:68:27 | selection of Body | test.go:226:20:226:23 | definition of file | +| test.go:69:7:69:18 | selection of Body | test.go:236:11:236:14 | definition of file | +| test.go:70:9:70:20 | selection of Body | test.go:246:13:246:16 | definition of file | +| test.go:71:18:71:29 | selection of Body | test.go:257:22:257:25 | definition of file | +| test.go:72:5:72:16 | selection of Body | test.go:270:9:270:12 | definition of file | +| test.go:73:7:73:18 | selection of Body | test.go:282:11:282:14 | definition of file | +| test.go:74:16:74:27 | selection of Body | test.go:292:20:292:23 | definition of file | +| test.go:75:16:75:27 | selection of Body | test.go:304:20:304:23 | definition of file | +| test.go:76:17:76:28 | selection of Body | test.go:316:21:316:24 | definition of file | +| test.go:77:15:77:26 | selection of Body | test.go:330:19:330:22 | definition of file | +| test.go:78:5:78:16 | selection of Body | test.go:340:9:340:12 | definition of file | +| test.go:112:17:112:19 | definition of src | test.go:113:29:113:31 | src | +| test.go:113:2:113:32 | ... := ...[0] | test.go:117:11:117:26 | type conversion | +| test.go:113:29:113:31 | src | test.go:113:2:113:32 | ... := ...[0] | +| test.go:117:11:117:26 | type conversion | test.go:118:23:118:28 | newSrc | +| test.go:121:20:121:27 | definition of filename | test.go:123:25:123:32 | filename | +| test.go:121:20:121:27 | definition of filename | test.go:136:43:136:50 | filename | +| test.go:123:2:123:33 | ... := ...[0] | test.go:125:12:125:12 | f | +| test.go:123:25:123:32 | filename | test.go:123:2:123:33 | ... := ...[0] | +| test.go:125:3:125:19 | ... := ...[0] | test.go:127:37:127:38 | rc | +| test.go:125:12:125:12 | f | test.go:125:3:125:19 | ... := ...[0] | +| test.go:136:2:136:51 | ... := ...[0] | test.go:137:20:137:29 | implicit dereference | +| test.go:136:43:136:50 | filename | test.go:136:2:136:51 | ... := ...[0] | +| test.go:137:20:137:29 | implicit dereference | test.go:137:20:137:29 | implicit dereference | +| test.go:137:20:137:29 | implicit dereference | test.go:137:20:137:29 | implicit read of field Reader | +| test.go:137:20:137:29 | implicit read of field Reader | test.go:138:12:138:12 | f | +| test.go:138:12:138:12 | f | test.go:138:12:138:19 | call to Open | +| test.go:138:12:138:19 | call to Open | test.go:140:37:140:38 | rc | +| test.go:151:19:151:22 | definition of file | test.go:152:25:152:28 | file | +| test.go:152:2:152:29 | ... := ...[0] | test.go:153:48:153:52 | file1 | +| test.go:152:25:152:28 | file | test.go:152:2:152:29 | ... := ...[0] | +| test.go:153:2:153:69 | ... := ...[0] | test.go:156:26:156:29 | file | +| test.go:153:32:153:53 | call to NewReader | test.go:153:2:153:69 | ... := ...[0] | +| test.go:153:48:153:52 | file1 | test.go:153:32:153:53 | call to NewReader | +| test.go:156:3:156:36 | ... := ...[0] | test.go:157:36:157:51 | fileReaderCloser | +| test.go:156:26:156:29 | file | test.go:156:3:156:36 | ... := ...[0] | +| test.go:162:20:162:23 | definition of file | test.go:163:25:163:28 | file | +| test.go:163:2:163:29 | ... := ...[0] | test.go:164:66:164:70 | file2 | +| test.go:163:25:163:28 | file | test.go:163:2:163:29 | ... := ...[0] | +| test.go:164:2:164:87 | ... := ...[0] | test.go:168:26:168:29 | file | +| test.go:164:50:164:71 | call to NewReader | test.go:164:2:164:87 | ... := ...[0] | +| test.go:164:66:164:70 | file2 | test.go:164:50:164:71 | call to NewReader | +| test.go:168:26:168:29 | file | test.go:168:26:168:36 | call to Open | +| test.go:168:26:168:36 | call to Open | test.go:169:36:169:51 | fileReaderCloser | +| test.go:174:17:174:20 | definition of file | test.go:177:40:177:43 | file | +| test.go:177:2:177:72 | ... := ...[0] | test.go:179:2:179:11 | bzip2dsnet | +| test.go:177:2:177:72 | ... := ...[0] | test.go:180:26:180:35 | bzip2dsnet | +| test.go:177:40:177:43 | file | test.go:177:2:177:72 | ... := ...[0] | +| test.go:180:12:180:36 | call to NewReader | test.go:182:18:182:24 | tarRead | +| test.go:180:26:180:35 | bzip2dsnet | test.go:180:12:180:36 | call to NewReader | +| test.go:182:18:182:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:185:12:185:15 | definition of file | test.go:188:27:188:30 | file | +| test.go:188:11:188:31 | call to NewReader | test.go:190:2:190:6 | Bzip2 | +| test.go:188:11:188:31 | call to NewReader | test.go:191:26:191:30 | Bzip2 | +| test.go:188:27:188:30 | file | test.go:188:11:188:31 | call to NewReader | +| test.go:191:12:191:31 | call to NewReader | test.go:193:18:193:24 | tarRead | +| test.go:191:26:191:30 | Bzip2 | test.go:191:12:191:31 | call to NewReader | +| test.go:193:18:193:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:195:12:195:15 | definition of file | test.go:198:27:198:30 | file | +| test.go:198:11:198:31 | call to NewReader | test.go:200:2:200:6 | Flate | +| test.go:198:11:198:31 | call to NewReader | test.go:201:26:201:30 | Flate | +| test.go:198:27:198:30 | file | test.go:198:11:198:31 | call to NewReader | +| test.go:201:12:201:31 | call to NewReader | test.go:203:18:203:24 | tarRead | +| test.go:201:26:201:30 | Flate | test.go:201:12:201:31 | call to NewReader | +| test.go:203:18:203:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:205:21:205:24 | definition of file | test.go:209:44:209:47 | file | +| test.go:209:19:209:48 | call to NewReader | test.go:211:2:211:14 | zlibklauspost | +| test.go:209:19:209:48 | call to NewReader | test.go:212:26:212:38 | zlibklauspost | +| test.go:209:44:209:47 | file | test.go:209:19:209:48 | call to NewReader | +| test.go:212:12:212:39 | call to NewReader | test.go:214:18:214:24 | tarRead | +| test.go:212:26:212:38 | zlibklauspost | test.go:212:12:212:39 | call to NewReader | +| test.go:214:18:214:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:216:17:216:20 | definition of file | test.go:219:40:219:43 | file | +| test.go:219:2:219:72 | ... := ...[0] | test.go:221:2:221:11 | flatedsnet | +| test.go:219:2:219:72 | ... := ...[0] | test.go:222:26:222:35 | flatedsnet | +| test.go:219:40:219:43 | file | test.go:219:2:219:72 | ... := ...[0] | +| test.go:222:12:222:36 | call to NewReader | test.go:224:18:224:24 | tarRead | +| test.go:222:26:222:35 | flatedsnet | test.go:222:12:222:36 | call to NewReader | +| test.go:224:18:224:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:226:20:226:23 | definition of file | test.go:229:46:229:49 | file | +| test.go:229:2:229:50 | ... := ...[0] | test.go:231:2:231:14 | zlibklauspost | +| test.go:229:2:229:50 | ... := ...[0] | test.go:232:26:232:38 | zlibklauspost | +| test.go:229:46:229:49 | file | test.go:229:2:229:50 | ... := ...[0] | +| test.go:232:12:232:39 | call to NewReader | test.go:234:18:234:24 | tarRead | +| test.go:232:26:232:38 | zlibklauspost | test.go:232:12:232:39 | call to NewReader | +| test.go:234:18:234:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:236:11:236:14 | definition of file | test.go:239:28:239:31 | file | +| test.go:239:2:239:32 | ... := ...[0] | test.go:241:2:241:5 | Zlib | +| test.go:239:2:239:32 | ... := ...[0] | test.go:242:26:242:29 | Zlib | +| test.go:239:28:239:31 | file | test.go:239:2:239:32 | ... := ...[0] | +| test.go:242:12:242:30 | call to NewReader | test.go:244:18:244:24 | tarRead | +| test.go:242:26:242:29 | Zlib | test.go:242:12:242:30 | call to NewReader | +| test.go:244:18:244:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:246:13:246:16 | definition of file | test.go:249:29:249:32 | file | +| test.go:249:12:249:33 | call to NewReader | test.go:251:2:251:7 | Snappy | +| test.go:249:12:249:33 | call to NewReader | test.go:252:2:252:7 | Snappy | +| test.go:249:12:249:33 | call to NewReader | test.go:253:26:253:31 | Snappy | +| test.go:249:29:249:32 | file | test.go:249:12:249:33 | call to NewReader | +| test.go:253:12:253:32 | call to NewReader | test.go:255:18:255:24 | tarRead | +| test.go:253:26:253:31 | Snappy | test.go:253:12:253:32 | call to NewReader | +| test.go:255:18:255:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:257:22:257:25 | definition of file | test.go:260:47:260:50 | file | +| test.go:260:21:260:51 | call to NewReader | test.go:262:2:262:16 | snappyklauspost | +| test.go:260:21:260:51 | call to NewReader | test.go:264:2:264:16 | snappyklauspost | +| test.go:260:21:260:51 | call to NewReader | test.go:265:2:265:16 | snappyklauspost | +| test.go:260:21:260:51 | call to NewReader | test.go:266:26:266:40 | snappyklauspost | +| test.go:260:47:260:50 | file | test.go:260:21:260:51 | call to NewReader | +| test.go:266:12:266:41 | call to NewReader | test.go:268:18:268:24 | tarRead | +| test.go:266:26:266:40 | snappyklauspost | test.go:266:12:266:41 | call to NewReader | +| test.go:268:18:268:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:270:9:270:12 | definition of file | test.go:273:21:273:24 | file | +| test.go:273:8:273:25 | call to NewReader | test.go:275:2:275:3 | S2 | +| test.go:273:8:273:25 | call to NewReader | test.go:277:2:277:3 | S2 | +| test.go:273:8:273:25 | call to NewReader | test.go:278:26:278:27 | S2 | +| test.go:273:21:273:24 | file | test.go:273:8:273:25 | call to NewReader | +| test.go:278:12:278:28 | call to NewReader | test.go:280:18:280:24 | tarRead | +| test.go:278:26:278:27 | S2 | test.go:278:12:278:28 | call to NewReader | +| test.go:280:18:280:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:282:11:282:14 | definition of file | test.go:285:32:285:35 | file | +| test.go:285:2:285:36 | ... := ...[0] | test.go:287:2:287:9 | gzipRead | +| test.go:285:2:285:36 | ... := ...[0] | test.go:288:26:288:33 | gzipRead | +| test.go:285:32:285:35 | file | test.go:285:2:285:36 | ... := ...[0] | +| test.go:288:12:288:34 | call to NewReader | test.go:290:18:290:24 | tarRead | +| test.go:288:26:288:33 | gzipRead | test.go:288:12:288:34 | call to NewReader | +| test.go:290:18:290:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:292:20:292:23 | definition of file | test.go:295:46:295:49 | file | +| test.go:295:2:295:50 | ... := ...[0] | test.go:297:2:297:14 | gzipklauspost | +| test.go:295:2:295:50 | ... := ...[0] | test.go:299:2:299:14 | gzipklauspost | +| test.go:295:2:295:50 | ... := ...[0] | test.go:300:26:300:38 | gzipklauspost | +| test.go:295:46:295:49 | file | test.go:295:2:295:50 | ... := ...[0] | +| test.go:300:12:300:39 | call to NewReader | test.go:302:18:302:24 | tarRead | +| test.go:300:26:300:38 | gzipklauspost | test.go:300:12:300:39 | call to NewReader | +| test.go:302:18:302:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:304:20:304:23 | definition of file | test.go:307:44:307:47 | file | +| test.go:307:2:307:48 | ... := ...[0] | test.go:309:2:309:11 | pgzippgzip | +| test.go:307:2:307:48 | ... := ...[0] | test.go:311:2:311:11 | pgzippgzip | +| test.go:307:2:307:48 | ... := ...[0] | test.go:312:26:312:35 | pgzippgzip | +| test.go:307:44:307:47 | file | test.go:307:2:307:48 | ... := ...[0] | +| test.go:312:12:312:36 | call to NewReader | test.go:314:18:314:24 | tarRead | +| test.go:312:26:312:35 | pgzippgzip | test.go:312:12:312:36 | call to NewReader | +| test.go:314:18:314:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:316:21:316:24 | definition of file | test.go:319:37:319:40 | file | +| test.go:319:2:319:41 | ... := ...[0] | test.go:321:2:321:5 | zstd | +| test.go:319:2:319:41 | ... := ...[0] | test.go:323:2:323:5 | zstd | +| test.go:319:2:319:41 | ... := ...[0] | test.go:325:2:325:5 | zstd | +| test.go:319:2:319:41 | ... := ...[0] | test.go:326:26:326:29 | zstd | +| test.go:319:37:319:40 | file | test.go:319:2:319:41 | ... := ...[0] | +| test.go:326:12:326:30 | call to NewReader | test.go:328:18:328:24 | tarRead | +| test.go:326:26:326:29 | zstd | test.go:326:12:326:30 | call to NewReader | +| test.go:328:18:328:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:330:19:330:22 | definition of file | test.go:333:32:333:35 | file | +| test.go:333:10:333:36 | call to NewReader | test.go:335:2:335:5 | zstd | +| test.go:333:10:333:36 | call to NewReader | test.go:336:26:336:29 | zstd | +| test.go:333:32:333:35 | file | test.go:333:10:333:36 | call to NewReader | +| test.go:336:12:336:30 | call to NewReader | test.go:338:18:338:24 | tarRead | +| test.go:336:26:336:29 | zstd | test.go:336:12:336:30 | call to NewReader | +| test.go:338:18:338:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:340:9:340:12 | definition of file | test.go:343:28:343:31 | file | +| test.go:343:2:343:32 | ... := ...[0] | test.go:345:2:345:7 | xzRead | +| test.go:343:2:343:32 | ... := ...[0] | test.go:346:26:346:31 | xzRead | +| test.go:343:28:343:31 | file | test.go:343:2:343:32 | ... := ...[0] | +| test.go:346:12:346:32 | call to NewReader | test.go:348:18:348:24 | tarRead | +| test.go:346:26:346:31 | xzRead | test.go:346:12:346:32 | call to NewReader | +| test.go:348:18:348:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | +| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | +| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | +| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | +| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | +| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | +| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | +| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | +| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | nodes -| test.go:56:15:56:26 | selection of Body | semmle.label | selection of Body | -| test.go:57:16:57:27 | selection of Body | semmle.label | selection of Body | -| test.go:58:16:58:46 | call to FormValue | semmle.label | call to FormValue | -| test.go:61:13:61:24 | selection of Body | semmle.label | selection of Body | -| test.go:62:15:62:26 | selection of Body | semmle.label | selection of Body | -| test.go:63:16:63:27 | selection of Body | semmle.label | selection of Body | -| test.go:64:13:64:24 | selection of Body | semmle.label | selection of Body | +| test.go:57:15:57:26 | selection of Body | semmle.label | selection of Body | +| test.go:58:16:58:27 | selection of Body | semmle.label | selection of Body | +| test.go:59:16:59:46 | call to FormValue | semmle.label | call to FormValue | +| test.go:62:13:62:24 | selection of Body | semmle.label | selection of Body | +| test.go:63:13:63: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:65:8:65: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:67:17:67:28 | selection of Body | semmle.label | selection of Body | -| test.go:68:13:68:24 | selection of Body | semmle.label | selection of Body | -| test.go:69:16:69:27 | selection of Body | semmle.label | selection of Body | -| test.go:70:7:70:18 | selection of Body | semmle.label | selection of Body | -| test.go:71:9:71:20 | selection of Body | semmle.label | selection of Body | -| test.go:72:18:72:29 | selection of Body | semmle.label | selection of Body | -| test.go:73:5:73:16 | selection of Body | semmle.label | selection of Body | -| test.go:74:7:74:18 | selection of Body | semmle.label | selection of Body | +| test.go:66:17:66:28 | selection of Body | semmle.label | selection of Body | +| test.go:67:13:67:24 | selection of Body | semmle.label | selection of Body | +| test.go:68:16:68:27 | selection of Body | semmle.label | selection of Body | +| test.go:69:7:69:18 | selection of Body | semmle.label | selection of Body | +| test.go:70:9:70:20 | selection of Body | semmle.label | selection of Body | +| test.go:71:18:71:29 | selection of Body | semmle.label | selection of Body | +| test.go:72:5:72:16 | selection of Body | semmle.label | selection of Body | +| test.go:73:7:73:18 | selection of Body | semmle.label | selection of Body | +| test.go:74:16:74:27 | selection of Body | semmle.label | selection of Body | | test.go:75:16:75:27 | selection of Body | semmle.label | selection of Body | -| test.go:76:16:76:27 | selection of Body | semmle.label | selection of Body | -| test.go:77:17:77:28 | selection of Body | semmle.label | selection of Body | -| test.go:78:15:78:26 | selection of Body | semmle.label | selection of Body | -| test.go:79:5:79:16 | selection of Body | semmle.label | selection of Body | -| test.go:113:17:113:19 | definition of src | semmle.label | definition of src | -| test.go:114:2:114:32 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:114:29:114:31 | src | semmle.label | src | -| test.go:118:11:118:26 | type conversion | semmle.label | type conversion | -| test.go:119:23:119:28 | newSrc | semmle.label | newSrc | -| test.go:122:20:122:27 | definition of filename | semmle.label | definition of filename | -| test.go:124:2:124:33 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:124:25:124:32 | filename | semmle.label | filename | -| test.go:126:3:126:19 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:126:12:126:12 | f | semmle.label | f | -| test.go:128:37:128:38 | rc | semmle.label | rc | -| test.go:137:2:137:51 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:137:43:137:50 | filename | semmle.label | filename | -| test.go:138:20:138:29 | implicit dereference | semmle.label | implicit dereference | -| test.go:138:20:138:29 | implicit read of field Reader | semmle.label | implicit read of field Reader | -| test.go:139:12:139:12 | f | semmle.label | f | -| test.go:139:12:139:19 | call to Open | semmle.label | call to Open | -| test.go:141:37:141:38 | rc | semmle.label | rc | -| test.go:152:19:152:22 | definition of file | semmle.label | definition of file | -| test.go:153:2:153:29 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:153:25:153:28 | file | semmle.label | file | -| test.go:154:2:154:69 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:154:32:154:53 | call to NewReader | semmle.label | call to NewReader | -| test.go:154:48:154:52 | file1 | semmle.label | file1 | -| test.go:157:3:157:36 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:157:26:157:29 | file | semmle.label | file | -| test.go:158:36:158:51 | fileReaderCloser | semmle.label | fileReaderCloser | -| test.go:163:20:163:23 | definition of file | semmle.label | definition of file | -| test.go:164:2:164:29 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:164:25:164:28 | file | semmle.label | file | -| test.go:165:2:165:87 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:165:50:165:71 | call to NewReader | semmle.label | call to NewReader | -| test.go:165:66:165:70 | file2 | semmle.label | file2 | -| test.go:169:26:169:29 | file | semmle.label | file | -| test.go:169:26:169:36 | call to Open | semmle.label | call to Open | -| test.go:170:36:170:51 | fileReaderCloser | semmle.label | fileReaderCloser | -| test.go:175:17:175:20 | definition of file | semmle.label | definition of file | -| test.go:178:2:178:72 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:178:40:178:43 | file | semmle.label | file | -| test.go:180:2:180:11 | bzip2dsnet | semmle.label | bzip2dsnet | -| test.go:181:12:181:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:181:26:181:35 | bzip2dsnet | semmle.label | bzip2dsnet | -| test.go:183:18:183:24 | tarRead | semmle.label | tarRead | -| test.go:186:12:186:15 | definition of file | semmle.label | definition of file | -| test.go:189:11:189:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:189:27:189:30 | file | semmle.label | file | -| test.go:191:2:191:6 | Bzip2 | semmle.label | Bzip2 | -| test.go:192:12:192:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:192:26:192:30 | Bzip2 | semmle.label | Bzip2 | -| test.go:194:18:194:24 | tarRead | semmle.label | tarRead | -| test.go:196:12:196:15 | definition of file | semmle.label | definition of file | -| test.go:199:11:199:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:199:27:199:30 | file | semmle.label | file | -| test.go:201:2:201:6 | Flate | semmle.label | Flate | -| test.go:202:12:202:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:202:26:202:30 | Flate | semmle.label | Flate | -| test.go:204:18:204:24 | tarRead | semmle.label | tarRead | -| test.go:206:21:206:24 | definition of file | semmle.label | definition of file | -| test.go:210:19:210:48 | call to NewReader | semmle.label | call to NewReader | -| test.go:210:44:210:47 | file | semmle.label | file | -| test.go:212:2:212:14 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:213:12:213:39 | call to NewReader | semmle.label | call to NewReader | -| test.go:213:26:213:38 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:215:18:215:24 | tarRead | semmle.label | tarRead | -| test.go:217:17:217:20 | definition of file | semmle.label | definition of file | -| test.go:220:2:220:72 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:220:40:220:43 | file | semmle.label | file | -| test.go:222:2:222:11 | flatedsnet | semmle.label | flatedsnet | -| test.go:223:12:223:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:223:26:223:35 | flatedsnet | semmle.label | flatedsnet | -| test.go:225:18:225:24 | tarRead | semmle.label | tarRead | -| test.go:227:20:227:23 | definition of file | semmle.label | definition of file | -| test.go:230:2:230:50 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:230:46:230:49 | file | semmle.label | file | -| test.go:232:2:232:14 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:233:12:233:39 | call to NewReader | semmle.label | call to NewReader | -| test.go:233:26:233:38 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:235:18:235:24 | tarRead | semmle.label | tarRead | -| test.go:237:11:237:14 | definition of file | semmle.label | definition of file | -| test.go:240:2:240:32 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:240:28:240:31 | file | semmle.label | file | -| test.go:242:2:242:5 | Zlib | semmle.label | Zlib | -| test.go:243:12:243:30 | call to NewReader | semmle.label | call to NewReader | -| test.go:243:26:243:29 | Zlib | semmle.label | Zlib | -| test.go:245:18:245:24 | tarRead | semmle.label | tarRead | -| test.go:247:13:247:16 | definition of file | semmle.label | definition of file | -| test.go:250:12:250:33 | call to NewReader | semmle.label | call to NewReader | -| test.go:250:29:250:32 | file | semmle.label | file | +| test.go:76:17:76:28 | selection of Body | semmle.label | selection of Body | +| test.go:77:15:77:26 | selection of Body | semmle.label | selection of Body | +| test.go:78:5:78:16 | selection of Body | semmle.label | selection of Body | +| test.go:112:17:112:19 | definition of src | semmle.label | definition of src | +| test.go:113:2:113:32 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:113:29:113:31 | src | semmle.label | src | +| test.go:117:11:117:26 | type conversion | semmle.label | type conversion | +| test.go:118:23:118:28 | newSrc | semmle.label | newSrc | +| test.go:121:20:121:27 | definition of filename | semmle.label | definition of filename | +| test.go:123:2:123:33 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:123:25:123:32 | filename | semmle.label | filename | +| test.go:125:3:125:19 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:125:12:125:12 | f | semmle.label | f | +| test.go:127:37:127:38 | rc | semmle.label | rc | +| test.go:136:2:136:51 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:136:43:136:50 | filename | semmle.label | filename | +| test.go:137:20:137:29 | implicit dereference | semmle.label | implicit dereference | +| test.go:137:20:137:29 | implicit read of field Reader | semmle.label | implicit read of field Reader | +| test.go:138:12:138:12 | f | semmle.label | f | +| test.go:138:12:138:19 | call to Open | semmle.label | call to Open | +| test.go:140:37:140:38 | rc | semmle.label | rc | +| test.go:151:19:151:22 | definition of file | semmle.label | definition of file | +| test.go:152:2:152:29 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:152:25:152:28 | file | semmle.label | file | +| test.go:153:2:153:69 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:153:32:153:53 | call to NewReader | semmle.label | call to NewReader | +| test.go:153:48:153:52 | file1 | semmle.label | file1 | +| test.go:156:3:156:36 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:156:26:156:29 | file | semmle.label | file | +| test.go:157:36:157:51 | fileReaderCloser | semmle.label | fileReaderCloser | +| test.go:162:20:162:23 | definition of file | semmle.label | definition of file | +| test.go:163:2:163:29 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:163:25:163:28 | file | semmle.label | file | +| test.go:164:2:164:87 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:164:50:164:71 | call to NewReader | semmle.label | call to NewReader | +| test.go:164:66:164:70 | file2 | semmle.label | file2 | +| test.go:168:26:168:29 | file | semmle.label | file | +| test.go:168:26:168:36 | call to Open | semmle.label | call to Open | +| test.go:169:36:169:51 | fileReaderCloser | semmle.label | fileReaderCloser | +| test.go:174:17:174:20 | definition of file | semmle.label | definition of file | +| test.go:177:2:177:72 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:177:40:177:43 | file | semmle.label | file | +| test.go:179:2:179:11 | bzip2dsnet | semmle.label | bzip2dsnet | +| test.go:180:12:180:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:180:26:180:35 | bzip2dsnet | semmle.label | bzip2dsnet | +| test.go:182:18:182:24 | tarRead | semmle.label | tarRead | +| test.go:185:12:185:15 | definition of file | semmle.label | definition of file | +| test.go:188:11:188:31 | call to NewReader | semmle.label | call to NewReader | +| test.go:188:27:188:30 | file | semmle.label | file | +| test.go:190:2:190:6 | Bzip2 | semmle.label | Bzip2 | +| test.go:191:12:191:31 | call to NewReader | semmle.label | call to NewReader | +| test.go:191:26:191:30 | Bzip2 | semmle.label | Bzip2 | +| test.go:193:18:193:24 | tarRead | semmle.label | tarRead | +| test.go:195:12:195:15 | definition of file | semmle.label | definition of file | +| test.go:198:11:198:31 | call to NewReader | semmle.label | call to NewReader | +| test.go:198:27:198:30 | file | semmle.label | file | +| test.go:200:2:200:6 | Flate | semmle.label | Flate | +| test.go:201:12:201:31 | call to NewReader | semmle.label | call to NewReader | +| test.go:201:26:201:30 | Flate | semmle.label | Flate | +| test.go:203:18:203:24 | tarRead | semmle.label | tarRead | +| test.go:205:21:205:24 | definition of file | semmle.label | definition of file | +| test.go:209:19:209:48 | call to NewReader | semmle.label | call to NewReader | +| test.go:209:44:209:47 | file | semmle.label | file | +| test.go:211:2:211:14 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:212:12:212:39 | call to NewReader | semmle.label | call to NewReader | +| test.go:212:26:212:38 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:214:18:214:24 | tarRead | semmle.label | tarRead | +| test.go:216:17:216:20 | definition of file | semmle.label | definition of file | +| test.go:219:2:219:72 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:219:40:219:43 | file | semmle.label | file | +| test.go:221:2:221:11 | flatedsnet | semmle.label | flatedsnet | +| test.go:222:12:222:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:222:26:222:35 | flatedsnet | semmle.label | flatedsnet | +| test.go:224:18:224:24 | tarRead | semmle.label | tarRead | +| test.go:226:20:226:23 | definition of file | semmle.label | definition of file | +| test.go:229:2:229:50 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:229:46:229:49 | file | semmle.label | file | +| test.go:231:2:231:14 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:232:12:232:39 | call to NewReader | semmle.label | call to NewReader | +| test.go:232:26:232:38 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:234:18:234:24 | tarRead | semmle.label | tarRead | +| test.go:236:11:236:14 | definition of file | semmle.label | definition of file | +| test.go:239:2:239:32 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:239:28:239:31 | file | semmle.label | file | +| test.go:241:2:241:5 | Zlib | semmle.label | Zlib | +| test.go:242:12:242:30 | call to NewReader | semmle.label | call to NewReader | +| test.go:242:26:242:29 | Zlib | semmle.label | Zlib | +| test.go:244:18:244:24 | tarRead | semmle.label | tarRead | +| test.go:246:13:246:16 | definition of file | semmle.label | definition of file | +| test.go:249:12:249:33 | call to NewReader | semmle.label | call to NewReader | +| test.go:249:29:249:32 | file | semmle.label | file | +| test.go:251:2:251:7 | Snappy | semmle.label | Snappy | | test.go:252:2:252:7 | Snappy | semmle.label | Snappy | -| test.go:253:2:253:7 | Snappy | semmle.label | Snappy | -| test.go:254:12:254:32 | call to NewReader | semmle.label | call to NewReader | -| test.go:254:26:254:31 | Snappy | semmle.label | Snappy | -| test.go:256:18:256:24 | tarRead | semmle.label | tarRead | -| test.go:258:22:258:25 | definition of file | semmle.label | definition of file | -| test.go:261:21:261:51 | call to NewReader | semmle.label | call to NewReader | -| test.go:261:47:261:50 | file | semmle.label | file | -| test.go:263:2:263:16 | snappyklauspost | semmle.label | snappyklauspost | +| test.go:253:12:253:32 | call to NewReader | semmle.label | call to NewReader | +| test.go:253:26:253:31 | Snappy | semmle.label | Snappy | +| test.go:255:18:255:24 | tarRead | semmle.label | tarRead | +| test.go:257:22:257:25 | definition of file | semmle.label | definition of file | +| test.go:260:21:260:51 | call to NewReader | semmle.label | call to NewReader | +| test.go:260:47:260:50 | file | semmle.label | file | +| test.go:262:2:262:16 | snappyklauspost | semmle.label | snappyklauspost | +| test.go:264:2:264:16 | snappyklauspost | semmle.label | snappyklauspost | | test.go:265:2:265:16 | snappyklauspost | semmle.label | snappyklauspost | -| test.go:266:2:266:16 | snappyklauspost | semmle.label | snappyklauspost | -| test.go:267:12:267:41 | call to NewReader | semmle.label | call to NewReader | -| test.go:267:26:267:40 | snappyklauspost | semmle.label | snappyklauspost | -| test.go:269:18:269:24 | tarRead | semmle.label | tarRead | -| test.go:271:9:271:12 | definition of file | semmle.label | definition of file | -| test.go:274:8:274:25 | call to NewReader | semmle.label | call to NewReader | -| test.go:274:21:274:24 | file | semmle.label | file | -| test.go:276:2:276:3 | S2 | semmle.label | S2 | -| test.go:278:2:278:3 | S2 | semmle.label | S2 | -| test.go:279:12:279:28 | call to NewReader | semmle.label | call to NewReader | -| test.go:279:26:279:27 | S2 | semmle.label | S2 | -| test.go:281:18:281:24 | tarRead | semmle.label | tarRead | -| test.go:283:11:283:14 | definition of file | semmle.label | definition of file | -| test.go:286:2:286:36 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:286:32:286:35 | file | semmle.label | file | -| test.go:288:2:288:9 | gzipRead | semmle.label | gzipRead | -| test.go:289:12:289:34 | call to NewReader | semmle.label | call to NewReader | -| test.go:289:26:289:33 | gzipRead | semmle.label | gzipRead | -| test.go:291:18:291:24 | tarRead | semmle.label | tarRead | -| test.go:293:20:293:23 | definition of file | semmle.label | definition of file | -| test.go:296:2:296:50 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:296:46:296:49 | file | semmle.label | file | -| test.go:298:2:298:14 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:300:2:300:14 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:301:12:301:39 | call to NewReader | semmle.label | call to NewReader | -| test.go:301:26:301:38 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:303:18:303:24 | tarRead | semmle.label | tarRead | -| test.go:305:20:305:23 | definition of file | semmle.label | definition of file | -| test.go:308:2:308:46 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:308:42:308:45 | file | semmle.label | file | -| test.go:312:2:312:10 | gzippgzip | semmle.label | gzippgzip | -| test.go:313:12:313:35 | call to NewReader | semmle.label | call to NewReader | -| test.go:313:26:313:34 | gzippgzip | semmle.label | gzippgzip | -| test.go:315:18:315:24 | tarRead | semmle.label | tarRead | -| test.go:317:21:317:24 | definition of file | semmle.label | definition of file | -| test.go:320:2:320:41 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:320:37:320:40 | file | semmle.label | file | -| test.go:322:2:322:5 | zstd | semmle.label | zstd | -| test.go:324:2:324:5 | zstd | semmle.label | zstd | -| test.go:326:2:326:5 | zstd | semmle.label | zstd | -| test.go:327:12:327:30 | call to NewReader | semmle.label | call to NewReader | -| test.go:327:26:327:29 | zstd | semmle.label | zstd | -| test.go:329:18:329:24 | tarRead | semmle.label | tarRead | -| test.go:331:19:331:22 | definition of file | semmle.label | definition of file | -| test.go:334:10:334:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:334:32:334:35 | file | semmle.label | file | -| test.go:336:2:336:5 | zstd | semmle.label | zstd | -| test.go:337:12:337:30 | call to NewReader | semmle.label | call to NewReader | -| test.go:337:26:337:29 | zstd | semmle.label | zstd | -| test.go:339:18:339:24 | tarRead | semmle.label | tarRead | -| test.go:341:9:341:12 | definition of file | semmle.label | definition of file | -| test.go:344:2:344:32 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:344:28:344:31 | file | semmle.label | file | -| test.go:346:2:346:7 | xzRead | semmle.label | xzRead | -| test.go:347:12:347:32 | call to NewReader | semmle.label | call to NewReader | -| test.go:347:26:347:31 | xzRead | semmle.label | xzRead | -| test.go:349:18:349:24 | tarRead | semmle.label | tarRead | -| test.go:352:22:352:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:352:22:352:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:352:22:352:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:352:22:352:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:352:22:352:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:352:22:352:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:352:22:352:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:352:22:352:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:364:25:364:31 | tarRead | semmle.label | tarRead | -| test.go:364:25:364:31 | tarRead | semmle.label | tarRead | -| test.go:364:25:364:31 | tarRead | semmle.label | tarRead | -| test.go:364:25:364:31 | tarRead | semmle.label | tarRead | -| test.go:364:25:364:31 | tarRead | semmle.label | tarRead | -| test.go:364:25:364:31 | tarRead | semmle.label | tarRead | -| test.go:364:25:364:31 | tarRead | semmle.label | tarRead | -| test.go:364:25:364:31 | tarRead | semmle.label | tarRead | +| test.go:266:12:266:41 | call to NewReader | semmle.label | call to NewReader | +| test.go:266:26:266:40 | snappyklauspost | semmle.label | snappyklauspost | +| test.go:268:18:268:24 | tarRead | semmle.label | tarRead | +| test.go:270:9:270:12 | definition of file | semmle.label | definition of file | +| test.go:273:8:273:25 | call to NewReader | semmle.label | call to NewReader | +| test.go:273:21:273:24 | file | semmle.label | file | +| test.go:275:2:275:3 | S2 | semmle.label | S2 | +| test.go:277:2:277:3 | S2 | semmle.label | S2 | +| test.go:278:12:278:28 | call to NewReader | semmle.label | call to NewReader | +| test.go:278:26:278:27 | S2 | semmle.label | S2 | +| test.go:280:18:280:24 | tarRead | semmle.label | tarRead | +| test.go:282:11:282:14 | definition of file | semmle.label | definition of file | +| test.go:285:2:285:36 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:285:32:285:35 | file | semmle.label | file | +| test.go:287:2:287:9 | gzipRead | semmle.label | gzipRead | +| test.go:288:12:288:34 | call to NewReader | semmle.label | call to NewReader | +| test.go:288:26:288:33 | gzipRead | semmle.label | gzipRead | +| test.go:290:18:290:24 | tarRead | semmle.label | tarRead | +| test.go:292:20:292:23 | definition of file | semmle.label | definition of file | +| test.go:295:2:295:50 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:295:46:295:49 | file | semmle.label | file | +| test.go:297:2:297:14 | gzipklauspost | semmle.label | gzipklauspost | +| test.go:299:2:299:14 | gzipklauspost | semmle.label | gzipklauspost | +| test.go:300:12:300:39 | call to NewReader | semmle.label | call to NewReader | +| test.go:300:26:300:38 | gzipklauspost | semmle.label | gzipklauspost | +| test.go:302:18:302:24 | tarRead | semmle.label | tarRead | +| test.go:304:20:304:23 | definition of file | semmle.label | definition of file | +| test.go:307:2:307:48 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:307:44:307:47 | file | semmle.label | file | +| test.go:309:2:309:11 | pgzippgzip | semmle.label | pgzippgzip | +| test.go:311:2:311:11 | pgzippgzip | semmle.label | pgzippgzip | +| test.go:312:12:312:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:312:26:312:35 | pgzippgzip | semmle.label | pgzippgzip | +| test.go:314:18:314:24 | tarRead | semmle.label | tarRead | +| test.go:316:21:316:24 | definition of file | semmle.label | definition of file | +| test.go:319:2:319:41 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:319:37:319:40 | file | semmle.label | file | +| test.go:321:2:321:5 | zstd | semmle.label | zstd | +| test.go:323:2:323:5 | zstd | semmle.label | zstd | +| test.go:325:2:325:5 | zstd | semmle.label | zstd | +| test.go:326:12:326:30 | call to NewReader | semmle.label | call to NewReader | +| test.go:326:26:326:29 | zstd | semmle.label | zstd | +| test.go:328:18:328:24 | tarRead | semmle.label | tarRead | +| test.go:330:19:330:22 | definition of file | semmle.label | definition of file | +| test.go:333:10:333:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:333:32:333:35 | file | semmle.label | file | +| test.go:335:2:335:5 | zstd | semmle.label | zstd | +| test.go:336:12:336:30 | call to NewReader | semmle.label | call to NewReader | +| test.go:336:26:336:29 | zstd | semmle.label | zstd | +| test.go:338:18:338:24 | tarRead | semmle.label | tarRead | +| test.go:340:9:340:12 | definition of file | semmle.label | definition of file | +| test.go:343:2:343:32 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:343:28:343:31 | file | semmle.label | file | +| test.go:345:2:345:7 | xzRead | semmle.label | xzRead | +| test.go:346:12:346:32 | call to NewReader | semmle.label | call to NewReader | +| test.go:346:26:346:31 | xzRead | semmle.label | xzRead | +| test.go:348:18:348:24 | tarRead | semmle.label | tarRead | +| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | +| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | +| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | +| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | +| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | +| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | +| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | +| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | +| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | subpaths #select -| test.go:119:23:119:28 | newSrc | test.go:61:13:61:24 | selection of Body | test.go:119:23:119:28 | newSrc | This decompression is $@. | test.go:61:13:61:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:128:37:128:38 | rc | test.go:58:16:58:46 | call to FormValue | test.go:128:37:128:38 | rc | This decompression is $@. | test.go:58:16:58:46 | call to FormValue | decompressing compressed data without managing output size | -| test.go:141:37:141:38 | rc | test.go:58:16:58:46 | call to FormValue | test.go:141:37:141:38 | rc | This decompression is $@. | test.go:58:16:58:46 | call to FormValue | decompressing compressed data without managing output size | -| test.go:158:36:158:51 | fileReaderCloser | test.go:56:15:56:26 | selection of Body | test.go:158:36:158:51 | fileReaderCloser | This decompression is $@. | test.go:56:15:56:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:158:36:158:51 | fileReaderCloser | test.go:62:15:62:26 | selection of Body | test.go:158:36:158:51 | fileReaderCloser | This decompression is $@. | test.go:62:15:62:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:170:36:170:51 | fileReaderCloser | test.go:57:16:57:27 | selection of Body | test.go:170:36:170:51 | fileReaderCloser | This decompression is $@. | test.go:57:16:57:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:170:36:170:51 | fileReaderCloser | test.go:63:16:63:27 | selection of Body | test.go:170:36:170:51 | fileReaderCloser | This decompression is $@. | test.go:63:16:63:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:180:2:180:11 | bzip2dsnet | test.go:64:13:64:24 | selection of Body | test.go:180:2:180:11 | bzip2dsnet | This decompression is $@. | test.go:64:13:64:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:191:2:191:6 | Bzip2 | test.go:65:8:65:19 | selection of Body | test.go:191:2:191:6 | Bzip2 | This decompression is $@. | test.go:65:8:65:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:201:2:201:6 | Flate | test.go:66:8:66:19 | selection of Body | test.go:201:2:201:6 | Flate | This decompression is $@. | test.go:66:8:66:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:212:2:212:14 | zlibklauspost | test.go:67:17:67:28 | selection of Body | test.go:212:2:212:14 | zlibklauspost | This decompression is $@. | test.go:67:17:67:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:222:2:222:11 | flatedsnet | test.go:68:13:68:24 | selection of Body | test.go:222:2:222:11 | flatedsnet | This decompression is $@. | test.go:68:13:68:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:232:2:232:14 | zlibklauspost | test.go:69:16:69:27 | selection of Body | test.go:232:2:232:14 | zlibklauspost | This decompression is $@. | test.go:69:16:69:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:242:2:242:5 | Zlib | test.go:70:7:70:18 | selection of Body | test.go:242:2:242:5 | Zlib | This decompression is $@. | test.go:70:7:70:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:252:2:252:7 | Snappy | test.go:71:9:71:20 | selection of Body | test.go:252:2:252:7 | Snappy | This decompression is $@. | test.go:71:9:71:20 | selection of Body | decompressing compressed data without managing output size | -| test.go:253:2:253:7 | Snappy | test.go:71:9:71:20 | selection of Body | test.go:253:2:253:7 | Snappy | This decompression is $@. | test.go:71:9:71:20 | selection of Body | decompressing compressed data without managing output size | -| test.go:263:2:263:16 | snappyklauspost | test.go:72:18:72:29 | selection of Body | test.go:263:2:263:16 | snappyklauspost | This decompression is $@. | test.go:72:18:72:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:265:2:265:16 | snappyklauspost | test.go:72:18:72:29 | selection of Body | test.go:265:2:265:16 | snappyklauspost | This decompression is $@. | test.go:72:18:72:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:266:2:266:16 | snappyklauspost | test.go:72:18:72:29 | selection of Body | test.go:266:2:266:16 | snappyklauspost | This decompression is $@. | test.go:72:18:72:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:276:2:276:3 | S2 | test.go:73:5:73:16 | selection of Body | test.go:276:2:276:3 | S2 | This decompression is $@. | test.go:73:5:73:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:278:2:278:3 | S2 | test.go:73:5:73:16 | selection of Body | test.go:278:2:278:3 | S2 | This decompression is $@. | test.go:73:5:73:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:288:2:288:9 | gzipRead | test.go:74:7:74:18 | selection of Body | test.go:288:2:288:9 | gzipRead | This decompression is $@. | test.go:74:7:74:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:298:2:298:14 | gzipklauspost | test.go:75:16:75:27 | selection of Body | test.go:298:2:298:14 | gzipklauspost | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:300:2:300:14 | gzipklauspost | test.go:75:16:75:27 | selection of Body | test.go:300:2:300:14 | gzipklauspost | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:312:2:312:10 | gzippgzip | test.go:76:16:76:27 | selection of Body | test.go:312:2:312:10 | gzippgzip | This decompression is $@. | test.go:76:16:76:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:322:2:322:5 | zstd | test.go:77:17:77:28 | selection of Body | test.go:322:2:322:5 | zstd | This decompression is $@. | test.go:77:17:77:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:324:2:324:5 | zstd | test.go:77:17:77:28 | selection of Body | test.go:324:2:324:5 | zstd | This decompression is $@. | test.go:77:17:77:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:326:2:326:5 | zstd | test.go:77:17:77:28 | selection of Body | test.go:326:2:326:5 | zstd | This decompression is $@. | test.go:77:17:77:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:336:2:336:5 | zstd | test.go:78:15:78:26 | selection of Body | test.go:336:2:336:5 | zstd | This decompression is $@. | test.go:78:15:78:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:346:2:346:7 | xzRead | test.go:79:5:79:16 | selection of Body | test.go:346:2:346:7 | xzRead | This decompression is $@. | test.go:79:5:79:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:364:25:364:31 | tarRead | test.go:64:13:64:24 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:64:13:64:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:364:25:364:31 | tarRead | test.go:65:8:65:19 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:65:8:65:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:364:25:364:31 | tarRead | test.go:66:8:66:19 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:66:8:66:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:364:25:364:31 | tarRead | test.go:67:17:67:28 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:67:17:67:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:364:25:364:31 | tarRead | test.go:68:13:68:24 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:68:13:68:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:364:25:364:31 | tarRead | test.go:69:16:69:27 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:69:16:69:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:364:25:364:31 | tarRead | test.go:70:7:70:18 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:70:7:70:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:364:25:364:31 | tarRead | test.go:71:9:71:20 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:71:9:71:20 | selection of Body | decompressing compressed data without managing output size | -| test.go:364:25:364:31 | tarRead | test.go:72:18:72:29 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:72:18:72:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:364:25:364:31 | tarRead | test.go:73:5:73:16 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:73:5:73:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:364:25:364:31 | tarRead | test.go:74:7:74:18 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:74:7:74:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:364:25:364:31 | tarRead | test.go:75:16:75:27 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:364:25:364:31 | tarRead | test.go:76:16:76:27 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:76:16:76:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:364:25:364:31 | tarRead | test.go:77:17:77:28 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:77:17:77:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:364:25:364:31 | tarRead | test.go:78:15:78:26 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:78:15:78:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:364:25:364:31 | tarRead | test.go:79:5:79:16 | selection of Body | test.go:364:25:364:31 | tarRead | This decompression is $@. | test.go:79:5:79:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:118:23:118:28 | newSrc | test.go:62:13:62:24 | selection of Body | test.go:118:23:118:28 | newSrc | This decompression is $@. | test.go:62:13:62:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:127:37:127:38 | rc | test.go:59:16:59:46 | call to FormValue | test.go:127:37:127:38 | rc | This decompression is $@. | test.go:59:16:59:46 | call to FormValue | decompressing compressed data without managing output size | +| test.go:140:37:140:38 | rc | test.go:59:16:59:46 | call to FormValue | test.go:140:37:140:38 | rc | This decompression is $@. | test.go:59:16:59:46 | call to FormValue | decompressing compressed data without managing output size | +| test.go:157:36:157:51 | fileReaderCloser | test.go:57:15:57:26 | selection of Body | test.go:157:36:157:51 | fileReaderCloser | This decompression is $@. | test.go:57:15:57:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:169:36:169:51 | fileReaderCloser | test.go:58:16:58:27 | selection of Body | test.go:169:36:169:51 | fileReaderCloser | This decompression is $@. | test.go:58:16:58:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:179:2:179:11 | bzip2dsnet | test.go:63:13:63:24 | selection of Body | test.go:179:2:179:11 | bzip2dsnet | This decompression is $@. | test.go:63:13:63:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:190:2:190:6 | Bzip2 | test.go:64:8:64:19 | selection of Body | test.go:190:2:190:6 | Bzip2 | This decompression is $@. | test.go:64:8:64:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:200:2:200:6 | Flate | test.go:65:8:65:19 | selection of Body | test.go:200:2:200:6 | Flate | This decompression is $@. | test.go:65:8:65:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:211:2:211:14 | zlibklauspost | test.go:66:17:66:28 | selection of Body | test.go:211:2:211:14 | zlibklauspost | This decompression is $@. | test.go:66:17:66:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:221:2:221:11 | flatedsnet | test.go:67:13:67:24 | selection of Body | test.go:221:2:221:11 | flatedsnet | This decompression is $@. | test.go:67:13:67:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:231:2:231:14 | zlibklauspost | test.go:68:16:68:27 | selection of Body | test.go:231:2:231:14 | zlibklauspost | This decompression is $@. | test.go:68:16:68:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:241:2:241:5 | Zlib | test.go:69:7:69:18 | selection of Body | test.go:241:2:241:5 | Zlib | This decompression is $@. | test.go:69:7:69:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:251:2:251:7 | Snappy | test.go:70:9:70:20 | selection of Body | test.go:251:2:251:7 | Snappy | This decompression is $@. | test.go:70:9:70:20 | selection of Body | decompressing compressed data without managing output size | +| test.go:252:2:252:7 | Snappy | test.go:70:9:70:20 | selection of Body | test.go:252:2:252:7 | Snappy | This decompression is $@. | test.go:70:9:70:20 | selection of Body | decompressing compressed data without managing output size | +| test.go:262:2:262:16 | snappyklauspost | test.go:71:18:71:29 | selection of Body | test.go:262:2:262:16 | snappyklauspost | This decompression is $@. | test.go:71:18:71:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:264:2:264:16 | snappyklauspost | test.go:71:18:71:29 | selection of Body | test.go:264:2:264:16 | snappyklauspost | This decompression is $@. | test.go:71:18:71:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:265:2:265:16 | snappyklauspost | test.go:71:18:71:29 | selection of Body | test.go:265:2:265:16 | snappyklauspost | This decompression is $@. | test.go:71:18:71:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:275:2:275:3 | S2 | test.go:72:5:72:16 | selection of Body | test.go:275:2:275:3 | S2 | This decompression is $@. | test.go:72:5:72:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:277:2:277:3 | S2 | test.go:72:5:72:16 | selection of Body | test.go:277:2:277:3 | S2 | This decompression is $@. | test.go:72:5:72:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:287:2:287:9 | gzipRead | test.go:73:7:73:18 | selection of Body | test.go:287:2:287:9 | gzipRead | This decompression is $@. | test.go:73:7:73:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:297:2:297:14 | gzipklauspost | test.go:74:16:74:27 | selection of Body | test.go:297:2:297:14 | gzipklauspost | This decompression is $@. | test.go:74:16:74:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:299:2:299:14 | gzipklauspost | test.go:74:16:74:27 | selection of Body | test.go:299:2:299:14 | gzipklauspost | This decompression is $@. | test.go:74:16:74:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:309:2:309:11 | pgzippgzip | test.go:75:16:75:27 | selection of Body | test.go:309:2:309:11 | pgzippgzip | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:311:2:311:11 | pgzippgzip | test.go:75:16:75:27 | selection of Body | test.go:311:2:311:11 | pgzippgzip | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:321:2:321:5 | zstd | test.go:76:17:76:28 | selection of Body | test.go:321:2:321:5 | zstd | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:323:2:323:5 | zstd | test.go:76:17:76:28 | selection of Body | test.go:323:2:323:5 | zstd | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:325:2:325:5 | zstd | test.go:76:17:76:28 | selection of Body | test.go:325:2:325:5 | zstd | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:335:2:335:5 | zstd | test.go:77:15:77:26 | selection of Body | test.go:335:2:335:5 | zstd | This decompression is $@. | test.go:77:15:77:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:345:2:345:7 | xzRead | test.go:78:5:78:16 | selection of Body | test.go:345:2:345:7 | xzRead | This decompression is $@. | test.go:78:5:78:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:63:13:63:24 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:63:13:63:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:64:8:64:19 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:64:8:64:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:65:8:65:19 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:65:8:65:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:66:17:66:28 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:66:17:66:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:67:13:67:24 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:67:13:67:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:68:16:68:27 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:68:16:68:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:69:7:69:18 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:69:7:69:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:70:9:70:20 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:70:9:70:20 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:71:18:71:29 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:71:18:71:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:72:5:72:16 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:72:5:72:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:73:7:73:18 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:73:7:73:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:74:16:74:27 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:74:16:74:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:75:16:75:27 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:76:17:76:28 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:77:15:77:26 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:77:15:77:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:25:363:31 | tarRead | test.go:78:5:78:16 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:78:5:78:16 | selection of Body | decompressing compressed data without managing output size | diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go index e50d0bd4bd1..6f9bdaa1b51 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go @@ -23,6 +23,11 @@ import ( "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" @@ -31,12 +36,8 @@ import ( "github.com/klauspost/compress/s2" snappyKlauspost "github.com/klauspost/compress/snappy" zlibKlauspost "github.com/klauspost/compress/zlib" - pzipKlauspost "github.com/klauspost/pgzip" + pgzipKlauspost "github.com/klauspost/pgzip" "github.com/ulikunitz/xz" - "io" - "net/http" - "os" - "testing/fstest" zstdDataDog "github.com/DataDog/zstd" zipKlauspost "github.com/klauspost/compress/zip" @@ -59,8 +60,6 @@ func DecompressHandler(w http.ResponseWriter, request *http.Request) { ZipOpenReaderSafe(request.PostFormValue("test")) GZipOpenReaderSafe(request.PostFormValue("test")) GZipReader(request.Body, "dest") - ZipNewReader(request.Body) - ZipNewReader2(request.Body) Bzip2Dsnet(request.Body) Bzip2(request.Body) Flate(request.Body) @@ -305,12 +304,12 @@ func GzipKlauspost(file io.Reader) { func PzipKlauspost(file io.Reader) { var tarRead *tar.Reader - gzippgzip, _ := pzipKlauspost.NewReader(file) + pgzippgzip, _ := pgzipKlauspost.NewReader(file) var out []byte = make([]byte, 70) - gzippgzip.Read(out) + pgzippgzip.Read(out) var buf bytes.Buffer - gzippgzip.WriteTo(&buf) - tarRead = tar.NewReader(gzippgzip) + pgzippgzip.WriteTo(&buf) + tarRead = tar.NewReader(pgzippgzip) TarDecompressor(tarRead) } From a72bd7efcc6e8db5fa3aa868186863e270832f78 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Sun, 17 Dec 2023 20:07:16 +0100 Subject: [PATCH 045/430] add GOOD and BAD comment to sinks, some chore improvements on tests --- .../DecompressionBombs.expected | 544 +++++++++--------- .../CWE-522-DecompressionBombs/test.go | 69 ++- 2 files changed, 306 insertions(+), 307 deletions(-) diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected index ef81f974859..ed8d6b05379 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -7,18 +7,18 @@ edges | test.go:64:8:64:19 | selection of Body | test.go:185:12:185:15 | definition of file | | test.go:65:8:65:19 | selection of Body | test.go:195:12:195:15 | definition of file | | test.go:66:17:66:28 | selection of Body | test.go:205:21:205:24 | definition of file | -| test.go:67:13:67:24 | selection of Body | test.go:216:17:216:20 | definition of file | -| test.go:68:16:68:27 | selection of Body | test.go:226:20:226:23 | definition of file | -| test.go:69:7:69:18 | selection of Body | test.go:236:11:236:14 | definition of file | -| test.go:70:9:70:20 | selection of Body | test.go:246:13:246:16 | definition of file | -| test.go:71:18:71:29 | selection of Body | test.go:257:22:257:25 | definition of file | -| test.go:72:5:72:16 | selection of Body | test.go:270:9:270:12 | definition of file | -| test.go:73:7:73:18 | selection of Body | test.go:282:11:282:14 | definition of file | -| test.go:74:16:74:27 | selection of Body | test.go:292:20:292:23 | definition of file | -| test.go:75:16:75:27 | selection of Body | test.go:304:20:304:23 | definition of file | -| test.go:76:17:76:28 | selection of Body | test.go:316:21:316:24 | definition of file | -| test.go:77:15:77:26 | selection of Body | test.go:330:19:330:22 | definition of file | -| test.go:78:5:78:16 | selection of Body | test.go:340:9:340:12 | definition of file | +| test.go:67:13:67:24 | selection of Body | test.go:215:17:215:20 | definition of file | +| test.go:68:16:68:27 | selection of Body | test.go:225:20:225:23 | definition of file | +| test.go:69:7:69:18 | selection of Body | test.go:235:11:235:14 | definition of file | +| test.go:70:9:70:20 | selection of Body | test.go:245:13:245:16 | definition of file | +| test.go:71:18:71:29 | selection of Body | test.go:256:22:256:25 | definition of file | +| test.go:72:5:72:16 | selection of Body | test.go:269:9:269:12 | definition of file | +| test.go:73:7:73:18 | selection of Body | test.go:281:11:281:14 | definition of file | +| test.go:74:16:74:27 | selection of Body | test.go:291:20:291:23 | definition of file | +| test.go:75:16:75:27 | selection of Body | test.go:303:20:303:23 | definition of file | +| test.go:76:17:76:28 | selection of Body | test.go:315:21:315:24 | definition of file | +| test.go:77:15:77:26 | selection of Body | test.go:329:19:329:22 | definition of file | +| test.go:78:5:78:16 | selection of Body | test.go:339:9:339:12 | definition of file | | test.go:112:17:112:19 | definition of src | test.go:113:29:113:31 | src | | test.go:113:2:113:32 | ... := ...[0] | test.go:117:11:117:26 | type conversion | | test.go:113:29:113:31 | src | test.go:113:2:113:32 | ... := ...[0] | @@ -58,129 +58,129 @@ edges | test.go:177:40:177:43 | file | test.go:177:2:177:72 | ... := ...[0] | | test.go:180:12:180:36 | call to NewReader | test.go:182:18:182:24 | tarRead | | test.go:180:26:180:35 | bzip2dsnet | test.go:180:12:180:36 | call to NewReader | -| test.go:182:18:182:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:182:18:182:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | | test.go:185:12:185:15 | definition of file | test.go:188:27:188:30 | file | | test.go:188:11:188:31 | call to NewReader | test.go:190:2:190:6 | Bzip2 | | test.go:188:11:188:31 | call to NewReader | test.go:191:26:191:30 | Bzip2 | | test.go:188:27:188:30 | file | test.go:188:11:188:31 | call to NewReader | | test.go:191:12:191:31 | call to NewReader | test.go:193:18:193:24 | tarRead | | test.go:191:26:191:30 | Bzip2 | test.go:191:12:191:31 | call to NewReader | -| test.go:193:18:193:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | +| test.go:193:18:193:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | | test.go:195:12:195:15 | definition of file | test.go:198:27:198:30 | file | | test.go:198:11:198:31 | call to NewReader | test.go:200:2:200:6 | Flate | | test.go:198:11:198:31 | call to NewReader | test.go:201:26:201:30 | Flate | | test.go:198:27:198:30 | file | test.go:198:11:198:31 | call to NewReader | | test.go:201:12:201:31 | call to NewReader | test.go:203:18:203:24 | tarRead | | test.go:201:26:201:30 | Flate | test.go:201:12:201:31 | call to NewReader | -| test.go:203:18:203:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:205:21:205:24 | definition of file | test.go:209:44:209:47 | file | -| test.go:209:19:209:48 | call to NewReader | test.go:211:2:211:14 | zlibklauspost | -| test.go:209:19:209:48 | call to NewReader | test.go:212:26:212:38 | zlibklauspost | -| test.go:209:44:209:47 | file | test.go:209:19:209:48 | call to NewReader | -| test.go:212:12:212:39 | call to NewReader | test.go:214:18:214:24 | tarRead | -| test.go:212:26:212:38 | zlibklauspost | test.go:212:12:212:39 | call to NewReader | -| test.go:214:18:214:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:216:17:216:20 | definition of file | test.go:219:40:219:43 | file | -| test.go:219:2:219:72 | ... := ...[0] | test.go:221:2:221:11 | flatedsnet | -| test.go:219:2:219:72 | ... := ...[0] | test.go:222:26:222:35 | flatedsnet | -| test.go:219:40:219:43 | file | test.go:219:2:219:72 | ... := ...[0] | -| test.go:222:12:222:36 | call to NewReader | test.go:224:18:224:24 | tarRead | -| test.go:222:26:222:35 | flatedsnet | test.go:222:12:222:36 | call to NewReader | -| test.go:224:18:224:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:226:20:226:23 | definition of file | test.go:229:46:229:49 | file | -| test.go:229:2:229:50 | ... := ...[0] | test.go:231:2:231:14 | zlibklauspost | -| test.go:229:2:229:50 | ... := ...[0] | test.go:232:26:232:38 | zlibklauspost | -| test.go:229:46:229:49 | file | test.go:229:2:229:50 | ... := ...[0] | -| test.go:232:12:232:39 | call to NewReader | test.go:234:18:234:24 | tarRead | -| test.go:232:26:232:38 | zlibklauspost | test.go:232:12:232:39 | call to NewReader | -| test.go:234:18:234:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:236:11:236:14 | definition of file | test.go:239:28:239:31 | file | -| test.go:239:2:239:32 | ... := ...[0] | test.go:241:2:241:5 | Zlib | -| test.go:239:2:239:32 | ... := ...[0] | test.go:242:26:242:29 | Zlib | -| test.go:239:28:239:31 | file | test.go:239:2:239:32 | ... := ...[0] | -| test.go:242:12:242:30 | call to NewReader | test.go:244:18:244:24 | tarRead | -| test.go:242:26:242:29 | Zlib | test.go:242:12:242:30 | call to NewReader | -| test.go:244:18:244:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:246:13:246:16 | definition of file | test.go:249:29:249:32 | file | -| test.go:249:12:249:33 | call to NewReader | test.go:251:2:251:7 | Snappy | -| test.go:249:12:249:33 | call to NewReader | test.go:252:2:252:7 | Snappy | -| test.go:249:12:249:33 | call to NewReader | test.go:253:26:253:31 | Snappy | -| test.go:249:29:249:32 | file | test.go:249:12:249:33 | call to NewReader | -| test.go:253:12:253:32 | call to NewReader | test.go:255:18:255:24 | tarRead | -| test.go:253:26:253:31 | Snappy | test.go:253:12:253:32 | call to NewReader | -| test.go:255:18:255:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:257:22:257:25 | definition of file | test.go:260:47:260:50 | file | -| test.go:260:21:260:51 | call to NewReader | test.go:262:2:262:16 | snappyklauspost | -| test.go:260:21:260:51 | call to NewReader | test.go:264:2:264:16 | snappyklauspost | -| test.go:260:21:260:51 | call to NewReader | test.go:265:2:265:16 | snappyklauspost | -| test.go:260:21:260:51 | call to NewReader | test.go:266:26:266:40 | snappyklauspost | -| test.go:260:47:260:50 | file | test.go:260:21:260:51 | call to NewReader | -| test.go:266:12:266:41 | call to NewReader | test.go:268:18:268:24 | tarRead | -| test.go:266:26:266:40 | snappyklauspost | test.go:266:12:266:41 | call to NewReader | -| test.go:268:18:268:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:270:9:270:12 | definition of file | test.go:273:21:273:24 | file | -| test.go:273:8:273:25 | call to NewReader | test.go:275:2:275:3 | S2 | -| test.go:273:8:273:25 | call to NewReader | test.go:277:2:277:3 | S2 | -| test.go:273:8:273:25 | call to NewReader | test.go:278:26:278:27 | S2 | -| test.go:273:21:273:24 | file | test.go:273:8:273:25 | call to NewReader | -| test.go:278:12:278:28 | call to NewReader | test.go:280:18:280:24 | tarRead | -| test.go:278:26:278:27 | S2 | test.go:278:12:278:28 | call to NewReader | -| test.go:280:18:280:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:282:11:282:14 | definition of file | test.go:285:32:285:35 | file | -| test.go:285:2:285:36 | ... := ...[0] | test.go:287:2:287:9 | gzipRead | -| test.go:285:2:285:36 | ... := ...[0] | test.go:288:26:288:33 | gzipRead | -| test.go:285:32:285:35 | file | test.go:285:2:285:36 | ... := ...[0] | -| test.go:288:12:288:34 | call to NewReader | test.go:290:18:290:24 | tarRead | -| test.go:288:26:288:33 | gzipRead | test.go:288:12:288:34 | call to NewReader | -| test.go:290:18:290:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:292:20:292:23 | definition of file | test.go:295:46:295:49 | file | -| test.go:295:2:295:50 | ... := ...[0] | test.go:297:2:297:14 | gzipklauspost | -| test.go:295:2:295:50 | ... := ...[0] | test.go:299:2:299:14 | gzipklauspost | -| test.go:295:2:295:50 | ... := ...[0] | test.go:300:26:300:38 | gzipklauspost | -| test.go:295:46:295:49 | file | test.go:295:2:295:50 | ... := ...[0] | -| test.go:300:12:300:39 | call to NewReader | test.go:302:18:302:24 | tarRead | -| test.go:300:26:300:38 | gzipklauspost | test.go:300:12:300:39 | call to NewReader | -| test.go:302:18:302:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:304:20:304:23 | definition of file | test.go:307:44:307:47 | file | -| test.go:307:2:307:48 | ... := ...[0] | test.go:309:2:309:11 | pgzippgzip | -| test.go:307:2:307:48 | ... := ...[0] | test.go:311:2:311:11 | pgzippgzip | -| test.go:307:2:307:48 | ... := ...[0] | test.go:312:26:312:35 | pgzippgzip | -| test.go:307:44:307:47 | file | test.go:307:2:307:48 | ... := ...[0] | -| test.go:312:12:312:36 | call to NewReader | test.go:314:18:314:24 | tarRead | -| test.go:312:26:312:35 | pgzippgzip | test.go:312:12:312:36 | call to NewReader | -| test.go:314:18:314:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:316:21:316:24 | definition of file | test.go:319:37:319:40 | file | -| test.go:319:2:319:41 | ... := ...[0] | test.go:321:2:321:5 | zstd | -| test.go:319:2:319:41 | ... := ...[0] | test.go:323:2:323:5 | zstd | -| test.go:319:2:319:41 | ... := ...[0] | test.go:325:2:325:5 | zstd | -| test.go:319:2:319:41 | ... := ...[0] | test.go:326:26:326:29 | zstd | -| test.go:319:37:319:40 | file | test.go:319:2:319:41 | ... := ...[0] | -| test.go:326:12:326:30 | call to NewReader | test.go:328:18:328:24 | tarRead | -| test.go:326:26:326:29 | zstd | test.go:326:12:326:30 | call to NewReader | -| test.go:328:18:328:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:330:19:330:22 | definition of file | test.go:333:32:333:35 | file | -| test.go:333:10:333:36 | call to NewReader | test.go:335:2:335:5 | zstd | -| test.go:333:10:333:36 | call to NewReader | test.go:336:26:336:29 | zstd | -| test.go:333:32:333:35 | file | test.go:333:10:333:36 | call to NewReader | -| test.go:336:12:336:30 | call to NewReader | test.go:338:18:338:24 | tarRead | -| test.go:336:26:336:29 | zstd | test.go:336:12:336:30 | call to NewReader | -| test.go:338:18:338:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:340:9:340:12 | definition of file | test.go:343:28:343:31 | file | -| test.go:343:2:343:32 | ... := ...[0] | test.go:345:2:345:7 | xzRead | -| test.go:343:2:343:32 | ... := ...[0] | test.go:346:26:346:31 | xzRead | -| test.go:343:28:343:31 | file | test.go:343:2:343:32 | ... := ...[0] | -| test.go:346:12:346:32 | call to NewReader | test.go:348:18:348:24 | tarRead | -| test.go:346:26:346:31 | xzRead | test.go:346:12:346:32 | call to NewReader | -| test.go:348:18:348:24 | tarRead | test.go:351:22:351:28 | definition of tarRead | -| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | -| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | -| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | -| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | -| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | -| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | -| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | -| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | -| test.go:351:22:351:28 | definition of tarRead | test.go:363:25:363:31 | tarRead | +| test.go:203:18:203:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | +| test.go:205:21:205:24 | definition of file | test.go:208:44:208:47 | file | +| test.go:208:19:208:48 | call to NewReader | test.go:210:2:210:14 | zlibklauspost | +| test.go:208:19:208:48 | call to NewReader | test.go:211:26:211:38 | zlibklauspost | +| test.go:208:44:208:47 | file | test.go:208:19:208:48 | call to NewReader | +| test.go:211:12:211:39 | call to NewReader | test.go:213:18:213:24 | tarRead | +| test.go:211:26:211:38 | zlibklauspost | test.go:211:12:211:39 | call to NewReader | +| test.go:213:18:213:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | +| test.go:215:17:215:20 | definition of file | test.go:218:40:218:43 | file | +| test.go:218:2:218:72 | ... := ...[0] | test.go:220:2:220:11 | flatedsnet | +| test.go:218:2:218:72 | ... := ...[0] | test.go:221:26:221:35 | flatedsnet | +| test.go:218:40:218:43 | file | test.go:218:2:218:72 | ... := ...[0] | +| test.go:221:12:221:36 | call to NewReader | test.go:223:18:223:24 | tarRead | +| test.go:221:26:221:35 | flatedsnet | test.go:221:12:221:36 | call to NewReader | +| test.go:223:18:223:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | +| test.go:225:20:225:23 | definition of file | test.go:228:46:228:49 | file | +| test.go:228:2:228:50 | ... := ...[0] | test.go:230:2:230:14 | zlibklauspost | +| test.go:228:2:228:50 | ... := ...[0] | test.go:231:26:231:38 | zlibklauspost | +| test.go:228:46:228:49 | file | test.go:228:2:228:50 | ... := ...[0] | +| test.go:231:12:231:39 | call to NewReader | test.go:233:18:233:24 | tarRead | +| test.go:231:26:231:38 | zlibklauspost | test.go:231:12:231:39 | call to NewReader | +| test.go:233:18:233:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | +| test.go:235:11:235:14 | definition of file | test.go:238:28:238:31 | file | +| test.go:238:2:238:32 | ... := ...[0] | test.go:240:2:240:5 | Zlib | +| test.go:238:2:238:32 | ... := ...[0] | test.go:241:26:241:29 | Zlib | +| test.go:238:28:238:31 | file | test.go:238:2:238:32 | ... := ...[0] | +| test.go:241:12:241:30 | call to NewReader | test.go:243:18:243:24 | tarRead | +| test.go:241:26:241:29 | Zlib | test.go:241:12:241:30 | call to NewReader | +| test.go:243:18:243:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | +| test.go:245:13:245:16 | definition of file | test.go:248:29:248:32 | file | +| test.go:248:12:248:33 | call to NewReader | test.go:250:2:250:7 | Snappy | +| test.go:248:12:248:33 | call to NewReader | test.go:251:2:251:7 | Snappy | +| test.go:248:12:248:33 | call to NewReader | test.go:252:26:252:31 | Snappy | +| test.go:248:29:248:32 | file | test.go:248:12:248:33 | call to NewReader | +| test.go:252:12:252:32 | call to NewReader | test.go:254:18:254:24 | tarRead | +| test.go:252:26:252:31 | Snappy | test.go:252:12:252:32 | call to NewReader | +| test.go:254:18:254:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | +| test.go:256:22:256:25 | definition of file | test.go:259:47:259:50 | file | +| test.go:259:21:259:51 | call to NewReader | test.go:261:2:261:16 | snappyklauspost | +| test.go:259:21:259:51 | call to NewReader | test.go:263:2:263:16 | snappyklauspost | +| test.go:259:21:259:51 | call to NewReader | test.go:264:2:264:16 | snappyklauspost | +| test.go:259:21:259:51 | call to NewReader | test.go:265:26:265:40 | snappyklauspost | +| test.go:259:47:259:50 | file | test.go:259:21:259:51 | call to NewReader | +| test.go:265:12:265:41 | call to NewReader | test.go:267:18:267:24 | tarRead | +| test.go:265:26:265:40 | snappyklauspost | test.go:265:12:265:41 | call to NewReader | +| test.go:267:18:267:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | +| test.go:269:9:269:12 | definition of file | test.go:272:21:272:24 | file | +| test.go:272:8:272:25 | call to NewReader | test.go:274:2:274:3 | S2 | +| test.go:272:8:272:25 | call to NewReader | test.go:276:2:276:3 | S2 | +| test.go:272:8:272:25 | call to NewReader | test.go:277:26:277:27 | S2 | +| test.go:272:21:272:24 | file | test.go:272:8:272:25 | call to NewReader | +| test.go:277:12:277:28 | call to NewReader | test.go:279:18:279:24 | tarRead | +| test.go:277:26:277:27 | S2 | test.go:277:12:277:28 | call to NewReader | +| test.go:279:18:279:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | +| test.go:281:11:281:14 | definition of file | test.go:284:32:284:35 | file | +| test.go:284:2:284:36 | ... := ...[0] | test.go:286:2:286:9 | gzipRead | +| test.go:284:2:284:36 | ... := ...[0] | test.go:287:26:287:33 | gzipRead | +| test.go:284:32:284:35 | file | test.go:284:2:284:36 | ... := ...[0] | +| test.go:287:12:287:34 | call to NewReader | test.go:289:18:289:24 | tarRead | +| test.go:287:26:287:33 | gzipRead | test.go:287:12:287:34 | call to NewReader | +| test.go:289:18:289:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | +| test.go:291:20:291:23 | definition of file | test.go:294:46:294:49 | file | +| test.go:294:2:294:50 | ... := ...[0] | test.go:296:2:296:14 | gzipklauspost | +| test.go:294:2:294:50 | ... := ...[0] | test.go:298:2:298:14 | gzipklauspost | +| test.go:294:2:294:50 | ... := ...[0] | test.go:299:26:299:38 | gzipklauspost | +| test.go:294:46:294:49 | file | test.go:294:2:294:50 | ... := ...[0] | +| test.go:299:12:299:39 | call to NewReader | test.go:301:18:301:24 | tarRead | +| test.go:299:26:299:38 | gzipklauspost | test.go:299:12:299:39 | call to NewReader | +| test.go:301:18:301:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | +| test.go:303:20:303:23 | definition of file | test.go:306:44:306:47 | file | +| test.go:306:2:306:48 | ... := ...[0] | test.go:308:2:308:11 | pgzippgzip | +| test.go:306:2:306:48 | ... := ...[0] | test.go:310:2:310:11 | pgzippgzip | +| test.go:306:2:306:48 | ... := ...[0] | test.go:311:26:311:35 | pgzippgzip | +| test.go:306:44:306:47 | file | test.go:306:2:306:48 | ... := ...[0] | +| test.go:311:12:311:36 | call to NewReader | test.go:313:18:313:24 | tarRead | +| test.go:311:26:311:35 | pgzippgzip | test.go:311:12:311:36 | call to NewReader | +| test.go:313:18:313:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | +| test.go:315:21:315:24 | definition of file | test.go:318:37:318:40 | file | +| test.go:318:2:318:41 | ... := ...[0] | test.go:320:2:320:5 | zstd | +| test.go:318:2:318:41 | ... := ...[0] | test.go:322:2:322:5 | zstd | +| test.go:318:2:318:41 | ... := ...[0] | test.go:324:2:324:5 | zstd | +| test.go:318:2:318:41 | ... := ...[0] | test.go:325:26:325:29 | zstd | +| test.go:318:37:318:40 | file | test.go:318:2:318:41 | ... := ...[0] | +| test.go:325:12:325:30 | call to NewReader | test.go:327:18:327:24 | tarRead | +| test.go:325:26:325:29 | zstd | test.go:325:12:325:30 | call to NewReader | +| test.go:327:18:327:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | +| test.go:329:19:329:22 | definition of file | test.go:332:32:332:35 | file | +| test.go:332:10:332:36 | call to NewReader | test.go:334:2:334:5 | zstd | +| test.go:332:10:332:36 | call to NewReader | test.go:335:26:335:29 | zstd | +| test.go:332:32:332:35 | file | test.go:332:10:332:36 | call to NewReader | +| test.go:335:12:335:30 | call to NewReader | test.go:337:18:337:24 | tarRead | +| test.go:335:26:335:29 | zstd | test.go:335:12:335:30 | call to NewReader | +| test.go:337:18:337:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | +| test.go:339:9:339:12 | definition of file | test.go:342:28:342:31 | file | +| test.go:342:2:342:32 | ... := ...[0] | test.go:344:2:344:7 | xzRead | +| test.go:342:2:342:32 | ... := ...[0] | test.go:345:26:345:31 | xzRead | +| test.go:342:28:342:31 | file | test.go:342:2:342:32 | ... := ...[0] | +| test.go:345:12:345:32 | call to NewReader | test.go:347:18:347:24 | tarRead | +| test.go:345:26:345:31 | xzRead | test.go:345:12:345:32 | call to NewReader | +| test.go:347:18:347:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | +| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | +| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | +| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | +| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | +| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | +| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | +| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | +| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | +| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | nodes | test.go:57:15:57:26 | selection of Body | semmle.label | selection of Body | | test.go:58:16:58:27 | selection of Body | semmle.label | selection of Body | @@ -260,122 +260,122 @@ nodes | test.go:201:26:201:30 | Flate | semmle.label | Flate | | test.go:203:18:203:24 | tarRead | semmle.label | tarRead | | test.go:205:21:205:24 | definition of file | semmle.label | definition of file | -| test.go:209:19:209:48 | call to NewReader | semmle.label | call to NewReader | -| test.go:209:44:209:47 | file | semmle.label | file | -| test.go:211:2:211:14 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:212:12:212:39 | call to NewReader | semmle.label | call to NewReader | -| test.go:212:26:212:38 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:214:18:214:24 | tarRead | semmle.label | tarRead | -| test.go:216:17:216:20 | definition of file | semmle.label | definition of file | -| test.go:219:2:219:72 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:219:40:219:43 | file | semmle.label | file | -| test.go:221:2:221:11 | flatedsnet | semmle.label | flatedsnet | -| test.go:222:12:222:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:222:26:222:35 | flatedsnet | semmle.label | flatedsnet | -| test.go:224:18:224:24 | tarRead | semmle.label | tarRead | -| test.go:226:20:226:23 | definition of file | semmle.label | definition of file | -| test.go:229:2:229:50 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:229:46:229:49 | file | semmle.label | file | -| test.go:231:2:231:14 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:232:12:232:39 | call to NewReader | semmle.label | call to NewReader | -| test.go:232:26:232:38 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:234:18:234:24 | tarRead | semmle.label | tarRead | -| test.go:236:11:236:14 | definition of file | semmle.label | definition of file | -| test.go:239:2:239:32 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:239:28:239:31 | file | semmle.label | file | -| test.go:241:2:241:5 | Zlib | semmle.label | Zlib | -| test.go:242:12:242:30 | call to NewReader | semmle.label | call to NewReader | -| test.go:242:26:242:29 | Zlib | semmle.label | Zlib | -| test.go:244:18:244:24 | tarRead | semmle.label | tarRead | -| test.go:246:13:246:16 | definition of file | semmle.label | definition of file | -| test.go:249:12:249:33 | call to NewReader | semmle.label | call to NewReader | -| test.go:249:29:249:32 | file | semmle.label | file | +| test.go:208:19:208:48 | call to NewReader | semmle.label | call to NewReader | +| test.go:208:44:208:47 | file | semmle.label | file | +| test.go:210:2:210:14 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:211:12:211:39 | call to NewReader | semmle.label | call to NewReader | +| test.go:211:26:211:38 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:213:18:213:24 | tarRead | semmle.label | tarRead | +| test.go:215:17:215:20 | definition of file | semmle.label | definition of file | +| test.go:218:2:218:72 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:218:40:218:43 | file | semmle.label | file | +| test.go:220:2:220:11 | flatedsnet | semmle.label | flatedsnet | +| test.go:221:12:221:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:221:26:221:35 | flatedsnet | semmle.label | flatedsnet | +| test.go:223:18:223:24 | tarRead | semmle.label | tarRead | +| test.go:225:20:225:23 | definition of file | semmle.label | definition of file | +| test.go:228:2:228:50 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:228:46:228:49 | file | semmle.label | file | +| test.go:230:2:230:14 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:231:12:231:39 | call to NewReader | semmle.label | call to NewReader | +| test.go:231:26:231:38 | zlibklauspost | semmle.label | zlibklauspost | +| test.go:233:18:233:24 | tarRead | semmle.label | tarRead | +| test.go:235:11:235:14 | definition of file | semmle.label | definition of file | +| test.go:238:2:238:32 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:238:28:238:31 | file | semmle.label | file | +| test.go:240:2:240:5 | Zlib | semmle.label | Zlib | +| test.go:241:12:241:30 | call to NewReader | semmle.label | call to NewReader | +| test.go:241:26:241:29 | Zlib | semmle.label | Zlib | +| test.go:243:18:243:24 | tarRead | semmle.label | tarRead | +| test.go:245:13:245:16 | definition of file | semmle.label | definition of file | +| test.go:248:12:248:33 | call to NewReader | semmle.label | call to NewReader | +| test.go:248:29:248:32 | file | semmle.label | file | +| test.go:250:2:250:7 | Snappy | semmle.label | Snappy | | test.go:251:2:251:7 | Snappy | semmle.label | Snappy | -| test.go:252:2:252:7 | Snappy | semmle.label | Snappy | -| test.go:253:12:253:32 | call to NewReader | semmle.label | call to NewReader | -| test.go:253:26:253:31 | Snappy | semmle.label | Snappy | -| test.go:255:18:255:24 | tarRead | semmle.label | tarRead | -| test.go:257:22:257:25 | definition of file | semmle.label | definition of file | -| test.go:260:21:260:51 | call to NewReader | semmle.label | call to NewReader | -| test.go:260:47:260:50 | file | semmle.label | file | -| test.go:262:2:262:16 | snappyklauspost | semmle.label | snappyklauspost | +| test.go:252:12:252:32 | call to NewReader | semmle.label | call to NewReader | +| test.go:252:26:252:31 | Snappy | semmle.label | Snappy | +| test.go:254:18:254:24 | tarRead | semmle.label | tarRead | +| test.go:256:22:256:25 | definition of file | semmle.label | definition of file | +| test.go:259:21:259:51 | call to NewReader | semmle.label | call to NewReader | +| test.go:259:47:259:50 | file | semmle.label | file | +| test.go:261:2:261:16 | snappyklauspost | semmle.label | snappyklauspost | +| test.go:263:2:263:16 | snappyklauspost | semmle.label | snappyklauspost | | test.go:264:2:264:16 | snappyklauspost | semmle.label | snappyklauspost | -| test.go:265:2:265:16 | snappyklauspost | semmle.label | snappyklauspost | -| test.go:266:12:266:41 | call to NewReader | semmle.label | call to NewReader | -| test.go:266:26:266:40 | snappyklauspost | semmle.label | snappyklauspost | -| test.go:268:18:268:24 | tarRead | semmle.label | tarRead | -| test.go:270:9:270:12 | definition of file | semmle.label | definition of file | -| test.go:273:8:273:25 | call to NewReader | semmle.label | call to NewReader | -| test.go:273:21:273:24 | file | semmle.label | file | -| test.go:275:2:275:3 | S2 | semmle.label | S2 | -| test.go:277:2:277:3 | S2 | semmle.label | S2 | -| test.go:278:12:278:28 | call to NewReader | semmle.label | call to NewReader | -| test.go:278:26:278:27 | S2 | semmle.label | S2 | -| test.go:280:18:280:24 | tarRead | semmle.label | tarRead | -| test.go:282:11:282:14 | definition of file | semmle.label | definition of file | -| test.go:285:2:285:36 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:285:32:285:35 | file | semmle.label | file | -| test.go:287:2:287:9 | gzipRead | semmle.label | gzipRead | -| test.go:288:12:288:34 | call to NewReader | semmle.label | call to NewReader | -| test.go:288:26:288:33 | gzipRead | semmle.label | gzipRead | -| test.go:290:18:290:24 | tarRead | semmle.label | tarRead | -| test.go:292:20:292:23 | definition of file | semmle.label | definition of file | -| test.go:295:2:295:50 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:295:46:295:49 | file | semmle.label | file | -| test.go:297:2:297:14 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:299:2:299:14 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:300:12:300:39 | call to NewReader | semmle.label | call to NewReader | -| test.go:300:26:300:38 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:302:18:302:24 | tarRead | semmle.label | tarRead | -| test.go:304:20:304:23 | definition of file | semmle.label | definition of file | -| test.go:307:2:307:48 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:307:44:307:47 | file | semmle.label | file | -| test.go:309:2:309:11 | pgzippgzip | semmle.label | pgzippgzip | -| test.go:311:2:311:11 | pgzippgzip | semmle.label | pgzippgzip | -| test.go:312:12:312:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:312:26:312:35 | pgzippgzip | semmle.label | pgzippgzip | -| test.go:314:18:314:24 | tarRead | semmle.label | tarRead | -| test.go:316:21:316:24 | definition of file | semmle.label | definition of file | -| test.go:319:2:319:41 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:319:37:319:40 | file | semmle.label | file | -| test.go:321:2:321:5 | zstd | semmle.label | zstd | -| test.go:323:2:323:5 | zstd | semmle.label | zstd | -| test.go:325:2:325:5 | zstd | semmle.label | zstd | -| test.go:326:12:326:30 | call to NewReader | semmle.label | call to NewReader | -| test.go:326:26:326:29 | zstd | semmle.label | zstd | -| test.go:328:18:328:24 | tarRead | semmle.label | tarRead | -| test.go:330:19:330:22 | definition of file | semmle.label | definition of file | -| test.go:333:10:333:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:333:32:333:35 | file | semmle.label | file | -| test.go:335:2:335:5 | zstd | semmle.label | zstd | -| test.go:336:12:336:30 | call to NewReader | semmle.label | call to NewReader | -| test.go:336:26:336:29 | zstd | semmle.label | zstd | -| test.go:338:18:338:24 | tarRead | semmle.label | tarRead | -| test.go:340:9:340:12 | definition of file | semmle.label | definition of file | -| test.go:343:2:343:32 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:343:28:343:31 | file | semmle.label | file | -| test.go:345:2:345:7 | xzRead | semmle.label | xzRead | -| test.go:346:12:346:32 | call to NewReader | semmle.label | call to NewReader | -| test.go:346:26:346:31 | xzRead | semmle.label | xzRead | -| test.go:348:18:348:24 | tarRead | semmle.label | tarRead | -| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:351:22:351:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | -| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | -| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | -| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | -| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | -| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | -| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | -| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | -| test.go:363:25:363:31 | tarRead | semmle.label | tarRead | +| test.go:265:12:265:41 | call to NewReader | semmle.label | call to NewReader | +| test.go:265:26:265:40 | snappyklauspost | semmle.label | snappyklauspost | +| test.go:267:18:267:24 | tarRead | semmle.label | tarRead | +| test.go:269:9:269:12 | definition of file | semmle.label | definition of file | +| test.go:272:8:272:25 | call to NewReader | semmle.label | call to NewReader | +| test.go:272:21:272:24 | file | semmle.label | file | +| test.go:274:2:274:3 | S2 | semmle.label | S2 | +| test.go:276:2:276:3 | S2 | semmle.label | S2 | +| test.go:277:12:277:28 | call to NewReader | semmle.label | call to NewReader | +| test.go:277:26:277:27 | S2 | semmle.label | S2 | +| test.go:279:18:279:24 | tarRead | semmle.label | tarRead | +| test.go:281:11:281:14 | definition of file | semmle.label | definition of file | +| test.go:284:2:284:36 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:284:32:284:35 | file | semmle.label | file | +| test.go:286:2:286:9 | gzipRead | semmle.label | gzipRead | +| test.go:287:12:287:34 | call to NewReader | semmle.label | call to NewReader | +| test.go:287:26:287:33 | gzipRead | semmle.label | gzipRead | +| test.go:289:18:289:24 | tarRead | semmle.label | tarRead | +| test.go:291:20:291:23 | definition of file | semmle.label | definition of file | +| test.go:294:2:294:50 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:294:46:294:49 | file | semmle.label | file | +| test.go:296:2:296:14 | gzipklauspost | semmle.label | gzipklauspost | +| test.go:298:2:298:14 | gzipklauspost | semmle.label | gzipklauspost | +| test.go:299:12:299:39 | call to NewReader | semmle.label | call to NewReader | +| test.go:299:26:299:38 | gzipklauspost | semmle.label | gzipklauspost | +| test.go:301:18:301:24 | tarRead | semmle.label | tarRead | +| test.go:303:20:303:23 | definition of file | semmle.label | definition of file | +| test.go:306:2:306:48 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:306:44:306:47 | file | semmle.label | file | +| test.go:308:2:308:11 | pgzippgzip | semmle.label | pgzippgzip | +| test.go:310:2:310:11 | pgzippgzip | semmle.label | pgzippgzip | +| test.go:311:12:311:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:311:26:311:35 | pgzippgzip | semmle.label | pgzippgzip | +| test.go:313:18:313:24 | tarRead | semmle.label | tarRead | +| test.go:315:21:315:24 | definition of file | semmle.label | definition of file | +| test.go:318:2:318:41 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:318:37:318:40 | file | semmle.label | file | +| test.go:320:2:320:5 | zstd | semmle.label | zstd | +| test.go:322:2:322:5 | zstd | semmle.label | zstd | +| test.go:324:2:324:5 | zstd | semmle.label | zstd | +| test.go:325:12:325:30 | call to NewReader | semmle.label | call to NewReader | +| test.go:325:26:325:29 | zstd | semmle.label | zstd | +| test.go:327:18:327:24 | tarRead | semmle.label | tarRead | +| test.go:329:19:329:22 | definition of file | semmle.label | definition of file | +| test.go:332:10:332:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:332:32:332:35 | file | semmle.label | file | +| test.go:334:2:334:5 | zstd | semmle.label | zstd | +| test.go:335:12:335:30 | call to NewReader | semmle.label | call to NewReader | +| test.go:335:26:335:29 | zstd | semmle.label | zstd | +| test.go:337:18:337:24 | tarRead | semmle.label | tarRead | +| test.go:339:9:339:12 | definition of file | semmle.label | definition of file | +| test.go:342:2:342:32 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:342:28:342:31 | file | semmle.label | file | +| test.go:344:2:344:7 | xzRead | semmle.label | xzRead | +| test.go:345:12:345:32 | call to NewReader | semmle.label | call to NewReader | +| test.go:345:26:345:31 | xzRead | semmle.label | xzRead | +| test.go:347:18:347:24 | tarRead | semmle.label | tarRead | +| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | +| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | +| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | +| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | +| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | +| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | +| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | +| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | +| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | subpaths #select | test.go:118:23:118:28 | newSrc | test.go:62:13:62:24 | selection of Body | test.go:118:23:118:28 | newSrc | This decompression is $@. | test.go:62:13:62:24 | selection of Body | decompressing compressed data without managing output size | @@ -386,40 +386,40 @@ subpaths | test.go:179:2:179:11 | bzip2dsnet | test.go:63:13:63:24 | selection of Body | test.go:179:2:179:11 | bzip2dsnet | This decompression is $@. | test.go:63:13:63:24 | selection of Body | decompressing compressed data without managing output size | | test.go:190:2:190:6 | Bzip2 | test.go:64:8:64:19 | selection of Body | test.go:190:2:190:6 | Bzip2 | This decompression is $@. | test.go:64:8:64:19 | selection of Body | decompressing compressed data without managing output size | | test.go:200:2:200:6 | Flate | test.go:65:8:65:19 | selection of Body | test.go:200:2:200:6 | Flate | This decompression is $@. | test.go:65:8:65:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:211:2:211:14 | zlibklauspost | test.go:66:17:66:28 | selection of Body | test.go:211:2:211:14 | zlibklauspost | This decompression is $@. | test.go:66:17:66:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:221:2:221:11 | flatedsnet | test.go:67:13:67:24 | selection of Body | test.go:221:2:221:11 | flatedsnet | This decompression is $@. | test.go:67:13:67:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:231:2:231:14 | zlibklauspost | test.go:68:16:68:27 | selection of Body | test.go:231:2:231:14 | zlibklauspost | This decompression is $@. | test.go:68:16:68:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:241:2:241:5 | Zlib | test.go:69:7:69:18 | selection of Body | test.go:241:2:241:5 | Zlib | This decompression is $@. | test.go:69:7:69:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:210:2:210:14 | zlibklauspost | test.go:66:17:66:28 | selection of Body | test.go:210:2:210:14 | zlibklauspost | This decompression is $@. | test.go:66:17:66:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:220:2:220:11 | flatedsnet | test.go:67:13:67:24 | selection of Body | test.go:220:2:220:11 | flatedsnet | This decompression is $@. | test.go:67:13:67:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:230:2:230:14 | zlibklauspost | test.go:68:16:68:27 | selection of Body | test.go:230:2:230:14 | zlibklauspost | This decompression is $@. | test.go:68:16:68:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:240:2:240:5 | Zlib | test.go:69:7:69:18 | selection of Body | test.go:240:2:240:5 | Zlib | This decompression is $@. | test.go:69:7:69:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:250:2:250:7 | Snappy | test.go:70:9:70:20 | selection of Body | test.go:250:2:250:7 | Snappy | This decompression is $@. | test.go:70:9:70:20 | selection of Body | decompressing compressed data without managing output size | | test.go:251:2:251:7 | Snappy | test.go:70:9:70:20 | selection of Body | test.go:251:2:251:7 | Snappy | This decompression is $@. | test.go:70:9:70:20 | selection of Body | decompressing compressed data without managing output size | -| test.go:252:2:252:7 | Snappy | test.go:70:9:70:20 | selection of Body | test.go:252:2:252:7 | Snappy | This decompression is $@. | test.go:70:9:70:20 | selection of Body | decompressing compressed data without managing output size | -| test.go:262:2:262:16 | snappyklauspost | test.go:71:18:71:29 | selection of Body | test.go:262:2:262:16 | snappyklauspost | This decompression is $@. | test.go:71:18:71:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:261:2:261:16 | snappyklauspost | test.go:71:18:71:29 | selection of Body | test.go:261:2:261:16 | snappyklauspost | This decompression is $@. | test.go:71:18:71:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:263:2:263:16 | snappyklauspost | test.go:71:18:71:29 | selection of Body | test.go:263:2:263:16 | snappyklauspost | This decompression is $@. | test.go:71:18:71:29 | selection of Body | decompressing compressed data without managing output size | | test.go:264:2:264:16 | snappyklauspost | test.go:71:18:71:29 | selection of Body | test.go:264:2:264:16 | snappyklauspost | This decompression is $@. | test.go:71:18:71:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:265:2:265:16 | snappyklauspost | test.go:71:18:71:29 | selection of Body | test.go:265:2:265:16 | snappyklauspost | This decompression is $@. | test.go:71:18:71:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:275:2:275:3 | S2 | test.go:72:5:72:16 | selection of Body | test.go:275:2:275:3 | S2 | This decompression is $@. | test.go:72:5:72:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:277:2:277:3 | S2 | test.go:72:5:72:16 | selection of Body | test.go:277:2:277:3 | S2 | This decompression is $@. | test.go:72:5:72:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:287:2:287:9 | gzipRead | test.go:73:7:73:18 | selection of Body | test.go:287:2:287:9 | gzipRead | This decompression is $@. | test.go:73:7:73:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:297:2:297:14 | gzipklauspost | test.go:74:16:74:27 | selection of Body | test.go:297:2:297:14 | gzipklauspost | This decompression is $@. | test.go:74:16:74:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:299:2:299:14 | gzipklauspost | test.go:74:16:74:27 | selection of Body | test.go:299:2:299:14 | gzipklauspost | This decompression is $@. | test.go:74:16:74:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:309:2:309:11 | pgzippgzip | test.go:75:16:75:27 | selection of Body | test.go:309:2:309:11 | pgzippgzip | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:311:2:311:11 | pgzippgzip | test.go:75:16:75:27 | selection of Body | test.go:311:2:311:11 | pgzippgzip | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:321:2:321:5 | zstd | test.go:76:17:76:28 | selection of Body | test.go:321:2:321:5 | zstd | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:323:2:323:5 | zstd | test.go:76:17:76:28 | selection of Body | test.go:323:2:323:5 | zstd | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:325:2:325:5 | zstd | test.go:76:17:76:28 | selection of Body | test.go:325:2:325:5 | zstd | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:335:2:335:5 | zstd | test.go:77:15:77:26 | selection of Body | test.go:335:2:335:5 | zstd | This decompression is $@. | test.go:77:15:77:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:345:2:345:7 | xzRead | test.go:78:5:78:16 | selection of Body | test.go:345:2:345:7 | xzRead | This decompression is $@. | test.go:78:5:78:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:63:13:63:24 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:63:13:63:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:64:8:64:19 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:64:8:64:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:65:8:65:19 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:65:8:65:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:66:17:66:28 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:66:17:66:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:67:13:67:24 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:67:13:67:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:68:16:68:27 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:68:16:68:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:69:7:69:18 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:69:7:69:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:70:9:70:20 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:70:9:70:20 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:71:18:71:29 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:71:18:71:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:72:5:72:16 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:72:5:72:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:73:7:73:18 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:73:7:73:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:74:16:74:27 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:74:16:74:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:75:16:75:27 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:76:17:76:28 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:77:15:77:26 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:77:15:77:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:363:25:363:31 | tarRead | test.go:78:5:78:16 | selection of Body | test.go:363:25:363:31 | tarRead | This decompression is $@. | test.go:78:5:78:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:274:2:274:3 | S2 | test.go:72:5:72:16 | selection of Body | test.go:274:2:274:3 | S2 | This decompression is $@. | test.go:72:5:72:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:276:2:276:3 | S2 | test.go:72:5:72:16 | selection of Body | test.go:276:2:276:3 | S2 | This decompression is $@. | test.go:72:5:72:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:286:2:286:9 | gzipRead | test.go:73:7:73:18 | selection of Body | test.go:286:2:286:9 | gzipRead | This decompression is $@. | test.go:73:7:73:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:296:2:296:14 | gzipklauspost | test.go:74:16:74:27 | selection of Body | test.go:296:2:296:14 | gzipklauspost | This decompression is $@. | test.go:74:16:74:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:298:2:298:14 | gzipklauspost | test.go:74:16:74:27 | selection of Body | test.go:298:2:298:14 | gzipklauspost | This decompression is $@. | test.go:74:16:74:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:308:2:308:11 | pgzippgzip | test.go:75:16:75:27 | selection of Body | test.go:308:2:308:11 | pgzippgzip | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:310:2:310:11 | pgzippgzip | test.go:75:16:75:27 | selection of Body | test.go:310:2:310:11 | pgzippgzip | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:320:2:320:5 | zstd | test.go:76:17:76:28 | selection of Body | test.go:320:2:320:5 | zstd | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:322:2:322:5 | zstd | test.go:76:17:76:28 | selection of Body | test.go:322:2:322:5 | zstd | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:324:2:324:5 | zstd | test.go:76:17:76:28 | selection of Body | test.go:324:2:324:5 | zstd | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:334:2:334:5 | zstd | test.go:77:15:77:26 | selection of Body | test.go:334:2:334:5 | zstd | This decompression is $@. | test.go:77:15:77:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:344:2:344:7 | xzRead | test.go:78:5:78:16 | selection of Body | test.go:344:2:344:7 | xzRead | This decompression is $@. | test.go:78:5:78:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:362:25:362:31 | tarRead | test.go:63:13:63:24 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:63:13:63:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:362:25:362:31 | tarRead | test.go:64:8:64:19 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:64:8:64:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:362:25:362:31 | tarRead | test.go:65:8:65:19 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:65:8:65:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:362:25:362:31 | tarRead | test.go:66:17:66:28 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:66:17:66:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:362:25:362:31 | tarRead | test.go:67:13:67:24 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:67:13:67:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:362:25:362:31 | tarRead | test.go:68:16:68:27 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:68:16:68:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:362:25:362:31 | tarRead | test.go:69:7:69:18 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:69:7:69:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:362:25:362:31 | tarRead | test.go:70:9:70:20 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:70:9:70:20 | selection of Body | decompressing compressed data without managing output size | +| test.go:362:25:362:31 | tarRead | test.go:71:18:71:29 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:71:18:71:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:362:25:362:31 | tarRead | test.go:72:5:72:16 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:72:5:72:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:362:25:362:31 | tarRead | test.go:73:7:73:18 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:73:7:73:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:362:25:362:31 | tarRead | test.go:74:16:74:27 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:74:16:74:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:362:25:362:31 | tarRead | test.go:75:16:75:27 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:362:25:362:31 | tarRead | test.go:76:17:76:28 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:362:25:362:31 | tarRead | test.go:77:15:77:26 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:77:15:77:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:362:25:362:31 | tarRead | test.go:78:5:78:16 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:78:5:78:16 | selection of Body | decompressing compressed data without managing output size | diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go index 6f9bdaa1b51..9c2d3685101 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go @@ -85,7 +85,7 @@ func GZipOpenReaderSafe(filename string) { 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) + newSrc = io.LimitReader(gzipR, 1024*1024*1024*5) // GOOD: The output size is being controlled _, _ = io.Copy(dstF, newSrc) } @@ -95,13 +95,13 @@ func ZipOpenReaderSafe(filename string) { for _, f := range r.File { rc, _ := f.Open() for { - result, _ := io.CopyN(os.Stdout, rc, 68) + 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 { + if totalBytes > 1024*1024*1024*5 { fmt.Print(totalBytes) break } @@ -115,7 +115,7 @@ func GZipReader(src io.Reader, dst string) { defer dstF.Close() var newSrc io.Reader newSrc = io.Reader(gzipR) - _, _ = io.Copy(dstF, newSrc) + _, _ = io.Copy(dstF, newSrc) // BAD } func ZipOpenReader(filename string) { @@ -124,7 +124,7 @@ func ZipOpenReader(filename string) { for _, f := range r.File { rc, _ := f.Open() for { - result, _ := io.CopyN(os.Stdout, rc, 68) + result, _ := io.CopyN(os.Stdout, rc, 68) // BAD if result == 0 { _ = rc.Close() break @@ -137,7 +137,7 @@ func ZipOpenReader(filename string) { for _, f := range rKlauspost.File { rc, _ := f.Open() for { - result, _ := io.CopyN(os.Stdout, rc, 68) + result, _ := io.CopyN(os.Stdout, rc, 68) // BAD if result == 0 { _ = rc.Close() break @@ -154,7 +154,7 @@ func ZipNewReader(file io.Reader) { for _, file := range zipReader.File { fileWriter := bytes.NewBuffer([]byte{}) fileReaderCloser, _ := file.Open() - result, _ := io.Copy(fileWriter, fileReaderCloser) + result, _ := io.Copy(fileWriter, fileReaderCloser) // BAD fmt.Print(result) } } @@ -166,7 +166,7 @@ func ZipNewReader2(file io.Reader) { fileWriter := bytes.NewBuffer([]byte{}) // file.OpenRaw() fileReaderCloser, _ := file.Open() - result, _ := io.Copy(fileWriter, fileReaderCloser) + result, _ := io.Copy(fileWriter, fileReaderCloser) // BAD fmt.Print(result) } } @@ -176,7 +176,7 @@ func Bzip2Dsnet(file io.Reader) { bzip2dsnet, _ := bzip2Dsnet.NewReader(file, &bzip2Dsnet.ReaderConfig{}) var out []byte = make([]byte, 70) - bzip2dsnet.Read(out) + bzip2dsnet.Read(out) // BAD tarRead = tar.NewReader(bzip2dsnet) TarDecompressor(tarRead) @@ -187,7 +187,7 @@ func Bzip2(file io.Reader) { Bzip2 := bzip2.NewReader(file) var out []byte = make([]byte, 70) - Bzip2.Read(out) + Bzip2.Read(out) // BAD tarRead = tar.NewReader(Bzip2) TarDecompressor(tarRead) @@ -197,7 +197,7 @@ func Flate(file io.Reader) { Flate := flate.NewReader(file) var out []byte = make([]byte, 70) - Flate.Read(out) + Flate.Read(out) // BAD tarRead = tar.NewReader(Flate) TarDecompressor(tarRead) @@ -205,10 +205,9 @@ func Flate(file io.Reader) { func FlateKlauspost(file io.Reader) { var tarRead *tar.Reader - //flateKlauspost.NewReaderDict() zlibklauspost := flateKlauspost.NewReader(file) var out []byte = make([]byte, 70) - zlibklauspost.Read(out) + zlibklauspost.Read(out) // BAD tarRead = tar.NewReader(zlibklauspost) TarDecompressor(tarRead) @@ -218,7 +217,7 @@ func FlateDsnet(file io.Reader) { flatedsnet, _ := flateDsnet.NewReader(file, &flateDsnet.ReaderConfig{}) var out []byte = make([]byte, 70) - flatedsnet.Read(out) + flatedsnet.Read(out) // BAD tarRead = tar.NewReader(flatedsnet) TarDecompressor(tarRead) @@ -228,7 +227,7 @@ func ZlibKlauspost(file io.Reader) { zlibklauspost, _ := zlibKlauspost.NewReader(file) var out []byte = make([]byte, 70) - zlibklauspost.Read(out) + zlibklauspost.Read(out) // BAD tarRead = tar.NewReader(zlibklauspost) TarDecompressor(tarRead) @@ -238,7 +237,7 @@ func Zlib(file io.Reader) { Zlib, _ := zlib.NewReader(file) var out []byte = make([]byte, 70) - Zlib.Read(out) + Zlib.Read(out) // BAD tarRead = tar.NewReader(Zlib) TarDecompressor(tarRead) @@ -248,8 +247,8 @@ func Snappy(file io.Reader) { Snappy := snappy.NewReader(file) var out []byte = make([]byte, 70) - Snappy.Read(out) - Snappy.ReadByte() + Snappy.Read(out) // BAD + Snappy.ReadByte() // BAD tarRead = tar.NewReader(Snappy) TarDecompressor(tarRead) @@ -259,10 +258,10 @@ func SnappyKlauspost(file io.Reader) { snappyklauspost := snappyKlauspost.NewReader(file) var out []byte = make([]byte, 70) - snappyklauspost.Read(out) + snappyklauspost.Read(out) // BAD var buf bytes.Buffer - snappyklauspost.DecodeConcurrent(&buf, 2) - snappyklauspost.ReadByte() + snappyklauspost.DecodeConcurrent(&buf, 2) // BAD + snappyklauspost.ReadByte() // BAD tarRead = tar.NewReader(snappyklauspost) TarDecompressor(tarRead) @@ -272,9 +271,9 @@ func S2(file io.Reader) { S2 := s2.NewReader(file) var out []byte = make([]byte, 70) - S2.Read(out) + S2.Read(out) // BAD var buf bytes.Buffer - S2.DecodeConcurrent(&buf, 2) + S2.DecodeConcurrent(&buf, 2) // BAD tarRead = tar.NewReader(S2) TarDecompressor(tarRead) @@ -284,7 +283,7 @@ func Gzip(file io.Reader) { gzipRead, _ := gzip.NewReader(file) var out []byte = make([]byte, 70) - gzipRead.Read(out) + gzipRead.Read(out) // BAD tarRead = tar.NewReader(gzipRead) TarDecompressor(tarRead) @@ -294,9 +293,9 @@ func GzipKlauspost(file io.Reader) { gzipklauspost, _ := gzipKlauspost.NewReader(file) var out []byte = make([]byte, 70) - gzipklauspost.Read(out) + gzipklauspost.Read(out) // BAD var buf bytes.Buffer - gzipklauspost.WriteTo(&buf) + gzipklauspost.WriteTo(&buf) // BAD tarRead = tar.NewReader(gzipklauspost) TarDecompressor(tarRead) @@ -306,9 +305,9 @@ func PzipKlauspost(file io.Reader) { pgzippgzip, _ := pgzipKlauspost.NewReader(file) var out []byte = make([]byte, 70) - pgzippgzip.Read(out) + pgzippgzip.Read(out) // BAD var buf bytes.Buffer - pgzippgzip.WriteTo(&buf) + pgzippgzip.WriteTo(&buf) // BAD tarRead = tar.NewReader(pgzippgzip) TarDecompressor(tarRead) @@ -318,11 +317,11 @@ func Zstd_Klauspost(file io.Reader) { zstd, _ := zstdKlauspost.NewReader(file) var out []byte = make([]byte, 70) - zstd.Read(out) + zstd.Read(out) // BAD var buf bytes.Buffer - zstd.WriteTo(&buf) + zstd.WriteTo(&buf) // BAD var src []byte - zstd.DecodeAll(src, nil) + zstd.DecodeAll(src, nil) // BAD tarRead = tar.NewReader(zstd) TarDecompressor(tarRead) @@ -332,7 +331,7 @@ func Zstd_DataDog(file io.Reader) { zstd := zstdDataDog.NewReader(file) var out []byte = make([]byte, 70) - zstd.Read(out) + zstd.Read(out) // BAD tarRead = tar.NewReader(zstd) TarDecompressor(tarRead) @@ -342,7 +341,7 @@ func Xz(file io.Reader) { xzRead, _ := xz.NewReader(file) var out []byte = make([]byte, 70) - xzRead.Read(out) + xzRead.Read(out) // BAD tarRead = tar.NewReader(xzRead) TarDecompressor(tarRead) @@ -350,7 +349,7 @@ func Xz(file io.Reader) { func TarDecompressor(tarRead *tar.Reader) { var tarOut []byte = make([]byte, 70) - tarRead.Read(tarOut) + tarRead.Read(tarOut) // BAD files := make(fstest.MapFS) for { cur, err := tarRead.Next() @@ -360,7 +359,7 @@ func TarDecompressor(tarRead *tar.Reader) { if cur.Typeflag != tar.TypeReg { continue } - data, _ := io.ReadAll(tarRead) + data, _ := io.ReadAll(tarRead) // BAD files[cur.Name] = &fstest.MapFile{Data: data} } fmt.Print(files) From 79edc5c261dee5149562b099f753ab5515576865 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Mon, 18 Dec 2023 12:33:32 +0100 Subject: [PATCH 046/430] add sanitizer to all Read methods, add Inline tests, improve tests --- .../DecompressionBombs.ql | 43 +- .../MultipartAndFormRemoteSource.qll | 18 - .../frameworks/DecompressionBombs.qll | 755 +--------------- .../DecompressionBombsCustomizations.qll | 772 ++++++++++++++++ .../DecompressionBombTest.expected | 3 + .../DecompressionBombTest.ql | 19 + .../DecompressionBombs.expected | 843 +++++++++--------- .../CWE-522-DecompressionBombs/test.go | 455 ++++++++-- 8 files changed, 1642 insertions(+), 1266 deletions(-) delete mode 100644 go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll create mode 100644 go/ql/src/experimental/frameworks/DecompressionBombsCustomizations.qll create mode 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.expected create mode 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.ql diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index b23e686a6b2..e86c097f020 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -12,47 +12,10 @@ */ import go -import MultipartAndFormRemoteSource import experimental.frameworks.DecompressionBombs +import DecompressionBomb::Flow::PathGraph -module DecompressionBombsConfig 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) - ) - } -} - -module DecompressionBombsFlow = TaintTracking::GlobalWithState; - -import DecompressionBombsFlow::PathGraph - -from DecompressionBombsFlow::PathNode source, DecompressionBombsFlow::PathNode sink -where DecompressionBombsFlow::flowPath(source, sink) +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/MultipartAndFormRemoteSource.qll b/go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll deleted file mode 100644 index 3ebb606613f..00000000000 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll +++ /dev/null @@ -1,18 +0,0 @@ -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") - ) - } -} diff --git a/go/ql/src/experimental/frameworks/DecompressionBombs.qll b/go/ql/src/experimental/frameworks/DecompressionBombs.qll index 29895ca1c0d..e1d2cd4ddc9 100644 --- a/go/ql/src/experimental/frameworks/DecompressionBombs.qll +++ b/go/ql/src/experimental/frameworks/DecompressionBombs.qll @@ -1,720 +1,63 @@ +/** + * Provides a taint tracking configuration for reasoning about decompression bomb vulnerabilities. + */ + import go -module DecompressionBombs { - class FlowState extends string { - FlowState() { - this = +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", "" + "ZipKlauspost" ] } - } - /** - * The additional taint steps that need for creating taint tracking or dataflow. - */ - abstract class AdditionalTaintStep extends string { - AdditionalTaintStep() { this = "AdditionalTaintStep" } + predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + exists(DecompressionBombs::AdditionalTaintStep addStep | + addStep.isAdditionalFlowStep(fromNode, toNode) + ) + } - /** - * Holds if there is a additional taint step between pred and succ. - */ - abstract predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode); - - /** - * Holds if there is a additional taint step between pred and succ. - */ - abstract predicate isAdditionalFlowStep( + 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 - */ - module DataDogZstd { - class TheSink extends Sink { - TheSink() { - exists(Method f | f.hasQualifiedName("github.com/DataDog/zstd", "reader", "Read") | - this = f.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/DataDog/zstd", "NewReader") and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "ZstdNewReader" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } + ) { + exists(DecompressionBombs::AdditionalTaintStep addStep | + addStep.isAdditionalFlowStep(fromNode, fromState, toNode, toState) + ) } } - /** - * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/zstd` package - */ - module KlauspostZstd { - class TheSink extends Sink { - TheSink() { - exists(Method f | - f.hasQualifiedName("github.com/klauspost/compress/zstd", "Decoder", - ["WriteTo", "DecodeAll"]) - | - this = f.getACall().getReceiver() - ) - or - exists(Method f | - f.hasQualifiedName("github.com/klauspost/compress/zstd", "Decoder", "Read") - | - this = f.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" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides additional flow steps for `archive/zip` package - */ - module ArchiveZip { - 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" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * 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 f, DataFlow::CallNode call | - f.hasQualifiedName("github.com/klauspost/compress/zip", "File", ["Open", "OpenRaw"]) and - call = f.getACall() - | - fromNode = call.getReceiver() and - toNode = call - ) - } - } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `github.com/ulikunitz/xz` package - */ - module UlikunitzXz { - class TheSink extends Sink { - TheSink() { - exists(Method f | f.hasQualifiedName("github.com/ulikunitz/xz", "Reader", "Read") | - this = f.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/ulikunitz/xz", "NewReader") and call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "XzNewReader" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `compress/gzip` package - */ - module CompressGzip { - class TheSink extends Sink { - TheSink() { - exists(Method f | f.hasQualifiedName("compress/gzip", "Reader", "Read") | - this = f.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("compress/gzip", "NewReader") and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "GzipNewReader" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/gzip` package - */ - module KlauspostGzipAndPgzip { - class TheSink extends Sink { - TheSink() { - exists(Method f | - f.hasQualifiedName(["github.com/klauspost/compress/gzip", "github.com/klauspost/pgzip"], - "Reader", "Read") - | - this = f.getACall().getReceiver() - ) - or - exists(Method f | - f.hasQualifiedName(["github.com/klauspost/compress/gzip", "github.com/klauspost/pgzip"], - "Reader", "WriteTo") - | - this = f.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/pgzip", "NewReader") and - call = f.getACall() and - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "PgzipNewReader" - or - 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" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `compress/bzip2` package - */ - module CompressBzip2 { - class TheSink extends Sink { - TheSink() { - exists(Method f | f.hasQualifiedName("compress/bzip2", "reader", "Read") | - this = f.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("compress/bzip2", "NewReader") and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "Bzip2NewReader" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `github.com/dsnet/compress/bzip2` package - */ - module DsnetBzip2 { - class TheSink extends Sink { - TheSink() { - exists(Method f | f.hasQualifiedName("github.com/dsnet/compress/bzip2", "Reader", "Read") | - this = f.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/dsnet/compress/bzip2", "NewReader") and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "Bzip2NewReader" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `github.com/dsnet/compress/flate` package - */ - module DsnetFlate { - class TheSink extends Sink { - TheSink() { - exists(Method f | f.hasQualifiedName("github.com/dsnet/compress/flate", "Reader", "Read") | - this = f.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/dsnet/compress/flate", "NewReader") and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "FlateNewReader" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `compress/flate` package - */ - module CompressFlate { - class TheSink extends Sink { - TheSink() { - exists(Method f | f.hasQualifiedName("compress/flate", "decompressor", "Read") | - this = f.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("compress/flate", ["NewReaderDict", "NewReader"]) and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "FlateNewReader" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/flate` package - */ - module KlauspostFlate { - class TheSink extends Sink { - TheSink() { - exists(Method f | - f.hasQualifiedName("github.com/klauspost/compress/flate", "decompressor", "Read") - | - this = f.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/flate", ["NewReaderDict", "NewReader"]) and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "FlateNewReader" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/zlib` package - */ - module KlauspostZlib { - class TheSink extends Sink { - TheSink() { - exists(Method f | - f.hasQualifiedName("github.com/klauspost/compress/zlib", "reader", "Read") - | - this = f.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/zlib", "NewReader") and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "ZlibNewReader" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `compress/zlib` package - */ - module CompressZlib { - class TheSink extends Sink { - TheSink() { - exists(Method f | f.hasQualifiedName("compress/zlib", "reader", "Read") | - this = f.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("compress/zlib", "NewReader") and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "ZlibNewReader" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `github.com/golang/snappy` package - */ - module GolangSnappy { - class TheSink extends Sink { - TheSink() { - exists(Method f | - f.hasQualifiedName("github.com/golang/snappy", "Reader", ["Read", "ReadByte"]) - | - this = f.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/golang/snappy", "NewReader") and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "SnappyNewReader" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bombs sinks and additional flow steps for `github.com/klauspost/compress/snappy` package - */ - 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" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/s2` package - */ - module KlauspostS2 { - class TheSink extends Sink { - TheSink() { - exists(Method m | - m.hasQualifiedName("github.com/klauspost/compress/s2", "Reader", - ["DecodeConcurrent", "ReadByte", "Read"]) - | - 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/s2", "NewReader") and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "S2NewReader" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks for packages that use some standard IO interfaces/methods for reading decompressed data - */ - module GeneralReadIoSink { - class TheSink extends Sink { - TheSink() { - exists(Function f, DataFlow::CallNode cn | - f.hasQualifiedName("io", "CopyN") and cn = f.getACall() - | - this = cn.getArgument(1) and - // and the return value doesn't flow into a comparison (<, >, <=, >=). - not localStep*(cn.getResult(0), any(DataFlow::RelationalComparisonNode rcn).getAnOperand()) - ) - 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 f | - f.hasQualifiedName("bufio", "Reader", - ["Read", "ReadBytes", "ReadByte", "ReadLine", "ReadRune", "ReadSlice", "ReadString"]) - | - this = f.getACall().getReceiver() - ) - or - exists(Method f | f.hasQualifiedName("bufio", "Scanner", ["Text", "Bytes"]) | - this = f.getACall().getReceiver() - ) - or - exists(Function f | f.hasQualifiedName("io/ioutil", "ReadAll") | - this = f.getACall().getArgument(0) - ) - } - } - - /** - * 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) - } - } + /** Tracks taint flow for reasoning about decompression bomb vulnerabilities. */ + module Flow = TaintTracking::GlobalWithState; } diff --git a/go/ql/src/experimental/frameworks/DecompressionBombsCustomizations.qll b/go/ql/src/experimental/frameworks/DecompressionBombsCustomizations.qll new file mode 100644 index 00000000000..1d70b71df11 --- /dev/null +++ b/go/ql/src/experimental/frameworks/DecompressionBombsCustomizations.qll @@ -0,0 +1,772 @@ +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. + */ + abstract predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode); + + /** + * 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 + */ + 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" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/zstd` package + */ + module KlauspostZstd { + class TheSink extends Sink { + TheSink() { + exists(Method m | + m.hasQualifiedName("github.com/klauspost/compress/zstd", "Decoder", "DecodeAll") + | + this = m.getACall().getReceiver() + ) + or + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/klauspost/compress/zstd", "Decoder", ["WriteTo", "Read"]) 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/zstd", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "ZstdNewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * 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" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * 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 + */ + module UlikunitzXz { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/ulikunitz/xz", "Reader", "Read") 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/ulikunitz/xz", "NewReader") and call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "XzNewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `compress/gzip` package + */ + module CompressGzipBombs { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("compress/gzip", "Reader", "Read") 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("compress/gzip", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "GzipNewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/gzip` package + */ + module KlauspostGzipAndPgzip { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName(["github.com/klauspost/compress/gzip", "github.com/klauspost/pgzip"], + "Reader", ["Read", "WriteTo"]) 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/pgzip", "NewReader") and + call = f.getACall() and + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "PgzipNewReader" + or + 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" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `compress/bzip2` package + */ + module CompressBzip2 { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("compress/bzip2", "reader", "Read") 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("compress/bzip2", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "Bzip2NewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/dsnet/compress/bzip2` package + */ + module DsnetBzip2 { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/dsnet/compress/bzip2", "Reader", "Read") 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/dsnet/compress/bzip2", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "Bzip2NewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/dsnet/compress/flate` package + */ + module DsnetFlate { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/dsnet/compress/flate", "Reader", "Read") 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/dsnet/compress/flate", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "FlateNewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `compress/flate` package + */ + module CompressFlateBombs { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("compress/flate", "decompressor", "Read") 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("compress/flate", ["NewReaderDict", "NewReader"]) and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "FlateNewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/flate` package + */ + module KlauspostFlate { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/klauspost/compress/flate", "decompressor", "Read") 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/flate", ["NewReaderDict", "NewReader"]) and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "FlateNewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/zlib` package + */ + module KlauspostZlib { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/klauspost/compress/zlib", "reader", "Read") 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/zlib", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "ZlibNewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `compress/zlib` package + */ + module CompressZlibBombs { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("compress/zlib", "reader", "Read") 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("compress/zlib", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "ZlibNewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/golang/snappy` package + */ + module GolangSnappy { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/golang/snappy", "Reader", ["Read", "ReadByte"]) 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/golang/snappy", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "SnappyNewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bombs sinks and additional flow steps for `github.com/klauspost/compress/snappy` package + */ + 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" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/s2` package + */ + module KlauspostS2 { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/klauspost/compress/s2", "Reader", + ["DecodeConcurrent", "ReadByte", "Read"]) 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" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks for packages that use some standard IO interfaces/methods for reading decompressed data + */ + module GeneralReadIoSink { + class TheSink extends Sink { + TheSink() { + 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.hasQualifiedName("io", "Reader", "Read") and cn = m.getACall() + | + this = cn.getReceiver() and + not hasFlowToComparison(cn.getResult(0)) + ) + or + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("archive/tar", "Reader", "Read") 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/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.expected new file mode 100644 index 00000000000..4f510d87a9e --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.expected @@ -0,0 +1,3 @@ +testFailures +| test.go:636:31:636:57 | comment | Missing result:hasValueFlow="tarRead" | +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 diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected index ed8d6b05379..ea2f3578b38 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -1,425 +1,432 @@ edges -| test.go:57:15:57:26 | selection of Body | test.go:151:19:151:22 | definition of file | -| test.go:58:16:58:27 | selection of Body | test.go:162:20:162:23 | definition of file | -| test.go:59:16:59:46 | call to FormValue | test.go:121:20:121:27 | definition of filename | -| test.go:62:13:62:24 | selection of Body | test.go:112:17:112:19 | definition of src | -| test.go:63:13:63:24 | selection of Body | test.go:174:17:174:20 | definition of file | -| test.go:64:8:64:19 | selection of Body | test.go:185:12:185:15 | definition of file | -| test.go:65:8:65:19 | selection of Body | test.go:195:12:195:15 | definition of file | -| test.go:66:17:66:28 | selection of Body | test.go:205:21:205:24 | definition of file | -| test.go:67:13:67:24 | selection of Body | test.go:215:17:215:20 | definition of file | -| test.go:68:16:68:27 | selection of Body | test.go:225:20:225:23 | definition of file | -| test.go:69:7:69:18 | selection of Body | test.go:235:11:235:14 | definition of file | -| test.go:70:9:70:20 | selection of Body | test.go:245:13:245:16 | definition of file | -| test.go:71:18:71:29 | selection of Body | test.go:256:22:256:25 | definition of file | -| test.go:72:5:72:16 | selection of Body | test.go:269:9:269:12 | definition of file | -| test.go:73:7:73:18 | selection of Body | test.go:281:11:281:14 | definition of file | -| test.go:74:16:74:27 | selection of Body | test.go:291:20:291:23 | definition of file | -| test.go:75:16:75:27 | selection of Body | test.go:303:20:303:23 | definition of file | -| test.go:76:17:76:28 | selection of Body | test.go:315:21:315:24 | definition of file | -| test.go:77:15:77:26 | selection of Body | test.go:329:19:329:22 | definition of file | -| test.go:78:5:78:16 | selection of Body | test.go:339:9:339:12 | definition of file | -| test.go:112:17:112:19 | definition of src | test.go:113:29:113:31 | src | -| test.go:113:2:113:32 | ... := ...[0] | test.go:117:11:117:26 | type conversion | -| test.go:113:29:113:31 | src | test.go:113:2:113:32 | ... := ...[0] | -| test.go:117:11:117:26 | type conversion | test.go:118:23:118:28 | newSrc | -| test.go:121:20:121:27 | definition of filename | test.go:123:25:123:32 | filename | -| test.go:121:20:121:27 | definition of filename | test.go:136:43:136:50 | filename | -| test.go:123:2:123:33 | ... := ...[0] | test.go:125:12:125:12 | f | -| test.go:123:25:123:32 | filename | test.go:123:2:123:33 | ... := ...[0] | -| test.go:125:3:125:19 | ... := ...[0] | test.go:127:37:127:38 | rc | -| test.go:125:12:125:12 | f | test.go:125:3:125:19 | ... := ...[0] | -| test.go:136:2:136:51 | ... := ...[0] | test.go:137:20:137:29 | implicit dereference | -| test.go:136:43:136:50 | filename | test.go:136:2:136:51 | ... := ...[0] | -| test.go:137:20:137:29 | implicit dereference | test.go:137:20:137:29 | implicit dereference | -| test.go:137:20:137:29 | implicit dereference | test.go:137:20:137:29 | implicit read of field Reader | -| test.go:137:20:137:29 | implicit read of field Reader | test.go:138:12:138:12 | f | -| test.go:138:12:138:12 | f | test.go:138:12:138:19 | call to Open | -| test.go:138:12:138:19 | call to Open | test.go:140:37:140:38 | rc | -| test.go:151:19:151:22 | definition of file | test.go:152:25:152:28 | file | -| test.go:152:2:152:29 | ... := ...[0] | test.go:153:48:153:52 | file1 | -| test.go:152:25:152:28 | file | test.go:152:2:152:29 | ... := ...[0] | -| test.go:153:2:153:69 | ... := ...[0] | test.go:156:26:156:29 | file | -| test.go:153:32:153:53 | call to NewReader | test.go:153:2:153:69 | ... := ...[0] | -| test.go:153:48:153:52 | file1 | test.go:153:32:153:53 | call to NewReader | -| test.go:156:3:156:36 | ... := ...[0] | test.go:157:36:157:51 | fileReaderCloser | -| test.go:156:26:156:29 | file | test.go:156:3:156:36 | ... := ...[0] | -| test.go:162:20:162:23 | definition of file | test.go:163:25:163:28 | file | -| test.go:163:2:163:29 | ... := ...[0] | test.go:164:66:164:70 | file2 | -| test.go:163:25:163:28 | file | test.go:163:2:163:29 | ... := ...[0] | -| test.go:164:2:164:87 | ... := ...[0] | test.go:168:26:168:29 | file | -| test.go:164:50:164:71 | call to NewReader | test.go:164:2:164:87 | ... := ...[0] | -| test.go:164:66:164:70 | file2 | test.go:164:50:164:71 | call to NewReader | -| test.go:168:26:168:29 | file | test.go:168:26:168:36 | call to Open | -| test.go:168:26:168:36 | call to Open | test.go:169:36:169:51 | fileReaderCloser | -| test.go:174:17:174:20 | definition of file | test.go:177:40:177:43 | file | -| test.go:177:2:177:72 | ... := ...[0] | test.go:179:2:179:11 | bzip2dsnet | -| test.go:177:2:177:72 | ... := ...[0] | test.go:180:26:180:35 | bzip2dsnet | -| test.go:177:40:177:43 | file | test.go:177:2:177:72 | ... := ...[0] | -| test.go:180:12:180:36 | call to NewReader | test.go:182:18:182:24 | tarRead | -| test.go:180:26:180:35 | bzip2dsnet | test.go:180:12:180:36 | call to NewReader | -| test.go:182:18:182:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:185:12:185:15 | definition of file | test.go:188:27:188:30 | file | -| test.go:188:11:188:31 | call to NewReader | test.go:190:2:190:6 | Bzip2 | -| test.go:188:11:188:31 | call to NewReader | test.go:191:26:191:30 | Bzip2 | -| test.go:188:27:188:30 | file | test.go:188:11:188:31 | call to NewReader | -| test.go:191:12:191:31 | call to NewReader | test.go:193:18:193:24 | tarRead | -| test.go:191:26:191:30 | Bzip2 | test.go:191:12:191:31 | call to NewReader | -| test.go:193:18:193:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:195:12:195:15 | definition of file | test.go:198:27:198:30 | file | -| test.go:198:11:198:31 | call to NewReader | test.go:200:2:200:6 | Flate | -| test.go:198:11:198:31 | call to NewReader | test.go:201:26:201:30 | Flate | -| test.go:198:27:198:30 | file | test.go:198:11:198:31 | call to NewReader | -| test.go:201:12:201:31 | call to NewReader | test.go:203:18:203:24 | tarRead | -| test.go:201:26:201:30 | Flate | test.go:201:12:201:31 | call to NewReader | -| test.go:203:18:203:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:205:21:205:24 | definition of file | test.go:208:44:208:47 | file | -| test.go:208:19:208:48 | call to NewReader | test.go:210:2:210:14 | zlibklauspost | -| test.go:208:19:208:48 | call to NewReader | test.go:211:26:211:38 | zlibklauspost | -| test.go:208:44:208:47 | file | test.go:208:19:208:48 | call to NewReader | -| test.go:211:12:211:39 | call to NewReader | test.go:213:18:213:24 | tarRead | -| test.go:211:26:211:38 | zlibklauspost | test.go:211:12:211:39 | call to NewReader | -| test.go:213:18:213:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:215:17:215:20 | definition of file | test.go:218:40:218:43 | file | -| test.go:218:2:218:72 | ... := ...[0] | test.go:220:2:220:11 | flatedsnet | -| test.go:218:2:218:72 | ... := ...[0] | test.go:221:26:221:35 | flatedsnet | -| test.go:218:40:218:43 | file | test.go:218:2:218:72 | ... := ...[0] | -| test.go:221:12:221:36 | call to NewReader | test.go:223:18:223:24 | tarRead | -| test.go:221:26:221:35 | flatedsnet | test.go:221:12:221:36 | call to NewReader | -| test.go:223:18:223:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:225:20:225:23 | definition of file | test.go:228:46:228:49 | file | -| test.go:228:2:228:50 | ... := ...[0] | test.go:230:2:230:14 | zlibklauspost | -| test.go:228:2:228:50 | ... := ...[0] | test.go:231:26:231:38 | zlibklauspost | -| test.go:228:46:228:49 | file | test.go:228:2:228:50 | ... := ...[0] | -| test.go:231:12:231:39 | call to NewReader | test.go:233:18:233:24 | tarRead | -| test.go:231:26:231:38 | zlibklauspost | test.go:231:12:231:39 | call to NewReader | -| test.go:233:18:233:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:235:11:235:14 | definition of file | test.go:238:28:238:31 | file | -| test.go:238:2:238:32 | ... := ...[0] | test.go:240:2:240:5 | Zlib | -| test.go:238:2:238:32 | ... := ...[0] | test.go:241:26:241:29 | Zlib | -| test.go:238:28:238:31 | file | test.go:238:2:238:32 | ... := ...[0] | -| test.go:241:12:241:30 | call to NewReader | test.go:243:18:243:24 | tarRead | -| test.go:241:26:241:29 | Zlib | test.go:241:12:241:30 | call to NewReader | -| test.go:243:18:243:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:245:13:245:16 | definition of file | test.go:248:29:248:32 | file | -| test.go:248:12:248:33 | call to NewReader | test.go:250:2:250:7 | Snappy | -| test.go:248:12:248:33 | call to NewReader | test.go:251:2:251:7 | Snappy | -| test.go:248:12:248:33 | call to NewReader | test.go:252:26:252:31 | Snappy | -| test.go:248:29:248:32 | file | test.go:248:12:248:33 | call to NewReader | -| test.go:252:12:252:32 | call to NewReader | test.go:254:18:254:24 | tarRead | -| test.go:252:26:252:31 | Snappy | test.go:252:12:252:32 | call to NewReader | -| test.go:254:18:254:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:256:22:256:25 | definition of file | test.go:259:47:259:50 | file | -| test.go:259:21:259:51 | call to NewReader | test.go:261:2:261:16 | snappyklauspost | -| test.go:259:21:259:51 | call to NewReader | test.go:263:2:263:16 | snappyklauspost | -| test.go:259:21:259:51 | call to NewReader | test.go:264:2:264:16 | snappyklauspost | -| test.go:259:21:259:51 | call to NewReader | test.go:265:26:265:40 | snappyklauspost | -| test.go:259:47:259:50 | file | test.go:259:21:259:51 | call to NewReader | -| test.go:265:12:265:41 | call to NewReader | test.go:267:18:267:24 | tarRead | -| test.go:265:26:265:40 | snappyklauspost | test.go:265:12:265:41 | call to NewReader | -| test.go:267:18:267:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:269:9:269:12 | definition of file | test.go:272:21:272:24 | file | -| test.go:272:8:272:25 | call to NewReader | test.go:274:2:274:3 | S2 | -| test.go:272:8:272:25 | call to NewReader | test.go:276:2:276:3 | S2 | -| test.go:272:8:272:25 | call to NewReader | test.go:277:26:277:27 | S2 | -| test.go:272:21:272:24 | file | test.go:272:8:272:25 | call to NewReader | -| test.go:277:12:277:28 | call to NewReader | test.go:279:18:279:24 | tarRead | -| test.go:277:26:277:27 | S2 | test.go:277:12:277:28 | call to NewReader | -| test.go:279:18:279:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:281:11:281:14 | definition of file | test.go:284:32:284:35 | file | -| test.go:284:2:284:36 | ... := ...[0] | test.go:286:2:286:9 | gzipRead | -| test.go:284:2:284:36 | ... := ...[0] | test.go:287:26:287:33 | gzipRead | -| test.go:284:32:284:35 | file | test.go:284:2:284:36 | ... := ...[0] | -| test.go:287:12:287:34 | call to NewReader | test.go:289:18:289:24 | tarRead | -| test.go:287:26:287:33 | gzipRead | test.go:287:12:287:34 | call to NewReader | -| test.go:289:18:289:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:291:20:291:23 | definition of file | test.go:294:46:294:49 | file | -| test.go:294:2:294:50 | ... := ...[0] | test.go:296:2:296:14 | gzipklauspost | -| test.go:294:2:294:50 | ... := ...[0] | test.go:298:2:298:14 | gzipklauspost | -| test.go:294:2:294:50 | ... := ...[0] | test.go:299:26:299:38 | gzipklauspost | -| test.go:294:46:294:49 | file | test.go:294:2:294:50 | ... := ...[0] | -| test.go:299:12:299:39 | call to NewReader | test.go:301:18:301:24 | tarRead | -| test.go:299:26:299:38 | gzipklauspost | test.go:299:12:299:39 | call to NewReader | -| test.go:301:18:301:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:303:20:303:23 | definition of file | test.go:306:44:306:47 | file | -| test.go:306:2:306:48 | ... := ...[0] | test.go:308:2:308:11 | pgzippgzip | -| test.go:306:2:306:48 | ... := ...[0] | test.go:310:2:310:11 | pgzippgzip | -| test.go:306:2:306:48 | ... := ...[0] | test.go:311:26:311:35 | pgzippgzip | -| test.go:306:44:306:47 | file | test.go:306:2:306:48 | ... := ...[0] | -| test.go:311:12:311:36 | call to NewReader | test.go:313:18:313:24 | tarRead | -| test.go:311:26:311:35 | pgzippgzip | test.go:311:12:311:36 | call to NewReader | -| test.go:313:18:313:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:315:21:315:24 | definition of file | test.go:318:37:318:40 | file | -| test.go:318:2:318:41 | ... := ...[0] | test.go:320:2:320:5 | zstd | -| test.go:318:2:318:41 | ... := ...[0] | test.go:322:2:322:5 | zstd | -| test.go:318:2:318:41 | ... := ...[0] | test.go:324:2:324:5 | zstd | -| test.go:318:2:318:41 | ... := ...[0] | test.go:325:26:325:29 | zstd | -| test.go:318:37:318:40 | file | test.go:318:2:318:41 | ... := ...[0] | -| test.go:325:12:325:30 | call to NewReader | test.go:327:18:327:24 | tarRead | -| test.go:325:26:325:29 | zstd | test.go:325:12:325:30 | call to NewReader | -| test.go:327:18:327:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:329:19:329:22 | definition of file | test.go:332:32:332:35 | file | -| test.go:332:10:332:36 | call to NewReader | test.go:334:2:334:5 | zstd | -| test.go:332:10:332:36 | call to NewReader | test.go:335:26:335:29 | zstd | -| test.go:332:32:332:35 | file | test.go:332:10:332:36 | call to NewReader | -| test.go:335:12:335:30 | call to NewReader | test.go:337:18:337:24 | tarRead | -| test.go:335:26:335:29 | zstd | test.go:335:12:335:30 | call to NewReader | -| test.go:337:18:337:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:339:9:339:12 | definition of file | test.go:342:28:342:31 | file | -| test.go:342:2:342:32 | ... := ...[0] | test.go:344:2:344:7 | xzRead | -| test.go:342:2:342:32 | ... := ...[0] | test.go:345:26:345:31 | xzRead | -| test.go:342:28:342:31 | file | test.go:342:2:342:32 | ... := ...[0] | -| test.go:345:12:345:32 | call to NewReader | test.go:347:18:347:24 | tarRead | -| test.go:345:26:345:31 | xzRead | test.go:345:12:345:32 | call to NewReader | -| test.go:347:18:347:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | +| test.go:57:15:57:26 | selection of Body | test.go:159:19:159:22 | definition of file | +| test.go:58:24:58:35 | selection of Body | test.go:170:28:170:31 | definition of file | +| test.go:59:16:59:46 | call to FormValue | test.go:129:20:129:27 | definition of filename | +| test.go:60:13:60:24 | selection of Body | test.go:182:17:182:20 | definition of file | +| test.go:61:8:61:19 | selection of Body | test.go:209:12:209:15 | definition of file | +| test.go:62:8:62:19 | selection of Body | test.go:234:12:234:15 | definition of file | +| test.go:63:17:63:28 | selection of Body | test.go:259:21:259:24 | definition of file | +| test.go:64:13:64:24 | selection of Body | test.go:284:17:284:20 | definition of file | +| test.go:65:16:65:27 | selection of Body | test.go:309:20:309:23 | definition of file | +| test.go:66:7:66:18 | selection of Body | test.go:334:11:334:14 | definition of file | +| test.go:67:9:67:20 | selection of Body | test.go:359:13:359:16 | definition of file | +| test.go:68:18:68:29 | selection of Body | test.go:385:22:385:25 | definition of file | +| test.go:69:5:69:16 | selection of Body | test.go:413:9:413:12 | definition of file | +| test.go:70:7:70:18 | selection of Body | test.go:447:11:447:14 | definition of file | +| test.go:71:15:71:26 | selection of Body | test.go:440:19:440:21 | definition of src | +| test.go:72:16:72:27 | selection of Body | test.go:472:20:472:23 | definition of file | +| test.go:73:16:73:27 | selection of Body | test.go:499:20:499:23 | definition of file | +| test.go:74:17:74:28 | selection of Body | test.go:526:21:526:24 | definition of file | +| test.go:75:15:75:26 | selection of Body | test.go:555:19:555:22 | definition of file | +| test.go:76:5:76:16 | selection of Body | test.go:580:9:580:12 | definition of file | +| test.go:129:20:129:27 | definition of filename | test.go:131:33:131:40 | filename | +| test.go:129:20:129:27 | definition of filename | test.go:144:51:144:58 | filename | +| test.go:131:2:131:41 | ... := ...[0] | test.go:133:12:133:12 | f | +| test.go:131:33:131:40 | filename | test.go:131:2:131:41 | ... := ...[0] | +| test.go:133:3:133:19 | ... := ...[0] | test.go:135:37:135:38 | rc | +| test.go:133:12:133:12 | f | test.go:133:3:133:19 | ... := ...[0] | +| test.go:144:2:144:59 | ... := ...[0] | test.go:145:20:145:37 | implicit dereference | +| test.go:144:51:144:58 | filename | test.go:144:2:144:59 | ... := ...[0] | +| test.go:145:20:145:37 | implicit dereference | test.go:145:20:145:37 | implicit dereference | +| test.go:145:20:145:37 | implicit dereference | test.go:145:20:145:37 | implicit read of field Reader | +| test.go:145:20:145:37 | implicit read of field Reader | test.go:146:12:146:12 | f | +| test.go:146:12:146:12 | f | test.go:146:12:146:19 | call to Open | +| test.go:146:12:146:19 | call to Open | test.go:148:37:148:38 | rc | +| test.go:159:19:159:22 | definition of file | test.go:160:25:160:28 | file | +| test.go:160:2:160:29 | ... := ...[0] | test.go:161:48:161:52 | file1 | +| test.go:160:25:160:28 | file | test.go:160:2:160:29 | ... := ...[0] | +| test.go:161:2:161:69 | ... := ...[0] | test.go:164:26:164:29 | file | +| test.go:161:32:161:53 | call to NewReader | test.go:161:2:161:69 | ... := ...[0] | +| test.go:161:48:161:52 | file1 | test.go:161:32:161:53 | call to NewReader | +| test.go:164:3:164:36 | ... := ...[0] | test.go:165:36:165:51 | fileReaderCloser | +| test.go:164:26:164:29 | file | test.go:164:3:164:36 | ... := ...[0] | +| test.go:170:28:170:31 | definition of file | test.go:171:25:171:28 | file | +| test.go:171:2:171:29 | ... := ...[0] | test.go:172:57:172:61 | file2 | +| test.go:171:25:171:28 | file | test.go:171:2:171:29 | ... := ...[0] | +| test.go:172:2:172:78 | ... := ...[0] | test.go:176:26:176:29 | file | +| test.go:172:41:172:62 | call to NewReader | test.go:172:2:172:78 | ... := ...[0] | +| test.go:172:57:172:61 | file2 | test.go:172:41:172:62 | call to NewReader | +| test.go:176:26:176:29 | file | test.go:176:26:176:36 | call to Open | +| test.go:176:26:176:36 | call to Open | test.go:177:36:177:51 | fileReaderCloser | +| test.go:182:17:182:20 | definition of file | test.go:185:41:185:44 | file | +| test.go:185:2:185:73 | ... := ...[0] | test.go:187:2:187:12 | bzip2Reader | +| test.go:185:2:185:73 | ... := ...[0] | test.go:188:26:188:36 | bzip2Reader | +| test.go:185:41:185:44 | file | test.go:185:2:185:73 | ... := ...[0] | +| test.go:188:12:188:37 | call to NewReader | test.go:190:18:190:24 | tarRead | +| test.go:188:26:188:36 | bzip2Reader | test.go:188:12:188:37 | call to NewReader | +| test.go:190:18:190:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:209:12:209:15 | definition of file | test.go:212:33:212:36 | file | +| test.go:212:17:212:37 | call to NewReader | test.go:214:2:214:12 | bzip2Reader | +| test.go:212:17:212:37 | call to NewReader | test.go:215:26:215:36 | bzip2Reader | +| test.go:212:33:212:36 | file | test.go:212:17:212:37 | call to NewReader | +| test.go:215:12:215:37 | call to NewReader | test.go:217:18:217:24 | tarRead | +| test.go:215:26:215:36 | bzip2Reader | test.go:215:12:215:37 | call to NewReader | +| test.go:217:18:217:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:234:12:234:15 | definition of file | test.go:237:33:237:36 | file | +| test.go:237:17:237:37 | call to NewReader | test.go:239:2:239:12 | flateReader | +| test.go:237:17:237:37 | call to NewReader | test.go:240:26:240:36 | flateReader | +| test.go:237:33:237:36 | file | test.go:237:17:237:37 | call to NewReader | +| test.go:240:12:240:37 | call to NewReader | test.go:242:18:242:24 | tarRead | +| test.go:240:26:240:36 | flateReader | test.go:240:12:240:37 | call to NewReader | +| test.go:242:18:242:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:259:21:259:24 | definition of file | test.go:262:42:262:45 | file | +| test.go:262:17:262:46 | call to NewReader | test.go:264:2:264:12 | flateReader | +| test.go:262:17:262:46 | call to NewReader | test.go:265:26:265:36 | flateReader | +| test.go:262:42:262:45 | file | test.go:262:17:262:46 | call to NewReader | +| test.go:265:12:265:37 | call to NewReader | test.go:267:18:267:24 | tarRead | +| test.go:265:26:265:36 | flateReader | test.go:265:12:265:37 | call to NewReader | +| test.go:267:18:267:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:284:17:284:20 | definition of file | test.go:287:41:287:44 | file | +| test.go:287:2:287:73 | ... := ...[0] | test.go:289:2:289:12 | flateReader | +| test.go:287:2:287:73 | ... := ...[0] | test.go:290:26:290:36 | flateReader | +| test.go:287:41:287:44 | file | test.go:287:2:287:73 | ... := ...[0] | +| test.go:290:12:290:37 | call to NewReader | test.go:292:18:292:24 | tarRead | +| test.go:290:26:290:36 | flateReader | test.go:290:12:290:37 | call to NewReader | +| test.go:292:18:292:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:309:20:309:23 | definition of file | test.go:312:43:312:46 | file | +| test.go:312:2:312:47 | ... := ...[0] | test.go:314:2:314:11 | zlibReader | +| test.go:312:2:312:47 | ... := ...[0] | test.go:315:26:315:35 | zlibReader | +| test.go:312:43:312:46 | file | test.go:312:2:312:47 | ... := ...[0] | +| test.go:315:12:315:36 | call to NewReader | test.go:317:18:317:24 | tarRead | +| test.go:315:26:315:35 | zlibReader | test.go:315:12:315:36 | call to NewReader | +| test.go:317:18:317:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:334:11:334:14 | definition of file | test.go:337:34:337:37 | file | +| test.go:337:2:337:38 | ... := ...[0] | test.go:339:2:339:11 | zlibReader | +| test.go:337:2:337:38 | ... := ...[0] | test.go:340:26:340:35 | zlibReader | +| test.go:337:34:337:37 | file | test.go:337:2:337:38 | ... := ...[0] | +| test.go:340:12:340:36 | call to NewReader | test.go:342:18:342:24 | tarRead | +| test.go:340:26:340:35 | zlibReader | test.go:340:12:340:36 | call to NewReader | +| test.go:342:18:342:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:359:13:359:16 | definition of file | test.go:362:35:362:38 | file | +| test.go:362:18:362:39 | call to NewReader | test.go:364:2:364:13 | snappyReader | +| test.go:362:18:362:39 | call to NewReader | test.go:365:2:365:13 | snappyReader | +| test.go:362:18:362:39 | call to NewReader | test.go:366:26:366:37 | snappyReader | +| test.go:362:35:362:38 | file | test.go:362:18:362:39 | call to NewReader | +| test.go:366:12:366:38 | call to NewReader | test.go:368:18:368:24 | tarRead | +| test.go:366:26:366:37 | snappyReader | test.go:366:12:366:38 | call to NewReader | +| test.go:368:18:368:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:385:22:385:25 | definition of file | test.go:388:44:388:47 | file | +| test.go:388:18:388:48 | call to NewReader | test.go:390:2:390:13 | snappyReader | +| test.go:388:18:388:48 | call to NewReader | test.go:392:2:392:13 | snappyReader | +| test.go:388:18:388:48 | call to NewReader | test.go:393:2:393:13 | snappyReader | +| test.go:388:18:388:48 | call to NewReader | test.go:394:26:394:37 | snappyReader | +| test.go:388:44:388:47 | file | test.go:388:18:388:48 | call to NewReader | +| test.go:394:12:394:38 | call to NewReader | test.go:396:18:396:24 | tarRead | +| test.go:394:26:394:37 | snappyReader | test.go:394:12:394:38 | call to NewReader | +| test.go:396:18:396:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:413:9:413:12 | definition of file | test.go:416:27:416:30 | file | +| test.go:416:14:416:31 | call to NewReader | test.go:418:2:418:9 | s2Reader | +| test.go:416:14:416:31 | call to NewReader | test.go:420:2:420:9 | s2Reader | +| test.go:416:14:416:31 | call to NewReader | test.go:421:26:421:33 | s2Reader | +| test.go:416:27:416:30 | file | test.go:416:14:416:31 | call to NewReader | +| test.go:421:12:421:34 | call to NewReader | test.go:423:18:423:24 | tarRead | +| test.go:421:26:421:33 | s2Reader | test.go:421:12:421:34 | call to NewReader | +| test.go:423:18:423:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:440:19:440:21 | definition of src | test.go:441:34:441:36 | src | +| test.go:441:2:441:37 | ... := ...[0] | test.go:444:12:444:32 | type conversion | +| test.go:441:34:441:36 | src | test.go:441:2:441:37 | ... := ...[0] | +| test.go:444:12:444:32 | type conversion | test.go:445:23:445:28 | newSrc | +| test.go:447:11:447:14 | definition of file | test.go:450:34:450:37 | file | +| test.go:450:2:450:38 | ... := ...[0] | test.go:452:2:452:11 | gzipReader | +| test.go:450:2:450:38 | ... := ...[0] | test.go:453:26:453:35 | gzipReader | +| test.go:450:34:450:37 | file | test.go:450:2:450:38 | ... := ...[0] | +| test.go:453:12:453:36 | call to NewReader | test.go:455:18:455:24 | tarRead | +| test.go:453:26:453:35 | gzipReader | test.go:453:12:453:36 | call to NewReader | +| test.go:455:18:455:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:472:20:472:23 | definition of file | test.go:475:43:475:46 | file | +| test.go:475:2:475:47 | ... := ...[0] | test.go:477:2:477:11 | gzipReader | +| test.go:475:2:475:47 | ... := ...[0] | test.go:479:2:479:11 | gzipReader | +| test.go:475:2:475:47 | ... := ...[0] | test.go:480:26:480:35 | gzipReader | +| test.go:475:43:475:46 | file | test.go:475:2:475:47 | ... := ...[0] | +| test.go:480:12:480:36 | call to NewReader | test.go:482:18:482:24 | tarRead | +| test.go:480:26:480:35 | gzipReader | test.go:480:12:480:36 | call to NewReader | +| test.go:482:18:482:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:499:20:499:23 | definition of file | test.go:502:45:502:48 | file | +| test.go:502:2:502:49 | ... := ...[0] | test.go:504:2:504:12 | pgzipReader | +| test.go:502:2:502:49 | ... := ...[0] | test.go:506:2:506:12 | pgzipReader | +| test.go:502:2:502:49 | ... := ...[0] | test.go:507:26:507:36 | pgzipReader | +| test.go:502:45:502:48 | file | test.go:502:2:502:49 | ... := ...[0] | +| test.go:507:12:507:37 | call to NewReader | test.go:509:18:509:24 | tarRead | +| test.go:507:26:507:36 | pgzipReader | test.go:507:12:507:37 | call to NewReader | +| test.go:509:18:509:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:526:21:526:24 | definition of file | test.go:529:43:529:46 | file | +| test.go:529:2:529:47 | ... := ...[0] | test.go:531:2:531:11 | zstdReader | +| test.go:529:2:529:47 | ... := ...[0] | test.go:533:2:533:11 | zstdReader | +| test.go:529:2:529:47 | ... := ...[0] | test.go:535:2:535:11 | zstdReader | +| test.go:529:2:529:47 | ... := ...[0] | test.go:536:26:536:35 | zstdReader | +| test.go:529:43:529:46 | file | test.go:529:2:529:47 | ... := ...[0] | +| test.go:536:12:536:36 | call to NewReader | test.go:538:18:538:24 | tarRead | +| test.go:536:26:536:35 | zstdReader | test.go:536:12:536:36 | call to NewReader | +| test.go:538:18:538:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:555:19:555:22 | definition of file | test.go:558:38:558:41 | file | +| test.go:558:16:558:42 | call to NewReader | test.go:560:2:560:11 | zstdReader | +| test.go:558:16:558:42 | call to NewReader | test.go:561:26:561:35 | zstdReader | +| test.go:558:38:558:41 | file | test.go:558:16:558:42 | call to NewReader | +| test.go:561:12:561:36 | call to NewReader | test.go:563:18:563:24 | tarRead | +| test.go:561:26:561:35 | zstdReader | test.go:561:12:561:36 | call to NewReader | +| test.go:563:18:563:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:580:9:580:12 | definition of file | test.go:583:30:583:33 | file | +| test.go:583:2:583:34 | ... := ...[0] | test.go:585:2:585:9 | xzReader | +| test.go:583:2:583:34 | ... := ...[0] | test.go:586:26:586:33 | xzReader | +| test.go:583:30:583:33 | file | test.go:583:2:583:34 | ... := ...[0] | +| test.go:586:12:586:34 | call to NewReader | test.go:589:18:589:24 | tarRead | +| test.go:586:12:586:34 | call to NewReader | test.go:590:19:590:25 | tarRead | +| test.go:586:26:586:33 | xzReader | test.go:586:12:586:34 | call to NewReader | +| test.go:589:18:589:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:590:19:590:25 | tarRead | test.go:627:23:627:29 | definition of tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:627:23:627:29 | definition of tarRead | test.go:629:2:629:8 | tarRead | nodes | test.go:57:15:57:26 | selection of Body | semmle.label | selection of Body | -| test.go:58:16:58:27 | selection of Body | semmle.label | selection of Body | +| test.go:58:24:58:35 | selection of Body | semmle.label | selection of Body | | test.go:59:16:59:46 | call to FormValue | semmle.label | call to FormValue | -| test.go:62:13:62:24 | selection of Body | semmle.label | selection of Body | -| test.go:63:13:63: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:65:8:65:19 | selection of Body | semmle.label | selection of Body | -| test.go:66:17:66:28 | selection of Body | semmle.label | selection of Body | -| test.go:67:13:67:24 | selection of Body | semmle.label | selection of Body | -| test.go:68:16:68:27 | selection of Body | semmle.label | selection of Body | -| test.go:69:7:69:18 | selection of Body | semmle.label | selection of Body | -| test.go:70:9:70:20 | selection of Body | semmle.label | selection of Body | -| test.go:71:18:71:29 | selection of Body | semmle.label | selection of Body | -| test.go:72:5:72:16 | selection of Body | semmle.label | selection of Body | -| test.go:73:7:73:18 | selection of Body | semmle.label | selection of Body | -| test.go:74:16:74:27 | selection of Body | semmle.label | selection of Body | -| test.go:75:16:75:27 | selection of Body | semmle.label | selection of Body | -| test.go:76:17:76:28 | selection of Body | semmle.label | selection of Body | -| test.go:77:15:77:26 | selection of Body | semmle.label | selection of Body | -| test.go:78:5:78:16 | selection of Body | semmle.label | selection of Body | -| test.go:112:17:112:19 | definition of src | semmle.label | definition of src | -| test.go:113:2:113:32 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:113:29:113:31 | src | semmle.label | src | -| test.go:117:11:117:26 | type conversion | semmle.label | type conversion | -| test.go:118:23:118:28 | newSrc | semmle.label | newSrc | -| test.go:121:20:121:27 | definition of filename | semmle.label | definition of filename | -| test.go:123:2:123:33 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:123:25:123:32 | filename | semmle.label | filename | -| test.go:125:3:125:19 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:125:12:125:12 | f | semmle.label | f | -| test.go:127:37:127:38 | rc | semmle.label | rc | -| test.go:136:2:136:51 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:136:43:136:50 | filename | semmle.label | filename | -| test.go:137:20:137:29 | implicit dereference | semmle.label | implicit dereference | -| test.go:137:20:137:29 | implicit read of field Reader | semmle.label | implicit read of field Reader | -| test.go:138:12:138:12 | f | semmle.label | f | -| test.go:138:12:138:19 | call to Open | semmle.label | call to Open | -| test.go:140:37:140:38 | rc | semmle.label | rc | -| test.go:151:19:151:22 | definition of file | semmle.label | definition of file | -| test.go:152:2:152:29 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:152:25:152:28 | file | semmle.label | file | -| test.go:153:2:153:69 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:153:32:153:53 | call to NewReader | semmle.label | call to NewReader | -| test.go:153:48:153:52 | file1 | semmle.label | file1 | -| test.go:156:3:156:36 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:156:26:156:29 | file | semmle.label | file | -| test.go:157:36:157:51 | fileReaderCloser | semmle.label | fileReaderCloser | -| test.go:162:20:162:23 | definition of file | semmle.label | definition of file | -| test.go:163:2:163:29 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:163:25:163:28 | file | semmle.label | file | -| test.go:164:2:164:87 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:164:50:164:71 | call to NewReader | semmle.label | call to NewReader | -| test.go:164:66:164:70 | file2 | semmle.label | file2 | -| test.go:168:26:168:29 | file | semmle.label | file | -| test.go:168:26:168:36 | call to Open | semmle.label | call to Open | -| test.go:169:36:169:51 | fileReaderCloser | semmle.label | fileReaderCloser | -| test.go:174:17:174:20 | definition of file | semmle.label | definition of file | -| test.go:177:2:177:72 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:177:40:177:43 | file | semmle.label | file | -| test.go:179:2:179:11 | bzip2dsnet | semmle.label | bzip2dsnet | -| test.go:180:12:180:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:180:26:180:35 | bzip2dsnet | semmle.label | bzip2dsnet | -| test.go:182:18:182:24 | tarRead | semmle.label | tarRead | -| test.go:185:12:185:15 | definition of file | semmle.label | definition of file | -| test.go:188:11:188:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:188:27:188:30 | file | semmle.label | file | -| test.go:190:2:190:6 | Bzip2 | semmle.label | Bzip2 | -| test.go:191:12:191:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:191:26:191:30 | Bzip2 | semmle.label | Bzip2 | -| test.go:193:18:193:24 | tarRead | semmle.label | tarRead | -| test.go:195:12:195:15 | definition of file | semmle.label | definition of file | -| test.go:198:11:198:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:198:27:198:30 | file | semmle.label | file | -| test.go:200:2:200:6 | Flate | semmle.label | Flate | -| test.go:201:12:201:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:201:26:201:30 | Flate | semmle.label | Flate | -| test.go:203:18:203:24 | tarRead | semmle.label | tarRead | -| test.go:205:21:205:24 | definition of file | semmle.label | definition of file | -| test.go:208:19:208:48 | call to NewReader | semmle.label | call to NewReader | -| test.go:208:44:208:47 | file | semmle.label | file | -| test.go:210:2:210:14 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:211:12:211:39 | call to NewReader | semmle.label | call to NewReader | -| test.go:211:26:211:38 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:213:18:213:24 | tarRead | semmle.label | tarRead | -| test.go:215:17:215:20 | definition of file | semmle.label | definition of file | -| test.go:218:2:218:72 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:218:40:218:43 | file | semmle.label | file | -| test.go:220:2:220:11 | flatedsnet | semmle.label | flatedsnet | -| test.go:221:12:221:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:221:26:221:35 | flatedsnet | semmle.label | flatedsnet | -| test.go:223:18:223:24 | tarRead | semmle.label | tarRead | -| test.go:225:20:225:23 | definition of file | semmle.label | definition of file | -| test.go:228:2:228:50 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:228:46:228:49 | file | semmle.label | file | -| test.go:230:2:230:14 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:231:12:231:39 | call to NewReader | semmle.label | call to NewReader | -| test.go:231:26:231:38 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:233:18:233:24 | tarRead | semmle.label | tarRead | -| test.go:235:11:235:14 | definition of file | semmle.label | definition of file | -| test.go:238:2:238:32 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:238:28:238:31 | file | semmle.label | file | -| test.go:240:2:240:5 | Zlib | semmle.label | Zlib | -| test.go:241:12:241:30 | call to NewReader | semmle.label | call to NewReader | -| test.go:241:26:241:29 | Zlib | semmle.label | Zlib | -| test.go:243:18:243:24 | tarRead | semmle.label | tarRead | -| test.go:245:13:245:16 | definition of file | semmle.label | definition of file | -| test.go:248:12:248:33 | call to NewReader | semmle.label | call to NewReader | -| test.go:248:29:248:32 | file | semmle.label | file | -| test.go:250:2:250:7 | Snappy | semmle.label | Snappy | -| test.go:251:2:251:7 | Snappy | semmle.label | Snappy | -| test.go:252:12:252:32 | call to NewReader | semmle.label | call to NewReader | -| test.go:252:26:252:31 | Snappy | semmle.label | Snappy | -| test.go:254:18:254:24 | tarRead | semmle.label | tarRead | -| test.go:256:22:256:25 | definition of file | semmle.label | definition of file | -| test.go:259:21:259:51 | call to NewReader | semmle.label | call to NewReader | -| test.go:259:47:259:50 | file | semmle.label | file | -| test.go:261:2:261:16 | snappyklauspost | semmle.label | snappyklauspost | -| test.go:263:2:263:16 | snappyklauspost | semmle.label | snappyklauspost | -| test.go:264:2:264:16 | snappyklauspost | semmle.label | snappyklauspost | -| test.go:265:12:265:41 | call to NewReader | semmle.label | call to NewReader | -| test.go:265:26:265:40 | snappyklauspost | semmle.label | snappyklauspost | +| test.go:60:13:60:24 | selection of Body | semmle.label | selection of Body | +| test.go:61:8:61:19 | selection of Body | semmle.label | selection of Body | +| test.go:62:8:62:19 | selection of Body | semmle.label | selection of Body | +| test.go:63:17:63:28 | selection of Body | semmle.label | selection of Body | +| test.go:64:13:64:24 | selection of Body | semmle.label | selection of Body | +| test.go:65:16:65:27 | selection of Body | semmle.label | selection of Body | +| test.go:66:7:66:18 | selection of Body | semmle.label | selection of Body | +| test.go:67:9:67:20 | selection of Body | semmle.label | selection of Body | +| test.go:68:18:68:29 | selection of Body | semmle.label | selection of Body | +| test.go:69:5:69:16 | selection of Body | semmle.label | selection of Body | +| test.go:70:7:70:18 | selection of Body | semmle.label | selection of Body | +| test.go:71:15:71:26 | selection of Body | semmle.label | selection of Body | +| test.go:72:16:72:27 | selection of Body | semmle.label | selection of Body | +| test.go:73:16:73:27 | selection of Body | semmle.label | selection of Body | +| test.go:74:17:74:28 | selection of Body | semmle.label | selection of Body | +| test.go:75:15:75:26 | selection of Body | semmle.label | selection of Body | +| test.go:76:5:76:16 | selection of Body | semmle.label | selection of Body | +| test.go:129:20:129:27 | definition of filename | semmle.label | definition of filename | +| test.go:131:2:131:41 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:131:33:131:40 | filename | semmle.label | filename | +| test.go:133:3:133:19 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:133:12:133:12 | f | semmle.label | f | +| test.go:135:37:135:38 | rc | semmle.label | rc | +| test.go:144:2:144:59 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:144:51:144:58 | filename | semmle.label | filename | +| test.go:145:20:145:37 | implicit dereference | semmle.label | implicit dereference | +| test.go:145:20:145:37 | implicit read of field Reader | semmle.label | implicit read of field Reader | +| test.go:146:12:146:12 | f | semmle.label | f | +| test.go:146:12:146:19 | call to Open | semmle.label | call to Open | +| test.go:148:37:148:38 | rc | semmle.label | rc | +| test.go:159:19:159:22 | definition of file | semmle.label | definition of file | +| test.go:160:2:160:29 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:160:25:160:28 | file | semmle.label | file | +| test.go:161:2:161:69 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:161:32:161:53 | call to NewReader | semmle.label | call to NewReader | +| test.go:161:48:161:52 | file1 | semmle.label | file1 | +| test.go:164:3:164:36 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:164:26:164:29 | file | semmle.label | file | +| test.go:165:36:165:51 | fileReaderCloser | semmle.label | fileReaderCloser | +| test.go:170:28:170:31 | definition of file | semmle.label | definition of file | +| test.go:171:2:171:29 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:171:25:171:28 | file | semmle.label | file | +| test.go:172:2:172:78 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:172:41:172:62 | call to NewReader | semmle.label | call to NewReader | +| test.go:172:57:172:61 | file2 | semmle.label | file2 | +| test.go:176:26:176:29 | file | semmle.label | file | +| test.go:176:26:176:36 | call to Open | semmle.label | call to Open | +| test.go:177:36:177:51 | fileReaderCloser | semmle.label | fileReaderCloser | +| test.go:182:17:182:20 | definition of file | semmle.label | definition of file | +| test.go:185:2:185:73 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:185:41:185:44 | file | semmle.label | file | +| test.go:187:2:187:12 | bzip2Reader | semmle.label | bzip2Reader | +| test.go:188:12:188:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:188:26:188:36 | bzip2Reader | semmle.label | bzip2Reader | +| test.go:190:18:190:24 | tarRead | semmle.label | tarRead | +| test.go:209:12:209:15 | definition of file | semmle.label | definition of file | +| test.go:212:17:212:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:212:33:212:36 | file | semmle.label | file | +| test.go:214:2:214:12 | bzip2Reader | semmle.label | bzip2Reader | +| test.go:215:12:215:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:215:26:215:36 | bzip2Reader | semmle.label | bzip2Reader | +| test.go:217:18:217:24 | tarRead | semmle.label | tarRead | +| test.go:234:12:234:15 | definition of file | semmle.label | definition of file | +| test.go:237:17:237:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:237:33:237:36 | file | semmle.label | file | +| test.go:239:2:239:12 | flateReader | semmle.label | flateReader | +| test.go:240:12:240:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:240:26:240:36 | flateReader | semmle.label | flateReader | +| test.go:242:18:242:24 | tarRead | semmle.label | tarRead | +| test.go:259:21:259:24 | definition of file | semmle.label | definition of file | +| test.go:262:17:262:46 | call to NewReader | semmle.label | call to NewReader | +| test.go:262:42:262:45 | file | semmle.label | file | +| test.go:264:2:264:12 | flateReader | semmle.label | flateReader | +| test.go:265:12:265:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:265:26:265:36 | flateReader | semmle.label | flateReader | | test.go:267:18:267:24 | tarRead | semmle.label | tarRead | -| test.go:269:9:269:12 | definition of file | semmle.label | definition of file | -| test.go:272:8:272:25 | call to NewReader | semmle.label | call to NewReader | -| test.go:272:21:272:24 | file | semmle.label | file | -| test.go:274:2:274:3 | S2 | semmle.label | S2 | -| test.go:276:2:276:3 | S2 | semmle.label | S2 | -| test.go:277:12:277:28 | call to NewReader | semmle.label | call to NewReader | -| test.go:277:26:277:27 | S2 | semmle.label | S2 | -| test.go:279:18:279:24 | tarRead | semmle.label | tarRead | -| test.go:281:11:281:14 | definition of file | semmle.label | definition of file | -| test.go:284:2:284:36 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:284:32:284:35 | file | semmle.label | file | -| test.go:286:2:286:9 | gzipRead | semmle.label | gzipRead | -| test.go:287:12:287:34 | call to NewReader | semmle.label | call to NewReader | -| test.go:287:26:287:33 | gzipRead | semmle.label | gzipRead | -| test.go:289:18:289:24 | tarRead | semmle.label | tarRead | -| test.go:291:20:291:23 | definition of file | semmle.label | definition of file | -| test.go:294:2:294:50 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:294:46:294:49 | file | semmle.label | file | -| test.go:296:2:296:14 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:298:2:298:14 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:299:12:299:39 | call to NewReader | semmle.label | call to NewReader | -| test.go:299:26:299:38 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:301:18:301:24 | tarRead | semmle.label | tarRead | -| test.go:303:20:303:23 | definition of file | semmle.label | definition of file | -| test.go:306:2:306:48 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:306:44:306:47 | file | semmle.label | file | -| test.go:308:2:308:11 | pgzippgzip | semmle.label | pgzippgzip | -| test.go:310:2:310:11 | pgzippgzip | semmle.label | pgzippgzip | -| test.go:311:12:311:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:311:26:311:35 | pgzippgzip | semmle.label | pgzippgzip | -| test.go:313:18:313:24 | tarRead | semmle.label | tarRead | -| test.go:315:21:315:24 | definition of file | semmle.label | definition of file | -| test.go:318:2:318:41 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:318:37:318:40 | file | semmle.label | file | -| test.go:320:2:320:5 | zstd | semmle.label | zstd | -| test.go:322:2:322:5 | zstd | semmle.label | zstd | -| test.go:324:2:324:5 | zstd | semmle.label | zstd | -| test.go:325:12:325:30 | call to NewReader | semmle.label | call to NewReader | -| test.go:325:26:325:29 | zstd | semmle.label | zstd | -| test.go:327:18:327:24 | tarRead | semmle.label | tarRead | -| test.go:329:19:329:22 | definition of file | semmle.label | definition of file | -| test.go:332:10:332:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:332:32:332:35 | file | semmle.label | file | -| test.go:334:2:334:5 | zstd | semmle.label | zstd | -| test.go:335:12:335:30 | call to NewReader | semmle.label | call to NewReader | -| test.go:335:26:335:29 | zstd | semmle.label | zstd | -| test.go:337:18:337:24 | tarRead | semmle.label | tarRead | -| test.go:339:9:339:12 | definition of file | semmle.label | definition of file | -| test.go:342:2:342:32 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:342:28:342:31 | file | semmle.label | file | -| test.go:344:2:344:7 | xzRead | semmle.label | xzRead | -| test.go:345:12:345:32 | call to NewReader | semmle.label | call to NewReader | -| test.go:345:26:345:31 | xzRead | semmle.label | xzRead | -| test.go:347:18:347:24 | tarRead | semmle.label | tarRead | -| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | -| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | -| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | -| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | -| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | -| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | -| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | -| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | -| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | +| test.go:284:17:284:20 | definition of file | semmle.label | definition of file | +| test.go:287:2:287:73 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:287:41:287:44 | file | semmle.label | file | +| test.go:289:2:289:12 | flateReader | semmle.label | flateReader | +| test.go:290:12:290:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:290:26:290:36 | flateReader | semmle.label | flateReader | +| test.go:292:18:292:24 | tarRead | semmle.label | tarRead | +| test.go:309:20:309:23 | definition of file | semmle.label | definition of file | +| test.go:312:2:312:47 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:312:43:312:46 | file | semmle.label | file | +| test.go:314:2:314:11 | zlibReader | semmle.label | zlibReader | +| test.go:315:12:315:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:315:26:315:35 | zlibReader | semmle.label | zlibReader | +| test.go:317:18:317:24 | tarRead | semmle.label | tarRead | +| test.go:334:11:334:14 | definition of file | semmle.label | definition of file | +| test.go:337:2:337:38 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:337:34:337:37 | file | semmle.label | file | +| test.go:339:2:339:11 | zlibReader | semmle.label | zlibReader | +| test.go:340:12:340:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:340:26:340:35 | zlibReader | semmle.label | zlibReader | +| test.go:342:18:342:24 | tarRead | semmle.label | tarRead | +| test.go:359:13:359:16 | definition of file | semmle.label | definition of file | +| test.go:362:18:362:39 | call to NewReader | semmle.label | call to NewReader | +| test.go:362:35:362:38 | file | semmle.label | file | +| test.go:364:2:364:13 | snappyReader | semmle.label | snappyReader | +| test.go:365:2:365:13 | snappyReader | semmle.label | snappyReader | +| test.go:366:12:366:38 | call to NewReader | semmle.label | call to NewReader | +| test.go:366:26:366:37 | snappyReader | semmle.label | snappyReader | +| test.go:368:18:368:24 | tarRead | semmle.label | tarRead | +| test.go:385:22:385:25 | definition of file | semmle.label | definition of file | +| test.go:388:18:388:48 | call to NewReader | semmle.label | call to NewReader | +| test.go:388:44:388:47 | file | semmle.label | file | +| test.go:390:2:390:13 | snappyReader | semmle.label | snappyReader | +| test.go:392:2:392:13 | snappyReader | semmle.label | snappyReader | +| test.go:393:2:393:13 | snappyReader | semmle.label | snappyReader | +| test.go:394:12:394:38 | call to NewReader | semmle.label | call to NewReader | +| test.go:394:26:394:37 | snappyReader | semmle.label | snappyReader | +| test.go:396:18:396:24 | tarRead | semmle.label | tarRead | +| test.go:413:9:413:12 | definition of file | semmle.label | definition of file | +| test.go:416:14:416:31 | call to NewReader | semmle.label | call to NewReader | +| test.go:416:27:416:30 | file | semmle.label | file | +| 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:118:23:118:28 | newSrc | test.go:62:13:62:24 | selection of Body | test.go:118:23:118:28 | newSrc | This decompression is $@. | test.go:62:13:62:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:127:37:127:38 | rc | test.go:59:16:59:46 | call to FormValue | test.go:127:37:127:38 | rc | This decompression is $@. | test.go:59:16:59:46 | call to FormValue | decompressing compressed data without managing output size | -| test.go:140:37:140:38 | rc | test.go:59:16:59:46 | call to FormValue | test.go:140:37:140:38 | rc | This decompression is $@. | test.go:59:16:59:46 | call to FormValue | decompressing compressed data without managing output size | -| test.go:157:36:157:51 | fileReaderCloser | test.go:57:15:57:26 | selection of Body | test.go:157:36:157:51 | fileReaderCloser | This decompression is $@. | test.go:57:15:57:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:169:36:169:51 | fileReaderCloser | test.go:58:16:58:27 | selection of Body | test.go:169:36:169:51 | fileReaderCloser | This decompression is $@. | test.go:58:16:58:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:179:2:179:11 | bzip2dsnet | test.go:63:13:63:24 | selection of Body | test.go:179:2:179:11 | bzip2dsnet | This decompression is $@. | test.go:63:13:63:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:190:2:190:6 | Bzip2 | test.go:64:8:64:19 | selection of Body | test.go:190:2:190:6 | Bzip2 | This decompression is $@. | test.go:64:8:64:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:200:2:200:6 | Flate | test.go:65:8:65:19 | selection of Body | test.go:200:2:200:6 | Flate | This decompression is $@. | test.go:65:8:65:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:210:2:210:14 | zlibklauspost | test.go:66:17:66:28 | selection of Body | test.go:210:2:210:14 | zlibklauspost | This decompression is $@. | test.go:66:17:66:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:220:2:220:11 | flatedsnet | test.go:67:13:67:24 | selection of Body | test.go:220:2:220:11 | flatedsnet | This decompression is $@. | test.go:67:13:67:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:230:2:230:14 | zlibklauspost | test.go:68:16:68:27 | selection of Body | test.go:230:2:230:14 | zlibklauspost | This decompression is $@. | test.go:68:16:68:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:240:2:240:5 | Zlib | test.go:69:7:69:18 | selection of Body | test.go:240:2:240:5 | Zlib | This decompression is $@. | test.go:69:7:69:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:250:2:250:7 | Snappy | test.go:70:9:70:20 | selection of Body | test.go:250:2:250:7 | Snappy | This decompression is $@. | test.go:70:9:70:20 | selection of Body | decompressing compressed data without managing output size | -| test.go:251:2:251:7 | Snappy | test.go:70:9:70:20 | selection of Body | test.go:251:2:251:7 | Snappy | This decompression is $@. | test.go:70:9:70:20 | selection of Body | decompressing compressed data without managing output size | -| test.go:261:2:261:16 | snappyklauspost | test.go:71:18:71:29 | selection of Body | test.go:261:2:261:16 | snappyklauspost | This decompression is $@. | test.go:71:18:71:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:263:2:263:16 | snappyklauspost | test.go:71:18:71:29 | selection of Body | test.go:263:2:263:16 | snappyklauspost | This decompression is $@. | test.go:71:18:71:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:264:2:264:16 | snappyklauspost | test.go:71:18:71:29 | selection of Body | test.go:264:2:264:16 | snappyklauspost | This decompression is $@. | test.go:71:18:71:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:274:2:274:3 | S2 | test.go:72:5:72:16 | selection of Body | test.go:274:2:274:3 | S2 | This decompression is $@. | test.go:72:5:72:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:276:2:276:3 | S2 | test.go:72:5:72:16 | selection of Body | test.go:276:2:276:3 | S2 | This decompression is $@. | test.go:72:5:72:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:286:2:286:9 | gzipRead | test.go:73:7:73:18 | selection of Body | test.go:286:2:286:9 | gzipRead | This decompression is $@. | test.go:73:7:73:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:296:2:296:14 | gzipklauspost | test.go:74:16:74:27 | selection of Body | test.go:296:2:296:14 | gzipklauspost | This decompression is $@. | test.go:74:16:74:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:298:2:298:14 | gzipklauspost | test.go:74:16:74:27 | selection of Body | test.go:298:2:298:14 | gzipklauspost | This decompression is $@. | test.go:74:16:74:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:308:2:308:11 | pgzippgzip | test.go:75:16:75:27 | selection of Body | test.go:308:2:308:11 | pgzippgzip | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:310:2:310:11 | pgzippgzip | test.go:75:16:75:27 | selection of Body | test.go:310:2:310:11 | pgzippgzip | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:320:2:320:5 | zstd | test.go:76:17:76:28 | selection of Body | test.go:320:2:320:5 | zstd | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:322:2:322:5 | zstd | test.go:76:17:76:28 | selection of Body | test.go:322:2:322:5 | zstd | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:324:2:324:5 | zstd | test.go:76:17:76:28 | selection of Body | test.go:324:2:324:5 | zstd | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:334:2:334:5 | zstd | test.go:77:15:77:26 | selection of Body | test.go:334:2:334:5 | zstd | This decompression is $@. | test.go:77:15:77:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:344:2:344:7 | xzRead | test.go:78:5:78:16 | selection of Body | test.go:344:2:344:7 | xzRead | This decompression is $@. | test.go:78:5:78:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:63:13:63:24 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:63:13:63:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:64:8:64:19 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:64:8:64:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:65:8:65:19 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:65:8:65:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:66:17:66:28 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:66:17:66:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:67:13:67:24 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:67:13:67:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:68:16:68:27 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:68:16:68:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:69:7:69:18 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:69:7:69:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:70:9:70:20 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:70:9:70:20 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:71:18:71:29 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:71:18:71:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:72:5:72:16 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:72:5:72:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:73:7:73:18 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:73:7:73:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:74:16:74:27 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:74:16:74:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:75:16:75:27 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:76:17:76:28 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:77:15:77:26 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:77:15:77:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:78:5:78:16 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:78:5:78:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:135:37:135:38 | rc | test.go:59:16:59:46 | call to FormValue | test.go:135:37:135:38 | rc | This decompression is $@. | test.go:59:16:59:46 | call to FormValue | decompressing compressed data without managing output size | +| test.go:148:37:148:38 | rc | test.go:59:16:59:46 | call to FormValue | test.go:148:37:148:38 | rc | This decompression is $@. | test.go:59:16:59:46 | call to FormValue | decompressing compressed data without managing output size | +| test.go:165:36:165:51 | fileReaderCloser | test.go:57:15:57:26 | selection of Body | test.go:165:36:165:51 | fileReaderCloser | This decompression is $@. | test.go:57:15:57:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:177:36:177:51 | fileReaderCloser | test.go:58:24:58:35 | selection of Body | test.go:177:36:177:51 | fileReaderCloser | This decompression is $@. | test.go:58:24:58:35 | selection of Body | decompressing compressed data without managing output size | +| test.go:187:2:187:12 | bzip2Reader | test.go:60:13:60:24 | selection of Body | test.go:187:2:187:12 | bzip2Reader | This decompression is $@. | test.go:60:13:60:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:214:2:214:12 | bzip2Reader | test.go:61:8:61:19 | selection of Body | test.go:214:2:214:12 | bzip2Reader | This decompression is $@. | test.go:61:8:61:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:239:2:239:12 | flateReader | test.go:62:8:62:19 | selection of Body | test.go:239:2:239:12 | flateReader | This decompression is $@. | test.go:62:8:62:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:264:2:264:12 | flateReader | test.go:63:17:63:28 | selection of Body | test.go:264:2:264:12 | flateReader | This decompression is $@. | test.go:63:17:63:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:289:2:289:12 | flateReader | test.go:64:13:64:24 | selection of Body | test.go:289:2:289:12 | flateReader | This decompression is $@. | test.go:64:13:64:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:314:2:314:11 | zlibReader | test.go:65:16:65:27 | selection of Body | test.go:314:2:314:11 | zlibReader | This decompression is $@. | test.go:65:16:65:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:339:2:339:11 | zlibReader | test.go:66:7:66:18 | selection of Body | test.go:339:2:339:11 | zlibReader | This decompression is $@. | test.go:66:7:66:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:364:2:364:13 | snappyReader | test.go:67:9:67:20 | selection of Body | test.go:364:2:364:13 | snappyReader | This decompression is $@. | test.go:67:9:67:20 | selection of Body | decompressing compressed data without managing output size | +| test.go:365:2:365:13 | snappyReader | test.go:67:9:67:20 | selection of Body | test.go:365:2:365:13 | snappyReader | This decompression is $@. | test.go:67:9:67:20 | selection of Body | decompressing compressed data without managing output size | +| test.go:390:2:390:13 | snappyReader | test.go:68:18:68:29 | selection of Body | test.go:390:2:390:13 | snappyReader | This decompression is $@. | test.go:68:18:68:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:392:2:392:13 | snappyReader | test.go:68:18:68:29 | selection of Body | test.go:392:2:392:13 | snappyReader | This decompression is $@. | test.go:68:18:68:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:393:2:393:13 | snappyReader | test.go:68:18:68:29 | selection of Body | test.go:393:2:393:13 | snappyReader | This decompression is $@. | test.go:68:18:68:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:418:2:418:9 | s2Reader | test.go:69:5:69:16 | selection of Body | test.go:418:2:418:9 | s2Reader | This decompression is $@. | test.go:69:5:69:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:420:2:420:9 | s2Reader | test.go:69:5:69:16 | selection of Body | test.go:420:2:420:9 | s2Reader | This decompression is $@. | test.go:69:5:69:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:445:23:445:28 | newSrc | test.go:71:15:71:26 | selection of Body | test.go:445:23:445:28 | newSrc | This decompression is $@. | test.go:71:15:71:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:452:2:452:11 | gzipReader | test.go:70:7:70:18 | selection of Body | test.go:452:2:452:11 | gzipReader | This decompression is $@. | test.go:70:7:70:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:477:2:477:11 | gzipReader | test.go:72:16:72:27 | selection of Body | test.go:477:2:477:11 | gzipReader | This decompression is $@. | test.go:72:16:72:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:479:2:479:11 | gzipReader | test.go:72:16:72:27 | selection of Body | test.go:479:2:479:11 | gzipReader | This decompression is $@. | test.go:72:16:72:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:504:2:504:12 | pgzipReader | test.go:73:16:73:27 | selection of Body | test.go:504:2:504:12 | pgzipReader | This decompression is $@. | test.go:73:16:73:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:506:2:506:12 | pgzipReader | test.go:73:16:73:27 | selection of Body | test.go:506:2:506:12 | pgzipReader | This decompression is $@. | test.go:73:16:73:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:531:2:531:11 | zstdReader | test.go:74:17:74:28 | selection of Body | test.go:531:2:531:11 | zstdReader | This decompression is $@. | test.go:74:17:74:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:533:2:533:11 | zstdReader | test.go:74:17:74:28 | selection of Body | test.go:533:2:533:11 | zstdReader | This decompression is $@. | test.go:74:17:74:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:535:2:535:11 | zstdReader | test.go:74:17:74:28 | selection of Body | test.go:535:2:535:11 | zstdReader | This decompression is $@. | test.go:74:17:74:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:560:2:560:11 | zstdReader | test.go:75:15:75:26 | selection of Body | test.go:560:2:560:11 | zstdReader | This decompression is $@. | test.go:75:15:75:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:585:2:585:9 | xzReader | test.go:76:5:76:16 | selection of Body | test.go:585:2:585:9 | xzReader | This decompression is $@. | test.go:76:5:76:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:60:13:60:24 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:60:13:60:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:61:8:61:19 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:61:8:61:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:62:8:62:19 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:62:8:62:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:63:17:63:28 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:63:17:63:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:64:13:64:24 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:64:13:64:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:65:16:65:27 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:65:16:65:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:66:7:66:18 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:66:7:66:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:67:9:67:20 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:67:9:67:20 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:68:18:68:29 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:68:18:68:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:69:5:69:16 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:69:5:69:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:70:7:70:18 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:70:7:70:18 | 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:73:16:73:27 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:73:16:73:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:74:17:74:28 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:74:17:74:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:75:15:75:26 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:75:15:75:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:76:5:76:16 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:76:5:76:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:629:2:629:8 | tarRead | test.go:76:5:76:16 | selection of Body | test.go:629:2:629:8 | tarRead | This decompression is $@. | test.go:76:5:76:16 | selection of Body | decompressing compressed data without managing output size | diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go index 9c2d3685101..1cbf292b4eb 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go @@ -55,11 +55,8 @@ func main() { } func DecompressHandler(w http.ResponseWriter, request *http.Request) { ZipNewReader(request.Body) - ZipNewReader2(request.Body) + ZipNewReaderKlauspost(request.Body) ZipOpenReader(request.FormValue("filepathba")) - ZipOpenReaderSafe(request.PostFormValue("test")) - GZipOpenReaderSafe(request.PostFormValue("test")) - GZipReader(request.Body, "dest") Bzip2Dsnet(request.Body) Bzip2(request.Body) Flate(request.Body) @@ -71,11 +68,31 @@ func DecompressHandler(w http.ResponseWriter, request *http.Request) { SnappyKlauspost(request.Body) S2(request.Body) Gzip(request.Body) + GZipIoReader(request.Body, "dest") GzipKlauspost(request.Body) PzipKlauspost(request.Body) Zstd_Klauspost(request.Body) Zstd_DataDog(request.Body) Xz(request.Body) + + ZipOpenReaderSafe(request.PostFormValue("test")) + GZipOpenReaderSafe(request.PostFormValue("test")) + Bzip2DsnetSafe(request.Body) + Bzip2Safe(request.Body) + FlateSafe(request.Body) + FlateKlauspostSafe(request.Body) + FlateDsnetSafe(request.Body) + ZlibKlauspostSafe(request.Body) + ZlibSafe(request.Body) + SnappySafe(request.Body) + SnappyKlauspostSafe(request.Body) + S2Safe(request.Body) + GzipSafe(request.Body) + GzipKlauspostSafe(request.Body) + PzipKlauspostSafe(request.Body) + Zstd_KlauspostSafe(request.Body) + Zstd_DataDogSafe(request.Body) + XzSafe(request.Body) } func GZipOpenReaderSafe(filename string) { @@ -102,29 +119,20 @@ func ZipOpenReaderSafe(filename string) { } totalBytes = totalBytes + result if totalBytes > 1024*1024*1024*5 { - fmt.Print(totalBytes) + fmt.Print(totalBytes, "exceeded") break } } } } -func GZipReader(src io.Reader, dst string) { - gzipR, _ := gzip.NewReader(src) - dstF, _ := os.OpenFile(dst, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0755) - defer dstF.Close() - var newSrc io.Reader - newSrc = io.Reader(gzipR) - _, _ = io.Copy(dstF, newSrc) // BAD -} - func ZipOpenReader(filename string) { // Open the zip file - r, _ := zip.OpenReader(filename) - for _, f := range r.File { + zipReader, _ := zip.OpenReader(filename) + for _, f := range zipReader.File { rc, _ := f.Open() for { - result, _ := io.CopyN(os.Stdout, rc, 68) // BAD + result, _ := io.CopyN(os.Stdout, rc, 68) // $ hasValueFlow="rc" if result == 0 { _ = rc.Close() break @@ -133,11 +141,11 @@ func ZipOpenReader(filename string) { _ = rc.Close() } } - rKlauspost, _ := zipKlauspost.OpenReader(filename) - for _, f := range rKlauspost.File { + zipKlauspostReader, _ := zipKlauspost.OpenReader(filename) + for _, f := range zipKlauspostReader.File { rc, _ := f.Open() for { - result, _ := io.CopyN(os.Stdout, rc, 68) // BAD + result, _ := io.CopyN(os.Stdout, rc, 68) // $ hasValueFlow="rc" if result == 0 { _ = rc.Close() break @@ -154,19 +162,19 @@ func ZipNewReader(file io.Reader) { for _, file := range zipReader.File { fileWriter := bytes.NewBuffer([]byte{}) fileReaderCloser, _ := file.Open() - result, _ := io.Copy(fileWriter, fileReaderCloser) // BAD + result, _ := io.Copy(fileWriter, fileReaderCloser) // $ hasValueFlow="fileReaderCloser" fmt.Print(result) } } -func ZipNewReader2(file io.Reader) { +func ZipNewReaderKlauspost(file io.Reader) { file2, _ := io.ReadAll(file) - zipReaderKlauspost, _ := zipKlauspost.NewReader(bytes.NewReader(file2), int64(32<<20)) - for _, file := range zipReaderKlauspost.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) // BAD + result, _ := io.Copy(fileWriter, fileReaderCloser) // $ hasValueFlow="fileReaderCloser" fmt.Print(result) } } @@ -174,182 +182,433 @@ func ZipNewReader2(file io.Reader) { func Bzip2Dsnet(file io.Reader) { var tarRead *tar.Reader - bzip2dsnet, _ := bzip2Dsnet.NewReader(file, &bzip2Dsnet.ReaderConfig{}) + bzip2Reader, _ := bzip2Dsnet.NewReader(file, &bzip2Dsnet.ReaderConfig{}) var out []byte = make([]byte, 70) - bzip2dsnet.Read(out) // BAD - tarRead = tar.NewReader(bzip2dsnet) + 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 - Bzip2 := bzip2.NewReader(file) + bzip2Reader := bzip2.NewReader(file) var out []byte = make([]byte, 70) - Bzip2.Read(out) // BAD - tarRead = tar.NewReader(Bzip2) + 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 - Flate := flate.NewReader(file) + flateReader := flate.NewReader(file) var out []byte = make([]byte, 70) - Flate.Read(out) // BAD - tarRead = tar.NewReader(Flate) + 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 - zlibklauspost := flateKlauspost.NewReader(file) + flateReader := flateKlauspost.NewReader(file) var out []byte = make([]byte, 70) - zlibklauspost.Read(out) // BAD - tarRead = tar.NewReader(zlibklauspost) + 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 - flatedsnet, _ := flateDsnet.NewReader(file, &flateDsnet.ReaderConfig{}) + flateReader, _ := flateDsnet.NewReader(file, &flateDsnet.ReaderConfig{}) var out []byte = make([]byte, 70) - flatedsnet.Read(out) // BAD - tarRead = tar.NewReader(flatedsnet) + 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 - zlibklauspost, _ := zlibKlauspost.NewReader(file) + zlibReader, _ := zlibKlauspost.NewReader(file) var out []byte = make([]byte, 70) - zlibklauspost.Read(out) // BAD - tarRead = tar.NewReader(zlibklauspost) + 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 - Zlib, _ := zlib.NewReader(file) + zlibReader, _ := zlib.NewReader(file) var out []byte = make([]byte, 70) - Zlib.Read(out) // BAD - tarRead = tar.NewReader(Zlib) + 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 - Snappy := snappy.NewReader(file) + snappyReader := snappy.NewReader(file) var out []byte = make([]byte, 70) - Snappy.Read(out) // BAD - Snappy.ReadByte() // BAD - tarRead = tar.NewReader(Snappy) + 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 - snappyklauspost := snappyKlauspost.NewReader(file) + snappyReader := snappyKlauspost.NewReader(file) var out []byte = make([]byte, 70) - snappyklauspost.Read(out) // BAD + snappyReader.Read(out) // $ hasValueFlow="snappyReader" var buf bytes.Buffer - snappyklauspost.DecodeConcurrent(&buf, 2) // BAD - snappyklauspost.ReadByte() // BAD - tarRead = tar.NewReader(snappyklauspost) + 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 - S2 := s2.NewReader(file) + s2Reader := s2.NewReader(file) var out []byte = make([]byte, 70) - S2.Read(out) // BAD + s2Reader.Read(out) // $ hasValueFlow="s2Reader" var buf bytes.Buffer - S2.DecodeConcurrent(&buf, 2) // BAD - tarRead = tar.NewReader(S2) + 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 - gzipRead, _ := gzip.NewReader(file) + gzipReader, _ := gzip.NewReader(file) var out []byte = make([]byte, 70) - gzipRead.Read(out) // BAD - tarRead = tar.NewReader(gzipRead) + 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 - gzipklauspost, _ := gzipKlauspost.NewReader(file) + gzipReader, _ := gzipKlauspost.NewReader(file) var out []byte = make([]byte, 70) - gzipklauspost.Read(out) // BAD + gzipReader.Read(out) // $ hasValueFlow="gzipReader" var buf bytes.Buffer - gzipklauspost.WriteTo(&buf) // BAD - tarRead = tar.NewReader(gzipklauspost) + 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 - pgzippgzip, _ := pgzipKlauspost.NewReader(file) + pgzipReader, _ := pgzipKlauspost.NewReader(file) var out []byte = make([]byte, 70) - pgzippgzip.Read(out) // BAD + pgzipReader.Read(out) // $ hasValueFlow="pgzipReader" var buf bytes.Buffer - pgzippgzip.WriteTo(&buf) // BAD - tarRead = tar.NewReader(pgzippgzip) + 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 - zstd, _ := zstdKlauspost.NewReader(file) + zstdReader, _ := zstdKlauspost.NewReader(file) var out []byte = make([]byte, 70) - zstd.Read(out) // BAD + zstdReader.Read(out) // $ hasValueFlow="zstdReader" var buf bytes.Buffer - zstd.WriteTo(&buf) // BAD + zstdReader.WriteTo(&buf) // $ hasValueFlow="zstdReader" var src []byte - zstd.DecodeAll(src, nil) // BAD - tarRead = tar.NewReader(zstd) + 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 - zstd := zstdDataDog.NewReader(file) + zstdReader := zstdDataDog.NewReader(file) var out []byte = make([]byte, 70) - zstd.Read(out) // BAD - tarRead = tar.NewReader(zstd) + 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 - xzRead, _ := xz.NewReader(file) + xzReader, _ := xz.NewReader(file) var out []byte = make([]byte, 70) - xzRead.Read(out) // BAD - tarRead = tar.NewReader(xzRead) + xzReader.Read(out) // $ hasValueFlow="xzReader" + tarRead = tar.NewReader(xzReader) + fmt.Println(io.SeekStart) TarDecompressor(tarRead) + TarDecompressor2(tarRead) + TarDecompressorSafe(tarRead) + TarDecompressorTP(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) { - var tarOut []byte = make([]byte, 70) - tarRead.Read(tarOut) // BAD files := make(fstest.MapFS) for { cur, err := tarRead.Next() @@ -359,8 +618,36 @@ func TarDecompressor(tarRead *tar.Reader) { if cur.Typeflag != tar.TypeReg { continue } - data, _ := io.ReadAll(tarRead) // BAD + 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 TarDecompressorTP(tarRead *tar.Reader) { + var tarOut []byte = make([]byte, 70) + i := 1 + for i > 0 { + i, _ = tarRead.Read(tarOut) // $ hasValueFlow="tarRead" + 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 + } + } +} From 0efb00724d39b6fa35630a5a078bb73fd0376a0c Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Mon, 15 Jan 2024 00:05:11 +0400 Subject: [PATCH 047/430] Add hasFlowToComparison to all sinks as a sanitizer --- .../DecompressionBombs.ql | 10 +- .../frameworks/DecompressionBombs.qll | 230 +++++++++++------- .../DecompressionBombs.expected | 34 +++ 3 files changed, 180 insertions(+), 94 deletions(-) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index b23e686a6b2..0331de1788c 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -15,7 +15,7 @@ import go import MultipartAndFormRemoteSource import experimental.frameworks.DecompressionBombs -module DecompressionBombsConfig implements DataFlow::StateConfigSig { +module Config implements DataFlow::StateConfigSig { class FlowState = DecompressionBombs::FlowState; predicate isSource(DataFlow::Node source, FlowState state) { @@ -48,11 +48,11 @@ module DecompressionBombsConfig implements DataFlow::StateConfigSig { } } -module DecompressionBombsFlow = TaintTracking::GlobalWithState; +module Flow = TaintTracking::GlobalWithState; -import DecompressionBombsFlow::PathGraph +import Flow::PathGraph -from DecompressionBombsFlow::PathNode source, DecompressionBombsFlow::PathNode sink -where DecompressionBombsFlow::flowPath(source, sink) +from Flow::PathNode source, Flow::PathNode sink +where 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/frameworks/DecompressionBombs.qll b/go/ql/src/experimental/frameworks/DecompressionBombs.qll index 29895ca1c0d..1d70b71df11 100644 --- a/go/ql/src/experimental/frameworks/DecompressionBombs.qll +++ b/go/ql/src/experimental/frameworks/DecompressionBombs.qll @@ -40,14 +40,6 @@ module DecompressionBombs { * Provides decompression bomb sinks and additional flow steps for `github.com/DataDog/zstd` package */ module DataDogZstd { - class TheSink extends Sink { - TheSink() { - exists(Method f | f.hasQualifiedName("github.com/DataDog/zstd", "reader", "Read") | - this = f.getACall().getReceiver() - ) - } - } - class TheAdditionalTaintStep extends AdditionalTaintStep { TheAdditionalTaintStep() { this = "AdditionalTaintStep" } @@ -77,17 +69,18 @@ module DecompressionBombs { module KlauspostZstd { class TheSink extends Sink { TheSink() { - exists(Method f | - f.hasQualifiedName("github.com/klauspost/compress/zstd", "Decoder", - ["WriteTo", "DecodeAll"]) + exists(Method m | + m.hasQualifiedName("github.com/klauspost/compress/zstd", "Decoder", "DecodeAll") | - this = f.getACall().getReceiver() + this = m.getACall().getReceiver() ) or - exists(Method f | - f.hasQualifiedName("github.com/klauspost/compress/zstd", "Decoder", "Read") + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/klauspost/compress/zstd", "Decoder", ["WriteTo", "Read"]) and + cn = m.getACall() | - this = f.getACall().getReceiver() + this = cn.getReceiver() and + not hasFlowToComparison(cn.getResult(0)) ) } } @@ -118,7 +111,7 @@ module DecompressionBombs { /** * Provides additional flow steps for `archive/zip` package */ - module ArchiveZip { + module ArchiveZipBombs { class TheAdditionalTaintStep extends AdditionalTaintStep { TheAdditionalTaintStep() { this = "AdditionalTaintStep" } @@ -170,9 +163,9 @@ module DecompressionBombs { toNode = fi ) or - exists(Method f, DataFlow::CallNode call | - f.hasQualifiedName("github.com/klauspost/compress/zip", "File", ["Open", "OpenRaw"]) and - call = f.getACall() + 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 @@ -187,8 +180,12 @@ module DecompressionBombs { module UlikunitzXz { class TheSink extends Sink { TheSink() { - exists(Method f | f.hasQualifiedName("github.com/ulikunitz/xz", "Reader", "Read") | - this = f.getACall().getReceiver() + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/ulikunitz/xz", "Reader", "Read") and + cn = m.getACall() + | + this = cn.getReceiver() and + not hasFlowToComparison(cn.getResult(0)) ) } } @@ -218,11 +215,15 @@ module DecompressionBombs { /** * Provides decompression bomb sinks and additional flow steps for `compress/gzip` package */ - module CompressGzip { + module CompressGzipBombs { class TheSink extends Sink { TheSink() { - exists(Method f | f.hasQualifiedName("compress/gzip", "Reader", "Read") | - this = f.getACall().getReceiver() + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("compress/gzip", "Reader", "Read") and + cn = m.getACall() + | + this = cn.getReceiver() and + not hasFlowToComparison(cn.getResult(0)) ) } } @@ -256,18 +257,13 @@ module DecompressionBombs { module KlauspostGzipAndPgzip { class TheSink extends Sink { TheSink() { - exists(Method f | - f.hasQualifiedName(["github.com/klauspost/compress/gzip", "github.com/klauspost/pgzip"], - "Reader", "Read") + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName(["github.com/klauspost/compress/gzip", "github.com/klauspost/pgzip"], + "Reader", ["Read", "WriteTo"]) and + cn = m.getACall() | - this = f.getACall().getReceiver() - ) - or - exists(Method f | - f.hasQualifiedName(["github.com/klauspost/compress/gzip", "github.com/klauspost/pgzip"], - "Reader", "WriteTo") - | - this = f.getACall().getReceiver() + this = cn.getReceiver() and + not hasFlowToComparison(cn.getResult(0)) ) } } @@ -307,8 +303,12 @@ module DecompressionBombs { module CompressBzip2 { class TheSink extends Sink { TheSink() { - exists(Method f | f.hasQualifiedName("compress/bzip2", "reader", "Read") | - this = f.getACall().getReceiver() + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("compress/bzip2", "reader", "Read") and + cn = m.getACall() + | + this = cn.getReceiver() and + not hasFlowToComparison(cn.getResult(0)) ) } } @@ -342,8 +342,12 @@ module DecompressionBombs { module DsnetBzip2 { class TheSink extends Sink { TheSink() { - exists(Method f | f.hasQualifiedName("github.com/dsnet/compress/bzip2", "Reader", "Read") | - this = f.getACall().getReceiver() + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/dsnet/compress/bzip2", "Reader", "Read") and + cn = m.getACall() + | + this = cn.getReceiver() and + not hasFlowToComparison(cn.getResult(0)) ) } } @@ -377,8 +381,12 @@ module DecompressionBombs { module DsnetFlate { class TheSink extends Sink { TheSink() { - exists(Method f | f.hasQualifiedName("github.com/dsnet/compress/flate", "Reader", "Read") | - this = f.getACall().getReceiver() + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/dsnet/compress/flate", "Reader", "Read") and + cn = m.getACall() + | + this = cn.getReceiver() and + not hasFlowToComparison(cn.getResult(0)) ) } } @@ -409,11 +417,15 @@ module DecompressionBombs { /** * Provides decompression bomb sinks and additional flow steps for `compress/flate` package */ - module CompressFlate { + module CompressFlateBombs { class TheSink extends Sink { TheSink() { - exists(Method f | f.hasQualifiedName("compress/flate", "decompressor", "Read") | - this = f.getACall().getReceiver() + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("compress/flate", "decompressor", "Read") and + cn = m.getACall() + | + this = cn.getReceiver() and + not hasFlowToComparison(cn.getResult(0)) ) } } @@ -447,10 +459,12 @@ module DecompressionBombs { module KlauspostFlate { class TheSink extends Sink { TheSink() { - exists(Method f | - f.hasQualifiedName("github.com/klauspost/compress/flate", "decompressor", "Read") + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/klauspost/compress/flate", "decompressor", "Read") and + cn = m.getACall() | - this = f.getACall().getReceiver() + this = cn.getReceiver() and + not hasFlowToComparison(cn.getResult(0)) ) } } @@ -484,10 +498,12 @@ module DecompressionBombs { module KlauspostZlib { class TheSink extends Sink { TheSink() { - exists(Method f | - f.hasQualifiedName("github.com/klauspost/compress/zlib", "reader", "Read") + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/klauspost/compress/zlib", "reader", "Read") and + cn = m.getACall() | - this = f.getACall().getReceiver() + this = cn.getReceiver() and + not hasFlowToComparison(cn.getResult(0)) ) } } @@ -518,11 +534,15 @@ module DecompressionBombs { /** * Provides decompression bomb sinks and additional flow steps for `compress/zlib` package */ - module CompressZlib { + module CompressZlibBombs { class TheSink extends Sink { TheSink() { - exists(Method f | f.hasQualifiedName("compress/zlib", "reader", "Read") | - this = f.getACall().getReceiver() + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("compress/zlib", "reader", "Read") and + cn = m.getACall() + | + this = cn.getReceiver() and + not hasFlowToComparison(cn.getResult(0)) ) } } @@ -556,10 +576,12 @@ module DecompressionBombs { module GolangSnappy { class TheSink extends Sink { TheSink() { - exists(Method f | - f.hasQualifiedName("github.com/golang/snappy", "Reader", ["Read", "ReadByte"]) + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/golang/snappy", "Reader", ["Read", "ReadByte"]) and + cn = m.getACall() | - this = f.getACall().getReceiver() + this = cn.getReceiver() and + not hasFlowToComparison(cn.getResult(0)) ) } } @@ -620,11 +642,13 @@ module DecompressionBombs { module KlauspostS2 { class TheSink extends Sink { TheSink() { - exists(Method m | + exists(Method m, DataFlow::CallNode cn | m.hasQualifiedName("github.com/klauspost/compress/s2", "Reader", - ["DecodeConcurrent", "ReadByte", "Read"]) + ["DecodeConcurrent", "ReadByte", "Read"]) and + cn = m.getACall() | - this = m.getACall().getReceiver() + this = cn.getReceiver() and + not hasFlowToComparison(cn.getResult(0)) ) } } @@ -662,8 +686,21 @@ module DecompressionBombs { f.hasQualifiedName("io", "CopyN") and cn = f.getACall() | this = cn.getArgument(1) and - // and the return value doesn't flow into a comparison (<, >, <=, >=). - not localStep*(cn.getResult(0), any(DataFlow::RelationalComparisonNode rcn).getAnOperand()) + not hasFlowToComparison(cn.getResult(0)) + ) + or + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("io", "Reader", "Read") and cn = m.getACall() + | + this = cn.getReceiver() and + not hasFlowToComparison(cn.getResult(0)) + ) + or + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("archive/tar", "Reader", "Read") and cn = m.getACall() + | + this = cn.getReceiver() and + not hasFlowToComparison(cn.getResult(0)) ) or exists(Function f | f.hasQualifiedName("io", ["Copy", "CopyBuffer"]) | @@ -676,15 +713,23 @@ module DecompressionBombs { this = f.getACall().getArgument(0) ) or - exists(Method f | - f.hasQualifiedName("bufio", "Reader", - ["Read", "ReadBytes", "ReadByte", "ReadLine", "ReadRune", "ReadSlice", "ReadString"]) + exists(Method m | + m.hasQualifiedName("bufio", "Reader", + ["ReadBytes", "ReadByte", "ReadLine", "ReadRune", "ReadSlice", "ReadString"]) | - this = f.getACall().getReceiver() + this = m.getACall().getReceiver() ) or - exists(Method f | f.hasQualifiedName("bufio", "Scanner", ["Text", "Bytes"]) | - this = f.getACall().getReceiver() + 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") | @@ -692,29 +737,36 @@ module DecompressionBombs { ) } } + } - /** - * 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 `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, 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) - } + /** + * 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/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected index ed8d6b05379..8246bc580a0 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -172,6 +172,15 @@ edges | test.go:345:12:345:32 | call to NewReader | test.go:347:18:347:24 | tarRead | | test.go:345:26:345:31 | xzRead | test.go:345:12:345:32 | call to NewReader | | test.go:347:18:347:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | +| test.go:350:22:350:28 | definition of tarRead | test.go:352:2:352:8 | tarRead | +| test.go:350:22:350:28 | definition of tarRead | test.go:352:2:352:8 | tarRead | +| test.go:350:22:350:28 | definition of tarRead | test.go:352:2:352:8 | tarRead | +| test.go:350:22:350:28 | definition of tarRead | test.go:352:2:352:8 | tarRead | +| test.go:350:22:350:28 | definition of tarRead | test.go:352:2:352:8 | tarRead | +| test.go:350:22:350:28 | definition of tarRead | test.go:352:2:352:8 | tarRead | +| test.go:350:22:350:28 | definition of tarRead | test.go:352:2:352:8 | tarRead | +| test.go:350:22:350:28 | definition of tarRead | test.go:352:2:352:8 | tarRead | +| test.go:350:22:350:28 | definition of tarRead | test.go:352:2:352:8 | tarRead | | test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | | test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | | test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | @@ -367,6 +376,15 @@ nodes | test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | | test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | | test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:352:2:352:8 | tarRead | semmle.label | tarRead | +| test.go:352:2:352:8 | tarRead | semmle.label | tarRead | +| test.go:352:2:352:8 | tarRead | semmle.label | tarRead | +| test.go:352:2:352:8 | tarRead | semmle.label | tarRead | +| test.go:352:2:352:8 | tarRead | semmle.label | tarRead | +| test.go:352:2:352:8 | tarRead | semmle.label | tarRead | +| test.go:352:2:352:8 | tarRead | semmle.label | tarRead | +| test.go:352:2:352:8 | tarRead | semmle.label | tarRead | +| test.go:352:2:352:8 | tarRead | semmle.label | tarRead | | test.go:362:25:362:31 | tarRead | semmle.label | tarRead | | test.go:362:25:362:31 | tarRead | semmle.label | tarRead | | test.go:362:25:362:31 | tarRead | semmle.label | tarRead | @@ -407,6 +425,22 @@ subpaths | test.go:324:2:324:5 | zstd | test.go:76:17:76:28 | selection of Body | test.go:324:2:324:5 | zstd | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | | test.go:334:2:334:5 | zstd | test.go:77:15:77:26 | selection of Body | test.go:334:2:334:5 | zstd | This decompression is $@. | test.go:77:15:77:26 | selection of Body | decompressing compressed data without managing output size | | test.go:344:2:344:7 | xzRead | test.go:78:5:78:16 | selection of Body | test.go:344:2:344:7 | xzRead | This decompression is $@. | test.go:78:5:78:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:352:2:352:8 | tarRead | test.go:63:13:63:24 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:63:13:63:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:352:2:352:8 | tarRead | test.go:64:8:64:19 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:64:8:64:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:352:2:352:8 | tarRead | test.go:65:8:65:19 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:65:8:65:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:352:2:352:8 | tarRead | test.go:66:17:66:28 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:66:17:66:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:352:2:352:8 | tarRead | test.go:67:13:67:24 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:67:13:67:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:352:2:352:8 | tarRead | test.go:68:16:68:27 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:68:16:68:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:352:2:352:8 | tarRead | test.go:69:7:69:18 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:69:7:69:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:352:2:352:8 | tarRead | test.go:70:9:70:20 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:70:9:70:20 | selection of Body | decompressing compressed data without managing output size | +| test.go:352:2:352:8 | tarRead | test.go:71:18:71:29 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:71:18:71:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:352:2:352:8 | tarRead | test.go:72:5:72:16 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:72:5:72:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:352:2:352:8 | tarRead | test.go:73:7:73:18 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:73:7:73:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:352:2:352:8 | tarRead | test.go:74:16:74:27 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:74:16:74:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:352:2:352:8 | tarRead | test.go:75:16:75:27 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:352:2:352:8 | tarRead | test.go:76:17:76:28 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:352:2:352:8 | tarRead | test.go:77:15:77:26 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:77:15:77:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:352:2:352:8 | tarRead | test.go:78:5:78:16 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:78:5:78:16 | selection of Body | decompressing compressed data without managing output size | | test.go:362:25:362:31 | tarRead | test.go:63:13:63:24 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:63:13:63:24 | selection of Body | decompressing compressed data without managing output size | | test.go:362:25:362:31 | tarRead | test.go:64:8:64:19 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:64:8:64:19 | selection of Body | decompressing compressed data without managing output size | | test.go:362:25:362:31 | tarRead | test.go:65:8:65:19 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:65:8:65:19 | selection of Body | decompressing compressed data without managing output size | From a1c384c57b4a8dce08c5bc45b7e64264fffed6d1 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Mon, 15 Jan 2024 00:13:20 +0400 Subject: [PATCH 048/430] change Decompression bombs Query structure --- .../DecompressionBombs.ql | 43 +- .../frameworks/DecompressionBombs.qll | 791 +----------------- .../DecompressionBombsCustomizations.qll | 772 +++++++++++++++++ .../MultipartAndFormRemoteSource.qll | 0 4 files changed, 808 insertions(+), 798 deletions(-) create mode 100644 go/ql/src/experimental/frameworks/DecompressionBombsCustomizations.qll rename go/ql/src/experimental/{CWE-522-DecompressionBombs => frameworks}/MultipartAndFormRemoteSource.qll (100%) diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql index 0331de1788c..e86c097f020 100644 --- a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -12,47 +12,10 @@ */ import go -import MultipartAndFormRemoteSource import experimental.frameworks.DecompressionBombs +import DecompressionBomb::Flow::PathGraph -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) - ) - } -} - -module Flow = TaintTracking::GlobalWithState; - -import Flow::PathGraph - -from Flow::PathNode source, Flow::PathNode sink -where Flow::flowPath(source, sink) +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/frameworks/DecompressionBombs.qll b/go/ql/src/experimental/frameworks/DecompressionBombs.qll index 1d70b71df11..06148feaf2b 100644 --- a/go/ql/src/experimental/frameworks/DecompressionBombs.qll +++ b/go/ql/src/experimental/frameworks/DecompressionBombs.qll @@ -1,772 +1,47 @@ +/** + * Provides a taint tracking configuration for reasoning about decompression bomb vulnerabilities. + */ + import go -module DecompressionBombs { - class FlowState extends string { - FlowState() { - this = +/** Provides a taint tracking configuration for reasoning about decompression bomb vulnerabilities. */ +module DecompressionBomb { + import DecompressionBombsCustomizations + import MultipartAndFormRemoteSource + + 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", "" + "ZipKlauspost" ] } - } - /** - * The additional taint steps that need for creating taint tracking or dataflow. - */ - abstract class AdditionalTaintStep extends string { - AdditionalTaintStep() { this = "AdditionalTaintStep" } + predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + exists(DecompressionBombs::AdditionalTaintStep addStep | + addStep.isAdditionalFlowStep(fromNode, toNode) + ) + } - /** - * Holds if there is a additional taint step between pred and succ. - */ - abstract predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode); - - /** - * Holds if there is a additional taint step between pred and succ. - */ - abstract predicate isAdditionalFlowStep( + 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 - */ - 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" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } + ) { + exists(DecompressionBombs::AdditionalTaintStep addStep | + addStep.isAdditionalFlowStep(fromNode, fromState, toNode, toState) + ) } } - /** - * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/zstd` package - */ - module KlauspostZstd { - class TheSink extends Sink { - TheSink() { - exists(Method m | - m.hasQualifiedName("github.com/klauspost/compress/zstd", "Decoder", "DecodeAll") - | - this = m.getACall().getReceiver() - ) - or - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("github.com/klauspost/compress/zstd", "Decoder", ["WriteTo", "Read"]) 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/zstd", "NewReader") and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "ZstdNewReader" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * 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" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * 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 - */ - module UlikunitzXz { - class TheSink extends Sink { - TheSink() { - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("github.com/ulikunitz/xz", "Reader", "Read") 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/ulikunitz/xz", "NewReader") and call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "XzNewReader" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `compress/gzip` package - */ - module CompressGzipBombs { - class TheSink extends Sink { - TheSink() { - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("compress/gzip", "Reader", "Read") 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("compress/gzip", "NewReader") and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "GzipNewReader" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/gzip` package - */ - module KlauspostGzipAndPgzip { - class TheSink extends Sink { - TheSink() { - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName(["github.com/klauspost/compress/gzip", "github.com/klauspost/pgzip"], - "Reader", ["Read", "WriteTo"]) 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/pgzip", "NewReader") and - call = f.getACall() and - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "PgzipNewReader" - or - 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" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `compress/bzip2` package - */ - module CompressBzip2 { - class TheSink extends Sink { - TheSink() { - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("compress/bzip2", "reader", "Read") 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("compress/bzip2", "NewReader") and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "Bzip2NewReader" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `github.com/dsnet/compress/bzip2` package - */ - module DsnetBzip2 { - class TheSink extends Sink { - TheSink() { - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("github.com/dsnet/compress/bzip2", "Reader", "Read") 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/dsnet/compress/bzip2", "NewReader") and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "Bzip2NewReader" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `github.com/dsnet/compress/flate` package - */ - module DsnetFlate { - class TheSink extends Sink { - TheSink() { - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("github.com/dsnet/compress/flate", "Reader", "Read") 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/dsnet/compress/flate", "NewReader") and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "FlateNewReader" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `compress/flate` package - */ - module CompressFlateBombs { - class TheSink extends Sink { - TheSink() { - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("compress/flate", "decompressor", "Read") 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("compress/flate", ["NewReaderDict", "NewReader"]) and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "FlateNewReader" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/flate` package - */ - module KlauspostFlate { - class TheSink extends Sink { - TheSink() { - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("github.com/klauspost/compress/flate", "decompressor", "Read") 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/flate", ["NewReaderDict", "NewReader"]) and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "FlateNewReader" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/zlib` package - */ - module KlauspostZlib { - class TheSink extends Sink { - TheSink() { - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("github.com/klauspost/compress/zlib", "reader", "Read") 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/zlib", "NewReader") and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "ZlibNewReader" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `compress/zlib` package - */ - module CompressZlibBombs { - class TheSink extends Sink { - TheSink() { - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("compress/zlib", "reader", "Read") 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("compress/zlib", "NewReader") and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "ZlibNewReader" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `github.com/golang/snappy` package - */ - module GolangSnappy { - class TheSink extends Sink { - TheSink() { - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("github.com/golang/snappy", "Reader", ["Read", "ReadByte"]) 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/golang/snappy", "NewReader") and - call = f.getACall() - | - fromNode = call.getArgument(0) and - toNode = call.getResult(0) and - fromState = "" and - toState = "SnappyNewReader" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bombs sinks and additional flow steps for `github.com/klauspost/compress/snappy` package - */ - 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" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/s2` package - */ - module KlauspostS2 { - class TheSink extends Sink { - TheSink() { - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("github.com/klauspost/compress/s2", "Reader", - ["DecodeConcurrent", "ReadByte", "Read"]) 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" - ) - } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } - } - } - - /** - * Provides decompression bomb sinks for packages that use some standard IO interfaces/methods for reading decompressed data - */ - module GeneralReadIoSink { - class TheSink extends Sink { - TheSink() { - 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.hasQualifiedName("io", "Reader", "Read") and cn = m.getACall() - | - this = cn.getReceiver() and - not hasFlowToComparison(cn.getResult(0)) - ) - or - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("archive/tar", "Reader", "Read") 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) - } + /** Tracks taint flow for reasoning about decompression bomb vulnerabilities. */ + module Flow = TaintTracking::GlobalWithState; } diff --git a/go/ql/src/experimental/frameworks/DecompressionBombsCustomizations.qll b/go/ql/src/experimental/frameworks/DecompressionBombsCustomizations.qll new file mode 100644 index 00000000000..1d70b71df11 --- /dev/null +++ b/go/ql/src/experimental/frameworks/DecompressionBombsCustomizations.qll @@ -0,0 +1,772 @@ +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. + */ + abstract predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode); + + /** + * 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 + */ + 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" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/zstd` package + */ + module KlauspostZstd { + class TheSink extends Sink { + TheSink() { + exists(Method m | + m.hasQualifiedName("github.com/klauspost/compress/zstd", "Decoder", "DecodeAll") + | + this = m.getACall().getReceiver() + ) + or + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/klauspost/compress/zstd", "Decoder", ["WriteTo", "Read"]) 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/zstd", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "ZstdNewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * 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" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * 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 + */ + module UlikunitzXz { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/ulikunitz/xz", "Reader", "Read") 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/ulikunitz/xz", "NewReader") and call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "XzNewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `compress/gzip` package + */ + module CompressGzipBombs { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("compress/gzip", "Reader", "Read") 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("compress/gzip", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "GzipNewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/gzip` package + */ + module KlauspostGzipAndPgzip { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName(["github.com/klauspost/compress/gzip", "github.com/klauspost/pgzip"], + "Reader", ["Read", "WriteTo"]) 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/pgzip", "NewReader") and + call = f.getACall() and + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "PgzipNewReader" + or + 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" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `compress/bzip2` package + */ + module CompressBzip2 { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("compress/bzip2", "reader", "Read") 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("compress/bzip2", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "Bzip2NewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/dsnet/compress/bzip2` package + */ + module DsnetBzip2 { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/dsnet/compress/bzip2", "Reader", "Read") 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/dsnet/compress/bzip2", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "Bzip2NewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/dsnet/compress/flate` package + */ + module DsnetFlate { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/dsnet/compress/flate", "Reader", "Read") 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/dsnet/compress/flate", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "FlateNewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `compress/flate` package + */ + module CompressFlateBombs { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("compress/flate", "decompressor", "Read") 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("compress/flate", ["NewReaderDict", "NewReader"]) and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "FlateNewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/flate` package + */ + module KlauspostFlate { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/klauspost/compress/flate", "decompressor", "Read") 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/flate", ["NewReaderDict", "NewReader"]) and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "FlateNewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/zlib` package + */ + module KlauspostZlib { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/klauspost/compress/zlib", "reader", "Read") 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/zlib", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "ZlibNewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `compress/zlib` package + */ + module CompressZlibBombs { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("compress/zlib", "reader", "Read") 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("compress/zlib", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "ZlibNewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/golang/snappy` package + */ + module GolangSnappy { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/golang/snappy", "Reader", ["Read", "ReadByte"]) 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/golang/snappy", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "SnappyNewReader" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bombs sinks and additional flow steps for `github.com/klauspost/compress/snappy` package + */ + 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" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/s2` package + */ + module KlauspostS2 { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/klauspost/compress/s2", "Reader", + ["DecodeConcurrent", "ReadByte", "Read"]) 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" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + none() + } + } + } + + /** + * Provides decompression bomb sinks for packages that use some standard IO interfaces/methods for reading decompressed data + */ + module GeneralReadIoSink { + class TheSink extends Sink { + TheSink() { + 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.hasQualifiedName("io", "Reader", "Read") and cn = m.getACall() + | + this = cn.getReceiver() and + not hasFlowToComparison(cn.getResult(0)) + ) + or + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("archive/tar", "Reader", "Read") 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/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll b/go/ql/src/experimental/frameworks/MultipartAndFormRemoteSource.qll similarity index 100% rename from go/ql/src/experimental/CWE-522-DecompressionBombs/MultipartAndFormRemoteSource.qll rename to go/ql/src/experimental/frameworks/MultipartAndFormRemoteSource.qll From b2edf6cf3eaa3d6c6d3ea68fb33ead5de4a66adb Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Mon, 15 Jan 2024 00:27:06 +0400 Subject: [PATCH 049/430] add Inline Expectations Test, update tests accordingly --- .../DecompressionBombTest.expected | 3 + .../DecompressionBombTest.ql | 19 + .../DecompressionBombs.expected | 877 +++++++++--------- .../CWE-522-DecompressionBombs/test.go | 457 +++++++-- 4 files changed, 820 insertions(+), 536 deletions(-) create mode 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.expected create mode 100644 go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.ql 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..943ec10e434 --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.expected @@ -0,0 +1,3 @@ +testFailures +| test.go:637:31:637:57 | comment | Missing result:hasValueFlow="tarRead" | +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 diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected index 8246bc580a0..ea2f3578b38 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -1,459 +1,432 @@ edges -| test.go:57:15:57:26 | selection of Body | test.go:151:19:151:22 | definition of file | -| test.go:58:16:58:27 | selection of Body | test.go:162:20:162:23 | definition of file | -| test.go:59:16:59:46 | call to FormValue | test.go:121:20:121:27 | definition of filename | -| test.go:62:13:62:24 | selection of Body | test.go:112:17:112:19 | definition of src | -| test.go:63:13:63:24 | selection of Body | test.go:174:17:174:20 | definition of file | -| test.go:64:8:64:19 | selection of Body | test.go:185:12:185:15 | definition of file | -| test.go:65:8:65:19 | selection of Body | test.go:195:12:195:15 | definition of file | -| test.go:66:17:66:28 | selection of Body | test.go:205:21:205:24 | definition of file | -| test.go:67:13:67:24 | selection of Body | test.go:215:17:215:20 | definition of file | -| test.go:68:16:68:27 | selection of Body | test.go:225:20:225:23 | definition of file | -| test.go:69:7:69:18 | selection of Body | test.go:235:11:235:14 | definition of file | -| test.go:70:9:70:20 | selection of Body | test.go:245:13:245:16 | definition of file | -| test.go:71:18:71:29 | selection of Body | test.go:256:22:256:25 | definition of file | -| test.go:72:5:72:16 | selection of Body | test.go:269:9:269:12 | definition of file | -| test.go:73:7:73:18 | selection of Body | test.go:281:11:281:14 | definition of file | -| test.go:74:16:74:27 | selection of Body | test.go:291:20:291:23 | definition of file | -| test.go:75:16:75:27 | selection of Body | test.go:303:20:303:23 | definition of file | -| test.go:76:17:76:28 | selection of Body | test.go:315:21:315:24 | definition of file | -| test.go:77:15:77:26 | selection of Body | test.go:329:19:329:22 | definition of file | -| test.go:78:5:78:16 | selection of Body | test.go:339:9:339:12 | definition of file | -| test.go:112:17:112:19 | definition of src | test.go:113:29:113:31 | src | -| test.go:113:2:113:32 | ... := ...[0] | test.go:117:11:117:26 | type conversion | -| test.go:113:29:113:31 | src | test.go:113:2:113:32 | ... := ...[0] | -| test.go:117:11:117:26 | type conversion | test.go:118:23:118:28 | newSrc | -| test.go:121:20:121:27 | definition of filename | test.go:123:25:123:32 | filename | -| test.go:121:20:121:27 | definition of filename | test.go:136:43:136:50 | filename | -| test.go:123:2:123:33 | ... := ...[0] | test.go:125:12:125:12 | f | -| test.go:123:25:123:32 | filename | test.go:123:2:123:33 | ... := ...[0] | -| test.go:125:3:125:19 | ... := ...[0] | test.go:127:37:127:38 | rc | -| test.go:125:12:125:12 | f | test.go:125:3:125:19 | ... := ...[0] | -| test.go:136:2:136:51 | ... := ...[0] | test.go:137:20:137:29 | implicit dereference | -| test.go:136:43:136:50 | filename | test.go:136:2:136:51 | ... := ...[0] | -| test.go:137:20:137:29 | implicit dereference | test.go:137:20:137:29 | implicit dereference | -| test.go:137:20:137:29 | implicit dereference | test.go:137:20:137:29 | implicit read of field Reader | -| test.go:137:20:137:29 | implicit read of field Reader | test.go:138:12:138:12 | f | -| test.go:138:12:138:12 | f | test.go:138:12:138:19 | call to Open | -| test.go:138:12:138:19 | call to Open | test.go:140:37:140:38 | rc | -| test.go:151:19:151:22 | definition of file | test.go:152:25:152:28 | file | -| test.go:152:2:152:29 | ... := ...[0] | test.go:153:48:153:52 | file1 | -| test.go:152:25:152:28 | file | test.go:152:2:152:29 | ... := ...[0] | -| test.go:153:2:153:69 | ... := ...[0] | test.go:156:26:156:29 | file | -| test.go:153:32:153:53 | call to NewReader | test.go:153:2:153:69 | ... := ...[0] | -| test.go:153:48:153:52 | file1 | test.go:153:32:153:53 | call to NewReader | -| test.go:156:3:156:36 | ... := ...[0] | test.go:157:36:157:51 | fileReaderCloser | -| test.go:156:26:156:29 | file | test.go:156:3:156:36 | ... := ...[0] | -| test.go:162:20:162:23 | definition of file | test.go:163:25:163:28 | file | -| test.go:163:2:163:29 | ... := ...[0] | test.go:164:66:164:70 | file2 | -| test.go:163:25:163:28 | file | test.go:163:2:163:29 | ... := ...[0] | -| test.go:164:2:164:87 | ... := ...[0] | test.go:168:26:168:29 | file | -| test.go:164:50:164:71 | call to NewReader | test.go:164:2:164:87 | ... := ...[0] | -| test.go:164:66:164:70 | file2 | test.go:164:50:164:71 | call to NewReader | -| test.go:168:26:168:29 | file | test.go:168:26:168:36 | call to Open | -| test.go:168:26:168:36 | call to Open | test.go:169:36:169:51 | fileReaderCloser | -| test.go:174:17:174:20 | definition of file | test.go:177:40:177:43 | file | -| test.go:177:2:177:72 | ... := ...[0] | test.go:179:2:179:11 | bzip2dsnet | -| test.go:177:2:177:72 | ... := ...[0] | test.go:180:26:180:35 | bzip2dsnet | -| test.go:177:40:177:43 | file | test.go:177:2:177:72 | ... := ...[0] | -| test.go:180:12:180:36 | call to NewReader | test.go:182:18:182:24 | tarRead | -| test.go:180:26:180:35 | bzip2dsnet | test.go:180:12:180:36 | call to NewReader | -| test.go:182:18:182:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:185:12:185:15 | definition of file | test.go:188:27:188:30 | file | -| test.go:188:11:188:31 | call to NewReader | test.go:190:2:190:6 | Bzip2 | -| test.go:188:11:188:31 | call to NewReader | test.go:191:26:191:30 | Bzip2 | -| test.go:188:27:188:30 | file | test.go:188:11:188:31 | call to NewReader | -| test.go:191:12:191:31 | call to NewReader | test.go:193:18:193:24 | tarRead | -| test.go:191:26:191:30 | Bzip2 | test.go:191:12:191:31 | call to NewReader | -| test.go:193:18:193:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:195:12:195:15 | definition of file | test.go:198:27:198:30 | file | -| test.go:198:11:198:31 | call to NewReader | test.go:200:2:200:6 | Flate | -| test.go:198:11:198:31 | call to NewReader | test.go:201:26:201:30 | Flate | -| test.go:198:27:198:30 | file | test.go:198:11:198:31 | call to NewReader | -| test.go:201:12:201:31 | call to NewReader | test.go:203:18:203:24 | tarRead | -| test.go:201:26:201:30 | Flate | test.go:201:12:201:31 | call to NewReader | -| test.go:203:18:203:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:205:21:205:24 | definition of file | test.go:208:44:208:47 | file | -| test.go:208:19:208:48 | call to NewReader | test.go:210:2:210:14 | zlibklauspost | -| test.go:208:19:208:48 | call to NewReader | test.go:211:26:211:38 | zlibklauspost | -| test.go:208:44:208:47 | file | test.go:208:19:208:48 | call to NewReader | -| test.go:211:12:211:39 | call to NewReader | test.go:213:18:213:24 | tarRead | -| test.go:211:26:211:38 | zlibklauspost | test.go:211:12:211:39 | call to NewReader | -| test.go:213:18:213:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:215:17:215:20 | definition of file | test.go:218:40:218:43 | file | -| test.go:218:2:218:72 | ... := ...[0] | test.go:220:2:220:11 | flatedsnet | -| test.go:218:2:218:72 | ... := ...[0] | test.go:221:26:221:35 | flatedsnet | -| test.go:218:40:218:43 | file | test.go:218:2:218:72 | ... := ...[0] | -| test.go:221:12:221:36 | call to NewReader | test.go:223:18:223:24 | tarRead | -| test.go:221:26:221:35 | flatedsnet | test.go:221:12:221:36 | call to NewReader | -| test.go:223:18:223:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:225:20:225:23 | definition of file | test.go:228:46:228:49 | file | -| test.go:228:2:228:50 | ... := ...[0] | test.go:230:2:230:14 | zlibklauspost | -| test.go:228:2:228:50 | ... := ...[0] | test.go:231:26:231:38 | zlibklauspost | -| test.go:228:46:228:49 | file | test.go:228:2:228:50 | ... := ...[0] | -| test.go:231:12:231:39 | call to NewReader | test.go:233:18:233:24 | tarRead | -| test.go:231:26:231:38 | zlibklauspost | test.go:231:12:231:39 | call to NewReader | -| test.go:233:18:233:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:235:11:235:14 | definition of file | test.go:238:28:238:31 | file | -| test.go:238:2:238:32 | ... := ...[0] | test.go:240:2:240:5 | Zlib | -| test.go:238:2:238:32 | ... := ...[0] | test.go:241:26:241:29 | Zlib | -| test.go:238:28:238:31 | file | test.go:238:2:238:32 | ... := ...[0] | -| test.go:241:12:241:30 | call to NewReader | test.go:243:18:243:24 | tarRead | -| test.go:241:26:241:29 | Zlib | test.go:241:12:241:30 | call to NewReader | -| test.go:243:18:243:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:245:13:245:16 | definition of file | test.go:248:29:248:32 | file | -| test.go:248:12:248:33 | call to NewReader | test.go:250:2:250:7 | Snappy | -| test.go:248:12:248:33 | call to NewReader | test.go:251:2:251:7 | Snappy | -| test.go:248:12:248:33 | call to NewReader | test.go:252:26:252:31 | Snappy | -| test.go:248:29:248:32 | file | test.go:248:12:248:33 | call to NewReader | -| test.go:252:12:252:32 | call to NewReader | test.go:254:18:254:24 | tarRead | -| test.go:252:26:252:31 | Snappy | test.go:252:12:252:32 | call to NewReader | -| test.go:254:18:254:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:256:22:256:25 | definition of file | test.go:259:47:259:50 | file | -| test.go:259:21:259:51 | call to NewReader | test.go:261:2:261:16 | snappyklauspost | -| test.go:259:21:259:51 | call to NewReader | test.go:263:2:263:16 | snappyklauspost | -| test.go:259:21:259:51 | call to NewReader | test.go:264:2:264:16 | snappyklauspost | -| test.go:259:21:259:51 | call to NewReader | test.go:265:26:265:40 | snappyklauspost | -| test.go:259:47:259:50 | file | test.go:259:21:259:51 | call to NewReader | -| test.go:265:12:265:41 | call to NewReader | test.go:267:18:267:24 | tarRead | -| test.go:265:26:265:40 | snappyklauspost | test.go:265:12:265:41 | call to NewReader | -| test.go:267:18:267:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:269:9:269:12 | definition of file | test.go:272:21:272:24 | file | -| test.go:272:8:272:25 | call to NewReader | test.go:274:2:274:3 | S2 | -| test.go:272:8:272:25 | call to NewReader | test.go:276:2:276:3 | S2 | -| test.go:272:8:272:25 | call to NewReader | test.go:277:26:277:27 | S2 | -| test.go:272:21:272:24 | file | test.go:272:8:272:25 | call to NewReader | -| test.go:277:12:277:28 | call to NewReader | test.go:279:18:279:24 | tarRead | -| test.go:277:26:277:27 | S2 | test.go:277:12:277:28 | call to NewReader | -| test.go:279:18:279:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:281:11:281:14 | definition of file | test.go:284:32:284:35 | file | -| test.go:284:2:284:36 | ... := ...[0] | test.go:286:2:286:9 | gzipRead | -| test.go:284:2:284:36 | ... := ...[0] | test.go:287:26:287:33 | gzipRead | -| test.go:284:32:284:35 | file | test.go:284:2:284:36 | ... := ...[0] | -| test.go:287:12:287:34 | call to NewReader | test.go:289:18:289:24 | tarRead | -| test.go:287:26:287:33 | gzipRead | test.go:287:12:287:34 | call to NewReader | -| test.go:289:18:289:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:291:20:291:23 | definition of file | test.go:294:46:294:49 | file | -| test.go:294:2:294:50 | ... := ...[0] | test.go:296:2:296:14 | gzipklauspost | -| test.go:294:2:294:50 | ... := ...[0] | test.go:298:2:298:14 | gzipklauspost | -| test.go:294:2:294:50 | ... := ...[0] | test.go:299:26:299:38 | gzipklauspost | -| test.go:294:46:294:49 | file | test.go:294:2:294:50 | ... := ...[0] | -| test.go:299:12:299:39 | call to NewReader | test.go:301:18:301:24 | tarRead | -| test.go:299:26:299:38 | gzipklauspost | test.go:299:12:299:39 | call to NewReader | -| test.go:301:18:301:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:303:20:303:23 | definition of file | test.go:306:44:306:47 | file | -| test.go:306:2:306:48 | ... := ...[0] | test.go:308:2:308:11 | pgzippgzip | -| test.go:306:2:306:48 | ... := ...[0] | test.go:310:2:310:11 | pgzippgzip | -| test.go:306:2:306:48 | ... := ...[0] | test.go:311:26:311:35 | pgzippgzip | -| test.go:306:44:306:47 | file | test.go:306:2:306:48 | ... := ...[0] | -| test.go:311:12:311:36 | call to NewReader | test.go:313:18:313:24 | tarRead | -| test.go:311:26:311:35 | pgzippgzip | test.go:311:12:311:36 | call to NewReader | -| test.go:313:18:313:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:315:21:315:24 | definition of file | test.go:318:37:318:40 | file | -| test.go:318:2:318:41 | ... := ...[0] | test.go:320:2:320:5 | zstd | -| test.go:318:2:318:41 | ... := ...[0] | test.go:322:2:322:5 | zstd | -| test.go:318:2:318:41 | ... := ...[0] | test.go:324:2:324:5 | zstd | -| test.go:318:2:318:41 | ... := ...[0] | test.go:325:26:325:29 | zstd | -| test.go:318:37:318:40 | file | test.go:318:2:318:41 | ... := ...[0] | -| test.go:325:12:325:30 | call to NewReader | test.go:327:18:327:24 | tarRead | -| test.go:325:26:325:29 | zstd | test.go:325:12:325:30 | call to NewReader | -| test.go:327:18:327:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:329:19:329:22 | definition of file | test.go:332:32:332:35 | file | -| test.go:332:10:332:36 | call to NewReader | test.go:334:2:334:5 | zstd | -| test.go:332:10:332:36 | call to NewReader | test.go:335:26:335:29 | zstd | -| test.go:332:32:332:35 | file | test.go:332:10:332:36 | call to NewReader | -| test.go:335:12:335:30 | call to NewReader | test.go:337:18:337:24 | tarRead | -| test.go:335:26:335:29 | zstd | test.go:335:12:335:30 | call to NewReader | -| test.go:337:18:337:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:339:9:339:12 | definition of file | test.go:342:28:342:31 | file | -| test.go:342:2:342:32 | ... := ...[0] | test.go:344:2:344:7 | xzRead | -| test.go:342:2:342:32 | ... := ...[0] | test.go:345:26:345:31 | xzRead | -| test.go:342:28:342:31 | file | test.go:342:2:342:32 | ... := ...[0] | -| test.go:345:12:345:32 | call to NewReader | test.go:347:18:347:24 | tarRead | -| test.go:345:26:345:31 | xzRead | test.go:345:12:345:32 | call to NewReader | -| test.go:347:18:347:24 | tarRead | test.go:350:22:350:28 | definition of tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:352:2:352:8 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:352:2:352:8 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:352:2:352:8 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:352:2:352:8 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:352:2:352:8 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:352:2:352:8 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:352:2:352:8 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:352:2:352:8 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:352:2:352:8 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | -| test.go:350:22:350:28 | definition of tarRead | test.go:362:25:362:31 | tarRead | +| test.go:57:15:57:26 | selection of Body | test.go:159:19:159:22 | definition of file | +| test.go:58:24:58:35 | selection of Body | test.go:170:28:170:31 | definition of file | +| test.go:59:16:59:46 | call to FormValue | test.go:129:20:129:27 | definition of filename | +| test.go:60:13:60:24 | selection of Body | test.go:182:17:182:20 | definition of file | +| test.go:61:8:61:19 | selection of Body | test.go:209:12:209:15 | definition of file | +| test.go:62:8:62:19 | selection of Body | test.go:234:12:234:15 | definition of file | +| test.go:63:17:63:28 | selection of Body | test.go:259:21:259:24 | definition of file | +| test.go:64:13:64:24 | selection of Body | test.go:284:17:284:20 | definition of file | +| test.go:65:16:65:27 | selection of Body | test.go:309:20:309:23 | definition of file | +| test.go:66:7:66:18 | selection of Body | test.go:334:11:334:14 | definition of file | +| test.go:67:9:67:20 | selection of Body | test.go:359:13:359:16 | definition of file | +| test.go:68:18:68:29 | selection of Body | test.go:385:22:385:25 | definition of file | +| test.go:69:5:69:16 | selection of Body | test.go:413:9:413:12 | definition of file | +| test.go:70:7:70:18 | selection of Body | test.go:447:11:447:14 | definition of file | +| test.go:71:15:71:26 | selection of Body | test.go:440:19:440:21 | definition of src | +| test.go:72:16:72:27 | selection of Body | test.go:472:20:472:23 | definition of file | +| test.go:73:16:73:27 | selection of Body | test.go:499:20:499:23 | definition of file | +| test.go:74:17:74:28 | selection of Body | test.go:526:21:526:24 | definition of file | +| test.go:75:15:75:26 | selection of Body | test.go:555:19:555:22 | definition of file | +| test.go:76:5:76:16 | selection of Body | test.go:580:9:580:12 | definition of file | +| test.go:129:20:129:27 | definition of filename | test.go:131:33:131:40 | filename | +| test.go:129:20:129:27 | definition of filename | test.go:144:51:144:58 | filename | +| test.go:131:2:131:41 | ... := ...[0] | test.go:133:12:133:12 | f | +| test.go:131:33:131:40 | filename | test.go:131:2:131:41 | ... := ...[0] | +| test.go:133:3:133:19 | ... := ...[0] | test.go:135:37:135:38 | rc | +| test.go:133:12:133:12 | f | test.go:133:3:133:19 | ... := ...[0] | +| test.go:144:2:144:59 | ... := ...[0] | test.go:145:20:145:37 | implicit dereference | +| test.go:144:51:144:58 | filename | test.go:144:2:144:59 | ... := ...[0] | +| test.go:145:20:145:37 | implicit dereference | test.go:145:20:145:37 | implicit dereference | +| test.go:145:20:145:37 | implicit dereference | test.go:145:20:145:37 | implicit read of field Reader | +| test.go:145:20:145:37 | implicit read of field Reader | test.go:146:12:146:12 | f | +| test.go:146:12:146:12 | f | test.go:146:12:146:19 | call to Open | +| test.go:146:12:146:19 | call to Open | test.go:148:37:148:38 | rc | +| test.go:159:19:159:22 | definition of file | test.go:160:25:160:28 | file | +| test.go:160:2:160:29 | ... := ...[0] | test.go:161:48:161:52 | file1 | +| test.go:160:25:160:28 | file | test.go:160:2:160:29 | ... := ...[0] | +| test.go:161:2:161:69 | ... := ...[0] | test.go:164:26:164:29 | file | +| test.go:161:32:161:53 | call to NewReader | test.go:161:2:161:69 | ... := ...[0] | +| test.go:161:48:161:52 | file1 | test.go:161:32:161:53 | call to NewReader | +| test.go:164:3:164:36 | ... := ...[0] | test.go:165:36:165:51 | fileReaderCloser | +| test.go:164:26:164:29 | file | test.go:164:3:164:36 | ... := ...[0] | +| test.go:170:28:170:31 | definition of file | test.go:171:25:171:28 | file | +| test.go:171:2:171:29 | ... := ...[0] | test.go:172:57:172:61 | file2 | +| test.go:171:25:171:28 | file | test.go:171:2:171:29 | ... := ...[0] | +| test.go:172:2:172:78 | ... := ...[0] | test.go:176:26:176:29 | file | +| test.go:172:41:172:62 | call to NewReader | test.go:172:2:172:78 | ... := ...[0] | +| test.go:172:57:172:61 | file2 | test.go:172:41:172:62 | call to NewReader | +| test.go:176:26:176:29 | file | test.go:176:26:176:36 | call to Open | +| test.go:176:26:176:36 | call to Open | test.go:177:36:177:51 | fileReaderCloser | +| test.go:182:17:182:20 | definition of file | test.go:185:41:185:44 | file | +| test.go:185:2:185:73 | ... := ...[0] | test.go:187:2:187:12 | bzip2Reader | +| test.go:185:2:185:73 | ... := ...[0] | test.go:188:26:188:36 | bzip2Reader | +| test.go:185:41:185:44 | file | test.go:185:2:185:73 | ... := ...[0] | +| test.go:188:12:188:37 | call to NewReader | test.go:190:18:190:24 | tarRead | +| test.go:188:26:188:36 | bzip2Reader | test.go:188:12:188:37 | call to NewReader | +| test.go:190:18:190:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:209:12:209:15 | definition of file | test.go:212:33:212:36 | file | +| test.go:212:17:212:37 | call to NewReader | test.go:214:2:214:12 | bzip2Reader | +| test.go:212:17:212:37 | call to NewReader | test.go:215:26:215:36 | bzip2Reader | +| test.go:212:33:212:36 | file | test.go:212:17:212:37 | call to NewReader | +| test.go:215:12:215:37 | call to NewReader | test.go:217:18:217:24 | tarRead | +| test.go:215:26:215:36 | bzip2Reader | test.go:215:12:215:37 | call to NewReader | +| test.go:217:18:217:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:234:12:234:15 | definition of file | test.go:237:33:237:36 | file | +| test.go:237:17:237:37 | call to NewReader | test.go:239:2:239:12 | flateReader | +| test.go:237:17:237:37 | call to NewReader | test.go:240:26:240:36 | flateReader | +| test.go:237:33:237:36 | file | test.go:237:17:237:37 | call to NewReader | +| test.go:240:12:240:37 | call to NewReader | test.go:242:18:242:24 | tarRead | +| test.go:240:26:240:36 | flateReader | test.go:240:12:240:37 | call to NewReader | +| test.go:242:18:242:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:259:21:259:24 | definition of file | test.go:262:42:262:45 | file | +| test.go:262:17:262:46 | call to NewReader | test.go:264:2:264:12 | flateReader | +| test.go:262:17:262:46 | call to NewReader | test.go:265:26:265:36 | flateReader | +| test.go:262:42:262:45 | file | test.go:262:17:262:46 | call to NewReader | +| test.go:265:12:265:37 | call to NewReader | test.go:267:18:267:24 | tarRead | +| test.go:265:26:265:36 | flateReader | test.go:265:12:265:37 | call to NewReader | +| test.go:267:18:267:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:284:17:284:20 | definition of file | test.go:287:41:287:44 | file | +| test.go:287:2:287:73 | ... := ...[0] | test.go:289:2:289:12 | flateReader | +| test.go:287:2:287:73 | ... := ...[0] | test.go:290:26:290:36 | flateReader | +| test.go:287:41:287:44 | file | test.go:287:2:287:73 | ... := ...[0] | +| test.go:290:12:290:37 | call to NewReader | test.go:292:18:292:24 | tarRead | +| test.go:290:26:290:36 | flateReader | test.go:290:12:290:37 | call to NewReader | +| test.go:292:18:292:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:309:20:309:23 | definition of file | test.go:312:43:312:46 | file | +| test.go:312:2:312:47 | ... := ...[0] | test.go:314:2:314:11 | zlibReader | +| test.go:312:2:312:47 | ... := ...[0] | test.go:315:26:315:35 | zlibReader | +| test.go:312:43:312:46 | file | test.go:312:2:312:47 | ... := ...[0] | +| test.go:315:12:315:36 | call to NewReader | test.go:317:18:317:24 | tarRead | +| test.go:315:26:315:35 | zlibReader | test.go:315:12:315:36 | call to NewReader | +| test.go:317:18:317:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:334:11:334:14 | definition of file | test.go:337:34:337:37 | file | +| test.go:337:2:337:38 | ... := ...[0] | test.go:339:2:339:11 | zlibReader | +| test.go:337:2:337:38 | ... := ...[0] | test.go:340:26:340:35 | zlibReader | +| test.go:337:34:337:37 | file | test.go:337:2:337:38 | ... := ...[0] | +| test.go:340:12:340:36 | call to NewReader | test.go:342:18:342:24 | tarRead | +| test.go:340:26:340:35 | zlibReader | test.go:340:12:340:36 | call to NewReader | +| test.go:342:18:342:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:359:13:359:16 | definition of file | test.go:362:35:362:38 | file | +| test.go:362:18:362:39 | call to NewReader | test.go:364:2:364:13 | snappyReader | +| test.go:362:18:362:39 | call to NewReader | test.go:365:2:365:13 | snappyReader | +| test.go:362:18:362:39 | call to NewReader | test.go:366:26:366:37 | snappyReader | +| test.go:362:35:362:38 | file | test.go:362:18:362:39 | call to NewReader | +| test.go:366:12:366:38 | call to NewReader | test.go:368:18:368:24 | tarRead | +| test.go:366:26:366:37 | snappyReader | test.go:366:12:366:38 | call to NewReader | +| test.go:368:18:368:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:385:22:385:25 | definition of file | test.go:388:44:388:47 | file | +| test.go:388:18:388:48 | call to NewReader | test.go:390:2:390:13 | snappyReader | +| test.go:388:18:388:48 | call to NewReader | test.go:392:2:392:13 | snappyReader | +| test.go:388:18:388:48 | call to NewReader | test.go:393:2:393:13 | snappyReader | +| test.go:388:18:388:48 | call to NewReader | test.go:394:26:394:37 | snappyReader | +| test.go:388:44:388:47 | file | test.go:388:18:388:48 | call to NewReader | +| test.go:394:12:394:38 | call to NewReader | test.go:396:18:396:24 | tarRead | +| test.go:394:26:394:37 | snappyReader | test.go:394:12:394:38 | call to NewReader | +| test.go:396:18:396:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:413:9:413:12 | definition of file | test.go:416:27:416:30 | file | +| test.go:416:14:416:31 | call to NewReader | test.go:418:2:418:9 | s2Reader | +| test.go:416:14:416:31 | call to NewReader | test.go:420:2:420:9 | s2Reader | +| test.go:416:14:416:31 | call to NewReader | test.go:421:26:421:33 | s2Reader | +| test.go:416:27:416:30 | file | test.go:416:14:416:31 | call to NewReader | +| test.go:421:12:421:34 | call to NewReader | test.go:423:18:423:24 | tarRead | +| test.go:421:26:421:33 | s2Reader | test.go:421:12:421:34 | call to NewReader | +| test.go:423:18:423:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:440:19:440:21 | definition of src | test.go:441:34:441:36 | src | +| test.go:441:2:441:37 | ... := ...[0] | test.go:444:12:444:32 | type conversion | +| test.go:441:34:441:36 | src | test.go:441:2:441:37 | ... := ...[0] | +| test.go:444:12:444:32 | type conversion | test.go:445:23:445:28 | newSrc | +| test.go:447:11:447:14 | definition of file | test.go:450:34:450:37 | file | +| test.go:450:2:450:38 | ... := ...[0] | test.go:452:2:452:11 | gzipReader | +| test.go:450:2:450:38 | ... := ...[0] | test.go:453:26:453:35 | gzipReader | +| test.go:450:34:450:37 | file | test.go:450:2:450:38 | ... := ...[0] | +| test.go:453:12:453:36 | call to NewReader | test.go:455:18:455:24 | tarRead | +| test.go:453:26:453:35 | gzipReader | test.go:453:12:453:36 | call to NewReader | +| test.go:455:18:455:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:472:20:472:23 | definition of file | test.go:475:43:475:46 | file | +| test.go:475:2:475:47 | ... := ...[0] | test.go:477:2:477:11 | gzipReader | +| test.go:475:2:475:47 | ... := ...[0] | test.go:479:2:479:11 | gzipReader | +| test.go:475:2:475:47 | ... := ...[0] | test.go:480:26:480:35 | gzipReader | +| test.go:475:43:475:46 | file | test.go:475:2:475:47 | ... := ...[0] | +| test.go:480:12:480:36 | call to NewReader | test.go:482:18:482:24 | tarRead | +| test.go:480:26:480:35 | gzipReader | test.go:480:12:480:36 | call to NewReader | +| test.go:482:18:482:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:499:20:499:23 | definition of file | test.go:502:45:502:48 | file | +| test.go:502:2:502:49 | ... := ...[0] | test.go:504:2:504:12 | pgzipReader | +| test.go:502:2:502:49 | ... := ...[0] | test.go:506:2:506:12 | pgzipReader | +| test.go:502:2:502:49 | ... := ...[0] | test.go:507:26:507:36 | pgzipReader | +| test.go:502:45:502:48 | file | test.go:502:2:502:49 | ... := ...[0] | +| test.go:507:12:507:37 | call to NewReader | test.go:509:18:509:24 | tarRead | +| test.go:507:26:507:36 | pgzipReader | test.go:507:12:507:37 | call to NewReader | +| test.go:509:18:509:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:526:21:526:24 | definition of file | test.go:529:43:529:46 | file | +| test.go:529:2:529:47 | ... := ...[0] | test.go:531:2:531:11 | zstdReader | +| test.go:529:2:529:47 | ... := ...[0] | test.go:533:2:533:11 | zstdReader | +| test.go:529:2:529:47 | ... := ...[0] | test.go:535:2:535:11 | zstdReader | +| test.go:529:2:529:47 | ... := ...[0] | test.go:536:26:536:35 | zstdReader | +| test.go:529:43:529:46 | file | test.go:529:2:529:47 | ... := ...[0] | +| test.go:536:12:536:36 | call to NewReader | test.go:538:18:538:24 | tarRead | +| test.go:536:26:536:35 | zstdReader | test.go:536:12:536:36 | call to NewReader | +| test.go:538:18:538:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:555:19:555:22 | definition of file | test.go:558:38:558:41 | file | +| test.go:558:16:558:42 | call to NewReader | test.go:560:2:560:11 | zstdReader | +| test.go:558:16:558:42 | call to NewReader | test.go:561:26:561:35 | zstdReader | +| test.go:558:38:558:41 | file | test.go:558:16:558:42 | call to NewReader | +| test.go:561:12:561:36 | call to NewReader | test.go:563:18:563:24 | tarRead | +| test.go:561:26:561:35 | zstdReader | test.go:561:12:561:36 | call to NewReader | +| test.go:563:18:563:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:580:9:580:12 | definition of file | test.go:583:30:583:33 | file | +| test.go:583:2:583:34 | ... := ...[0] | test.go:585:2:585:9 | xzReader | +| test.go:583:2:583:34 | ... := ...[0] | test.go:586:26:586:33 | xzReader | +| test.go:583:30:583:33 | file | test.go:583:2:583:34 | ... := ...[0] | +| test.go:586:12:586:34 | call to NewReader | test.go:589:18:589:24 | tarRead | +| test.go:586:12:586:34 | call to NewReader | test.go:590:19:590:25 | tarRead | +| test.go:586:26:586:33 | xzReader | test.go:586:12:586:34 | call to NewReader | +| test.go:589:18:589:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:590:19:590:25 | tarRead | test.go:627:23:627:29 | definition of tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:627:23:627:29 | definition of tarRead | test.go:629:2:629:8 | tarRead | nodes | test.go:57:15:57:26 | selection of Body | semmle.label | selection of Body | -| test.go:58:16:58:27 | selection of Body | semmle.label | selection of Body | +| test.go:58:24:58:35 | selection of Body | semmle.label | selection of Body | | test.go:59:16:59:46 | call to FormValue | semmle.label | call to FormValue | -| test.go:62:13:62:24 | selection of Body | semmle.label | selection of Body | -| test.go:63:13:63: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:65:8:65:19 | selection of Body | semmle.label | selection of Body | -| test.go:66:17:66:28 | selection of Body | semmle.label | selection of Body | -| test.go:67:13:67:24 | selection of Body | semmle.label | selection of Body | -| test.go:68:16:68:27 | selection of Body | semmle.label | selection of Body | -| test.go:69:7:69:18 | selection of Body | semmle.label | selection of Body | -| test.go:70:9:70:20 | selection of Body | semmle.label | selection of Body | -| test.go:71:18:71:29 | selection of Body | semmle.label | selection of Body | -| test.go:72:5:72:16 | selection of Body | semmle.label | selection of Body | -| test.go:73:7:73:18 | selection of Body | semmle.label | selection of Body | -| test.go:74:16:74:27 | selection of Body | semmle.label | selection of Body | -| test.go:75:16:75:27 | selection of Body | semmle.label | selection of Body | -| test.go:76:17:76:28 | selection of Body | semmle.label | selection of Body | -| test.go:77:15:77:26 | selection of Body | semmle.label | selection of Body | -| test.go:78:5:78:16 | selection of Body | semmle.label | selection of Body | -| test.go:112:17:112:19 | definition of src | semmle.label | definition of src | -| test.go:113:2:113:32 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:113:29:113:31 | src | semmle.label | src | -| test.go:117:11:117:26 | type conversion | semmle.label | type conversion | -| test.go:118:23:118:28 | newSrc | semmle.label | newSrc | -| test.go:121:20:121:27 | definition of filename | semmle.label | definition of filename | -| test.go:123:2:123:33 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:123:25:123:32 | filename | semmle.label | filename | -| test.go:125:3:125:19 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:125:12:125:12 | f | semmle.label | f | -| test.go:127:37:127:38 | rc | semmle.label | rc | -| test.go:136:2:136:51 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:136:43:136:50 | filename | semmle.label | filename | -| test.go:137:20:137:29 | implicit dereference | semmle.label | implicit dereference | -| test.go:137:20:137:29 | implicit read of field Reader | semmle.label | implicit read of field Reader | -| test.go:138:12:138:12 | f | semmle.label | f | -| test.go:138:12:138:19 | call to Open | semmle.label | call to Open | -| test.go:140:37:140:38 | rc | semmle.label | rc | -| test.go:151:19:151:22 | definition of file | semmle.label | definition of file | -| test.go:152:2:152:29 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:152:25:152:28 | file | semmle.label | file | -| test.go:153:2:153:69 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:153:32:153:53 | call to NewReader | semmle.label | call to NewReader | -| test.go:153:48:153:52 | file1 | semmle.label | file1 | -| test.go:156:3:156:36 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:156:26:156:29 | file | semmle.label | file | -| test.go:157:36:157:51 | fileReaderCloser | semmle.label | fileReaderCloser | -| test.go:162:20:162:23 | definition of file | semmle.label | definition of file | -| test.go:163:2:163:29 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:163:25:163:28 | file | semmle.label | file | -| test.go:164:2:164:87 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:164:50:164:71 | call to NewReader | semmle.label | call to NewReader | -| test.go:164:66:164:70 | file2 | semmle.label | file2 | -| test.go:168:26:168:29 | file | semmle.label | file | -| test.go:168:26:168:36 | call to Open | semmle.label | call to Open | -| test.go:169:36:169:51 | fileReaderCloser | semmle.label | fileReaderCloser | -| test.go:174:17:174:20 | definition of file | semmle.label | definition of file | -| test.go:177:2:177:72 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:177:40:177:43 | file | semmle.label | file | -| test.go:179:2:179:11 | bzip2dsnet | semmle.label | bzip2dsnet | -| test.go:180:12:180:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:180:26:180:35 | bzip2dsnet | semmle.label | bzip2dsnet | -| test.go:182:18:182:24 | tarRead | semmle.label | tarRead | -| test.go:185:12:185:15 | definition of file | semmle.label | definition of file | -| test.go:188:11:188:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:188:27:188:30 | file | semmle.label | file | -| test.go:190:2:190:6 | Bzip2 | semmle.label | Bzip2 | -| test.go:191:12:191:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:191:26:191:30 | Bzip2 | semmle.label | Bzip2 | -| test.go:193:18:193:24 | tarRead | semmle.label | tarRead | -| test.go:195:12:195:15 | definition of file | semmle.label | definition of file | -| test.go:198:11:198:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:198:27:198:30 | file | semmle.label | file | -| test.go:200:2:200:6 | Flate | semmle.label | Flate | -| test.go:201:12:201:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:201:26:201:30 | Flate | semmle.label | Flate | -| test.go:203:18:203:24 | tarRead | semmle.label | tarRead | -| test.go:205:21:205:24 | definition of file | semmle.label | definition of file | -| test.go:208:19:208:48 | call to NewReader | semmle.label | call to NewReader | -| test.go:208:44:208:47 | file | semmle.label | file | -| test.go:210:2:210:14 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:211:12:211:39 | call to NewReader | semmle.label | call to NewReader | -| test.go:211:26:211:38 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:213:18:213:24 | tarRead | semmle.label | tarRead | -| test.go:215:17:215:20 | definition of file | semmle.label | definition of file | -| test.go:218:2:218:72 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:218:40:218:43 | file | semmle.label | file | -| test.go:220:2:220:11 | flatedsnet | semmle.label | flatedsnet | -| test.go:221:12:221:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:221:26:221:35 | flatedsnet | semmle.label | flatedsnet | -| test.go:223:18:223:24 | tarRead | semmle.label | tarRead | -| test.go:225:20:225:23 | definition of file | semmle.label | definition of file | -| test.go:228:2:228:50 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:228:46:228:49 | file | semmle.label | file | -| test.go:230:2:230:14 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:231:12:231:39 | call to NewReader | semmle.label | call to NewReader | -| test.go:231:26:231:38 | zlibklauspost | semmle.label | zlibklauspost | -| test.go:233:18:233:24 | tarRead | semmle.label | tarRead | -| test.go:235:11:235:14 | definition of file | semmle.label | definition of file | -| test.go:238:2:238:32 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:238:28:238:31 | file | semmle.label | file | -| test.go:240:2:240:5 | Zlib | semmle.label | Zlib | -| test.go:241:12:241:30 | call to NewReader | semmle.label | call to NewReader | -| test.go:241:26:241:29 | Zlib | semmle.label | Zlib | -| test.go:243:18:243:24 | tarRead | semmle.label | tarRead | -| test.go:245:13:245:16 | definition of file | semmle.label | definition of file | -| test.go:248:12:248:33 | call to NewReader | semmle.label | call to NewReader | -| test.go:248:29:248:32 | file | semmle.label | file | -| test.go:250:2:250:7 | Snappy | semmle.label | Snappy | -| test.go:251:2:251:7 | Snappy | semmle.label | Snappy | -| test.go:252:12:252:32 | call to NewReader | semmle.label | call to NewReader | -| test.go:252:26:252:31 | Snappy | semmle.label | Snappy | -| test.go:254:18:254:24 | tarRead | semmle.label | tarRead | -| test.go:256:22:256:25 | definition of file | semmle.label | definition of file | -| test.go:259:21:259:51 | call to NewReader | semmle.label | call to NewReader | -| test.go:259:47:259:50 | file | semmle.label | file | -| test.go:261:2:261:16 | snappyklauspost | semmle.label | snappyklauspost | -| test.go:263:2:263:16 | snappyklauspost | semmle.label | snappyklauspost | -| test.go:264:2:264:16 | snappyklauspost | semmle.label | snappyklauspost | -| test.go:265:12:265:41 | call to NewReader | semmle.label | call to NewReader | -| test.go:265:26:265:40 | snappyklauspost | semmle.label | snappyklauspost | +| test.go:60:13:60:24 | selection of Body | semmle.label | selection of Body | +| test.go:61:8:61:19 | selection of Body | semmle.label | selection of Body | +| test.go:62:8:62:19 | selection of Body | semmle.label | selection of Body | +| test.go:63:17:63:28 | selection of Body | semmle.label | selection of Body | +| test.go:64:13:64:24 | selection of Body | semmle.label | selection of Body | +| test.go:65:16:65:27 | selection of Body | semmle.label | selection of Body | +| test.go:66:7:66:18 | selection of Body | semmle.label | selection of Body | +| test.go:67:9:67:20 | selection of Body | semmle.label | selection of Body | +| test.go:68:18:68:29 | selection of Body | semmle.label | selection of Body | +| test.go:69:5:69:16 | selection of Body | semmle.label | selection of Body | +| test.go:70:7:70:18 | selection of Body | semmle.label | selection of Body | +| test.go:71:15:71:26 | selection of Body | semmle.label | selection of Body | +| test.go:72:16:72:27 | selection of Body | semmle.label | selection of Body | +| test.go:73:16:73:27 | selection of Body | semmle.label | selection of Body | +| test.go:74:17:74:28 | selection of Body | semmle.label | selection of Body | +| test.go:75:15:75:26 | selection of Body | semmle.label | selection of Body | +| test.go:76:5:76:16 | selection of Body | semmle.label | selection of Body | +| test.go:129:20:129:27 | definition of filename | semmle.label | definition of filename | +| test.go:131:2:131:41 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:131:33:131:40 | filename | semmle.label | filename | +| test.go:133:3:133:19 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:133:12:133:12 | f | semmle.label | f | +| test.go:135:37:135:38 | rc | semmle.label | rc | +| test.go:144:2:144:59 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:144:51:144:58 | filename | semmle.label | filename | +| test.go:145:20:145:37 | implicit dereference | semmle.label | implicit dereference | +| test.go:145:20:145:37 | implicit read of field Reader | semmle.label | implicit read of field Reader | +| test.go:146:12:146:12 | f | semmle.label | f | +| test.go:146:12:146:19 | call to Open | semmle.label | call to Open | +| test.go:148:37:148:38 | rc | semmle.label | rc | +| test.go:159:19:159:22 | definition of file | semmle.label | definition of file | +| test.go:160:2:160:29 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:160:25:160:28 | file | semmle.label | file | +| test.go:161:2:161:69 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:161:32:161:53 | call to NewReader | semmle.label | call to NewReader | +| test.go:161:48:161:52 | file1 | semmle.label | file1 | +| test.go:164:3:164:36 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:164:26:164:29 | file | semmle.label | file | +| test.go:165:36:165:51 | fileReaderCloser | semmle.label | fileReaderCloser | +| test.go:170:28:170:31 | definition of file | semmle.label | definition of file | +| test.go:171:2:171:29 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:171:25:171:28 | file | semmle.label | file | +| test.go:172:2:172:78 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:172:41:172:62 | call to NewReader | semmle.label | call to NewReader | +| test.go:172:57:172:61 | file2 | semmle.label | file2 | +| test.go:176:26:176:29 | file | semmle.label | file | +| test.go:176:26:176:36 | call to Open | semmle.label | call to Open | +| test.go:177:36:177:51 | fileReaderCloser | semmle.label | fileReaderCloser | +| test.go:182:17:182:20 | definition of file | semmle.label | definition of file | +| test.go:185:2:185:73 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:185:41:185:44 | file | semmle.label | file | +| test.go:187:2:187:12 | bzip2Reader | semmle.label | bzip2Reader | +| test.go:188:12:188:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:188:26:188:36 | bzip2Reader | semmle.label | bzip2Reader | +| test.go:190:18:190:24 | tarRead | semmle.label | tarRead | +| test.go:209:12:209:15 | definition of file | semmle.label | definition of file | +| test.go:212:17:212:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:212:33:212:36 | file | semmle.label | file | +| test.go:214:2:214:12 | bzip2Reader | semmle.label | bzip2Reader | +| test.go:215:12:215:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:215:26:215:36 | bzip2Reader | semmle.label | bzip2Reader | +| test.go:217:18:217:24 | tarRead | semmle.label | tarRead | +| test.go:234:12:234:15 | definition of file | semmle.label | definition of file | +| test.go:237:17:237:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:237:33:237:36 | file | semmle.label | file | +| test.go:239:2:239:12 | flateReader | semmle.label | flateReader | +| test.go:240:12:240:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:240:26:240:36 | flateReader | semmle.label | flateReader | +| test.go:242:18:242:24 | tarRead | semmle.label | tarRead | +| test.go:259:21:259:24 | definition of file | semmle.label | definition of file | +| test.go:262:17:262:46 | call to NewReader | semmle.label | call to NewReader | +| test.go:262:42:262:45 | file | semmle.label | file | +| test.go:264:2:264:12 | flateReader | semmle.label | flateReader | +| test.go:265:12:265:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:265:26:265:36 | flateReader | semmle.label | flateReader | | test.go:267:18:267:24 | tarRead | semmle.label | tarRead | -| test.go:269:9:269:12 | definition of file | semmle.label | definition of file | -| test.go:272:8:272:25 | call to NewReader | semmle.label | call to NewReader | -| test.go:272:21:272:24 | file | semmle.label | file | -| test.go:274:2:274:3 | S2 | semmle.label | S2 | -| test.go:276:2:276:3 | S2 | semmle.label | S2 | -| test.go:277:12:277:28 | call to NewReader | semmle.label | call to NewReader | -| test.go:277:26:277:27 | S2 | semmle.label | S2 | -| test.go:279:18:279:24 | tarRead | semmle.label | tarRead | -| test.go:281:11:281:14 | definition of file | semmle.label | definition of file | -| test.go:284:2:284:36 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:284:32:284:35 | file | semmle.label | file | -| test.go:286:2:286:9 | gzipRead | semmle.label | gzipRead | -| test.go:287:12:287:34 | call to NewReader | semmle.label | call to NewReader | -| test.go:287:26:287:33 | gzipRead | semmle.label | gzipRead | -| test.go:289:18:289:24 | tarRead | semmle.label | tarRead | -| test.go:291:20:291:23 | definition of file | semmle.label | definition of file | -| test.go:294:2:294:50 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:294:46:294:49 | file | semmle.label | file | -| test.go:296:2:296:14 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:298:2:298:14 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:299:12:299:39 | call to NewReader | semmle.label | call to NewReader | -| test.go:299:26:299:38 | gzipklauspost | semmle.label | gzipklauspost | -| test.go:301:18:301:24 | tarRead | semmle.label | tarRead | -| test.go:303:20:303:23 | definition of file | semmle.label | definition of file | -| test.go:306:2:306:48 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:306:44:306:47 | file | semmle.label | file | -| test.go:308:2:308:11 | pgzippgzip | semmle.label | pgzippgzip | -| test.go:310:2:310:11 | pgzippgzip | semmle.label | pgzippgzip | -| test.go:311:12:311:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:311:26:311:35 | pgzippgzip | semmle.label | pgzippgzip | -| test.go:313:18:313:24 | tarRead | semmle.label | tarRead | -| test.go:315:21:315:24 | definition of file | semmle.label | definition of file | -| test.go:318:2:318:41 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:318:37:318:40 | file | semmle.label | file | -| test.go:320:2:320:5 | zstd | semmle.label | zstd | -| test.go:322:2:322:5 | zstd | semmle.label | zstd | -| test.go:324:2:324:5 | zstd | semmle.label | zstd | -| test.go:325:12:325:30 | call to NewReader | semmle.label | call to NewReader | -| test.go:325:26:325:29 | zstd | semmle.label | zstd | -| test.go:327:18:327:24 | tarRead | semmle.label | tarRead | -| test.go:329:19:329:22 | definition of file | semmle.label | definition of file | -| test.go:332:10:332:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:332:32:332:35 | file | semmle.label | file | -| test.go:334:2:334:5 | zstd | semmle.label | zstd | -| test.go:335:12:335:30 | call to NewReader | semmle.label | call to NewReader | -| test.go:335:26:335:29 | zstd | semmle.label | zstd | -| test.go:337:18:337:24 | tarRead | semmle.label | tarRead | -| test.go:339:9:339:12 | definition of file | semmle.label | definition of file | -| test.go:342:2:342:32 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:342:28:342:31 | file | semmle.label | file | -| test.go:344:2:344:7 | xzRead | semmle.label | xzRead | -| test.go:345:12:345:32 | call to NewReader | semmle.label | call to NewReader | -| test.go:345:26:345:31 | xzRead | semmle.label | xzRead | -| test.go:347:18:347:24 | tarRead | semmle.label | tarRead | -| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:350:22:350:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:352:2:352:8 | tarRead | semmle.label | tarRead | -| test.go:352:2:352:8 | tarRead | semmle.label | tarRead | -| test.go:352:2:352:8 | tarRead | semmle.label | tarRead | -| test.go:352:2:352:8 | tarRead | semmle.label | tarRead | -| test.go:352:2:352:8 | tarRead | semmle.label | tarRead | -| test.go:352:2:352:8 | tarRead | semmle.label | tarRead | -| test.go:352:2:352:8 | tarRead | semmle.label | tarRead | -| test.go:352:2:352:8 | tarRead | semmle.label | tarRead | -| test.go:352:2:352:8 | tarRead | semmle.label | tarRead | -| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | -| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | -| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | -| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | -| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | -| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | -| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | -| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | -| test.go:362:25:362:31 | tarRead | semmle.label | tarRead | +| test.go:284:17:284:20 | definition of file | semmle.label | definition of file | +| test.go:287:2:287:73 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:287:41:287:44 | file | semmle.label | file | +| test.go:289:2:289:12 | flateReader | semmle.label | flateReader | +| test.go:290:12:290:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:290:26:290:36 | flateReader | semmle.label | flateReader | +| test.go:292:18:292:24 | tarRead | semmle.label | tarRead | +| test.go:309:20:309:23 | definition of file | semmle.label | definition of file | +| test.go:312:2:312:47 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:312:43:312:46 | file | semmle.label | file | +| test.go:314:2:314:11 | zlibReader | semmle.label | zlibReader | +| test.go:315:12:315:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:315:26:315:35 | zlibReader | semmle.label | zlibReader | +| test.go:317:18:317:24 | tarRead | semmle.label | tarRead | +| test.go:334:11:334:14 | definition of file | semmle.label | definition of file | +| test.go:337:2:337:38 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:337:34:337:37 | file | semmle.label | file | +| test.go:339:2:339:11 | zlibReader | semmle.label | zlibReader | +| test.go:340:12:340:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:340:26:340:35 | zlibReader | semmle.label | zlibReader | +| test.go:342:18:342:24 | tarRead | semmle.label | tarRead | +| test.go:359:13:359:16 | definition of file | semmle.label | definition of file | +| test.go:362:18:362:39 | call to NewReader | semmle.label | call to NewReader | +| test.go:362:35:362:38 | file | semmle.label | file | +| test.go:364:2:364:13 | snappyReader | semmle.label | snappyReader | +| test.go:365:2:365:13 | snappyReader | semmle.label | snappyReader | +| test.go:366:12:366:38 | call to NewReader | semmle.label | call to NewReader | +| test.go:366:26:366:37 | snappyReader | semmle.label | snappyReader | +| test.go:368:18:368:24 | tarRead | semmle.label | tarRead | +| test.go:385:22:385:25 | definition of file | semmle.label | definition of file | +| test.go:388:18:388:48 | call to NewReader | semmle.label | call to NewReader | +| test.go:388:44:388:47 | file | semmle.label | file | +| test.go:390:2:390:13 | snappyReader | semmle.label | snappyReader | +| test.go:392:2:392:13 | snappyReader | semmle.label | snappyReader | +| test.go:393:2:393:13 | snappyReader | semmle.label | snappyReader | +| test.go:394:12:394:38 | call to NewReader | semmle.label | call to NewReader | +| test.go:394:26:394:37 | snappyReader | semmle.label | snappyReader | +| test.go:396:18:396:24 | tarRead | semmle.label | tarRead | +| test.go:413:9:413:12 | definition of file | semmle.label | definition of file | +| test.go:416:14:416:31 | call to NewReader | semmle.label | call to NewReader | +| test.go:416:27:416:30 | file | semmle.label | file | +| 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:118:23:118:28 | newSrc | test.go:62:13:62:24 | selection of Body | test.go:118:23:118:28 | newSrc | This decompression is $@. | test.go:62:13:62:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:127:37:127:38 | rc | test.go:59:16:59:46 | call to FormValue | test.go:127:37:127:38 | rc | This decompression is $@. | test.go:59:16:59:46 | call to FormValue | decompressing compressed data without managing output size | -| test.go:140:37:140:38 | rc | test.go:59:16:59:46 | call to FormValue | test.go:140:37:140:38 | rc | This decompression is $@. | test.go:59:16:59:46 | call to FormValue | decompressing compressed data without managing output size | -| test.go:157:36:157:51 | fileReaderCloser | test.go:57:15:57:26 | selection of Body | test.go:157:36:157:51 | fileReaderCloser | This decompression is $@. | test.go:57:15:57:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:169:36:169:51 | fileReaderCloser | test.go:58:16:58:27 | selection of Body | test.go:169:36:169:51 | fileReaderCloser | This decompression is $@. | test.go:58:16:58:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:179:2:179:11 | bzip2dsnet | test.go:63:13:63:24 | selection of Body | test.go:179:2:179:11 | bzip2dsnet | This decompression is $@. | test.go:63:13:63:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:190:2:190:6 | Bzip2 | test.go:64:8:64:19 | selection of Body | test.go:190:2:190:6 | Bzip2 | This decompression is $@. | test.go:64:8:64:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:200:2:200:6 | Flate | test.go:65:8:65:19 | selection of Body | test.go:200:2:200:6 | Flate | This decompression is $@. | test.go:65:8:65:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:210:2:210:14 | zlibklauspost | test.go:66:17:66:28 | selection of Body | test.go:210:2:210:14 | zlibklauspost | This decompression is $@. | test.go:66:17:66:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:220:2:220:11 | flatedsnet | test.go:67:13:67:24 | selection of Body | test.go:220:2:220:11 | flatedsnet | This decompression is $@. | test.go:67:13:67:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:230:2:230:14 | zlibklauspost | test.go:68:16:68:27 | selection of Body | test.go:230:2:230:14 | zlibklauspost | This decompression is $@. | test.go:68:16:68:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:240:2:240:5 | Zlib | test.go:69:7:69:18 | selection of Body | test.go:240:2:240:5 | Zlib | This decompression is $@. | test.go:69:7:69:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:250:2:250:7 | Snappy | test.go:70:9:70:20 | selection of Body | test.go:250:2:250:7 | Snappy | This decompression is $@. | test.go:70:9:70:20 | selection of Body | decompressing compressed data without managing output size | -| test.go:251:2:251:7 | Snappy | test.go:70:9:70:20 | selection of Body | test.go:251:2:251:7 | Snappy | This decompression is $@. | test.go:70:9:70:20 | selection of Body | decompressing compressed data without managing output size | -| test.go:261:2:261:16 | snappyklauspost | test.go:71:18:71:29 | selection of Body | test.go:261:2:261:16 | snappyklauspost | This decompression is $@. | test.go:71:18:71:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:263:2:263:16 | snappyklauspost | test.go:71:18:71:29 | selection of Body | test.go:263:2:263:16 | snappyklauspost | This decompression is $@. | test.go:71:18:71:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:264:2:264:16 | snappyklauspost | test.go:71:18:71:29 | selection of Body | test.go:264:2:264:16 | snappyklauspost | This decompression is $@. | test.go:71:18:71:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:274:2:274:3 | S2 | test.go:72:5:72:16 | selection of Body | test.go:274:2:274:3 | S2 | This decompression is $@. | test.go:72:5:72:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:276:2:276:3 | S2 | test.go:72:5:72:16 | selection of Body | test.go:276:2:276:3 | S2 | This decompression is $@. | test.go:72:5:72:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:286:2:286:9 | gzipRead | test.go:73:7:73:18 | selection of Body | test.go:286:2:286:9 | gzipRead | This decompression is $@. | test.go:73:7:73:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:296:2:296:14 | gzipklauspost | test.go:74:16:74:27 | selection of Body | test.go:296:2:296:14 | gzipklauspost | This decompression is $@. | test.go:74:16:74:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:298:2:298:14 | gzipklauspost | test.go:74:16:74:27 | selection of Body | test.go:298:2:298:14 | gzipklauspost | This decompression is $@. | test.go:74:16:74:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:308:2:308:11 | pgzippgzip | test.go:75:16:75:27 | selection of Body | test.go:308:2:308:11 | pgzippgzip | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:310:2:310:11 | pgzippgzip | test.go:75:16:75:27 | selection of Body | test.go:310:2:310:11 | pgzippgzip | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:320:2:320:5 | zstd | test.go:76:17:76:28 | selection of Body | test.go:320:2:320:5 | zstd | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:322:2:322:5 | zstd | test.go:76:17:76:28 | selection of Body | test.go:322:2:322:5 | zstd | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:324:2:324:5 | zstd | test.go:76:17:76:28 | selection of Body | test.go:324:2:324:5 | zstd | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:334:2:334:5 | zstd | test.go:77:15:77:26 | selection of Body | test.go:334:2:334:5 | zstd | This decompression is $@. | test.go:77:15:77:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:344:2:344:7 | xzRead | test.go:78:5:78:16 | selection of Body | test.go:344:2:344:7 | xzRead | This decompression is $@. | test.go:78:5:78:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:352:2:352:8 | tarRead | test.go:63:13:63:24 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:63:13:63:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:352:2:352:8 | tarRead | test.go:64:8:64:19 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:64:8:64:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:352:2:352:8 | tarRead | test.go:65:8:65:19 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:65:8:65:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:352:2:352:8 | tarRead | test.go:66:17:66:28 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:66:17:66:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:352:2:352:8 | tarRead | test.go:67:13:67:24 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:67:13:67:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:352:2:352:8 | tarRead | test.go:68:16:68:27 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:68:16:68:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:352:2:352:8 | tarRead | test.go:69:7:69:18 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:69:7:69:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:352:2:352:8 | tarRead | test.go:70:9:70:20 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:70:9:70:20 | selection of Body | decompressing compressed data without managing output size | -| test.go:352:2:352:8 | tarRead | test.go:71:18:71:29 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:71:18:71:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:352:2:352:8 | tarRead | test.go:72:5:72:16 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:72:5:72:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:352:2:352:8 | tarRead | test.go:73:7:73:18 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:73:7:73:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:352:2:352:8 | tarRead | test.go:74:16:74:27 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:74:16:74:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:352:2:352:8 | tarRead | test.go:75:16:75:27 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:352:2:352:8 | tarRead | test.go:76:17:76:28 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:352:2:352:8 | tarRead | test.go:77:15:77:26 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:77:15:77:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:352:2:352:8 | tarRead | test.go:78:5:78:16 | selection of Body | test.go:352:2:352:8 | tarRead | This decompression is $@. | test.go:78:5:78:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:63:13:63:24 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:63:13:63:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:64:8:64:19 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:64:8:64:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:65:8:65:19 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:65:8:65:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:66:17:66:28 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:66:17:66:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:67:13:67:24 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:67:13:67:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:68:16:68:27 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:68:16:68:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:69:7:69:18 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:69:7:69:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:70:9:70:20 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:70:9:70:20 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:71:18:71:29 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:71:18:71:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:72:5:72:16 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:72:5:72:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:73:7:73:18 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:73:7:73:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:74:16:74:27 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:74:16:74:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:75:16:75:27 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:75:16:75:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:76:17:76:28 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:76:17:76:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:77:15:77:26 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:77:15:77:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:362:25:362:31 | tarRead | test.go:78:5:78:16 | selection of Body | test.go:362:25:362:31 | tarRead | This decompression is $@. | test.go:78:5:78:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:135:37:135:38 | rc | test.go:59:16:59:46 | call to FormValue | test.go:135:37:135:38 | rc | This decompression is $@. | test.go:59:16:59:46 | call to FormValue | decompressing compressed data without managing output size | +| test.go:148:37:148:38 | rc | test.go:59:16:59:46 | call to FormValue | test.go:148:37:148:38 | rc | This decompression is $@. | test.go:59:16:59:46 | call to FormValue | decompressing compressed data without managing output size | +| test.go:165:36:165:51 | fileReaderCloser | test.go:57:15:57:26 | selection of Body | test.go:165:36:165:51 | fileReaderCloser | This decompression is $@. | test.go:57:15:57:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:177:36:177:51 | fileReaderCloser | test.go:58:24:58:35 | selection of Body | test.go:177:36:177:51 | fileReaderCloser | This decompression is $@. | test.go:58:24:58:35 | selection of Body | decompressing compressed data without managing output size | +| test.go:187:2:187:12 | bzip2Reader | test.go:60:13:60:24 | selection of Body | test.go:187:2:187:12 | bzip2Reader | This decompression is $@. | test.go:60:13:60:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:214:2:214:12 | bzip2Reader | test.go:61:8:61:19 | selection of Body | test.go:214:2:214:12 | bzip2Reader | This decompression is $@. | test.go:61:8:61:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:239:2:239:12 | flateReader | test.go:62:8:62:19 | selection of Body | test.go:239:2:239:12 | flateReader | This decompression is $@. | test.go:62:8:62:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:264:2:264:12 | flateReader | test.go:63:17:63:28 | selection of Body | test.go:264:2:264:12 | flateReader | This decompression is $@. | test.go:63:17:63:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:289:2:289:12 | flateReader | test.go:64:13:64:24 | selection of Body | test.go:289:2:289:12 | flateReader | This decompression is $@. | test.go:64:13:64:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:314:2:314:11 | zlibReader | test.go:65:16:65:27 | selection of Body | test.go:314:2:314:11 | zlibReader | This decompression is $@. | test.go:65:16:65:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:339:2:339:11 | zlibReader | test.go:66:7:66:18 | selection of Body | test.go:339:2:339:11 | zlibReader | This decompression is $@. | test.go:66:7:66:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:364:2:364:13 | snappyReader | test.go:67:9:67:20 | selection of Body | test.go:364:2:364:13 | snappyReader | This decompression is $@. | test.go:67:9:67:20 | selection of Body | decompressing compressed data without managing output size | +| test.go:365:2:365:13 | snappyReader | test.go:67:9:67:20 | selection of Body | test.go:365:2:365:13 | snappyReader | This decompression is $@. | test.go:67:9:67:20 | selection of Body | decompressing compressed data without managing output size | +| test.go:390:2:390:13 | snappyReader | test.go:68:18:68:29 | selection of Body | test.go:390:2:390:13 | snappyReader | This decompression is $@. | test.go:68:18:68:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:392:2:392:13 | snappyReader | test.go:68:18:68:29 | selection of Body | test.go:392:2:392:13 | snappyReader | This decompression is $@. | test.go:68:18:68:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:393:2:393:13 | snappyReader | test.go:68:18:68:29 | selection of Body | test.go:393:2:393:13 | snappyReader | This decompression is $@. | test.go:68:18:68:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:418:2:418:9 | s2Reader | test.go:69:5:69:16 | selection of Body | test.go:418:2:418:9 | s2Reader | This decompression is $@. | test.go:69:5:69:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:420:2:420:9 | s2Reader | test.go:69:5:69:16 | selection of Body | test.go:420:2:420:9 | s2Reader | This decompression is $@. | test.go:69:5:69:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:445:23:445:28 | newSrc | test.go:71:15:71:26 | selection of Body | test.go:445:23:445:28 | newSrc | This decompression is $@. | test.go:71:15:71:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:452:2:452:11 | gzipReader | test.go:70:7:70:18 | selection of Body | test.go:452:2:452:11 | gzipReader | This decompression is $@. | test.go:70:7:70:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:477:2:477:11 | gzipReader | test.go:72:16:72:27 | selection of Body | test.go:477:2:477:11 | gzipReader | This decompression is $@. | test.go:72:16:72:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:479:2:479:11 | gzipReader | test.go:72:16:72:27 | selection of Body | test.go:479:2:479:11 | gzipReader | This decompression is $@. | test.go:72:16:72:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:504:2:504:12 | pgzipReader | test.go:73:16:73:27 | selection of Body | test.go:504:2:504:12 | pgzipReader | This decompression is $@. | test.go:73:16:73:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:506:2:506:12 | pgzipReader | test.go:73:16:73:27 | selection of Body | test.go:506:2:506:12 | pgzipReader | This decompression is $@. | test.go:73:16:73:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:531:2:531:11 | zstdReader | test.go:74:17:74:28 | selection of Body | test.go:531:2:531:11 | zstdReader | This decompression is $@. | test.go:74:17:74:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:533:2:533:11 | zstdReader | test.go:74:17:74:28 | selection of Body | test.go:533:2:533:11 | zstdReader | This decompression is $@. | test.go:74:17:74:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:535:2:535:11 | zstdReader | test.go:74:17:74:28 | selection of Body | test.go:535:2:535:11 | zstdReader | This decompression is $@. | test.go:74:17:74:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:560:2:560:11 | zstdReader | test.go:75:15:75:26 | selection of Body | test.go:560:2:560:11 | zstdReader | This decompression is $@. | test.go:75:15:75:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:585:2:585:9 | xzReader | test.go:76:5:76:16 | selection of Body | test.go:585:2:585:9 | xzReader | This decompression is $@. | test.go:76:5:76:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:60:13:60:24 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:60:13:60:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:61:8:61:19 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:61:8:61:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:62:8:62:19 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:62:8:62:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:63:17:63:28 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:63:17:63:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:64:13:64:24 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:64:13:64:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:65:16:65:27 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:65:16:65:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:66:7:66:18 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:66:7:66:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:67:9:67:20 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:67:9:67:20 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:68:18:68:29 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:68:18:68:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:69:5:69:16 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:69:5:69:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:70:7:70:18 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:70:7:70:18 | 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:73:16:73:27 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:73:16:73:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:74:17:74:28 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:74:17:74:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:75:15:75:26 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:75:15:75:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:76:5:76:16 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:76:5:76:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:629:2:629:8 | tarRead | test.go:76:5:76:16 | selection of Body | test.go:629:2:629:8 | tarRead | This decompression is $@. | test.go:76:5:76:16 | selection of Body | decompressing compressed data without managing output size | diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go index 9c2d3685101..9d51f69d675 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go @@ -55,11 +55,8 @@ func main() { } func DecompressHandler(w http.ResponseWriter, request *http.Request) { ZipNewReader(request.Body) - ZipNewReader2(request.Body) + ZipNewReaderKlauspost(request.Body) ZipOpenReader(request.FormValue("filepathba")) - ZipOpenReaderSafe(request.PostFormValue("test")) - GZipOpenReaderSafe(request.PostFormValue("test")) - GZipReader(request.Body, "dest") Bzip2Dsnet(request.Body) Bzip2(request.Body) Flate(request.Body) @@ -71,11 +68,31 @@ func DecompressHandler(w http.ResponseWriter, request *http.Request) { SnappyKlauspost(request.Body) S2(request.Body) Gzip(request.Body) + GZipIoReader(request.Body, "dest") GzipKlauspost(request.Body) PzipKlauspost(request.Body) Zstd_Klauspost(request.Body) Zstd_DataDog(request.Body) Xz(request.Body) + + ZipOpenReaderSafe(request.PostFormValue("test")) + GZipOpenReaderSafe(request.PostFormValue("test")) + Bzip2DsnetSafe(request.Body) + Bzip2Safe(request.Body) + FlateSafe(request.Body) + FlateKlauspostSafe(request.Body) + FlateDsnetSafe(request.Body) + ZlibKlauspostSafe(request.Body) + ZlibSafe(request.Body) + SnappySafe(request.Body) + SnappyKlauspostSafe(request.Body) + S2Safe(request.Body) + GzipSafe(request.Body) + GzipKlauspostSafe(request.Body) + PzipKlauspostSafe(request.Body) + Zstd_KlauspostSafe(request.Body) + Zstd_DataDogSafe(request.Body) + XzSafe(request.Body) } func GZipOpenReaderSafe(filename string) { @@ -102,29 +119,20 @@ func ZipOpenReaderSafe(filename string) { } totalBytes = totalBytes + result if totalBytes > 1024*1024*1024*5 { - fmt.Print(totalBytes) + fmt.Print(totalBytes, "exceeded") break } } } } -func GZipReader(src io.Reader, dst string) { - gzipR, _ := gzip.NewReader(src) - dstF, _ := os.OpenFile(dst, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0755) - defer dstF.Close() - var newSrc io.Reader - newSrc = io.Reader(gzipR) - _, _ = io.Copy(dstF, newSrc) // BAD -} - func ZipOpenReader(filename string) { // Open the zip file - r, _ := zip.OpenReader(filename) - for _, f := range r.File { + zipReader, _ := zip.OpenReader(filename) + for _, f := range zipReader.File { rc, _ := f.Open() for { - result, _ := io.CopyN(os.Stdout, rc, 68) // BAD + result, _ := io.CopyN(os.Stdout, rc, 68) // $ hasValueFlow="rc" if result == 0 { _ = rc.Close() break @@ -133,11 +141,11 @@ func ZipOpenReader(filename string) { _ = rc.Close() } } - rKlauspost, _ := zipKlauspost.OpenReader(filename) - for _, f := range rKlauspost.File { + zipKlauspostReader, _ := zipKlauspost.OpenReader(filename) + for _, f := range zipKlauspostReader.File { rc, _ := f.Open() for { - result, _ := io.CopyN(os.Stdout, rc, 68) // BAD + result, _ := io.CopyN(os.Stdout, rc, 68) // $ hasValueFlow="rc" if result == 0 { _ = rc.Close() break @@ -154,19 +162,19 @@ func ZipNewReader(file io.Reader) { for _, file := range zipReader.File { fileWriter := bytes.NewBuffer([]byte{}) fileReaderCloser, _ := file.Open() - result, _ := io.Copy(fileWriter, fileReaderCloser) // BAD + result, _ := io.Copy(fileWriter, fileReaderCloser) // $ hasValueFlow="fileReaderCloser" fmt.Print(result) } } -func ZipNewReader2(file io.Reader) { +func ZipNewReaderKlauspost(file io.Reader) { file2, _ := io.ReadAll(file) - zipReaderKlauspost, _ := zipKlauspost.NewReader(bytes.NewReader(file2), int64(32<<20)) - for _, file := range zipReaderKlauspost.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) // BAD + result, _ := io.Copy(fileWriter, fileReaderCloser) // $ hasValueFlow="fileReaderCloser" fmt.Print(result) } } @@ -174,182 +182,433 @@ func ZipNewReader2(file io.Reader) { func Bzip2Dsnet(file io.Reader) { var tarRead *tar.Reader - bzip2dsnet, _ := bzip2Dsnet.NewReader(file, &bzip2Dsnet.ReaderConfig{}) + bzip2Reader, _ := bzip2Dsnet.NewReader(file, &bzip2Dsnet.ReaderConfig{}) var out []byte = make([]byte, 70) - bzip2dsnet.Read(out) // BAD - tarRead = tar.NewReader(bzip2dsnet) + 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 - Bzip2 := bzip2.NewReader(file) + bzip2Reader := bzip2.NewReader(file) var out []byte = make([]byte, 70) - Bzip2.Read(out) // BAD - tarRead = tar.NewReader(Bzip2) + 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 - Flate := flate.NewReader(file) + flateReader := flate.NewReader(file) var out []byte = make([]byte, 70) - Flate.Read(out) // BAD - tarRead = tar.NewReader(Flate) + 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 - zlibklauspost := flateKlauspost.NewReader(file) + flateReader := flateKlauspost.NewReader(file) var out []byte = make([]byte, 70) - zlibklauspost.Read(out) // BAD - tarRead = tar.NewReader(zlibklauspost) + 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 - flatedsnet, _ := flateDsnet.NewReader(file, &flateDsnet.ReaderConfig{}) + flateReader, _ := flateDsnet.NewReader(file, &flateDsnet.ReaderConfig{}) var out []byte = make([]byte, 70) - flatedsnet.Read(out) // BAD - tarRead = tar.NewReader(flatedsnet) + 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 - zlibklauspost, _ := zlibKlauspost.NewReader(file) + zlibReader, _ := zlibKlauspost.NewReader(file) var out []byte = make([]byte, 70) - zlibklauspost.Read(out) // BAD - tarRead = tar.NewReader(zlibklauspost) + 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 - Zlib, _ := zlib.NewReader(file) + zlibReader, _ := zlib.NewReader(file) var out []byte = make([]byte, 70) - Zlib.Read(out) // BAD - tarRead = tar.NewReader(Zlib) + 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 - Snappy := snappy.NewReader(file) + snappyReader := snappy.NewReader(file) var out []byte = make([]byte, 70) - Snappy.Read(out) // BAD - Snappy.ReadByte() // BAD - tarRead = tar.NewReader(Snappy) + 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 - snappyklauspost := snappyKlauspost.NewReader(file) + snappyReader := snappyKlauspost.NewReader(file) var out []byte = make([]byte, 70) - snappyklauspost.Read(out) // BAD + snappyReader.Read(out) // $ hasValueFlow="snappyReader" var buf bytes.Buffer - snappyklauspost.DecodeConcurrent(&buf, 2) // BAD - snappyklauspost.ReadByte() // BAD - tarRead = tar.NewReader(snappyklauspost) + 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 - S2 := s2.NewReader(file) + s2Reader := s2.NewReader(file) var out []byte = make([]byte, 70) - S2.Read(out) // BAD + s2Reader.Read(out) // $ hasValueFlow="s2Reader" var buf bytes.Buffer - S2.DecodeConcurrent(&buf, 2) // BAD - tarRead = tar.NewReader(S2) + 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 - gzipRead, _ := gzip.NewReader(file) + gzipReader, _ := gzip.NewReader(file) var out []byte = make([]byte, 70) - gzipRead.Read(out) // BAD - tarRead = tar.NewReader(gzipRead) + 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 - gzipklauspost, _ := gzipKlauspost.NewReader(file) + gzipReader, _ := gzipKlauspost.NewReader(file) var out []byte = make([]byte, 70) - gzipklauspost.Read(out) // BAD + gzipReader.Read(out) // $ hasValueFlow="gzipReader" var buf bytes.Buffer - gzipklauspost.WriteTo(&buf) // BAD - tarRead = tar.NewReader(gzipklauspost) + 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 - pgzippgzip, _ := pgzipKlauspost.NewReader(file) + pgzipReader, _ := pgzipKlauspost.NewReader(file) var out []byte = make([]byte, 70) - pgzippgzip.Read(out) // BAD + pgzipReader.Read(out) // $ hasValueFlow="pgzipReader" var buf bytes.Buffer - pgzippgzip.WriteTo(&buf) // BAD - tarRead = tar.NewReader(pgzippgzip) + 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 - zstd, _ := zstdKlauspost.NewReader(file) + zstdReader, _ := zstdKlauspost.NewReader(file) var out []byte = make([]byte, 70) - zstd.Read(out) // BAD + zstdReader.Read(out) // $ hasValueFlow="zstdReader" var buf bytes.Buffer - zstd.WriteTo(&buf) // BAD + zstdReader.WriteTo(&buf) // $ hasValueFlow="zstdReader" var src []byte - zstd.DecodeAll(src, nil) // BAD - tarRead = tar.NewReader(zstd) + 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 - zstd := zstdDataDog.NewReader(file) + zstdReader := zstdDataDog.NewReader(file) var out []byte = make([]byte, 70) - zstd.Read(out) // BAD - tarRead = tar.NewReader(zstd) + 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 - xzRead, _ := xz.NewReader(file) + xzReader, _ := xz.NewReader(file) var out []byte = make([]byte, 70) - xzRead.Read(out) // BAD - tarRead = tar.NewReader(xzRead) + 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) { - var tarOut []byte = make([]byte, 70) - tarRead.Read(tarOut) // BAD files := make(fstest.MapFS) for { cur, err := tarRead.Next() @@ -359,8 +618,38 @@ func TarDecompressor(tarRead *tar.Reader) { if cur.Typeflag != tar.TypeReg { continue } - data, _ := io.ReadAll(tarRead) // BAD + 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) // $ hasValueFlow="tarRead" + 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 + } + } +} From 3fcb0ee22852eb533467e4ed7c724dfbb88b5076 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Mon, 15 Jan 2024 01:01:51 +0400 Subject: [PATCH 050/430] move MultipartAndFormRemoteSource to DecompressionBombs.qll --- .../frameworks/DecompressionBombs.qll | 18 +++++++++++++++++- .../MultipartAndFormRemoteSource.qll | 18 ------------------ 2 files changed, 17 insertions(+), 19 deletions(-) delete mode 100644 go/ql/src/experimental/frameworks/MultipartAndFormRemoteSource.qll diff --git a/go/ql/src/experimental/frameworks/DecompressionBombs.qll b/go/ql/src/experimental/frameworks/DecompressionBombs.qll index 06148feaf2b..ca194312675 100644 --- a/go/ql/src/experimental/frameworks/DecompressionBombs.qll +++ b/go/ql/src/experimental/frameworks/DecompressionBombs.qll @@ -4,10 +4,26 @@ 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 DecompressionBombsCustomizations - import MultipartAndFormRemoteSource module Config implements DataFlow::StateConfigSig { class FlowState = DecompressionBombs::FlowState; diff --git a/go/ql/src/experimental/frameworks/MultipartAndFormRemoteSource.qll b/go/ql/src/experimental/frameworks/MultipartAndFormRemoteSource.qll deleted file mode 100644 index 3ebb606613f..00000000000 --- a/go/ql/src/experimental/frameworks/MultipartAndFormRemoteSource.qll +++ /dev/null @@ -1,18 +0,0 @@ -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") - ) - } -} From 2fe10942da342da8400b8103e7cc966b6658903b Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Mon, 15 Jan 2024 01:02:55 +0400 Subject: [PATCH 051/430] minor change for resolving rebase conflicts --- go/ql/src/experimental/frameworks/DecompressionBombs.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/src/experimental/frameworks/DecompressionBombs.qll b/go/ql/src/experimental/frameworks/DecompressionBombs.qll index ca194312675..e1d2cd4ddc9 100644 --- a/go/ql/src/experimental/frameworks/DecompressionBombs.qll +++ b/go/ql/src/experimental/frameworks/DecompressionBombs.qll @@ -23,7 +23,7 @@ class MimeMultipartFileHeader extends UntrustedFlowSource::Range { /** Provides a taint tracking configuration for reasoning about decompression bomb vulnerabilities. */ module DecompressionBomb { - import DecompressionBombsCustomizations + import experimental.frameworks.DecompressionBombsCustomizations module Config implements DataFlow::StateConfigSig { class FlowState = DecompressionBombs::FlowState; From 3c79faf37aa4ebce509fb52f3019c44b7233170b Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Mon, 15 Jan 2024 01:06:36 +0400 Subject: [PATCH 052/430] minor change for resolving rebase conflicts --- .../DecompressionBombTest.expected | 2 +- go/ql/test/experimental/CWE-522-DecompressionBombs/test.go | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.expected index 943ec10e434..4f510d87a9e 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.expected @@ -1,3 +1,3 @@ testFailures -| test.go:637:31:637:57 | comment | Missing result:hasValueFlow="tarRead" | +| test.go:636:31:636:57 | comment | Missing result:hasValueFlow="tarRead" | failures diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go index 9d51f69d675..1cbf292b4eb 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go @@ -589,7 +589,7 @@ func Xz(file io.Reader) { TarDecompressor(tarRead) TarDecompressor2(tarRead) TarDecompressorSafe(tarRead) - TarDecompressorTN(tarRead) + TarDecompressorTP(tarRead) } func XzSafe(file io.Reader) { @@ -629,8 +629,7 @@ func TarDecompressor2(tarRead *tar.Reader) { tarRead.Read(tarOut) // $ hasValueFlow="tarRead" fmt.Println("do sth with output:", tarOut) } - -func TarDecompressorTN(tarRead *tar.Reader) { +func TarDecompressorTP(tarRead *tar.Reader) { var tarOut []byte = make([]byte, 70) i := 1 for i > 0 { @@ -638,7 +637,6 @@ func TarDecompressorTN(tarRead *tar.Reader) { fmt.Println("do sth with output:", tarOut) } } - func TarDecompressorSafe(tarRead *tar.Reader) { var tarOut []byte = make([]byte, 70) i := 1 From 65ac94320e80162affd786857c001fc1776750da Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Mon, 15 Jan 2024 01:14:54 +0400 Subject: [PATCH 053/430] fix Typo in tests --- .../DecompressionBombTest.expected | 2 +- go/ql/test/experimental/CWE-522-DecompressionBombs/test.go | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.expected index 4f510d87a9e..943ec10e434 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.expected @@ -1,3 +1,3 @@ testFailures -| test.go:636:31:636:57 | comment | Missing result:hasValueFlow="tarRead" | +| test.go:637:31:637:57 | comment | Missing result:hasValueFlow="tarRead" | failures diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go index 1cbf292b4eb..9d51f69d675 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go @@ -589,7 +589,7 @@ func Xz(file io.Reader) { TarDecompressor(tarRead) TarDecompressor2(tarRead) TarDecompressorSafe(tarRead) - TarDecompressorTP(tarRead) + TarDecompressorTN(tarRead) } func XzSafe(file io.Reader) { @@ -629,7 +629,8 @@ func TarDecompressor2(tarRead *tar.Reader) { tarRead.Read(tarOut) // $ hasValueFlow="tarRead" fmt.Println("do sth with output:", tarOut) } -func TarDecompressorTP(tarRead *tar.Reader) { + +func TarDecompressorTN(tarRead *tar.Reader) { var tarOut []byte = make([]byte, 70) i := 1 for i > 0 { @@ -637,6 +638,7 @@ func TarDecompressorTP(tarRead *tar.Reader) { fmt.Println("do sth with output:", tarOut) } } + func TarDecompressorSafe(tarRead *tar.Reader) { var tarOut []byte = make([]byte, 70) i := 1 From a47c702171fb46385871b9ad1a292895b8f4c5f4 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Mon, 15 Jan 2024 22:08:35 +0400 Subject: [PATCH 054/430] change TN to GOOD instead of using hasValueFlow --- .../CWE-522-DecompressionBombs/DecompressionBombTest.expected | 1 - go/ql/test/experimental/CWE-522-DecompressionBombs/test.go | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.expected index 943ec10e434..8ec8033d086 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.expected @@ -1,3 +1,2 @@ testFailures -| test.go:637:31:637:57 | comment | Missing result:hasValueFlow="tarRead" | failures diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go index 9d51f69d675..6467f2568ba 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go @@ -634,7 +634,7 @@ func TarDecompressorTN(tarRead *tar.Reader) { var tarOut []byte = make([]byte, 70) i := 1 for i > 0 { - i, _ = tarRead.Read(tarOut) // $ hasValueFlow="tarRead" + i, _ = tarRead.Read(tarOut) // GOOD: the output size is being controlled fmt.Println("do sth with output:", tarOut) } } From f2755315429157e21f5678d455254497f942fe75 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 2 Feb 2024 10:57:15 +0100 Subject: [PATCH 055/430] Add support for TS 5.4-beta --- .../lib/typescript/package-lock.json | 10 +- .../extractor/lib/typescript/package.json | 4 +- .../TypeScript/Types/printAst.expected | 151 ++++++++++++++---- .../TypeScript/Types/tests.expected | 20 +++ .../library-tests/TypeScript/Types/tst.ts | 8 + 5 files changed, 155 insertions(+), 38 deletions(-) diff --git a/javascript/extractor/lib/typescript/package-lock.json b/javascript/extractor/lib/typescript/package-lock.json index 2d448ae0448..fd672bf43c0 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.0-beta" }, "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.0-beta", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.0-beta.tgz", + "integrity": "sha512-KgekV5JS7TQ7Bb8eO64QGxdM7MSBUUXOXq28OWX23d2MA8SiVtNYoo4s33tCTEGV8+6AGBRD2+KiXNNnexRRYw==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -32,4 +32,4 @@ } } } -} +} \ No newline at end of file diff --git a/javascript/extractor/lib/typescript/package.json b/javascript/extractor/lib/typescript/package.json index 602379bc36a..2a636c3cdf3 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.0-beta" }, "scripts": { "build": "tsc --project tsconfig.json", @@ -14,4 +14,4 @@ "devDependencies": { "@types/node": "18.15.3" } -} +} \ No newline at end of file diff --git a/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected b/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected index 5f29995b854..90fa2b8dcda 100644 --- a/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected +++ b/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected @@ -124,6 +124,7 @@ 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 | (Parameters) | semmle.label | (Parameters) | | file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | | file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | @@ -167,6 +168,8 @@ 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 | (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 +1760,36 @@ nodes | tst.ts:483:46:483:50 | [LocalTypeAccess] Pair3 | semmle.label | [LocalTypeAccess] Pair3 | | tst.ts:483:46:483:58 | [GenericTypeExpr] Pair3 | semmle.label | [GenericTypeExpr] Pair3 | | tst.ts:483:52:483:57 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | +| tst.ts:486:1:492:1 | [NamespaceDeclaration] module ... ow"); } | semmle.label | [NamespaceDeclaration] module ... ow"); } | +| tst.ts:486:1:492:1 | [NamespaceDeclaration] module ... ow"); } | 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 | semmle.label | [GenericTypeExpr] NoInfer | +| 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" | | 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 +1807,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 +1825,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 +1833,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 +1841,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 +1849,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>; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Va ... ay>; | -| type_alias.ts:5:1:5:50 | [TypeAliasDeclaration,TypeDefinition] type Va ... ay>; | semmle.order | 97 | +| type_alias.ts:5:1:5:50 | [TypeAliasDeclaration,TypeDefinition] type Va ... ay>; | 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 +1870,14 @@ nodes | type_alias.ts:5:34:5:48 | [GenericTypeExpr] ValueOrArray | semmle.label | [GenericTypeExpr] ValueOrArray | | 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 | semmle.label | [GenericTypeExpr] ValueOrArray | | 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 +1893,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 +1914,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 +1939,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 +1952,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 +1989,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 | semmle.label | [VariableDeclarator] i: I | | type_definitions.ts:6:8:6:8 | [LocalTypeAccess] I | semmle.label | [LocalTypeAccess] I | | type_definitions.ts:6:8:6:16 | [GenericTypeExpr] I | semmle.label | [GenericTypeExpr] I | | 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 +2008,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 | semmle.label | [VariableDeclarator] c: C | | type_definitions.ts:11:8:11:8 | [LocalTypeAccess] C | semmle.label | [LocalTypeAccess] C | | type_definitions.ts:11:8:11:16 | [GenericTypeExpr] C | semmle.label | [GenericTypeExpr] C | | 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 +2024,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[]; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Alias = T[]; | -| type_definitions.ts:21:1:21:20 | [TypeAliasDeclaration,TypeDefinition] type Alias = T[]; | semmle.order | 119 | +| type_definitions.ts:21:1:21:20 | [TypeAliasDeclaration,TypeDefinition] type Alias = 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 +2247,10 @@ 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 | (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 +2349,10 @@ 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) | 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 +2385,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 +5223,54 @@ edges | tst.ts:483:46:483:58 | [GenericTypeExpr] Pair3 | tst.ts:483:46:483:50 | [LocalTypeAccess] Pair3 | semmle.order | 1 | | tst.ts:483:46:483:58 | [GenericTypeExpr] Pair3 | tst.ts:483:52:483:57 | [KeywordTypeExpr] string | semmle.label | 2 | | tst.ts:483:46:483:58 | [GenericTypeExpr] Pair3 | tst.ts:483:52:483:57 | [KeywordTypeExpr] string | semmle.order | 2 | +| tst.ts:486:1:492:1 | [NamespaceDeclaration] module ... ow"); } | tst.ts:486:8:486:11 | [VarDecl] TS54 | semmle.label | 1 | +| tst.ts:486:1:492:1 | [NamespaceDeclaration] module ... ow"); } | tst.ts:486:8:486:11 | [VarDecl] TS54 | semmle.order | 1 | +| tst.ts:486:1:492:1 | [NamespaceDeclaration] module ... ow"); } | tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | semmle.label | 2 | +| tst.ts:486:1:492:1 | [NamespaceDeclaration] module ... ow"); } | tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | semmle.order | 2 | +| tst.ts:486:1:492:1 | [NamespaceDeclaration] module ... ow"); } | tst.ts:491:3:491:58 | [ExprStmt] createS ... llow"); | semmle.label | 3 | +| tst.ts:486:1:492:1 | [NamespaceDeclaration] module ... ow"); } | tst.ts:491:3:491:58 | [ExprStmt] createS ... llow"); | semmle.order | 3 | +| 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 | semmle.label | -2 | +| tst.ts:487:61:487:72 | [SimpleParameter] defaultColor | tst.ts:487:76:487:85 | [GenericTypeExpr] NoInfer | semmle.order | -2 | +| tst.ts:487:76:487:85 | [GenericTypeExpr] NoInfer | tst.ts:487:76:487:82 | [LocalTypeAccess] NoInfer | semmle.label | 1 | +| tst.ts:487:76:487:85 | [GenericTypeExpr] NoInfer | tst.ts:487:76:487:82 | [LocalTypeAccess] NoInfer | semmle.order | 1 | +| tst.ts:487:76:487:85 | [GenericTypeExpr] NoInfer | tst.ts:487:84:487:84 | [LocalTypeAccess] C | semmle.label | 2 | +| tst.ts:487:76:487:85 | [GenericTypeExpr] NoInfer | 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 | | 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..49a1f1e000f 100644 --- a/javascript/ql/test/library-tests/TypeScript/Types/tests.expected +++ b/javascript/ql/test/library-tests/TypeScript/Types/tests.expected @@ -658,6 +658,17 @@ 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" | | 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 +1149,12 @@ getTypeExprType | tst.ts:483:46:483:50 | Pair3 | Pair3 | | tst.ts:483:46:483:58 | Pair3 | Pair3 | | 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" | @@ -1359,16 +1376,19 @@ unionIndex | "circle" | 0 | "circle" \| "square" | | "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... | | "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 number | 1 | void \| (() => number) | | ClassMethodDecoratorContext numbe... | 1 | (() => number) \| (ClassMethodDecoratorContext = [first: T, T]; console.log(["hello", "world"] satisfies Pair3); +} + +module TS54 { + function createStreetLight(colors: C[], defaultColor?: NoInfer) { + return colors[0]; + } + + createStreetLight(["red", "yellow", "green"], "yellow"); } \ No newline at end of file From f433039a2514cc03e6129f6496dc43a4bfad0ce8 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 2 Feb 2024 11:23:35 +0100 Subject: [PATCH 056/430] Add change note --- javascript/ql/lib/change-notes/2024-02-02-typescript-5-4.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 javascript/ql/lib/change-notes/2024-02-02-typescript-5-4.md 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 From 3b1751dc8a6716d9a8bb9eecda2475c1f4b2408e Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 2 Feb 2024 11:45:21 +0100 Subject: [PATCH 057/430] Update supported versions --- docs/codeql/reusables/supported-versions-compilers.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/reusables/supported-versions-compilers.rst b/docs/codeql/reusables/supported-versions-compilers.rst index cb9ee322a04..525fe7730a8 100644 --- a/docs/codeql/reusables/supported-versions-compilers.rst +++ b/docs/codeql/reusables/supported-versions-compilers.rst @@ -25,7 +25,7 @@ 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 From 45bb4a0ee5344ec101618301bec112bbecfa242c Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Thu, 8 Feb 2024 12:48:15 +0100 Subject: [PATCH 058/430] python: remove `TaintStepFromSummary` as it should be covered by `SummarizedCallableFromModel` Also move things around, to look more like the Ruby code. --- .../python/dataflow/new/FlowSummary.qll | 31 +------------- .../python/frameworks/data/ModelsAsData.qll | 41 ++++++++++++------- 2 files changed, 27 insertions(+), 45 deletions(-) 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/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 + ) } } From 580e68d5de4740a2d7ce7d1af38dfe814a853a7a Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 9 Feb 2024 13:51:16 +0100 Subject: [PATCH 059/430] python: add support for lower bound position --- .../dataflow/new/internal/DataFlowDispatch.qll | 16 ++++++++++++++++ .../dataflow/new/internal/FlowSummaryImpl.qll | 5 +++++ 2 files changed, 21 insertions(+) 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..9bf0ec96084 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` 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..a673a188133 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll @@ -195,6 +195,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 + ":" From 905420143ba03068b17c9daaa29a63e81dd2f948 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Wed, 21 Feb 2024 00:19:51 +0400 Subject: [PATCH 060/430] call functions in the same order as the function declarations --- .../DecompressionBombs.expected | 850 +++++++++--------- .../CWE-522-DecompressionBombs/test.go | 37 +- 2 files changed, 443 insertions(+), 444 deletions(-) diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected index ea2f3578b38..3e123fb7412 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -1,432 +1,432 @@ edges -| test.go:57:15:57:26 | selection of Body | test.go:159:19:159:22 | definition of file | -| test.go:58:24:58:35 | selection of Body | test.go:170:28:170:31 | definition of file | -| test.go:59:16:59:46 | call to FormValue | test.go:129:20:129:27 | definition of filename | -| test.go:60:13:60:24 | selection of Body | test.go:182:17:182:20 | definition of file | -| test.go:61:8:61:19 | selection of Body | test.go:209:12:209:15 | definition of file | -| test.go:62:8:62:19 | selection of Body | test.go:234:12:234:15 | definition of file | -| test.go:63:17:63:28 | selection of Body | test.go:259:21:259:24 | definition of file | -| test.go:64:13:64:24 | selection of Body | test.go:284:17:284:20 | definition of file | -| test.go:65:16:65:27 | selection of Body | test.go:309:20:309:23 | definition of file | -| test.go:66:7:66:18 | selection of Body | test.go:334:11:334:14 | definition of file | -| test.go:67:9:67:20 | selection of Body | test.go:359:13:359:16 | definition of file | -| test.go:68:18:68:29 | selection of Body | test.go:385:22:385:25 | definition of file | -| test.go:69:5:69:16 | selection of Body | test.go:413:9:413:12 | definition of file | -| test.go:70:7:70:18 | selection of Body | test.go:447:11:447:14 | definition of file | -| test.go:71:15:71:26 | selection of Body | test.go:440:19:440:21 | definition of src | -| test.go:72:16:72:27 | selection of Body | test.go:472:20:472:23 | definition of file | -| test.go:73:16:73:27 | selection of Body | test.go:499:20:499:23 | definition of file | -| test.go:74:17:74:28 | selection of Body | test.go:526:21:526:24 | definition of file | -| test.go:75:15:75:26 | selection of Body | test.go:555:19:555:22 | definition of file | -| test.go:76:5:76:16 | selection of Body | test.go:580:9:580:12 | definition of file | -| test.go:129:20:129:27 | definition of filename | test.go:131:33:131:40 | filename | -| test.go:129:20:129:27 | definition of filename | test.go:144:51:144:58 | filename | -| test.go:131:2:131:41 | ... := ...[0] | test.go:133:12:133:12 | f | -| test.go:131:33:131:40 | filename | test.go:131:2:131:41 | ... := ...[0] | -| test.go:133:3:133:19 | ... := ...[0] | test.go:135:37:135:38 | rc | -| test.go:133:12:133:12 | f | test.go:133:3:133:19 | ... := ...[0] | -| test.go:144:2:144:59 | ... := ...[0] | test.go:145:20:145:37 | implicit dereference | -| test.go:144:51:144:58 | filename | test.go:144:2:144:59 | ... := ...[0] | -| test.go:145:20:145:37 | implicit dereference | test.go:145:20:145:37 | implicit dereference | -| test.go:145:20:145:37 | implicit dereference | test.go:145:20:145:37 | implicit read of field Reader | -| test.go:145:20:145:37 | implicit read of field Reader | test.go:146:12:146:12 | f | -| test.go:146:12:146:12 | f | test.go:146:12:146:19 | call to Open | -| test.go:146:12:146:19 | call to Open | test.go:148:37:148:38 | rc | -| test.go:159:19:159:22 | definition of file | test.go:160:25:160:28 | file | -| test.go:160:2:160:29 | ... := ...[0] | test.go:161:48:161:52 | file1 | -| test.go:160:25:160:28 | file | test.go:160:2:160:29 | ... := ...[0] | -| test.go:161:2:161:69 | ... := ...[0] | test.go:164:26:164:29 | file | -| test.go:161:32:161:53 | call to NewReader | test.go:161:2:161:69 | ... := ...[0] | -| test.go:161:48:161:52 | file1 | test.go:161:32:161:53 | call to NewReader | -| test.go:164:3:164:36 | ... := ...[0] | test.go:165:36:165:51 | fileReaderCloser | -| test.go:164:26:164:29 | file | test.go:164:3:164:36 | ... := ...[0] | -| test.go:170:28:170:31 | definition of file | test.go:171:25:171:28 | file | -| test.go:171:2:171:29 | ... := ...[0] | test.go:172:57:172:61 | file2 | -| test.go:171:25:171:28 | file | test.go:171:2:171:29 | ... := ...[0] | -| test.go:172:2:172:78 | ... := ...[0] | test.go:176:26:176:29 | file | -| test.go:172:41:172:62 | call to NewReader | test.go:172:2:172:78 | ... := ...[0] | -| test.go:172:57:172:61 | file2 | test.go:172:41:172:62 | call to NewReader | -| test.go:176:26:176:29 | file | test.go:176:26:176:36 | call to Open | -| test.go:176:26:176:36 | call to Open | test.go:177:36:177:51 | fileReaderCloser | -| test.go:182:17:182:20 | definition of file | test.go:185:41:185:44 | file | -| test.go:185:2:185:73 | ... := ...[0] | test.go:187:2:187:12 | bzip2Reader | -| test.go:185:2:185:73 | ... := ...[0] | test.go:188:26:188:36 | bzip2Reader | -| test.go:185:41:185:44 | file | test.go:185:2:185:73 | ... := ...[0] | -| test.go:188:12:188:37 | call to NewReader | test.go:190:18:190:24 | tarRead | -| test.go:188:26:188:36 | bzip2Reader | test.go:188:12:188:37 | call to NewReader | -| test.go:190:18:190:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:209:12:209:15 | definition of file | test.go:212:33:212:36 | file | -| test.go:212:17:212:37 | call to NewReader | test.go:214:2:214:12 | bzip2Reader | -| test.go:212:17:212:37 | call to NewReader | test.go:215:26:215:36 | bzip2Reader | -| test.go:212:33:212:36 | file | test.go:212:17:212:37 | call to NewReader | -| test.go:215:12:215:37 | call to NewReader | test.go:217:18:217:24 | tarRead | -| test.go:215:26:215:36 | bzip2Reader | test.go:215:12:215:37 | call to NewReader | -| test.go:217:18:217:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:234:12:234:15 | definition of file | test.go:237:33:237:36 | file | -| test.go:237:17:237:37 | call to NewReader | test.go:239:2:239:12 | flateReader | -| test.go:237:17:237:37 | call to NewReader | test.go:240:26:240:36 | flateReader | -| test.go:237:33:237:36 | file | test.go:237:17:237:37 | call to NewReader | -| test.go:240:12:240:37 | call to NewReader | test.go:242:18:242:24 | tarRead | -| test.go:240:26:240:36 | flateReader | test.go:240:12:240:37 | call to NewReader | -| test.go:242:18:242:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:259:21:259:24 | definition of file | test.go:262:42:262:45 | file | -| test.go:262:17:262:46 | call to NewReader | test.go:264:2:264:12 | flateReader | -| test.go:262:17:262:46 | call to NewReader | test.go:265:26:265:36 | flateReader | -| test.go:262:42:262:45 | file | test.go:262:17:262:46 | call to NewReader | -| test.go:265:12:265:37 | call to NewReader | test.go:267:18:267:24 | tarRead | -| test.go:265:26:265:36 | flateReader | test.go:265:12:265:37 | call to NewReader | -| test.go:267:18:267:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:284:17:284:20 | definition of file | test.go:287:41:287:44 | file | -| test.go:287:2:287:73 | ... := ...[0] | test.go:289:2:289:12 | flateReader | -| test.go:287:2:287:73 | ... := ...[0] | test.go:290:26:290:36 | flateReader | -| test.go:287:41:287:44 | file | test.go:287:2:287:73 | ... := ...[0] | -| test.go:290:12:290:37 | call to NewReader | test.go:292:18:292:24 | tarRead | -| test.go:290:26:290:36 | flateReader | test.go:290:12:290:37 | call to NewReader | -| test.go:292:18:292:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:309:20:309:23 | definition of file | test.go:312:43:312:46 | file | -| test.go:312:2:312:47 | ... := ...[0] | test.go:314:2:314:11 | zlibReader | -| test.go:312:2:312:47 | ... := ...[0] | test.go:315:26:315:35 | zlibReader | -| test.go:312:43:312:46 | file | test.go:312:2:312:47 | ... := ...[0] | -| test.go:315:12:315:36 | call to NewReader | test.go:317:18:317:24 | tarRead | -| test.go:315:26:315:35 | zlibReader | test.go:315:12:315:36 | call to NewReader | -| test.go:317:18:317:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:334:11:334:14 | definition of file | test.go:337:34:337:37 | file | -| test.go:337:2:337:38 | ... := ...[0] | test.go:339:2:339:11 | zlibReader | -| test.go:337:2:337:38 | ... := ...[0] | test.go:340:26:340:35 | zlibReader | -| test.go:337:34:337:37 | file | test.go:337:2:337:38 | ... := ...[0] | -| test.go:340:12:340:36 | call to NewReader | test.go:342:18:342:24 | tarRead | -| test.go:340:26:340:35 | zlibReader | test.go:340:12:340:36 | call to NewReader | -| test.go:342:18:342:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:359:13:359:16 | definition of file | test.go:362:35:362:38 | file | -| test.go:362:18:362:39 | call to NewReader | test.go:364:2:364:13 | snappyReader | -| test.go:362:18:362:39 | call to NewReader | test.go:365:2:365:13 | snappyReader | -| test.go:362:18:362:39 | call to NewReader | test.go:366:26:366:37 | snappyReader | -| test.go:362:35:362:38 | file | test.go:362:18:362:39 | call to NewReader | -| test.go:366:12:366:38 | call to NewReader | test.go:368:18:368:24 | tarRead | -| test.go:366:26:366:37 | snappyReader | test.go:366:12:366:38 | call to NewReader | -| test.go:368:18:368:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:385:22:385:25 | definition of file | test.go:388:44:388:47 | file | -| test.go:388:18:388:48 | call to NewReader | test.go:390:2:390:13 | snappyReader | -| test.go:388:18:388:48 | call to NewReader | test.go:392:2:392:13 | snappyReader | -| test.go:388:18:388:48 | call to NewReader | test.go:393:2:393:13 | snappyReader | -| test.go:388:18:388:48 | call to NewReader | test.go:394:26:394:37 | snappyReader | -| test.go:388:44:388:47 | file | test.go:388:18:388:48 | call to NewReader | -| test.go:394:12:394:38 | call to NewReader | test.go:396:18:396:24 | tarRead | -| test.go:394:26:394:37 | snappyReader | test.go:394:12:394:38 | call to NewReader | -| test.go:396:18:396:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:413:9:413:12 | definition of file | test.go:416:27:416:30 | file | -| test.go:416:14:416:31 | call to NewReader | test.go:418:2:418:9 | s2Reader | -| test.go:416:14:416:31 | call to NewReader | test.go:420:2:420:9 | s2Reader | -| test.go:416:14:416:31 | call to NewReader | test.go:421:26:421:33 | s2Reader | -| test.go:416:27:416:30 | file | test.go:416:14:416:31 | call to NewReader | -| test.go:421:12:421:34 | call to NewReader | test.go:423:18:423:24 | tarRead | -| test.go:421:26:421:33 | s2Reader | test.go:421:12:421:34 | call to NewReader | -| test.go:423:18:423:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:440:19:440:21 | definition of src | test.go:441:34:441:36 | src | -| test.go:441:2:441:37 | ... := ...[0] | test.go:444:12:444:32 | type conversion | -| test.go:441:34:441:36 | src | test.go:441:2:441:37 | ... := ...[0] | -| test.go:444:12:444:32 | type conversion | test.go:445:23:445:28 | newSrc | -| test.go:447:11:447:14 | definition of file | test.go:450:34:450:37 | file | -| test.go:450:2:450:38 | ... := ...[0] | test.go:452:2:452:11 | gzipReader | -| test.go:450:2:450:38 | ... := ...[0] | test.go:453:26:453:35 | gzipReader | -| test.go:450:34:450:37 | file | test.go:450:2:450:38 | ... := ...[0] | -| test.go:453:12:453:36 | call to NewReader | test.go:455:18:455:24 | tarRead | -| test.go:453:26:453:35 | gzipReader | test.go:453:12:453:36 | call to NewReader | -| test.go:455:18:455:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:472:20:472:23 | definition of file | test.go:475:43:475:46 | file | -| test.go:475:2:475:47 | ... := ...[0] | test.go:477:2:477:11 | gzipReader | -| test.go:475:2:475:47 | ... := ...[0] | test.go:479:2:479:11 | gzipReader | -| test.go:475:2:475:47 | ... := ...[0] | test.go:480:26:480:35 | gzipReader | -| test.go:475:43:475:46 | file | test.go:475:2:475:47 | ... := ...[0] | -| test.go:480:12:480:36 | call to NewReader | test.go:482:18:482:24 | tarRead | -| test.go:480:26:480:35 | gzipReader | test.go:480:12:480:36 | call to NewReader | -| test.go:482:18:482:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:499:20:499:23 | definition of file | test.go:502:45:502:48 | file | -| test.go:502:2:502:49 | ... := ...[0] | test.go:504:2:504:12 | pgzipReader | -| test.go:502:2:502:49 | ... := ...[0] | test.go:506:2:506:12 | pgzipReader | -| test.go:502:2:502:49 | ... := ...[0] | test.go:507:26:507:36 | pgzipReader | -| test.go:502:45:502:48 | file | test.go:502:2:502:49 | ... := ...[0] | -| test.go:507:12:507:37 | call to NewReader | test.go:509:18:509:24 | tarRead | -| test.go:507:26:507:36 | pgzipReader | test.go:507:12:507:37 | call to NewReader | -| test.go:509:18:509:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:526:21:526:24 | definition of file | test.go:529:43:529:46 | file | -| test.go:529:2:529:47 | ... := ...[0] | test.go:531:2:531:11 | zstdReader | -| test.go:529:2:529:47 | ... := ...[0] | test.go:533:2:533:11 | zstdReader | -| test.go:529:2:529:47 | ... := ...[0] | test.go:535:2:535:11 | zstdReader | -| test.go:529:2:529:47 | ... := ...[0] | test.go:536:26:536:35 | zstdReader | -| test.go:529:43:529:46 | file | test.go:529:2:529:47 | ... := ...[0] | -| test.go:536:12:536:36 | call to NewReader | test.go:538:18:538:24 | tarRead | -| test.go:536:26:536:35 | zstdReader | test.go:536:12:536:36 | call to NewReader | -| test.go:538:18:538:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:555:19:555:22 | definition of file | test.go:558:38:558:41 | file | -| test.go:558:16:558:42 | call to NewReader | test.go:560:2:560:11 | zstdReader | -| test.go:558:16:558:42 | call to NewReader | test.go:561:26:561:35 | zstdReader | -| test.go:558:38:558:41 | file | test.go:558:16:558:42 | call to NewReader | -| test.go:561:12:561:36 | call to NewReader | test.go:563:18:563:24 | tarRead | -| test.go:561:26:561:35 | zstdReader | test.go:561:12:561:36 | call to NewReader | -| test.go:563:18:563:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:580:9:580:12 | definition of file | test.go:583:30:583:33 | file | -| test.go:583:2:583:34 | ... := ...[0] | test.go:585:2:585:9 | xzReader | -| test.go:583:2:583:34 | ... := ...[0] | test.go:586:26:586:33 | xzReader | -| test.go:583:30:583:33 | file | test.go:583:2:583:34 | ... := ...[0] | -| test.go:586:12:586:34 | call to NewReader | test.go:589:18:589:24 | tarRead | -| test.go:586:12:586:34 | call to NewReader | test.go:590:19:590:25 | tarRead | -| test.go:586:26:586:33 | xzReader | test.go:586:12:586:34 | call to NewReader | -| test.go:589:18:589:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:590:19:590:25 | tarRead | test.go:627:23:627:29 | definition of tarRead | -| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | -| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | -| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | -| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | -| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | -| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | -| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | -| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | -| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | -| test.go:627:23:627:29 | definition of tarRead | test.go:629:2:629:8 | tarRead | +| test.go:59:16:59:44 | call to FormValue | test.go:128:20:128:27 | definition of filename | +| test.go:60:15:60:26 | selection of Body | test.go:158:19:158:22 | definition of file | +| test.go:61:24:61:35 | selection of Body | test.go:169:28:169:31 | definition of file | +| test.go:62:13:62:24 | selection of Body | test.go:181:17:181:20 | definition of file | +| test.go:64:8:64:19 | selection of Body | test.go:208:12:208:15 | definition of file | +| test.go:66:8:66:19 | selection of Body | test.go:233:12:233:15 | definition of file | +| test.go:68:17:68:28 | selection of Body | test.go:258:21:258:24 | definition of file | +| test.go:70:13:70:24 | selection of Body | test.go:283:17:283:20 | definition of file | +| test.go:72:16:72:27 | selection of Body | test.go:308:20:308:23 | definition of file | +| test.go:74:7:74:18 | selection of Body | test.go:333:11:333:14 | definition of file | +| test.go:76:9:76:20 | selection of Body | test.go:358:13:358:16 | definition of file | +| test.go:78:18:78:29 | selection of Body | test.go:384:22:384:25 | definition of file | +| test.go:80:5:80:16 | selection of Body | test.go:412:9:412:12 | definition of file | +| test.go:82:7:82:18 | selection of Body | test.go:446:11:446:14 | definition of file | +| test.go:84:15:84:26 | selection of Body | test.go:439:19:439:21 | definition of src | +| test.go:85:16:85:27 | selection of Body | test.go:471:20:471:23 | definition of file | +| test.go:87:16:87:27 | selection of Body | test.go:498:20:498:23 | definition of file | +| test.go:89:17:89:28 | selection of Body | test.go:525:21:525:24 | definition of file | +| test.go:91:15:91:26 | selection of Body | test.go:554:19:554:22 | definition of file | +| test.go:93:5:93:16 | selection of Body | test.go:579:9:579:12 | definition of file | +| test.go:128:20:128:27 | definition of filename | test.go:130:33:130:40 | filename | +| test.go:128:20:128:27 | definition of filename | test.go:143:51:143:58 | filename | +| test.go:130:2:130:41 | ... := ...[0] | test.go:132:12:132:12 | f | +| test.go:130:33:130:40 | filename | test.go:130:2:130:41 | ... := ...[0] | +| test.go:132:3:132:19 | ... := ...[0] | test.go:134:37:134:38 | rc | +| test.go:132:12:132:12 | f | test.go:132:3:132:19 | ... := ...[0] | +| test.go:143:2:143:59 | ... := ...[0] | test.go:144:20:144:37 | implicit dereference | +| test.go:143:51:143:58 | filename | test.go:143:2:143:59 | ... := ...[0] | +| test.go:144:20:144:37 | implicit dereference | test.go:144:20:144:37 | implicit dereference | +| test.go:144:20:144:37 | implicit dereference | test.go:144:20:144:37 | implicit read of field Reader | +| test.go:144:20:144:37 | implicit read of field Reader | test.go:145:12:145:12 | f | +| test.go:145:12:145:12 | f | test.go:145:12:145:19 | call to Open | +| test.go:145:12:145:19 | call to Open | test.go:147:37:147:38 | rc | +| test.go:158:19:158:22 | definition of file | test.go:159:25:159:28 | file | +| test.go:159:2:159:29 | ... := ...[0] | test.go:160:48:160:52 | file1 | +| test.go:159:25:159:28 | file | test.go:159:2:159:29 | ... := ...[0] | +| test.go:160:2:160:69 | ... := ...[0] | test.go:163:26:163:29 | file | +| test.go:160:32:160:53 | call to NewReader | test.go:160:2:160:69 | ... := ...[0] | +| test.go:160:48:160:52 | file1 | test.go:160:32:160:53 | call to NewReader | +| test.go:163:3:163:36 | ... := ...[0] | test.go:164:36:164:51 | fileReaderCloser | +| test.go:163:26:163:29 | file | test.go:163:3:163:36 | ... := ...[0] | +| test.go:169:28:169:31 | definition of file | test.go:170:25:170:28 | file | +| test.go:170:2:170:29 | ... := ...[0] | test.go:171:57:171:61 | file2 | +| test.go:170:25:170:28 | file | test.go:170:2:170:29 | ... := ...[0] | +| test.go:171:2:171:78 | ... := ...[0] | test.go:175:26:175:29 | file | +| test.go:171:41:171:62 | call to NewReader | test.go:171:2:171:78 | ... := ...[0] | +| test.go:171:57:171:61 | file2 | test.go:171:41:171:62 | call to NewReader | +| test.go:175:26:175:29 | file | test.go:175:26:175:36 | call to Open | +| test.go:175:26:175:36 | call to Open | test.go:176:36:176:51 | fileReaderCloser | +| test.go:181:17:181:20 | definition of file | test.go:184:41:184:44 | file | +| test.go:184:2:184:73 | ... := ...[0] | test.go:186:2:186:12 | bzip2Reader | +| test.go:184:2:184:73 | ... := ...[0] | test.go:187:26:187:36 | bzip2Reader | +| test.go:184:41:184:44 | file | test.go:184:2:184:73 | ... := ...[0] | +| test.go:187:12:187:37 | call to NewReader | test.go:189:18:189:24 | tarRead | +| test.go:187:26:187:36 | bzip2Reader | test.go:187:12:187:37 | call to NewReader | +| test.go:189:18:189:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:208:12:208:15 | definition of file | test.go:211:33:211:36 | file | +| test.go:211:17:211:37 | call to NewReader | test.go:213:2:213:12 | bzip2Reader | +| test.go:211:17:211:37 | call to NewReader | test.go:214:26:214:36 | bzip2Reader | +| test.go:211:33:211:36 | file | test.go:211:17:211:37 | call to NewReader | +| test.go:214:12:214:37 | call to NewReader | test.go:216:18:216:24 | tarRead | +| test.go:214:26:214:36 | bzip2Reader | test.go:214:12:214:37 | call to NewReader | +| test.go:216:18:216:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:233:12:233:15 | definition of file | test.go:236:33:236:36 | file | +| test.go:236:17:236:37 | call to NewReader | test.go:238:2:238:12 | flateReader | +| test.go:236:17:236:37 | call to NewReader | test.go:239:26:239:36 | flateReader | +| test.go:236:33:236:36 | file | test.go:236:17:236:37 | call to NewReader | +| test.go:239:12:239:37 | call to NewReader | test.go:241:18:241:24 | tarRead | +| test.go:239:26:239:36 | flateReader | test.go:239:12:239:37 | call to NewReader | +| test.go:241:18:241:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:258:21:258:24 | definition of file | test.go:261:42:261:45 | file | +| test.go:261:17:261:46 | call to NewReader | test.go:263:2:263:12 | flateReader | +| test.go:261:17:261:46 | call to NewReader | test.go:264:26:264:36 | flateReader | +| test.go:261:42:261:45 | file | test.go:261:17:261:46 | call to NewReader | +| test.go:264:12:264:37 | call to NewReader | test.go:266:18:266:24 | tarRead | +| test.go:264:26:264:36 | flateReader | test.go:264:12:264:37 | call to NewReader | +| test.go:266:18:266:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:283:17:283:20 | definition of file | test.go:286:41:286:44 | file | +| test.go:286:2:286:73 | ... := ...[0] | test.go:288:2:288:12 | flateReader | +| test.go:286:2:286:73 | ... := ...[0] | test.go:289:26:289:36 | flateReader | +| test.go:286:41:286:44 | file | test.go:286:2:286:73 | ... := ...[0] | +| test.go:289:12:289:37 | call to NewReader | test.go:291:18:291:24 | tarRead | +| test.go:289:26:289:36 | flateReader | test.go:289:12:289:37 | call to NewReader | +| test.go:291:18:291:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:308:20:308:23 | definition of file | test.go:311:43:311:46 | file | +| test.go:311:2:311:47 | ... := ...[0] | test.go:313:2:313:11 | zlibReader | +| test.go:311:2:311:47 | ... := ...[0] | test.go:314:26:314:35 | zlibReader | +| test.go:311:43:311:46 | file | test.go:311:2:311:47 | ... := ...[0] | +| test.go:314:12:314:36 | call to NewReader | test.go:316:18:316:24 | tarRead | +| test.go:314:26:314:35 | zlibReader | test.go:314:12:314:36 | call to NewReader | +| test.go:316:18:316:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:333:11:333:14 | definition of file | test.go:336:34:336:37 | file | +| test.go:336:2:336:38 | ... := ...[0] | test.go:338:2:338:11 | zlibReader | +| test.go:336:2:336:38 | ... := ...[0] | test.go:339:26:339:35 | zlibReader | +| test.go:336:34:336:37 | file | test.go:336:2:336:38 | ... := ...[0] | +| test.go:339:12:339:36 | call to NewReader | test.go:341:18:341:24 | tarRead | +| test.go:339:26:339:35 | zlibReader | test.go:339:12:339:36 | call to NewReader | +| test.go:341:18:341:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:358:13:358:16 | definition of file | test.go:361:35:361:38 | file | +| test.go:361:18:361:39 | call to NewReader | test.go:363:2:363:13 | snappyReader | +| test.go:361:18:361:39 | call to NewReader | test.go:364:2:364:13 | snappyReader | +| test.go:361:18:361:39 | call to NewReader | test.go:365:26:365:37 | snappyReader | +| test.go:361:35:361:38 | file | test.go:361:18:361:39 | call to NewReader | +| test.go:365:12:365:38 | call to NewReader | test.go:367:18:367:24 | tarRead | +| test.go:365:26:365:37 | snappyReader | test.go:365:12:365:38 | call to NewReader | +| test.go:367:18:367:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:384:22:384:25 | definition of file | test.go:387:44:387:47 | file | +| test.go:387:18:387:48 | call to NewReader | test.go:389:2:389:13 | snappyReader | +| test.go:387:18:387:48 | call to NewReader | test.go:391:2:391:13 | snappyReader | +| test.go:387:18:387:48 | call to NewReader | test.go:392:2:392:13 | snappyReader | +| test.go:387:18:387:48 | call to NewReader | test.go:393:26:393:37 | snappyReader | +| test.go:387:44:387:47 | file | test.go:387:18:387:48 | call to NewReader | +| test.go:393:12:393:38 | call to NewReader | test.go:395:18:395:24 | tarRead | +| test.go:393:26:393:37 | snappyReader | test.go:393:12:393:38 | call to NewReader | +| test.go:395:18:395:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:412:9:412:12 | definition of file | test.go:415:27:415:30 | file | +| test.go:415:14:415:31 | call to NewReader | test.go:417:2:417:9 | s2Reader | +| test.go:415:14:415:31 | call to NewReader | test.go:419:2:419:9 | s2Reader | +| test.go:415:14:415:31 | call to NewReader | test.go:420:26:420:33 | s2Reader | +| test.go:415:27:415:30 | file | test.go:415:14:415:31 | call to NewReader | +| test.go:420:12:420:34 | call to NewReader | test.go:422:18:422:24 | tarRead | +| test.go:420:26:420:33 | s2Reader | test.go:420:12:420:34 | call to NewReader | +| test.go:422:18:422:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:439:19:439:21 | definition of src | test.go:440:34:440:36 | src | +| test.go:440:2:440:37 | ... := ...[0] | test.go:443:12:443:32 | type conversion | +| test.go:440:34:440:36 | src | test.go:440:2:440:37 | ... := ...[0] | +| test.go:443:12:443:32 | type conversion | test.go:444:23:444:28 | newSrc | +| test.go:446:11:446:14 | definition of file | test.go:449:34:449:37 | file | +| test.go:449:2:449:38 | ... := ...[0] | test.go:451:2:451:11 | gzipReader | +| test.go:449:2:449:38 | ... := ...[0] | test.go:452:26:452:35 | gzipReader | +| test.go:449:34:449:37 | file | test.go:449:2:449:38 | ... := ...[0] | +| test.go:452:12:452:36 | call to NewReader | test.go:454:18:454:24 | tarRead | +| test.go:452:26:452:35 | gzipReader | test.go:452:12:452:36 | call to NewReader | +| test.go:454:18:454:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:471:20:471:23 | definition of file | test.go:474:43:474:46 | file | +| test.go:474:2:474:47 | ... := ...[0] | test.go:476:2:476:11 | gzipReader | +| test.go:474:2:474:47 | ... := ...[0] | test.go:478:2:478:11 | gzipReader | +| test.go:474:2:474:47 | ... := ...[0] | test.go:479:26:479:35 | gzipReader | +| test.go:474:43:474:46 | file | test.go:474:2:474:47 | ... := ...[0] | +| test.go:479:12:479:36 | call to NewReader | test.go:481:18:481:24 | tarRead | +| test.go:479:26:479:35 | gzipReader | test.go:479:12:479:36 | call to NewReader | +| test.go:481:18:481:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:498:20:498:23 | definition of file | test.go:501:45:501:48 | file | +| test.go:501:2:501:49 | ... := ...[0] | test.go:503:2:503:12 | pgzipReader | +| test.go:501:2:501:49 | ... := ...[0] | test.go:505:2:505:12 | pgzipReader | +| test.go:501:2:501:49 | ... := ...[0] | test.go:506:26:506:36 | pgzipReader | +| test.go:501:45:501:48 | file | test.go:501:2:501:49 | ... := ...[0] | +| test.go:506:12:506:37 | call to NewReader | test.go:508:18:508:24 | tarRead | +| test.go:506:26:506:36 | pgzipReader | test.go:506:12:506:37 | call to NewReader | +| test.go:508:18:508:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:525:21:525:24 | definition of file | test.go:528:43:528:46 | file | +| test.go:528:2:528:47 | ... := ...[0] | test.go:530:2:530:11 | zstdReader | +| test.go:528:2:528:47 | ... := ...[0] | test.go:532:2:532:11 | zstdReader | +| test.go:528:2:528:47 | ... := ...[0] | test.go:534:2:534:11 | zstdReader | +| test.go:528:2:528:47 | ... := ...[0] | test.go:535:26:535:35 | zstdReader | +| test.go:528:43:528:46 | file | test.go:528:2:528:47 | ... := ...[0] | +| test.go:535:12:535:36 | call to NewReader | test.go:537:18:537:24 | tarRead | +| test.go:535:26:535:35 | zstdReader | test.go:535:12:535:36 | call to NewReader | +| test.go:537:18:537:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:554:19:554:22 | definition of file | test.go:557:38:557:41 | file | +| test.go:557:16:557:42 | call to NewReader | test.go:559:2:559:11 | zstdReader | +| test.go:557:16:557:42 | call to NewReader | test.go:560:26:560:35 | zstdReader | +| test.go:557:38:557:41 | file | test.go:557:16:557:42 | call to NewReader | +| test.go:560:12:560:36 | call to NewReader | test.go:562:18:562:24 | tarRead | +| test.go:560:26:560:35 | zstdReader | test.go:560:12:560:36 | call to NewReader | +| test.go:562:18:562:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:579:9:579:12 | definition of file | test.go:582:30:582:33 | file | +| test.go:582:2:582:34 | ... := ...[0] | test.go:584:2:584:9 | xzReader | +| test.go:582:2:582:34 | ... := ...[0] | test.go:585:26:585:33 | xzReader | +| test.go:582:30:582:33 | file | test.go:582:2:582:34 | ... := ...[0] | +| test.go:585:12:585:34 | call to NewReader | test.go:588:18:588:24 | tarRead | +| test.go:585:12:585:34 | call to NewReader | test.go:589:19:589:25 | tarRead | +| test.go:585:26:585:33 | xzReader | test.go:585:12:585:34 | call to NewReader | +| test.go:588:18:588:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:589:19:589:25 | tarRead | test.go:626:23:626:29 | definition of tarRead | +| test.go:610:22:610:28 | definition of tarRead | test.go:620:25:620:31 | tarRead | +| test.go:610:22:610:28 | definition of tarRead | test.go:620:25:620:31 | tarRead | +| test.go:610:22:610:28 | definition of tarRead | test.go:620:25:620:31 | tarRead | +| test.go:610:22:610:28 | definition of tarRead | test.go:620:25:620:31 | tarRead | +| test.go:610:22:610:28 | definition of tarRead | test.go:620:25:620:31 | tarRead | +| test.go:610:22:610:28 | definition of tarRead | test.go:620:25:620:31 | tarRead | +| test.go:610:22:610:28 | definition of tarRead | test.go:620:25:620:31 | tarRead | +| test.go:610:22:610:28 | definition of tarRead | test.go:620:25:620:31 | tarRead | +| test.go:610:22:610:28 | definition of tarRead | test.go:620:25:620:31 | tarRead | +| test.go:626:23:626:29 | definition of tarRead | test.go:628:2:628:8 | tarRead | nodes -| test.go:57:15:57:26 | selection of Body | semmle.label | selection of Body | -| test.go:58:24:58:35 | selection of Body | semmle.label | selection of Body | -| test.go:59:16:59:46 | call to FormValue | semmle.label | call to FormValue | -| test.go:60:13:60:24 | selection of Body | semmle.label | selection of Body | -| test.go:61:8:61:19 | selection of Body | semmle.label | selection of Body | -| test.go:62:8:62:19 | selection of Body | semmle.label | selection of Body | -| test.go:63:17:63:28 | selection of Body | semmle.label | selection of Body | -| test.go:64:13:64:24 | selection of Body | semmle.label | selection of Body | -| test.go:65:16:65:27 | selection of Body | semmle.label | selection of Body | -| test.go:66:7:66:18 | selection of Body | semmle.label | selection of Body | -| test.go:67:9:67:20 | selection of Body | semmle.label | selection of Body | -| test.go:68:18:68:29 | selection of Body | semmle.label | selection of Body | -| test.go:69:5:69:16 | selection of Body | semmle.label | selection of Body | -| test.go:70:7:70:18 | selection of Body | semmle.label | selection of Body | -| test.go:71:15:71:26 | selection of Body | semmle.label | selection of Body | +| 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:73:16:73:27 | selection of Body | semmle.label | selection of Body | -| test.go:74:17:74:28 | selection of Body | semmle.label | selection of Body | -| test.go:75:15:75:26 | selection of Body | semmle.label | selection of Body | -| test.go:76:5:76:16 | selection of Body | semmle.label | selection of Body | -| test.go:129:20:129:27 | definition of filename | semmle.label | definition of filename | -| test.go:131:2:131:41 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:131:33:131:40 | filename | semmle.label | filename | -| test.go:133:3:133:19 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:133:12:133:12 | f | semmle.label | f | -| test.go:135:37:135:38 | rc | semmle.label | rc | -| test.go:144:2:144:59 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:144:51:144:58 | filename | semmle.label | filename | -| test.go:145:20:145:37 | implicit dereference | semmle.label | implicit dereference | -| test.go:145:20:145:37 | implicit read of field Reader | semmle.label | implicit read of field Reader | -| test.go:146:12:146:12 | f | semmle.label | f | -| test.go:146:12:146:19 | call to Open | semmle.label | call to Open | -| test.go:148:37:148:38 | rc | semmle.label | rc | -| test.go:159:19:159:22 | definition of file | semmle.label | definition of file | -| test.go:160:2:160:29 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:160:25:160:28 | file | semmle.label | file | -| test.go:161:2:161:69 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:161:32:161:53 | call to NewReader | semmle.label | call to NewReader | -| test.go:161:48:161:52 | file1 | semmle.label | file1 | -| test.go:164:3:164:36 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:164:26:164:29 | file | semmle.label | file | -| test.go:165:36:165:51 | fileReaderCloser | semmle.label | fileReaderCloser | -| test.go:170:28:170:31 | definition of file | semmle.label | definition of file | -| test.go:171:2:171:29 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:171:25:171:28 | file | semmle.label | file | -| test.go:172:2:172:78 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:172:41:172:62 | call to NewReader | semmle.label | call to NewReader | -| test.go:172:57:172:61 | file2 | semmle.label | file2 | -| test.go:176:26:176:29 | file | semmle.label | file | -| test.go:176:26:176:36 | call to Open | semmle.label | call to Open | -| test.go:177:36:177:51 | fileReaderCloser | semmle.label | fileReaderCloser | -| test.go:182:17:182:20 | definition of file | semmle.label | definition of file | -| test.go:185:2:185:73 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:185:41:185:44 | file | semmle.label | file | -| test.go:187:2:187:12 | bzip2Reader | semmle.label | bzip2Reader | -| test.go:188:12:188:37 | call to NewReader | semmle.label | call to NewReader | -| test.go:188:26:188:36 | bzip2Reader | semmle.label | bzip2Reader | -| test.go:190:18:190:24 | tarRead | semmle.label | tarRead | -| test.go:209:12:209:15 | definition of file | semmle.label | definition of file | -| test.go:212:17:212:37 | call to NewReader | semmle.label | call to NewReader | -| test.go:212:33:212:36 | file | semmle.label | file | -| test.go:214:2:214:12 | bzip2Reader | semmle.label | bzip2Reader | -| test.go:215:12:215:37 | call to NewReader | semmle.label | call to NewReader | -| test.go:215:26:215:36 | bzip2Reader | semmle.label | bzip2Reader | -| test.go:217:18:217:24 | tarRead | semmle.label | tarRead | -| test.go:234:12:234:15 | definition of file | semmle.label | definition of file | -| test.go:237:17:237:37 | call to NewReader | semmle.label | call to NewReader | -| test.go:237:33:237:36 | file | semmle.label | file | -| test.go:239:2:239:12 | flateReader | semmle.label | flateReader | -| test.go:240:12:240:37 | call to NewReader | semmle.label | call to NewReader | -| test.go:240:26:240:36 | flateReader | semmle.label | flateReader | -| test.go:242:18:242:24 | tarRead | semmle.label | tarRead | -| test.go:259:21:259:24 | definition of file | semmle.label | definition of file | -| test.go:262:17:262:46 | call to NewReader | semmle.label | call to NewReader | -| test.go:262:42:262:45 | file | semmle.label | file | -| test.go:264:2:264:12 | flateReader | semmle.label | flateReader | -| test.go:265:12:265:37 | call to NewReader | semmle.label | call to NewReader | -| test.go:265:26:265:36 | flateReader | semmle.label | flateReader | -| test.go:267:18:267:24 | tarRead | semmle.label | tarRead | -| test.go:284:17:284:20 | definition of file | semmle.label | definition of file | -| test.go:287:2:287:73 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:287:41:287:44 | file | semmle.label | file | -| test.go:289:2:289:12 | flateReader | semmle.label | flateReader | -| test.go:290:12:290:37 | call to NewReader | semmle.label | call to NewReader | -| test.go:290:26:290:36 | flateReader | semmle.label | flateReader | -| test.go:292:18:292:24 | tarRead | semmle.label | tarRead | -| test.go:309:20:309:23 | definition of file | semmle.label | definition of file | -| test.go:312:2:312:47 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:312:43:312:46 | file | semmle.label | file | -| test.go:314:2:314:11 | zlibReader | semmle.label | zlibReader | -| test.go:315:12:315:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:315:26:315:35 | zlibReader | semmle.label | zlibReader | -| test.go:317:18:317:24 | tarRead | semmle.label | tarRead | -| test.go:334:11:334:14 | definition of file | semmle.label | definition of file | -| test.go:337:2:337:38 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:337:34:337:37 | file | semmle.label | file | -| test.go:339:2:339:11 | zlibReader | semmle.label | zlibReader | -| test.go:340:12:340:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:340:26:340:35 | zlibReader | semmle.label | zlibReader | -| test.go:342:18:342:24 | tarRead | semmle.label | tarRead | -| test.go:359:13:359:16 | definition of file | semmle.label | definition of file | -| test.go:362:18:362:39 | call to NewReader | semmle.label | call to NewReader | -| test.go:362:35:362:38 | file | semmle.label | file | +| 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:2:365:13 | snappyReader | semmle.label | snappyReader | -| test.go:366:12:366:38 | call to NewReader | semmle.label | call to NewReader | -| test.go:366:26:366:37 | snappyReader | semmle.label | snappyReader | -| test.go:368:18:368:24 | tarRead | semmle.label | tarRead | -| test.go:385:22:385:25 | definition of file | semmle.label | definition of file | -| test.go:388:18:388:48 | call to NewReader | semmle.label | call to NewReader | -| test.go:388:44:388:47 | file | semmle.label | file | -| test.go:390:2:390: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:2:393:13 | snappyReader | semmle.label | snappyReader | -| test.go:394:12:394:38 | call to NewReader | semmle.label | call to NewReader | -| test.go:394:26:394:37 | snappyReader | semmle.label | snappyReader | -| test.go:396:18:396:24 | tarRead | semmle.label | tarRead | -| test.go:413:9:413:12 | definition of file | semmle.label | definition of file | -| test.go:416:14:416:31 | call to NewReader | semmle.label | call to NewReader | -| test.go:416:27:416:30 | file | semmle.label | file | -| 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 | +| 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:419:2:419:9 | s2Reader | semmle.label | s2Reader | +| test.go:420:12:420:34 | call to NewReader | semmle.label | call to NewReader | +| test.go:420:26:420:33 | s2Reader | semmle.label | s2Reader | +| test.go:422:18:422:24 | tarRead | semmle.label | tarRead | +| test.go:439:19:439:21 | definition of src | semmle.label | definition of src | +| test.go:440:2:440:37 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:440:34:440:36 | src | semmle.label | src | +| test.go:443:12:443:32 | type conversion | semmle.label | type conversion | +| test.go:444:23:444:28 | newSrc | semmle.label | newSrc | +| test.go:446:11:446:14 | definition of file | semmle.label | definition of file | +| test.go:449:2:449:38 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:449:34:449:37 | file | semmle.label | file | +| test.go:451:2:451:11 | gzipReader | semmle.label | gzipReader | +| test.go:452:12:452:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:452:26:452:35 | gzipReader | semmle.label | gzipReader | +| test.go:454:18:454:24 | tarRead | semmle.label | tarRead | +| test.go:471:20:471:23 | definition of file | semmle.label | definition of file | +| test.go:474:2:474:47 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:474:43:474:46 | file | semmle.label | file | +| test.go:476:2:476:11 | gzipReader | semmle.label | gzipReader | +| test.go:478:2:478:11 | gzipReader | semmle.label | gzipReader | +| test.go:479:12:479:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:479:26:479:35 | gzipReader | semmle.label | gzipReader | +| test.go:481:18:481:24 | tarRead | semmle.label | tarRead | +| test.go:498:20:498:23 | definition of file | semmle.label | definition of file | +| test.go:501:2:501:49 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:501:45:501:48 | file | semmle.label | file | +| test.go:503:2:503:12 | pgzipReader | semmle.label | pgzipReader | +| test.go:505:2:505:12 | pgzipReader | semmle.label | pgzipReader | +| test.go:506:12:506:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:506:26:506:36 | pgzipReader | semmle.label | pgzipReader | +| test.go:508:18:508:24 | tarRead | semmle.label | tarRead | +| test.go:525:21:525:24 | definition of file | semmle.label | definition of file | +| test.go:528:2:528:47 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:528:43:528:46 | file | semmle.label | file | +| test.go:530:2:530:11 | zstdReader | semmle.label | zstdReader | +| test.go:532:2:532:11 | zstdReader | semmle.label | zstdReader | +| test.go:534:2:534:11 | zstdReader | semmle.label | zstdReader | +| test.go:535:12:535:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:535:26:535:35 | zstdReader | semmle.label | zstdReader | +| test.go:537:18:537:24 | tarRead | semmle.label | tarRead | +| test.go:554:19:554:22 | definition of file | semmle.label | definition of file | +| test.go:557:16:557:42 | call to NewReader | semmle.label | call to NewReader | +| test.go:557:38:557:41 | file | semmle.label | file | +| test.go:559:2:559:11 | zstdReader | semmle.label | zstdReader | +| test.go:560:12:560:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:560:26:560:35 | zstdReader | semmle.label | zstdReader | +| test.go:562:18:562:24 | tarRead | semmle.label | tarRead | +| test.go:579:9:579:12 | definition of file | semmle.label | definition of file | +| test.go:582:2:582:34 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:582:30:582:33 | file | semmle.label | file | +| test.go:584:2:584:9 | xzReader | semmle.label | xzReader | +| test.go:585:12:585:34 | call to NewReader | semmle.label | call to NewReader | +| test.go:585:26:585:33 | xzReader | semmle.label | xzReader | +| test.go:588:18:588:24 | tarRead | semmle.label | tarRead | +| test.go:589:19:589:25 | tarRead | semmle.label | tarRead | +| test.go:610:22:610:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:610:22:610:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:610:22:610:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:610:22:610:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:610:22:610:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:610:22:610:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:610:22:610:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:610:22:610:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:610:22:610:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:620:25:620:31 | tarRead | semmle.label | tarRead | +| test.go:620:25:620:31 | tarRead | semmle.label | tarRead | +| test.go:620:25:620:31 | tarRead | semmle.label | tarRead | +| test.go:620:25:620:31 | tarRead | semmle.label | tarRead | +| test.go:620:25:620:31 | tarRead | semmle.label | tarRead | +| test.go:620:25:620:31 | tarRead | semmle.label | tarRead | +| test.go:620:25:620:31 | tarRead | semmle.label | tarRead | +| test.go:620:25:620:31 | tarRead | semmle.label | tarRead | +| test.go:620:25:620:31 | tarRead | semmle.label | tarRead | +| test.go:626:23:626:29 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:628:2:628:8 | tarRead | semmle.label | tarRead | subpaths #select -| test.go:135:37:135:38 | rc | test.go:59:16:59:46 | call to FormValue | test.go:135:37:135:38 | rc | This decompression is $@. | test.go:59:16:59:46 | call to FormValue | decompressing compressed data without managing output size | -| test.go:148:37:148:38 | rc | test.go:59:16:59:46 | call to FormValue | test.go:148:37:148:38 | rc | This decompression is $@. | test.go:59:16:59:46 | call to FormValue | decompressing compressed data without managing output size | -| test.go:165:36:165:51 | fileReaderCloser | test.go:57:15:57:26 | selection of Body | test.go:165:36:165:51 | fileReaderCloser | This decompression is $@. | test.go:57:15:57:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:177:36:177:51 | fileReaderCloser | test.go:58:24:58:35 | selection of Body | test.go:177:36:177:51 | fileReaderCloser | This decompression is $@. | test.go:58:24:58:35 | selection of Body | decompressing compressed data without managing output size | -| test.go:187:2:187:12 | bzip2Reader | test.go:60:13:60:24 | selection of Body | test.go:187:2:187:12 | bzip2Reader | This decompression is $@. | test.go:60:13:60:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:214:2:214:12 | bzip2Reader | test.go:61:8:61:19 | selection of Body | test.go:214:2:214:12 | bzip2Reader | This decompression is $@. | test.go:61:8:61:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:239:2:239:12 | flateReader | test.go:62:8:62:19 | selection of Body | test.go:239:2:239:12 | flateReader | This decompression is $@. | test.go:62:8:62:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:264:2:264:12 | flateReader | test.go:63:17:63:28 | selection of Body | test.go:264:2:264:12 | flateReader | This decompression is $@. | test.go:63:17:63:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:289:2:289:12 | flateReader | test.go:64:13:64:24 | selection of Body | test.go:289:2:289:12 | flateReader | This decompression is $@. | test.go:64:13:64:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:314:2:314:11 | zlibReader | test.go:65:16:65:27 | selection of Body | test.go:314:2:314:11 | zlibReader | This decompression is $@. | test.go:65:16:65:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:339:2:339:11 | zlibReader | test.go:66:7:66:18 | selection of Body | test.go:339:2:339:11 | zlibReader | This decompression is $@. | test.go:66:7:66:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:364:2:364:13 | snappyReader | test.go:67:9:67:20 | selection of Body | test.go:364:2:364:13 | snappyReader | This decompression is $@. | test.go:67:9:67:20 | selection of Body | decompressing compressed data without managing output size | -| test.go:365:2:365:13 | snappyReader | test.go:67:9:67:20 | selection of Body | test.go:365:2:365:13 | snappyReader | This decompression is $@. | test.go:67:9:67:20 | selection of Body | decompressing compressed data without managing output size | -| test.go:390:2:390:13 | snappyReader | test.go:68:18:68:29 | selection of Body | test.go:390:2:390:13 | snappyReader | This decompression is $@. | test.go:68:18:68:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:392:2:392:13 | snappyReader | test.go:68:18:68:29 | selection of Body | test.go:392:2:392:13 | snappyReader | This decompression is $@. | test.go:68:18:68:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:393:2:393:13 | snappyReader | test.go:68:18:68:29 | selection of Body | test.go:393:2:393:13 | snappyReader | This decompression is $@. | test.go:68:18:68:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:418:2:418:9 | s2Reader | test.go:69:5:69:16 | selection of Body | test.go:418:2:418:9 | s2Reader | This decompression is $@. | test.go:69:5:69:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:420:2:420:9 | s2Reader | test.go:69:5:69:16 | selection of Body | test.go:420:2:420:9 | s2Reader | This decompression is $@. | test.go:69:5:69:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:445:23:445:28 | newSrc | test.go:71:15:71:26 | selection of Body | test.go:445:23:445:28 | newSrc | This decompression is $@. | test.go:71:15:71:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:452:2:452:11 | gzipReader | test.go:70:7:70:18 | selection of Body | test.go:452:2:452:11 | gzipReader | This decompression is $@. | test.go:70:7:70:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:477:2:477:11 | gzipReader | test.go:72:16:72:27 | selection of Body | test.go:477:2:477:11 | gzipReader | This decompression is $@. | test.go:72:16:72:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:479:2:479:11 | gzipReader | test.go:72:16:72:27 | selection of Body | test.go:479:2:479:11 | gzipReader | This decompression is $@. | test.go:72:16:72:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:504:2:504:12 | pgzipReader | test.go:73:16:73:27 | selection of Body | test.go:504:2:504:12 | pgzipReader | This decompression is $@. | test.go:73:16:73:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:506:2:506:12 | pgzipReader | test.go:73:16:73:27 | selection of Body | test.go:506:2:506:12 | pgzipReader | This decompression is $@. | test.go:73:16:73:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:531:2:531:11 | zstdReader | test.go:74:17:74:28 | selection of Body | test.go:531:2:531:11 | zstdReader | This decompression is $@. | test.go:74:17:74:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:533:2:533:11 | zstdReader | test.go:74:17:74:28 | selection of Body | test.go:533:2:533:11 | zstdReader | This decompression is $@. | test.go:74:17:74:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:535:2:535:11 | zstdReader | test.go:74:17:74:28 | selection of Body | test.go:535:2:535:11 | zstdReader | This decompression is $@. | test.go:74:17:74:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:560:2:560:11 | zstdReader | test.go:75:15:75:26 | selection of Body | test.go:560:2:560:11 | zstdReader | This decompression is $@. | test.go:75:15:75:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:585:2:585:9 | xzReader | test.go:76:5:76:16 | selection of Body | test.go:585:2:585:9 | xzReader | This decompression is $@. | test.go:76:5:76:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:621:25:621:31 | tarRead | test.go:60:13:60:24 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:60:13:60:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:621:25:621:31 | tarRead | test.go:61:8:61:19 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:61:8:61:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:621:25:621:31 | tarRead | test.go:62:8:62:19 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:62:8:62:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:621:25:621:31 | tarRead | test.go:63:17:63:28 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:63:17:63:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:621:25:621:31 | tarRead | test.go:64:13:64:24 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:64:13:64:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:621:25:621:31 | tarRead | test.go:65:16:65:27 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:65:16:65:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:621:25:621:31 | tarRead | test.go:66:7:66:18 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:66:7:66:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:621:25:621:31 | tarRead | test.go:67:9:67:20 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:67:9:67:20 | selection of Body | decompressing compressed data without managing output size | -| test.go:621:25:621:31 | tarRead | test.go:68:18:68:29 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:68:18:68:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:621:25:621:31 | tarRead | test.go:69:5:69:16 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:69:5:69:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:621:25:621:31 | tarRead | test.go:70:7:70:18 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:70:7:70:18 | 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:73:16:73:27 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:73:16:73:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:621:25:621:31 | tarRead | test.go:74:17:74:28 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:74:17:74:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:621:25:621:31 | tarRead | test.go:75:15:75:26 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:75:15:75:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:621:25:621:31 | tarRead | test.go:76:5:76:16 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:76:5:76:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:629:2:629:8 | tarRead | test.go:76:5:76:16 | selection of Body | test.go:629:2:629:8 | tarRead | This decompression is $@. | test.go:76:5:76:16 | selection of Body | decompressing compressed data without managing output size | +| 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:419:2:419:9 | s2Reader | test.go:80:5:80:16 | selection of Body | test.go:419:2:419:9 | s2Reader | This decompression is $@. | test.go:80:5:80:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:444:23:444:28 | newSrc | test.go:84:15:84:26 | selection of Body | test.go:444:23:444:28 | newSrc | This decompression is $@. | test.go:84:15:84:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:451:2:451:11 | gzipReader | test.go:82:7:82:18 | selection of Body | test.go:451:2:451:11 | gzipReader | This decompression is $@. | test.go:82:7:82:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:476:2:476:11 | gzipReader | test.go:85:16:85:27 | selection of Body | test.go:476:2:476:11 | gzipReader | This decompression is $@. | test.go:85:16:85:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:478:2:478:11 | gzipReader | test.go:85:16:85:27 | selection of Body | test.go:478:2:478:11 | gzipReader | This decompression is $@. | test.go:85:16:85:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:503:2:503:12 | pgzipReader | test.go:87:16:87:27 | selection of Body | test.go:503:2:503:12 | pgzipReader | This decompression is $@. | test.go:87:16:87:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:505:2:505:12 | pgzipReader | test.go:87:16:87:27 | selection of Body | test.go:505:2:505:12 | pgzipReader | This decompression is $@. | test.go:87:16:87:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:530:2:530:11 | zstdReader | test.go:89:17:89:28 | selection of Body | test.go:530:2:530:11 | zstdReader | This decompression is $@. | test.go:89:17:89:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:532:2:532:11 | zstdReader | test.go:89:17:89:28 | selection of Body | test.go:532:2:532:11 | zstdReader | This decompression is $@. | test.go:89:17:89:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:534:2:534:11 | zstdReader | test.go:89:17:89:28 | selection of Body | test.go:534:2:534:11 | zstdReader | This decompression is $@. | test.go:89:17:89:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:559:2:559:11 | zstdReader | test.go:91:15:91:26 | selection of Body | test.go:559:2:559:11 | zstdReader | This decompression is $@. | test.go:91:15:91:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:584:2:584:9 | xzReader | test.go:93:5:93:16 | selection of Body | test.go:584:2:584:9 | xzReader | This decompression is $@. | test.go:93:5:93:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:620:25:620:31 | tarRead | test.go:62:13:62:24 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:62:13:62:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:620:25:620:31 | tarRead | test.go:64:8:64:19 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:64:8:64:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:620:25:620:31 | tarRead | test.go:66:8:66:19 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:66:8:66:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:620:25:620:31 | tarRead | test.go:68:17:68:28 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:68:17:68:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:620:25:620:31 | tarRead | test.go:70:13:70:24 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:70:13:70:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:620:25:620:31 | tarRead | test.go:72:16:72:27 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:72:16:72:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:620:25:620:31 | tarRead | test.go:74:7:74:18 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:74:7:74:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:620:25:620:31 | tarRead | test.go:76:9:76:20 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:76:9:76:20 | selection of Body | decompressing compressed data without managing output size | +| test.go:620:25:620:31 | tarRead | test.go:78:18:78:29 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:78:18:78:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:620:25:620:31 | tarRead | test.go:80:5:80:16 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:80:5:80:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:620:25:620:31 | tarRead | test.go:82:7:82:18 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:82:7:82:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:620:25:620:31 | tarRead | test.go:85:16:85:27 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:85:16:85:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:620:25:620:31 | tarRead | test.go:87:16:87:27 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:87:16:87:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:620:25:620:31 | tarRead | test.go:89:17:89:28 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:89:17:89:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:620:25:620:31 | tarRead | test.go:91:15:91:26 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:91:15:91:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:620:25:620:31 | tarRead | test.go:93:5:93:16 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:93:5:93:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:628:2:628:8 | tarRead | test.go:93:5:93:16 | selection of Body | test.go:628:2:628: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/test.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go index 6467f2568ba..1d1208f7f9a 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go @@ -54,44 +54,43 @@ func main() { } 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) - ZipOpenReader(request.FormValue("filepathba")) 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) - PzipKlauspost(request.Body) - Zstd_Klauspost(request.Body) - Zstd_DataDog(request.Body) - Xz(request.Body) - - ZipOpenReaderSafe(request.PostFormValue("test")) - GZipOpenReaderSafe(request.PostFormValue("test")) - Bzip2DsnetSafe(request.Body) - Bzip2Safe(request.Body) - FlateSafe(request.Body) - FlateKlauspostSafe(request.Body) - FlateDsnetSafe(request.Body) - ZlibKlauspostSafe(request.Body) - ZlibSafe(request.Body) - SnappySafe(request.Body) - SnappyKlauspostSafe(request.Body) - S2Safe(request.Body) - GzipSafe(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) } From 13b0a9a842231c1a30743cd45b13ded21783918b Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Wed, 21 Feb 2024 01:05:57 +0400 Subject: [PATCH 061/430] New testcase 's2Reader.ReadByte()' --- go/ql/test/experimental/CWE-522-DecompressionBombs/test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go index 1d1208f7f9a..dc359c387ac 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go @@ -414,7 +414,8 @@ func S2(file io.Reader) { s2Reader := s2.NewReader(file) var out []byte = make([]byte, 70) - s2Reader.Read(out) // $ hasValueFlow="s2Reader" + s2Reader.Read(out) // $ hasValueFlow="s2Reader" + s2Reader.ReadByte() // $ hasValueFlow="s2Reader" var buf bytes.Buffer s2Reader.DecodeConcurrent(&buf, 2) // $ hasValueFlow="s2Reader" tarRead = tar.NewReader(s2Reader) From 3307457deb87bbcd9f2b1b5ff7da31754ca9af0f Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Wed, 21 Feb 2024 01:07:21 +0400 Subject: [PATCH 062/430] use `implements` predicate for `io` interfaces, so we can reduce many repetitive parts of query --- .../DecompressionBombsCustomizations.qll | 134 +----------------- 1 file changed, 7 insertions(+), 127 deletions(-) diff --git a/go/ql/src/experimental/frameworks/DecompressionBombsCustomizations.qll b/go/ql/src/experimental/frameworks/DecompressionBombsCustomizations.qll index 1d70b71df11..391e162fa1a 100644 --- a/go/ql/src/experimental/frameworks/DecompressionBombsCustomizations.qll +++ b/go/ql/src/experimental/frameworks/DecompressionBombsCustomizations.qll @@ -74,14 +74,6 @@ module DecompressionBombs { | this = m.getACall().getReceiver() ) - or - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("github.com/klauspost/compress/zstd", "Decoder", ["WriteTo", "Read"]) and - cn = m.getACall() - | - this = cn.getReceiver() and - not hasFlowToComparison(cn.getResult(0)) - ) } } @@ -178,18 +170,6 @@ module DecompressionBombs { * Provides decompression bomb sinks and additional flow steps for `github.com/ulikunitz/xz` package */ module UlikunitzXz { - class TheSink extends Sink { - TheSink() { - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("github.com/ulikunitz/xz", "Reader", "Read") and - cn = m.getACall() - | - this = cn.getReceiver() and - not hasFlowToComparison(cn.getResult(0)) - ) - } - } - class TheAdditionalTaintStep extends AdditionalTaintStep { TheAdditionalTaintStep() { this = "AdditionalTaintStep" } @@ -216,18 +196,6 @@ module DecompressionBombs { * Provides decompression bomb sinks and additional flow steps for `compress/gzip` package */ module CompressGzipBombs { - class TheSink extends Sink { - TheSink() { - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("compress/gzip", "Reader", "Read") and - cn = m.getACall() - | - this = cn.getReceiver() and - not hasFlowToComparison(cn.getResult(0)) - ) - } - } - class TheAdditionalTaintStep extends AdditionalTaintStep { TheAdditionalTaintStep() { this = "AdditionalTaintStep" } @@ -255,19 +223,6 @@ module DecompressionBombs { * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/gzip` package */ module KlauspostGzipAndPgzip { - class TheSink extends Sink { - TheSink() { - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName(["github.com/klauspost/compress/gzip", "github.com/klauspost/pgzip"], - "Reader", ["Read", "WriteTo"]) and - cn = m.getACall() - | - this = cn.getReceiver() and - not hasFlowToComparison(cn.getResult(0)) - ) - } - } - class TheAdditionalTaintStep extends AdditionalTaintStep { TheAdditionalTaintStep() { this = "AdditionalTaintStep" } @@ -301,18 +256,6 @@ module DecompressionBombs { * Provides decompression bomb sinks and additional flow steps for `compress/bzip2` package */ module CompressBzip2 { - class TheSink extends Sink { - TheSink() { - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("compress/bzip2", "reader", "Read") and - cn = m.getACall() - | - this = cn.getReceiver() and - not hasFlowToComparison(cn.getResult(0)) - ) - } - } - class TheAdditionalTaintStep extends AdditionalTaintStep { TheAdditionalTaintStep() { this = "AdditionalTaintStep" } @@ -340,18 +283,6 @@ module DecompressionBombs { * Provides decompression bomb sinks and additional flow steps for `github.com/dsnet/compress/bzip2` package */ module DsnetBzip2 { - class TheSink extends Sink { - TheSink() { - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("github.com/dsnet/compress/bzip2", "Reader", "Read") and - cn = m.getACall() - | - this = cn.getReceiver() and - not hasFlowToComparison(cn.getResult(0)) - ) - } - } - class TheAdditionalTaintStep extends AdditionalTaintStep { TheAdditionalTaintStep() { this = "AdditionalTaintStep" } @@ -379,18 +310,6 @@ module DecompressionBombs { * Provides decompression bomb sinks and additional flow steps for `github.com/dsnet/compress/flate` package */ module DsnetFlate { - class TheSink extends Sink { - TheSink() { - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("github.com/dsnet/compress/flate", "Reader", "Read") and - cn = m.getACall() - | - this = cn.getReceiver() and - not hasFlowToComparison(cn.getResult(0)) - ) - } - } - class TheAdditionalTaintStep extends AdditionalTaintStep { TheAdditionalTaintStep() { this = "AdditionalTaintStep" } @@ -496,18 +415,6 @@ module DecompressionBombs { * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/zlib` package */ module KlauspostZlib { - class TheSink extends Sink { - TheSink() { - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("github.com/klauspost/compress/zlib", "reader", "Read") and - cn = m.getACall() - | - this = cn.getReceiver() and - not hasFlowToComparison(cn.getResult(0)) - ) - } - } - class TheAdditionalTaintStep extends AdditionalTaintStep { TheAdditionalTaintStep() { this = "AdditionalTaintStep" } @@ -535,18 +442,6 @@ module DecompressionBombs { * Provides decompression bomb sinks and additional flow steps for `compress/zlib` package */ module CompressZlibBombs { - class TheSink extends Sink { - TheSink() { - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("compress/zlib", "reader", "Read") and - cn = m.getACall() - | - this = cn.getReceiver() and - not hasFlowToComparison(cn.getResult(0)) - ) - } - } - class TheAdditionalTaintStep extends AdditionalTaintStep { TheAdditionalTaintStep() { this = "AdditionalTaintStep" } @@ -574,18 +469,6 @@ module DecompressionBombs { * Provides decompression bomb sinks and additional flow steps for `github.com/golang/snappy` package */ module GolangSnappy { - class TheSink extends Sink { - TheSink() { - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("github.com/golang/snappy", "Reader", ["Read", "ReadByte"]) and - cn = m.getACall() - | - this = cn.getReceiver() and - not hasFlowToComparison(cn.getResult(0)) - ) - } - } - class TheAdditionalTaintStep extends AdditionalTaintStep { TheAdditionalTaintStep() { this = "AdditionalTaintStep" } @@ -643,8 +526,7 @@ module DecompressionBombs { class TheSink extends Sink { TheSink() { exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("github.com/klauspost/compress/s2", "Reader", - ["DecodeConcurrent", "ReadByte", "Read"]) and + m.hasQualifiedName("github.com/klauspost/compress/s2", "Reader", "DecodeConcurrent") and cn = m.getACall() | this = cn.getReceiver() and @@ -690,14 +572,12 @@ module DecompressionBombs { ) or exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("io", "Reader", "Read") and cn = m.getACall() - | - this = cn.getReceiver() and - not hasFlowToComparison(cn.getResult(0)) - ) - or - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("archive/tar", "Reader", "Read") and cn = m.getACall() + ( + 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)) From 4c769f2b096f9de45c13c5f519cc16623607c6ee Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Wed, 21 Feb 2024 01:10:35 +0400 Subject: [PATCH 063/430] update tests --- .../DecompressionBombs.expected | 379 +++++++++--------- 1 file changed, 191 insertions(+), 188 deletions(-) diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected index 3e123fb7412..1442b747630 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -12,13 +12,13 @@ edges | test.go:76:9:76:20 | selection of Body | test.go:358:13:358:16 | definition of file | | test.go:78:18:78:29 | selection of Body | test.go:384:22:384:25 | definition of file | | test.go:80:5:80:16 | selection of Body | test.go:412:9:412:12 | definition of file | -| test.go:82:7:82:18 | selection of Body | test.go:446:11:446:14 | definition of file | -| test.go:84:15:84:26 | selection of Body | test.go:439:19:439:21 | definition of src | -| test.go:85:16:85:27 | selection of Body | test.go:471:20:471:23 | definition of file | -| test.go:87:16:87:27 | selection of Body | test.go:498:20:498:23 | definition of file | -| test.go:89:17:89:28 | selection of Body | test.go:525:21:525:24 | definition of file | -| test.go:91:15:91:26 | selection of Body | test.go:554:19:554:22 | definition of file | -| test.go:93:5:93:16 | selection of Body | test.go:579:9:579:12 | definition of file | +| test.go:82:7:82:18 | selection of Body | test.go:447:11:447:14 | definition of file | +| test.go:84:15:84:26 | selection of Body | test.go:440:19:440:21 | definition of src | +| test.go:85:16:85:27 | selection of Body | test.go:472:20:472:23 | definition of file | +| test.go:87:16:87:27 | selection of Body | test.go:499:20:499:23 | definition of file | +| test.go:89:17:89:28 | selection of Body | test.go:526:21:526:24 | definition of file | +| test.go:91:15:91:26 | selection of Body | test.go:555:19:555:22 | definition of file | +| test.go:93:5:93:16 | selection of Body | test.go:580:9:580:12 | definition of file | | test.go:128:20:128:27 | definition of filename | test.go:130:33:130:40 | filename | | test.go:128:20:128:27 | definition of filename | test.go:143:51:143:58 | filename | | test.go:130:2:130:41 | ... := ...[0] | test.go:132:12:132:12 | f | @@ -54,49 +54,49 @@ edges | test.go:184:41:184:44 | file | test.go:184:2:184:73 | ... := ...[0] | | test.go:187:12:187:37 | call to NewReader | test.go:189:18:189:24 | tarRead | | test.go:187:26:187:36 | bzip2Reader | test.go:187:12:187:37 | call to NewReader | -| test.go:189:18:189:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:189:18:189:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | | test.go:208:12:208:15 | definition of file | test.go:211:33:211:36 | file | | test.go:211:17:211:37 | call to NewReader | test.go:213:2:213:12 | bzip2Reader | | test.go:211:17:211:37 | call to NewReader | test.go:214:26:214:36 | bzip2Reader | | test.go:211:33:211:36 | file | test.go:211:17:211:37 | call to NewReader | | test.go:214:12:214:37 | call to NewReader | test.go:216:18:216:24 | tarRead | | test.go:214:26:214:36 | bzip2Reader | test.go:214:12:214:37 | call to NewReader | -| test.go:216:18:216:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:216:18:216:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | | test.go:233:12:233:15 | definition of file | test.go:236:33:236:36 | file | | test.go:236:17:236:37 | call to NewReader | test.go:238:2:238:12 | flateReader | | test.go:236:17:236:37 | call to NewReader | test.go:239:26:239:36 | flateReader | | test.go:236:33:236:36 | file | test.go:236:17:236:37 | call to NewReader | | test.go:239:12:239:37 | call to NewReader | test.go:241:18:241:24 | tarRead | | test.go:239:26:239:36 | flateReader | test.go:239:12:239:37 | call to NewReader | -| test.go:241:18:241:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:241:18:241:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | | test.go:258:21:258:24 | definition of file | test.go:261:42:261:45 | file | | test.go:261:17:261:46 | call to NewReader | test.go:263:2:263:12 | flateReader | | test.go:261:17:261:46 | call to NewReader | test.go:264:26:264:36 | flateReader | | test.go:261:42:261:45 | file | test.go:261:17:261:46 | call to NewReader | | test.go:264:12:264:37 | call to NewReader | test.go:266:18:266:24 | tarRead | | test.go:264:26:264:36 | flateReader | test.go:264:12:264:37 | call to NewReader | -| test.go:266:18:266:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:266:18:266:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | | test.go:283:17:283:20 | definition of file | test.go:286:41:286:44 | file | | test.go:286:2:286:73 | ... := ...[0] | test.go:288:2:288:12 | flateReader | | test.go:286:2:286:73 | ... := ...[0] | test.go:289:26:289:36 | flateReader | | test.go:286:41:286:44 | file | test.go:286:2:286:73 | ... := ...[0] | | test.go:289:12:289:37 | call to NewReader | test.go:291:18:291:24 | tarRead | | test.go:289:26:289:36 | flateReader | test.go:289:12:289:37 | call to NewReader | -| test.go:291:18:291:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:291:18:291:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | | test.go:308:20:308:23 | definition of file | test.go:311:43:311:46 | file | | test.go:311:2:311:47 | ... := ...[0] | test.go:313:2:313:11 | zlibReader | | test.go:311:2:311:47 | ... := ...[0] | test.go:314:26:314:35 | zlibReader | | test.go:311:43:311:46 | file | test.go:311:2:311:47 | ... := ...[0] | | test.go:314:12:314:36 | call to NewReader | test.go:316:18:316:24 | tarRead | | test.go:314:26:314:35 | zlibReader | test.go:314:12:314:36 | call to NewReader | -| test.go:316:18:316:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:316:18:316:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | | test.go:333:11:333:14 | definition of file | test.go:336:34:336:37 | file | | test.go:336:2:336:38 | ... := ...[0] | test.go:338:2:338:11 | zlibReader | | test.go:336:2:336:38 | ... := ...[0] | test.go:339:26:339:35 | zlibReader | | test.go:336:34:336:37 | file | test.go:336:2:336:38 | ... := ...[0] | | test.go:339:12:339:36 | call to NewReader | test.go:341:18:341:24 | tarRead | | test.go:339:26:339:35 | zlibReader | test.go:339:12:339:36 | call to NewReader | -| test.go:341:18:341:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:341:18:341:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | | test.go:358:13:358:16 | definition of file | test.go:361:35:361:38 | file | | test.go:361:18:361:39 | call to NewReader | test.go:363:2:363:13 | snappyReader | | test.go:361:18:361:39 | call to NewReader | test.go:364:2:364:13 | snappyReader | @@ -104,7 +104,7 @@ edges | test.go:361:35:361:38 | file | test.go:361:18:361:39 | call to NewReader | | test.go:365:12:365:38 | call to NewReader | test.go:367:18:367:24 | tarRead | | test.go:365:26:365:37 | snappyReader | test.go:365:12:365:38 | call to NewReader | -| test.go:367:18:367:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:367:18:367:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | | test.go:384:22:384:25 | definition of file | test.go:387:44:387:47 | file | | test.go:387:18:387:48 | call to NewReader | test.go:389:2:389:13 | snappyReader | | test.go:387:18:387:48 | call to NewReader | test.go:391:2:391:13 | snappyReader | @@ -113,77 +113,78 @@ edges | test.go:387:44:387:47 | file | test.go:387:18:387:48 | call to NewReader | | test.go:393:12:393:38 | call to NewReader | test.go:395:18:395:24 | tarRead | | test.go:393:26:393:37 | snappyReader | test.go:393:12:393:38 | call to NewReader | -| test.go:395:18:395:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | +| test.go:395:18:395:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | | test.go:412:9:412:12 | definition of file | test.go:415:27:415:30 | file | | test.go:415:14:415:31 | call to NewReader | test.go:417:2:417:9 | s2Reader | -| test.go:415:14:415:31 | call to NewReader | test.go:419:2:419:9 | s2Reader | -| test.go:415:14:415:31 | call to NewReader | test.go:420:26:420:33 | s2Reader | +| test.go:415:14:415:31 | call to NewReader | test.go:418:2:418:9 | s2Reader | +| test.go:415:14:415:31 | call to NewReader | test.go:420:2:420:9 | s2Reader | +| test.go:415:14:415:31 | call to NewReader | test.go:421:26:421:33 | s2Reader | | test.go:415:27:415:30 | file | test.go:415:14:415:31 | call to NewReader | -| test.go:420:12:420:34 | call to NewReader | test.go:422:18:422:24 | tarRead | -| test.go:420:26:420:33 | s2Reader | test.go:420:12:420:34 | call to NewReader | -| test.go:422:18:422:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | -| test.go:439:19:439:21 | definition of src | test.go:440:34:440:36 | src | -| test.go:440:2:440:37 | ... := ...[0] | test.go:443:12:443:32 | type conversion | -| test.go:440:34:440:36 | src | test.go:440:2:440:37 | ... := ...[0] | -| test.go:443:12:443:32 | type conversion | test.go:444:23:444:28 | newSrc | -| test.go:446:11:446:14 | definition of file | test.go:449:34:449:37 | file | -| test.go:449:2:449:38 | ... := ...[0] | test.go:451:2:451:11 | gzipReader | -| test.go:449:2:449:38 | ... := ...[0] | test.go:452:26:452:35 | gzipReader | -| test.go:449:34:449:37 | file | test.go:449:2:449:38 | ... := ...[0] | -| test.go:452:12:452:36 | call to NewReader | test.go:454:18:454:24 | tarRead | -| test.go:452:26:452:35 | gzipReader | test.go:452:12:452:36 | call to NewReader | -| test.go:454:18:454:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | -| test.go:471:20:471:23 | definition of file | test.go:474:43:474:46 | file | -| test.go:474:2:474:47 | ... := ...[0] | test.go:476:2:476:11 | gzipReader | -| test.go:474:2:474:47 | ... := ...[0] | test.go:478:2:478:11 | gzipReader | -| test.go:474:2:474:47 | ... := ...[0] | test.go:479:26:479:35 | gzipReader | -| test.go:474:43:474:46 | file | test.go:474:2:474:47 | ... := ...[0] | -| test.go:479:12:479:36 | call to NewReader | test.go:481:18:481:24 | tarRead | -| test.go:479:26:479:35 | gzipReader | test.go:479:12:479:36 | call to NewReader | -| test.go:481:18:481:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | -| test.go:498:20:498:23 | definition of file | test.go:501:45:501:48 | file | -| test.go:501:2:501:49 | ... := ...[0] | test.go:503:2:503:12 | pgzipReader | -| test.go:501:2:501:49 | ... := ...[0] | test.go:505:2:505:12 | pgzipReader | -| test.go:501:2:501:49 | ... := ...[0] | test.go:506:26:506:36 | pgzipReader | -| test.go:501:45:501:48 | file | test.go:501:2:501:49 | ... := ...[0] | -| test.go:506:12:506:37 | call to NewReader | test.go:508:18:508:24 | tarRead | -| test.go:506:26:506:36 | pgzipReader | test.go:506:12:506:37 | call to NewReader | -| test.go:508:18:508:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | -| test.go:525:21:525:24 | definition of file | test.go:528:43:528:46 | file | -| test.go:528:2:528:47 | ... := ...[0] | test.go:530:2:530:11 | zstdReader | -| test.go:528:2:528:47 | ... := ...[0] | test.go:532:2:532:11 | zstdReader | -| test.go:528:2:528:47 | ... := ...[0] | test.go:534:2:534:11 | zstdReader | -| test.go:528:2:528:47 | ... := ...[0] | test.go:535:26:535:35 | zstdReader | -| test.go:528:43:528:46 | file | test.go:528:2:528:47 | ... := ...[0] | -| test.go:535:12:535:36 | call to NewReader | test.go:537:18:537:24 | tarRead | -| test.go:535:26:535:35 | zstdReader | test.go:535:12:535:36 | call to NewReader | -| test.go:537:18:537:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | -| test.go:554:19:554:22 | definition of file | test.go:557:38:557:41 | file | -| test.go:557:16:557:42 | call to NewReader | test.go:559:2:559:11 | zstdReader | -| test.go:557:16:557:42 | call to NewReader | test.go:560:26:560:35 | zstdReader | -| test.go:557:38:557:41 | file | test.go:557:16:557:42 | call to NewReader | -| test.go:560:12:560:36 | call to NewReader | test.go:562:18:562:24 | tarRead | -| test.go:560:26:560:35 | zstdReader | test.go:560:12:560:36 | call to NewReader | -| test.go:562:18:562:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | -| test.go:579:9:579:12 | definition of file | test.go:582:30:582:33 | file | -| test.go:582:2:582:34 | ... := ...[0] | test.go:584:2:584:9 | xzReader | -| test.go:582:2:582:34 | ... := ...[0] | test.go:585:26:585:33 | xzReader | -| test.go:582:30:582:33 | file | test.go:582:2:582:34 | ... := ...[0] | -| test.go:585:12:585:34 | call to NewReader | test.go:588:18:588:24 | tarRead | -| test.go:585:12:585:34 | call to NewReader | test.go:589:19:589:25 | tarRead | -| test.go:585:26:585:33 | xzReader | test.go:585:12:585:34 | call to NewReader | -| test.go:588:18:588:24 | tarRead | test.go:610:22:610:28 | definition of tarRead | -| test.go:589:19:589:25 | tarRead | test.go:626:23:626:29 | definition of tarRead | -| test.go:610:22:610:28 | definition of tarRead | test.go:620:25:620:31 | tarRead | -| test.go:610:22:610:28 | definition of tarRead | test.go:620:25:620:31 | tarRead | -| test.go:610:22:610:28 | definition of tarRead | test.go:620:25:620:31 | tarRead | -| test.go:610:22:610:28 | definition of tarRead | test.go:620:25:620:31 | tarRead | -| test.go:610:22:610:28 | definition of tarRead | test.go:620:25:620:31 | tarRead | -| test.go:610:22:610:28 | definition of tarRead | test.go:620:25:620:31 | tarRead | -| test.go:610:22:610:28 | definition of tarRead | test.go:620:25:620:31 | tarRead | -| test.go:610:22:610:28 | definition of tarRead | test.go:620:25:620:31 | tarRead | -| test.go:610:22:610:28 | definition of tarRead | test.go:620:25:620:31 | tarRead | -| test.go:626:23:626:29 | definition of tarRead | test.go:628:2:628:8 | tarRead | +| test.go:421:12:421:34 | call to NewReader | test.go:423:18:423:24 | tarRead | +| test.go:421:26:421:33 | s2Reader | test.go:421:12:421:34 | call to NewReader | +| test.go:423:18:423:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:440:19:440:21 | definition of src | test.go:441:34:441:36 | src | +| test.go:441:2:441:37 | ... := ...[0] | test.go:444:12:444:32 | type conversion | +| test.go:441:34:441:36 | src | test.go:441:2:441:37 | ... := ...[0] | +| test.go:444:12:444:32 | type conversion | test.go:445:23:445:28 | newSrc | +| test.go:447:11:447:14 | definition of file | test.go:450:34:450:37 | file | +| test.go:450:2:450:38 | ... := ...[0] | test.go:452:2:452:11 | gzipReader | +| test.go:450:2:450:38 | ... := ...[0] | test.go:453:26:453:35 | gzipReader | +| test.go:450:34:450:37 | file | test.go:450:2:450:38 | ... := ...[0] | +| test.go:453:12:453:36 | call to NewReader | test.go:455:18:455:24 | tarRead | +| test.go:453:26:453:35 | gzipReader | test.go:453:12:453:36 | call to NewReader | +| test.go:455:18:455:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:472:20:472:23 | definition of file | test.go:475:43:475:46 | file | +| test.go:475:2:475:47 | ... := ...[0] | test.go:477:2:477:11 | gzipReader | +| test.go:475:2:475:47 | ... := ...[0] | test.go:479:2:479:11 | gzipReader | +| test.go:475:2:475:47 | ... := ...[0] | test.go:480:26:480:35 | gzipReader | +| test.go:475:43:475:46 | file | test.go:475:2:475:47 | ... := ...[0] | +| test.go:480:12:480:36 | call to NewReader | test.go:482:18:482:24 | tarRead | +| test.go:480:26:480:35 | gzipReader | test.go:480:12:480:36 | call to NewReader | +| test.go:482:18:482:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:499:20:499:23 | definition of file | test.go:502:45:502:48 | file | +| test.go:502:2:502:49 | ... := ...[0] | test.go:504:2:504:12 | pgzipReader | +| test.go:502:2:502:49 | ... := ...[0] | test.go:506:2:506:12 | pgzipReader | +| test.go:502:2:502:49 | ... := ...[0] | test.go:507:26:507:36 | pgzipReader | +| test.go:502:45:502:48 | file | test.go:502:2:502:49 | ... := ...[0] | +| test.go:507:12:507:37 | call to NewReader | test.go:509:18:509:24 | tarRead | +| test.go:507:26:507:36 | pgzipReader | test.go:507:12:507:37 | call to NewReader | +| test.go:509:18:509:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:526:21:526:24 | definition of file | test.go:529:43:529:46 | file | +| test.go:529:2:529:47 | ... := ...[0] | test.go:531:2:531:11 | zstdReader | +| test.go:529:2:529:47 | ... := ...[0] | test.go:533:2:533:11 | zstdReader | +| test.go:529:2:529:47 | ... := ...[0] | test.go:535:2:535:11 | zstdReader | +| test.go:529:2:529:47 | ... := ...[0] | test.go:536:26:536:35 | zstdReader | +| test.go:529:43:529:46 | file | test.go:529:2:529:47 | ... := ...[0] | +| test.go:536:12:536:36 | call to NewReader | test.go:538:18:538:24 | tarRead | +| test.go:536:26:536:35 | zstdReader | test.go:536:12:536:36 | call to NewReader | +| test.go:538:18:538:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:555:19:555:22 | definition of file | test.go:558:38:558:41 | file | +| test.go:558:16:558:42 | call to NewReader | test.go:560:2:560:11 | zstdReader | +| test.go:558:16:558:42 | call to NewReader | test.go:561:26:561:35 | zstdReader | +| test.go:558:38:558:41 | file | test.go:558:16:558:42 | call to NewReader | +| test.go:561:12:561:36 | call to NewReader | test.go:563:18:563:24 | tarRead | +| test.go:561:26:561:35 | zstdReader | test.go:561:12:561:36 | call to NewReader | +| test.go:563:18:563:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:580:9:580:12 | definition of file | test.go:583:30:583:33 | file | +| test.go:583:2:583:34 | ... := ...[0] | test.go:585:2:585:9 | xzReader | +| test.go:583:2:583:34 | ... := ...[0] | test.go:586:26:586:33 | xzReader | +| test.go:583:30:583:33 | file | test.go:583:2:583:34 | ... := ...[0] | +| test.go:586:12:586:34 | call to NewReader | test.go:589:18:589:24 | tarRead | +| test.go:586:12:586:34 | call to NewReader | test.go:590:19:590:25 | tarRead | +| test.go:586:26:586:33 | xzReader | test.go:586:12:586:34 | call to NewReader | +| test.go:589:18:589:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | +| test.go:590:19:590:25 | tarRead | test.go:627:23:627:29 | definition of tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | +| test.go:627:23:627:29 | definition of tarRead | test.go:629:2:629:8 | tarRead | 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 | @@ -306,82 +307,83 @@ nodes | 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:419:2:419:9 | s2Reader | semmle.label | s2Reader | -| test.go:420:12:420:34 | call to NewReader | semmle.label | call to NewReader | -| test.go:420:26:420:33 | s2Reader | semmle.label | s2Reader | -| test.go:422:18:422:24 | tarRead | semmle.label | tarRead | -| test.go:439:19:439:21 | definition of src | semmle.label | definition of src | -| test.go:440:2:440:37 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:440:34:440:36 | src | semmle.label | src | -| test.go:443:12:443:32 | type conversion | semmle.label | type conversion | -| test.go:444:23:444:28 | newSrc | semmle.label | newSrc | -| test.go:446:11:446:14 | definition of file | semmle.label | definition of file | -| test.go:449:2:449:38 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:449:34:449:37 | file | semmle.label | file | -| test.go:451:2:451:11 | gzipReader | semmle.label | gzipReader | -| test.go:452:12:452:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:452:26:452:35 | gzipReader | semmle.label | gzipReader | -| test.go:454:18:454:24 | tarRead | semmle.label | tarRead | -| test.go:471:20:471:23 | definition of file | semmle.label | definition of file | -| test.go:474:2:474:47 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:474:43:474:46 | file | semmle.label | file | -| test.go:476:2:476:11 | gzipReader | semmle.label | gzipReader | -| test.go:478:2:478:11 | gzipReader | semmle.label | gzipReader | -| test.go:479:12:479:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:479:26:479:35 | gzipReader | semmle.label | gzipReader | -| test.go:481:18:481:24 | tarRead | semmle.label | tarRead | -| test.go:498:20:498:23 | definition of file | semmle.label | definition of file | -| test.go:501:2:501:49 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:501:45:501:48 | file | semmle.label | file | -| test.go:503:2:503:12 | pgzipReader | semmle.label | pgzipReader | -| test.go:505:2:505:12 | pgzipReader | semmle.label | pgzipReader | -| test.go:506:12:506:37 | call to NewReader | semmle.label | call to NewReader | -| test.go:506:26:506:36 | pgzipReader | semmle.label | pgzipReader | -| test.go:508:18:508:24 | tarRead | semmle.label | tarRead | -| test.go:525:21:525:24 | definition of file | semmle.label | definition of file | -| test.go:528:2:528:47 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:528:43:528:46 | file | semmle.label | file | -| test.go:530:2:530:11 | zstdReader | semmle.label | zstdReader | -| test.go:532:2:532:11 | zstdReader | semmle.label | zstdReader | -| test.go:534:2:534:11 | zstdReader | semmle.label | zstdReader | -| test.go:535:12:535:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:535:26:535:35 | zstdReader | semmle.label | zstdReader | -| test.go:537:18:537:24 | tarRead | semmle.label | tarRead | -| test.go:554:19:554:22 | definition of file | semmle.label | definition of file | -| test.go:557:16:557:42 | call to NewReader | semmle.label | call to NewReader | -| test.go:557:38:557:41 | file | semmle.label | file | -| test.go:559:2:559:11 | zstdReader | semmle.label | zstdReader | -| test.go:560:12:560:36 | call to NewReader | semmle.label | call to NewReader | -| test.go:560:26:560:35 | zstdReader | semmle.label | zstdReader | -| test.go:562:18:562:24 | tarRead | semmle.label | tarRead | -| test.go:579:9:579:12 | definition of file | semmle.label | definition of file | -| test.go:582:2:582:34 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:582:30:582:33 | file | semmle.label | file | -| test.go:584:2:584:9 | xzReader | semmle.label | xzReader | -| test.go:585:12:585:34 | call to NewReader | semmle.label | call to NewReader | -| test.go:585:26:585:33 | xzReader | semmle.label | xzReader | -| test.go:588:18:588:24 | tarRead | semmle.label | tarRead | -| test.go:589:19:589:25 | tarRead | semmle.label | tarRead | -| test.go:610:22:610:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:610:22:610:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:610:22:610:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:610:22:610:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:610:22:610:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:610:22:610:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:610:22:610:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:610:22:610:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:610:22:610:28 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:620:25:620:31 | tarRead | semmle.label | tarRead | -| test.go:620:25:620:31 | tarRead | semmle.label | tarRead | -| test.go:620:25:620:31 | tarRead | semmle.label | tarRead | -| test.go:620:25:620:31 | tarRead | semmle.label | tarRead | -| test.go:620:25:620:31 | tarRead | semmle.label | tarRead | -| test.go:620:25:620:31 | tarRead | semmle.label | tarRead | -| test.go:620:25:620:31 | tarRead | semmle.label | tarRead | -| test.go:620:25:620:31 | tarRead | semmle.label | tarRead | -| test.go:620:25:620:31 | tarRead | semmle.label | tarRead | -| test.go:626:23:626:29 | definition of tarRead | semmle.label | definition of tarRead | -| test.go:628:2:628:8 | tarRead | semmle.label | tarRead | +| 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 | @@ -401,32 +403,33 @@ subpaths | 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:419:2:419:9 | s2Reader | test.go:80:5:80:16 | selection of Body | test.go:419:2:419:9 | s2Reader | This decompression is $@. | test.go:80:5:80:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:444:23:444:28 | newSrc | test.go:84:15:84:26 | selection of Body | test.go:444:23:444:28 | newSrc | This decompression is $@. | test.go:84:15:84:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:451:2:451:11 | gzipReader | test.go:82:7:82:18 | selection of Body | test.go:451:2:451:11 | gzipReader | This decompression is $@. | test.go:82:7:82:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:476:2:476:11 | gzipReader | test.go:85:16:85:27 | selection of Body | test.go:476:2:476:11 | gzipReader | This decompression is $@. | test.go:85:16:85:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:478:2:478:11 | gzipReader | test.go:85:16:85:27 | selection of Body | test.go:478:2:478:11 | gzipReader | This decompression is $@. | test.go:85:16:85:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:503:2:503:12 | pgzipReader | test.go:87:16:87:27 | selection of Body | test.go:503:2:503:12 | pgzipReader | This decompression is $@. | test.go:87:16:87:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:505:2:505:12 | pgzipReader | test.go:87:16:87:27 | selection of Body | test.go:505:2:505:12 | pgzipReader | This decompression is $@. | test.go:87:16:87:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:530:2:530:11 | zstdReader | test.go:89:17:89:28 | selection of Body | test.go:530:2:530:11 | zstdReader | This decompression is $@. | test.go:89:17:89:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:532:2:532:11 | zstdReader | test.go:89:17:89:28 | selection of Body | test.go:532:2:532:11 | zstdReader | This decompression is $@. | test.go:89:17:89:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:534:2:534:11 | zstdReader | test.go:89:17:89:28 | selection of Body | test.go:534:2:534:11 | zstdReader | This decompression is $@. | test.go:89:17:89:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:559:2:559:11 | zstdReader | test.go:91:15:91:26 | selection of Body | test.go:559:2:559:11 | zstdReader | This decompression is $@. | test.go:91:15:91:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:584:2:584:9 | xzReader | test.go:93:5:93:16 | selection of Body | test.go:584:2:584:9 | xzReader | This decompression is $@. | test.go:93:5:93:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:620:25:620:31 | tarRead | test.go:62:13:62:24 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:62:13:62:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:620:25:620:31 | tarRead | test.go:64:8:64:19 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:64:8:64:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:620:25:620:31 | tarRead | test.go:66:8:66:19 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:66:8:66:19 | selection of Body | decompressing compressed data without managing output size | -| test.go:620:25:620:31 | tarRead | test.go:68:17:68:28 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:68:17:68:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:620:25:620:31 | tarRead | test.go:70:13:70:24 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:70:13:70:24 | selection of Body | decompressing compressed data without managing output size | -| test.go:620:25:620:31 | tarRead | test.go:72:16:72:27 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:72:16:72:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:620:25:620:31 | tarRead | test.go:74:7:74:18 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:74:7:74:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:620:25:620:31 | tarRead | test.go:76:9:76:20 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:76:9:76:20 | selection of Body | decompressing compressed data without managing output size | -| test.go:620:25:620:31 | tarRead | test.go:78:18:78:29 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:78:18:78:29 | selection of Body | decompressing compressed data without managing output size | -| test.go:620:25:620:31 | tarRead | test.go:80:5:80:16 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:80:5:80:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:620:25:620:31 | tarRead | test.go:82:7:82:18 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:82:7:82:18 | selection of Body | decompressing compressed data without managing output size | -| test.go:620:25:620:31 | tarRead | test.go:85:16:85:27 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:85:16:85:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:620:25:620:31 | tarRead | test.go:87:16:87:27 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:87:16:87:27 | selection of Body | decompressing compressed data without managing output size | -| test.go:620:25:620:31 | tarRead | test.go:89:17:89:28 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:89:17:89:28 | selection of Body | decompressing compressed data without managing output size | -| test.go:620:25:620:31 | tarRead | test.go:91:15:91:26 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:91:15:91:26 | selection of Body | decompressing compressed data without managing output size | -| test.go:620:25:620:31 | tarRead | test.go:93:5:93:16 | selection of Body | test.go:620:25:620:31 | tarRead | This decompression is $@. | test.go:93:5:93:16 | selection of Body | decompressing compressed data without managing output size | -| test.go:628:2:628:8 | tarRead | test.go:93:5:93:16 | selection of Body | test.go:628:2:628:8 | tarRead | This decompression is $@. | test.go:93:5:93: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 | From 2f1d4b923ee5114a17a6965be74b84de41893118 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 21 Feb 2024 17:11:05 +0000 Subject: [PATCH 064/430] Shared: Generate some QLDoc using the "GitHub Copilot: Generate Docs" command. --- shared/dataflow/codeql/dataflow/DataFlow.qll | 75 ++++++++++++++----- .../codeql/rangeanalysis/RangeAnalysis.qll | 72 +++++++++++++++++- 2 files changed, 128 insertions(+), 19 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/DataFlow.qll b/shared/dataflow/codeql/dataflow/DataFlow.qll index 1c9c900530f..b32b648987f 100644 --- a/shared/dataflow/codeql/dataflow/DataFlow.qll +++ b/shared/dataflow/codeql/dataflow/DataFlow.qll @@ -6,21 +6,24 @@ /** Provides language-specific data flow parameters. */ signature module InputSig { - 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/). + /** + * Represents a node in the data flow graph. */ - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ); - } + 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 + ); + } class ParameterNode extends Node; @@ -30,9 +33,19 @@ signature module InputSig { ReturnKind getKind(); } + /** + * Represents a node in the data flow graph that represents an output. + */ class OutNode extends Node; + /** + * Represents a node in the data flow graph that corresponds to a post-update operation. + */ class PostUpdateNode extends Node { + /** + * Retrieves the node that represents the pre-update operation. + * @return The pre-update node. + */ Node getPreUpdateNode(); } @@ -131,6 +144,12 @@ signature module InputSig { string toString(); } + /** + * Predicate to force high precision for the given content. + * + * @param c The content to force high precision for. + * @return True if high precision is forced for the content, false otherwise. + */ predicate forceHighPrecision(Content c); /** @@ -150,10 +169,16 @@ signature module InputSig { Content getAReadContent(); } - class ContentApprox { - /** Gets a textual representation of this element. */ - string toString(); - } + /** + * Represents a content approximation. + */ + class ContentApprox { + /** + * Gets a textual representation of this element. + * @return The textual representation of this element. + */ + string toString(); + } ContentApprox getContentApprox(Content c); @@ -169,8 +194,22 @@ signature module InputSig { string toString(); } + /** + * Checks if the given parameter position matches the argument position. + * + * @param ppos The parameter position. + * @param apos The argument position. + * @return True if the parameter position matches the argument position, false otherwise. + */ predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos); + /** + * Represents a simple local flow step between two nodes. + * + * @param node1 The first node in the flow step. + * @param node2 The second node in the flow step. + * @return True if there is a simple local flow step between node1 and node2, false otherwise. + */ predicate simpleLocalFlowStep(Node node1, Node node2); /** diff --git a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll index a8a722f7b5d..a262bb09c50 100644 --- a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll +++ b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll @@ -160,17 +160,49 @@ signature module Semantic { /** Gets a tiebreaker id in case `getBlockId1` is not unique. */ default string getBlockId2(BasicBlock bb) { result = "" } + /** + * Represents a guard in the range analysis. + */ class Guard { + /** + * Returns a string representation of the guard. + */ string toString(); + /** + * Returns the basic block associated with the guard. + */ BasicBlock getBasicBlock(); + /** + * Returns the guard as an expression. + */ Expr asExpr(); + /** + * Checks if the guard directly controls a given basic block. + * @param controlled The basic block to check. + * @param branch Indicates if the control is a branch or not. + * @returns True if the guard directly controls the basic block, false otherwise. + */ predicate directlyControls(BasicBlock controlled, boolean branch); + /** + * Checks if the guard represents an equality between two expressions. + * @param e1 The first expression. + * @param e2 The second expression. + * @param polarity The polarity of the equality. + * @returns True if the guard represents the equality, false otherwise. + */ predicate isEquality(Expr e1, Expr e2, boolean polarity); + /** + * Checks if there is a branch edge between two basic blocks. + * @param bb1 The first basic block. + * @param bb2 The second basic block. + * @param branch Indicates if the edge is a branch or not. + * @returns True if there is a branch edge between the basic blocks, false otherwise. + */ predicate hasBranchEdge(BasicBlock bb1, BasicBlock bb2, boolean branch); } @@ -194,18 +226,43 @@ signature module Semantic { /** Gets the type of an expression. */ Type getExprType(Expr e); + /** + * Represents a single static single assignment (SSA) variable. + */ class SsaVariable { + /** + * Returns the expression where this SSA variable is used. + */ Expr getAUse(); + /** + * Returns the basic block where this SSA variable is defined. + */ BasicBlock getBasicBlock(); } + /** + * Represents a phi node in the SSA form. + */ class SsaPhiNode extends SsaVariable { - /** Holds if `inp` is an input to the phi node along the edge originating in `bb`. */ + /** + * Holds if `inp` is an input to the phi node along the edge originating in `bb`. + * @param inp The input variable. + * @param bb The basic block. + * @return True if `inp` is an input to the phi node along the edge originating in `bb`, false otherwise. + */ predicate hasInputFromBlock(SsaVariable inp, BasicBlock bb); } + /** + * Represents a single update to a variable in the SSA form. + */ class SsaExplicitUpdate extends SsaVariable { + /** + * Retrieves the expression that defines the value of the variable in this update. + * + * @return The defining expression. + */ Expr getDefiningExpr(); } @@ -296,11 +353,24 @@ signature module LangSig { } signature module BoundSig { + /** + * Represents a semantic bound. + */ class SemBound { + /** + * Returns a string representation of the semantic bound. + */ string toString(); + /** + * Returns the location of the semantic bound. + */ Location getLocation(); + /** + * Returns the expression associated with the semantic bound, given a delta. + * @param delta - The delta value. + */ Sem::Expr getExpr(D::Delta delta); } From 5e401abccb58d5d2a3f562d0ee9cee82454a2b93 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 21 Feb 2024 17:29:35 +0000 Subject: [PATCH 065/430] Shared: Undo changes to existing QLDoc. --- shared/dataflow/codeql/dataflow/DataFlow.qll | 39 +++++++++---------- .../codeql/rangeanalysis/RangeAnalysis.qll | 7 +--- 2 files changed, 19 insertions(+), 27 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/DataFlow.qll b/shared/dataflow/codeql/dataflow/DataFlow.qll index b32b648987f..cb437390d57 100644 --- a/shared/dataflow/codeql/dataflow/DataFlow.qll +++ b/shared/dataflow/codeql/dataflow/DataFlow.qll @@ -9,21 +9,21 @@ signature module InputSig { /** * Represents a node in the data flow graph. */ - class Node { - /** Gets a textual representation of this element. */ - string toString(); + 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 - ); - } + /** + * 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 + ); + } class ParameterNode extends Node; @@ -172,13 +172,10 @@ signature module InputSig { /** * Represents a content approximation. */ - class ContentApprox { - /** - * Gets a textual representation of this element. - * @return The textual representation of this element. - */ - string toString(); - } + class ContentApprox { + /** Gets a textual representation of this element. */ + string toString(); + } ContentApprox getContentApprox(Content c); diff --git a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll index a262bb09c50..71804fe7967 100644 --- a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll +++ b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll @@ -245,12 +245,7 @@ signature module Semantic { * Represents a phi node in the SSA form. */ class SsaPhiNode extends SsaVariable { - /** - * Holds if `inp` is an input to the phi node along the edge originating in `bb`. - * @param inp The input variable. - * @param bb The basic block. - * @return True if `inp` is an input to the phi node along the edge originating in `bb`, false otherwise. - */ + /** Holds if `inp` is an input to the phi node along the edge originating in `bb`. */ predicate hasInputFromBlock(SsaVariable inp, BasicBlock bb); } From d1c029455154876e30e797f5ad73786b5f8f0659 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 21 Feb 2024 17:22:03 +0000 Subject: [PATCH 066/430] Shared: Delete hallucinated return values. --- shared/dataflow/codeql/dataflow/DataFlow.qll | 3 --- shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll | 3 --- 2 files changed, 6 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/DataFlow.qll b/shared/dataflow/codeql/dataflow/DataFlow.qll index cb437390d57..002a8737315 100644 --- a/shared/dataflow/codeql/dataflow/DataFlow.qll +++ b/shared/dataflow/codeql/dataflow/DataFlow.qll @@ -148,7 +148,6 @@ signature module InputSig { * Predicate to force high precision for the given content. * * @param c The content to force high precision for. - * @return True if high precision is forced for the content, false otherwise. */ predicate forceHighPrecision(Content c); @@ -196,7 +195,6 @@ signature module InputSig { * * @param ppos The parameter position. * @param apos The argument position. - * @return True if the parameter position matches the argument position, false otherwise. */ predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos); @@ -205,7 +203,6 @@ signature module InputSig { * * @param node1 The first node in the flow step. * @param node2 The second node in the flow step. - * @return True if there is a simple local flow step between node1 and node2, false otherwise. */ predicate simpleLocalFlowStep(Node node1, Node node2); diff --git a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll index 71804fe7967..31a27713c54 100644 --- a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll +++ b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll @@ -183,7 +183,6 @@ signature module Semantic { * Checks if the guard directly controls a given basic block. * @param controlled The basic block to check. * @param branch Indicates if the control is a branch or not. - * @returns True if the guard directly controls the basic block, false otherwise. */ predicate directlyControls(BasicBlock controlled, boolean branch); @@ -192,7 +191,6 @@ signature module Semantic { * @param e1 The first expression. * @param e2 The second expression. * @param polarity The polarity of the equality. - * @returns True if the guard represents the equality, false otherwise. */ predicate isEquality(Expr e1, Expr e2, boolean polarity); @@ -201,7 +199,6 @@ signature module Semantic { * @param bb1 The first basic block. * @param bb2 The second basic block. * @param branch Indicates if the edge is a branch or not. - * @returns True if there is a branch edge between the basic blocks, false otherwise. */ predicate hasBranchEdge(BasicBlock bb1, BasicBlock bb2, boolean branch); } From 4367b7813c06ccaa107fb52551da675cdfd1b613 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 21 Feb 2024 17:48:13 +0000 Subject: [PATCH 067/430] Shared: Use more standard QLDoc phrasing. --- shared/dataflow/codeql/dataflow/DataFlow.qll | 8 +++---- .../codeql/rangeanalysis/RangeAnalysis.qll | 24 +++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/DataFlow.qll b/shared/dataflow/codeql/dataflow/DataFlow.qll index 002a8737315..0e2bc8af8a0 100644 --- a/shared/dataflow/codeql/dataflow/DataFlow.qll +++ b/shared/dataflow/codeql/dataflow/DataFlow.qll @@ -43,7 +43,7 @@ signature module InputSig { */ class PostUpdateNode extends Node { /** - * Retrieves the node that represents the pre-update operation. + * Gets the node that represents the pre-update operation. * @return The pre-update node. */ Node getPreUpdateNode(); @@ -145,7 +145,7 @@ signature module InputSig { } /** - * Predicate to force high precision for the given content. + * Holds if high precision should be used for the given content. * * @param c The content to force high precision for. */ @@ -191,7 +191,7 @@ signature module InputSig { } /** - * Checks if the given parameter position matches the argument position. + * Holds if the given parameter position matches the argument position. * * @param ppos The parameter position. * @param apos The argument position. @@ -199,7 +199,7 @@ signature module InputSig { predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos); /** - * Represents a simple local flow step between two nodes. + * Holds if there is a simple local flow step between two nodes. * * @param node1 The first node in the flow step. * @param node2 The second node in the flow step. diff --git a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll index 31a27713c54..cd54c3605c8 100644 --- a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll +++ b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll @@ -165,29 +165,29 @@ signature module Semantic { */ class Guard { /** - * Returns a string representation of the guard. + * Gets a string representation of the guard. */ string toString(); /** - * Returns the basic block associated with the guard. + * Gets the basic block associated with the guard. */ BasicBlock getBasicBlock(); /** - * Returns the guard as an expression. + * Gets the guard as an expression. */ Expr asExpr(); /** - * Checks if the guard directly controls a given basic block. + * Holds if the guard directly controls a given basic block. * @param controlled The basic block to check. * @param branch Indicates if the control is a branch or not. */ predicate directlyControls(BasicBlock controlled, boolean branch); /** - * Checks if the guard represents an equality between two expressions. + * Holds if the guard represents an equality between two expressions. * @param e1 The first expression. * @param e2 The second expression. * @param polarity The polarity of the equality. @@ -195,7 +195,7 @@ signature module Semantic { predicate isEquality(Expr e1, Expr e2, boolean polarity); /** - * Checks if there is a branch edge between two basic blocks. + * Holds if there is a branch edge between two basic blocks. * @param bb1 The first basic block. * @param bb2 The second basic block. * @param branch Indicates if the edge is a branch or not. @@ -228,12 +228,12 @@ signature module Semantic { */ class SsaVariable { /** - * Returns the expression where this SSA variable is used. + * Gets the expression where this SSA variable is used. */ Expr getAUse(); /** - * Returns the basic block where this SSA variable is defined. + * Gets the basic block where this SSA variable is defined. */ BasicBlock getBasicBlock(); } @@ -251,7 +251,7 @@ signature module Semantic { */ class SsaExplicitUpdate extends SsaVariable { /** - * Retrieves the expression that defines the value of the variable in this update. + * Gets the expression that defines the value of the variable in this update. * * @return The defining expression. */ @@ -350,17 +350,17 @@ signature module BoundSig { */ class SemBound { /** - * Returns a string representation of the semantic bound. + * Gets a string representation of the semantic bound. */ string toString(); /** - * Returns the location of the semantic bound. + * Gets the location of the semantic bound. */ Location getLocation(); /** - * Returns the expression associated with the semantic bound, given a delta. + * Gets the expression associated with the semantic bound, given a delta. * @param delta - The delta value. */ Sem::Expr getExpr(D::Delta delta); From 7b85bb4c9548b88ed3dc4397587498a45d2764f0 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 21 Feb 2024 17:52:29 +0000 Subject: [PATCH 068/430] Shared: Autoformat. --- shared/dataflow/codeql/dataflow/DataFlow.qll | 11 +++++------ .../codeql/rangeanalysis/RangeAnalysis.qll | 9 ++++----- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/DataFlow.qll b/shared/dataflow/codeql/dataflow/DataFlow.qll index 0e2bc8af8a0..fb3535416d3 100644 --- a/shared/dataflow/codeql/dataflow/DataFlow.qll +++ b/shared/dataflow/codeql/dataflow/DataFlow.qll @@ -7,8 +7,8 @@ /** Provides language-specific data flow parameters. */ signature module InputSig { /** - * Represents a node in the data flow graph. - */ + * Represents a node in the data flow graph. + */ class Node { /** Gets a textual representation of this element. */ string toString(); @@ -44,6 +44,7 @@ signature module InputSig { class PostUpdateNode extends Node { /** * Gets the node that represents the pre-update operation. + * * @return The pre-update node. */ Node getPreUpdateNode(); @@ -169,8 +170,8 @@ signature module InputSig { } /** - * Represents a content approximation. - */ + * Represents a content approximation. + */ class ContentApprox { /** Gets a textual representation of this element. */ string toString(); @@ -194,7 +195,6 @@ signature module InputSig { * Holds if the given parameter position matches the argument position. * * @param ppos The parameter position. - * @param apos The argument position. */ predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos); @@ -202,7 +202,6 @@ signature module InputSig { * Holds if there is a simple local flow step between two nodes. * * @param node1 The first node in the flow step. - * @param node2 The second node in the flow step. */ predicate simpleLocalFlowStep(Node node1, Node node2); diff --git a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll index cd54c3605c8..e57c6889799 100644 --- a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll +++ b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll @@ -181,24 +181,22 @@ signature module Semantic { /** * Holds if the guard directly controls a given basic block. + * * @param controlled The basic block to check. - * @param branch Indicates if the control is a branch or not. */ predicate directlyControls(BasicBlock controlled, boolean branch); /** * Holds if the guard represents an equality between two expressions. + * * @param e1 The first expression. - * @param e2 The second expression. - * @param polarity The polarity of the equality. */ predicate isEquality(Expr e1, Expr e2, boolean polarity); /** * Holds if there is a branch edge between two basic blocks. + * * @param bb1 The first basic block. - * @param bb2 The second basic block. - * @param branch Indicates if the edge is a branch or not. */ predicate hasBranchEdge(BasicBlock bb1, BasicBlock bb2, boolean branch); } @@ -361,6 +359,7 @@ signature module BoundSig { /** * Gets the expression associated with the semantic bound, given a delta. + * * @param delta - The delta value. */ Sem::Expr getExpr(D::Delta delta); From 1927530517997cb353a1d66d2e13dd504f45e6c7 Mon Sep 17 00:00:00 2001 From: amammad <77095239+amammad@users.noreply.github.com> Date: Wed, 21 Feb 2024 22:15:23 +0400 Subject: [PATCH 069/430] update tests after branch update --- .../DecompressionBombs.expected | 372 +++++++++--------- 1 file changed, 186 insertions(+), 186 deletions(-) diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected index 1442b747630..5136387a80a 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -1,190 +1,190 @@ edges -| test.go:59:16:59:44 | call to FormValue | test.go:128:20:128:27 | definition of filename | -| test.go:60:15:60:26 | selection of Body | test.go:158:19:158:22 | definition of file | -| test.go:61:24:61:35 | selection of Body | test.go:169:28:169:31 | definition of file | -| test.go:62:13:62:24 | selection of Body | test.go:181:17:181:20 | definition of file | -| test.go:64:8:64:19 | selection of Body | test.go:208:12:208:15 | definition of file | -| test.go:66:8:66:19 | selection of Body | test.go:233:12:233:15 | definition of file | -| test.go:68:17:68:28 | selection of Body | test.go:258:21:258:24 | definition of file | -| test.go:70:13:70:24 | selection of Body | test.go:283:17:283:20 | definition of file | -| test.go:72:16:72:27 | selection of Body | test.go:308:20:308:23 | definition of file | -| test.go:74:7:74:18 | selection of Body | test.go:333:11:333:14 | definition of file | -| test.go:76:9:76:20 | selection of Body | test.go:358:13:358:16 | definition of file | -| test.go:78:18:78:29 | selection of Body | test.go:384:22:384:25 | definition of file | -| test.go:80:5:80:16 | selection of Body | test.go:412:9:412:12 | definition of file | -| test.go:82:7:82:18 | selection of Body | test.go:447:11:447:14 | definition of file | -| test.go:84:15:84:26 | selection of Body | test.go:440:19:440:21 | definition of src | -| test.go:85:16:85:27 | selection of Body | test.go:472:20:472:23 | definition of file | -| test.go:87:16:87:27 | selection of Body | test.go:499:20:499:23 | definition of file | -| test.go:89:17:89:28 | selection of Body | test.go:526:21:526:24 | definition of file | -| test.go:91:15:91:26 | selection of Body | test.go:555:19:555:22 | definition of file | -| test.go:93:5:93:16 | selection of Body | test.go:580:9:580:12 | definition of file | -| test.go:128:20:128:27 | definition of filename | test.go:130:33:130:40 | filename | -| test.go:128:20:128:27 | definition of filename | test.go:143:51:143:58 | filename | -| test.go:130:2:130:41 | ... := ...[0] | test.go:132:12:132:12 | f | -| test.go:130:33:130:40 | filename | test.go:130:2:130:41 | ... := ...[0] | -| test.go:132:3:132:19 | ... := ...[0] | test.go:134:37:134:38 | rc | -| test.go:132:12:132:12 | f | test.go:132:3:132:19 | ... := ...[0] | -| test.go:143:2:143:59 | ... := ...[0] | test.go:144:20:144:37 | implicit dereference | -| test.go:143:51:143:58 | filename | test.go:143:2:143:59 | ... := ...[0] | -| test.go:144:20:144:37 | implicit dereference | test.go:144:20:144:37 | implicit dereference | -| test.go:144:20:144:37 | implicit dereference | test.go:144:20:144:37 | implicit read of field Reader | -| test.go:144:20:144:37 | implicit read of field Reader | test.go:145:12:145:12 | f | -| test.go:145:12:145:12 | f | test.go:145:12:145:19 | call to Open | -| test.go:145:12:145:19 | call to Open | test.go:147:37:147:38 | rc | -| test.go:158:19:158:22 | definition of file | test.go:159:25:159:28 | file | -| test.go:159:2:159:29 | ... := ...[0] | test.go:160:48:160:52 | file1 | -| test.go:159:25:159:28 | file | test.go:159:2:159:29 | ... := ...[0] | -| test.go:160:2:160:69 | ... := ...[0] | test.go:163:26:163:29 | file | -| test.go:160:32:160:53 | call to NewReader | test.go:160:2:160:69 | ... := ...[0] | -| test.go:160:48:160:52 | file1 | test.go:160:32:160:53 | call to NewReader | -| test.go:163:3:163:36 | ... := ...[0] | test.go:164:36:164:51 | fileReaderCloser | -| test.go:163:26:163:29 | file | test.go:163:3:163:36 | ... := ...[0] | -| test.go:169:28:169:31 | definition of file | test.go:170:25:170:28 | file | -| test.go:170:2:170:29 | ... := ...[0] | test.go:171:57:171:61 | file2 | -| test.go:170:25:170:28 | file | test.go:170:2:170:29 | ... := ...[0] | -| test.go:171:2:171:78 | ... := ...[0] | test.go:175:26:175:29 | file | -| test.go:171:41:171:62 | call to NewReader | test.go:171:2:171:78 | ... := ...[0] | -| test.go:171:57:171:61 | file2 | test.go:171:41:171:62 | call to NewReader | -| test.go:175:26:175:29 | file | test.go:175:26:175:36 | call to Open | -| test.go:175:26:175:36 | call to Open | test.go:176:36:176:51 | fileReaderCloser | -| test.go:181:17:181:20 | definition of file | test.go:184:41:184:44 | file | -| test.go:184:2:184:73 | ... := ...[0] | test.go:186:2:186:12 | bzip2Reader | -| test.go:184:2:184:73 | ... := ...[0] | test.go:187:26:187:36 | bzip2Reader | -| test.go:184:41:184:44 | file | test.go:184:2:184:73 | ... := ...[0] | -| test.go:187:12:187:37 | call to NewReader | test.go:189:18:189:24 | tarRead | -| test.go:187:26:187:36 | bzip2Reader | test.go:187:12:187:37 | call to NewReader | -| test.go:189:18:189:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:208:12:208:15 | definition of file | test.go:211:33:211:36 | file | -| test.go:211:17:211:37 | call to NewReader | test.go:213:2:213:12 | bzip2Reader | -| test.go:211:17:211:37 | call to NewReader | test.go:214:26:214:36 | bzip2Reader | -| test.go:211:33:211:36 | file | test.go:211:17:211:37 | call to NewReader | -| test.go:214:12:214:37 | call to NewReader | test.go:216:18:216:24 | tarRead | -| test.go:214:26:214:36 | bzip2Reader | test.go:214:12:214:37 | call to NewReader | -| test.go:216:18:216:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:233:12:233:15 | definition of file | test.go:236:33:236:36 | file | -| test.go:236:17:236:37 | call to NewReader | test.go:238:2:238:12 | flateReader | -| test.go:236:17:236:37 | call to NewReader | test.go:239:26:239:36 | flateReader | -| test.go:236:33:236:36 | file | test.go:236:17:236:37 | call to NewReader | -| test.go:239:12:239:37 | call to NewReader | test.go:241:18:241:24 | tarRead | -| test.go:239:26:239:36 | flateReader | test.go:239:12:239:37 | call to NewReader | -| test.go:241:18:241:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:258:21:258:24 | definition of file | test.go:261:42:261:45 | file | -| test.go:261:17:261:46 | call to NewReader | test.go:263:2:263:12 | flateReader | -| test.go:261:17:261:46 | call to NewReader | test.go:264:26:264:36 | flateReader | -| test.go:261:42:261:45 | file | test.go:261:17:261:46 | call to NewReader | -| test.go:264:12:264:37 | call to NewReader | test.go:266:18:266:24 | tarRead | -| test.go:264:26:264:36 | flateReader | test.go:264:12:264:37 | call to NewReader | -| test.go:266:18:266:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:283:17:283:20 | definition of file | test.go:286:41:286:44 | file | -| test.go:286:2:286:73 | ... := ...[0] | test.go:288:2:288:12 | flateReader | -| test.go:286:2:286:73 | ... := ...[0] | test.go:289:26:289:36 | flateReader | -| test.go:286:41:286:44 | file | test.go:286:2:286:73 | ... := ...[0] | -| test.go:289:12:289:37 | call to NewReader | test.go:291:18:291:24 | tarRead | -| test.go:289:26:289:36 | flateReader | test.go:289:12:289:37 | call to NewReader | -| test.go:291:18:291:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:308:20:308:23 | definition of file | test.go:311:43:311:46 | file | -| test.go:311:2:311:47 | ... := ...[0] | test.go:313:2:313:11 | zlibReader | -| test.go:311:2:311:47 | ... := ...[0] | test.go:314:26:314:35 | zlibReader | -| test.go:311:43:311:46 | file | test.go:311:2:311:47 | ... := ...[0] | -| test.go:314:12:314:36 | call to NewReader | test.go:316:18:316:24 | tarRead | -| test.go:314:26:314:35 | zlibReader | test.go:314:12:314:36 | call to NewReader | -| test.go:316:18:316:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:333:11:333:14 | definition of file | test.go:336:34:336:37 | file | -| test.go:336:2:336:38 | ... := ...[0] | test.go:338:2:338:11 | zlibReader | -| test.go:336:2:336:38 | ... := ...[0] | test.go:339:26:339:35 | zlibReader | -| test.go:336:34:336:37 | file | test.go:336:2:336:38 | ... := ...[0] | -| test.go:339:12:339:36 | call to NewReader | test.go:341:18:341:24 | tarRead | -| test.go:339:26:339:35 | zlibReader | test.go:339:12:339:36 | call to NewReader | -| test.go:341:18:341:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:358:13:358:16 | definition of file | test.go:361:35:361:38 | file | -| test.go:361:18:361:39 | call to NewReader | test.go:363:2:363:13 | snappyReader | -| test.go:361:18:361:39 | call to NewReader | test.go:364:2:364:13 | snappyReader | -| test.go:361:18:361:39 | call to NewReader | test.go:365:26:365:37 | snappyReader | -| test.go:361:35:361:38 | file | test.go:361:18:361:39 | call to NewReader | -| test.go:365:12:365:38 | call to NewReader | test.go:367:18:367:24 | tarRead | -| test.go:365:26:365:37 | snappyReader | test.go:365:12:365:38 | call to NewReader | -| test.go:367:18:367:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:384:22:384:25 | definition of file | test.go:387:44:387:47 | file | -| test.go:387:18:387:48 | call to NewReader | test.go:389:2:389:13 | snappyReader | -| test.go:387:18:387:48 | call to NewReader | test.go:391:2:391:13 | snappyReader | -| test.go:387:18:387:48 | call to NewReader | test.go:392:2:392:13 | snappyReader | -| test.go:387:18:387:48 | call to NewReader | test.go:393:26:393:37 | snappyReader | -| test.go:387:44:387:47 | file | test.go:387:18:387:48 | call to NewReader | -| test.go:393:12:393:38 | call to NewReader | test.go:395:18:395:24 | tarRead | -| test.go:393:26:393:37 | snappyReader | test.go:393:12:393:38 | call to NewReader | -| test.go:395:18:395:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:412:9:412:12 | definition of file | test.go:415:27:415:30 | file | -| test.go:415:14:415:31 | call to NewReader | test.go:417:2:417:9 | s2Reader | -| test.go:415:14:415:31 | call to NewReader | test.go:418:2:418:9 | s2Reader | -| test.go:415:14:415:31 | call to NewReader | test.go:420:2:420:9 | s2Reader | -| test.go:415:14:415:31 | call to NewReader | test.go:421:26:421:33 | s2Reader | -| test.go:415:27:415:30 | file | test.go:415:14:415:31 | call to NewReader | -| test.go:421:12:421:34 | call to NewReader | test.go:423:18:423:24 | tarRead | -| test.go:421:26:421:33 | s2Reader | test.go:421:12:421:34 | call to NewReader | -| test.go:423:18:423:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:440:19:440:21 | definition of src | test.go:441:34:441:36 | src | -| test.go:441:2:441:37 | ... := ...[0] | test.go:444:12:444:32 | type conversion | -| test.go:441:34:441:36 | src | test.go:441:2:441:37 | ... := ...[0] | -| test.go:444:12:444:32 | type conversion | test.go:445:23:445:28 | newSrc | -| test.go:447:11:447:14 | definition of file | test.go:450:34:450:37 | file | -| test.go:450:2:450:38 | ... := ...[0] | test.go:452:2:452:11 | gzipReader | -| test.go:450:2:450:38 | ... := ...[0] | test.go:453:26:453:35 | gzipReader | -| test.go:450:34:450:37 | file | test.go:450:2:450:38 | ... := ...[0] | -| test.go:453:12:453:36 | call to NewReader | test.go:455:18:455:24 | tarRead | -| test.go:453:26:453:35 | gzipReader | test.go:453:12:453:36 | call to NewReader | -| test.go:455:18:455:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:472:20:472:23 | definition of file | test.go:475:43:475:46 | file | -| test.go:475:2:475:47 | ... := ...[0] | test.go:477:2:477:11 | gzipReader | -| test.go:475:2:475:47 | ... := ...[0] | test.go:479:2:479:11 | gzipReader | -| test.go:475:2:475:47 | ... := ...[0] | test.go:480:26:480:35 | gzipReader | -| test.go:475:43:475:46 | file | test.go:475:2:475:47 | ... := ...[0] | -| test.go:480:12:480:36 | call to NewReader | test.go:482:18:482:24 | tarRead | -| test.go:480:26:480:35 | gzipReader | test.go:480:12:480:36 | call to NewReader | -| test.go:482:18:482:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:499:20:499:23 | definition of file | test.go:502:45:502:48 | file | -| test.go:502:2:502:49 | ... := ...[0] | test.go:504:2:504:12 | pgzipReader | -| test.go:502:2:502:49 | ... := ...[0] | test.go:506:2:506:12 | pgzipReader | -| test.go:502:2:502:49 | ... := ...[0] | test.go:507:26:507:36 | pgzipReader | -| test.go:502:45:502:48 | file | test.go:502:2:502:49 | ... := ...[0] | -| test.go:507:12:507:37 | call to NewReader | test.go:509:18:509:24 | tarRead | -| test.go:507:26:507:36 | pgzipReader | test.go:507:12:507:37 | call to NewReader | -| test.go:509:18:509:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:526:21:526:24 | definition of file | test.go:529:43:529:46 | file | -| test.go:529:2:529:47 | ... := ...[0] | test.go:531:2:531:11 | zstdReader | -| test.go:529:2:529:47 | ... := ...[0] | test.go:533:2:533:11 | zstdReader | -| test.go:529:2:529:47 | ... := ...[0] | test.go:535:2:535:11 | zstdReader | -| test.go:529:2:529:47 | ... := ...[0] | test.go:536:26:536:35 | zstdReader | -| test.go:529:43:529:46 | file | test.go:529:2:529:47 | ... := ...[0] | -| test.go:536:12:536:36 | call to NewReader | test.go:538:18:538:24 | tarRead | -| test.go:536:26:536:35 | zstdReader | test.go:536:12:536:36 | call to NewReader | -| test.go:538:18:538:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:555:19:555:22 | definition of file | test.go:558:38:558:41 | file | -| test.go:558:16:558:42 | call to NewReader | test.go:560:2:560:11 | zstdReader | -| test.go:558:16:558:42 | call to NewReader | test.go:561:26:561:35 | zstdReader | -| test.go:558:38:558:41 | file | test.go:558:16:558:42 | call to NewReader | -| test.go:561:12:561:36 | call to NewReader | test.go:563:18:563:24 | tarRead | -| test.go:561:26:561:35 | zstdReader | test.go:561:12:561:36 | call to NewReader | -| test.go:563:18:563:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:580:9:580:12 | definition of file | test.go:583:30:583:33 | file | -| test.go:583:2:583:34 | ... := ...[0] | test.go:585:2:585:9 | xzReader | -| test.go:583:2:583:34 | ... := ...[0] | test.go:586:26:586:33 | xzReader | -| test.go:583:30:583:33 | file | test.go:583:2:583:34 | ... := ...[0] | -| test.go:586:12:586:34 | call to NewReader | test.go:589:18:589:24 | tarRead | -| test.go:586:12:586:34 | call to NewReader | test.go:590:19:590:25 | tarRead | -| test.go:586:26:586:33 | xzReader | test.go:586:12:586:34 | call to NewReader | -| test.go:589:18:589:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | -| test.go:590:19:590:25 | tarRead | test.go:627:23:627:29 | definition of tarRead | -| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | -| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | -| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | -| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | -| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | -| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | -| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | -| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | -| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | -| test.go:627:23:627:29 | definition of tarRead | test.go:629:2:629:8 | tarRead | +| 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 | From 5125973f9b257f37ff49f1f236b89badddf563ce Mon Sep 17 00:00:00 2001 From: Taus Date: Thu, 22 Feb 2024 13:01:03 +0000 Subject: [PATCH 070/430] Python: Add test case for `.copy()` as a copy step --- .../ModificationOfParameterWithDefault.expected | 10 ++++++++++ .../ModificationOfParameterWithDefault/test.py | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected index 2bed4495c43..82bc41d780c 100644 --- a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected +++ b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected @@ -40,6 +40,10 @@ edges | test.py:195:28:195:28 | ControlFlowNode for x | test.py:181:28:181:28 | ControlFlowNode for x | provenance | | | test.py:197:18:197:18 | ControlFlowNode for x | test.py:198:28:198:28 | ControlFlowNode for x | provenance | | | test.py:198:28:198:28 | ControlFlowNode for x | test.py:181:28:181:28 | ControlFlowNode for x | provenance | | +| test.py:222:26:222:26 | ControlFlowNode for x | test.py:223:9:223:9 | ControlFlowNode for x | provenance | | +| test.py:223:5:223:5 | ControlFlowNode for y | test.py:224:5:224:5 | ControlFlowNode for y | provenance | | +| test.py:223:9:223:9 | ControlFlowNode for x | test.py:223:9:223:16 | ControlFlowNode for Attribute() | provenance | | +| test.py:223:9:223:16 | ControlFlowNode for Attribute() | test.py:223:5:223:5 | ControlFlowNode for y | provenance | | nodes | test.py:2:12:2:12 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | | test.py:3:5:3:5 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | @@ -107,6 +111,11 @@ nodes | test.py:195:28:195:28 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | | test.py:197:18:197:18 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | | test.py:198:28:198:28 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | +| test.py:222:26:222:26 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | +| test.py:223:5:223:5 | ControlFlowNode for y | semmle.label | ControlFlowNode for y | +| test.py:223:9:223:9 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | +| test.py:223:9:223:16 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| test.py:224:5:224:5 | ControlFlowNode for y | semmle.label | ControlFlowNode for y | subpaths #select | test.py:3:5:3:5 | ControlFlowNode for l | test.py:2:12:2:12 | ControlFlowNode for l | test.py:3:5:3:5 | ControlFlowNode for l | This expression mutates a $@. | test.py:2:12:2:12 | ControlFlowNode for l | default value | @@ -138,3 +147,4 @@ subpaths | test.py:185:9:185:9 | ControlFlowNode for x | test.py:197:18:197:18 | ControlFlowNode for x | test.py:185:9:185:9 | ControlFlowNode for x | This expression mutates a $@. | test.py:197:18:197:18 | ControlFlowNode for x | default value | | test.py:187:9:187:9 | ControlFlowNode for x | test.py:194:18:194:18 | ControlFlowNode for x | test.py:187:9:187:9 | ControlFlowNode for x | This expression mutates a $@. | test.py:194:18:194:18 | ControlFlowNode for x | default value | | test.py:187:9:187:9 | ControlFlowNode for x | test.py:197:18:197:18 | ControlFlowNode for x | test.py:187:9:187:9 | ControlFlowNode for x | This expression mutates a $@. | test.py:197:18:197:18 | ControlFlowNode for x | default value | +| test.py:224:5:224:5 | ControlFlowNode for y | test.py:222:26:222:26 | ControlFlowNode for x | test.py:224:5:224:5 | ControlFlowNode for y | This expression mutates a $@. | test.py:222:26:222:26 | ControlFlowNode for x | default value | diff --git a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py index b67fa985f51..a79ca3d7887 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) #$ SPURIOUS: modification=y From f1392712ee9ae31d69facdd2c00b990208afdc1f Mon Sep 17 00:00:00 2001 From: Taus Date: Thu, 22 Feb 2024 13:09:27 +0000 Subject: [PATCH 071/430] Python: Add `.copy()` as a copy step --- .../dataflow/new/internal/TaintTrackingPrivate.qll | 2 ++ .../ModificationOfParameterWithDefault.expected | 10 ---------- .../ModificationOfParameterWithDefault/test.py | 2 +- 3 files changed, 3 insertions(+), 11 deletions(-) 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/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected index 82bc41d780c..2bed4495c43 100644 --- a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected +++ b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/ModificationOfParameterWithDefault.expected @@ -40,10 +40,6 @@ edges | test.py:195:28:195:28 | ControlFlowNode for x | test.py:181:28:181:28 | ControlFlowNode for x | provenance | | | test.py:197:18:197:18 | ControlFlowNode for x | test.py:198:28:198:28 | ControlFlowNode for x | provenance | | | test.py:198:28:198:28 | ControlFlowNode for x | test.py:181:28:181:28 | ControlFlowNode for x | provenance | | -| test.py:222:26:222:26 | ControlFlowNode for x | test.py:223:9:223:9 | ControlFlowNode for x | provenance | | -| test.py:223:5:223:5 | ControlFlowNode for y | test.py:224:5:224:5 | ControlFlowNode for y | provenance | | -| test.py:223:9:223:9 | ControlFlowNode for x | test.py:223:9:223:16 | ControlFlowNode for Attribute() | provenance | | -| test.py:223:9:223:16 | ControlFlowNode for Attribute() | test.py:223:5:223:5 | ControlFlowNode for y | provenance | | nodes | test.py:2:12:2:12 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | | test.py:3:5:3:5 | ControlFlowNode for l | semmle.label | ControlFlowNode for l | @@ -111,11 +107,6 @@ nodes | test.py:195:28:195:28 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | | test.py:197:18:197:18 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | | test.py:198:28:198:28 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | -| test.py:222:26:222:26 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | -| test.py:223:5:223:5 | ControlFlowNode for y | semmle.label | ControlFlowNode for y | -| test.py:223:9:223:9 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | -| test.py:223:9:223:16 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| test.py:224:5:224:5 | ControlFlowNode for y | semmle.label | ControlFlowNode for y | subpaths #select | test.py:3:5:3:5 | ControlFlowNode for l | test.py:2:12:2:12 | ControlFlowNode for l | test.py:3:5:3:5 | ControlFlowNode for l | This expression mutates a $@. | test.py:2:12:2:12 | ControlFlowNode for l | default value | @@ -147,4 +138,3 @@ subpaths | test.py:185:9:185:9 | ControlFlowNode for x | test.py:197:18:197:18 | ControlFlowNode for x | test.py:185:9:185:9 | ControlFlowNode for x | This expression mutates a $@. | test.py:197:18:197:18 | ControlFlowNode for x | default value | | test.py:187:9:187:9 | ControlFlowNode for x | test.py:194:18:194:18 | ControlFlowNode for x | test.py:187:9:187:9 | ControlFlowNode for x | This expression mutates a $@. | test.py:194:18:194:18 | ControlFlowNode for x | default value | | test.py:187:9:187:9 | ControlFlowNode for x | test.py:197:18:197:18 | ControlFlowNode for x | test.py:187:9:187:9 | ControlFlowNode for x | This expression mutates a $@. | test.py:197:18:197:18 | ControlFlowNode for x | default value | -| test.py:224:5:224:5 | ControlFlowNode for y | test.py:222:26:222:26 | ControlFlowNode for x | test.py:224:5:224:5 | ControlFlowNode for y | This expression mutates a $@. | test.py:222:26:222:26 | ControlFlowNode for x | default value | diff --git a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py index a79ca3d7887..ca7bb71d760 100644 --- a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py +++ b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py @@ -221,4 +221,4 @@ def flow_through_deepcopy_fp(x=[]): def flow_through_copy_fp(x=[]): y = x.copy() - y.append(1) #$ SPURIOUS: modification=y + y.append(1) From 573763a4b339c9b7c5c6558f7375fac8dfb40efa Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 22 Feb 2024 18:44:17 +0000 Subject: [PATCH 072/430] Shared: More revisions, manual and aided by further discussion with Copilot. --- shared/dataflow/codeql/dataflow/DataFlow.qll | 17 ++++++--- .../codeql/rangeanalysis/RangeAnalysis.qll | 35 +++++++++++++++---- 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/DataFlow.qll b/shared/dataflow/codeql/dataflow/DataFlow.qll index fb3535416d3..ea44ec5d0ce 100644 --- a/shared/dataflow/codeql/dataflow/DataFlow.qll +++ b/shared/dataflow/codeql/dataflow/DataFlow.qll @@ -7,7 +7,7 @@ /** Provides language-specific data flow parameters. */ signature module InputSig { /** - * Represents a node in the data flow graph. + * A node in the data flow graph. */ class Node { /** Gets a textual representation of this element. */ @@ -34,16 +34,23 @@ signature module InputSig { } /** - * Represents a node in the data flow graph that represents an output. + * A node in the data flow graph that represents an output. */ class OutNode extends Node; /** - * Represents a node in the data flow graph that corresponds to a post-update operation. + * A node in the data flow graph representing the value of an argument after + * a function call returns. For example, consider the following C++ code: + * ``` + * int a = 1; + * increment(&a); + * ``` + * The post-update node for `&a` represents the value of `&a` after + * modification by the call to `increment`. */ class PostUpdateNode extends Node { /** - * Gets the node that represents the pre-update operation. + * Gets the node that represents the same value prior to the operation. * * @return The pre-update node. */ @@ -170,7 +177,7 @@ signature module InputSig { } /** - * Represents a content approximation. + * A content approximation. */ class ContentApprox { /** Gets a textual representation of this element. */ diff --git a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll index e57c6889799..28329e844da 100644 --- a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll +++ b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll @@ -161,7 +161,7 @@ signature module Semantic { default string getBlockId2(BasicBlock bb) { result = "" } /** - * Represents a guard in the range analysis. + * A guard in the range analysis. */ class Guard { /** @@ -180,7 +180,15 @@ signature module Semantic { Expr asExpr(); /** - * Holds if the guard directly controls a given basic block. + * 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"); + * } + * ``` * * @param controlled The basic block to check. */ @@ -194,7 +202,17 @@ signature module Semantic { predicate isEquality(Expr e1, Expr e2, boolean polarity); /** - * Holds if there is a branch edge between two basic blocks. + * 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"); + * } + * ``` * * @param bb1 The first basic block. */ @@ -222,7 +240,7 @@ signature module Semantic { Type getExprType(Expr e); /** - * Represents a single static single assignment (SSA) variable. + * A single static single assignment (SSA) variable. */ class SsaVariable { /** @@ -237,7 +255,9 @@ signature module Semantic { } /** - * Represents a phi node in the SSA form. + * 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. */ class SsaPhiNode extends SsaVariable { /** Holds if `inp` is an input to the phi node along the edge originating in `bb`. */ @@ -245,7 +265,7 @@ signature module Semantic { } /** - * Represents a single update to a variable in the SSA form. + * A single update to a variable in the SSA form. */ class SsaExplicitUpdate extends SsaVariable { /** @@ -344,7 +364,8 @@ signature module LangSig { signature module BoundSig { /** - * Represents a semantic bound. + * A semantic bound, which defines a constraint on the possible values of an + * expression. */ class SemBound { /** From 083f56921c8c4adced9e7e8ce2c945b1848dcd50 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Sun, 25 Feb 2024 21:20:41 +0100 Subject: [PATCH 073/430] update to 5.4.1-rc --- javascript/extractor/lib/typescript/package-lock.json | 8 ++++---- javascript/extractor/lib/typescript/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/javascript/extractor/lib/typescript/package-lock.json b/javascript/extractor/lib/typescript/package-lock.json index fd672bf43c0..af309c3b451 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.4.0-beta" + "typescript": "5.4.1-rc" }, "devDependencies": { "@types/node": "18.15.3" @@ -20,9 +20,9 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "5.4.0-beta", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.0-beta.tgz", - "integrity": "sha512-KgekV5JS7TQ7Bb8eO64QGxdM7MSBUUXOXq28OWX23d2MA8SiVtNYoo4s33tCTEGV8+6AGBRD2+KiXNNnexRRYw==", + "version": "5.4.1-rc", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.1-rc.tgz", + "integrity": "sha512-gInURzaO0bbfzfQAc3mfcHxh8qev+No4QOFUZHajo9vBgOLaljELJ3wuzyoGo/zHIzMSezdhtrsRdqL6E9SvNA==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/javascript/extractor/lib/typescript/package.json b/javascript/extractor/lib/typescript/package.json index 2a636c3cdf3..6a315fed292 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.4.0-beta" + "typescript": "5.4.1-rc" }, "scripts": { "build": "tsc --project tsconfig.json", From a03c06802e7f08baadf6796dc19a968cd72fdc67 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Tue, 6 Feb 2024 09:34:20 +0000 Subject: [PATCH 074/430] Ruby: Add some more command injection sinks --- ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll | 10 ++++++++-- ruby/ql/lib/codeql/ruby/frameworks/stdlib/Open3.qll | 8 +++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll index 96568e74902..2aa46ab550a 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll @@ -130,13 +130,19 @@ module Kernel { * `Kernel.spawn` takes the same argument forms as `Kernel.system`. * See `KernelSystemCall` for details. * Ruby documentation: https://docs.ruby-lang.org/en/3.0.0/Kernel.html#method-i-spawn + * Methods with the same effect exist in the `Process` and `PTY` classes, so they are also modeled here. * TODO: document and handle the env and option arguments. * ``` * spawn([env,] command... [,options]) -> pid * ``` */ - class KernelSpawnCall extends SystemCommandExecution::Range instanceof KernelMethodCall { - KernelSpawnCall() { this.getMethodName() = "spawn" } + class KernelSpawnCall extends SystemCommandExecution::Range instanceof DataFlow::CallNode { + KernelSpawnCall() { + this.getMethodName() = "spawn" and + this instanceof KernelMethodCall + or + this = DataFlow::getConstant(["Process", "PTY"]).getAMethodCall("spawn") + } override DataFlow::Node getAnArgument() { result = super.getArgument(_) } diff --git a/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Open3.qll b/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Open3.qll index e65f3005503..5f349c451f3 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 { /** @@ -18,8 +18,10 @@ module Open3 { class Open3Call extends SystemCommandExecution::Range instanceof DataFlow::CallNode { Open3Call() { this = - API::getTopLevelMember("Open3") - .getAMethodCall(["popen3", "popen2", "popen2e", "capture3", "capture2", "capture2e"]) + API::getTopLevelMember(["Open3", "Open4"]) + .getAMethodCall([ + "popen3", "popen2", "popen2e", "capture3", "capture2", "capture2e", "popen4" + ]) } override DataFlow::Node getAnArgument() { result = super.getArgument(_) } From beef9965cc48174538cc8346fa056ca5fdec5c22 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Mon, 26 Feb 2024 10:35:08 +0000 Subject: [PATCH 075/430] Ruby: Model Open4 library Also remove duplicate modeling of Process.spawn. --- .../codeql/ruby/frameworks/core/Kernel.qll | 3 --- .../codeql/ruby/frameworks/stdlib/Open3.qll | 19 +++++++++++++++---- .../frameworks/stdlib/Open3.expected | 4 ++++ .../library-tests/frameworks/stdlib/Open3.ql | 2 ++ .../library-tests/frameworks/stdlib/Open3.rb | 6 +++++- 5 files changed, 26 insertions(+), 8 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll index 2aa46ab550a..cc3ce9feb97 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll @@ -130,7 +130,6 @@ module Kernel { * `Kernel.spawn` takes the same argument forms as `Kernel.system`. * See `KernelSystemCall` for details. * Ruby documentation: https://docs.ruby-lang.org/en/3.0.0/Kernel.html#method-i-spawn - * Methods with the same effect exist in the `Process` and `PTY` classes, so they are also modeled here. * TODO: document and handle the env and option arguments. * ``` * spawn([env,] command... [,options]) -> pid @@ -140,8 +139,6 @@ module Kernel { KernelSpawnCall() { this.getMethodName() = "spawn" and this instanceof KernelMethodCall - or - this = DataFlow::getConstant(["Process", "PTY"]).getAMethodCall("spawn") } override DataFlow::Node getAnArgument() { result = super.getArgument(_) } diff --git a/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Open3.qll b/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Open3.qll index 5f349c451f3..f2eb16d2aa8 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Open3.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Open3.qll @@ -18,10 +18,8 @@ module Open3 { class Open3Call extends SystemCommandExecution::Range instanceof DataFlow::CallNode { Open3Call() { this = - API::getTopLevelMember(["Open3", "Open4"]) - .getAMethodCall([ - "popen3", "popen2", "popen2e", "capture3", "capture2", "capture2e", "popen4" - ]) + API::getTopLevelMember("Open3") + .getAMethodCall(["popen3", "popen2", "popen2e", "capture3", "capture2", "capture2e"]) } override DataFlow::Node getAnArgument() { result = super.getArgument(_) } @@ -33,6 +31,19 @@ module Open3 { } } + class Open4Call extends SystemCommandExecution::Range instanceof DataFlow::CallNode { + Open4Call() { + this = API::getTopLevelMember("Open4").getAMethodCall(["open4", "popen4", "spawn"]) + } + + override DataFlow::Node getAnArgument() { result = super.getArgument(_) } + + override predicate isShellInterpreted(DataFlow::Node arg) { + super.getNumberOfArguments() = 1 and + arg = this.getAnArgument() + } + } + /** * 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/test/library-tests/frameworks/stdlib/Open3.expected b/ruby/ql/test/library-tests/frameworks/stdlib/Open3.expected index a601d199ff6..48bc6fc27f6 100644 --- a/ruby/ql/test/library-tests/frameworks/stdlib/Open3.expected +++ b/ruby/ql/test/library-tests/frameworks/stdlib/Open3.expected @@ -11,3 +11,7 @@ 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 | 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..4a112335ffb 100644 --- a/ruby/ql/test/library-tests/frameworks/stdlib/Open3.rb +++ b/ruby/ql/test/library-tests/frameworks/stdlib/Open3.rb @@ -8,4 +8,8 @@ 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") From d1847566b6b5988254f826a6fd42727308bbddcb Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Mon, 26 Feb 2024 10:41:30 +0000 Subject: [PATCH 076/430] Ruby: Ql4QL fix --- ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll | 7 ++----- ruby/ql/lib/codeql/ruby/frameworks/stdlib/Open3.qll | 5 +++++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll index cc3ce9feb97..96568e74902 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll @@ -135,11 +135,8 @@ module Kernel { * spawn([env,] command... [,options]) -> pid * ``` */ - class KernelSpawnCall extends SystemCommandExecution::Range instanceof DataFlow::CallNode { - KernelSpawnCall() { - this.getMethodName() = "spawn" and - this instanceof KernelMethodCall - } + class KernelSpawnCall extends SystemCommandExecution::Range instanceof KernelMethodCall { + KernelSpawnCall() { this.getMethodName() = "spawn" } override DataFlow::Node getAnArgument() { result = super.getArgument(_) } diff --git a/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Open3.qll b/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Open3.qll index f2eb16d2aa8..16b9ecc3797 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Open3.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Open3.qll @@ -31,6 +31,11 @@ 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"]) From 9d13a1ff515b86bd84e3897335734736ad7354e3 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Mon, 26 Feb 2024 10:43:48 +0000 Subject: [PATCH 077/430] Ruby: Add model for Process.spawn --- .../codeql/ruby/frameworks/stdlib/Process.qll | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 ruby/ql/lib/codeql/ruby/frameworks/stdlib/Process.qll 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..1ffc15d691b --- /dev/null +++ b/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Process.qll @@ -0,0 +1,35 @@ +/** + * 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() + } + } +} From 8bed3fbed442ecdfee770b494d6a188f71025aa1 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Mon, 26 Feb 2024 10:57:17 +0000 Subject: [PATCH 078/430] Ruby: Add basic model for Terrapin library --- .../codeql/ruby/frameworks/terrapin/model.yml | 41 +++++++++++++++++++ .../CommandInjection.expected | 10 +++++ .../CommandInjection/CommandInjection.rb | 11 ++++- 3 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 ruby/ql/lib/codeql/ruby/frameworks/terrapin/model.yml 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/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 From f7b8e8af419524fa189284efd4a0e1ad76b2b2cd Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Mon, 4 Dec 2023 13:55:48 +0000 Subject: [PATCH 079/430] Ruby: Include request forgery sinks from MaD --- .../ruby/security/ServerSideRequestForgeryCustomizations.qll | 5 +++++ 1 file changed, 5 insertions(+) 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() } + } } From 3eb9491cb4e44659ddcbeed635bf6961eb49fef0 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 26 Feb 2024 17:18:40 +0100 Subject: [PATCH 080/430] python: rewrite `HardcodedCredentials` away from `PointsTo` - `ModuleValue.attr` and `ClassValue.lookup` are approximated by `Function.getName` - `ClassValue.getName` is apprximated by `Class.getName` - `Module::named` is approximated by `Module.getName` - `Value::named` is approximated by `Builtins::likelyBuiltin` - `FunctionValue.getNamedArgumentForCall` is approximated by `ArgumentNode.argumentOf` --- .../src/Security/CWE-798/HardcodedCredentials.ql | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) 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 From b4b5ae2a2c53503538b1cab99c7499ca97f536a1 Mon Sep 17 00:00:00 2001 From: erik-krogh Date: Tue, 27 Feb 2024 10:05:26 +0100 Subject: [PATCH 081/430] add some request-forgery sanitizers, inspired from C# --- .../code/java/security/RequestForgery.qll | 77 +++++++++++++++++++ .../CWE-601/semmle/tests/UrlRedirect.expected | 2 + .../CWE-601/semmle/tests/UrlRedirect2.java | 52 +++++++++++++ 3 files changed, 131 insertions(+) create mode 100644 java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect2.java diff --git a/java/ql/lib/semmle/code/java/security/RequestForgery.qll b/java/ql/lib/semmle/code/java/security/RequestForgery.qll index 7a72faeb5e4..e083977c74f 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,79 @@ private class HostnameSanitizingPrefix extends InterestingPrefix { private class HostnameSantizer extends RequestForgerySanitizer { HostnameSantizer() { this.asExpr() = any(HostnameSanitizingPrefix hsp).getAnAppendedExpression() } } + +/** + * An argument to a call to `List.contains()` that is a sanitizer for URL redirects. + */ +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. + */ +class ContainsUrlSanitizer extends RequestForgerySanitizer { + ContainsUrlSanitizer() { + this = DataFlow::BarrierGuard::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 | + exists(Method method | + call.getMethod() = method and + method.getName() = "isAbsolute" and + method.getDeclaringType().hasQualifiedName("java.net", "URI") + ) and + e = call.getQualifier() and + branch = false + ) +} + +/** + * A check that the URL is relative, and therefore safe for URL redirects. + */ +class RelativeUrlSanitizer extends RequestForgerySanitizer { + RelativeUrlSanitizer() { + this = DataFlow::BarrierGuard::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().getName() = "getHost" and + hostCall.getMethod().getDeclaringType().hasQualifiedName("java.net", "URI") and + e = hostCall.getQualifier() + ) + ) +} + +/** + * A comparison on the `Host` property of a url, that is a sanitizer for URL redirects. + */ +class HostComparisonSanitizer extends RequestForgerySanitizer { + HostComparisonSanitizer() { + this = DataFlow::BarrierGuard::getABarrierNode() + } +} 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 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 + } + } +} From d0e7fbc871de377f6ab2693ce624e325902ea754 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Tue, 27 Feb 2024 09:47:51 +0000 Subject: [PATCH 082/430] Ruby: Add changenote --- ruby/ql/lib/change-notes/2024-02-27-process-spawn.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 ruby/ql/lib/change-notes/2024-02-27-process-spawn.md 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..30feedcbd20 --- /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`, `Terrapin::CommandLine` and the `open4` gem. \ No newline at end of file From 9ab3837cdc368e4ae5483dea7884828bcf29f923 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 28 Feb 2024 13:26:01 -0500 Subject: [PATCH 083/430] Make threat model beta notice more general --- .../customizing-library-models-for-java-and-kotlin.rst | 2 +- ...-note-threat-models-java.rst => beta-note-threat-models.rst} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename docs/codeql/reusables/{beta-note-threat-models-java.rst => beta-note-threat-models.rst} (55%) 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/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. From 4b9340816cf14e9fcd7e53d58a30f261ec3634b9 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 28 Feb 2024 13:27:19 -0500 Subject: [PATCH 084/430] Add threat-modeling section to C# MaD docs --- .../customizing-library-models-for-csharp.rst | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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..fad00bdc4b8 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 @@ -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 the ``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 `__ and `Customizing your advanced setup for code scanning `__. From 2a70437a12107da673cbd8f876b3b1460fc4412c Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 28 Feb 2024 14:34:01 -0500 Subject: [PATCH 085/430] Add references to threat modeling --- .../customizing-library-models-for-csharp.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 fad00bdc4b8..d0d00f87972 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 `." - ``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 `." - 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 From 6b310bb82530ab4f973010e8a9dc3b4860ae354d Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 28 Feb 2024 21:39:16 -0500 Subject: [PATCH 086/430] Fix reference --- .../customizing-library-models-for-csharp.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 d0d00f87972..dd5bc6285fc 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 @@ -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. For more information, see ":ref:`Threat models `." +- 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 `." - 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 From 7cd84c8f0ac0072348d100de75d2df2c9e35e372 Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 29 Feb 2024 09:59:44 +0100 Subject: [PATCH 087/430] JS: Add type-tracking test --- .../TypeTracking/TypeTracking.expected | 2 ++ .../library-tests/TypeTracking/summarize.js | 33 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 javascript/ql/test/library-tests/TypeTracking/summarize.js diff --git a/javascript/ql/test/library-tests/TypeTracking/TypeTracking.expected b/javascript/ql/test/library-tests/TypeTracking/TypeTracking.expected index e69de29bb2d..75ca5993b09 100644 --- a/javascript/ql/test/library-tests/TypeTracking/TypeTracking.expected +++ b/javascript/ql/test/library-tests/TypeTracking/TypeTracking.expected @@ -0,0 +1,2 @@ +| summarize.js:30:14:30:26 | // track: obj | Failed to track obj here. | +| summarize.js:33:14:33:26 | // track: obj | Failed to track obj here. | diff --git a/javascript/ql/test/library-tests/TypeTracking/summarize.js b/javascript/ql/test/library-tests/TypeTracking/summarize.js new file mode 100644 index 00000000000..e4aa9ebdb85 --- /dev/null +++ b/javascript/ql/test/library-tests/TypeTracking/summarize.js @@ -0,0 +1,33 @@ +import 'dummy'; + +function identity(x) { + return x; +} +function load(x) { + return x.loadProp; +} +function store(x) { + return { storeProp: x }; +} +function loadStore(x) { + return { storeProp: x.loadProp }; +} + +identity({}); +load({}); +store({}); +loadStore({}); + +const obj = {}; // name: obj + +let x = identity(obj); +x; // track: obj + +x = load({ loadProp: obj }); +x; // track: obj + +x = store(obj); +x.storeProp; // track: obj + +x = loadStore({ loadProp: obj }); +x.storeProp; // track: obj From 3ad83cc09812fe0106d39c12bc1dd3c617852e02 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 28 Feb 2024 22:02:07 +0100 Subject: [PATCH 088/430] JS: Summarise store steps for type tracking --- .../ql/lib/semmle/javascript/dataflow/internal/StepSummary.qll | 3 +++ .../ql/test/library-tests/TypeTracking/TypeTracking.expected | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/StepSummary.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/StepSummary.qll index 6593df32615..c59b2aa58da 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/StepSummary.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/StepSummary.qll @@ -156,6 +156,9 @@ private module Cached { exists(string prop | param.getAPropertyRead(prop).flowsTo(fun.getAReturn()) and summary = LoadStep(prop) + or + fun.getAReturn().getALocalSource().getAPropertySource(prop) = param and + summary = StoreStep(prop) ) ) and if param = fun.getAParameter() diff --git a/javascript/ql/test/library-tests/TypeTracking/TypeTracking.expected b/javascript/ql/test/library-tests/TypeTracking/TypeTracking.expected index 75ca5993b09..4670d4f9253 100644 --- a/javascript/ql/test/library-tests/TypeTracking/TypeTracking.expected +++ b/javascript/ql/test/library-tests/TypeTracking/TypeTracking.expected @@ -1,2 +1 @@ -| summarize.js:30:14:30:26 | // track: obj | Failed to track obj here. | | summarize.js:33:14:33:26 | // track: obj | Failed to track obj here. | From f384afbaf6bc87d60de0c630756d4b7e722d19a3 Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 29 Feb 2024 10:00:45 +0100 Subject: [PATCH 089/430] JS: Also summarize loadStore steps --- .../dataflow/internal/StepSummary.qll | 27 +++++++++++++++++++ .../TypeTracking/TypeTracking.expected | 1 - 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/StepSummary.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/StepSummary.qll index c59b2aa58da..829e02591a0 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/StepSummary.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/StepSummary.qll @@ -45,6 +45,8 @@ private module Cached { CopyStep(PropertyName prop) or LoadStoreStep(PropertyName fromProp, PropertyName toProp) { SharedTypeTrackingStep::loadStoreStep(_, _, fromProp, toProp) + or + summarizedLoadStoreStep(_, _, fromProp, toProp) } or WithoutPropStep(PropertySet props) { SharedTypeTrackingStep::withoutPropStep(_, _, props) } } @@ -69,6 +71,26 @@ private module Cached { AccessPath::isAssignedInUniqueFile(global) } + bindingset[fun] + pragma[inline_late] + private DataFlow::PropRead getStoredPropRead(DataFlow::FunctionNode fun, string storeProp) { + result = fun.getAReturn().getALocalSource().getAPropertySource(storeProp) + } + + /** + * Holds if `loadProp` of `parameter` is stored in the `storeProp` property of the return value of `fun`. + */ + pragma[nomagic] + private predicate summarizedLoadStoreStep( + DataFlow::ParameterNode param, DataFlow::FunctionNode fun, string loadProp, string storeProp + ) { + exists(DataFlow::PropRead read | + read = getStoredPropRead(fun, storeProp) and + read.getBase().getALocalSource() = param and + read.getPropertyName() = loadProp + ) + } + /** * INTERNAL: Use `TypeBackTracker.smallstep()` instead. */ @@ -160,6 +182,11 @@ private module Cached { fun.getAReturn().getALocalSource().getAPropertySource(prop) = param and summary = StoreStep(prop) ) + or + exists(string loadProp, string storeProp | + summarizedLoadStoreStep(param, fun, loadProp, storeProp) and + summary = LoadStoreStep(loadProp, storeProp) + ) ) and if param = fun.getAParameter() then diff --git a/javascript/ql/test/library-tests/TypeTracking/TypeTracking.expected b/javascript/ql/test/library-tests/TypeTracking/TypeTracking.expected index 4670d4f9253..e69de29bb2d 100644 --- a/javascript/ql/test/library-tests/TypeTracking/TypeTracking.expected +++ b/javascript/ql/test/library-tests/TypeTracking/TypeTracking.expected @@ -1 +0,0 @@ -| summarize.js:33:14:33:26 | // track: obj | Failed to track obj here. | From 052a8e7f8187026396db06545647afc47f2dbde4 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 28 Feb 2024 14:58:04 +0100 Subject: [PATCH 090/430] JS: Avoid spurious recursion in AMD --- javascript/ql/lib/semmle/javascript/AMD.qll | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/AMD.qll b/javascript/ql/lib/semmle/javascript/AMD.qll index 20b1c26275a..7214005b593 100644 --- a/javascript/ql/lib/semmle/javascript/AMD.qll +++ b/javascript/ql/lib/semmle/javascript/AMD.qll @@ -102,9 +102,10 @@ class AmdModuleDefinition extends CallExpr instanceof AmdModuleDefinition::Range /** * Holds if `p` is the parameter corresponding to dependency `dep`. */ - predicate dependencyParameter(PathExpr dep, Parameter p) { + predicate dependencyParameter(Expr dep, Parameter p) { exists(int i | - dep = this.getDependency(i) and + // Note: to avoid spurious recursion, do not depend on PathExpr here + dep = this.getDependencies().getElement(i) and p = this.getFactoryParameter(i) ) } @@ -122,9 +123,9 @@ class AmdModuleDefinition extends CallExpr instanceof AmdModuleDefinition::Range * `dep1` and `dep2`. */ Parameter getDependencyParameter(string name) { - exists(PathExpr dep | + exists(Expr dep | this.dependencyParameter(dep, result) and - dep.getValue() = name + name = dep.getStringValue() ) } From 853397361fceb4395df26e52d1a5b46b259d2915 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 28 Feb 2024 13:51:28 +0100 Subject: [PATCH 091/430] JS: Do not treat AMD pseudo-dependencies as file paths --- javascript/ql/lib/semmle/javascript/AMD.qll | 14 ++++++++++++-- .../ql/test/library-tests/AMD/tests.expected | 1 - 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/AMD.qll b/javascript/ql/lib/semmle/javascript/AMD.qll index 7214005b593..b28dd5b9b72 100644 --- a/javascript/ql/lib/semmle/javascript/AMD.qll +++ b/javascript/ql/lib/semmle/javascript/AMD.qll @@ -61,7 +61,13 @@ class AmdModuleDefinition extends CallExpr instanceof AmdModuleDefinition::Range } /** Gets the `i`th dependency of this module definition. */ - PathExpr getDependency(int i) { result = this.getDependencies().getElement(i) } + PathExpr getDependency(int i) { + exists(Expr expr | + expr = this.getDependencies().getElement(i) and + not isPseudoDependency(expr.getStringValue()) and + result = expr + ) + } /** Gets a dependency of this module definition. */ PathExpr getADependency() { @@ -203,11 +209,15 @@ class AmdModuleDefinition extends CallExpr instanceof AmdModuleDefinition::Range } } +private predicate isPseudoDependency(string s) { s = ["exports", "require", "module"] } + /** An AMD dependency, considered as a path expression. */ private class AmdDependencyPath extends PathExprCandidate { AmdDependencyPath() { exists(AmdModuleDefinition amd | - this = amd.getDependencies().getAnElement() or + this = amd.getDependencies().getAnElement() and + not isPseudoDependency(this.getStringValue()) + or this = amd.getARequireCall().getAnArgument() ) } diff --git a/javascript/ql/test/library-tests/AMD/tests.expected b/javascript/ql/test/library-tests/AMD/tests.expected index 265a7f291df..ce9d6f60f5d 100644 --- a/javascript/ql/test/library-tests/AMD/tests.expected +++ b/javascript/ql/test/library-tests/AMD/tests.expected @@ -61,7 +61,6 @@ amdModuleDefinition | umd.js:4:9:4:43 | define( ... actory) | umd.js:1:18:1:24 | factory | | umd.js:4:9:4:43 | define( ... actory) | umd.js:9:9:14:1 | functio ... };\\n} | amdModuleDependencies -| tst2.js:1:1:3:2 | define( ... 42;\\n}) | tst2.js:1:9:1:17 | 'exports' | | tst3.js:1:1:3:2 | define( ... 42;\\n}) | tst3.js:2:21:2:25 | './a' | | tst4.js:1:1:11:2 | define( ... };\\n}) | tst4.js:2:9:2:14 | 'a.js' | | tst4.js:1:1:11:2 | define( ... };\\n}) | tst4.js:3:9:3:13 | 'foo' | From eeaa2bcc55453976dd9e5231a5bbe93df72992ad Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 29 Feb 2024 11:13:36 +0100 Subject: [PATCH 092/430] JS: Add test for class instance escaping into dependency --- .../library-tests/EndpointNaming/EndpointNaming.expected | 1 + .../ql/test/library-tests/EndpointNaming/pack1/main.js | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected index af5e8d62bb3..87a41e7716b 100644 --- a/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected +++ b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected @@ -1,4 +1,5 @@ testFailures +| pack1/main.js:19:6:19:10 | | Unexpected result: name=(pack1).InternalClass.prototype.m | ambiguousPreferredPredecessor | pack2/lib.js:1:1:3:1 | def moduleImport("pack2").getMember("exports").getMember("lib").getMember("LibClass").getInstance() | | pack2/lib.js:8:22:8:34 | def moduleImport("pack2").getMember("exports").getMember("lib").getMember("LibClass").getMember("foo") | diff --git a/javascript/ql/test/library-tests/EndpointNaming/pack1/main.js b/javascript/ql/test/library-tests/EndpointNaming/pack1/main.js index cc550f0da15..53269fb0602 100644 --- a/javascript/ql/test/library-tests/EndpointNaming/pack1/main.js +++ b/javascript/ql/test/library-tests/EndpointNaming/pack1/main.js @@ -13,3 +13,9 @@ export function getEscapingInstance() { } // $ name=(pack1).getEscapingInstance export function publicFunction() {} // $ name=(pack1).publicFunction + +// Escapes into an upstream library, but is not exposed downstream +class InternalClass { + m() {} +} +require('foo').bar(new InternalClass()); From 6a0adff1dc97a2d98307c46844528f8a3c77d682 Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 29 Feb 2024 11:10:52 +0100 Subject: [PATCH 093/430] JS: More precise detection of classes with escaping instances --- .../lib/semmle/javascript/endpoints/EndpointNaming.qll | 9 ++++++++- .../library-tests/EndpointNaming/EndpointNaming.expected | 1 - 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll index eb2fa714a39..fdb2b7ab966 100644 --- a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll +++ b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll @@ -277,9 +277,16 @@ private predicate nameFromGlobal(DataFlow::Node node, string package, string nam (if node.getTopLevel().isExterns() then badness = -10 else badness = 10) } +/** Gets an API node whose value is exposed to client code. */ +private API::Node exposedNode() { + result = API::moduleExport(_) + or + result = exposedNode().getASuccessor() +} + /** Holds if an instance of `cls` can be exposed to client code. */ private predicate hasEscapingInstance(DataFlow::ClassNode cls) { - cls.getAnInstanceReference().flowsTo(any(API::Node n).asSink()) + cls.getAnInstanceReference().flowsTo(exposedNode().asSink()) } private predicate sourceNodeHasNameCandidate( diff --git a/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected index 87a41e7716b..af5e8d62bb3 100644 --- a/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected +++ b/javascript/ql/test/library-tests/EndpointNaming/EndpointNaming.expected @@ -1,5 +1,4 @@ testFailures -| pack1/main.js:19:6:19:10 | | Unexpected result: name=(pack1).InternalClass.prototype.m | ambiguousPreferredPredecessor | pack2/lib.js:1:1:3:1 | def moduleImport("pack2").getMember("exports").getMember("lib").getMember("LibClass").getInstance() | | pack2/lib.js:8:22:8:34 | def moduleImport("pack2").getMember("exports").getMember("lib").getMember("LibClass").getMember("foo") | From 13e3a5158eaa3f8c685ab342e2fba64cac10b296 Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 29 Feb 2024 13:59:25 +0100 Subject: [PATCH 094/430] JS: Fix qldoc --- .../ql/lib/semmle/javascript/dataflow/internal/StepSummary.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/StepSummary.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/StepSummary.qll index 829e02591a0..435d4d82ed5 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/StepSummary.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/StepSummary.qll @@ -78,7 +78,7 @@ private module Cached { } /** - * Holds if `loadProp` of `parameter` is stored in the `storeProp` property of the return value of `fun`. + * Holds if `loadProp` of `param` is stored in the `storeProp` property of the return value of `fun`. */ pragma[nomagic] private predicate summarizedLoadStoreStep( From 8151f3024d9ecaac18c4ddcc3407d04e760d8715 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 29 Feb 2024 15:41:43 +0000 Subject: [PATCH 095/430] Shared: Pinch better doc for isEquality from a related Guards class in csharp. --- shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll index 28329e844da..feff3010864 100644 --- a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll +++ b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll @@ -195,9 +195,9 @@ signature module Semantic { predicate directlyControls(BasicBlock controlled, boolean branch); /** - * Holds if the guard represents an equality between two expressions. - * - * @param e1 The first expression. + * 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); From 98289b52d6fbbcb84864e5b5896738cffe57a19b Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 29 Feb 2024 15:45:43 +0000 Subject: [PATCH 096/430] Shared: Explain SsaPhiNode a bit more. --- .../codeql/rangeanalysis/RangeAnalysis.qll | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll index feff3010864..97c4d2ac2f7 100644 --- a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll +++ b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll @@ -257,7 +257,18 @@ signature module Semantic { /** * 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. + * 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`. */ From 70465b22c7f52b2b1cbbbd33842bc7a788fa833a Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 29 Feb 2024 15:55:14 +0000 Subject: [PATCH 097/430] Shared: Remove @ annotations. --- shared/dataflow/codeql/dataflow/DataFlow.qll | 18 ++++++------------ .../codeql/rangeanalysis/RangeAnalysis.qll | 11 ++--------- 2 files changed, 8 insertions(+), 21 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/DataFlow.qll b/shared/dataflow/codeql/dataflow/DataFlow.qll index ea44ec5d0ce..a22ac1e5bb1 100644 --- a/shared/dataflow/codeql/dataflow/DataFlow.qll +++ b/shared/dataflow/codeql/dataflow/DataFlow.qll @@ -50,9 +50,8 @@ signature module InputSig { */ class PostUpdateNode extends Node { /** - * Gets the node that represents the same value prior to the operation. - * - * @return The pre-update node. + * Gets the pre-update node, that is, the node that represents the same + * value prior to the operation. */ Node getPreUpdateNode(); } @@ -153,9 +152,7 @@ signature module InputSig { } /** - * Holds if high precision should be used for the given content. - * - * @param c The content to force high precision for. + * Holds if high precision should be used for the content `c`. */ predicate forceHighPrecision(Content c); @@ -199,16 +196,13 @@ signature module InputSig { } /** - * Holds if the given parameter position matches the argument position. - * - * @param ppos The parameter position. + * 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 between two nodes. - * - * @param node1 The first node in the flow step. + * Holds if there is a simple local flow step from `node1` to `node2`. */ predicate simpleLocalFlowStep(Node node1, Node node2); diff --git a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll index 97c4d2ac2f7..8a6d1f246c5 100644 --- a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll +++ b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll @@ -189,8 +189,6 @@ signature module Semantic { * Console.WriteLine("x is greater than y"); * } * ``` - * - * @param controlled The basic block to check. */ predicate directlyControls(BasicBlock controlled, boolean branch); @@ -213,8 +211,6 @@ signature module Semantic { * printf("x is not greater than y\n"); * } * ``` - * - * @param bb1 The first basic block. */ predicate hasBranchEdge(BasicBlock bb1, BasicBlock bb2, boolean branch); } @@ -280,9 +276,8 @@ signature module Semantic { */ class SsaExplicitUpdate extends SsaVariable { /** - * Gets the expression that defines the value of the variable in this update. - * - * @return The defining expression. + * Gets the expression that defines the value of the variable in this + * update. */ Expr getDefiningExpr(); } @@ -391,8 +386,6 @@ signature module BoundSig { /** * Gets the expression associated with the semantic bound, given a delta. - * - * @param delta - The delta value. */ Sem::Expr getExpr(D::Delta delta); } From 445b82b4e12260120c2300e4a41bb65bede5cfb4 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 29 Feb 2024 16:06:37 +0000 Subject: [PATCH 098/430] Shared: Explain 'guard'. --- shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll index 8a6d1f246c5..619ce9b1095 100644 --- a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll +++ b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll @@ -189,6 +189,8 @@ signature module Semantic { * 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); @@ -211,6 +213,8 @@ signature module Semantic { * 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); } From 88e3bc68652bb6371cba8db501b8b3494a18bd64 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 29 Feb 2024 17:03:30 +0000 Subject: [PATCH 099/430] Update shared/dataflow/codeql/dataflow/DataFlow.qll Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> --- shared/dataflow/codeql/dataflow/DataFlow.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/dataflow/codeql/dataflow/DataFlow.qll b/shared/dataflow/codeql/dataflow/DataFlow.qll index a22ac1e5bb1..57c971201e3 100644 --- a/shared/dataflow/codeql/dataflow/DataFlow.qll +++ b/shared/dataflow/codeql/dataflow/DataFlow.qll @@ -40,7 +40,7 @@ signature module InputSig { /** * A node in the data flow graph representing the value of an argument after - * a function call returns. For example, consider the following C++ code: + * an operation that might have changed its state. For example, consider the following C++ code: * ``` * int a = 1; * increment(&a); From 9d2dc7a3cc8889118d1faa86e69e0b0acb041f3d Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 29 Feb 2024 17:09:16 +0000 Subject: [PATCH 100/430] Shared: Format. --- shared/dataflow/codeql/dataflow/DataFlow.qll | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/shared/dataflow/codeql/dataflow/DataFlow.qll b/shared/dataflow/codeql/dataflow/DataFlow.qll index 57c971201e3..059e420b2fc 100644 --- a/shared/dataflow/codeql/dataflow/DataFlow.qll +++ b/shared/dataflow/codeql/dataflow/DataFlow.qll @@ -40,7 +40,8 @@ signature module InputSig { /** * A node in the data flow graph representing the value of an argument after - * an operation that might have changed its state. For example, consider the following C++ code: + * an operation that might have changed its state. For example, consider the + * following C++ code: * ``` * int a = 1; * increment(&a); From f83476872048ea2e64f343f94b49b6e18186695d Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 29 Feb 2024 17:00:56 +0000 Subject: [PATCH 101/430] Shared: Improve QLDoc for forceHighPrecision. --- shared/dataflow/codeql/dataflow/DataFlow.qll | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/shared/dataflow/codeql/dataflow/DataFlow.qll b/shared/dataflow/codeql/dataflow/DataFlow.qll index 059e420b2fc..4b0c4c0a3ec 100644 --- a/shared/dataflow/codeql/dataflow/DataFlow.qll +++ b/shared/dataflow/codeql/dataflow/DataFlow.qll @@ -153,7 +153,10 @@ signature module InputSig { } /** - * Holds if high precision should be used for the content `c`. + * 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); From a49991923909ccf979ddda615171d7cf2f15cc78 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 29 Feb 2024 17:13:12 +0000 Subject: [PATCH 102/430] Shared: More helpful QLDoc for simpleLocalFlowStep. --- shared/dataflow/codeql/dataflow/DataFlow.qll | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/shared/dataflow/codeql/dataflow/DataFlow.qll b/shared/dataflow/codeql/dataflow/DataFlow.qll index 4b0c4c0a3ec..0a3ce317265 100644 --- a/shared/dataflow/codeql/dataflow/DataFlow.qll +++ b/shared/dataflow/codeql/dataflow/DataFlow.qll @@ -206,7 +206,9 @@ signature module InputSig { predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos); /** - * Holds if there is a simple local flow step from `node1` to `node2`. + * Holds if there is a simple local flow step from `node1` to `node2`. This + * is the local flow predicate that's used as a building block in global + * data flow. It may have less flow than the `localFlowStep` predicate. */ predicate simpleLocalFlowStep(Node node1, Node node2); From 9f01ea68f7d3ce004d54cf3d4132c2a2b89b0bea Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 1 Mar 2024 10:19:49 +0100 Subject: [PATCH 103/430] Python: Add type-tracking consistency query For now I'm only ignoring stdlib nodes, so it's easy for reviewer to see why we need to have more excludes :) --- .../TypeTrackingConsistency.ql | 12 +++++ .../TypeTrackingConsistency.expected | 50 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 python/ql/consistency-queries/TypeTrackingConsistency.ql create mode 100644 python/ql/test/experimental/dataflow/typetracking/CONSISTENCY/TypeTrackingConsistency.expected diff --git a/python/ql/consistency-queries/TypeTrackingConsistency.ql b/python/ql/consistency-queries/TypeTrackingConsistency.ql new file mode 100644 index 00000000000..f338c4dcb1d --- /dev/null +++ b/python/ql/consistency-queries/TypeTrackingConsistency.ql @@ -0,0 +1,12 @@ +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) { + not exists(n.getLocation().getFile().getRelativePath()) + } +} + +import ConsistencyChecks diff --git a/python/ql/test/experimental/dataflow/typetracking/CONSISTENCY/TypeTrackingConsistency.expected b/python/ql/test/experimental/dataflow/typetracking/CONSISTENCY/TypeTrackingConsistency.expected new file mode 100644 index 00000000000..8f036153e53 --- /dev/null +++ b/python/ql/test/experimental/dataflow/typetracking/CONSISTENCY/TypeTrackingConsistency.expected @@ -0,0 +1,50 @@ +unreachableNode +| attribute_tests.py:6:5:6:5 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:12:9:12:9 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:13:5:13:5 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:28:5:28:5 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:29:17:29:17 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:30:5:30:5 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:39:13:39:13 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:45:5:45:5 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:77:10:77:16 | [post] ControlFlowNode for MyClass | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:89:13:89:13 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:95:5:95:5 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:102:13:102:13 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:109:5:109:5 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:117:5:117:5 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:123:5:123:5 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:130:5:130:5 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:137:5:137:5 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:150:18:150:21 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:153:19:153:22 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:156:34:156:37 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:159:12:159:21 | [pre] ControlFlowNode for MyClass2() | Unreachable node in step of kind call. | +| attribute_tests.py:160:7:160:14 | [post] ControlFlowNode for instance | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:167:20:167:23 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:170:19:170:22 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:173:34:173:37 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:177:1:177:8 | [post] ControlFlowNode for instance | Unreachable node in step of kind simpleLocalSmallStep. | +| attribute_tests.py:178:1:178:8 | [post] ControlFlowNode for instance | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:54:5:54:12 | [post] ControlFlowNode for mymodule | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:55:9:55:16 | [post] ControlFlowNode for mymodule | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:72:15:72:15 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:74:13:74:17 | [post] ControlFlowNode for print | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:92:9:92:13 | [post] ControlFlowNode for print | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:98:2:98:13 | [post] ControlFlowNode for my_decorator | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:130:15:130:18 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:133:15:133:18 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:136:15:136:18 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:142:15:142:18 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:145:15:145:18 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:148:15:148:18 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:151:20:151:23 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:152:9:152:12 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:153:9:153:13 | [post] ControlFlowNode for super | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:162:5:162:7 | [post] ControlFlowNode for foo | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:163:9:163:11 | [post] ControlFlowNode for foo | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:179:14:179:24 | [post] ControlFlowNode for get_tracked | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:181:1:181:5 | [post] ControlFlowNode for print | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:188:9:188:13 | [post] ControlFlowNode for print | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:192:9:192:13 | [post] ControlFlowNode for print | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:208:14:208:30 | [post] ControlFlowNode for yielding_function | Unreachable node in step of kind simpleLocalSmallStep. | From bbe8c6dcaa3f0702741b83d9706f01ca5d713be2 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 1 Mar 2024 10:23:50 +0100 Subject: [PATCH 104/430] Python: Remove synth postupdate nodes from tt-consistency --- .../TypeTrackingConsistency.ql | 2 + .../TypeTrackingConsistency.expected | 48 ------------------- 2 files changed, 2 insertions(+), 48 deletions(-) diff --git a/python/ql/consistency-queries/TypeTrackingConsistency.ql b/python/ql/consistency-queries/TypeTrackingConsistency.ql index f338c4dcb1d..772960b08a8 100644 --- a/python/ql/consistency-queries/TypeTrackingConsistency.ql +++ b/python/ql/consistency-queries/TypeTrackingConsistency.ql @@ -6,6 +6,8 @@ private import semmle.python.dataflow.new.internal.TypeTrackingImpl private module ConsistencyChecksInput implements ConsistencyChecksInputSig { predicate unreachableNodeExclude(DataFlow::Node n) { not exists(n.getLocation().getFile().getRelativePath()) + or + n instanceof DataFlowPrivate::SyntheticPostUpdateNode } } diff --git a/python/ql/test/experimental/dataflow/typetracking/CONSISTENCY/TypeTrackingConsistency.expected b/python/ql/test/experimental/dataflow/typetracking/CONSISTENCY/TypeTrackingConsistency.expected index 8f036153e53..8cba9c02c17 100644 --- a/python/ql/test/experimental/dataflow/typetracking/CONSISTENCY/TypeTrackingConsistency.expected +++ b/python/ql/test/experimental/dataflow/typetracking/CONSISTENCY/TypeTrackingConsistency.expected @@ -1,50 +1,2 @@ unreachableNode -| attribute_tests.py:6:5:6:5 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:12:9:12:9 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:13:5:13:5 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:28:5:28:5 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:29:17:29:17 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:30:5:30:5 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:39:13:39:13 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:45:5:45:5 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:77:10:77:16 | [post] ControlFlowNode for MyClass | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:89:13:89:13 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:95:5:95:5 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:102:13:102:13 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:109:5:109:5 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:117:5:117:5 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:123:5:123:5 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:130:5:130:5 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:137:5:137:5 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:150:18:150:21 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:153:19:153:22 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:156:34:156:37 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | | attribute_tests.py:159:12:159:21 | [pre] ControlFlowNode for MyClass2() | Unreachable node in step of kind call. | -| attribute_tests.py:160:7:160:14 | [post] ControlFlowNode for instance | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:167:20:167:23 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:170:19:170:22 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:173:34:173:37 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:177:1:177:8 | [post] ControlFlowNode for instance | Unreachable node in step of kind simpleLocalSmallStep. | -| attribute_tests.py:178:1:178:8 | [post] ControlFlowNode for instance | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:54:5:54:12 | [post] ControlFlowNode for mymodule | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:55:9:55:16 | [post] ControlFlowNode for mymodule | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:72:15:72:15 | [post] ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:74:13:74:17 | [post] ControlFlowNode for print | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:92:9:92:13 | [post] ControlFlowNode for print | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:98:2:98:13 | [post] ControlFlowNode for my_decorator | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:130:15:130:18 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:133:15:133:18 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:136:15:136:18 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:142:15:142:18 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:145:15:145:18 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:148:15:148:18 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:151:20:151:23 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:152:9:152:12 | [post] ControlFlowNode for self | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:153:9:153:13 | [post] ControlFlowNode for super | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:162:5:162:7 | [post] ControlFlowNode for foo | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:163:9:163:11 | [post] ControlFlowNode for foo | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:179:14:179:24 | [post] ControlFlowNode for get_tracked | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:181:1:181:5 | [post] ControlFlowNode for print | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:188:9:188:13 | [post] ControlFlowNode for print | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:192:9:192:13 | [post] ControlFlowNode for print | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:208:14:208:30 | [post] ControlFlowNode for yielding_function | Unreachable node in step of kind simpleLocalSmallStep. | From ff5f79475099580c8652062988352f37143206bb Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 1 Mar 2024 10:27:29 +0100 Subject: [PATCH 105/430] Python: Exclude synth preupdate nodes from tt-consistency ... and that should be it :+1: (so that's why I'm allowing the tests to run on all data-flow nodes again) --- python/ql/consistency-queries/TypeTrackingConsistency.ql | 4 ++-- .../typetracking/CONSISTENCY/TypeTrackingConsistency.expected | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) delete mode 100644 python/ql/test/experimental/dataflow/typetracking/CONSISTENCY/TypeTrackingConsistency.expected diff --git a/python/ql/consistency-queries/TypeTrackingConsistency.ql b/python/ql/consistency-queries/TypeTrackingConsistency.ql index 772960b08a8..3083f2b5f1a 100644 --- a/python/ql/consistency-queries/TypeTrackingConsistency.ql +++ b/python/ql/consistency-queries/TypeTrackingConsistency.ql @@ -5,9 +5,9 @@ private import semmle.python.dataflow.new.internal.TypeTrackingImpl private module ConsistencyChecksInput implements ConsistencyChecksInputSig { predicate unreachableNodeExclude(DataFlow::Node n) { - not exists(n.getLocation().getFile().getRelativePath()) - or n instanceof DataFlowPrivate::SyntheticPostUpdateNode + or + n instanceof DataFlowPrivate::SyntheticPreUpdateNode } } diff --git a/python/ql/test/experimental/dataflow/typetracking/CONSISTENCY/TypeTrackingConsistency.expected b/python/ql/test/experimental/dataflow/typetracking/CONSISTENCY/TypeTrackingConsistency.expected deleted file mode 100644 index 8cba9c02c17..00000000000 --- a/python/ql/test/experimental/dataflow/typetracking/CONSISTENCY/TypeTrackingConsistency.expected +++ /dev/null @@ -1,2 +0,0 @@ -unreachableNode -| attribute_tests.py:159:12:159:21 | [pre] ControlFlowNode for MyClass2() | Unreachable node in step of kind call. | From 1fece75f15e4f2e6a95c6b8017622e250edc5acd Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 1 Mar 2024 11:10:26 +0000 Subject: [PATCH 106/430] Apply suggestions from code review Co-authored-by: Anders Schack-Mulligen --- shared/dataflow/codeql/dataflow/DataFlow.qll | 21 +++++++++---------- .../codeql/rangeanalysis/RangeAnalysis.qll | 6 +++--- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/DataFlow.qll b/shared/dataflow/codeql/dataflow/DataFlow.qll index 0a3ce317265..db2776fb9fc 100644 --- a/shared/dataflow/codeql/dataflow/DataFlow.qll +++ b/shared/dataflow/codeql/dataflow/DataFlow.qll @@ -34,20 +34,20 @@ signature module InputSig { } /** - * A node in the data flow graph that represents an output. + * 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 an argument after - * an operation that might have changed its state. For example, consider the - * following C++ code: + * 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: * ``` - * int a = 1; - * increment(&a); + * x.setFoo(y); * ``` - * The post-update node for `&a` represents the value of `&a` after - * modification by the call to `increment`. + * 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 { /** @@ -206,9 +206,8 @@ signature module InputSig { predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos); /** - * Holds if there is a simple local flow step from `node1` to `node2`. This - * is the local flow predicate that's used as a building block in global - * data flow. It may have less flow than the `localFlowStep` predicate. + * 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); diff --git a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll index 619ce9b1095..688ee023900 100644 --- a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll +++ b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll @@ -175,7 +175,7 @@ signature module Semantic { BasicBlock getBasicBlock(); /** - * Gets the guard as an expression. + * Gets the guard as an expression, if any. */ Expr asExpr(); @@ -240,11 +240,11 @@ signature module Semantic { Type getExprType(Expr e); /** - * A single static single assignment (SSA) variable. + * A static single-assignment (SSA) variable. */ class SsaVariable { /** - * Gets the expression where this SSA variable is used. + * Gets an expression reading the value of this SSA variable. */ Expr getAUse(); From bff95c4c1b5ed5fca74215dccd3190758b9679e9 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 1 Mar 2024 13:58:33 +0100 Subject: [PATCH 107/430] Python: Add example of consistency failure --- .../Arguments/CONSISTENCY/TypeTrackingConsistency.expected | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 python/ql/test/query-tests/Classes/Arguments/CONSISTENCY/TypeTrackingConsistency.expected diff --git a/python/ql/test/query-tests/Classes/Arguments/CONSISTENCY/TypeTrackingConsistency.expected b/python/ql/test/query-tests/Classes/Arguments/CONSISTENCY/TypeTrackingConsistency.expected new file mode 100644 index 00000000000..c48725c1ebf --- /dev/null +++ b/python/ql/test/query-tests/Classes/Arguments/CONSISTENCY/TypeTrackingConsistency.expected @@ -0,0 +1,7 @@ +unreachableNode +| wrong_arguments.py:65:1:65:7 | SynthDictSplatArgumentNode | Unreachable node in step of kind call. | +| wrong_arguments.py:66:1:66:7 | SynthDictSplatArgumentNode | Unreachable node in step of kind call. | +| wrong_arguments.py:67:1:67:12 | SynthDictSplatArgumentNode | Unreachable node in step of kind call. | +| wrong_arguments.py:71:1:71:7 | SynthDictSplatArgumentNode | Unreachable node in step of kind call. | +| wrong_arguments.py:72:1:72:12 | SynthDictSplatArgumentNode | Unreachable node in step of kind call. | +| wrong_arguments.py:73:1:73:7 | SynthDictSplatArgumentNode | Unreachable node in step of kind call. | From 1658a1cb801e140d185e6064a190c2bc0f613126 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 1 Mar 2024 13:59:00 +0100 Subject: [PATCH 108/430] Python: Ignore SynthDictSplatArgumentNode failures --- python/ql/consistency-queries/TypeTrackingConsistency.ql | 3 +++ .../Arguments/CONSISTENCY/TypeTrackingConsistency.expected | 7 ------- 2 files changed, 3 insertions(+), 7 deletions(-) delete mode 100644 python/ql/test/query-tests/Classes/Arguments/CONSISTENCY/TypeTrackingConsistency.expected diff --git a/python/ql/consistency-queries/TypeTrackingConsistency.ql b/python/ql/consistency-queries/TypeTrackingConsistency.ql index 3083f2b5f1a..68f9e9e5fa7 100644 --- a/python/ql/consistency-queries/TypeTrackingConsistency.ql +++ b/python/ql/consistency-queries/TypeTrackingConsistency.ql @@ -8,6 +8,9 @@ private module ConsistencyChecksInput implements ConsistencyChecksInputSig { 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 } } diff --git a/python/ql/test/query-tests/Classes/Arguments/CONSISTENCY/TypeTrackingConsistency.expected b/python/ql/test/query-tests/Classes/Arguments/CONSISTENCY/TypeTrackingConsistency.expected deleted file mode 100644 index c48725c1ebf..00000000000 --- a/python/ql/test/query-tests/Classes/Arguments/CONSISTENCY/TypeTrackingConsistency.expected +++ /dev/null @@ -1,7 +0,0 @@ -unreachableNode -| wrong_arguments.py:65:1:65:7 | SynthDictSplatArgumentNode | Unreachable node in step of kind call. | -| wrong_arguments.py:66:1:66:7 | SynthDictSplatArgumentNode | Unreachable node in step of kind call. | -| wrong_arguments.py:67:1:67:12 | SynthDictSplatArgumentNode | Unreachable node in step of kind call. | -| wrong_arguments.py:71:1:71:7 | SynthDictSplatArgumentNode | Unreachable node in step of kind call. | -| wrong_arguments.py:72:1:72:12 | SynthDictSplatArgumentNode | Unreachable node in step of kind call. | -| wrong_arguments.py:73:1:73:7 | SynthDictSplatArgumentNode | Unreachable node in step of kind call. | From 5d212514c63ae288371b3878d64f6ed01d7e543b Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 1 Mar 2024 14:07:08 +0100 Subject: [PATCH 109/430] Python: Add example of consistency failure --- .../TypeTrackingConsistency.expected | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 python/ql/test/experimental/dataflow/match/CONSISTENCY/TypeTrackingConsistency.expected diff --git a/python/ql/test/experimental/dataflow/match/CONSISTENCY/TypeTrackingConsistency.expected b/python/ql/test/experimental/dataflow/match/CONSISTENCY/TypeTrackingConsistency.expected new file mode 100644 index 00000000000..52cd572e19f --- /dev/null +++ b/python/ql/test/experimental/dataflow/match/CONSISTENCY/TypeTrackingConsistency.expected @@ -0,0 +1,51 @@ +unreachableNode +| test.py:72:15:72:15 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:72:15:72:15 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:72:18:72:18 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:72:18:72:18 | ControlFlowNode for y | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:73:20:73:20 | ControlFlowNode for x | Unreachable node in step of kind call. | +| test.py:74:18:74:18 | ControlFlowNode for y | Unreachable node in step of kind call. | +| test.py:79:15:79:15 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:79:15:79:15 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:79:18:79:18 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:79:18:79:18 | ControlFlowNode for y | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:80:20:80:20 | ControlFlowNode for x | Unreachable node in step of kind call. | +| test.py:81:18:81:18 | ControlFlowNode for y | Unreachable node in step of kind call. | +| test.py:89:15:89:15 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:89:15:89:15 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:89:19:89:19 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:89:19:89:19 | ControlFlowNode for y | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:90:20:90:20 | ControlFlowNode for x | Unreachable node in step of kind call. | +| test.py:96:15:96:15 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:96:15:96:15 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:96:19:96:19 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:96:19:96:19 | ControlFlowNode for y | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:97:18:97:18 | ControlFlowNode for x | Unreachable node in step of kind call. | +| test.py:103:15:103:15 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:103:15:103:15 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:103:19:103:19 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:103:19:103:19 | ControlFlowNode for y | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:104:20:104:20 | ControlFlowNode for x | Unreachable node in step of kind call. | +| test.py:110:15:110:15 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:110:15:110:15 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:110:19:110:19 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:110:19:110:19 | ControlFlowNode for y | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:111:18:111:18 | ControlFlowNode for x | Unreachable node in step of kind call. | +| test.py:117:20:117:20 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:117:20:117:20 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:117:28:117:28 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:117:28:117:28 | ControlFlowNode for y | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:118:20:118:20 | ControlFlowNode for x | Unreachable node in step of kind call. | +| test.py:119:18:119:18 | ControlFlowNode for y | Unreachable node in step of kind call. | +| test.py:125:20:125:20 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:125:20:125:20 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:126:20:126:20 | ControlFlowNode for x | Unreachable node in step of kind call. | +| test.py:132:20:132:20 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:132:20:132:20 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:133:18:133:18 | ControlFlowNode for x | Unreachable node in step of kind call. | +| test.py:151:27:151:27 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:151:27:151:27 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:152:18:152:18 | ControlFlowNode for x | Unreachable node in step of kind call. | +| test.py:155:27:155:27 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:155:27:155:27 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:156:20:156:20 | ControlFlowNode for x | Unreachable node in step of kind call. | From bcd5c08ebd2693690e5bdba177c023668cf45e5b Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 1 Mar 2024 14:15:32 +0100 Subject: [PATCH 110/430] Python: Ignore match-related inconsistencies --- .../TypeTrackingConsistency.ql | 9 ++++ .../TypeTrackingConsistency.expected | 51 ------------------- 2 files changed, 9 insertions(+), 51 deletions(-) delete mode 100644 python/ql/test/experimental/dataflow/match/CONSISTENCY/TypeTrackingConsistency.expected diff --git a/python/ql/consistency-queries/TypeTrackingConsistency.ql b/python/ql/consistency-queries/TypeTrackingConsistency.ql index 68f9e9e5fa7..b2349fc0f1c 100644 --- a/python/ql/consistency-queries/TypeTrackingConsistency.ql +++ b/python/ql/consistency-queries/TypeTrackingConsistency.ql @@ -11,6 +11,15 @@ private module ConsistencyChecksInput implements ConsistencyChecksInputSig { 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 | + TypeTrackingInput::simpleLocalSmallStep*(m, n) + ) } } diff --git a/python/ql/test/experimental/dataflow/match/CONSISTENCY/TypeTrackingConsistency.expected b/python/ql/test/experimental/dataflow/match/CONSISTENCY/TypeTrackingConsistency.expected deleted file mode 100644 index 52cd572e19f..00000000000 --- a/python/ql/test/experimental/dataflow/match/CONSISTENCY/TypeTrackingConsistency.expected +++ /dev/null @@ -1,51 +0,0 @@ -unreachableNode -| test.py:72:15:72:15 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:72:15:72:15 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:72:18:72:18 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:72:18:72:18 | ControlFlowNode for y | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:73:20:73:20 | ControlFlowNode for x | Unreachable node in step of kind call. | -| test.py:74:18:74:18 | ControlFlowNode for y | Unreachable node in step of kind call. | -| test.py:79:15:79:15 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:79:15:79:15 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:79:18:79:18 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:79:18:79:18 | ControlFlowNode for y | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:80:20:80:20 | ControlFlowNode for x | Unreachable node in step of kind call. | -| test.py:81:18:81:18 | ControlFlowNode for y | Unreachable node in step of kind call. | -| test.py:89:15:89:15 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:89:15:89:15 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:89:19:89:19 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:89:19:89:19 | ControlFlowNode for y | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:90:20:90:20 | ControlFlowNode for x | Unreachable node in step of kind call. | -| test.py:96:15:96:15 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:96:15:96:15 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:96:19:96:19 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:96:19:96:19 | ControlFlowNode for y | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:97:18:97:18 | ControlFlowNode for x | Unreachable node in step of kind call. | -| test.py:103:15:103:15 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:103:15:103:15 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:103:19:103:19 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:103:19:103:19 | ControlFlowNode for y | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:104:20:104:20 | ControlFlowNode for x | Unreachable node in step of kind call. | -| test.py:110:15:110:15 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:110:15:110:15 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:110:19:110:19 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:110:19:110:19 | ControlFlowNode for y | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:111:18:111:18 | ControlFlowNode for x | Unreachable node in step of kind call. | -| test.py:117:20:117:20 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:117:20:117:20 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:117:28:117:28 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:117:28:117:28 | ControlFlowNode for y | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:118:20:118:20 | ControlFlowNode for x | Unreachable node in step of kind call. | -| test.py:119:18:119:18 | ControlFlowNode for y | Unreachable node in step of kind call. | -| test.py:125:20:125:20 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:125:20:125:20 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:126:20:126:20 | ControlFlowNode for x | Unreachable node in step of kind call. | -| test.py:132:20:132:20 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:132:20:132:20 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:133:18:133:18 | ControlFlowNode for x | Unreachable node in step of kind call. | -| test.py:151:27:151:27 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:151:27:151:27 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:152:18:152:18 | ControlFlowNode for x | Unreachable node in step of kind call. | -| test.py:155:27:155:27 | ControlFlowNode for MatchCapturePattern | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:155:27:155:27 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:156:20:156:20 | ControlFlowNode for x | Unreachable node in step of kind call. | From 7e3e5db3dbde7aa9304c758bd21141deff2225e6 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 1 Mar 2024 14:21:16 +0100 Subject: [PATCH 111/430] Python: Add example of consistency failure --- .../TypeTrackingConsistency.expected | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 python/ql/test/experimental/dataflow/coverage/CONSISTENCY/TypeTrackingConsistency.expected diff --git a/python/ql/test/experimental/dataflow/coverage/CONSISTENCY/TypeTrackingConsistency.expected b/python/ql/test/experimental/dataflow/coverage/CONSISTENCY/TypeTrackingConsistency.expected new file mode 100644 index 00000000000..30f0348dc6d --- /dev/null +++ b/python/ql/test/experimental/dataflow/coverage/CONSISTENCY/TypeTrackingConsistency.expected @@ -0,0 +1,18 @@ +unreachableNode +| test.py:215:16:215:19 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:226:17:226:20 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:231:20:231:24 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:580:9:580:12 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:589:5:589:11 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:589:6:589:10 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:589:7:589:9 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:618:7:618:16 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:626:7:626:16 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:634:6:634:17 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:646:6:646:14 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:655:7:655:13 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:664:7:664:13 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:673:6:673:14 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:693:9:693:11 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:701:9:701:12 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | +| test.py:710:9:710:14 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | From 7c60562132247d13ee75a9e466caa73f8e1ebba6 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 1 Mar 2024 14:22:18 +0100 Subject: [PATCH 112/430] Python: Ignore IterableSequenceNode inconsistencies --- .../TypeTrackingConsistency.ql | 4 ++++ .../TypeTrackingConsistency.expected | 18 ------------------ 2 files changed, 4 insertions(+), 18 deletions(-) delete mode 100644 python/ql/test/experimental/dataflow/coverage/CONSISTENCY/TypeTrackingConsistency.expected diff --git a/python/ql/consistency-queries/TypeTrackingConsistency.ql b/python/ql/consistency-queries/TypeTrackingConsistency.ql index b2349fc0f1c..b8f1e3a1b48 100644 --- a/python/ql/consistency-queries/TypeTrackingConsistency.ql +++ b/python/ql/consistency-queries/TypeTrackingConsistency.ql @@ -20,6 +20,10 @@ private module ConsistencyChecksInput implements ConsistencyChecksInputSig { exists(DataFlow::Node m | m.asCfgNode().getNode() instanceof MatchCapturePattern | 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 } } diff --git a/python/ql/test/experimental/dataflow/coverage/CONSISTENCY/TypeTrackingConsistency.expected b/python/ql/test/experimental/dataflow/coverage/CONSISTENCY/TypeTrackingConsistency.expected deleted file mode 100644 index 30f0348dc6d..00000000000 --- a/python/ql/test/experimental/dataflow/coverage/CONSISTENCY/TypeTrackingConsistency.expected +++ /dev/null @@ -1,18 +0,0 @@ -unreachableNode -| test.py:215:16:215:19 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:226:17:226:20 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:231:20:231:24 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:580:9:580:12 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:589:5:589:11 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:589:6:589:10 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:589:7:589:9 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:618:7:618:16 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:626:7:626:16 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:634:6:634:17 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:646:6:646:14 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:655:7:655:13 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:664:7:664:13 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:673:6:673:14 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:693:9:693:11 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:701:9:701:12 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | -| test.py:710:9:710:14 | IterableSequence | Unreachable node in step of kind simpleLocalSmallStep. | From a08b292099cef33a9f444eba6e60635a5d338581 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 1 Mar 2024 14:23:24 +0000 Subject: [PATCH 113/430] Add models for Typhoeus::Request --- .../ruby/frameworks/http_clients/Typhoeus.qll | 44 +++++++++++++++++-- 1 file changed, 40 insertions(+), 4 deletions(-) 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..2882457d41e 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").getReturn("new") + ) } 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 = getBodyFromRequest(requestNode) + } /** Gets the value that controls certificate validation, if any. */ DataFlow::Node getCertificateValidationControllingValue() { @@ -55,3 +68,26 @@ private module TyphoeusDisablesCertificateValidationConfig implements DataFlow:: private module TyphoeusDisablesCertificateValidationFlow = DataFlow::Global; + +private DataFlow::Node getBodyFromRequest(API::Node requestNode) { + result = + [ + getBodyFromResponse(getResponseFromRequest(requestNode)), + requestNode.getMethod("on_body").getBlock().getParameter(0).asSource() + ] +} + +private API::Node getResponseFromRequest(API::Node requestNode) { + result = + [ + requestNode.getReturn(["run", "response"]), + requestNode + .getMethod(["on_complete", "on_success", "on_headers", "on_failure", "on_progress"]) + .getBlock() + .getParameter(0) + ] +} + +private DataFlow::Node getBodyFromResponse(API::Node responseNode) { + result = responseNode.getAMethodCall(["body", "response_body"]) +} From 65b30c1dff364932723a530b1e0355f1014ccf36 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 1 Mar 2024 14:46:55 +0000 Subject: [PATCH 114/430] Add tests and qldoc --- .../ruby/frameworks/http_clients/Typhoeus.qll | 6 ++- .../http_clients/HttpClients.expected | 32 ++++++++++++++++ .../frameworks/http_clients/Typhoeus.rb | 37 ++++++++++++++++++- 3 files changed, 73 insertions(+), 2 deletions(-) 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 2882457d41e..ffcd188c4ba 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/http_clients/Typhoeus.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/http_clients/Typhoeus.qll @@ -69,6 +69,7 @@ private module TyphoeusDisablesCertificateValidationConfig implements DataFlow:: private module TyphoeusDisablesCertificateValidationFlow = DataFlow::Global; +/** Gets the body from the given `requestNode` representing a Typhoeus request */ private DataFlow::Node getBodyFromRequest(API::Node requestNode) { result = [ @@ -77,17 +78,20 @@ private DataFlow::Node getBodyFromRequest(API::Node requestNode) { ] } +/** Gets the response from the given `requestNode` representing a Typhoeus request */ private API::Node getResponseFromRequest(API::Node requestNode) { result = [ requestNode.getReturn(["run", "response"]), requestNode - .getMethod(["on_complete", "on_success", "on_headers", "on_failure", "on_progress"]) + // on_headers does not carry a response body + .getMethod(["on_complete", "on_success", "on_failure", "on_progress"]) .getBlock() .getParameter(0) ] } +/** Gets the body from the given `responseNode` representing a Typhoeus request */ private DataFlow::Node getBodyFromResponse(API::Node responseNode) { result = responseNode.getAMethodCall(["body", "response_body"]) } 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 From 4b1626c83ac3049627dfedf02901ebc9787ad0f2 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 1 Mar 2024 14:59:24 +0000 Subject: [PATCH 115/430] Add change note --- ruby/ql/lib/change-notes/2024-03-01-typhoeus-request.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 ruby/ql/lib/change-notes/2024-03-01-typhoeus-request.md 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..3a6c1d4c463 --- /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 From 5a1c0f60e63161a728d63740384670c6e6754334 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 1 Mar 2024 15:12:16 +0000 Subject: [PATCH 116/430] Fix qldoc typo --- ruby/ql/lib/codeql/ruby/frameworks/http_clients/Typhoeus.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 ffcd188c4ba..3624cb0e8e0 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/http_clients/Typhoeus.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/http_clients/Typhoeus.qll @@ -91,7 +91,7 @@ private API::Node getResponseFromRequest(API::Node requestNode) { ] } -/** Gets the body from the given `responseNode` representing a Typhoeus request */ +/** Gets the body from the given `responseNode` representing a Typhoeus response */ private DataFlow::Node getBodyFromResponse(API::Node responseNode) { result = responseNode.getAMethodCall(["body", "response_body"]) } From 0e24ed14da7d0d464b9b427b807a628617755908 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 1 Mar 2024 17:04:34 +0000 Subject: [PATCH 117/430] Apply suggestions from code review Co-authored-by: Anders Schack-Mulligen --- .../codeql/rangeanalysis/RangeAnalysis.qll | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll index 688ee023900..f54d88b5d7c 100644 --- a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll +++ b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll @@ -276,7 +276,7 @@ signature module Semantic { } /** - * A single update to a variable in the SSA form. + * An SSA variable representing the value of an explicit update of the source variable. */ class SsaExplicitUpdate extends SsaVariable { /** @@ -374,17 +374,21 @@ signature module LangSig { signature module BoundSig { /** - * A semantic bound, which defines a constraint on the possible values of an - * expression. + * 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 the semantic bound. + * Gets a string representation of this bound. */ string toString(); /** - * Gets the location of the semantic bound. + * Gets the location of this bound. */ Location getLocation(); From c663809cc74437aabd820144d4a5ad0343c1bb81 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 1 Mar 2024 17:06:48 +0000 Subject: [PATCH 118/430] Update shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll Co-authored-by: Anders Schack-Mulligen --- shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll index f54d88b5d7c..0337f7683d6 100644 --- a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll +++ b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll @@ -393,7 +393,10 @@ signature module BoundSig { Location getLocation(); /** - * Gets the expression associated with the semantic bound, given a delta. + * Gets an expression that equals this bound plus `delta`. + * + * For the zero-bound this gets integer constants equal to `delta`, and for + * other bounds this gets expressions equal to the bound while `delta = 0`. */ Sem::Expr getExpr(D::Delta delta); } From cb1c68260e5a01eea3eca690019f522c80266628 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 1 Mar 2024 17:36:53 +0000 Subject: [PATCH 119/430] Shared: QLDoc for ContentApprox and getContentApprox. --- shared/dataflow/codeql/dataflow/DataFlow.qll | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/shared/dataflow/codeql/dataflow/DataFlow.qll b/shared/dataflow/codeql/dataflow/DataFlow.qll index db2776fb9fc..7008f09e7e7 100644 --- a/shared/dataflow/codeql/dataflow/DataFlow.qll +++ b/shared/dataflow/codeql/dataflow/DataFlow.qll @@ -178,13 +178,18 @@ signature module InputSig { } /** - * A content approximation. + * A content approximation. A content approximation corresponds with 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 { From c95abd47ce4e0b24f87fd7b544a8b5e3cd1f47a2 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 15 Feb 2024 17:31:46 -0500 Subject: [PATCH 120/430] Remove stored variants of queries --- .../CWE-078/StoredCommandInjection.qhelp | 6 --- .../CWE-078/StoredCommandInjection.ql | 34 ---------------- .../Security Features/CWE-079/StoredXSS.qhelp | 6 --- .../Security Features/CWE-079/StoredXSS.ql | 39 ------------------- .../CWE-090/StoredLDAPInjection.qhelp | 6 --- .../CWE-090/StoredLDAPInjection.ql | 32 --------------- .../CWE-643/StoredXPathInjection.qhelp | 6 --- .../CWE-643/StoredXPathInjection.ql | 32 --------------- 8 files changed, 161 deletions(-) delete mode 100644 csharp/ql/src/Security Features/CWE-078/StoredCommandInjection.qhelp delete mode 100644 csharp/ql/src/Security Features/CWE-078/StoredCommandInjection.ql delete mode 100644 csharp/ql/src/Security Features/CWE-079/StoredXSS.qhelp delete mode 100644 csharp/ql/src/Security Features/CWE-079/StoredXSS.ql delete mode 100644 csharp/ql/src/Security Features/CWE-090/StoredLDAPInjection.qhelp delete mode 100644 csharp/ql/src/Security Features/CWE-090/StoredLDAPInjection.ql delete mode 100644 csharp/ql/src/Security Features/CWE-643/StoredXPathInjection.qhelp delete mode 100644 csharp/ql/src/Security Features/CWE-643/StoredXPathInjection.ql 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-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-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" From be3c1ed0be057c2323337f3fd2df66a4a01cc544 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 15 Feb 2024 17:36:55 -0500 Subject: [PATCH 121/430] Change note --- .../change-notes/2024-03-11-remove-stored-query-variants.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 csharp/ql/src/change-notes/2024-03-11-remove-stored-query-variants.md 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..48c1e409d03 --- /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`) have been removed. If you were using these queries, their results can be restored by enabling the `stored` threat model in your threat model settings. + From c3671c7625d195dd907931e1e700c897b311146d Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 15 Feb 2024 17:41:14 -0500 Subject: [PATCH 122/430] Fix change note --- .../src/change-notes/2024-03-11-remove-stored-query-variants.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index 48c1e409d03..f62d293dc04 100644 --- 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 @@ -1,5 +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`) have been removed. If you were using these queries, their results can be restored by enabling the `stored` threat model in your threat model settings. +* The `Stored` variants of some queries (`cs/stored-command-line-injection`, `cs/web/stored-xss`, `cs/stored-ldap-injection`, `cs/xml/stored-xpath-injection`) have been removed. If you were using these queries, their results can be restored by enabling the `local` threat model in your threat model settings. From e84a50997615d598f095759208e02d8d67c06a21 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Tue, 20 Feb 2024 13:56:34 -0500 Subject: [PATCH 123/430] Modify test cases --- .../CWE-078/CommandInjection.cs | 19 +++++ .../CWE-078/CommandInjection.expected | 70 ++++++++++++--- .../CWE-078/CommandInjection.ext.yml | 7 ++ .../CWE-078/StoredCommandInjection.cs | 28 ------ .../CWE-078/StoredCommandInjection.expected | 8 -- .../CWE-078/StoredCommandInjection.qlref | 1 - .../CWE-079/StoredXSS/StoredXSS.ext.yml | 7 ++ .../CWE-079/StoredXSS/StoredXSS.qlref | 2 +- .../CWE-090/LDAPInjection.cs | 15 ++++ .../CWE-090/LDAPInjection.expected | 41 +++++++-- .../CWE-090/LDAPInjection.ext.yml | 7 ++ .../CWE-090/StoredLDAPInjection.cs | 28 ------ .../CWE-090/StoredLDAPInjection.expected | 8 -- .../CWE-090/StoredLDAPInjection.qlref | 1 - .../CWE-643/StoredXPathInjection.cs | 37 -------- .../CWE-643/StoredXPathInjection.expected | 20 ----- .../CWE-643/StoredXPathInjection.qlref | 1 - .../CWE-643/XPathInjection.cs | 27 ++++++ .../CWE-643/XPathInjection.expected | 85 ++++++++++++++++--- .../CWE-643/XPathInjection.ext.yml | 7 ++ 20 files changed, 254 insertions(+), 165 deletions(-) create mode 100644 csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.ext.yml delete mode 100644 csharp/ql/test/query-tests/Security Features/CWE-078/StoredCommandInjection.cs delete mode 100644 csharp/ql/test/query-tests/Security Features/CWE-078/StoredCommandInjection.expected delete mode 100644 csharp/ql/test/query-tests/Security Features/CWE-078/StoredCommandInjection.qlref create mode 100644 csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.ext.yml create mode 100644 csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.ext.yml delete mode 100644 csharp/ql/test/query-tests/Security Features/CWE-090/StoredLDAPInjection.cs delete mode 100644 csharp/ql/test/query-tests/Security Features/CWE-090/StoredLDAPInjection.expected delete mode 100644 csharp/ql/test/query-tests/Security Features/CWE-090/StoredLDAPInjection.qlref delete mode 100644 csharp/ql/test/query-tests/Security Features/CWE-643/StoredXPathInjection.cs delete mode 100644 csharp/ql/test/query-tests/Security Features/CWE-643/StoredXPathInjection.expected delete mode 100644 csharp/ql/test/query-tests/Security Features/CWE-643/StoredXPathInjection.qlref create mode 100644 csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.ext.yml 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..1e8317bac24 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,4 +1,5 @@ edges +<<<<<<< HEAD | 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 | | @@ -42,18 +43,63 @@ nodes | 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: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:28:27:28:47 | ... + ... | provenance | | +| CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:28:50:28:66 | ... + ... | provenance | | +| CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:30:63:30:71 | access to local variable userInput | provenance | | +| CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:30:63:30:71 | access to local variable userInput : String | provenance | | +| CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:30:74:30:82 | access to local variable userInput | provenance | | +| CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:30:74:30:82 | access to local variable userInput : String | provenance | | +| CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:34:39:34:47 | access to local variable userInput | provenance | | +| CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:34:39:34:47 | access to local variable userInput : String | provenance | | +| CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:35:40:35:48 | access to local variable userInput | provenance | | +| CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:35:40:35:48 | access to local variable userInput : String | provenance | | +| CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:36:47:36:55 | access to local variable userInput | provenance | | +| CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:36:47:36:55 | access to local variable userInput : String | provenance | | +| CommandInjection.cs:30:42:30:83 | object creation of type ProcessStartInfo : ProcessStartInfo | CommandInjection.cs:31:27:31:35 | access to local variable startInfo | 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: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: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 | +>>>>>>> 4fc83a3267 (Modify test cases) | 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.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-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..87b4ba8da1e 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,4 +1,5 @@ edges +<<<<<<< HEAD | 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 | | @@ -18,11 +19,39 @@ nodes | 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:27:12:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:12:27:12:61 | access to indexer : String | provenance | | +| LDAPInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:15:54:15:78 | ... + ... | provenance | | +| LDAPInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:17:21:17:45 | ... + ... | provenance | | +| LDAPInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:24:21:24:45 | ... + ... | provenance | | +| LDAPInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:25:53:25:77 | ... + ... | provenance | | +| LDAPInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:28:48:28:70 | ... + ... | provenance | | +| LDAPInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:30:20:30:42 | ... + ... | provenance | | +| LDAPInjection.cs:12:27:12:61 | access to indexer : String | LDAPInjection.cs:15:54:15:78 | ... + ... | provenance | | +| LDAPInjection.cs:12:27:12:61 | access to indexer : String | LDAPInjection.cs:17:21:17:45 | ... + ... | provenance | | +| LDAPInjection.cs:12:27:12:61 | access to indexer : String | LDAPInjection.cs:24:21:24:45 | ... + ... | provenance | | +| LDAPInjection.cs:12:27:12:61 | access to indexer : String | LDAPInjection.cs:25:53:25:77 | ... + ... | provenance | | +| LDAPInjection.cs:12:27:12:61 | access to indexer : String | LDAPInjection.cs:28:48:28:70 | ... + ... | provenance | | +| LDAPInjection.cs:12:27:12:61 | access to indexer : String | LDAPInjection.cs:30:20:30:42 | ... + ... | provenance | | +| LDAPInjection.cs:41:80:41:106 | call to method GetString : String | LDAPInjection.cs:41:63:41:106 | ... + ... | provenance | | +nodes +| 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 | +>>>>>>> 4fc83a3267 (Modify test cases) 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-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..9229f3a6286 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,4 +1,5 @@ edges +<<<<<<< HEAD | 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 | | @@ -29,19 +30,75 @@ nodes | 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: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:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:17:33:17:33 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:20:29:20:29 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:29:20:29:20 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:35:30:35:30 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:41:21:41:21 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:47:22:47:22 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:53:21:53:21 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:17:33:17:33 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:20:29:20:29 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:29:20:29:20 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:35:30:35:30 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:41:21:41:21 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:47:22:47:22 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:53:21:53:21 | access to local variable s | 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:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:17:33:17:33 | access to local variable s | provenance | | +| XPathInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:20:29:20:29 | access to local variable s | provenance | | +| XPathInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:29:20:29:20 | access to local variable s | provenance | | +| XPathInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:35:30:35:30 | access to local variable s | provenance | | +| XPathInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:41:21:41:21 | access to local variable s | provenance | | +| XPathInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:47:22:47:22 | access to local variable s | provenance | | +| XPathInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:53:21:53:21 | access to local variable s | provenance | | +| XPathInjection.cs:12:27:12:61 | access to indexer : String | XPathInjection.cs:17:33:17:33 | access to local variable s | provenance | | +| XPathInjection.cs:12:27:12:61 | access to indexer : String | XPathInjection.cs:20:29:20:29 | access to local variable s | provenance | | +| XPathInjection.cs:12:27:12:61 | access to indexer : String | XPathInjection.cs:29:20:29:20 | access to local variable s | provenance | | +| XPathInjection.cs:12:27:12:61 | access to indexer : String | XPathInjection.cs:35:30:35:30 | access to local variable s | provenance | | +| XPathInjection.cs:12:27:12:61 | access to indexer : String | XPathInjection.cs:41:21:41:21 | access to local variable s | provenance | | +| XPathInjection.cs:12:27:12:61 | access to indexer : String | XPathInjection.cs:47:22:47:22 | access to local variable s | provenance | | +| XPathInjection.cs:12:27:12:61 | access to indexer : String | XPathInjection.cs:53:21:53:21 | access to local variable s | provenance | | +| XPathInjection.cs:78:35:78:61 | call to method GetString : String | XPathInjection.cs:81:41:81:144 | ... + ... | provenance | | +| XPathInjection.cs:78:35:78:61 | call to method GetString : String | XPathInjection.cs:84:37:84:140 | ... + ... | provenance | | +| XPathInjection.cs:79:35:79:61 | call to method GetString : String | XPathInjection.cs:81:41:81:144 | ... + ... | provenance | | +| XPathInjection.cs:79:35:79:61 | call to method GetString : String | XPathInjection.cs:84:37:84:140 | ... + ... | provenance | | +nodes +| 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: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: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:35:78:61 | call to method GetString : String | semmle.label | call to method GetString : 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 | ... + ... | +>>>>>>> 4fc83a3267 (Modify test cases) 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 From 1ba3efb111040c0837289bd4fc963a5b1f68a019 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Tue, 20 Feb 2024 21:51:44 -0500 Subject: [PATCH 124/430] Change note updates --- .../src/change-notes/2024-03-11-remove-stored-query-variants.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index f62d293dc04..6b580be7e65 100644 --- 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 @@ -1,5 +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`) have been removed. If you were using these queries, their results can be restored by enabling the `local` threat model in your threat model settings. +* The `Stored` variants of some queries (`cs/stored-command-line-injection`, `cs/web/stored-xss`, `cs/stored-ldap-injection`, `cs/xml/stored-xpath-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. From 4dc605354cb59a4ab8e9b1de331d6a3e6590a3d3 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Tue, 20 Feb 2024 22:19:38 -0500 Subject: [PATCH 125/430] Second-order SQL injection --- .../CWE-089/SecondOrderSqlInjection.qhelp | 6 -- .../CWE-089/SecondOrderSqlInjection.ql | 32 ----------- ...2024-03-11-remove-stored-query-variants.md | 2 +- .../CWE-089/SecondOrderSqlInjection.expected | 56 ------------------- .../CWE-089/SecondOrderSqlInjection.qlref | 1 - .../CWE-089/SqlInjection.ext.yml | 7 +++ 6 files changed, 8 insertions(+), 96 deletions(-) delete mode 100644 csharp/ql/src/Security Features/CWE-089/SecondOrderSqlInjection.qhelp delete mode 100644 csharp/ql/src/Security Features/CWE-089/SecondOrderSqlInjection.ql delete mode 100644 csharp/ql/test/query-tests/Security Features/CWE-089/SecondOrderSqlInjection.expected delete mode 100644 csharp/ql/test/query-tests/Security Features/CWE-089/SecondOrderSqlInjection.qlref create mode 100644 csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.ext.yml 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/change-notes/2024-03-11-remove-stored-query-variants.md b/csharp/ql/src/change-notes/2024-03-11-remove-stored-query-variants.md index 6b580be7e65..f86836b1219 100644 --- 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 @@ -1,5 +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`) 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. +* 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/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.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 From 45e1be875c187cdd72a4a9a9050b1708a8e2e467 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 21 Feb 2024 13:19:43 -0500 Subject: [PATCH 126/430] Fix test expectations --- .../CWE-079/StoredXSS/StoredXSS.expected | 2 +- .../CWE-089/SqlInjection.expected | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) 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-089/SqlInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected index 4b4da20c97a..abc86ce1fc1 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,5 +1,16 @@ edges +<<<<<<< HEAD | SqlInjection.cs:32:21:32:26 | access to local variable query1 : String | SqlInjection.cs:34:50:34:55 | access to local variable query1 | provenance | | +======= +| SecondOrderSqlInjection.cs:25:119:25:145 | call to method GetString : String | SecondOrderSqlInjection.cs:25:71:25:145 | ... + ... | provenance | | +| SecondOrderSqlInjection.cs:33:36:33:78 | object creation of type FileStream : FileStream | SecondOrderSqlInjection.cs:35:59:35:60 | access to local variable fs : FileStream | provenance | | +| SecondOrderSqlInjection.cs:35:42:35:76 | object creation of type StreamReader : StreamReader | SecondOrderSqlInjection.cs:38:35:38:36 | 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: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:40:31:40:33 | access to local variable sql : String | 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:45:57:45:59 | access to local variable sql | provenance | | +>>>>>>> 1ebb89f785 (Fix test expectations) | 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 | | | SqlInjection.cs:67:25:67:30 | access to local variable query1 : String | SqlInjection.cs:69:56:69:61 | access to local variable query1 | provenance | | @@ -50,7 +61,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 +<<<<<<< HEAD | SqlInjection.cs:32:21:32:26 | access to local variable query1 : String | semmle.label | access to local variable query1 : String | +======= +| 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:36:33:78 | object creation of type FileStream : FileStream | semmle.label | object creation of type FileStream : FileStream | +| 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: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: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 | +>>>>>>> 1ebb89f785 (Fix test expectations) | 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 | | SqlInjection.cs:34:50:34:55 | access to local variable query1 | semmle.label | access to local variable query1 | @@ -118,6 +142,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 +162,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 | From 59b14f6a69ead708bc20e06200f939f2a0217ab5 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 26 Feb 2024 13:14:32 -0500 Subject: [PATCH 127/430] Fix test expectations (merge conflict) --- .../CWE-078/CommandInjection.expected | 76 ++++------------ .../CWE-089/SqlInjection.expected | 26 +++--- .../CWE-090/LDAPInjection.expected | 43 ++------- .../CWE-643/XPathInjection.expected | 89 +++++-------------- 4 files changed, 64 insertions(+), 170 deletions(-) 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 1e8317bac24..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,63 +1,20 @@ edges -<<<<<<< HEAD -| 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 | | -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 | 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:28:27:28:47 | ... + ... | provenance | | -| CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:28:50:28:66 | ... + ... | provenance | | -| CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:30:63:30:71 | access to local variable userInput | provenance | | -| CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:30:63:30:71 | access to local variable userInput : String | provenance | | -| CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:30:74:30:82 | access to local variable userInput | provenance | | -| CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:30:74:30:82 | access to local variable userInput : String | provenance | | -| CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:34:39:34:47 | access to local variable userInput | provenance | | -| CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:34:39:34:47 | access to local variable userInput : String | provenance | | -| CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:35:40:35:48 | access to local variable userInput | provenance | | -| CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:35:40:35:48 | access to local variable userInput : String | provenance | | -| CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:36:47:36:55 | access to local variable userInput | provenance | | -| CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:36:47:36:55 | access to local variable userInput : String | provenance | | -| CommandInjection.cs:30:42:30:83 | object creation of type ProcessStartInfo : ProcessStartInfo | CommandInjection.cs:31:27:31:35 | access to local variable startInfo | 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 | | @@ -68,17 +25,18 @@ nodes | 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: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 | ->>>>>>> 4fc83a3267 (Modify test cases) | 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: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 | 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 abc86ce1fc1..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,16 +1,17 @@ edges -<<<<<<< HEAD -| SqlInjection.cs:32:21:32:26 | access to local variable query1 : String | SqlInjection.cs:34:50:34:55 | access to local variable query1 | provenance | | -======= | SecondOrderSqlInjection.cs:25:119:25:145 | call to method GetString : String | SecondOrderSqlInjection.cs:25:71:25:145 | ... + ... | provenance | | -| SecondOrderSqlInjection.cs:33:36:33:78 | object creation of type FileStream : FileStream | SecondOrderSqlInjection.cs:35:59:35:60 | access to local variable fs : FileStream | provenance | | -| SecondOrderSqlInjection.cs:35:42:35:76 | object creation of type StreamReader : StreamReader | SecondOrderSqlInjection.cs:38:35:38:36 | access to local variable sr : StreamReader | 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:40:31:40:33 | access to local variable sql : 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:45:57:45:59 | access to local variable sql | provenance | | ->>>>>>> 1ebb89f785 (Fix test expectations) +| 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 | | | SqlInjection.cs:67:25:67:30 | access to local variable query1 : String | SqlInjection.cs:69:56:69:61 | access to local variable query1 | provenance | | @@ -61,20 +62,21 @@ 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 -<<<<<<< HEAD -| SqlInjection.cs:32:21:32:26 | access to local variable query1 : String | semmle.label | access to local variable query1 : String | -======= | 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 | ->>>>>>> 1ebb89f785 (Fix test expectations) +| 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 | | SqlInjection.cs:34:50:34:55 | access to local variable query1 | semmle.label | access to local variable query1 | 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 87b4ba8da1e..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,40 +1,16 @@ edges -<<<<<<< HEAD -| 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 | | -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 | 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:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:15:54:15:78 | ... + ... | provenance | | -| LDAPInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:17:21:17:45 | ... + ... | provenance | | -| LDAPInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:24:21:24:45 | ... + ... | provenance | | -| LDAPInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:25:53:25:77 | ... + ... | provenance | | -| LDAPInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:28:48:28:70 | ... + ... | provenance | | -| LDAPInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:30:20:30:42 | ... + ... | provenance | | -| LDAPInjection.cs:12:27:12:61 | access to indexer : String | LDAPInjection.cs:15:54:15:78 | ... + ... | provenance | | -| LDAPInjection.cs:12:27:12:61 | access to indexer : String | LDAPInjection.cs:17:21:17:45 | ... + ... | provenance | | -| LDAPInjection.cs:12:27:12:61 | access to indexer : String | LDAPInjection.cs:24:21:24:45 | ... + ... | provenance | | -| LDAPInjection.cs:12:27:12:61 | access to indexer : String | LDAPInjection.cs:25:53:25:77 | ... + ... | provenance | | -| LDAPInjection.cs:12:27:12:61 | access to indexer : String | LDAPInjection.cs:28:48:28:70 | ... + ... | provenance | | -| LDAPInjection.cs:12:27:12:61 | access to indexer : String | LDAPInjection.cs:30:20:30:42 | ... + ... | 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: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 | ... + ... | @@ -45,7 +21,6 @@ nodes | 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 | ->>>>>>> 4fc83a3267 (Modify test cases) subpaths #select | 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 | 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 9229f3a6286..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,75 +1,33 @@ edges -<<<<<<< HEAD -| 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 | | -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: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: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:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:17:33:17:33 | access to local variable s | provenance | | -| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:20:29:20:29 | access to local variable s | provenance | | -| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:29:20:29:20 | access to local variable s | provenance | | -| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:35:30:35:30 | access to local variable s | provenance | | -| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:41:21:41:21 | access to local variable s | provenance | | -| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:47:22:47:22 | access to local variable s | provenance | | -| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:53:21:53:21 | access to local variable s | provenance | | -| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:17:33:17:33 | access to local variable s | provenance | | -| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:20:29:20:29 | access to local variable s | provenance | | -| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:29:20:29:20 | access to local variable s | provenance | | -| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:35:30:35:30 | access to local variable s | provenance | | -| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:41:21:41:21 | access to local variable s | provenance | | -| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:47:22:47:22 | access to local variable s | provenance | | -| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:53:21:53: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:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:17:33:17:33 | access to local variable s | provenance | | -| XPathInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:20:29:20:29 | access to local variable s | provenance | | -| XPathInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:29:20:29:20 | access to local variable s | provenance | | -| XPathInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:35:30:35:30 | access to local variable s | provenance | | -| XPathInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:41:21:41:21 | access to local variable s | provenance | | -| XPathInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:47:22:47:22 | access to local variable s | provenance | | -| XPathInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:53:21:53:21 | access to local variable s | provenance | | -| XPathInjection.cs:12:27:12:61 | access to indexer : String | XPathInjection.cs:17:33:17:33 | access to local variable s | provenance | | -| XPathInjection.cs:12:27:12:61 | access to indexer : String | XPathInjection.cs:20:29:20:29 | access to local variable s | provenance | | -| XPathInjection.cs:12:27:12:61 | access to indexer : String | XPathInjection.cs:29:20:29:20 | access to local variable s | provenance | | -| XPathInjection.cs:12:27:12:61 | access to indexer : String | XPathInjection.cs:35:30:35:30 | access to local variable s | provenance | | -| XPathInjection.cs:12:27:12:61 | access to indexer : String | XPathInjection.cs:41:21:41:21 | access to local variable s | provenance | | -| XPathInjection.cs:12:27:12:61 | access to indexer : String | XPathInjection.cs:47:22:47:22 | access to local variable s | provenance | | -| XPathInjection.cs:12:27:12:61 | access to indexer : String | XPathInjection.cs:53:21:53:21 | access to local variable s | provenance | | -| XPathInjection.cs:78:35:78:61 | call to method GetString : String | XPathInjection.cs:81:41:81:144 | ... + ... | provenance | | -| XPathInjection.cs:78:35:78:61 | call to method GetString : String | XPathInjection.cs:84:37:84:140 | ... + ... | provenance | | -| XPathInjection.cs:79:35:79:61 | call to method GetString : String | XPathInjection.cs:81:41:81:144 | ... + ... | provenance | | -| XPathInjection.cs:79:35:79:61 | call to method GetString : String | XPathInjection.cs:84:37:84:140 | ... + ... | 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: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: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 | @@ -77,11 +35,12 @@ nodes | 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 | ... + ... | ->>>>>>> 4fc83a3267 (Modify test cases) subpaths #select | 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 | From f5d014baa5666f58ea80538b9ae364626892091d Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 1 Mar 2024 21:36:29 +0100 Subject: [PATCH 128/430] JS: Remove allocation site restriction in CG --- .../javascript/dataflow/internal/CallGraphs.qll | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll index d5a5b29d1dc..8ee507f0f98 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll @@ -241,13 +241,8 @@ module CallGraph { ) } - private DataFlow::FunctionNode getAMethodOnPlainObject(DataFlow::SourceNode node) { + private DataFlow::FunctionNode getAMethodOnObject(DataFlow::SourceNode node) { ( - ( - node instanceof DataFlow::ObjectLiteralNode - or - node instanceof DataFlow::FunctionNode - ) and result = node.getAPropertySource() or result = node.(DataFlow::ObjectLiteralNode).getPropertyGetter(_) @@ -258,7 +253,7 @@ module CallGraph { } private predicate shouldTrackObjectWithMethods(DataFlow::SourceNode node) { - exists(getAMethodOnPlainObject(node)) + exists(getAMethodOnObject(node)) } /** @@ -292,7 +287,7 @@ module CallGraph { predicate impliedReceiverStep(DataFlow::SourceNode pred, DataFlow::SourceNode succ) { exists(DataFlow::SourceNode host | pred = getAnAllocationSiteRef(host) and - succ = getAMethodOnPlainObject(host).getReceiver() + succ = getAMethodOnObject(host).getReceiver() ) } } From 7072ab936421beda2d2ac94ea72cc46457d3a65f Mon Sep 17 00:00:00 2001 From: Malayke Date: Sun, 3 Mar 2024 18:09:33 +0800 Subject: [PATCH 129/430] Update go/ql/src/experimental/CWE-770/DenialOfServiceGood.go Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> --- go/ql/src/experimental/CWE-770/DenialOfServiceGood.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/go/ql/src/experimental/CWE-770/DenialOfServiceGood.go b/go/ql/src/experimental/CWE-770/DenialOfServiceGood.go index 2b833b3b6d9..761501064f6 100644 --- a/go/ql/src/experimental/CWE-770/DenialOfServiceGood.go +++ b/go/ql/src/experimental/CWE-770/DenialOfServiceGood.go @@ -12,11 +12,11 @@ func OutOfMemoryGood(w http.ResponseWriter, r *http.Request) { MaxValue := 6 queryStr := query.Get("n") collectionSize, err := strconv.Atoi(queryStr) - if err != nil || collectionSize < 0 { - http.Error(w, "Bad request", http.StatusBadRequest) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) return } - if collectionSize > MaxValue { + if collectionSize < 0 || collectionSize > MaxValue { http.Error(w, "Bad request", http.StatusBadRequest) return } From 72e6853792c034fac91f1e0859a9f1e76031604d Mon Sep 17 00:00:00 2001 From: Merdan Aziz Date: Sun, 3 Mar 2024 20:36:43 +0800 Subject: [PATCH 130/430] address the review comments --- .../experimental/CWE-770/DenialOfService.ql | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/go/ql/src/experimental/CWE-770/DenialOfService.ql b/go/ql/src/experimental/CWE-770/DenialOfService.ql index 95e4cb62bd7..44cf9a2658b 100644 --- a/go/ql/src/experimental/CWE-770/DenialOfService.ql +++ b/go/ql/src/experimental/CWE-770/DenialOfService.ql @@ -13,26 +13,21 @@ import go -class BuiltInMake extends DataFlow::Node { - BuiltInMake() { this = Builtin::make().getACall().getArgument(0) } -} /** - * Holds if `g` is a barrier-guard which checks `e` is nonzero on `branch`. + * Class for defining a predicate to check for denial of service sanitizer guard. */ predicate denialOfServiceSanitizerGuard(DataFlow::Node g, Expr e, boolean branch) { exists(DataFlow::Node lesser | e = lesser.asExpr() and - g.(DataFlow::RelationalComparisonNode).leq(branch, lesser, _, _) - ) - or - exists(LogicalBinaryExpr lbe, DataFlow::Node lesser | - lbe.getAnOperand() = g.(DataFlow::RelationalComparisonNode).asExpr() and - e = lesser.asExpr() and - g.(DataFlow::RelationalComparisonNode).leq(branch, lesser, _, _) + g.(DataFlow::RelationalComparisonNode).leq(branch, lesser, _, _) and + not e.isConst() ) } +/* + * Module for defining predicates and tracking taint flow related to denial of service issues. + */ module Config implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof UntrustedFlowSource } @@ -48,7 +43,7 @@ module Config implements DataFlow::ConfigSig { node = DataFlow::BarrierGuard::getABarrierNode() } - predicate isSink(DataFlow::Node sink) { sink instanceof BuiltInMake } + predicate isSink(DataFlow::Node sink) { sink = Builtin::make().getACall().getArgument(0) } } /** From 4ab7acedb69aba3202117a135d570c585a544d00 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 4 Mar 2024 10:32:27 +0100 Subject: [PATCH 131/430] JS: Do not track instance methods --- .../semmle/javascript/dataflow/internal/CallGraphs.qll | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll index 8ee507f0f98..682c9a2dffa 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll @@ -249,7 +249,13 @@ module CallGraph { or result = node.(DataFlow::ObjectLiteralNode).getPropertySetter(_) ) and - not node.getTopLevel().isExterns() + not node.getTopLevel().isExterns() and + // Do not track instance methods on classes + not exists(DataFlow::ClassNode cls | + node = cls.getConstructor().getReceiver() + or + node = cls.(DataFlow::ClassNode::FunctionStyleClass).getAPrototypeReference() + ) } private predicate shouldTrackObjectWithMethods(DataFlow::SourceNode node) { From 31687afd5d7102006d9dd0d80edc19ed0752c18a Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Mon, 4 Mar 2024 09:47:12 +0000 Subject: [PATCH 132/430] Fix performance --- .../ql/lib/codeql/ruby/frameworks/http_clients/Typhoeus.qll | 6 ++++++ 1 file changed, 6 insertions(+) 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 3624cb0e8e0..5ab59029558 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/http_clients/Typhoeus.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/http_clients/Typhoeus.qll @@ -70,6 +70,8 @@ private module TyphoeusDisablesCertificateValidationFlow = DataFlow::Global; /** Gets the body from the given `requestNode` representing a Typhoeus request */ +bindingset[requestNode] +pragma[inline_late] private DataFlow::Node getBodyFromRequest(API::Node requestNode) { result = [ @@ -79,6 +81,8 @@ private DataFlow::Node getBodyFromRequest(API::Node requestNode) { } /** Gets the response from the given `requestNode` representing a Typhoeus request */ +bindingset[requestNode] +pragma[inline_late] private API::Node getResponseFromRequest(API::Node requestNode) { result = [ @@ -92,6 +96,8 @@ private API::Node getResponseFromRequest(API::Node requestNode) { } /** Gets the 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"]) } From 5def2887e78bda6afd396b1eecc675d9b9075305 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 4 Mar 2024 11:59:52 +0000 Subject: [PATCH 133/430] Shared: Add an example for SemBound.getExpr. --- shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll index 0337f7683d6..103a49ebdbf 100644 --- a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll +++ b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll @@ -393,7 +393,9 @@ signature module BoundSig { Location getLocation(); /** - * Gets an expression that equals this bound plus `delta`. + * Gets an expression that equals this bound plus `delta`. For example given + * the expression `x = foo() + 1` the variable `x` has a bound with + * expression `call to foo()` and delta `-1`. * * For the zero-bound this gets integer constants equal to `delta`, and for * other bounds this gets expressions equal to the bound while `delta = 0`. From 50ad45944ccbd7cc62ed8e58f081540005bb9724 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 4 Mar 2024 12:02:01 +0000 Subject: [PATCH 134/430] Update shared/dataflow/codeql/dataflow/DataFlow.qll Co-authored-by: Anders Schack-Mulligen --- shared/dataflow/codeql/dataflow/DataFlow.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/dataflow/codeql/dataflow/DataFlow.qll b/shared/dataflow/codeql/dataflow/DataFlow.qll index 7008f09e7e7..09e2d354e48 100644 --- a/shared/dataflow/codeql/dataflow/DataFlow.qll +++ b/shared/dataflow/codeql/dataflow/DataFlow.qll @@ -178,7 +178,7 @@ signature module InputSig { } /** - * A content approximation. A content approximation corresponds with one or + * 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. */ From 910725939fd760cfa24ab5da73dcac4c192ea377 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> Date: Mon, 4 Mar 2024 13:06:23 +0000 Subject: [PATCH 135/430] Update QLDoc --- go/ql/src/experimental/CWE-770/DenialOfService.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/src/experimental/CWE-770/DenialOfService.ql b/go/ql/src/experimental/CWE-770/DenialOfService.ql index 44cf9a2658b..520b2434c5a 100644 --- a/go/ql/src/experimental/CWE-770/DenialOfService.ql +++ b/go/ql/src/experimental/CWE-770/DenialOfService.ql @@ -15,7 +15,7 @@ import go /** - * Class for defining a predicate to check for denial of service sanitizer guard. + * Holds if the guard `g` on its branch `branch` checks that `e` is not constant and is less than some other value. */ predicate denialOfServiceSanitizerGuard(DataFlow::Node g, Expr e, boolean branch) { exists(DataFlow::Node lesser | From fc12537699a8f48fc9385e01b7bd4e4a539bb819 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 4 Mar 2024 14:29:56 +0100 Subject: [PATCH 136/430] Go: Add Macaron sources --- .../2024-03-04-macaron-sources.md | 4 + go/ql/lib/ext/gopkg.in.macaron.model.yml | 16 +++ .../go/frameworks/Macaron/Sources.expected | 12 ++ .../semmle/go/frameworks/Macaron/Sources.ql | 3 + .../semmle/go/frameworks/Macaron/sources.go | 22 ++++ .../vendor/gopkg.in/macaron.v1/stub.go | 118 ++++++------------ 6 files changed, 92 insertions(+), 83 deletions(-) create mode 100644 go/ql/lib/change-notes/2024-03-04-macaron-sources.md create mode 100644 go/ql/test/library-tests/semmle/go/frameworks/Macaron/Sources.expected create mode 100644 go/ql/test/library-tests/semmle/go/frameworks/Macaron/Sources.ql create mode 100644 go/ql/test/library-tests/semmle/go/frameworks/Macaron/sources.go 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/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..3c5d536c734 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/frameworks/Macaron/Sources.expected @@ -0,0 +1,12 @@ +| sources.go:10:6:10:20 | call to AllParams | +| sources.go:11:6:11:22 | call to GetCookie | +| sources.go:12:2:12:31 | ... = ...[0] | +| sources.go:13:2:13:40 | ... = ...[0] | +| sources.go:14:2:14:26 | ... = ...[0] | +| sources.go:15:6:15:19 | call to Params | +| sources.go:16:6:16:25 | call to ParamsEscape | +| sources.go:17:6:17:18 | call to Query | +| sources.go:18:6:18:24 | call to QueryEscape | +| sources.go:19:6:19:25 | call to QueryStrings | +| sources.go:20:2:20:20 | ... = ...[0] | +| sources.go:21:2:21:21 | ... = ...[0] | 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..0715d64f8e2 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/frameworks/Macaron/Sources.ql @@ -0,0 +1,3 @@ +import go + +select any(UntrustedFlowSource ufs) 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..c0b3f87ba4b --- /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() + _ = ctx.GetCookie("") + _, _ = ctx.GetSecureCookie("") + _, _ = ctx.GetSuperSecureCookie("", "") + _, _, _ = ctx.GetFile("") + _ = ctx.Params("") + _ = ctx.ParamsEscape("") + _ = ctx.Query("") + _ = ctx.QueryEscape("") + _ = ctx.QueryStrings("") + _, _ = body.Bytes() + _, _ = body.String() +} 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 } From 0bf0c069c68e9999179492add8f93f040ac01eae Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> Date: Mon, 4 Mar 2024 13:39:44 +0000 Subject: [PATCH 137/430] Fix formatting --- go/ql/src/experimental/CWE-770/DenialOfService.ql | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/go/ql/src/experimental/CWE-770/DenialOfService.ql b/go/ql/src/experimental/CWE-770/DenialOfService.ql index 520b2434c5a..f1c2fcea0ac 100644 --- a/go/ql/src/experimental/CWE-770/DenialOfService.ql +++ b/go/ql/src/experimental/CWE-770/DenialOfService.ql @@ -13,7 +13,6 @@ import go - /** * Holds if the guard `g` on its branch `branch` checks that `e` is not constant and is less than some other value. */ @@ -25,7 +24,7 @@ predicate denialOfServiceSanitizerGuard(DataFlow::Node g, Expr e, boolean branch ) } -/* +/** * Module for defining predicates and tracking taint flow related to denial of service issues. */ module Config implements DataFlow::ConfigSig { From 357638baa8e0828f5a805be72f7ce47276f3e085 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 4 Mar 2024 14:38:04 +0100 Subject: [PATCH 138/430] C#: Update variable capture test --- .../library-tests/dataflow/global/Capture.cs | 4 +- .../dataflow/global/DataFlow.expected | 2 +- .../dataflow/global/DataFlowPath.expected | 88 ++++++++++--------- .../dataflow/global/TaintTracking.expected | 2 +- .../global/TaintTrackingPath.expected | 88 ++++++++++--------- 5 files changed, 101 insertions(+), 83 deletions(-) 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..c994ff441b4 100644 --- a/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected +++ b/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected @@ -24,8 +24,8 @@ edges | 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 [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,7 +35,7 @@ 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 | | @@ -85,7 +85,7 @@ edges | 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 | | @@ -111,7 +111,7 @@ 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: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:280:25:288:9 | (...) => ... : (...) => ... [captured 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 | | @@ -144,25 +144,30 @@ edges | 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:328:17:328:30 | "taint source" : String | Capture.cs:332:9:332:65 | CapturingLocalFunction(...) : CapturingLocalFunction [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: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:332:9:332:65 | CapturingLocalFunction(...) : CapturingLocalFunction [captured x] : 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: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: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:343:34:343:55 | (...) => ... : (...) => ... [captured capturedLambda, 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:16:343:30 | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | Capture.cs:345:9:345:23 | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | provenance | | +| Capture.cs:343:34:343:55 | (...) => ... : (...) => ... [captured capturedLambda, captured x] : String | Capture.cs:343:16:343:30 | access to local variable capturingLambda : (...) => ... [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 : (...) => ... [captured capturedLambda, captured x] : String | Capture.cs:343:40:343:53 | access to local variable capturedLambda : (...) => ... [captured x] : String | 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 | | @@ -660,24 +665,27 @@ nodes | 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:9:332:65 | CapturingLocalFunction(...) : CapturingLocalFunction [captured x] : String | semmle.label | CapturingLocalFunction(...) : CapturingLocalFunction [captured x] : String | | 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: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: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:16:343: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:343:34:343:55 | (...) => ... : (...) => ... [captured capturedLambda, captured x] : String | semmle.label | (...) => ... : (...) => ... [captured capturedLambda, captured x] : String | +| 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 : (...) => ... [captured capturedLambda, captured x] : String | semmle.label | access to local variable capturingLambda : (...) => ... [captured 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 | @@ -1081,7 +1089,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..2bd30574649 100644 --- a/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected +++ b/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected @@ -24,8 +24,8 @@ edges | 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 [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,7 +35,7 @@ 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 | | @@ -85,7 +85,7 @@ edges | 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 | | @@ -111,7 +111,7 @@ 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: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:280:25:288:9 | (...) => ... : (...) => ... [captured 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 | | @@ -144,25 +144,30 @@ edges | 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:328:17:328:30 | "taint source" : String | Capture.cs:332:9:332:65 | CapturingLocalFunction(...) : CapturingLocalFunction [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: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:332:9:332:65 | CapturingLocalFunction(...) : CapturingLocalFunction [captured x] : 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: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: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:343:34:343:55 | (...) => ... : (...) => ... [captured capturedLambda, 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:16:343:30 | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | Capture.cs:345:9:345:23 | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | provenance | | +| Capture.cs:343:34:343:55 | (...) => ... : (...) => ... [captured capturedLambda, captured x] : String | Capture.cs:343:16:343:30 | access to local variable capturingLambda : (...) => ... [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 : (...) => ... [captured capturedLambda, captured x] : String | Capture.cs:343:40:343:53 | access to local variable capturedLambda : (...) => ... [captured x] : String | 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 | | @@ -710,24 +715,27 @@ nodes | 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:9:332:65 | CapturingLocalFunction(...) : CapturingLocalFunction [captured x] : String | semmle.label | CapturingLocalFunction(...) : CapturingLocalFunction [captured x] : String | | 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: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: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:16:343: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:343:34:343:55 | (...) => ... : (...) => ... [captured capturedLambda, captured x] : String | semmle.label | (...) => ... : (...) => ... [captured capturedLambda, captured x] : String | +| 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 : (...) => ... [captured capturedLambda, captured x] : String | semmle.label | access to local variable capturingLambda : (...) => ... [captured 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 | @@ -1144,7 +1152,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 | From 39a802fb98332458107c894cbc3859ed17ae5f81 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> Date: Mon, 4 Mar 2024 13:45:54 +0000 Subject: [PATCH 139/430] Add new columns to test expectations --- .../experimental/CWE-770/DenialOfService.expected | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/go/ql/test/experimental/CWE-770/DenialOfService.expected b/go/ql/test/experimental/CWE-770/DenialOfService.expected index 2e54b95447d..667bbda5c35 100644 --- a/go/ql/test/experimental/CWE-770/DenialOfService.expected +++ b/go/ql/test/experimental/CWE-770/DenialOfService.expected @@ -1,10 +1,10 @@ edges -| DenialOfServiceBad.go:11:12:11:16 | selection of URL | DenialOfServiceBad.go:11:12:11:24 | call to Query | -| DenialOfServiceBad.go:11:12:11:24 | call to Query | DenialOfServiceBad.go:13:15:13:20 | source | -| DenialOfServiceBad.go:13:15:13:20 | source | DenialOfServiceBad.go:13:15:13:29 | call to Get | -| DenialOfServiceBad.go:13:15:13:29 | call to Get | DenialOfServiceBad.go:14:28:14:36 | sourceStr | -| DenialOfServiceBad.go:14:2:14:37 | ... := ...[0] | DenialOfServiceBad.go:20:27:20:30 | sink | -| DenialOfServiceBad.go:14:28:14:36 | sourceStr | DenialOfServiceBad.go:14:2:14:37 | ... := ...[0] | +| DenialOfServiceBad.go:11:12:11:16 | selection of URL | DenialOfServiceBad.go:11:12:11:24 | call to Query | provenance | | +| DenialOfServiceBad.go:11:12:11:24 | call to Query | DenialOfServiceBad.go:13:15:13:20 | source | provenance | | +| DenialOfServiceBad.go:13:15:13:20 | source | DenialOfServiceBad.go:13:15:13:29 | call to Get | provenance | | +| DenialOfServiceBad.go:13:15:13:29 | call to Get | DenialOfServiceBad.go:14:28:14:36 | sourceStr | provenance | | +| DenialOfServiceBad.go:14:2:14:37 | ... := ...[0] | DenialOfServiceBad.go:20:27:20:30 | sink | provenance | | +| DenialOfServiceBad.go:14:28:14:36 | sourceStr | DenialOfServiceBad.go:14:2:14:37 | ... := ...[0] | provenance | nodes | DenialOfServiceBad.go:11:12:11:16 | selection of URL | semmle.label | selection of URL | | DenialOfServiceBad.go:11:12:11:24 | call to Query | semmle.label | call to Query | From c0974934bc7e834c7082da1ae9f03f5ab069d6a9 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> Date: Mon, 4 Mar 2024 14:05:04 +0000 Subject: [PATCH 140/430] Fix test expectations again --- go/ql/test/experimental/CWE-770/DenialOfService.expected | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/test/experimental/CWE-770/DenialOfService.expected b/go/ql/test/experimental/CWE-770/DenialOfService.expected index 667bbda5c35..4a2ae9d6646 100644 --- a/go/ql/test/experimental/CWE-770/DenialOfService.expected +++ b/go/ql/test/experimental/CWE-770/DenialOfService.expected @@ -4,7 +4,7 @@ edges | DenialOfServiceBad.go:13:15:13:20 | source | DenialOfServiceBad.go:13:15:13:29 | call to Get | provenance | | | DenialOfServiceBad.go:13:15:13:29 | call to Get | DenialOfServiceBad.go:14:28:14:36 | sourceStr | provenance | | | DenialOfServiceBad.go:14:2:14:37 | ... := ...[0] | DenialOfServiceBad.go:20:27:20:30 | sink | provenance | | -| DenialOfServiceBad.go:14:28:14:36 | sourceStr | DenialOfServiceBad.go:14:2:14:37 | ... := ...[0] | provenance | +| DenialOfServiceBad.go:14:28:14:36 | sourceStr | DenialOfServiceBad.go:14:2:14:37 | ... := ...[0] | provenance | | nodes | DenialOfServiceBad.go:11:12:11:16 | selection of URL | semmle.label | selection of URL | | DenialOfServiceBad.go:11:12:11:24 | call to Query | semmle.label | call to Query | From 97275157e6d8bb2f01a18dbccdb590c975d637b5 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 4 Mar 2024 15:21:05 +0000 Subject: [PATCH 141/430] Kotlin: Docs: Give upper bound as 1.9.2x rather than 1.9.20 I think that this will be clearer. --- docs/codeql/reusables/supported-versions-compilers.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/reusables/supported-versions-compilers.rst b/docs/codeql/reusables/supported-versions-compilers.rst index dac69ae13b7..81dcc0370d8 100644 --- a/docs/codeql/reusables/supported-versions-compilers.rst +++ b/docs/codeql/reusables/supported-versions-compilers.rst @@ -20,7 +20,7 @@ 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``" From 7286f567182603e020384f3b7d68e24d5e241a49 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 4 Mar 2024 17:29:12 +0100 Subject: [PATCH 142/430] Change tests to inline expectations --- .../go/frameworks/Macaron/Sources.expected | 14 ++--------- .../semmle/go/frameworks/Macaron/Sources.ql | 17 ++++++++++++- .../semmle/go/frameworks/Macaron/sources.go | 24 +++++++++---------- 3 files changed, 30 insertions(+), 25 deletions(-) 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 index 3c5d536c734..8ec8033d086 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Macaron/Sources.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Macaron/Sources.expected @@ -1,12 +1,2 @@ -| sources.go:10:6:10:20 | call to AllParams | -| sources.go:11:6:11:22 | call to GetCookie | -| sources.go:12:2:12:31 | ... = ...[0] | -| sources.go:13:2:13:40 | ... = ...[0] | -| sources.go:14:2:14:26 | ... = ...[0] | -| sources.go:15:6:15:19 | call to Params | -| sources.go:16:6:16:25 | call to ParamsEscape | -| sources.go:17:6:17:18 | call to Query | -| sources.go:18:6:18:24 | call to QueryEscape | -| sources.go:19:6:19:25 | call to QueryStrings | -| sources.go:20:2:20:20 | ... = ...[0] | -| sources.go:21:2:21:21 | ... = ...[0] | +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 index 0715d64f8e2..710ac89a1de 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Macaron/Sources.ql +++ b/go/ql/test/library-tests/semmle/go/frameworks/Macaron/Sources.ql @@ -1,3 +1,18 @@ import go +import TestUtilities.InlineExpectationsTest -select any(UntrustedFlowSource ufs) +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 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 index c0b3f87ba4b..569b032c05f 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Macaron/sources.go +++ b/go/ql/test/library-tests/semmle/go/frameworks/Macaron/sources.go @@ -7,16 +7,16 @@ import ( ) func sources(ctx *macaron.Context, body *macaron.RequestBody) { - _ = ctx.AllParams() - _ = ctx.GetCookie("") - _, _ = ctx.GetSecureCookie("") - _, _ = ctx.GetSuperSecureCookie("", "") - _, _, _ = ctx.GetFile("") - _ = ctx.Params("") - _ = ctx.ParamsEscape("") - _ = ctx.Query("") - _ = ctx.QueryEscape("") - _ = ctx.QueryStrings("") - _, _ = body.Bytes() - _, _ = body.String() + _ = 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 } From a92e394a7c4f9b5b9974eea5c9886493f678c5aa Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 4 Mar 2024 14:38:13 +0100 Subject: [PATCH 143/430] C#: Variable capture follow-up --- .../dataflow/internal/DataFlowPrivate.qll | 35 +++++++++++-------- 1 file changed, 21 insertions(+), 14 deletions(-) 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..c2e845965be 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -148,7 +148,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 @@ -399,7 +399,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 { @@ -881,7 +885,7 @@ module LocalFlow { exists(SsaImpl::getAReadAtNode(def, node2.(ExprNode).getControlFlowNode())) ) or - delegateCreationStep(node1, node2) + node2 = node1.(LocalFunctionCreationNode).getAnAccess(true) or node1 = unique(FlowSummaryNode n1 | @@ -2549,9 +2553,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 +2571,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), @@ -2896,7 +2896,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 +2910,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 +2933,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 From 00ab1a3129ef9e7e168671fd1323aa92f9fff4ff Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 4 Mar 2024 18:56:56 +0000 Subject: [PATCH 144/430] Kotlin 2: exprs test: Accept loc change for MyClass --- .../library-tests/exprs/exprs.expected | 128 +++++++++--------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 45d5606d1ac..546f0484718 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -327,7 +327,7 @@ | delegatedProperties.kt:63:17:63:37 | int | file://:0:0:0:0 | | 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 | | delegatedProperties.kt:65:15:65:32 | setMemberInt | VarAccess | | delegatedProperties.kt:65:15:65:32 | Unit | file://:0:0:0:0 | | TypeAccess | @@ -335,24 +335,24 @@ | delegatedProperties.kt:65:15:65:32 | int | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:65:15:65:32 | int | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:65:15:65:32 | int | file://:0:0:0:0 | | 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 | | TypeAccess | | delegatedProperties.kt:65:35:65:77 | ClassWithDelegate | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:65:35:65:77 | ClassWithDelegate | file://:0:0:0:0 | | 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:65:87:65:95 | memberInt | delegatedProperties.kt:65:14:65:78 | 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 | ...=... | delegatedProperties.kt:65:14:65:78 | 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 | @@ -374,7 +374,7 @@ | 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 | delegatedToMember1$delegate | delegatedProperties.kt:65:14:65:78 | 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 | @@ -391,14 +391,14 @@ | 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: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 | | delegatedProperties.kt:66:36:66:50 | | VarAccess | | delegatedProperties.kt:66:36:66:50 | | 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 | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | +| delegatedProperties.kt:66:36:66:50 | Integer | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | +| delegatedProperties.kt:66:36:66:50 | KMutableProperty0 | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | | delegatedProperties.kt:66:36:66:50 | MyClass | file://:0:0:0:0 | | 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 | @@ -413,7 +413,7 @@ | delegatedProperties.kt:66:36:66:50 | this. | 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 | ...=... | delegatedProperties.kt:65:14:65:78 | 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 | @@ -438,7 +438,7 @@ | 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 | delegatedToMember2$delegate | delegatedProperties.kt:65:14:65:78 | 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 | @@ -455,11 +455,11 @@ | 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 | ...::... | delegatedProperties.kt:65:14:65:78 | MyClass | PropertyRefExpr | | delegatedProperties.kt:67:36:67:53 | | 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 | 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 | Integer | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | KMutableProperty1 | 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 | @@ -470,7 +470,7 @@ | 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 | ...=... | delegatedProperties.kt:65:14:65:78 | 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 | @@ -492,7 +492,7 @@ | 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 | delegatedToExtMember1$delegate | delegatedProperties.kt:65:14:65:78 | 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 | @@ -509,16 +509,16 @@ | 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: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 | | delegatedProperties.kt:69:39:69:56 | | VarAccess | | delegatedProperties.kt:69:39:69:56 | | delegatedProperties.kt:69:36: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 | 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 | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | | delegatedProperties.kt:69:39:69:56 | MyClass | file://:0:0:0:0 | | 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 | @@ -533,7 +533,7 @@ | delegatedProperties.kt:69:39:69:56 | this. | 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 | ...=... | delegatedProperties.kt:65:14:65:78 | 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 | @@ -558,7 +558,7 @@ | 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 | delegatedToExtMember2$delegate | delegatedProperties.kt:65:14:65:78 | 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 | @@ -575,13 +575,13 @@ | 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 | ...::... | delegatedProperties.kt:65:14:65:78 | MyClass | PropertyRefExpr | | delegatedProperties.kt:70:39:70:59 | | delegatedProperties.kt:70:36: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 | 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 | 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 | | 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 | | 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 | 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 | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | | delegatedProperties.kt:72:39:72:56 | MyClass | file://:0:0:0:0 | | 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 | @@ -625,7 +625,7 @@ | delegatedProperties.kt:72:39:72:56 | this. | delegatedProperties.kt:72:39:72:56 | | VarAccess | | delegatedProperties.kt:72:39:72:56 | this. | 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 | ...=... | delegatedProperties.kt:65:14:65:78 | 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 | | TypeAccess | | delegatedProperties.kt:73:36:73:56 | Integer | delegatedProperties.kt:73:36:73:56 | getDelegatedToBaseClass2 | TypeAccess | @@ -637,7 +637,7 @@ | 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 | delegatedToBaseClass2$delegate | delegatedProperties.kt:65:14:65:78 | 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 | @@ -645,17 +645,17 @@ | 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 | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | +| 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 | 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 | | 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 | | delegatedProperties.kt:75:42:75:78 | | VarAccess | | delegatedProperties.kt:75:42:75:78 | ClassWithDelegate | file://:0:0:0:0 | | TypeAccess | -| delegatedProperties.kt:75:42:75:78 | Integer | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | -| delegatedProperties.kt:75:42:75:78 | KProperty0 | 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 | 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. | 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 | | 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 | 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 | 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 | | 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 | | 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 | 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 | 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 | From b7d2e54bbd0c42ca9947ff6a14f7d19827bfb49c Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 4 Mar 2024 18:59:30 +0000 Subject: [PATCH 145/430] Kotlin 2: exprs test: Accept loc change for ClassWithDelegate --- java/ql/test-kotlin2/library-tests/exprs/exprs.expected | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 546f0484718..cf15531f73e 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -311,9 +311,9 @@ | delegatedProperties.kt:60:1:60:24 | int | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:60:1:60:24 | int | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:60:24:60:24 | 0 | delegatedProperties.kt:0:0:0:0 | | 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 | | TypeAccess | | delegatedProperties.kt:62:25:62:48 | int | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:62:25:62:48 | int | file://:0:0:0:0 | | TypeAccess | From 22e6c676c379578dfcc5802295a0fd497fef4c1d Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 4 Mar 2024 19:02:40 +0000 Subject: [PATCH 146/430] Kotlin 2: Accept loc change for a string literal in expr test --- java/ql/test-kotlin2/library-tests/exprs/exprs.expected | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index cf15531f73e..5a7997b4581 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -51,7 +51,7 @@ | delegatedProperties.kt:6:32:9:9 | int | file://:0:0:0:0 | | 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 | From 6e09dcc16ab5083184cfc87acd04b669e8744dc6 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 4 Mar 2024 19:06:32 +0000 Subject: [PATCH 147/430] Kotlin 2: Accept more loc changes in exprs --- java/ql/test-kotlin2/library-tests/exprs/exprs.expected | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 5a7997b4581..72935759cd0 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -147,12 +147,12 @@ | 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 | | TypeAccess | +| delegatedProperties.kt:27:13:27:88 | int | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:27:35:27:47 | Object | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:27:50:27:71 | ? ... | file://:0:0:0:0 | | WildcardTypeAccess | | delegatedProperties.kt:27:50:27:71 | KProperty | file://:0:0:0:0 | | 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: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:22:30:13 | Unit | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:28:35:28:47 | Object | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:28:50:28:71 | ? ... | file://:0:0:0:0 | | WildcardTypeAccess | From 28e1e3a13a44d5c1ff7e9cce1c3ebd3e3d0cfa57 Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Mon, 4 Mar 2024 21:41:29 +0000 Subject: [PATCH 148/430] C++: remove skeleton for IR destructors on expressions --- .../implementation/raw/internal/TranslatedExpr.qll | 13 ------------- 1 file changed, 13 deletions(-) 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) } From 84f3771cdd9cdb807174498615b5c51f3be635fa Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 5 Mar 2024 00:15:54 +0000 Subject: [PATCH 149/430] Add changed framework coverage reports --- java/documentation/library-coverage/coverage.csv | 2 +- java/documentation/library-coverage/coverage.rst | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index feef49e3308..751024f5321 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -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 diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index 4ff6beeacb7..903890f7ba2 100644 --- a/java/documentation/library-coverage/coverage.rst +++ b/java/documentation/library-coverage/coverage.rst @@ -22,6 +22,6 @@ Java framework & library support Java extensions,"``javax.*``, ``jakarta.*``",67,688,80,5,4,2,1,1,4 Kotlin Standard Library,``kotlin*``,,1849,16,14,,,,,2 `Spring `_,``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,18953,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,18953,2558,337,16,128,33,1,409 From 179aaa134201089df6374ff5ba2132df749d3e12 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Tue, 5 Mar 2024 09:35:18 +0000 Subject: [PATCH 150/430] Ruby: model Open4.popen4ext --- .../lib/codeql/ruby/frameworks/stdlib/Open3.qll | 16 ++++++++++++++-- .../frameworks/stdlib/Open3.expected | 4 ++++ .../library-tests/frameworks/stdlib/Open3.rb | 4 ++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Open3.qll b/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Open3.qll index 16b9ecc3797..0e9b6245880 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Open3.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Open3.qll @@ -38,14 +38,26 @@ module Open3 { */ class Open4Call extends SystemCommandExecution::Range instanceof DataFlow::CallNode { Open4Call() { - this = API::getTopLevelMember("Open4").getAMethodCall(["open4", "popen4", "spawn"]) + this = + API::getTopLevelMember("Open4").getAMethodCall(["open4", "popen4", "spawn", "popen4ext"]) } - override DataFlow::Node getAnArgument() { result = super.getArgument(_) } + 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) } } diff --git a/ruby/ql/test/library-tests/frameworks/stdlib/Open3.expected b/ruby/ql/test/library-tests/frameworks/stdlib/Open3.expected index 48bc6fc27f6..9589d721a29 100644 --- a/ruby/ql/test/library-tests/frameworks/stdlib/Open3.expected +++ b/ruby/ql/test/library-tests/frameworks/stdlib/Open3.expected @@ -15,3 +15,7 @@ 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.rb b/ruby/ql/test/library-tests/frameworks/stdlib/Open3.rb index 4a112335ffb..9cc7ea7fd5c 100644 --- a/ruby/ql/test/library-tests/frameworks/stdlib/Open3.rb +++ b/ruby/ql/test/library-tests/frameworks/stdlib/Open3.rb @@ -13,3 +13,7 @@ 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") From d5c34264ad15f2b701e122cc6413b6b8c4c41b14 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 19 Dec 2023 09:49:32 +0100 Subject: [PATCH 151/430] Data flow: Prune call-context sensitivity relations --- .../codeql/dataflow/internal/DataFlowImpl.qll | 159 ++++-- .../dataflow/internal/DataFlowImplCommon.qll | 493 +++++++++++------- 2 files changed, 436 insertions(+), 216 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 840e67e9fa7..683c64822f7 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -588,7 +588,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 +611,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 +982,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 +1186,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 +1231,9 @@ module MakeImpl { ApOption apSome(Ap ap); - class Cc; + class Cc { + string toString(); + } class CcCall extends Cc; @@ -1731,13 +1745,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( @@ -2314,6 +2324,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 +2374,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 +2414,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 +2452,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 +2479,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 +2507,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() } } @@ -2510,7 +2547,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 +2821,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( @@ -3148,7 +3205,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( @@ -4026,6 +4099,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 +4124,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 +4178,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 +4186,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 +4216,7 @@ module MakeImpl { not Config::getAFeature() instanceof FeatureEqualSourceSinkCallContext ) | - if recordDataFlowCallSite(call, callable) + if PrunedCallContextSensitivityStage5::recordDataFlowCallSite(call, callable) then innercc = TSpecificCall(call) else innercc = TSomeCall() ) @@ -5019,9 +5108,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 +5143,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 +5165,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() ) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll index 21040c2d0d9..679be2cb5c6 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll @@ -393,6 +393,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 +708,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 +1094,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 +1172,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 +1184,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,15 +1642,6 @@ 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) - } - /** * A `Node` at which a cast can occur such that the type should be checked. */ @@ -1542,7 +1727,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() } @@ -1773,58 +1958,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() { From bd7b2c4cc6a514b44ff77cd5864dd01ce2af5fe4 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 19 Dec 2023 09:43:27 +0100 Subject: [PATCH 152/430] Update expected output --- .../collections/CollectionFlow.expected | 27 ------------------- .../call-sensitivity.expected | 26 ------------------ .../dataflow/global/Flow.expected | 1 - .../CWE-311/CleartextStorageDatabase.expected | 1 - 4 files changed, 55 deletions(-) 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 [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | provenance | | -| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | provenance | | -| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | provenance | | -| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | provenance | | -| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | provenance | | -| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | provenance | | -| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | provenance | | | CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | provenance | | | CollectionFlow.cs:18:61:18:64 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:75:18:78 | access to parameter dict : Dictionary [element, property Value] : A | provenance | | | CollectionFlow.cs:18:75:18:78 | access to parameter dict : Dictionary [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 [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | provenance | | -| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | provenance | | -| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | provenance | | -| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | provenance | | -| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | provenance | | -| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | provenance | | -| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | provenance | | | CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | provenance | | | CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:67:26:70 | access to parameter dict : Dictionary [element, property Value] : A | provenance | | | CollectionFlow.cs:26:67:26:70 | access to parameter dict : Dictionary [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 [element] : A | semmle.label | list : List [element] : A | -| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | semmle.label | list : List [element] : A | -| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | semmle.label | list : List [element] : A | -| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | semmle.label | list : List [element] : A | -| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | semmle.label | access to parameter list : List [element] : A | -| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | semmle.label | access to parameter list : List [element] : A | -| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | semmle.label | access to parameter list : List [element] : A | | CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | semmle.label | access to parameter list : List [element] : A | | CollectionFlow.cs:16:63:16:69 | access to indexer | semmle.label | access to indexer | | CollectionFlow.cs:18:61:18:64 | dict : Dictionary [element, property Value] : A | semmle.label | dict : Dictionary [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 [element] : A | semmle.label | list : List [element] : A | -| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | semmle.label | list : List [element] : A | -| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | semmle.label | list : List [element] : A | -| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | semmle.label | list : List [element] : A | | CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | semmle.label | access to parameter list : List [element] : A | -| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | semmle.label | access to parameter list : List [element] : A | -| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | semmle.label | access to parameter list : List [element] : A | -| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | semmle.label | access to parameter list : List [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 [element, property Value] : A | semmle.label | dict : Dictionary [element, property Value] : A | | CollectionFlow.cs:26:67:26:70 | access to parameter dict : Dictionary [element, property Value] : A | semmle.label | access to parameter dict : Dictionary [element, property Value] : A | 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/global/Flow.expected b/ruby/ql/test/library-tests/dataflow/global/Flow.expected index fb836e8488c..7ae00a80dce 100644 --- a/ruby/ql/test/library-tests/dataflow/global/Flow.expected +++ b/ruby/ql/test/library-tests/dataflow/global/Flow.expected @@ -140,7 +140,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 | | 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 | | From 91cb2a37fd4ec3d8d9a2effa4f1e51761792d9db Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Tue, 5 Mar 2024 10:19:22 +0000 Subject: [PATCH 153/430] Ruby: Model Process.exec --- ruby/ql/lib/codeql/ruby/frameworks/Stdlib.qll | 1 + .../codeql/ruby/frameworks/stdlib/Process.qll | 14 ++++++++ .../stdlib/CommandExecution.expected | 32 +++++++++++++++++++ .../frameworks/stdlib/CommandExecution.ql | 12 +++++++ .../frameworks/stdlib/process.rb | 5 +++ 5 files changed, 64 insertions(+) create mode 100644 ruby/ql/test/library-tests/frameworks/stdlib/CommandExecution.expected create mode 100644 ruby/ql/test/library-tests/frameworks/stdlib/CommandExecution.ql create mode 100644 ruby/ql/test/library-tests/frameworks/stdlib/process.rb 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/stdlib/Process.qll b/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Process.qll index 1ffc15d691b..e4516f22038 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Process.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Process.qll @@ -32,4 +32,18 @@ module Process { 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/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/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") From 148241183a3a52d15f145fdb97218180d37ba50b Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Tue, 5 Mar 2024 10:20:22 +0000 Subject: [PATCH 154/430] Ruby: update changenote --- ruby/ql/lib/change-notes/2024-02-27-process-spawn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index 30feedcbd20..9c20f05d865 100644 --- a/ruby/ql/lib/change-notes/2024-02-27-process-spawn.md +++ b/ruby/ql/lib/change-notes/2024-02-27-process-spawn.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -* New command injection sinks have been added, including `Process.spawn`, `Terrapin::CommandLine` and the `open4` gem. \ No newline at end of file +* New command injection sinks have been added, including `Process.spawn`, `Process.exec`, `Terrapin::CommandLine` and the `open4` gem. \ No newline at end of file From 4dde1fb117d1233828dbeb8df4bbf9dc24cd35dd Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 5 Mar 2024 11:45:17 +0000 Subject: [PATCH 155/430] Only check strings of length <= 100 for dummy password with <= 2 unique characters --- go/ql/lib/semmle/go/security/SensitiveActions.qll | 1 + 1 file changed, 1 insertion(+) 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 From 2b99b83857336ce1636f5acb829c1acafef23699 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 5 Mar 2024 10:56:28 +0100 Subject: [PATCH 156/430] C#: Add package source error count to DB --- .../DependencyManager.cs | 12 ++++++++++++ .../CompilationInfo.expected | 17 +++++++++++++++++ .../CompilationInfo.ql | 14 ++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.expected create mode 100644 csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.ql diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index eb4824a0c14..724ae8f69fd 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -814,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 => { @@ -823,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; } @@ -841,6 +847,7 @@ 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 = threads }, project => @@ -853,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)] 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 + ) +} From a264ea23c68f13a42e234583fe021ee0cf04c955 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 5 Mar 2024 15:34:26 +0100 Subject: [PATCH 157/430] Go: Add SQLi sinks for Squirrel --- go/ql/lib/semmle/go/frameworks/SQL.qll | 29 +- .../2024-03-05-squirrel-sqli-sinks.md | 4 + .../semmle/go/frameworks/SQL/go.mod | 14 +- .../semmle/go/frameworks/SQL/main.go | 42 ++- .../github.com/Masterminds/squirrel/stub.go | 318 +++++++++++++++++- .../go/frameworks/SQL/vendor/modules.txt | 2 +- 6 files changed, 389 insertions(+), 20 deletions(-) create mode 100644 go/ql/src/change-notes/2024-03-05-squirrel-sqli-sinks.md diff --git a/go/ql/lib/semmle/go/frameworks/SQL.qll b/go/ql/lib/semmle/go/frameworks/SQL.qll index f76182fb111..4c0d7385a09 100644 --- a/go/ql/lib/semmle/go/frameworks/SQL.qll +++ b/go/ql/lib/semmle/go/frameworks/SQL.qll @@ -81,18 +81,29 @@ 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") + // first argument to the `OrderBy`, `Prefix`, `Suffix` or `Where` method of one of the `*Builder` classes + exists(Method m, string builder | m = fn | + builder.matches("%Builder") 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/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/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 From e78e71c8752848675aa12aa0533a8fe85d71ae17 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 5 Mar 2024 16:05:22 +0100 Subject: [PATCH 158/430] List Squirrel builders explicitly --- go/ql/lib/semmle/go/frameworks/SQL.qll | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/go/ql/lib/semmle/go/frameworks/SQL.qll b/go/ql/lib/semmle/go/frameworks/SQL.qll index 4c0d7385a09..1a6e2280781 100644 --- a/go/ql/lib/semmle/go/frameworks/SQL.qll +++ b/go/ql/lib/semmle/go/frameworks/SQL.qll @@ -83,9 +83,8 @@ module SQL { | fn.hasQualifiedName(sq, ["Delete", "Expr", "Insert", "Select", "Update"]) or - // first argument to the `OrderBy`, `Prefix`, `Suffix` or `Where` method of one of the `*Builder` classes exists(Method m, string builder | m = fn | - builder.matches("%Builder") and + builder = ["DeleteBuilder", "InsertBuilder", "SelectBuilder", "UpdateBuilder"] and m.hasQualifiedName(sq, builder, ["Columns", "From", "Options", "OrderBy", "Prefix", "Suffix", "Where"]) or From 7027b7fe82fc5e01bd4b94d113c1ad0baff76412 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 5 Mar 2024 16:34:48 +0000 Subject: [PATCH 159/430] Apply review suggestions: Use getInstance and clarify predicate name/qldoc. Also fix changenote formatting. --- .../ql/lib/change-notes/2024-03-01-typhoeus-request.md | 2 +- .../codeql/ruby/frameworks/http_clients/Typhoeus.qll | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) 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 index 3a6c1d4c463..f008869fbcd 100644 --- a/ruby/ql/lib/change-notes/2024-03-01-typhoeus-request.md +++ b/ruby/ql/lib/change-notes/2024-03-01-typhoeus-request.md @@ -1,4 +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 +* 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/codeql/ruby/frameworks/http_clients/Typhoeus.qll b/ruby/ql/lib/codeql/ruby/frameworks/http_clients/Typhoeus.qll index 5ab59029558..c1b13323f9a 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/http_clients/Typhoeus.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/http_clients/Typhoeus.qll @@ -27,7 +27,7 @@ class TyphoeusHttpRequest extends Http::Client::Request::Range, DataFlow::CallNo .getReturn(["get", "head", "delete", "options", "post", "put", "patch"]) or directResponse = false and - requestNode = API::getTopLevelMember("Typhoeus").getMember("Request").getReturn("new") + requestNode = API::getTopLevelMember("Typhoeus").getMember("Request").getInstance() ) } @@ -38,7 +38,7 @@ class TyphoeusHttpRequest extends Http::Client::Request::Range, DataFlow::CallNo result = getBodyFromResponse(requestNode) or directResponse = false and - result = getBodyFromRequest(requestNode) + result = getResponseBodyFromRequest(requestNode) } /** Gets the value that controls certificate validation, if any. */ @@ -69,10 +69,10 @@ private module TyphoeusDisablesCertificateValidationConfig implements DataFlow:: private module TyphoeusDisablesCertificateValidationFlow = DataFlow::Global; -/** Gets the body from the given `requestNode` representing a Typhoeus request */ +/** Gets the response body from the given `requestNode` representing a Typhoeus request */ bindingset[requestNode] pragma[inline_late] -private DataFlow::Node getBodyFromRequest(API::Node requestNode) { +private DataFlow::Node getResponseBodyFromRequest(API::Node requestNode) { result = [ getBodyFromResponse(getResponseFromRequest(requestNode)), @@ -95,7 +95,7 @@ private API::Node getResponseFromRequest(API::Node requestNode) { ] } -/** Gets the body from the given `responseNode` representing a Typhoeus response */ +/** Gets the response body from the given `responseNode` representing a Typhoeus response */ bindingset[responseNode] pragma[inline_late] private DataFlow::Node getBodyFromResponse(API::Node responseNode) { From f4002280371c9493531e82b8016c46d6235d8505 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 5 Mar 2024 12:55:55 -0800 Subject: [PATCH 160/430] C++: Remove the pruning stage from SSA. --- .../cpp/ir/dataflow/internal/SsaInternals.qll | 50 +-- .../dataflow/internal/ssa0/SsaInternals.qll | 347 ------------------ 2 files changed, 13 insertions(+), 384 deletions(-) delete mode 100644 cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ssa0/SsaInternals.qll 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..5f254ee12b7 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() } @@ -105,16 +104,7 @@ predicate hasRawIndirectInstruction(Instruction instr, int indirectionIndex) { cached private newtype TDefOrUseImpl = 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 +123,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 @@ -984,17 +973,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 +996,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 + ) ) } 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; From fbbd57b34f808592c3153cbe2cdf7fab04f7467d Mon Sep 17 00:00:00 2001 From: Robert Marsh Date: Tue, 5 Mar 2024 21:12:12 +0000 Subject: [PATCH 161/430] C++: Suppress epxr destructors in preparation for temporaries --- .../raw/internal/TranslatedElement.qll | 10 ++- .../test/library-tests/ir/ir/raw_ir.expected | 65 ++++++++----------- 2 files changed, 37 insertions(+), 38 deletions(-) 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..a9d4b6e1095 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,9 @@ 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) } /** @@ -744,9 +747,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 +771,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/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index 91760c805b9..02bd6400025 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -12779,7 +12779,7 @@ ir.cpp: # 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 +#-----| False -> Block 4 #-----| True -> Block 3 # 2212| Block 1 @@ -12796,44 +12796,35 @@ ir.cpp: # 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 +#-----| Exception -> Block 5 -# 2219| Block 4 -# 2219| r2219_1(glval) = VariableAddress[s] : +# 2218| Block 4 +# 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_1(glval) = VariableAddress[s2] : # 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 +# 2219| r2219_7(glval) = VariableAddress[s] : +# 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 +#-----| Goto -> Block 10 -# 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 5 +# 2220| v2220_1(void) = CatchByType[const char *] : +#-----| Exception -> Block 7 +#-----| Goto -> Block 6 # 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? @@ -12850,25 +12841,25 @@ ir.cpp: # 2221| v2221_10(void) = ThrowValue : &:r2221_1, ~m? #-----| Exception -> Block 2 -# 2223| Block 8 +# 2223| Block 7 # 2223| v2223_1(void) = CatchByType[const String &] : -#-----| Exception -> Block 10 -#-----| Goto -> Block 9 +#-----| Exception -> Block 9 +#-----| Goto -> Block 8 -# 2223| Block 9 +# 2223| Block 8 # 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 +#-----| Goto -> Block 10 -# 2225| Block 10 +# 2225| Block 9 # 2225| v2225_1(void) = CatchAny : # 2226| v2226_1(void) = ReThrow : #-----| Exception -> Block 2 -# 2228| Block 11 +# 2228| Block 10 # 2228| v2228_1(void) = NoOp : # 2212| v2212_9(void) = ReturnVoid : #-----| Goto -> Block 1 From b71074f9c41c58228c477fa7c5cf0ebb0558f23d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 6 Mar 2024 00:16:26 +0000 Subject: [PATCH 162/430] Add changed framework coverage reports --- go/documentation/library-coverage/coverage.csv | 2 +- go/documentation/library-coverage/coverage.rst | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) 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 `_,``github.com/go-kit/kit*``,,,1 `Iris `_,``github.com/kataras/iris*``,,,1 `Kubernetes `_,"``k8s.io/api*``, ``k8s.io/apimachinery*``",,57, - `Macaron `_,``gopkg.in/macaron*``,,1, + `Macaron `_,``gopkg.in/macaron*``,12,1, `Revel `_,"``github.com/revel/revel*``, ``github.com/robfig/revel*``",,20, `SendGrid `_,``github.com/sendgrid/sendgrid-go*``,,1, `Standard library `_,"````, ``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 `_,``gopkg.in/yaml*``,,9, `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 From 6ba6b12b9f982df6b299d8d091be20bb04357925 Mon Sep 17 00:00:00 2001 From: Edward Minnix III Date: Tue, 5 Mar 2024 22:31:25 -0500 Subject: [PATCH 163/430] Docs review suggestion Co-authored-by: Ben Ahmady <32935794+subatoi@users.noreply.github.com> --- .../customizing-library-models-for-csharp.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 dd5bc6285fc..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 @@ -350,7 +350,7 @@ Threat models 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 the ``sourceModel`` determines which threat model a source is associated with. There are two main categories: +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``). From 6972f9b31d300912ffd9f01ba3e95d529b6493b8 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 6 Mar 2024 09:34:47 +0100 Subject: [PATCH 164/430] C++: Update syntax-zoo expected test results --- .../library-tests/syntax-zoo/aliased_ssa_consistency.expected | 1 - cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected | 3 --- .../syntax-zoo/unaliased_ssa_consistency.expected | 1 - 3 files changed, 5 deletions(-) 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 From 02bab4c15a643be32dec6208a5793376fbd0e4f8 Mon Sep 17 00:00:00 2001 From: Malayke Date: Wed, 6 Mar 2024 17:57:20 +0800 Subject: [PATCH 165/430] Update go/ql/src/experimental/CWE-770/DenialOfService.ql Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> --- go/ql/src/experimental/CWE-770/DenialOfService.ql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/go/ql/src/experimental/CWE-770/DenialOfService.ql b/go/ql/src/experimental/CWE-770/DenialOfService.ql index f1c2fcea0ac..199cd0df552 100644 --- a/go/ql/src/experimental/CWE-770/DenialOfService.ql +++ b/go/ql/src/experimental/CWE-770/DenialOfService.ql @@ -3,8 +3,9 @@ * @description slices created with the built-in make function from user-controlled sources using a * maliciously large value possibly leading to a denial of service. * @kind path-problem - * @problem.severity high + * @problem.severity error * @security-severity 9 + * @precision high * @id go/denial-of-service * @tags security * experimental From 55e6255e056bec1f2e1aab64547db5a519f820a0 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 5 Mar 2024 14:28:35 +0100 Subject: [PATCH 166/430] Dataflow: Extend the first join to also include argApa. Improves from 2024-03-04 13:29:20] Evaluated non-recursive predicate DataFlowImpl::Impl::Stage5::flowThroughIntoCall/6#b44155c7@6dd478n9 in 126ms (size: 398332). Evaluated relational algebra for predicate DataFlowImpl::Impl::Stage5::flowThroughIntoCall/6#b44155c7@6dd478n9 with tuple counts: 1 ~0% {2} r1 = SCAN `DataFlowImpl::Impl::TAccessPathApproxNone#dom#04382804` OUTPUT _, _ 1 ~0% {0} | REWRITE WITH Tmp.0 := true, Tmp.1 := false, TEST Tmp.0 != Tmp.1 KEEPING 0 83798 ~0% {4} | JOIN WITH `project#DataFlowImpl::Impl::Stage5::returnFlowsThrough/8#ffafcf14` CARTESIAN PRODUCT OUTPUT Rhs.0, Rhs.3, Rhs.1, Rhs.2 4044102 ~3% {7} | JOIN WITH `project#DataFlowImpl::Impl::Stage5::flowIntoCallApaTaken/6#d989a8d1#cpe#12346_2013#join_rhs` ON FIRST 1 OUTPUT Rhs.2, Lhs.2, Lhs.3, Rhs.3, Lhs.1, Lhs.0, Rhs.1 398332 ~3% {6} | JOIN WITH `project#DataFlowImpl::Impl::Stage5::fwdFlow/9#00ae2fc8#2` ON FIRST 4 OUTPUT Lhs.6, Lhs.0, Lhs.5, _, Lhs.2, Lhs.4 398332 ~1% {6} | REWRITE WITH Out.3 := true return r1 to [2024-03-04 15:20:26] Evaluated non-recursive predicate DataFlowImpl::Impl::Stage5::flowThroughIntoCall/6#b44155c7@97bd358u in 35ms (size: 398332). Evaluated relational algebra for predicate DataFlowImpl::Impl::Stage5::flowThroughIntoCall/6#b44155c7@97bd358u with tuple counts: 83798 ~0% {7} r1 = SCAN `project#DataFlowImpl::Impl::Stage5::returnFlowsThrough/9#53894c55` OUTPUT In.0, In.1, In.2, In.3, In.4, _, _ {5} | REWRITE WITH Tmp.5 := true, Tmp.6 := false, TEST Tmp.5 != Tmp.6 KEEPING 5 83798 ~3% {5} | SCAN OUTPUT In.0, In.3, In.4, In.1, In.2 416847 ~2% {7} | JOIN WITH `project#DataFlowImpl::Impl::Stage5::flowIntoCallApaTaken/6#d989a8d1#cpe#12346_2301#join_rhs` ON FIRST 2 OUTPUT Rhs.3, Lhs.3, Lhs.4, Lhs.1, Lhs.2, Lhs.0, Rhs.2 398332 ~3% {6} | JOIN WITH `project#DataFlowImpl::Impl::Stage5::fwdFlow/9#00ae2fc8#2` ON FIRST 4 OUTPUT Lhs.6, Lhs.0, Lhs.5, _, Lhs.2, Lhs.4 398332 ~1% {6} | REWRITE WITH Out.3 := true return r1 --- .../codeql/dataflow/internal/DataFlowImpl.qll | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 683c64822f7..4c1b2b85b8e 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -1904,11 +1904,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() ) @@ -1920,10 +1920,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() ) } @@ -2027,7 +2027,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) @@ -2189,7 +2189,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) ) } @@ -2258,7 +2258,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, _) ) } @@ -2266,7 +2266,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() ) From caa45058aebae20c6f2efb0649b49f573e082273 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 5 Mar 2024 14:34:30 +0100 Subject: [PATCH 167/430] Dataflow: Improve join-order. Join with the functional getApprox before filtering with revFlow as this is always better. --- shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 4c1b2b85b8e..2d17ffd5807 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -3986,8 +3986,8 @@ module MakeImpl { AccessPath ap ) { exists(DataFlowType t0 | - pathStep0(mid, node, state, cc, sc, t0, ap) and - Stage5::revFlow(node, state, ap.getApprox()) and + pathStep0(mid, pragma[only_bind_into](node), pragma[only_bind_into](state), cc, sc, t0, ap) 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) ) From a54a73c9a2d473da215aaa94ad08cd14b816f190 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 6 Mar 2024 11:37:20 +0100 Subject: [PATCH 168/430] JS: Detect more FunctionStyleClasses --- .../ql/lib/semmle/javascript/dataflow/Nodes.qll | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll b/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll index 192d2e6faa4..d88dab4d431 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll @@ -1262,6 +1262,12 @@ module ClassNode { result.getFile() = f } + pragma[nomagic] + private DataFlow::NewNode getAnInstantiationInFile(string name, File f) { + result = AccessPath::getAReferenceTo(name).(DataFlow::LocalSourceNode).getAnInstantiation() and + result.getFile() = f + } + /** * Gets a reference to the function `func`, where there exists a read/write of the "prototype" property on that reference. */ @@ -1273,7 +1279,7 @@ module ClassNode { } /** - * A function definition with prototype manipulation as a `ClassNode` instance. + * A function definition, targeted by a `new`-call or with prototype manipulation, seen as a `ClassNode` instance. */ class FunctionStyleClass extends Range, DataFlow::ValueNode { override Function astNode; @@ -1284,9 +1290,12 @@ module ClassNode { ( exists(getAFunctionValueWithPrototype(function)) or - exists(string name | - this = AccessPath::getAnAssignmentTo(name) and + function = any(NewNode new).getCalleeNode().analyze().getAValue() + or + exists(string name | this = AccessPath::getAnAssignmentTo(name) | exists(getAPrototypeReferenceInFile(name, this.getFile())) + or + exists(getAnInstantiationInFile(name, this.getFile())) ) ) } From 34308eee8dba4251522fd8a4dae51b2e889b8150 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 6 Mar 2024 16:11:19 +0100 Subject: [PATCH 169/430] C#: Improve buildless progress reporting --- .../Extractor.cs | 22 +++++++---- .../Extractor/Analyser.cs | 39 ++++++++++++++++--- .../Extractor/Extractor.cs | 2 + .../Extractor/IProgressMonitor.cs | 5 +++ 4 files changed, 55 insertions(+), 13 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs index fb314e525c1..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) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs index 2f56bbfa3cc..413a634f517 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs @@ -131,6 +131,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 +170,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] { @@ -177,11 +180,13 @@ namespace Semmle.Extraction.CSharp private void DoExtractCIL(PortableExecutableReference r) { + var currentTaskId = IncrementTaskCount(); + ReportProgressTaskStarted(currentTaskId, r.FilePath); 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); + ReportProgressTaskDone(currentTaskId, r.FilePath, trapFile, stopwatch.Elapsed, extracted ? AnalysisAction.Extracted : AnalysisAction.UpToDate); } private void DoExtractTree(SyntaxTree tree) @@ -201,6 +206,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 +229,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 +242,13 @@ 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 +258,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 +296,22 @@ 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 ++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..68d077b15e6 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) { } 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. From c4f2bbda2acf3a88567cb14d664287aa7c5da5a7 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 6 Mar 2024 16:12:14 +0100 Subject: [PATCH 170/430] Simplify task counter incrementing --- .../Semmle.Extraction.CSharp/Extractor/Analyser.cs | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs index 413a634f517..59359b2715a 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; @@ -242,8 +241,6 @@ namespace Semmle.Extraction.CSharp try { var assemblyPath = extractor.OutputPath; - - var stopwatch = new Stopwatch(); stopwatch.Start(); var currentTaskId = IncrementTaskCount(); @@ -298,10 +295,7 @@ namespace Semmle.Extraction.CSharp private int IncrementTaskCount() { - lock (progressMutex) - { - return ++taskCount; - } + return Interlocked.Increment(ref taskCount); } private void ReportProgressTaskStarted(int currentCount, string src) From ca55b92281fdb4f84218f8949836d65130bd1ff1 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 4 Mar 2024 09:50:08 -0500 Subject: [PATCH 171/430] Change `System.IO.TextReader` models to transfer taint to out parameter instead of return value Some of the `System.IO.TextReader` models transfered taint to `ReturnValue`, when there is a more relevant out-parameter/array. --- csharp/ql/lib/ext/System.IO.model.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/csharp/ql/lib/ext/System.IO.model.yml b/csharp/ql/lib/ext/System.IO.model.yml index b03d68535de..cb662630bd5 100644 --- a/csharp/ql/lib/ext/System.IO.model.yml +++ b/csharp/ql/lib/ext/System.IO.model.yml @@ -89,14 +89,14 @@ 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"] + - ["System.IO", "TextReader", True, "ReadAsync", "(System.Memory,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "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"] + - ["System.IO", "TextReader", True, "ReadBlockAsync", "(System.Memory,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "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"] From 94a941115f79fae9acdbed7b8db1f1ca2f9e15f3 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 4 Mar 2024 13:34:43 -0500 Subject: [PATCH 172/430] Fix FlowSummaries test results --- .../dataflow/library/FlowSummaries.expected | 54 +++++++++---------- .../library/FlowSummariesFiltered.expected | 16 +++--- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index 9c4e141a490..ef44cae1f0b 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.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);;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.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);;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.Threading.CancellationToken);;Argument[this];Argument[0];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 | @@ -9210,14 +9210,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.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);;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.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);;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.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);;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.Threading.CancellationToken);;Argument[this];Argument[0];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);;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.Threading.CancellationToken);;Argument[this];Argument[0];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 +9286,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);;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.Threading.CancellationToken);;Argument[this];ReturnValue;taint;manual | -| System.IO;StringReader;false;ReadBlock;(System.Span);;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.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);;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.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | +| System.IO;StringReader;false;ReadBlock;(System.Span);;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.Threading.CancellationToken);;Argument[this];Argument[0];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 +9335,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);;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 | +| System.IO;TextReader;true;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0];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 | +| System.IO;TextReader;true;ReadBlockAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0];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/test/library-tests/dataflow/library/FlowSummariesFiltered.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected index 12c531e1837..861a52da59d 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected @@ -7775,14 +7775,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);;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 | +| System.IO;TextReader;true;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0];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 | +| System.IO;TextReader;true;ReadBlockAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0];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 | From 27ba51cf9daa71595ff188502f6b05d02b419d28 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 4 Mar 2024 13:40:00 -0500 Subject: [PATCH 173/430] Change note --- .../2024-03-04-fixed-system.io.textreader-models.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/lib/change-notes/2024-03-04-fixed-system.io.textreader-models.md 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`. From e065390185acdd46904ec383d9c4f51a069f583f Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Tue, 5 Mar 2024 22:36:19 -0500 Subject: [PATCH 174/430] Add `.Element` modifier to `Memory` arguments in MaD models --- csharp/ql/lib/ext/System.IO.model.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/csharp/ql/lib/ext/System.IO.model.yml b/csharp/ql/lib/ext/System.IO.model.yml index cb662630bd5..eda7f3697c3 100644 --- a/csharp/ql/lib/ext/System.IO.model.yml +++ b/csharp/ql/lib/ext/System.IO.model.yml @@ -92,11 +92,11 @@ extensions: - ["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"] - - ["System.IO", "TextReader", True, "ReadAsync", "(System.Memory,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["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"] - - ["System.IO", "TextReader", True, "ReadBlockAsync", "(System.Memory,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["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"] From 527041348e686ecc277c282f41c291e90e10d14f Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 6 Mar 2024 10:38:00 -0500 Subject: [PATCH 175/430] Add comment about `Memory` --- csharp/ql/lib/ext/System.IO.model.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/csharp/ql/lib/ext/System.IO.model.yml b/csharp/ql/lib/ext/System.IO.model.yml index eda7f3697c3..e1120d5684e 100644 --- a/csharp/ql/lib/ext/System.IO.model.yml +++ b/csharp/ql/lib/ext/System.IO.model.yml @@ -92,10 +92,12 @@ extensions: - ["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"] From a87df5459f5a8ee82830b12a0aa343b6a4709922 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 6 Mar 2024 10:38:27 -0500 Subject: [PATCH 176/430] Fix flow summary tests --- .../dataflow/library/FlowSummaries.expected | 14 +++++++------- .../library/FlowSummariesFiltered.expected | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index ef44cae1f0b..2d7a0c0c192 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -885,7 +885,7 @@ summary | 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);;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.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | +| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;false;ReadAsync;(System.Memory,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 | @@ -9213,11 +9213,11 @@ summary | 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);;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.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | +| System.IO;StreamReader;false;ReadAsync;(System.Memory,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);;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.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | +| System.IO;StreamReader;false;ReadBlockAsync;(System.Memory,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 | @@ -9289,10 +9289,10 @@ summary | 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);;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.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | +| System.IO;StringReader;false;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO;StringReader;false;ReadBlock;(System.Span);;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.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | +| System.IO;StringReader;false;ReadBlockAsync;(System.Memory,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 | @@ -9338,11 +9338,11 @@ summary | 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 | -| System.IO;TextReader;true;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | +| 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 | -| System.IO;TextReader;true;ReadBlockAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | +| 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/test/library-tests/dataflow/library/FlowSummariesFiltered.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected index 861a52da59d..df2d33561ff 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected @@ -7778,11 +7778,11 @@ summary | 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 | -| System.IO;TextReader;true;ReadAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | +| 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 | -| System.IO;TextReader;true;ReadBlockAsync;(System.Memory,System.Threading.CancellationToken);;Argument[this];Argument[0];taint;manual | +| 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 | From 0edfafeb06cdf7f5df154e42ac01275cde286824 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 6 Mar 2024 11:29:02 +0000 Subject: [PATCH 177/430] Shared: Correct and clarify doc for SemBound.getExpr. --- .../rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll index 103a49ebdbf..e178c44cafb 100644 --- a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll +++ b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll @@ -393,12 +393,11 @@ signature module BoundSig { Location getLocation(); /** - * Gets an expression that equals this bound plus `delta`. For example given - * the expression `x = foo() + 1` the variable `x` has a bound with - * expression `call to foo()` and delta `-1`. + * Gets an expression that equals this bound plus `delta`. * - * For the zero-bound this gets integer constants equal to `delta`, and for - * other bounds this gets expressions equal to the bound while `delta = 0`. + * 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); } From e58b6e86b2aa44d871ca97cc01c2a15fb28641c3 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 6 Mar 2024 17:57:44 +0000 Subject: [PATCH 178/430] Kotlin 2: Accept more loc changes in exprs test --- .../library-tests/exprs/exprs.expected | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 72935759cd0..06675ccb718 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -1,13 +1,13 @@ -| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:6:24:9:9 | | NullLiteral | -| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:19:31:19:51 | | NullLiteral | -| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:19:31:19:51 | | NullLiteral | -| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:23:26:23:31 | | NullLiteral | -| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:33:27:33:47 | | NullLiteral | -| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:34:28:34:48 | | NullLiteral | -| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:34:28:34:48 | | NullLiteral | -| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:39:31:39:51 | | NullLiteral | -| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:82:37:82:54 | | NullLiteral | -| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:82:37:82:54 | | NullLiteral | +| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:6:9:9:9 | | NullLiteral | +| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:19:9:19:51 | | NullLiteral | +| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:19:9:19:51 | | NullLiteral | +| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:23:9:23:31 | | NullLiteral | +| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:33:9:33:47 | | NullLiteral | +| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:34:9:34:48 | | NullLiteral | +| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:34:9:34:48 | | NullLiteral | +| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:39:9:39:51 | | NullLiteral | +| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:82:9:82:54 | | NullLiteral | +| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:82:9:82:54 | | 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 | @@ -108,9 +108,9 @@ | delegatedProperties.kt:20:17:20:28 | (...) | 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 | (...) | 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 | (...) | 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 | | PropertyRefExpr | | delegatedProperties.kt:23:26:23:31 | (...) | delegatedProperties.kt:23:26:23:31 | get | MethodCall | @@ -153,7 +153,7 @@ | delegatedProperties.kt:27:50:27:71 | KProperty | file://:0:0:0:0 | | 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:22:30:13 | Unit | file://:0:0:0:0 | | TypeAccess | +| delegatedProperties.kt:28:13:30:13 | Unit | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:28:35:28:47 | Object | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:28:50:28:71 | ? ... | file://:0:0:0:0 | | WildcardTypeAccess | | delegatedProperties.kt:28:50:28:71 | KProperty | file://:0:0:0:0 | | TypeAccess | @@ -216,8 +216,8 @@ | 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 | | PropertyRefExpr | @@ -285,18 +285,18 @@ | delegatedProperties.kt:46:27:46:41 | Owner | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:46:44:46:65 | ? ... | file://:0:0:0:0 | | WildcardTypeAccess | | delegatedProperties.kt:46:44:46:65 | KProperty | file://:0:0:0:0 | | 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 | | 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 | | TypeAccess | | delegatedProperties.kt:49:27:49:41 | Owner | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:49:44:49:65 | ? ... | file://:0:0:0:0 | | WildcardTypeAccess | | delegatedProperties.kt:49:44:49:65 | KProperty | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:49:68:49:78 | Integer | file://:0:0:0:0 | | TypeAccess | -| delegatedProperties.kt:54:14:57:5 | ResourceDelegate | file://:0:0:0:0 | | TypeAccess | +| delegatedProperties.kt:54:5:57:5 | ResourceDelegate | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:54:34:54:48 | Owner | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:54:51:54:68 | ? ... | file://:0:0:0:0 | | WildcardTypeAccess | | delegatedProperties.kt:54:51:54:68 | KProperty | file://:0:0:0:0 | | 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 | | KtInitializerAssignExpr | | delegatedProperties.kt:60:1:60:24 | ...=... | delegatedProperties.kt:60:1:60:24 | setTopLevelInt | AssignExpr | | delegatedProperties.kt:60:1:60:24 | | delegatedProperties.kt:60:1:60:24 | setTopLevelInt | VarAccess | From a60afef9233bb7e993be3915b2e2c7823036e689 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 6 Mar 2024 16:37:04 -0800 Subject: [PATCH 179/430] C++: Add a local flow test file for IR dataflow. --- .../dataflow-tests/localFlow-ir.expected | 160 ++++++++++++++++++ .../dataflow/dataflow-tests/localFlow-ir.ql | 8 + 2 files changed, 168 insertions(+) create mode 100644 cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.expected create mode 100644 cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.ql 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..1fa924a11ce --- /dev/null +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.expected @@ -0,0 +1,160 @@ +| 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: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: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: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: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 | 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: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:9:8:9:9 | t1 | test.cpp:11:7:11:8 | t1 | +| test.cpp:10:8:10:9 | t2 | test.cpp:15:3:15:6 | Phi | +| 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: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: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:384:10:384:13 | *& ... | +| test.cpp:384:10:384:13 | 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: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:391:10:391:13 | *& ... | +| test.cpp:391:10:391:13 | 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: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: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 [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 | 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 From cc754858c6f8a4420cd31715d19563b6d4bdf5da Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 6 Mar 2024 18:12:58 -0800 Subject: [PATCH 180/430] C++: Add a testcase with missing flow out of the address of 'a' and to the argument of 'sink'. --- .../dataflow/dataflow-tests/dataflow-consistency.expected | 2 ++ .../dataflow/dataflow-tests/localFlow-ir.expected | 7 +++++++ .../dataflow/dataflow-tests/localFlow.expected | 7 +++++++ .../dataflow/dataflow-tests/test-source-sink.expected | 1 + cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp | 6 ++++++ .../dataflow/dataflow-tests/uninitialized.expected | 2 ++ 6 files changed, 25 insertions(+) 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 index 1fa924a11ce..c8377f43d59 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.expected @@ -158,3 +158,10 @@ | 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: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.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 | From 84797b90918d82f21c8011ea88aa35781fa63918 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 6 Mar 2024 16:25:36 -0800 Subject: [PATCH 181/430] C++: Refactor the address out of 'DefImpl' and into a new abstract class 'OperandBasedDef'. --- .../cpp/ir/dataflow/internal/SsaInternals.qll | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) 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 5f254ee12b7..7304a70dcf2 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 @@ -256,24 +256,30 @@ 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(); +} + +abstract 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) { @@ -281,7 +287,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) } @@ -295,7 +301,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) } @@ -1178,7 +1184,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() } From cf162aa41240ccb9bd7ae39c2c6c068a4b3644eb Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 6 Mar 2024 16:26:11 -0800 Subject: [PATCH 182/430] C++: Add an explicit definition of the address of an IRVariable. --- .../cpp/ir/dataflow/internal/SsaInternals.qll | 37 ++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) 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 7304a70dcf2..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 @@ -103,6 +103,7 @@ 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) } or @@ -272,7 +273,41 @@ abstract class DefImpl extends DefOrUseImpl { abstract Node0Impl getValue(); } -abstract class OperandBasedDef extends DefImpl { +/** 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] From 4c9876b008015f682ad3a94b93c244b46950fc3f Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 6 Mar 2024 18:15:04 -0800 Subject: [PATCH 183/430] C++: Accept test changes. --- .../dataflow-tests/localFlow-ir.expected | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) 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 index c8377f43d59..0e33430cde7 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.expected @@ -10,6 +10,7 @@ | 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 | @@ -22,6 +23,10 @@ | 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 | @@ -30,17 +35,24 @@ | 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 | & ... | @@ -50,14 +62,21 @@ | 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 | @@ -65,6 +84,7 @@ | 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 | @@ -94,8 +114,10 @@ | 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 | & ... | @@ -112,14 +134,17 @@ | 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 | & ... | @@ -132,6 +157,7 @@ | 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 | @@ -144,9 +170,11 @@ | 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 | @@ -161,6 +189,8 @@ | 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 | *& ... | From f0a5183a3f1901cd5027e05be847232721c3d97b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Mar 2024 03:59:07 +0000 Subject: [PATCH 184/430] Bump chrono from 0.4.34 to 0.4.35 in /ql Bumps [chrono](https://github.com/chronotope/chrono) from 0.4.34 to 0.4.35. - [Release notes](https://github.com/chronotope/chrono/releases) - [Changelog](https://github.com/chronotope/chrono/blob/main/CHANGELOG.md) - [Commits](https://github.com/chronotope/chrono/compare/v0.4.34...v0.4.35) --- updated-dependencies: - dependency-name: chrono dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- ql/Cargo.lock | Bin 34042 -> 34042 bytes ql/buramu/Cargo.toml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/ql/Cargo.lock b/ql/Cargo.lock index 3b8e780468888420b460ff3e6f04582a07c8de31..557cf673d595458400f9328b9382d49234d7e8b9 100644 GIT binary patch delta 92 zcmey>$@Hs}X~Q92M$^d$+5PP;QWMimEe(uQl9Q4R5{)g54UN)Llg!Oi(u~s5Op?vb wj4jMlOf3zQEYp(BlMGA}jf^c)lG7}blFW?Ej4dY{s)$@Hs}X~QAj$rn=t988mv4Gc}qOiYq2jZ#c4EDh2Ulgv#lEK^M^Q;ZDLEX*xa vOp`4w4Gb;JER4)kOpH>KO$`k#4J}O!Owx=kk|rPI5}nLvz`i+;ucr(ESjZc- 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" From 8ae6fa5366839cd1cde7a4eadfb25b30ad128fd8 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 5 Mar 2024 16:23:58 -0800 Subject: [PATCH 185/430] C++: Add a new query 'cpp/type-confusion' for detecting type confusion vulnerabilities. --- .../Security/CWE/CWE-843/TypeConfusion.qhelp | 47 ++++ .../src/Security/CWE/CWE-843/TypeConfusion.ql | 251 ++++++++++++++++++ .../Security/CWE/CWE-843/TypeConfusionBad.cpp | 7 + .../CWE/CWE-843/TypeConfusionCommon.cpp | 25 ++ .../CWE/CWE-843/TypeConfusionGood.cpp | 11 + .../CWE/CWE-843/TypeConfusion.expected | 27 ++ .../Security/CWE/CWE-843/TypeConfusion.qlref | 1 + .../query-tests/Security/CWE/CWE-843/test.cpp | 146 ++++++++++ 8 files changed, 515 insertions(+) create mode 100644 cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.qhelp create mode 100644 cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql create mode 100644 cpp/ql/src/Security/CWE/CWE-843/TypeConfusionBad.cpp create mode 100644 cpp/ql/src/Security/CWE/CWE-843/TypeConfusionCommon.cpp create mode 100644 cpp/ql/src/Security/CWE/CWE-843/TypeConfusionGood.cpp create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-843/TypeConfusion.expected create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-843/TypeConfusion.qlref create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-843/test.cpp 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..b1ad3a7d6ce --- /dev/null +++ b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.qhelp @@ -0,0 +1,47 @@ + + + + +

    +Certain casts in C and C++ places 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. +

    + +
    + + + +
    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..99f89106fb6 --- /dev/null +++ b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql @@ -0,0 +1,251 @@ +/** + * @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 BadFlow::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 } + + bindingset[this, t] + pragma[inline_late] + predicate compatibleWith(Type t) { + t.stripType() = this.getConvertedType() + or + prefix(this.getConvertedType(), t.stripType()) + or + t.stripType().(Class).getABaseClass+() = this.getConvertedType() + or + t.stripType() = this.getConvertedType().getABaseClass+() + } +} + +/** + * Holds if `source` is an allocation that allocates a value of type `state`. + */ +predicate isSourceImpl(DataFlow::Node source, Class state) { + state = source.asExpr().(AllocationExpr).getAllocatedElementType().stripType() and + exists(TypeDeclarationEntry tde | + tde = state.getDefinition() and + not tde.isFromUninstantiatedTemplate(_) + ) +} + +module RelevantStateConfig 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) { + exists(UnsafeCast cast | sink.asExpr() = cast.getUnconverted()) + } +} + +module RelevantStateFlow = DataFlow::Global; + +predicate relevantState(DataFlow::Node sink, Class state) { + exists(DataFlow::Node source | + RelevantStateFlow::flow(source, sink) and + isSourceImpl(source, state) + ) +} + +predicate isSinkImpl(DataFlow::Node sink, Class state, Type convertedType, boolean compatible) { + exists(UnsafeCast cast | + relevantState(sink, state) and + sink.asExpr() = cast.getUnconverted() and + convertedType = cast.getConvertedType() + | + if cast.compatibleWith(state) then compatible = true else compatible = false + ) +} + +module BadConfig implements DataFlow::StateConfigSig { + class FlowState extends Class { + FlowState() { isSourceImpl(_, this) } + } + + predicate isSource(DataFlow::Node source, FlowState state) { isSourceImpl(source, state) } + + predicate isBarrier(DataFlow::Node node) { RelevantStateConfig::isBarrier(node) } + + predicate isSink(DataFlow::Node sink, FlowState state) { isSinkImpl(sink, state, _, false) } + + predicate isBarrierOut(DataFlow::Node sink, FlowState state) { isSink(sink, state) } +} + +module BadFlow = DataFlow::GlobalWithState; + +module GoodConfig implements DataFlow::StateConfigSig { + class FlowState = BadConfig::FlowState; + + predicate isSource(DataFlow::Node source, FlowState state) { BadConfig::isSource(source, state) } + + predicate isBarrier(DataFlow::Node node) { BadConfig::isBarrier(node) } + + predicate isSink(DataFlow::Node sink, FlowState state) { + isSinkImpl(sink, state, _, true) and + BadFlow::flowTo(sink) + } +} + +module GoodFlow = DataFlow::GlobalWithState; + +from + BadFlow::PathNode source, BadFlow::PathNode sink, Type sourceType, Type sinkType, + DataFlow::Node sinkNode +where + BadFlow::flowPath(source, sink) and + sinkNode = sink.getNode() 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 GoodFlow::flowTo(sinkNode) and + isSourceImpl(source.getNode(), sourceType) and + isSinkImpl(sinkNode, _, sinkType, false) +select sinkNode, source, sink, "Conversion from $@ to $@ is invalid.", sourceType, + sourceType.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/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..2bf82dec984 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-843/TypeConfusion.expected @@ -0,0 +1,27 @@ +edges +| 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:66:15:66:21 | new | test.cpp:67:12:67:31 | a | provenance | | +| test.cpp:85:9:85:15 | new | test.cpp:88:14:88:33 | a | provenance | | +| test.cpp:127:12:127:17 | new | test.cpp:128:24:128:59 | s2 | provenance | | +| test.cpp:143:14:143:19 | new | test.cpp:145:28:145:68 | s1_2 | provenance | | +nodes +| 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:66:15:66:21 | new | semmle.label | new | +| test.cpp:67:12:67:31 | a | semmle.label | a | +| test.cpp:85:9:85:15 | new | semmle.label | new | +| test.cpp:88:14:88:33 | a | semmle.label | a | +| test.cpp:127:12:127:17 | new | semmle.label | new | +| test.cpp:128:24:128:59 | s2 | semmle.label | s2 | +| test.cpp:143:14:143:19 | new | semmle.label | new | +| test.cpp:145:28:145:68 | s1_2 | semmle.label | s1_2 | +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 | 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..90d8b47c820 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-843/test.cpp @@ -0,0 +1,146 @@ +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 +} From 6dc0fa515d03d48de8bf572edf97bb6d14c3f162 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 5 Mar 2024 16:29:37 -0800 Subject: [PATCH 186/430] C++: Add change note. --- cpp/ql/src/change-notes/2024-03-05-type-confusion-query.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/src/change-notes/2024-03-05-type-confusion-query.md 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 From cf4c8eb517982d81f4194bbdde7828af980f3a9f Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 6 Mar 2024 13:56:27 -0800 Subject: [PATCH 187/430] C++: Add more tests. --- cpp/ql/test/query-tests/Security/CWE/CWE-843/test.cpp | 1 + 1 file changed, 1 insertion(+) 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 index 90d8b47c820..879df4e23e6 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-843/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-843/test.cpp @@ -144,3 +144,4 @@ void test12() { // This one has a non-bitfield members. So we detect the problem HasSomeBitFields* hbf2 = reinterpret_cast(s1_2); // BAD } + From cd57cd0d8ac83218ec4bc388a98298fe70872661 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 6 Mar 2024 13:56:37 -0800 Subject: [PATCH 188/430] C++: Add qhelp reference. --- cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.qhelp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.qhelp b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.qhelp index b1ad3a7d6ce..0f72a992205 100644 --- a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.qhelp +++ b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.qhelp @@ -43,5 +43,8 @@ returns a null pointer, which can be checked for and handled appropriately. +
  • +Microsoft Learn: Type conversions and type safety. +
  • From c2db5f490e750b0e371f943376f59b8bbbae1355 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 6 Mar 2024 14:02:45 -0800 Subject: [PATCH 189/430] C++: Add more FNs and FPs to show examples of where the 'successor typing' strategy fails. --- .../CWE/CWE-843/TypeConfusion.expected | 7 +++++ .../query-tests/Security/CWE/CWE-843/test.cpp | 26 +++++++++++++++++++ 2 files changed, 33 insertions(+) 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 index 2bf82dec984..07c37663db9 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-843/TypeConfusion.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-843/TypeConfusion.expected @@ -5,6 +5,8 @@ edges | test.cpp:85:9:85:15 | new | test.cpp:88:14:88:33 | a | provenance | | | test.cpp:127:12:127:17 | new | test.cpp:128:24:128:59 | s2 | 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:168:9:168:15 | new | test.cpp:171:14:171:33 | a | provenance | | nodes | test.cpp:27:13:27:18 | new | semmle.label | new | | test.cpp:28:25:28:55 | p | semmle.label | p | @@ -18,6 +20,10 @@ nodes | test.cpp:128:24:128:59 | s2 | semmle.label | s2 | | 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:168:9:168:15 | new | semmle.label | new | +| test.cpp:171:14:171:33 | a | semmle.label | a | 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 | @@ -25,3 +31,4 @@ subpaths | 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 | 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 index 879df4e23e6..1ba1aa2062c 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-843/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-843/test.cpp @@ -145,3 +145,29 @@ void test12() { 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] + } +} From fc9919a5b61f824f62f993ab0d30e3bb45bf7449 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 6 Mar 2024 14:20:15 -0800 Subject: [PATCH 190/430] C++: Add a test that exercise the 'last field' check. --- .../CWE/CWE-843/TypeConfusion.expected | 4 ++++ .../query-tests/Security/CWE/CWE-843/test.cpp | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+) 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 index 07c37663db9..04e5462bf01 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-843/TypeConfusion.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-843/TypeConfusion.expected @@ -7,6 +7,7 @@ edges | 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:168:9:168:15 | new | test.cpp:171:14:171:33 | a | provenance | | +| test.cpp:187:15:187:24 | new | test.cpp:189:25:189:45 | u64 | provenance | | nodes | test.cpp:27:13:27:18 | new | semmle.label | new | | test.cpp:28:25:28:55 | p | semmle.label | p | @@ -24,6 +25,8 @@ nodes | test.cpp:159:14:159:33 | a | semmle.label | a | | test.cpp:168:9:168:15 | new | semmle.label | new | | test.cpp:171:14:171:33 | a | semmle.label | a | +| test.cpp:187:15:187:24 | new | semmle.label | new | +| test.cpp:189:25:189:45 | u64 | semmle.label | u64 | 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 | @@ -32,3 +35,4 @@ subpaths | 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 | 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 index 1ba1aa2062c..6b5b5ccde37 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-843/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-843/test.cpp @@ -171,3 +171,22 @@ void test14(bool 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 +} + +// semmle-extractor-options: --gcc -std=c++11 From 3295d5cb9f03911a99831cf51fb70ce039559b1e Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 6 Mar 2024 14:36:18 -0800 Subject: [PATCH 191/430] C++: Add more QLDoc. --- .../src/Security/CWE/CWE-843/TypeConfusion.ql | 54 ++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql index 99f89106fb6..6bfe9164a39 100644 --- a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql +++ b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql @@ -163,6 +163,12 @@ predicate isSourceImpl(DataFlow::Node source, Class state) { ) } +/** + * The `RelevantStateConfig` configuration is used to find the set of + * states for the `BadConfig` and `GoodConfig`. The flow computed by + * `RelevantStateConfig` is used to implement the `relevantState` predicate + * which is used to avoid a cartesian product in `isSinkImpl`. + */ module RelevantStateConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { isSourceImpl(source, _) } @@ -204,9 +210,16 @@ predicate isSinkImpl(DataFlow::Node sink, Class state, Type convertedType, boole ) } +/** + * The `BadConfig` configuration tracks flow from an allocation to an + * incompatible cast. + * + * We use `FlowState` to track the type of the source, and compare the + * flow state to the target of the cast in the `isSink` definition. + */ module BadConfig implements DataFlow::StateConfigSig { class FlowState extends Class { - FlowState() { isSourceImpl(_, this) } + FlowState() { relevantState(_, this) } } predicate isSource(DataFlow::Node source, FlowState state) { isSourceImpl(source, state) } @@ -220,6 +233,45 @@ module BadConfig implements DataFlow::StateConfigSig { module BadFlow = DataFlow::GlobalWithState; +/** + * The `GoodConfig` configuration tracks flow from an allocation to a + * compatible cast. + * + * We use `GoodConfig` to reduce the number of FPs from infeasible paths. + * For example, consider the following example: + * ```cpp + * struct Animal { virtual ~Animal(); }; + * + * struct Cat : public Animal { + * Cat(); + * ~Cat(); + * }; + * + * struct Dog : public Animal { + * Dog(); + * ~Dog(); + * }; + * + * void test9(bool b) { + * Animal* a; + * if(b) { + * a = new Cat; + * } else { + * a = new Dog; + * } + * if(b) { + * Cat* d = static_cast(a); + * } + * } + * ``` + * Here, `BadConfig` finds a flow from `a = new Dog` to `static_cast(a)`. + * However, that path is never realized in an actual execution path. So in + * order to remove this result we exclude results where there exists an + * allocation of a type that's compatible with `static_cast(a)`. + * + * We use `FlowState` to track the type of the source, and compare the + * flow state to the target of the cast in the `isSink` definition. + */ module GoodConfig implements DataFlow::StateConfigSig { class FlowState = BadConfig::FlowState; From bf84f3a936c07ca822a8394984cb84ebbba7ece7 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 6 Mar 2024 15:53:16 -0800 Subject: [PATCH 192/430] C++: Add FN. --- .../query-tests/Security/CWE/CWE-843/test.cpp | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) 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 index 6b5b5ccde37..3fdafd9d02f 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-843/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-843/test.cpp @@ -189,4 +189,24 @@ void test15() { UInt8_with_more* u8 = (UInt8_with_more*)u64; // BAD } -// semmle-extractor-options: --gcc -std=c++11 +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] +} + +// semmle-extractor-options: --gcc -std=c++11 \ No newline at end of file From 01fc7432cb79bc30857988401f8a4776c7b211e3 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 6 Mar 2024 22:17:33 -0800 Subject: [PATCH 193/430] C++: Add more tests. --- .../CWE/CWE-843/TypeConfusion.expected | 8 ++++++++ .../query-tests/Security/CWE/CWE-843/test.cpp | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+) 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 index 04e5462bf01..45355a86a48 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-843/TypeConfusion.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-843/TypeConfusion.expected @@ -8,6 +8,8 @@ edges | test.cpp:153:9:153:15 | new | test.cpp:159:14:159:33 | a | provenance | | | test.cpp:168:9:168:15 | new | test.cpp:171:14:171:33 | a | provenance | | | test.cpp:187:15:187:24 | new | test.cpp:189:25:189:45 | u64 | 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:27:13:27:18 | new | semmle.label | new | | test.cpp:28:25:28:55 | p | semmle.label | p | @@ -27,6 +29,10 @@ nodes | test.cpp:171:14:171:33 | a | semmle.label | a | | test.cpp:187:15:187:24 | new | semmle.label | new | | test.cpp:189:25:189:45 | u64 | semmle.label | u64 | +| 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 | @@ -36,3 +42,5 @@ subpaths | 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/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-843/test.cpp index 3fdafd9d02f..982496218ff 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-843/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-843/test.cpp @@ -209,4 +209,22 @@ void test16() { 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 From b876117eccf7b1e7c9db393ce0d6e2d1277a382a Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Wed, 6 Mar 2024 22:25:04 -0800 Subject: [PATCH 194/430] C++: Add more QLDoc. --- cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql index 6bfe9164a39..d43e0145c99 100644 --- a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql +++ b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql @@ -139,6 +139,20 @@ class UnsafeCast extends Cast { 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 `U` the list + * of fields of `U` is a prefix of the list of fields of `T`. + * For example, if `T` is `struct { unsigned char x; int y; };` + * and `U` is `struct { unsigned char uc; };`. + */ bindingset[this, t] pragma[inline_late] predicate compatibleWith(Type t) { From d7dc73e18b859114bf5963ba7139d01e41e99879 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 28 Feb 2024 16:27:33 +0100 Subject: [PATCH 195/430] C#: Remove the CIL related parts of the Disposal tests. --- .../library-tests/commons/Disposal/Class1.cs_ | 42 ------------------ .../commons/Disposal/Disposal.cs | 6 +-- .../commons/Disposal/DisposalTests.dll | Bin 4096 -> 0 bytes .../commons/Disposal/DisposedFields.expected | 1 - .../commons/Disposal/DisposedFields.ql | 10 ----- .../Disposal/DisposedParameter.expected | 9 ++-- .../commons/Disposal/DisposedParameter.ql | 2 +- .../Disposal/DisposedVariables.expected | 2 +- .../Disposal/UndisposedParameter.expected | 5 +-- .../commons/Disposal/UndisposedParameter.ql | 2 +- .../library-tests/commons/Disposal/options | 2 +- 11 files changed, 11 insertions(+), 70 deletions(-) delete mode 100644 csharp/ql/test/library-tests/commons/Disposal/Class1.cs_ delete mode 100644 csharp/ql/test/library-tests/commons/Disposal/DisposalTests.dll delete mode 100644 csharp/ql/test/library-tests/commons/Disposal/DisposedFields.expected delete mode 100644 csharp/ql/test/library-tests/commons/Disposal/DisposedFields.ql 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 f731c5af9e1100bb3f30338cab4259f9ae8cd137..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeHKU2GiH75-+u-Z&01iPJ)?qAoA-~|b_4^6*wXVz=S zP1GXsf_m2X-1B$OJ?GpzbH-B-oJI$LG{@!3z?+-}Mm4@RIz@HQ&F6aX`s(wyylLz| ze@k)B3C%{}*8;n4R&3AnBeSf`py`>8XXXzS%(`Dy*4nk*TN2kZ6Tp6>1IIsE^|#h; zpJB7P#ux;;D9OaqXKv+ea*T2S>olE;;}(I$ui+Fi1{HET zwoww2Xg9|a7-bq(pj@AZ5-W~zh_4=wB`^w%FJUzqNnHsNTMC^xV*;;s0)_~`2Xtd# zb87ny0a zk>qz`*c!Bk28Xh{B*0F%#2e|h|54yc&U=I|M1kYgLa}&z6qTaJg~hMqsrt|1^ehLtKxwWaWxbuaApm(zL`RMkZxiS60r99 zKeWrPLe6eP%|L}qM1_SgQg!QK(~F$C!qh@>p`j2Pa8~7JttM;7BHrF|Gg24}Lsc)k z3q>bdDlXbVO+|b8npG$L;5RGn_d2dRtb)+-y_L#IZ`Kd$c0{G^Uezk+d$Ufh8ECt< zlbl~~IIb2RRIWX*sj#hYMLZL*DwSxZLLAuMLR*oPL(3zl?6^*}M4MD6EGTyt%L`~F zvGYMsifFq<6-J>|b=|~vafzCBRYg*6)jOQArGAkLU{xYNXj$eRyXN^}z_{=5Rh#-|?#fdl2^+%djD={qib{M6HD?)~$(|M>bdd;W8zO~dHw zFky6(SifG_p03yKKKj`D3*EarGQC}^%#_hP(mSH(uHLRr805R+hYQ#wZ-8Rzh9iO9 znD)Ji`HE^tcE!2CKN%XdTcz*u?FRa+>4{HMDN-Q z(<};l4XjUhTgM$3G>HSALW{9Ju1(<@!*#*re@?l+2lCG-g!p)TLKc- z1`cUGeMEiwMVlx&>2}>_aj=jt3?F~_rVSTPPoJBAcH^b~iFd_EZg=TW$U9!D*lx34 z3jJnKQKdlf0W9STb9T_!Sz4Au$uA!-=@d$yio&EKtiy6Mt5GeZuy1U~$n8k>{d#w@ zujKaPD{t+&^zxI>*Uo?Q(Ol9$CEO>3HicRVtv(xTj^_Lz@48dACjlmk!TVrrPwVH9wbcmfAWP4Y`? zn*1d3-uSBvZ>7KaSNs;16BUT(yJJT8?ImutG_S1=!$v?q4*S2NPY<*3wSJ3URixIY zG^E}}L_42c46mj4(J8wj0dA+t3bzW;KI)=uw7_a4Hkp0zIjQ22o1oYj`FUu}BxHx3b zUfN5AB5mvGsM---_4n(&4kU7^tW=aF=$}lGoMiJgC2Rmao0CQtdi{-w;yMG1f6;j&+{2%j`_v e-R0G7uaO%62*8a0XZXV}e+0SwKZXCf0{;eT1xqLZ 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..b5b9b1aa40e 100644 --- a/csharp/ql/test/library-tests/commons/Disposal/DisposedParameter.ql +++ b/csharp/ql/test/library-tests/commons/Disposal/DisposedParameter.ql @@ -5,5 +5,5 @@ from DotNet::Callable c, DotNet::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..dcdf9ae1eac 100644 --- a/csharp/ql/test/library-tests/commons/Disposal/UndisposedParameter.ql +++ b/csharp/ql/test/library-tests/commons/Disposal/UndisposedParameter.ql @@ -6,5 +6,5 @@ from DotNet::Callable c, DotNet::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 From c606ab09a57270f0eced7b1856f4577cc54994e3 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 27 Feb 2024 13:08:52 +0100 Subject: [PATCH 196/430] C#: Copy dotnet.Callable implementation. --- csharp/ql/lib/semmle/code/csharp/Callable.qll | 111 ++++++++++++++++-- 1 file changed, 99 insertions(+), 12 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/Callable.qll b/csharp/ql/lib/semmle/code/csharp/Callable.qll index 89f29458cc9..ec8582db4ab 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] + private string getDeclaringTypeLabel() { result = this.getDeclaringType().getLabel() } + + pragma[noinline] + private string getParameterTypeLabelNonGeneric(int p) { + not this instanceof Generic and + result = this.getParameter(p).getType().getLabel() + } + + language[monotonicAggregates] + pragma[nomagic] + private string getMethodParamListNonGeneric() { + result = + concat(int p | + p in [0 .. this.getNumberOfParameters() - 1] + | + this.getParameterTypeLabelNonGeneric(p), "," order by p + ) + } + + pragma[noinline] + private string getParameterTypeLabelGeneric(int p) { + this instanceof Generic and + result = this.getParameter(p).getType().getLabel() + } + + language[monotonicAggregates] + pragma[nomagic] + private string getMethodParamListGeneric() { + result = + concat(int p | + p in [0 .. this.getNumberOfParameters() - 1] + | + this.getParameterTypeLabelGeneric(p), "," order by p + ) + } + + pragma[noinline] + private string getLabelNonGeneric() { + not this instanceof Generic and + result = + this.getReturnTypeLabel() + " " + this.getDeclaringTypeLabel() + "." + + this.getUndecoratedName() + "(" + this.getMethodParamListNonGeneric() + ")" + } + + pragma[noinline] + private string getLabelGeneric() { + result = + this.getReturnTypeLabel() + " " + this.getDeclaringTypeLabel() + "." + + this.getUndecoratedName() + getGenericsLabel(this) + "(" + this.getMethodParamListGeneric() + + ")" + } + + final override string getLabel() { + result = this.getLabelNonGeneric() or + result = this.getLabelGeneric() + } + + 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.(Member).isPublic() and + not this.(Member).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() } } From cdf3d470319b9700209ebb88f5ee71b91dcbfcf3 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 27 Feb 2024 13:21:51 +0100 Subject: [PATCH 197/430] C#: Copy dotnet.Element implementation. --- csharp/ql/lib/semmle/code/csharp/Element.qll | 148 ++++++++++++++++++- 1 file changed, 143 insertions(+), 5 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/Element.qll b/csharp/ql/lib/semmle/code/csharp/Element.qll index e2f14379472..71fd3ec47c9 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". + */ + 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 + string getLabel() { none() } + + /** Holds if `other` has the same metadata handle in the same assembly. */ + 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. + */ + predicate compiledFromSource() { + not this.fromSource() and + exists(NamedElement other | other != this | + this.matchesHandle(other) and + other.fromSource() + ) + } + + override string toString() { result = this.getName() } +} From 215808d7e9863e9301dbce68de4acb90775bffbe Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 27 Feb 2024 13:34:42 +0100 Subject: [PATCH 198/430] C#: Copy dotnet.Declaration implementation. --- csharp/ql/lib/semmle/code/csharp/Member.qll | 69 +++++++++++++++++-- csharp/ql/lib/semmle/code/csharp/Property.qll | 2 +- 2 files changed, 65 insertions(+), 6 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/Member.qll b/csharp/ql/lib/semmle/code/csharp/Member.qll index 13b8d1ca4bd..c9489eed270 100644 --- a/csharp/ql/lib/semmle/code/csharp/Member.qll +++ b/csharp/ql/lib/semmle/code/csharp/Member.qll @@ -26,8 +26,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 +260,54 @@ 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 } + /** Holds if this member is declared `public`. */ override predicate isPublic() { Modifiable.super.isPublic() } + /** Holds if this member is declared `protected.` */ override predicate isProtected() { Modifiable.super.isProtected() } + /** Holds if this member is `private`. */ override predicate isPrivate() { Modifiable.super.isPrivate() } + /** Holds if this member is `internal`. */ override predicate isInternal() { Modifiable.super.isInternal() } + /** Holds if this member is `sealed`. */ override predicate isSealed() { Modifiable.super.isSealed() } + /** Holds if this member is `abstract`. */ override predicate isAbstract() { Modifiable.super.isAbstract() } + /** Holds if this member is `static`. */ override predicate isStatic() { Modifiable.super.isStatic() } + /** Holds if this member is declared `required`. */ override predicate isRequired() { Modifiable.super.isRequired() } + /** Holds if this member is declared `file` local. */ 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) } } diff --git a/csharp/ql/lib/semmle/code/csharp/Property.qll b/csharp/ql/lib/semmle/code/csharp/Property.qll index bdeb9832d3f..c922ffa5e65 100644 --- a/csharp/ql/lib/semmle/code/csharp/Property.qll +++ b/csharp/ql/lib/semmle/code/csharp/Property.qll @@ -113,7 +113,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, _, _, _) } From eb5cb2a7bf1711b6b8a7b53e58455369376095e2 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 27 Feb 2024 13:44:28 +0100 Subject: [PATCH 199/430] C#: Copy dotnet.Expr implementation. --- .../ql/lib/semmle/code/csharp/exprs/Call.qll | 21 ++++++++++++------- .../ql/lib/semmle/code/csharp/exprs/Expr.qll | 13 +++++++++--- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll index 169658ad107..cf0fb2ea8cf 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(DotNet::Parameter p) { // Appears in the positional part of the call result = this.getImplicitArgument(p) or @@ -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..164a91bde12 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll @@ -38,11 +38,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 +53,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 +91,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. */ From 7ba25b23a59a66985503b270d4e1110e902cd2fb Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 27 Feb 2024 13:51:59 +0100 Subject: [PATCH 200/430] C#: Copy dotnet.Generics implementation. --- csharp/ql/lib/semmle/code/csharp/Generics.qll | 65 +++++++++++++++---- 1 file changed, 54 insertions(+), 11 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/Generics.qll b/csharp/ql/lib/semmle/code/csharp/Generics.qll index c4c2363f1d1..788565e54ba 100644 --- a/csharp/ql/lib/semmle/code/csharp/Generics.qll +++ b/csharp/ql/lib/semmle/code/csharp/Generics.qll @@ -23,7 +23,7 @@ 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 +37,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 +74,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. + */ +string getGenericsLabel(Generic g) { + result = "`" + g.(UnboundGeneric).getNumberOfTypeParameters() + or + result = "<" + typeArgs(g) + ">" +} + +pragma[noinline] +private string getTypeArgumentLabel(ConstructedGeneric generic, int p) { + result = generic.getTypeArgument(p).getLabel() +} + +language[monotonicAggregates] +pragma[nomagic] +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. */ From 92447dc74371b1a54e61175e2d8eacdf88ac5533 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 27 Feb 2024 13:57:17 +0100 Subject: [PATCH 201/430] C#: Copy dotnet.Namespace implementation. --- csharp/ql/lib/semmle/code/csharp/Generics.qll | 1 - .../ql/lib/semmle/code/csharp/Namespace.qll | 54 ++++++++++++++++--- 2 files changed, 48 insertions(+), 7 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/Generics.qll b/csharp/ql/lib/semmle/code/csharp/Generics.qll index 788565e54ba..4bc03eac80c 100644 --- a/csharp/ql/lib/semmle/code/csharp/Generics.qll +++ b/csharp/ql/lib/semmle/code/csharp/Generics.qll @@ -16,7 +16,6 @@ import Location import Namespace private import commons.QualifiedName -private import dotnet private import TypeRef /** diff --git a/csharp/ql/lib/semmle/code/csharp/Namespace.qll b/csharp/ql/lib/semmle/code/csharp/Namespace.qll index dddb59af119..71fc4f92b16 100644 --- a/csharp/ql/lib/semmle/code/csharp/Namespace.qll +++ b/csharp/ql/lib/semmle/code/csharp/Namespace.qll @@ -1,5 +1,6 @@ /** Provides classes for namespaces. */ +private import semmle.code.csharp.commons.QualifiedName import Element import Type private import dotnet @@ -18,24 +19,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 +144,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) + ) + } } /** From 81ce8dc02defe97e88d69fb73e2a44763bca5aeb Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 27 Feb 2024 14:00:24 +0100 Subject: [PATCH 202/430] C#: Copy dotnet.Parameterizable implementation. --- csharp/ql/lib/semmle/code/csharp/Member.qll | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/Member.qll b/csharp/ql/lib/semmle/code/csharp/Member.qll index c9489eed270..19425b48d91 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 @@ -536,10 +535,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 From 6178acc0704c10e68a1f57a87a0d174ad4ed9f8d Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 27 Feb 2024 14:16:45 +0100 Subject: [PATCH 203/430] C#: Copy dotnet.Type implementation. --- csharp/ql/lib/semmle/code/csharp/Generics.qll | 10 +++- csharp/ql/lib/semmle/code/csharp/Type.qll | 59 +++++++++++++++---- 2 files changed, 55 insertions(+), 14 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/Generics.qll b/csharp/ql/lib/semmle/code/csharp/Generics.qll index 4bc03eac80c..ae131ca27a7 100644 --- a/csharp/ql/lib/semmle/code/csharp/Generics.qll +++ b/csharp/ql/lib/semmle/code/csharp/Generics.qll @@ -202,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 } @@ -258,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, _, _) } + 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/Type.qll b/csharp/ql/lib/semmle/code/csharp/Type.qll index 00a805c0858..93bc953bd7c 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, _) } + private string getPrefixWithTypes() { + result = this.getDeclaringType().getLabel() + "." + or + if this.getDeclaringNamespace().isGlobalNamespace() + then result = "" + else result = this.getDeclaringNamespace().getFullName() + "." + } + + pragma[noinline] + private string getLabelNonGeneric() { + not this instanceof Generic and + result = this.getPrefixWithTypes() + this.getUndecoratedName() + } + + pragma[noinline] + private string getLabelGeneric() { + result = this.getPrefixWithTypes() + this.getUndecoratedName() + getGenericsLabel(this) + } + + 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() } } @@ -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)) } + 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) } + 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" } } From 1638183d18ed8b2e24241c565d46cfee734e7b7e Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 27 Feb 2024 14:23:14 +0100 Subject: [PATCH 204/430] C#: Copy dotnet.Variable implementation. --- csharp/ql/lib/semmle/code/csharp/Variable.qll | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/Variable.qll b/csharp/ql/lib/semmle/code/csharp/Variable.qll index 366aad81b78..fc36f547997 100644 --- a/csharp/ql/lib/semmle/code/csharp/Variable.qll +++ b/csharp/ql/lib/semmle/code/csharp/Variable.qll @@ -14,11 +14,12 @@ 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 +88,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 +102,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 +140,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. @@ -193,7 +195,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) } @@ -396,9 +398,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 From 58a1353ddc4fdba5b70ebebc0186afcc321c5592 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 27 Feb 2024 15:28:08 +0100 Subject: [PATCH 205/430] C#: Clean up implementation and remove CIL dataflow implementation. --- csharp/ql/lib/semmle/code/cil/Declaration.qll | 4 +- .../ql/lib/semmle/code/csharp/Namespace.qll | 1 - csharp/ql/lib/semmle/code/csharp/Property.qll | 4 - csharp/ql/lib/semmle/code/csharp/Variable.qll | 1 - .../semmle/code/csharp/commons/Disposal.qll | 50 +---- .../code/csharp/commons/QualifiedName.qll | 5 +- .../semmle/code/csharp/controlflow/Guards.qll | 18 +- .../controlflow/internal/NonReturning.qll | 11 -- .../dataflow/internal/CallableReturns.qll | 14 +- .../dataflow/internal/DataFlowDispatch.qll | 71 +------ .../dataflow/internal/DataFlowPrivate.qll | 173 ++---------------- .../dataflow/internal/DataFlowPublic.qll | 26 +-- .../internal/TaintTrackingPrivate.qll | 14 -- .../code/csharp/dispatch/RuntimeCallable.qll | 11 +- .../ql/lib/semmle/code/csharp/exprs/Call.qll | 4 +- .../ql/lib/semmle/code/csharp/exprs/Expr.qll | 5 +- .../lib/semmle/code/csharp/exprs/Literal.qll | 9 +- csharp/ql/src/Telemetry/TestLibrary.qll | 1 - .../internal/CaptureModelsSpecific.qll | 3 +- .../CaptureTypeBasedSummaryModels.qll | 23 ++- 20 files changed, 68 insertions(+), 380 deletions(-) diff --git a/csharp/ql/lib/semmle/code/cil/Declaration.qll b/csharp/ql/lib/semmle/code/cil/Declaration.qll index 55c4ab8b578..7c321f214d7 100644 --- a/csharp/ql/lib/semmle/code/cil/Declaration.qll +++ b/csharp/ql/lib/semmle/code/cil/Declaration.qll @@ -42,7 +42,9 @@ class Declaration extends DotNet::Declaration, Element, @cil_declaration { } } -private CS::Declaration toCSharpNonTypeParameter(Declaration d) { result.matchesHandle(d) } +private CS::Declaration toCSharpNonTypeParameter(Declaration d) { + result.(DotNet::Declaration).matchesHandle(d) +} private CS::TypeParameter toCSharpTypeParameter(TypeParameter tp) { toCSharpTypeParameterJoin(tp, result.getIndex(), result.getGeneric()) diff --git a/csharp/ql/lib/semmle/code/csharp/Namespace.qll b/csharp/ql/lib/semmle/code/csharp/Namespace.qll index 71fc4f92b16..002ce444b3f 100644 --- a/csharp/ql/lib/semmle/code/csharp/Namespace.qll +++ b/csharp/ql/lib/semmle/code/csharp/Namespace.qll @@ -3,7 +3,6 @@ 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`). diff --git a/csharp/ql/lib/semmle/code/csharp/Property.qll b/csharp/ql/lib/semmle/code/csharp/Property.qll index c922ffa5e65..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 @@ -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/Variable.qll b/csharp/ql/lib/semmle/code/csharp/Variable.qll index fc36f547997..4bef47056ef 100644 --- a/csharp/ql/lib/semmle/code/csharp/Variable.qll +++ b/csharp/ql/lib/semmle/code/csharp/Variable.qll @@ -7,7 +7,6 @@ import Assignable import Callable import Element import Type -private import dotnet private import semmle.code.csharp.ExprOrStmtParent private import TypeRef 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..43bb8843326 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll @@ -4,7 +4,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 +843,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 +853,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 +878,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/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/DataFlowDispatch.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll index c4b3b3261d4..f86026f19fd 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,29 +12,12 @@ 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) { + exists(Callable unboundDecl | unboundDecl = c.getUnboundDeclaration() | + unboundDecl.hasBody() and + unboundDecl.getFile().fromSource() and + result = unboundDecl ) } @@ -67,7 +48,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 +62,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 +174,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 +185,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 +212,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 +226,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 +324,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/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index c2e845965be..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() - ) } } @@ -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 @@ -731,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 @@ -812,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 @@ -1115,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() } } @@ -1193,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 @@ -1205,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 @@ -1375,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; @@ -1468,7 +1343,7 @@ private module ParameterNodes { * flow graph. */ class ExplicitParameterNode extends ParameterNodeImpl, TExplicitParameterNode { - private DotNet::Parameter parameter; + private Parameter parameter; ExplicitParameterNode() { this = TExplicitParameterNode(parameter) } @@ -1486,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() } @@ -1543,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() } @@ -1612,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 | @@ -1625,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()) - ) } } @@ -1747,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() ) } @@ -1881,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) { @@ -1973,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() } @@ -2134,8 +1995,6 @@ class FieldOrProperty extends Assignable, Modifiable { or p.isAutoImplementedReadOnly() or - p.matchesHandle(any(CIL::TrivialProperty tp)) - or p.getDeclaringType() instanceof AnonymousClass ) ) @@ -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) { 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..d21af3179b1 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() { @@ -67,8 +65,6 @@ class Node extends TNode { } } -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`, @@ -100,7 +92,7 @@ class ExprNode extends Node, TExprNode_ { */ 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()) @@ -120,12 +112,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 +138,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/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..0e11e007d55 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 ( @@ -24,13 +22,10 @@ class RuntimeCallable extends DotNet::Callable { /** A run-time method. */ class RuntimeMethod extends RuntimeCallable { - RuntimeMethod() { - this instanceof Method or - this instanceof CIL::Method - } + RuntimeMethod() { this instanceof Method } /** Holds if the method is `static`. */ - predicate isStatic() { this.(Method).isStatic() or this.(CIL::Method).isStatic() } + predicate isStatic() { this.(Method).isStatic() } } /** A run-time instance method. */ diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll index cf0fb2ea8cf..7a3cf0ea8d9 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll @@ -64,7 +64,7 @@ class Call extends Expr, @call { * consider default arguments. */ cached - Expr getArgumentForParameter(DotNet::Parameter p) { + Expr getArgumentForParameter(Parameter p) { // Appears in the positional part of the call result = this.getImplicitArgument(p) or @@ -74,7 +74,7 @@ class Call extends 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 ( diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll index 164a91bde12..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 @@ -950,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/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/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) From 37677142b9981549c7ff35b087cab29ff0e7e8ed Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 27 Feb 2024 16:06:34 +0100 Subject: [PATCH 206/430] C#: Update QL tests. --- .../consistency-queries/DataFlowConsistency.ql | 7 +------ .../cil/consistency/Handles.expected | 18 +++++++++--------- .../library-tests/cil/consistency/Handles.ql | 2 +- .../commons/Disposal/DisposedParameter.ql | 4 ++-- .../commons/Disposal/UndisposedParameter.ql | 5 ++--- .../ql/test/library-tests/members/GetLabel.ql | 2 +- 6 files changed, 16 insertions(+), 22 deletions(-) diff --git a/csharp/ql/consistency-queries/DataFlowConsistency.ql b/csharp/ql/consistency-queries/DataFlowConsistency.ql index 59e5953f31f..55066e8024a 100644 --- a/csharp/ql/consistency-queries/DataFlowConsistency.ql +++ b/csharp/ql/consistency-queries/DataFlowConsistency.ql @@ -31,10 +31,7 @@ private module Input implements InputSig { n instanceof FlowInsensitiveFieldNode } - predicate missingLocationExclude(Node n) { - // Some CIL methods are missing locations - n.asParameter() instanceof CIL::Parameter - } + predicate missingLocationExclude(Node n) { none() } predicate postWithInFlowExclude(Node n) { n instanceof FlowSummaryNode @@ -48,8 +45,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) { diff --git a/csharp/ql/test/library-tests/cil/consistency/Handles.expected b/csharp/ql/test/library-tests/cil/consistency/Handles.expected index d48a89c24a3..3da5bd2faf6 100644 --- a/csharp/ql/test/library-tests/cil/consistency/Handles.expected +++ b/csharp/ql/test/library-tests/cil/consistency/Handles.expected @@ -3,12 +3,12 @@ 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() | +| System.Boolean System.Object.Equals(System.Object) | System.Boolean System.Object.Equals(System.Object) | +| System.Boolean System.Object.Equals(System.Object,System.Object) | System.Boolean System.Object.Equals(System.Object,System.Object) | +| System.Boolean System.Object.ReferenceEquals(System.Object,System.Object) | System.Boolean System.Object.ReferenceEquals(System.Object,System.Object) | +| System.Int32 System.Object.GetHashCode() | System.Int32 System.Object.GetHashCode() | +| System.Object System.Object.MemberwiseClone() | System.Object System.Object.MemberwiseClone() | +| System.String System.Object.ToString() | System.String System.Object.ToString() | +| System.Type System.Object.GetType() | System.Type System.Object.GetType() | +| System.Void System.Object..ctor() | System.Void System.Object..ctor() | +| System.Void System.Object.Finalize() | 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 index 392d07244e2..080f0409f3c 100644 --- a/csharp/ql/test/library-tests/cil/consistency/Handles.ql +++ b/csharp/ql/test/library-tests/cil/consistency/Handles.ql @@ -59,7 +59,7 @@ query predicate csharpLocationViolation(Element e) { } query predicate matchingObjectMethods(string s1, string s2) { - exists(Callable m1, CIL::Method m2 | + exists(DotNet::Callable m1, CIL::Method m2 | m1.getDeclaringType().hasFullyQualifiedName("System", "Object") and m1.matchesHandle(m2) and s1 = m1.toStringWithTypes() and diff --git a/csharp/ql/test/library-tests/commons/Disposal/DisposedParameter.ql b/csharp/ql/test/library-tests/commons/Disposal/DisposedParameter.ql index b5b9b1aa40e..634f4674d7d 100644 --- a/csharp/ql/test/library-tests/commons/Disposal/DisposedParameter.ql +++ b/csharp/ql/test/library-tests/commons/Disposal/DisposedParameter.ql @@ -1,7 +1,7 @@ -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 diff --git a/csharp/ql/test/library-tests/commons/Disposal/UndisposedParameter.ql b/csharp/ql/test/library-tests/commons/Disposal/UndisposedParameter.ql index dcdf9ae1eac..72203a8495a 100644 --- a/csharp/ql/test/library-tests/commons/Disposal/UndisposedParameter.ql +++ b/csharp/ql/test/library-tests/commons/Disposal/UndisposedParameter.ql @@ -1,8 +1,7 @@ -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 diff --git a/csharp/ql/test/library-tests/members/GetLabel.ql b/csharp/ql/test/library-tests/members/GetLabel.ql index 0199c4925ac..219a2702636 100644 --- a/csharp/ql/test/library-tests/members/GetLabel.ql +++ b/csharp/ql/test/library-tests/members/GetLabel.ql @@ -1,4 +1,4 @@ -import dotnet::DotNet +import csharp from NamedElement ne where ne.fromSource() From 16375b0fe78a5b3963c2d7ed0a2d7399cfeedbd7 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 28 Feb 2024 16:33:50 +0100 Subject: [PATCH 207/430] C#: Remove CIL dataflow tests. --- .../cil/dataflow/CallableReturns.expected | 113 ----------- .../cil/dataflow/CallableReturns.ql | 39 ---- .../cil/dataflow/ControlFlow.expected | 2 - .../library-tests/cil/dataflow/ControlFlow.ql | 6 - .../library-tests/cil/dataflow/DataFlow.cs_ | 178 ------------------ .../library-tests/cil/dataflow/DataFlow.dll | Bin 5632 -> 0 bytes .../cil/dataflow/DataFlow.expected | 146 -------------- .../library-tests/cil/dataflow/DataFlow.ql | 49 ----- .../cil/dataflow/DataFlowUnoptimized.cs_ | 24 --- .../cil/dataflow/DataFlowUnoptimized.dll | Bin 3584 -> 0 bytes .../cil/dataflow/Nullness.expected | 42 ----- .../library-tests/cil/dataflow/Nullness.ql | 10 - .../cil/dataflow/TaintTracking.expected | 28 --- .../cil/dataflow/TaintTracking.ql | 21 --- .../cil/dataflow/TrivialProperties.expected | 11 -- .../cil/dataflow/TrivialProperties.ql | 15 -- .../library-tests/cil/dataflow/dataflow.cs | 110 ----------- .../test/library-tests/cil/dataflow/options | 1 - 18 files changed, 795 deletions(-) delete mode 100644 csharp/ql/test/library-tests/cil/dataflow/CallableReturns.expected delete mode 100644 csharp/ql/test/library-tests/cil/dataflow/CallableReturns.ql delete mode 100644 csharp/ql/test/library-tests/cil/dataflow/ControlFlow.expected delete mode 100644 csharp/ql/test/library-tests/cil/dataflow/ControlFlow.ql delete mode 100644 csharp/ql/test/library-tests/cil/dataflow/DataFlow.cs_ delete mode 100755 csharp/ql/test/library-tests/cil/dataflow/DataFlow.dll delete mode 100644 csharp/ql/test/library-tests/cil/dataflow/DataFlow.expected delete mode 100644 csharp/ql/test/library-tests/cil/dataflow/DataFlow.ql delete mode 100644 csharp/ql/test/library-tests/cil/dataflow/DataFlowUnoptimized.cs_ delete mode 100644 csharp/ql/test/library-tests/cil/dataflow/DataFlowUnoptimized.dll delete mode 100644 csharp/ql/test/library-tests/cil/dataflow/Nullness.expected delete mode 100644 csharp/ql/test/library-tests/cil/dataflow/Nullness.ql delete mode 100644 csharp/ql/test/library-tests/cil/dataflow/TaintTracking.expected delete mode 100644 csharp/ql/test/library-tests/cil/dataflow/TaintTracking.ql delete mode 100644 csharp/ql/test/library-tests/cil/dataflow/TrivialProperties.expected delete mode 100644 csharp/ql/test/library-tests/cil/dataflow/TrivialProperties.ql delete mode 100644 csharp/ql/test/library-tests/cil/dataflow/dataflow.cs delete mode 100644 csharp/ql/test/library-tests/cil/dataflow/options 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.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.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 2f35b3a3ff2c692378b6c1091c6524f6c123b0b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5632 zcmeHLYit}>6+U-%y;*PYCaImYapPnXJIQv{t{mG9DU`By95+UGoMs&-l!86GJK0P! zp0Q?Toj57TR5T(I;!zb;Dj}6WsN$u9DoA+(H8>S^ku=;3RV;lgRHg61iP0+LuV=kot^B`eI3v`^@C;NF>kZvk5zYz(^!>dn63w zDpHkX;|~k7+qjAi5etN&?mDGD5~7P7^wSdj~;`%jnXIMyO>;r@qDPmZHL z3;Yb@G1o7n=7OcD&TM~9K}GZrHB39=J-HbWuH?+-xcG=<8$KraXvpB<_;|U-OZJN@ zu2VFpP8%s&7CNT-jV)A1H!1pt@lTbagCZXy<`W|67P?)rYX zdlOA))G4~df(+^wluEFrK|2L)(P)pLk7>&RLBAljOwv7wY^!3~t8@@FqYlzZlY75L zuc;zJl;5xoK9=7^1P1*9RMC3A zUGlVIo2Ri``wT_fKvP)heMW{334f2!QK6GUAE7?AmEKQZHnwBtHS%;_NVy)_G;WvcwVG9S?KN3!Zbgpoow8l)vT)&={#4zIoJE_>pej4A z6RoUimo2w$Q~Z*maVxSWT>ny`>bh%LmxRtaK~%R~ovn5AKw8_F9n1zH8?CUk5=QnS zO?v3ism@^1CC+1)EA|qHPK8S32NatX#vQBX`C;T#LL@oxFClZ&c68pahHxx%-+;P> z9%Z4CypkO(I~6jpdNRh^(! zjL|k_tzMc!Sy4^YNOHWiINg%>bIe?pT=UXytjD(Gua~b|yKS~{mfGCN;MyduDQGH) zwt3`JL?(Gu$5#!$YeeF;O5Qn3=gFZEvY0m7SdfHhU8gcQ3w%g6Edsf;A}7JORzCED z*I$T=&zyMaw+DKj=%J*kR61dj>HxECTauK@;#kUNv*~YNd2DXy$Sc>4lwqXUW*43; zj+k9&w2MhL+hMXPXgZySAkAj!L=L7onC2**R{9>cn?G4*jU8tKYYE9~uD*EM73>U& zFsZmI>U$CMk1}sE_r}t=KgF8)qkb^%y3;u8;*-L*Wk0d@)_(X{cXNBAzyGd;zv*x% z=GR19iNAaYH;}X0aXe>>xW~r{WD)og&^ap6Jm@hx1#S{I?GwP0pcC<}o4%j?%fI;D zxxTzt3;1o);#Q>NpbB0s3gE}V+Opx(qjOlfTn6MFGz+Z-X$ZZAHR(X>iJs_%?BUs1C0o{v;RMUPOy@ym0KTB=>n6Mqh>RYp&gKYrowO9u6 z#$S7g-i3FslF>wB>mha=sGy6$MB_3R3%$D-&n2|3g5%o&ZFl(8kuDD=6#LGxK6@{j|l1*e}oxnAKluxc#K3xq|GSC-+C&T cZ`uw`Z_*bl>xKb#UA7|8fTY4fHkl^8f$< 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; - -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 b290ece70652d522e79bc17a90f7ac74a4d46580..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 zcmeHJOKcle6g^|Rj+@ZXv}u$Gsh!5D2u&HeO@siU;wDZYkRNf9R;W@lwx`aZ@k}%` zZa)070f`-JBv!Cw(FKU85@HvDL?sriX?JXpV2M}|&V4hEohSmeOUP~Kz56-uzVq(; zIMZ)_j3j^*zujG6o4rV0wg22~G2D6XUMIdhe*gToHg*5}!ipW}tG-wD&6-{|UDpfs zlBN4~SGQfgFk94XUd1v_oM<12Q_qb9Q(6-B%fH@i%=QrddWV(+()7qj>6ZaIzdS$S zq|y@+Z*d5JC0lIi7fB-jfk5SdvyV-2QGUzwA+9mur6GqhiA zv5nAL4`~kyamLg-56n;Zvf&4QnPJ5(Pet&piD}ZEH+;+S2vl5`>6Bath!ZzT?>)ZJ!v*@ z&$cPVkk;Kkg!IL$iJo_5ctT3l4h|YEzBa1G%w%bIMvR;>oEyIU0u6F^*q-E&?0djF z><2|JhQ94q13`Sw$-3ER7mL`YF2^GK%Hm{!{dctG0A@!Wuf$%2F70}E0>{PpQyUh- zOv#y|@`}zqh!t09p?&On)WJn$GVDIQ1*PsE}>wC=7i&|ExO)nXxHpb ztD=0j5BSQS%Yap?SF2{pv95*OoKiisFy_@(ZO064&z-j%b6sgcGd^E;nb#5+LnYg> z!;NP2km-$z<6w_7iW@;_)nJrE&yNkGV4GFf3qrdbG?CL*xZ+iU1}2`@i1=B4(em%u zWh;mm!IQ;W(3~y3WtHVVqsxVd5IS7cc_QUZ{_^zCh2)FR6+Y|zK6`4Z`T!|i(=tgN z+A%6!U8%N2qBGg1b!NWayt&jj^6;ZXI>B&fMvJfdSveXDiJt4exjN&y+i@cggz^B!5++8dEuqNQZwcd=r#8u7+8NrDY$u{$ zU3`=J?XT$7Y>bThmt#}jqn5PFTVSg(s|lZZY~C@8IbGc5%@Y|=uh;^kCcOdUCU2z8 zsH@_@-PBLKFB&<8MA`IL56N^_VRC5v8$pRWaEXkxJ$!+)2PmsNtNZ5BiOul_H?d2^ z`b0Om}i@VZBV$Xafbc7L&6(T+bR7$=yRVZ;g33iK;MXg>iX% z1{K#SdaEkam_lzTwpFZZ=L8yYW;J}>ycBPbqcw2`>W7g qztjSFUX8iNIt4`5Sak;*WchF7IP^#!wE}wdXX1cd*CYAgRp4*OKt!DY 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; - -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 From 35b93063f9de516dc8f134d2b6824f9e5c372564 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 1 Mar 2024 16:14:21 +0100 Subject: [PATCH 208/430] C#: Deprecate dotnet and cil. --- .../DataFlowConsistency.ql | 1 - csharp/ql/lib/dotnet.qll | 2 +- csharp/ql/lib/semmle/code/cil/Access.qll | 34 ++--- csharp/ql/lib/semmle/code/cil/Attribute.qll | 4 +- csharp/ql/lib/semmle/code/cil/BasicBlock.qll | 29 +++-- .../lib/semmle/code/cil/CallableReturns.qll | 20 +-- .../lib/semmle/code/cil/ConsistencyChecks.qll | 118 +++++++++--------- csharp/ql/lib/semmle/code/cil/ControlFlow.qll | 14 +-- .../code/cil/CustomModifierReceiver.qll | 2 +- csharp/ql/lib/semmle/code/cil/DataFlow.qll | 10 +- csharp/ql/lib/semmle/code/cil/Declaration.qll | 18 +-- csharp/ql/lib/semmle/code/cil/Element.qll | 4 +- csharp/ql/lib/semmle/code/cil/Generics.qll | 16 +-- csharp/ql/lib/semmle/code/cil/Handler.qll | 10 +- csharp/ql/lib/semmle/code/cil/Instruction.qll | 2 +- .../lib/semmle/code/cil/InstructionGroups.qll | 58 ++++----- .../ql/lib/semmle/code/cil/Instructions.qll | 2 +- csharp/ql/lib/semmle/code/cil/Method.qll | 28 ++--- .../lib/semmle/code/cil/Parameterizable.qll | 2 +- csharp/ql/lib/semmle/code/cil/Ssa.qll | 2 +- csharp/ql/lib/semmle/code/cil/Stubs.qll | 10 +- csharp/ql/lib/semmle/code/cil/Type.qll | 6 +- csharp/ql/lib/semmle/code/cil/Types.qll | 66 +++++----- csharp/ql/lib/semmle/code/cil/Variable.qll | 14 +-- .../lib/semmle/code/cil/internal/SsaImpl.qll | 18 +-- .../semmle/code/csharp/controlflow/Guards.qll | 1 - csharp/ql/lib/semmle/code/dotnet/Callable.qll | 10 +- .../ql/lib/semmle/code/dotnet/Declaration.qll | 8 +- csharp/ql/lib/semmle/code/dotnet/Element.qll | 4 +- csharp/ql/lib/semmle/code/dotnet/Expr.qll | 12 +- csharp/ql/lib/semmle/code/dotnet/Generics.qll | 12 +- .../ql/lib/semmle/code/dotnet/Namespace.qll | 4 +- .../semmle/code/dotnet/Parameterizable.qll | 2 +- csharp/ql/lib/semmle/code/dotnet/Type.qll | 10 +- csharp/ql/lib/semmle/code/dotnet/Utils.qll | 2 +- csharp/ql/lib/semmle/code/dotnet/Variable.qll | 6 +- .../library-tests/cil/attributes/attribute.ql | 8 +- .../library-tests/cil/consistency/Handles.ql | 14 +-- .../cil/consistency/consistency.ql | 5 +- .../ql/test/library-tests/cil/enums/enums.ql | 13 +- .../cil/functionPointers/functionPointers.ql | 14 ++- .../cil/init-only-prop/customModifiers.ql | 16 +-- .../cil/init-only-prop/setters.ql | 11 +- .../cil/pdbs/InstructionLocations.ql | 15 ++- .../library-tests/cil/pdbs/MethodLocations.ql | 19 +-- .../ql/test/library-tests/cil/pdbs/Stubs.ql | 4 +- .../cil/regressions/ConstructedMethods.ql | 10 +- .../cil/typeAnnotations/typeAnnotations.ql | 31 ++--- .../csharp11/cil/genericAttribute.ql | 13 +- .../library-tests/csharp11/cil/refField.ql | 2 +- 50 files changed, 386 insertions(+), 350 deletions(-) diff --git a/csharp/ql/consistency-queries/DataFlowConsistency.ql b/csharp/ql/consistency-queries/DataFlowConsistency.ql index 55066e8024a..77eb9e9902a 100644 --- a/csharp/ql/consistency-queries/DataFlowConsistency.ql +++ b/csharp/ql/consistency-queries/DataFlowConsistency.ql @@ -1,5 +1,4 @@ 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 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/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 7c321f214d7..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,16 +42,18 @@ class Declaration extends DotNet::Declaration, Element, @cil_declaration { } } -private CS::Declaration toCSharpNonTypeParameter(Declaration 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 @@ -62,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) } @@ -84,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. */ @@ -111,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() } @@ -121,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/controlflow/Guards.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll index 43bb8843326..313fabc0235 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll @@ -3,7 +3,6 @@ */ import csharp -private import cil private import ControlFlow::SuccessorTypes private import semmle.code.csharp.commons.Assertions private import semmle.code.csharp.commons.ComparisonTest 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/test/library-tests/cil/attributes/attribute.ql b/csharp/ql/test/library-tests/cil/attributes/attribute.ql index 99ba3c8af5e..76489b3c989 100644 --- a/csharp/ql/test/library-tests/cil/attributes/attribute.ql +++ b/csharp/ql/test/library-tests/cil/attributes/attribute.ql @@ -1,7 +1,7 @@ import semmle.code.cil.Attribute import semmle.code.cil.Declaration -private predicate isOsSpecific(Declaration d) { +deprecated private predicate isOsSpecific(Declaration d) { d.getFullyQualifiedName() .matches("%" + [ @@ -13,7 +13,7 @@ private predicate isOsSpecific(Declaration d) { ] + "%") } -query predicate attrNoArg(string dec, string attr) { +deprecated query predicate attrNoArg(string dec, string attr) { exists(Declaration d, Attribute a | not isOsSpecific(d) and a.getDeclaration() = d and @@ -24,7 +24,7 @@ query predicate attrNoArg(string dec, string attr) { ) } -query predicate attrArgNamed(string dec, string attr, string name, string value) { +deprecated query predicate attrArgNamed(string dec, string attr, string name, string value) { exists(Declaration d, Attribute a | a.getDeclaration() = d and not isOsSpecific(d) and @@ -35,7 +35,7 @@ query predicate attrArgNamed(string dec, string attr, string name, string value) ) } -query predicate attrArgPositional(string dec, string attr, int index, string value) { +deprecated query predicate attrArgPositional(string dec, string attr, int index, string value) { exists(Declaration d, Attribute a | a.getDeclaration() = d and not isOsSpecific(d) and diff --git a/csharp/ql/test/library-tests/cil/consistency/Handles.ql b/csharp/ql/test/library-tests/cil/consistency/Handles.ql index 080f0409f3c..79254c7e5ec 100644 --- a/csharp/ql/test/library-tests/cil/consistency/Handles.ql +++ b/csharp/ql/test/library-tests/cil/consistency/Handles.ql @@ -3,7 +3,7 @@ import cil import dotnet import semmle.code.csharp.commons.QualifiedName -class MetadataEntity extends DotNet::NamedElement, @metadata_entity { +deprecated class MetadataEntity extends DotNet::NamedElement, @metadata_entity { int getHandle() { metadata_handle(this, _, result) } predicate hasHandle() { exists(this.getHandle()) } @@ -11,7 +11,7 @@ class MetadataEntity extends DotNet::NamedElement, @metadata_entity { Assembly getAssembly() { metadata_handle(this, result, _) } } -query predicate tooManyHandles(string s) { +deprecated 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 @@ -19,7 +19,7 @@ query predicate tooManyHandles(string s) { ) } -private class UniqueMetadataEntity extends MetadataEntity { +deprecated private class UniqueMetadataEntity extends MetadataEntity { UniqueMetadataEntity() { // Tuple types such as `(,)` and `ValueTuple`2` share the same handle not this instanceof TupleType and @@ -30,7 +30,7 @@ private class UniqueMetadataEntity extends MetadataEntity { } } -query predicate tooManyMatchingHandles(string s) { +deprecated 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 @@ -39,7 +39,7 @@ query predicate tooManyMatchingHandles(string s) { ) } -query predicate missingCil(Element e) { +deprecated query predicate missingCil(Element e) { ( e instanceof Callable or @@ -52,13 +52,13 @@ query predicate missingCil(Element e) { not exists(CIL::Element ce | ce.(MetadataEntity).matchesHandle(e)) } -query predicate csharpLocationViolation(Element e) { +deprecated 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) { +deprecated query predicate matchingObjectMethods(string s1, string s2) { exists(DotNet::Callable m1, CIL::Method m2 | m1.getDeclaringType().hasFullyQualifiedName("System", "Object") and m1.matchesHandle(m2) and diff --git a/csharp/ql/test/library-tests/cil/consistency/consistency.ql b/csharp/ql/test/library-tests/cil/consistency/consistency.ql index 323be193c14..e7ece7c4e6e 100644 --- a/csharp/ql/test/library-tests/cil/consistency/consistency.ql +++ b/csharp/ql/test/library-tests/cil/consistency/consistency.ql @@ -1,5 +1,6 @@ import cil import semmle.code.cil.ConsistencyChecks -from ConsistencyViolation v -select v, v.getMessage() +deprecated query predicate consistencyViolation(ConsistencyViolation v, string message) { + message = v.getMessage() +} diff --git a/csharp/ql/test/library-tests/cil/enums/enums.ql b/csharp/ql/test/library-tests/cil/enums/enums.ql index 675aa69a91c..07a63dbc847 100644 --- a/csharp/ql/test/library-tests/cil/enums/enums.ql +++ b/csharp/ql/test/library-tests/cil/enums/enums.ql @@ -9,8 +9,11 @@ predicate osSpecific(string qualifier, string name) { ) } -from Enum e, string qualifier, string name -where - e.hasFullyQualifiedName(qualifier, name) and - not osSpecific(qualifier, name) -select getQualifiedName(qualifier, name), e.getUnderlyingType().toStringWithTypes() +deprecated query predicate enums(string qualifiedName, string type) { + exists(Enum e, string qualifier, string name | + e.hasFullyQualifiedName(qualifier, name) and + not osSpecific(qualifier, name) and + qualifiedName = getQualifiedName(qualifier, name) and + type = e.getUnderlyingType().toStringWithTypes() + ) +} diff --git a/csharp/ql/test/library-tests/cil/functionPointers/functionPointers.ql b/csharp/ql/test/library-tests/cil/functionPointers/functionPointers.ql index 5a22a65d5c0..e6a9219bf6c 100644 --- a/csharp/ql/test/library-tests/cil/functionPointers/functionPointers.ql +++ b/csharp/ql/test/library-tests/cil/functionPointers/functionPointers.ql @@ -3,16 +3,20 @@ 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" } +deprecated private string getKind(int kind) { + if kind = 1 then result = "modreq" else result = "modopt" +} bindingset[t, e] -private string getAnnotatedType(Type t, Element e) { +deprecated 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) { +deprecated 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 @@ -20,13 +24,13 @@ query predicate fnptr(string fnptr, int paramCount, string returnType, int calli ) } -query predicate params(string fnptr, int i, string param, string t) { +deprecated 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) { +deprecated query predicate modifiers(string fnptr, string modifier, string sKind) { exists(Type modType, int kind, FunctionPointerType fn, string qualifier, string name | fnptr = fn.toString() | 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 index ad4f9fd6cb5..3eeb5cf0697 100644 --- a/csharp/ql/test/library-tests/cil/init-only-prop/customModifiers.ql +++ b/csharp/ql/test/library-tests/cil/init-only-prop/customModifiers.ql @@ -2,14 +2,16 @@ 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" } +deprecated 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 | +deprecated query predicate customModifiers(string receiver, string modifier, string kind) { + exists(Type modType, CustomModifierReceiver cmr, string qualifier, string name, int k | receiver = cmr.toString() and - cil_custom_modifiers(cmr, modType, kind) and + cil_custom_modifiers(cmr, modType, k) and modType.hasFullyQualifiedName(qualifier, name) and - modifier = getQualifiedName(qualifier, name) + modifier = getQualifiedName(qualifier, name) and + kind = getKind(k) ) -select receiver, modifier, getKind(kind) +} 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 index b5721e243dd..06ab21392e3 100644 --- a/csharp/ql/test/library-tests/cil/init-only-prop/setters.ql +++ b/csharp/ql/test/library-tests/cil/init-only-prop/setters.ql @@ -1,8 +1,11 @@ import semmle.code.cil.Method import semmle.code.csharp.Location -private string getType(Setter s) { if s.isInitOnly() then result = "init" else result = "set" } +deprecated 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) +deprecated query predicate setters(Setter s, string type) { + s.getLocation().(Assembly).getName() = "cil-init-prop" and + type = getType(s) +} diff --git a/csharp/ql/test/library-tests/cil/pdbs/InstructionLocations.ql b/csharp/ql/test/library-tests/cil/pdbs/InstructionLocations.ql index 672e682752f..32170537789 100644 --- a/csharp/ql/test/library-tests/cil/pdbs/InstructionLocations.ql +++ b/csharp/ql/test/library-tests/cil/pdbs/InstructionLocations.ql @@ -2,13 +2,16 @@ 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) { +deprecated 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() +deprecated query predicate instructionLocations(string loc, string extra) { + exists(CIL::Instruction instruction, CIL::Location location | + location = instruction.getLocation() and + filterMethod(instruction.getImplementation().getMethod()) and + loc = location.toString() and + extra = instruction.toStringExtra() + ) +} diff --git a/csharp/ql/test/library-tests/cil/pdbs/MethodLocations.ql b/csharp/ql/test/library-tests/cil/pdbs/MethodLocations.ql index 5fa3d09d940..a301741f0cf 100644 --- a/csharp/ql/test/library-tests/cil/pdbs/MethodLocations.ql +++ b/csharp/ql/test/library-tests/cil/pdbs/MethodLocations.ql @@ -2,15 +2,18 @@ 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) { +deprecated 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 +deprecated query predicate methodLocations(string m, string loc, boolean primaryLocation) { + exists(CIL::Method method, CIL::Location location | + 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) and + m = method.toStringWithTypes() and + loc = location.toString() + ) +} diff --git a/csharp/ql/test/library-tests/cil/pdbs/Stubs.ql b/csharp/ql/test/library-tests/cil/pdbs/Stubs.ql index 23d873c0399..cfe897f1069 100644 --- a/csharp/ql/test/library-tests/cil/pdbs/Stubs.ql +++ b/csharp/ql/test/library-tests/cil/pdbs/Stubs.ql @@ -1,5 +1,3 @@ import cil::CIL -from Assembly asm -where assemblyIsStub(asm) -select asm +deprecated query predicate stubs(Assembly asm) { assemblyIsStub(asm) } diff --git a/csharp/ql/test/library-tests/cil/regressions/ConstructedMethods.ql b/csharp/ql/test/library-tests/cil/regressions/ConstructedMethods.ql index 912536aeb3a..d472708bb5e 100644 --- a/csharp/ql/test/library-tests/cil/regressions/ConstructedMethods.ql +++ b/csharp/ql/test/library-tests/cil/regressions/ConstructedMethods.ql @@ -1,7 +1,9 @@ import cil::CIL -from UnboundGenericMethod f, ConstructedMethod fc -where +deprecated query predicate constructedMethods( + UnboundGenericMethod f, ConstructedMethod fc, Type typeArgument +) { fc.getUnboundMethod() = f and - f.hasFullyQualifiedName("Methods", "Class1", "F") -select f, fc, fc.getTypeArgument(0) + f.hasFullyQualifiedName("Methods", "Class1", "F") and + typeArgument = fc.getTypeArgument(0) +} diff --git a/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.ql b/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.ql index cf93110bc65..d5f2ee7f7c3 100644 --- a/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.ql +++ b/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.ql @@ -2,7 +2,7 @@ import cil import semmle.code.csharp.commons.QualifiedName import semmle.code.cil.Type -private string elementType(Element e, string toString) { +deprecated private string elementType(Element e, string toString) { exists(string namespace, string type, string name | toString = getQualifiedName(namespace, type, name) | @@ -48,7 +48,7 @@ private string elementType(Element e, string toString) { toString = e.toString() } -private predicate exclude(string s) { +deprecated private predicate exclude(string s) { s in [ "Parameter 0 of Interop.libobjc.NSOperatingSystemVersion_objc_msgSend_stret", "Parameter 1 of Interop.procfs.TryParseStatusFile", @@ -77,17 +77,18 @@ private predicate exclude(string s) { ] } -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 +deprecated query predicate typeAnnotation(string toString, string type, int i) { + exists(Element e | + 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/csharp11/cil/genericAttribute.ql b/csharp/ql/test/library-tests/csharp11/cil/genericAttribute.ql index 1b80efa1d89..d386bb8ce0e 100644 --- a/csharp/ql/test/library-tests/csharp11/cil/genericAttribute.ql +++ b/csharp/ql/test/library-tests/csharp11/cil/genericAttribute.ql @@ -1,9 +1,14 @@ import semmle.code.cil.CIL -private string getTypeArguments(GenericAttribute a) { +deprecated 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) +deprecated query predicate genericAttribute( + GenericAttribute a, string name, int numArgs, string args +) { + a.getFile().getStem() = "assembly" and + name = a.getType().getName() and + numArgs = a.getNumberOfTypeArguments() and + args = getTypeArguments(a) +} diff --git a/csharp/ql/test/library-tests/csharp11/cil/refField.ql b/csharp/ql/test/library-tests/csharp11/cil/refField.ql index 32d7b295d62..3474beb4913 100644 --- a/csharp/ql/test/library-tests/csharp11/cil/refField.ql +++ b/csharp/ql/test/library-tests/csharp11/cil/refField.ql @@ -1,5 +1,5 @@ import cil -query predicate cilfields(CIL::Field f, string type) { +deprecated query predicate cilfields(CIL::Field f, string type) { f.isRef() and type = f.getType().toString() and f.getDeclaringType().getName() = "RefStruct" } From 7f6c84dda81e0ac568e5d538a1fd56ea30f4cb9a Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 4 Mar 2024 11:03:46 +0100 Subject: [PATCH 209/430] C#: Fix bad join order. --- .../code/csharp/dataflow/internal/DataFlowPublic.qll | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 d21af3179b1..bf30fe5112d 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll @@ -86,6 +86,12 @@ 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. @@ -95,7 +101,7 @@ class ParameterNode extends Node instanceof ParameterNodeImpl { Parameter getParameter() { exists(DataFlowCallable c, ParameterPosition ppos | super.isParameterOf(c, ppos) and - result = c.asCallable().getParameter(ppos.getPosition()) + isParameterOf0(c, ppos, result) ) } } From e3380aa545ea588aea82986d5492fde8519ae7ba Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 4 Mar 2024 11:14:10 +0100 Subject: [PATCH 210/430] C#: Add change note. --- .../lib/change-notes/2024-03-04-deprecate-dotnet-and-cil.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/lib/change-notes/2024-03-04-deprecate-dotnet-and-cil.md 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. From eda345a5b8d86c0945351b45ac9112337c6fdc76 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 6 Mar 2024 09:37:50 +0100 Subject: [PATCH 211/430] C#: Address review comments. --- .../consistency-queries/DataFlowConsistency.ql | 2 -- .../code/csharp/dispatch/RuntimeCallable.qll | 7 +------ .../cil/consistency/Handles.expected | 18 +++++++++--------- .../library-tests/cil/consistency/Handles.ql | 4 ++-- 4 files changed, 12 insertions(+), 19 deletions(-) diff --git a/csharp/ql/consistency-queries/DataFlowConsistency.ql b/csharp/ql/consistency-queries/DataFlowConsistency.ql index 77eb9e9902a..1ee888329c7 100644 --- a/csharp/ql/consistency-queries/DataFlowConsistency.ql +++ b/csharp/ql/consistency-queries/DataFlowConsistency.ql @@ -30,8 +30,6 @@ private module Input implements InputSig { n instanceof FlowInsensitiveFieldNode } - predicate missingLocationExclude(Node n) { none() } - predicate postWithInFlowExclude(Node n) { n instanceof FlowSummaryNode or diff --git a/csharp/ql/lib/semmle/code/csharp/dispatch/RuntimeCallable.qll b/csharp/ql/lib/semmle/code/csharp/dispatch/RuntimeCallable.qll index 0e11e007d55..a11cbc964c1 100644 --- a/csharp/ql/lib/semmle/code/csharp/dispatch/RuntimeCallable.qll +++ b/csharp/ql/lib/semmle/code/csharp/dispatch/RuntimeCallable.qll @@ -21,12 +21,7 @@ class RuntimeCallable extends Callable { } /** A run-time method. */ -class RuntimeMethod extends RuntimeCallable { - RuntimeMethod() { this instanceof Method } - - /** Holds if the method is `static`. */ - predicate isStatic() { this.(Method).isStatic() } -} +class RuntimeMethod extends RuntimeCallable, Method { } /** A run-time instance method. */ class RuntimeInstanceMethod extends RuntimeMethod { diff --git a/csharp/ql/test/library-tests/cil/consistency/Handles.expected b/csharp/ql/test/library-tests/cil/consistency/Handles.expected index 3da5bd2faf6..d48a89c24a3 100644 --- a/csharp/ql/test/library-tests/cil/consistency/Handles.expected +++ b/csharp/ql/test/library-tests/cil/consistency/Handles.expected @@ -3,12 +3,12 @@ tooManyMatchingHandles missingCil csharpLocationViolation matchingObjectMethods -| System.Boolean System.Object.Equals(System.Object) | System.Boolean System.Object.Equals(System.Object) | -| System.Boolean System.Object.Equals(System.Object,System.Object) | System.Boolean System.Object.Equals(System.Object,System.Object) | -| System.Boolean System.Object.ReferenceEquals(System.Object,System.Object) | System.Boolean System.Object.ReferenceEquals(System.Object,System.Object) | -| System.Int32 System.Object.GetHashCode() | System.Int32 System.Object.GetHashCode() | -| System.Object System.Object.MemberwiseClone() | System.Object System.Object.MemberwiseClone() | -| System.String System.Object.ToString() | System.String System.Object.ToString() | -| System.Type System.Object.GetType() | System.Type System.Object.GetType() | -| System.Void System.Object..ctor() | System.Void System.Object..ctor() | -| System.Void System.Object.Finalize() | System.Void System.Object.Finalize() | +| 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 index 79254c7e5ec..73c17c713d7 100644 --- a/csharp/ql/test/library-tests/cil/consistency/Handles.ql +++ b/csharp/ql/test/library-tests/cil/consistency/Handles.ql @@ -59,9 +59,9 @@ deprecated query predicate csharpLocationViolation(Element e) { } deprecated query predicate matchingObjectMethods(string s1, string s2) { - exists(DotNet::Callable m1, CIL::Method m2 | + exists(Callable m1, CIL::Method m2 | m1.getDeclaringType().hasFullyQualifiedName("System", "Object") and - m1.matchesHandle(m2) and + m1.(DotNet::Callable).matchesHandle(m2) and s1 = m1.toStringWithTypes() and s2 = m2.toStringWithTypes() ) From 43ee62ad649a2ea2adb82d43247282b8f9c0290c Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 6 Mar 2024 09:45:04 +0100 Subject: [PATCH 212/430] C#: Update the NoDisposeCallOnLocalIDisposable and expected output. --- .../NoDisposeCallOnLocalIDisposable.cs | 4 ++-- .../NoDisposeCallOnLocalIDisposable.expected | 2 ++ .../API Abuse/NoDisposeCallOnLocalIDisposable/options | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) 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 From 990dec67d062ba3e31d0fb4106fdf5135a7672da Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 6 Mar 2024 14:59:43 +0100 Subject: [PATCH 213/430] C#: Address more review comments. --- csharp/ql/lib/semmle/code/csharp/Callable.qll | 22 +++++++-------- csharp/ql/lib/semmle/code/csharp/Element.qll | 8 +++--- csharp/ql/lib/semmle/code/csharp/Generics.qll | 8 +++--- csharp/ql/lib/semmle/code/csharp/Member.qll | 27 ------------------- csharp/ql/lib/semmle/code/csharp/Type.qll | 16 +++++------ .../dataflow/internal/DataFlowDispatch.qll | 8 +++--- .../ql/test/library-tests/members/GetLabel.ql | 6 ++--- 7 files changed, 33 insertions(+), 62 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/Callable.qll b/csharp/ql/lib/semmle/code/csharp/Callable.qll index ec8582db4ab..9cd365c2ecd 100644 --- a/csharp/ql/lib/semmle/code/csharp/Callable.qll +++ b/csharp/ql/lib/semmle/code/csharp/Callable.qll @@ -22,17 +22,17 @@ private import TypeRef */ class Callable extends Parameterizable, ExprOrStmtParent, @callable { pragma[noinline] - private string getDeclaringTypeLabel() { result = this.getDeclaringType().getLabel() } + deprecated private string getDeclaringTypeLabel() { result = this.getDeclaringType().getLabel() } pragma[noinline] - private string getParameterTypeLabelNonGeneric(int p) { + deprecated private string getParameterTypeLabelNonGeneric(int p) { not this instanceof Generic and result = this.getParameter(p).getType().getLabel() } language[monotonicAggregates] pragma[nomagic] - private string getMethodParamListNonGeneric() { + deprecated private string getMethodParamListNonGeneric() { result = concat(int p | p in [0 .. this.getNumberOfParameters() - 1] @@ -42,14 +42,14 @@ class Callable extends Parameterizable, ExprOrStmtParent, @callable { } pragma[noinline] - private string getParameterTypeLabelGeneric(int p) { + deprecated private string getParameterTypeLabelGeneric(int p) { this instanceof Generic and result = this.getParameter(p).getType().getLabel() } language[monotonicAggregates] pragma[nomagic] - private string getMethodParamListGeneric() { + deprecated private string getMethodParamListGeneric() { result = concat(int p | p in [0 .. this.getNumberOfParameters() - 1] @@ -59,7 +59,7 @@ class Callable extends Parameterizable, ExprOrStmtParent, @callable { } pragma[noinline] - private string getLabelNonGeneric() { + deprecated private string getLabelNonGeneric() { not this instanceof Generic and result = this.getReturnTypeLabel() + " " + this.getDeclaringTypeLabel() + "." + @@ -67,19 +67,19 @@ class Callable extends Parameterizable, ExprOrStmtParent, @callable { } pragma[noinline] - private string getLabelGeneric() { + deprecated private string getLabelGeneric() { result = this.getReturnTypeLabel() + " " + this.getDeclaringTypeLabel() + "." + this.getUndecoratedName() + getGenericsLabel(this) + "(" + this.getMethodParamListGeneric() + ")" } - final override string getLabel() { + deprecated final override string getLabel() { result = this.getLabelNonGeneric() or result = this.getLabelGeneric() } - private string getReturnTypeLabel() { + deprecated private string getReturnTypeLabel() { result = this.getReturnType().getLabel() or not exists(this.getReturnType()) and result = "System.Void" @@ -579,8 +579,8 @@ class RecordCloneMethod extends Method { this.hasName("$") and this.getNumberOfParameters() = 0 and this.getReturnType() = getARecordBaseType(this.getDeclaringType()) and - this.(Member).isPublic() and - not this.(Member).isStatic() + this.isPublic() and + not this.isStatic() } /** Gets the constructor that this clone method calls. */ diff --git a/csharp/ql/lib/semmle/code/csharp/Element.qll b/csharp/ql/lib/semmle/code/csharp/Element.qll index 71fd3ec47c9..2c69912c993 100644 --- a/csharp/ql/lib/semmle/code/csharp/Element.qll +++ b/csharp/ql/lib/semmle/code/csharp/Element.qll @@ -31,7 +31,7 @@ class Element extends @element { * 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". */ - final string getLanguage() { result = this.getLocation().getFile().getExtension() } + 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. @@ -160,10 +160,10 @@ class NamedElement extends Element, @named_element { /** Gets a unique string label for this element. */ cached - string getLabel() { none() } + deprecated string getLabel() { none() } /** Holds if `other` has the same metadata handle in the same assembly. */ - predicate matchesHandle(NamedElement other) { + deprecated predicate matchesHandle(NamedElement other) { exists(Assembly asm, int handle | metadata_handle(this, asm, handle) and metadata_handle(other, asm, handle) @@ -174,7 +174,7 @@ class NamedElement extends Element, @named_element { * 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. */ - predicate compiledFromSource() { + deprecated predicate compiledFromSource() { not this.fromSource() and exists(NamedElement other | other != this | this.matchesHandle(other) and diff --git a/csharp/ql/lib/semmle/code/csharp/Generics.qll b/csharp/ql/lib/semmle/code/csharp/Generics.qll index ae131ca27a7..dd60ed0b0de 100644 --- a/csharp/ql/lib/semmle/code/csharp/Generics.qll +++ b/csharp/ql/lib/semmle/code/csharp/Generics.qll @@ -108,20 +108,20 @@ 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] @@ -264,7 +264,7 @@ class TypeParameter extends Type, @type_parameter { /** Gets the index of this type parameter. For example the index of `U` in `Func` is 1. */ override int getIndex() { type_parameters(this, result, _, _) } - final override string getLabel() { result = "!" + this.getIndex() } + deprecated final override string getLabel() { result = "!" + this.getIndex() } override string getUndecoratedName() { result = "!" + this.getIndex() } diff --git a/csharp/ql/lib/semmle/code/csharp/Member.qll b/csharp/ql/lib/semmle/code/csharp/Member.qll index 19425b48d91..1be091170e3 100644 --- a/csharp/ql/lib/semmle/code/csharp/Member.qll +++ b/csharp/ql/lib/semmle/code/csharp/Member.qll @@ -263,33 +263,6 @@ class Member extends Modifiable, @member { /** Gets an access to this member. */ MemberAccess getAnAccess() { result.getTarget() = this } - /** Holds if this member is declared `public`. */ - override predicate isPublic() { Modifiable.super.isPublic() } - - /** Holds if this member is declared `protected.` */ - override predicate isProtected() { Modifiable.super.isProtected() } - - /** Holds if this member is `private`. */ - override predicate isPrivate() { Modifiable.super.isPrivate() } - - /** Holds if this member is `internal`. */ - override predicate isInternal() { Modifiable.super.isInternal() } - - /** Holds if this member is `sealed`. */ - override predicate isSealed() { Modifiable.super.isSealed() } - - /** Holds if this member is `abstract`. */ - override predicate isAbstract() { Modifiable.super.isAbstract() } - - /** Holds if this member is `static`. */ - override predicate isStatic() { Modifiable.super.isStatic() } - - /** Holds if this member is declared `required`. */ - override predicate isRequired() { Modifiable.super.isRequired() } - - /** Holds if this member is declared `file` local. */ - override predicate isFile() { Modifiable.super.isFile() } - /** * DEPRECATED: Use `hasFullyQualifiedName` instead. * diff --git a/csharp/ql/lib/semmle/code/csharp/Type.qll b/csharp/ql/lib/semmle/code/csharp/Type.qll index 93bc953bd7c..1fd8e41642b 100644 --- a/csharp/ql/lib/semmle/code/csharp/Type.qll +++ b/csharp/ql/lib/semmle/code/csharp/Type.qll @@ -76,7 +76,7 @@ class ValueOrRefType extends Type, Attributable, @value_or_ref_type { /** Gets a nested child type, if any. */ NestedType getAChildType() { nested_types(result, this, _) } - private string getPrefixWithTypes() { + deprecated private string getPrefixWithTypes() { result = this.getDeclaringType().getLabel() + "." or if this.getDeclaringNamespace().isGlobalNamespace() @@ -85,17 +85,17 @@ class ValueOrRefType extends Type, Attributable, @value_or_ref_type { } pragma[noinline] - private string getLabelNonGeneric() { + deprecated private string getLabelNonGeneric() { not this instanceof Generic and result = this.getPrefixWithTypes() + this.getUndecoratedName() } pragma[noinline] - private string getLabelGeneric() { + deprecated private string getLabelGeneric() { result = this.getPrefixWithTypes() + this.getUndecoratedName() + getGenericsLabel(this) } - override string getLabel() { + deprecated override string getLabel() { result = this.getLabelNonGeneric() or result = this.getLabelGeneric() } @@ -997,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() } } /** @@ -1116,7 +1116,7 @@ class ArrayType extends RefType, @array_type { array_element_type(this, _, _, getTypeRef(result)) } - final override string getLabel() { result = this.getElementType().getLabel() + "[]" } + 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) { @@ -1180,7 +1180,7 @@ class PointerType extends Type, @pointer_type { final override string getName() { types(this, _, result) } - final override string getLabel() { result = this.getReferentType().getLabel() + "*" } + deprecated final override string getLabel() { result = this.getReferentType().getLabel() + "*" } final override string getUndecoratedName() { result = this.getReferentType().getUndecoratedName() @@ -1271,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/dataflow/internal/DataFlowDispatch.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll index f86026f19fd..4ff4722cfcc 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll @@ -14,11 +14,9 @@ private import semmle.code.csharp.frameworks.system.collections.Generic * a flow summary. */ Callable getCallableForDataFlow(Callable c) { - exists(Callable unboundDecl | unboundDecl = c.getUnboundDeclaration() | - unboundDecl.hasBody() and - unboundDecl.getFile().fromSource() and - result = unboundDecl - ) + result = c.getUnboundDeclaration() and + result.hasBody() and + result.getFile().fromSource() } newtype TReturnKind = diff --git a/csharp/ql/test/library-tests/members/GetLabel.ql b/csharp/ql/test/library-tests/members/GetLabel.ql index 219a2702636..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 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() +} From 73040bd30f86cfd999544e9762ce95fe16b23ecb Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 7 Mar 2024 09:35:30 +0100 Subject: [PATCH 214/430] C#: Use fully qualified name with types instead of label in IR queries. --- .../ir/internal/IRCSharpLanguageDebug.qll | 2 +- .../test/experimental/ir/ir/raw_ir.expected | 118 +++++++++--------- .../ir/ir/raw_ir_consistency.expected | 18 +-- .../ir/ir/unaliased_ssa_consistency.expected | 18 +-- 4 files changed, 78 insertions(+), 78 deletions(-) diff --git a/csharp/ql/src/experimental/ir/internal/IRCSharpLanguageDebug.qll b/csharp/ql/src/experimental/ir/internal/IRCSharpLanguageDebug.qll index 3ee0328dd90..a7c2d79d949 100644 --- a/csharp/ql/src/experimental/ir/internal/IRCSharpLanguageDebug.qll +++ b/csharp/ql/src/experimental/ir/internal/IRCSharpLanguageDebug.qll @@ -2,4 +2,4 @@ private import csharp as CSharp class Function = CSharp::Callable; -string getIdentityString(Function func) { result = func.getLabel() } +string getIdentityString(Function func) { result = func.getFullyQualifiedNameWithTypes() } diff --git a/csharp/ql/test/experimental/ir/ir/raw_ir.expected b/csharp/ql/test/experimental/ir/ir/raw_ir.expected index 2461e6602b9..7ba67d33cae 100644 --- a/csharp/ql/test/experimental/ir/ir/raw_ir.expected +++ b/csharp/ql/test/experimental/ir/ir/raw_ir.expected @@ -1,5 +1,5 @@ array.cs: -# 2| System.Void ArrayTest.one_dim_init_acc() +# 2| ArrayTest.one_dim_init_acc() # 2| Block 0 # 2| v2_1(Void) = EnterFunction : # 2| mu2_2() = AliasedDefinition : @@ -54,7 +54,7 @@ array.cs: # 2| v2_5(Void) = AliasedUse : ~m? # 2| v2_6(Void) = ExitFunction : -# 13| System.Void ArrayTest.twod_and_init_acc() +# 13| ArrayTest.twod_and_init_acc() # 13| Block 0 # 13| v13_1(Void) = EnterFunction : # 13| mu13_2() = AliasedDefinition : @@ -145,7 +145,7 @@ array.cs: # 13| v13_6(Void) = ExitFunction : assignop.cs: -# 5| System.Void AssignOp.Main() +# 5| AssignOp.Main() # 5| Block 0 # 5| v5_1(Void) = EnterFunction : # 5| mu5_2() = AliasedDefinition : @@ -220,7 +220,7 @@ assignop.cs: # 5| v5_5(Void) = ExitFunction : casts.cs: -# 11| System.Void Casts.Main() +# 11| Casts.Main() # 11| Block 0 # 11| v11_1(Void) = EnterFunction : # 11| mu11_2() = AliasedDefinition : @@ -245,7 +245,7 @@ casts.cs: # 11| v11_5(Void) = ExitFunction : collections.cs: -# 11| System.Void Collections.Main() +# 11| Collections.Main() # 11| Block 0 # 11| v11_1(Void) = EnterFunction : # 11| mu11_2() = AliasedDefinition : @@ -288,7 +288,7 @@ collections.cs: # 11| v11_5(Void) = ExitFunction : constructor_init.cs: -# 5| System.Void BaseClass..ctor() +# 5| BaseClass.BaseClass() # 5| Block 0 # 5| v5_1(Void) = EnterFunction : # 5| mu5_2() = AliasedDefinition : @@ -302,7 +302,7 @@ constructor_init.cs: # 5| v5_9(Void) = AliasedUse : ~m? # 5| v5_10(Void) = ExitFunction : -# 9| System.Void BaseClass..ctor(System.Int32) +# 9| BaseClass.BaseClass(int) # 9| Block 0 # 9| v9_1(Void) = EnterFunction : # 9| mu9_2() = AliasedDefinition : @@ -322,7 +322,7 @@ constructor_init.cs: # 9| v9_11(Void) = AliasedUse : ~m? # 9| v9_12(Void) = ExitFunction : -# 17| System.Void DerivedClass..ctor() +# 17| DerivedClass.DerivedClass() # 17| Block 0 # 17| v17_1(Void) = EnterFunction : # 17| mu17_2() = AliasedDefinition : @@ -336,7 +336,7 @@ constructor_init.cs: # 17| v17_9(Void) = AliasedUse : ~m? # 17| v17_10(Void) = ExitFunction : -# 21| System.Void DerivedClass..ctor(System.Int32) +# 21| DerivedClass.DerivedClass(int) # 21| Block 0 # 21| v21_1(Void) = EnterFunction : # 21| mu21_2() = AliasedDefinition : @@ -354,7 +354,7 @@ constructor_init.cs: # 21| v21_13(Void) = AliasedUse : ~m? # 21| v21_14(Void) = ExitFunction : -# 25| System.Void DerivedClass..ctor(System.Int32,System.Int32) +# 25| DerivedClass.DerivedClass(int, int) # 25| Block 0 # 25| v25_1(Void) = EnterFunction : # 25| mu25_2() = AliasedDefinition : @@ -373,7 +373,7 @@ constructor_init.cs: # 25| v25_14(Void) = AliasedUse : ~m? # 25| v25_15(Void) = ExitFunction : -# 29| System.Void DerivedClass.Main() +# 29| DerivedClass.Main() # 29| Block 0 # 29| v29_1(Void) = EnterFunction : # 29| mu29_2() = AliasedDefinition : @@ -403,7 +403,7 @@ constructor_init.cs: # 29| v29_5(Void) = ExitFunction : crement.cs: -# 3| System.Void CrementOpsTest.Main() +# 3| CrementOpsTest.Main() # 3| Block 0 # 3| v3_1(Void) = EnterFunction : # 3| mu3_2() = AliasedDefinition : @@ -443,7 +443,7 @@ crement.cs: # 3| v3_5(Void) = ExitFunction : delegates.cs: -# 6| System.Int32 Delegates.returns(System.Int32) +# 6| Delegates.returns(int) # 6| Block 0 # 6| v6_1(Void) = EnterFunction : # 6| mu6_2() = AliasedDefinition : @@ -458,7 +458,7 @@ delegates.cs: # 6| v6_7(Void) = AliasedUse : ~m? # 6| v6_8(Void) = ExitFunction : -# 11| System.Void Delegates.Main() +# 11| Delegates.Main() # 11| Block 0 # 11| v11_1(Void) = EnterFunction : # 11| mu11_2() = AliasedDefinition : @@ -480,7 +480,7 @@ delegates.cs: # 11| v11_5(Void) = ExitFunction : events.cs: -# 8| System.Void Events..ctor() +# 8| Events.Events() # 8| Block 0 # 8| v8_1(Void) = EnterFunction : # 8| mu8_2() = AliasedDefinition : @@ -501,7 +501,7 @@ events.cs: # 8| v8_9(Void) = AliasedUse : ~m? # 8| v8_10(Void) = ExitFunction : -# 13| System.Void Events.AddEvent() +# 13| Events.AddEvent() # 13| Block 0 # 13| v13_1(Void) = EnterFunction : # 13| mu13_2() = AliasedDefinition : @@ -517,7 +517,7 @@ events.cs: # 13| v13_5(Void) = AliasedUse : ~m? # 13| v13_6(Void) = ExitFunction : -# 18| System.Void Events.RemoveEvent() +# 18| Events.RemoveEvent() # 18| Block 0 # 18| v18_1(Void) = EnterFunction : # 18| mu18_2() = AliasedDefinition : @@ -533,7 +533,7 @@ events.cs: # 18| v18_5(Void) = AliasedUse : ~m? # 18| v18_6(Void) = ExitFunction : -# 23| System.String Events.Fun(System.String) +# 23| Events.Fun(string) # 23| Block 0 # 23| v23_1(Void) = EnterFunction : # 23| mu23_2() = AliasedDefinition : @@ -549,7 +549,7 @@ events.cs: # 23| v23_8(Void) = AliasedUse : ~m? # 23| v23_9(Void) = ExitFunction : -# 28| System.Void Events.Main(System.String[]) +# 28| Events.Main(String[]) # 28| Block 0 # 28| v28_1(Void) = EnterFunction : # 28| mu28_2() = AliasedDefinition : @@ -584,7 +584,7 @@ events.cs: # 28| v28_7(Void) = ExitFunction : foreach.cs: -# 4| System.Void ForEach.Main() +# 4| ForEach.Main() # 4| Block 0 # 4| v4_1(Void) = EnterFunction : # 4| mu4_2() = AliasedDefinition : @@ -662,7 +662,7 @@ foreach.cs: # 4| v4_5(Void) = ExitFunction : func_with_param_call.cs: -# 5| System.Int32 test_call_with_param.f(System.Int32,System.Int32) +# 5| test_call_with_param.f(int, int) # 5| Block 0 # 5| v5_1(Void) = EnterFunction : # 5| mu5_2() = AliasedDefinition : @@ -682,7 +682,7 @@ func_with_param_call.cs: # 5| v5_9(Void) = AliasedUse : ~m? # 5| v5_10(Void) = ExitFunction : -# 10| System.Int32 test_call_with_param.g() +# 10| test_call_with_param.g() # 10| Block 0 # 10| v10_1(Void) = EnterFunction : # 10| mu10_2() = AliasedDefinition : @@ -699,7 +699,7 @@ func_with_param_call.cs: # 10| v10_6(Void) = ExitFunction : indexers.cs: -# 8| System.String Indexers.MyClass.get_Item(System.Int32) +# 8| Indexers+MyClass.get_Item(int) # 8| Block 0 # 8| v8_1(Void) = EnterFunction : # 8| mu8_2() = AliasedDefinition : @@ -720,7 +720,7 @@ indexers.cs: # 8| v8_6(Void) = AliasedUse : ~m? # 8| v8_7(Void) = ExitFunction : -# 12| System.Void Indexers.MyClass.set_Item(System.Int32,System.String) +# 12| Indexers+MyClass.set_Item(int, string) # 12| Block 0 # 12| v12_1(Void) = EnterFunction : # 12| mu12_2() = AliasedDefinition : @@ -742,7 +742,7 @@ indexers.cs: # 12| v12_7(Void) = AliasedUse : ~m? # 12| v12_8(Void) = ExitFunction : -# 19| System.Void Indexers.Main() +# 19| Indexers.Main() # 19| Block 0 # 19| v19_1(Void) = EnterFunction : # 19| mu19_2() = AliasedDefinition : @@ -783,7 +783,7 @@ indexers.cs: # 19| v19_5(Void) = ExitFunction : inheritance_polymorphism.cs: -# 3| System.Int32 A.function() +# 3| A.function() # 3| Block 0 # 3| v3_1(Void) = EnterFunction : # 3| mu3_2() = AliasedDefinition : @@ -796,7 +796,7 @@ inheritance_polymorphism.cs: # 3| v3_6(Void) = AliasedUse : ~m? # 3| v3_7(Void) = ExitFunction : -# 15| System.Int32 C.function() +# 15| C.function() # 15| Block 0 # 15| v15_1(Void) = EnterFunction : # 15| mu15_2() = AliasedDefinition : @@ -809,7 +809,7 @@ inheritance_polymorphism.cs: # 15| v15_6(Void) = AliasedUse : ~m? # 15| v15_7(Void) = ExitFunction : -# 23| System.Void Program.Main() +# 23| Program.Main() # 23| Block 0 # 23| v23_1(Void) = EnterFunction : # 23| mu23_2() = AliasedDefinition : @@ -853,7 +853,7 @@ inheritance_polymorphism.cs: # 23| v23_5(Void) = ExitFunction : inoutref.cs: -# 11| System.Void InOutRef.set(MyClass,MyClass) +# 11| InOutRef.set(ref MyClass, MyClass) # 11| Block 0 # 11| v11_1(Void) = EnterFunction : # 11| mu11_2() = AliasedDefinition : @@ -870,7 +870,7 @@ inoutref.cs: # 11| v11_8(Void) = AliasedUse : ~m? # 11| v11_9(Void) = ExitFunction : -# 16| System.Void InOutRef.F(System.Int32,MyStruct,MyStruct,MyClass,MyClass) +# 16| InOutRef.F(ref int, ref MyStruct, MyStruct, ref MyClass, MyClass) # 16| Block 0 # 16| v16_1(Void) = EnterFunction : # 16| mu16_2() = AliasedDefinition : @@ -928,7 +928,7 @@ inoutref.cs: # 16| v16_14(Void) = AliasedUse : ~m? # 16| v16_15(Void) = ExitFunction : -# 29| System.Void InOutRef.Main() +# 29| InOutRef.Main() # 29| Block 0 # 29| v29_1(Void) = EnterFunction : # 29| mu29_2() = AliasedDefinition : @@ -966,7 +966,7 @@ inoutref.cs: # 29| v29_5(Void) = ExitFunction : isexpr.cs: -# 8| System.Void IsExpr.Main() +# 8| IsExpr.Main() # 8| Block 0 # 8| v8_1(Void) = EnterFunction : # 8| mu8_2() = AliasedDefinition : @@ -1028,7 +1028,7 @@ isexpr.cs: #-----| Goto -> Block 1 jumps.cs: -# 5| System.Void Jumps.Main() +# 5| Jumps.Main() # 5| Block 0 # 5| v5_1(Void) = EnterFunction : # 5| mu5_2() = AliasedDefinition : @@ -1201,7 +1201,7 @@ jumps.cs: # 5| v5_5(Void) = ExitFunction : lock.cs: -# 5| System.Void LockTest.A() +# 5| LockTest.A() # 5| Block 0 # 5| v5_1(Void) = EnterFunction : # 5| mu5_2() = AliasedDefinition : @@ -1252,7 +1252,7 @@ lock.cs: #-----| Goto -> Block 1 obj_creation.cs: -# 7| System.Void ObjCreation.MyClass..ctor() +# 7| ObjCreation+MyClass.MyClass() # 7| Block 0 # 7| v7_1(Void) = EnterFunction : # 7| mu7_2() = AliasedDefinition : @@ -1266,7 +1266,7 @@ obj_creation.cs: # 7| v7_9(Void) = AliasedUse : ~m? # 7| v7_10(Void) = ExitFunction : -# 11| System.Void ObjCreation.MyClass..ctor(System.Int32) +# 11| ObjCreation+MyClass.MyClass(int) # 11| Block 0 # 11| v11_1(Void) = EnterFunction : # 11| mu11_2() = AliasedDefinition : @@ -1286,7 +1286,7 @@ obj_creation.cs: # 11| v11_11(Void) = AliasedUse : ~m? # 11| v11_12(Void) = ExitFunction : -# 17| System.Void ObjCreation.SomeFun(ObjCreation.MyClass) +# 17| ObjCreation.SomeFun(MyClass) # 17| Block 0 # 17| v17_1(Void) = EnterFunction : # 17| mu17_2() = AliasedDefinition : @@ -1297,7 +1297,7 @@ obj_creation.cs: # 17| v17_6(Void) = AliasedUse : ~m? # 17| v17_7(Void) = ExitFunction : -# 21| System.Void ObjCreation.Main() +# 21| ObjCreation.Main() # 21| Block 0 # 21| v21_1(Void) = EnterFunction : # 21| mu21_2() = AliasedDefinition : @@ -1336,7 +1336,7 @@ obj_creation.cs: # 21| v21_5(Void) = ExitFunction : pointers.cs: -# 3| System.Void Pointers.addone(System.Int32[]) +# 3| Pointers.addone(Int32[]) # 3| Block 0 # 3| v3_1(Void) = EnterFunction : # 3| mu3_2() = AliasedDefinition : @@ -1395,7 +1395,7 @@ pointers.cs: # 9| mu9_14(Int32) = Store[i] : &:r9_10, r9_13 #-----| Goto (back edge) -> Block 2 -# 25| System.Void Pointers.Main() +# 25| Pointers.Main() # 25| Block 0 # 25| v25_1(Void) = EnterFunction : # 25| mu25_2() = AliasedDefinition : @@ -1463,7 +1463,7 @@ pointers.cs: # 25| v25_5(Void) = ExitFunction : prop.cs: -# 7| System.Int32 PropClass.get_Prop() +# 7| PropClass.get_Prop() # 7| Block 0 # 7| v7_1(Void) = EnterFunction : # 7| mu7_2() = AliasedDefinition : @@ -1479,7 +1479,7 @@ prop.cs: # 7| v7_6(Void) = AliasedUse : ~m? # 7| v7_7(Void) = ExitFunction : -# 12| System.Void PropClass.set_Prop(System.Int32) +# 12| PropClass.set_Prop(int) # 12| Block 0 # 12| v12_1(Void) = EnterFunction : # 12| mu12_2() = AliasedDefinition : @@ -1494,7 +1494,7 @@ prop.cs: # 12| v12_7(Void) = AliasedUse : ~m? # 12| v12_8(Void) = ExitFunction : -# 18| System.Int32 PropClass.func() +# 18| PropClass.func() # 18| Block 0 # 18| v18_1(Void) = EnterFunction : # 18| mu18_2() = AliasedDefinition : @@ -1507,7 +1507,7 @@ prop.cs: # 18| v18_6(Void) = AliasedUse : ~m? # 18| v18_7(Void) = ExitFunction : -# 26| System.Void Prog.Main() +# 26| Prog.Main() # 26| Block 0 # 26| v26_1(Void) = EnterFunction : # 26| mu26_2() = AliasedDefinition : @@ -1535,7 +1535,7 @@ prop.cs: # 26| v26_5(Void) = ExitFunction : simple_call.cs: -# 5| System.Int32 test_simple_call.f() +# 5| test_simple_call.f() # 5| Block 0 # 5| v5_1(Void) = EnterFunction : # 5| mu5_2() = AliasedDefinition : @@ -1547,7 +1547,7 @@ simple_call.cs: # 5| v5_5(Void) = AliasedUse : ~m? # 5| v5_6(Void) = ExitFunction : -# 10| System.Int32 test_simple_call.g() +# 10| test_simple_call.g() # 10| Block 0 # 10| v10_1(Void) = EnterFunction : # 10| mu10_2() = AliasedDefinition : @@ -1563,7 +1563,7 @@ simple_call.cs: # 10| v10_7(Void) = ExitFunction : simple_function.cs: -# 5| System.Int32 test_simple_function.f() +# 5| test_simple_function.f() # 5| Block 0 # 5| v5_1(Void) = EnterFunction : # 5| mu5_2() = AliasedDefinition : @@ -1576,7 +1576,7 @@ simple_function.cs: # 5| v5_6(Void) = ExitFunction : stmts.cs: -# 5| System.Int32 test_stmts.ifStmt(System.Int32) +# 5| test_stmts.ifStmt(int) # 5| Block 0 # 5| v5_1(Void) = EnterFunction : # 5| mu5_2() = AliasedDefinition : @@ -1608,7 +1608,7 @@ stmts.cs: # 10| mu10_3(Int32) = Store[#return] : &:r10_1, r10_2 #-----| Goto -> Block 1 -# 13| System.Void test_stmts.whileStmt(System.Int32) +# 13| test_stmts.whileStmt(int) # 13| Block 0 # 13| v13_1(Void) = EnterFunction : # 13| mu13_2() = AliasedDefinition : @@ -1642,7 +1642,7 @@ stmts.cs: # 18| mu18_6(Int32) = Store[x] : &:r18_5, r18_4 #-----| Goto (back edge) -> Block 2 -# 22| System.Int32 test_stmts.switchStmt() +# 22| test_stmts.switchStmt() # 22| Block 0 # 22| v22_1(Void) = EnterFunction : # 22| mu22_2() = AliasedDefinition : @@ -1707,7 +1707,7 @@ stmts.cs: # 40| mu40_4(Int32) = Store[#return] : &:r40_1, r40_3 #-----| Goto -> Block 1 -# 45| System.Void test_stmts.tryCatchFinally() +# 45| test_stmts.tryCatchFinally() # 45| Block 0 # 45| v45_1(Void) = EnterFunction : # 45| mu45_2() = AliasedDefinition : @@ -1771,7 +1771,7 @@ stmts.cs: # 60| v60_1(Void) = ReThrow : #-----| Exception -> Block 2 -# 68| System.Void test_stmts.forStmt() +# 68| test_stmts.forStmt() # 68| Block 0 # 68| v68_1(Void) = EnterFunction : # 68| mu68_2() = AliasedDefinition : @@ -1853,7 +1853,7 @@ stmts.cs: # 83| v83_1(Void) = NoOp : #-----| Goto (back edge) -> Block 7 -# 88| System.Void test_stmts.doWhile() +# 88| test_stmts.doWhile() # 88| Block 0 # 88| v88_1(Void) = EnterFunction : # 88| mu88_2() = AliasedDefinition : @@ -1882,7 +1882,7 @@ stmts.cs: #-----| False -> Block 1 #-----| True (back edge) -> Block 2 -# 98| System.Void test_stmts.checkedUnchecked() +# 98| test_stmts.checkedUnchecked() # 98| Block 0 # 98| v98_1(Void) = EnterFunction : # 98| mu98_2() = AliasedDefinition : @@ -1907,7 +1907,7 @@ stmts.cs: # 98| v98_5(Void) = ExitFunction : using.cs: -# 7| System.Void UsingStmt.MyDisposable..ctor() +# 7| UsingStmt+MyDisposable.MyDisposable() # 7| Block 0 # 7| v7_1(Void) = EnterFunction : # 7| mu7_2() = AliasedDefinition : @@ -1921,7 +1921,7 @@ using.cs: # 7| v7_10(Void) = AliasedUse : ~m? # 7| v7_11(Void) = ExitFunction : -# 8| System.Void UsingStmt.MyDisposable.DoSomething() +# 8| UsingStmt+MyDisposable.DoSomething() # 8| Block 0 # 8| v8_1(Void) = EnterFunction : # 8| mu8_2() = AliasedDefinition : @@ -1931,7 +1931,7 @@ using.cs: # 8| v8_6(Void) = AliasedUse : ~m? # 8| v8_7(Void) = ExitFunction : -# 9| System.Void UsingStmt.MyDisposable.Dispose() +# 9| UsingStmt+MyDisposable.Dispose() # 9| Block 0 # 9| v9_1(Void) = EnterFunction : # 9| mu9_2() = AliasedDefinition : @@ -1941,7 +1941,7 @@ using.cs: # 9| v9_6(Void) = AliasedUse : ~m? # 9| v9_7(Void) = ExitFunction : -# 12| System.Void UsingStmt.Main() +# 12| UsingStmt.Main() # 12| Block 0 # 12| v12_1(Void) = EnterFunction : # 12| mu12_2() = AliasedDefinition : @@ -1983,7 +1983,7 @@ using.cs: # 12| v12_5(Void) = ExitFunction : variables.cs: -# 5| System.Void test_variables.f() +# 5| test_variables.f() # 5| Block 0 # 5| v5_1(Void) = EnterFunction : # 5| mu5_2() = AliasedDefinition : diff --git a/csharp/ql/test/experimental/ir/ir/raw_ir_consistency.expected b/csharp/ql/test/experimental/ir/ir/raw_ir_consistency.expected index 05ab9037c87..7f3591c786d 100644 --- a/csharp/ql/test/experimental/ir/ir/raw_ir_consistency.expected +++ b/csharp/ql/test/experimental/ir/ir/raw_ir_consistency.expected @@ -12,7 +12,11 @@ unnecessaryPhiInstruction memoryOperandDefinitionIsUnmodeled operandAcrossFunctions instructionWithoutUniqueBlock +missingCanonicalLanguageType +multipleCanonicalLanguageTypes containsLoopOfForwardEdges +missingIRType +multipleIRTypes lostReachability backEdgeCountMismatch useNotDominatedByDefinition @@ -22,14 +26,10 @@ 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() | +| 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 | InOutRef.F(ref int, ref MyStruct, MyStruct, ref MyClass, MyClass) | InOutRef.F(ref int, ref MyStruct, MyStruct, ref 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 | InOutRef.F(ref int, ref MyStruct, MyStruct, ref MyClass, MyClass) | InOutRef.F(ref int, ref MyStruct, MyStruct, ref 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 | Pointers.Main() | 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() | +| 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 | InOutRef.Main() | 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 | Pointers.Main() | Pointers.Main() | nonUniqueIRVariable -missingCanonicalLanguageType -multipleCanonicalLanguageTypes -missingIRType -multipleIRTypes diff --git a/csharp/ql/test/experimental/ir/ir/unaliased_ssa_consistency.expected b/csharp/ql/test/experimental/ir/ir/unaliased_ssa_consistency.expected index 05ab9037c87..7f3591c786d 100644 --- a/csharp/ql/test/experimental/ir/ir/unaliased_ssa_consistency.expected +++ b/csharp/ql/test/experimental/ir/ir/unaliased_ssa_consistency.expected @@ -12,7 +12,11 @@ unnecessaryPhiInstruction memoryOperandDefinitionIsUnmodeled operandAcrossFunctions instructionWithoutUniqueBlock +missingCanonicalLanguageType +multipleCanonicalLanguageTypes containsLoopOfForwardEdges +missingIRType +multipleIRTypes lostReachability backEdgeCountMismatch useNotDominatedByDefinition @@ -22,14 +26,10 @@ 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() | +| 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 | InOutRef.F(ref int, ref MyStruct, MyStruct, ref MyClass, MyClass) | InOutRef.F(ref int, ref MyStruct, MyStruct, ref 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 | InOutRef.F(ref int, ref MyStruct, MyStruct, ref MyClass, MyClass) | InOutRef.F(ref int, ref MyStruct, MyStruct, ref 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 | Pointers.Main() | 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() | +| 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 | InOutRef.Main() | 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 | Pointers.Main() | Pointers.Main() | nonUniqueIRVariable -missingCanonicalLanguageType -multipleCanonicalLanguageTypes -missingIRType -multipleIRTypes From dae20ca50cb64cc734e49836ddb0c12794166c61 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 7 Mar 2024 09:54:17 +0000 Subject: [PATCH 215/430] Explicitly import Lock --- java/ql/test/ext/TopJdkApis/TopJdkApisTest.java | 1 + 1 file changed, 1 insertion(+) 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; From c7295a09cd775e036c0d7e985a51b142c0586d09 Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 7 Mar 2024 11:55:56 +0100 Subject: [PATCH 216/430] JS: Benign test output update --- .../CallGraphs/FullTest/tests.expected | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/javascript/ql/test/library-tests/CallGraphs/FullTest/tests.expected b/javascript/ql/test/library-tests/CallGraphs/FullTest/tests.expected index 0750c30359b..4d2c78206a4 100644 --- a/javascript/ql/test/library-tests/CallGraphs/FullTest/tests.expected +++ b/javascript/ql/test/library-tests/CallGraphs/FullTest/tests.expected @@ -135,6 +135,7 @@ test_getAFunctionValue | tst.js:3:1:3:1 | h | tst.js:3:5:3:17 | function() {} | | tst.js:3:1:3:17 | h = function() {} | tst.js:3:5:3:17 | function() {} | | tst.js:3:5:3:17 | function() {} | tst.js:3:5:3:17 | function() {} | +| tst.js:4:1:4:1 | k | tst.js:2:9:2:21 | function() {} | | tst.js:4:1:4:5 | k = g | tst.js:2:9:2:21 | function() {} | | tst.js:4:5:4:5 | g | tst.js:2:9:2:21 | function() {} | | tst.js:6:1:6:1 | f | tst.js:1:1:1:15 | function f() {} | @@ -142,13 +143,23 @@ test_getAFunctionValue | tst.js:8:1:8:1 | h | tst.js:3:5:3:17 | function() {} | | tst.js:9:1:9:1 | k | tst.js:2:9:2:21 | function() {} | | tst.js:11:1:20:1 | functio ... \\tf();\\n} | tst.js:11:1:20:1 | functio ... \\tf();\\n} | +| tst.js:11:12:11:12 | m | tst.js:2:9:2:21 | function() {} | +| tst.js:11:12:11:12 | m | tst.js:2:9:2:21 | function() {} | +| tst.js:12:6:12:6 | m | tst.js:2:9:2:21 | function() {} | +| tst.js:12:6:12:27 | n | tst.js:2:9:2:21 | function() {} | | tst.js:12:6:12:27 | n | tst.js:12:15:12:27 | function() {} | +| tst.js:12:10:12:10 | m | tst.js:2:9:2:21 | function() {} | +| tst.js:12:10:12:10 | m | tst.js:2:9:2:21 | function() {} | +| tst.js:12:10:12:10 | m | tst.js:2:9:2:21 | function() {} | +| tst.js:12:10:12:27 | m \|\| function() {} | tst.js:2:9:2:21 | function() {} | | tst.js:12:10:12:27 | m \|\| function() {} | tst.js:12:15:12:27 | function() {} | | tst.js:12:15:12:27 | function() {} | tst.js:12:15:12:27 | function() {} | | tst.js:13:2:13:16 | function p() {} | tst.js:13:2:13:16 | function p() {} | | tst.js:13:11:13:11 | p | tst.js:13:2:13:16 | function p() {} | +| tst.js:14:2:14:2 | m | tst.js:2:9:2:21 | function() {} | | tst.js:15:2:15:2 | l | tst.js:11:1:20:1 | functio ... \\tf();\\n} | | tst.js:16:2:16:17 | arguments.callee | tst.js:11:1:20:1 | functio ... \\tf();\\n} | +| tst.js:17:2:17:2 | n | tst.js:2:9:2:21 | function() {} | | tst.js:17:2:17:2 | n | tst.js:12:15:12:27 | function() {} | | tst.js:18:2:18:2 | p | tst.js:13:2:13:16 | function p() {} | | tst.js:19:2:19:2 | f | tst.js:1:1:1:15 | function f() {} | @@ -463,8 +474,10 @@ test_getACallee | tst.js:7:1:7:3 | g() | tst.js:2:9:2:21 | function() {} | | tst.js:8:1:8:3 | h() | tst.js:3:5:3:17 | function() {} | | tst.js:9:1:9:3 | k() | tst.js:2:9:2:21 | function() {} | +| tst.js:14:2:14:4 | m() | tst.js:2:9:2:21 | function() {} | | tst.js:15:2:15:4 | l() | tst.js:11:1:20:1 | functio ... \\tf();\\n} | | tst.js:16:2:16:19 | arguments.callee() | tst.js:11:1:20:1 | functio ... \\tf();\\n} | +| tst.js:17:2:17:4 | n() | tst.js:2:9:2:21 | function() {} | | tst.js:17:2:17:4 | n() | tst.js:12:15:12:27 | function() {} | | tst.js:18:2:18:4 | p() | tst.js:13:2:13:16 | function p() {} | | tst.js:19:2:19:4 | f() | tst.js:1:1:1:15 | function f() {} | From 22b168beeea84e2b43dfe41a6f88953b244051ef Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 6 Mar 2024 09:41:17 +0100 Subject: [PATCH 217/430] Data flow: Allow for direct stores into nodes with `clearsContent` --- .../codeql/dataflow/internal/DataFlowImpl.qll | 213 ++++++++++++------ 1 file changed, 149 insertions(+), 64 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 2d17ffd5807..f1fc71bb1bf 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -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) { @@ -2944,16 +2935,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) { @@ -3491,6 +3490,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 { @@ -3985,11 +3994,15 @@ module MakeImpl { PathNodeMid mid, NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, AccessPath ap ) { - exists(DataFlowType t0 | - pathStep0(mid, pragma[only_bind_into](node), pragma[only_bind_into](state), cc, sc, t0, ap) 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) + | + isStoreStep = true or + not ap.storeTargetIsClearedAt(node) ) } @@ -4000,17 +4013,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 @@ -4018,7 +4033,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 @@ -4026,35 +4042,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] @@ -4712,17 +4738,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, @@ -4737,16 +4764,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] @@ -4941,7 +4972,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 ( @@ -4975,7 +5007,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 @@ -4985,7 +5018,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 @@ -4996,7 +5030,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 @@ -5006,7 +5041,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 @@ -5014,7 +5050,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 @@ -5024,21 +5061,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] @@ -5218,13 +5259,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 @@ -5232,21 +5307,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 @@ -5254,20 +5332,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 @@ -5275,7 +5356,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 | @@ -5288,18 +5370,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] From 81b04863b2d4677eac2f98e56abc07036a26a74c Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 7 Mar 2024 13:35:50 +0100 Subject: [PATCH 218/430] JS: Change note --- .../ql/src/change-notes/2024-03-07-lift-cg-restriction.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 javascript/ql/src/change-notes/2024-03-07-lift-cg-restriction.md 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. From 4dd8f6e618e40d8f4181006e780992277e72fd69 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 7 Mar 2024 14:25:55 +0100 Subject: [PATCH 219/430] Python: Add example of missing use-use flow (see PR for more detailed description) --- .../library-tests/essa/ssa-compute/test2.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 python/ql/test/library-tests/essa/ssa-compute/test2.py 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 From 6dec323cfc3a5b554cf6c658b326604aa83c31f6 Mon Sep 17 00:00:00 2001 From: Taus Date: Wed, 28 Feb 2024 15:15:21 +0000 Subject: [PATCH 220/430] Python: Copy Python extractor to `codeql` repo --- python/extractor/BUILD.bazel | 49 + python/extractor/LICENSE-PSF.md | 257 + python/extractor/Makefile | 61 + python/extractor/README.md | 211 + python/extractor/__main__.py | 4 + python/extractor/blib2to3/Grammar.txt | 224 + python/extractor/blib2to3/LICENSE | 254 + python/extractor/blib2to3/README | 20 + python/extractor/blib2to3/README.md | 67 + python/extractor/blib2to3/__init__.py | 1 + python/extractor/blib2to3/pgen2/__init__.py | 0 python/extractor/blib2to3/pgen2/driver.py | 37 + python/extractor/blib2to3/pgen2/grammar.py | 188 + python/extractor/blib2to3/pgen2/parse.py | 201 + python/extractor/blib2to3/pgen2/pgen.py | 386 + python/extractor/blib2to3/pgen2/token.py | 91 + python/extractor/blib2to3/pgen2/tokenize.py | 509 + python/extractor/blib2to3/pygram.py | 56 + python/extractor/blib2to3/pytree.py | 29 + python/extractor/buildtools/__init__.py | 0 python/extractor/buildtools/auto_install.py | 106 + python/extractor/buildtools/discover.py | 65 + python/extractor/buildtools/helper.py | 16 + python/extractor/buildtools/index.py | 429 + python/extractor/buildtools/install.py | 123 + .../extractor/buildtools/semmle/__init__.py | 0 .../buildtools/semmle/requirements.py | 136 + python/extractor/buildtools/tox.ini | 14 + .../buildtools/unify_requirements.py | 36 + python/extractor/buildtools/version.py | 223 + .../extractor/cli-integration-test/.gitignore | 5 + .../extractor/cli-integration-test/README.md | 21 + .../cli-integration-test/basic/query.ql | 1 + .../basic/repo_dir/foo.py | 1 + .../cli-integration-test/basic/test.sh | 15 + .../repo_dir/foo.py | 3 + .../disable-library-extraction/test.sh | 44 + .../extract-stdlib/query.ql | 18 + .../extract-stdlib/query.with-stdlib.expected | 12 + .../query.without-stdlib.expected | 8 + .../extract-stdlib/repo_dir/baz.py | 1 + .../extract-stdlib/repo_dir/foo.py | 4 + .../extract-stdlib/repo_dir/main.py | 6 + .../extract-stdlib/test.sh | 22 + .../repo_dir/foo.py | 3 + .../force-enable-library-extraction/test.sh | 41 + .../ignore-venv/.gitignore | 2 + .../ignore-venv/repo_dir/foo.py | 3 + .../cli-integration-test/ignore-venv/test.sh | 79 + .../pip-21.3-build-dir/.gitignore | 2 + .../pip-21.3-build-dir/repo_dir/setup.py | 12 + .../repo_dir/src/example_pkg/__init__.py | 0 .../repo_dir/src/example_pkg/foo.py | 1 + .../pip-21.3-build-dir/test.sh | 45 + .../query.only-python2.expected | 5 + .../query.python2-using-python3.expected | 5 + .../python-2-deprecation/query.ql | 18 + .../query.without-python2.expected | 4 + .../python-2-deprecation/repo_dir/setup.py | 1 + .../python-2-deprecation/repo_dir/test.py | 5 + .../python-2-deprecation/test.sh | 35 + .../without-python2/python2 | 4 + .../without-python2/which | 6 + .../without-python3/python | 4 + .../without-python3/python3 | 4 + .../without-python3/which | 9 + .../cli-integration-test/run-all-tests.sh | 28 + .../stdout-encoding/repo_dir/ನನà³à²¨_ಸà³à²•à³à²°à²¿à²ªà³à²Ÿà³.py | 1 + .../stdout-encoding/test.sh | 18 + .../cli-integration-test/symlinks/.gitignore | 2 + .../cli-integration-test/symlinks/query.ql | 1 + .../symlinks/repo_dir/foo.py | 1 + .../cli-integration-test/symlinks/test.sh | 27 + .../writing-diagnostics/diagnostics.expected | 163 + .../writing-diagnostics/make_test.py | 4 + .../writing-diagnostics/query.expected | 6 + .../writing-diagnostics/query.ql | 3 + .../writing-diagnostics/repo_dir/safe.py | 1 + .../repo_dir/syntaxerror1.py | 3 + .../repo_dir/syntaxerror2.py | 5 + .../repo_dir/syntaxerror3.py | 1 + .../writing-diagnostics/test.sh | 25 + .../test_diagnostics_output.py | 7 + python/extractor/convert_setup.py | 126 + python/extractor/data/python/stubs/README.md | 3 + .../extractor/data/python/stubs/six/LICENSE | 18 + .../data/python/stubs/six/__init__.py | 240 + .../data/python/stubs/six/moves/__init__.py | 239 + .../python/stubs/six/moves/urllib/__init__.py | 15 + .../python/stubs/six/moves/urllib_error.py | 21 + .../python/stubs/six/moves/urllib_parse.py | 65 + .../python/stubs/six/moves/urllib_request.py | 85 + .../python/stubs/six/moves/urllib_response.py | 21 + .../stubs/six/moves/urllib_robotparser.py | 15 + .../extractor/docs/extractor-python-index.svg | 3 + .../extractor/docs/extractor-python-setup.svg | 3 + python/extractor/get_venv_lib.py | 35 + python/extractor/imp.py | 344 + python/extractor/index.py | 28 + python/extractor/lark/LICENSE | 19 + python/extractor/lark/__init__.py | 7 + python/extractor/lark/common.py | 87 + python/extractor/lark/exceptions.py | 86 + python/extractor/lark/grammar.py | 60 + python/extractor/lark/grammars/__init__.py | 0 python/extractor/lark/grammars/common.lark | 49 + python/extractor/lark/indenter.py | 55 + python/extractor/lark/lark.py | 235 + python/extractor/lark/lexer.py | 252 + python/extractor/lark/load_grammar.py | 741 + python/extractor/lark/parse_tree_builder.py | 164 + python/extractor/lark/parser_frontends.py | 189 + python/extractor/lark/parsers/__init__.py | 0 python/extractor/lark/parsers/cyk.py | 342 + python/extractor/lark/parsers/earley.py | 239 + .../lark/parsers/grammar_analysis.py | 148 + .../extractor/lark/parsers/lalr_analysis.py | 108 + python/extractor/lark/parsers/lalr_parser.py | 90 + .../extractor/lark/parsers/resolve_ambig.py | 109 + python/extractor/lark/parsers/xearley.py | 156 + python/extractor/lark/reconstruct.py | 129 + python/extractor/lark/tools/__init__.py | 0 python/extractor/lark/tools/nearley.py | 186 + python/extractor/lark/tools/standalone.py | 7 + python/extractor/lark/tree.py | 162 + python/extractor/lark/utils.py | 127 + python/extractor/lark/visitors.py | 250 + python/extractor/licenses.md | 14 + python/extractor/make_zips.py | 114 + python/extractor/poetry.lock | 227 + python/extractor/pyproject.toml | 21 + python/extractor/pytest.ini | 6 + python/extractor/python_imports.py | 10 + python/extractor/python_tracer.py | 53 + python/extractor/qlpack.yml | 5 + python/extractor/semmle/__init__.py | 1 + python/extractor/semmle/cache.py | 197 + python/extractor/semmle/cmdline.py | 327 + python/extractor/semmle/data/$stdlib_27.trap | 9861 ++ python/extractor/semmle/data/$stdlib_33.trap | 11130 +++ python/extractor/semmle/data/README.md | 1 + python/extractor/semmle/data/__init__.py | 0 .../extractor/semmle/data/interpreter2.trap | 12078 +++ python/extractor/semmle/dbscheme.template | 422 + python/extractor/semmle/dbscheme_gen.py | 104 + .../extractor/semmle/extractors/__init__.py | 5 + python/extractor/semmle/extractors/base.py | 14 + .../semmle/extractors/builtin_extractor.py | 41 + .../semmle/extractors/file_extractor.py | 33 + .../semmle/extractors/module_printer.py | 31 + .../semmle/extractors/py_extractor.py | 102 + .../semmle/extractors/super_extractor.py | 69 + .../semmle/extractors/thrift_extractor.py | 28 + python/extractor/semmle/files.py | 97 + python/extractor/semmle/graph.py | 837 + python/extractor/semmle/logging.py | 393 + python/extractor/semmle/path_filters.py | 71 + python/extractor/semmle/path_rename.py | 44 + python/extractor/semmle/populator.py | 148 + python/extractor/semmle/profiling.py | 70 + python/extractor/semmle/projectlayout.py | 364 + python/extractor/semmle/python/AstMeta.py | 560 + python/extractor/semmle/python/__init__.py | 0 python/extractor/semmle/python/ast.py | 949 + python/extractor/semmle/python/extractor.py | 284 + python/extractor/semmle/python/finder.py | 377 + python/extractor/semmle/python/imports.py | 256 + python/extractor/semmle/python/master.py | 504 + python/extractor/semmle/python/modules.py | 214 + .../semmle/python/parser/__init__.py | 153 + python/extractor/semmle/python/parser/ast.py | 1491 + .../semmle/python/parser/dump_ast.py | 151 + .../semmle/python/parser/tokenizer.py | 1146 + .../semmle/python/parser/tsg_parser.py | 495 + .../semmle/python/passes/__init__.py | 0 .../extractor/semmle/python/passes/_pass.py | 11 + .../semmle/python/passes/ast_pass.py | 232 + .../extractor/semmle/python/passes/exports.py | 113 + python/extractor/semmle/python/passes/flow.py | 1927 + .../semmle/python/passes/labeller.py | 117 + .../extractor/semmle/python/passes/lexical.py | 153 + .../extractor/semmle/python/passes/objects.py | 380 + .../extractor/semmle/python/passes/pruner.py | 450 + .../semmle/python/passes/splitter.py | 384 + .../semmle/python/passes/unroller.py | 181 + python/extractor/semmle/query_gen.py | 231 + python/extractor/semmle/thrift/__init__.py | 34 + python/extractor/semmle/thrift/emit.py | 52 + python/extractor/semmle/thrift/parse.py | 83 + python/extractor/semmle/traverser.py | 157 + python/extractor/semmle/util.py | 574 + python/extractor/semmle/worker.py | 305 + python/extractor/setup.py | 33 + python/extractor/test.py | 1 + python/extractor/tests/__init__.py | 0 python/extractor/tests/buildtools/__init__.py | 0 python/extractor/tests/buildtools/helper.py | 102 + .../extractor/tests/buildtools/test_index.py | 169 + .../tests/buildtools/test_install.py | 16 + .../buildtools/test_python_auto_install.py | 53 + .../tests/buildtools/test_version.py | 244 + python/extractor/tests/data-imports/mod1.py | 1 + python/extractor/tests/data-imports/mod2.py | 2 + python/extractor/tests/data-imports/mod3.py | 0 python/extractor/tests/data-imports/mod4.py | 1 + python/extractor/tests/data-imports/mod5.py | 0 python/extractor/tests/data-imports/mod6.py | 0 python/extractor/tests/data/mod1.py | 0 python/extractor/tests/data/mod11.py | 0 python/extractor/tests/data/mod2.py | 0 .../extractor/tests/data/package/__init__.py | 0 .../tests/data/package/sub/__init__.py | 0 python/extractor/tests/data/package/sub/a.py | 0 python/extractor/tests/data/package/sub/b.py | 0 python/extractor/tests/data/package/sub2.py | 0 python/extractor/tests/data/package/x.py | 0 python/extractor/tests/data/package/y.py | 0 .../extractor/tests/dot-py/why.py/__init__.py | 2 + python/extractor/tests/dot-py/why.py/a.py | 1 + python/extractor/tests/lgtm_src/x.py | 0 python/extractor/tests/lgtm_src/y.py | 0 python/extractor/tests/off-path/nameless.py | 2 + python/extractor/tests/parser/alternating.py | 1 + python/extractor/tests/parser/assignment.py | 17 + python/extractor/tests/parser/call.py | 11 + python/extractor/tests/parser/class.py | 2 + python/extractor/tests/parser/collections.py | 37 + .../extractor/tests/parser/comment-in-args.py | 15 + .../extractor/tests/parser/comprehensions.py | 57 + python/extractor/tests/parser/empty.py | 0 .../parser/exception_groups_new.expected | 136 + .../tests/parser/exception_groups_new.py | 21 + python/extractor/tests/parser/exceptions.py | 18 + python/extractor/tests/parser/expressions.py | 14 + python/extractor/tests/parser/for.py | 15 + python/extractor/tests/parser/functions.py | 58 + python/extractor/tests/parser/if.py | 11 + .../extractor/tests/parser/just_comments.py | 8 + .../extractor/tests/parser/just_newlines.py | 3 + .../extractor/tests/parser/match_new.expected | 382 + python/extractor/tests/parser/match_new.py | 42 + python/extractor/tests/parser/misc.py | 15 + python/extractor/tests/parser/numbers.py | 12 + python/extractor/tests/parser/operators.py | 54 + .../tests/parser/simple_statements.py | 70 + .../tests/parser/simple_statements_py2.py | 8 + python/extractor/tests/parser/strings.py | 79 + .../tests/parser/strings_3.12_new.expected | 305 + .../tests/parser/strings_3.12_new.py | 21 + .../tests/parser/strings_new.expected | 265 + python/extractor/tests/parser/strings_new.py | 30 + .../extractor/tests/parser/types_new.expected | 142 + python/extractor/tests/parser/types_new.py | 5 + python/extractor/tests/parser/while.py | 6 + python/extractor/tests/parser/with.py | 9 + .../tests/project_layout/project-layout | 2 + .../tests/project_layout/src/mod1.py | 0 .../src/no_newline.py | 1 + .../src/weird_bytes.py | 2 + python/extractor/tests/syntax-error/error.py | 1 + .../extractor/tests/test_concurrent_cache.py | 95 + python/extractor/tests/test_config1/setup.py | 7 + python/extractor/tests/test_config2/setup.py | 13 + python/extractor/tests/test_dot_py.py | 18 + python/extractor/tests/test_exclude.py | 25 + python/extractor/tests/test_file.py | 30 + .../extractor/tests/test_import_restrict.py | 30 + python/extractor/tests/test_io_error.py | 45 + .../tests/test_lgtm_relative_path.py | 14 + python/extractor/tests/test_off_path.py | 18 + .../extractor/tests/test_omit_syntax_error.py | 22 + python/extractor/tests/test_parser.py | 107 + python/extractor/tests/test_patterns.py | 27 + python/extractor/tests/test_projectlayout.py | 133 + python/extractor/tests/test_python_sanity.py | 23 + python/extractor/tests/test_single.py | 21 + .../tests/test_source_archive_unchanged.py | 27 + python/extractor/tests/test_tokenizer.py | 66 + python/extractor/tests/test_trap_cache.py | 39 + .../extractor/tests/test_use_projectlayout.py | 27 + python/extractor/tests/test_utils.py | 83 + python/extractor/tests/tokenizer/basic.py | 134 + python/extractor/tests/tokenizer/basic.tokens | 472 + .../extractor/tests/tokenizer/close_brace.py | 3 + .../tests/tokenizer/close_brace.tokens | 7 + python/extractor/tests/tokenizer/comments.py | 13 + .../extractor/tests/tokenizer/comments.tokens | 43 + .../extractor/tests/tokenizer/continuation.py | 5 + .../tests/tokenizer/continuation.tokens | 11 + python/extractor/tests/tokenizer/dollar.py | 2 + .../extractor/tests/tokenizer/dollar.tokens | 5 + python/extractor/tests/tokenizer/dots.py | 4 + python/extractor/tests/tokenizer/dots.tokens | 15 + python/extractor/tests/tokenizer/emoji.py | 2 + python/extractor/tests/tokenizer/emoji.tokens | 5 + python/extractor/tests/tokenizer/feeds.py | 4 + python/extractor/tests/tokenizer/feeds.tokens | 3 + .../extractor/tests/tokenizer/gen_tokens.py | 38 + .../tests/tokenizer/gen_tokens.tokens | 275 + .../tests/tokenizer/illegal_indentation.py | 4 + .../tokenizer/illegal_indentation.tokens | 24 + .../tests/tokenizer/illegal_indentation2.py | 7 + .../tokenizer/illegal_indentation2.tokens | 34 + python/extractor/tests/tokenizer/import.py | 2 + .../extractor/tests/tokenizer/import.tokens | 7 + python/extractor/tests/tokenizer/kannada.py | 7 + .../extractor/tests/tokenizer/kannada.tokens | 19 + python/extractor/tests/tokenizer/latin.py | 4 + python/extractor/tests/tokenizer/latin.tokens | 5 + python/extractor/tests/tokenizer/numbers.py | 83 + .../extractor/tests/tokenizer/numbers.tokens | 156 + python/extractor/tests/tokenizer/pep484.py | 19 + .../extractor/tests/tokenizer/pep484.tokens | 100 + python/extractor/tests/tokenizer/shift_jis.py | 11 + .../tests/tokenizer/shift_jis.tokens | 5 + python/extractor/tests/tokenizer/strings.py | 112 + .../extractor/tests/tokenizer/strings.tokens | 211 + python/extractor/tests/tokenizer/tab.py | 3 + python/extractor/tests/tokenizer/tab.tokens | 12 + python/extractor/tests/tokenizer/temp.tokens | 84 + python/extractor/tests/tokenizer/utf8.py | 2 + python/extractor/tests/tokenizer/utf8.tokens | 3 + python/extractor/tests/tokenizer/utf8_bom.py | 1 + .../extractor/tests/tokenizer/utf8_bom.tokens | 2 + python/extractor/thrift_extractor.py | 16 + .../extractor/tokenizer_generator/README.md | 172 + .../extractor/tokenizer_generator/compiled.py | 155 + .../tokenizer_generator/gen_state_machine.py | 225 + .../extractor/tokenizer_generator/machine.py | 485 + .../extractor/tokenizer_generator/parser.py | 92 + .../tokenizer_generator/state_transition.txt | 385 + python/extractor/tokenizer_generator/test.py | 25 + .../tokenizer_generator/tokenizer_template.py | 172 + python/extractor/tox.ini | 15 + python/extractor/tsg-python/.gitignore | 1 + python/extractor/tsg-python/BUILD.bazel | 16 + python/extractor/tsg-python/Cargo.Bazel.lock | 2346 + python/extractor/tsg-python/Cargo.lock | 331 + python/extractor/tsg-python/Cargo.toml | 26 + python/extractor/tsg-python/LICENSE-APACHE | 202 + python/extractor/tsg-python/LICENSE-MIT | 21 + python/extractor/tsg-python/README.md | 624 + python/extractor/tsg-python/python.tsg | 3472 + .../extractor/tsg-python/rust-toolchain.toml | 7 + python/extractor/tsg-python/src/main.rs | 572 + .../tsg-python/tree-sitter-python/.gitignore | 7 + .../tsg-python/tree-sitter-python/.npmignore | 6 + .../tsg-python/tree-sitter-python/BUILD.bazel | 38 + .../tsg-python/tree-sitter-python/Cargo.toml | 31 + .../tsg-python/tree-sitter-python/LICENSE | 21 + .../tsg-python/tree-sitter-python/README.md | 13 + .../tsg-python/tree-sitter-python/binding.gyp | 19 + .../bindings/node/binding.cc | 28 + .../tree-sitter-python/bindings/node/index.js | 19 + .../bindings/rust/README.md | 36 + .../tree-sitter-python/bindings/rust/build.rs | 28 + .../tree-sitter-python/bindings/rust/lib.rs | 68 + .../tsg-python/tree-sitter-python/grammar.js | 1230 + .../tsg-python/tree-sitter-python/log.html | 1687 + .../tree-sitter-python/package.json | 33 + .../tree-sitter-python/queries/highlights.scm | 124 + .../tree-sitter-python/queries/tags.scm | 12 + .../tree-sitter-python/src/grammar.json | 6615 ++ .../tree-sitter-python/src/node-types.json | 4064 + .../tree-sitter-python/src/parser.c | 76504 ++++++++++++++++ .../tree-sitter-python/src/scanner.cc | 402 + .../src/tree_sitter/parser.h | 224 + python/extractor/tsg-python/tsg_to_dot.py | 60 + python/extractor/unparse.py | 709 + 369 files changed, 165346 insertions(+) create mode 100644 python/extractor/BUILD.bazel create mode 100644 python/extractor/LICENSE-PSF.md create mode 100644 python/extractor/Makefile create mode 100644 python/extractor/README.md create mode 100644 python/extractor/__main__.py create mode 100644 python/extractor/blib2to3/Grammar.txt create mode 100644 python/extractor/blib2to3/LICENSE create mode 100644 python/extractor/blib2to3/README create mode 100644 python/extractor/blib2to3/README.md create mode 100644 python/extractor/blib2to3/__init__.py create mode 100644 python/extractor/blib2to3/pgen2/__init__.py create mode 100644 python/extractor/blib2to3/pgen2/driver.py create mode 100644 python/extractor/blib2to3/pgen2/grammar.py create mode 100644 python/extractor/blib2to3/pgen2/parse.py create mode 100644 python/extractor/blib2to3/pgen2/pgen.py create mode 100644 python/extractor/blib2to3/pgen2/token.py create mode 100644 python/extractor/blib2to3/pgen2/tokenize.py create mode 100644 python/extractor/blib2to3/pygram.py create mode 100644 python/extractor/blib2to3/pytree.py create mode 100644 python/extractor/buildtools/__init__.py create mode 100644 python/extractor/buildtools/auto_install.py create mode 100644 python/extractor/buildtools/discover.py create mode 100644 python/extractor/buildtools/helper.py create mode 100644 python/extractor/buildtools/index.py create mode 100644 python/extractor/buildtools/install.py create mode 100644 python/extractor/buildtools/semmle/__init__.py create mode 100644 python/extractor/buildtools/semmle/requirements.py create mode 100644 python/extractor/buildtools/tox.ini create mode 100644 python/extractor/buildtools/unify_requirements.py create mode 100644 python/extractor/buildtools/version.py create mode 100644 python/extractor/cli-integration-test/.gitignore create mode 100644 python/extractor/cli-integration-test/README.md create mode 100644 python/extractor/cli-integration-test/basic/query.ql create mode 100644 python/extractor/cli-integration-test/basic/repo_dir/foo.py create mode 100755 python/extractor/cli-integration-test/basic/test.sh create mode 100644 python/extractor/cli-integration-test/disable-library-extraction/repo_dir/foo.py create mode 100755 python/extractor/cli-integration-test/disable-library-extraction/test.sh create mode 100644 python/extractor/cli-integration-test/extract-stdlib/query.ql create mode 100644 python/extractor/cli-integration-test/extract-stdlib/query.with-stdlib.expected create mode 100644 python/extractor/cli-integration-test/extract-stdlib/query.without-stdlib.expected create mode 100644 python/extractor/cli-integration-test/extract-stdlib/repo_dir/baz.py create mode 100644 python/extractor/cli-integration-test/extract-stdlib/repo_dir/foo.py create mode 100644 python/extractor/cli-integration-test/extract-stdlib/repo_dir/main.py create mode 100755 python/extractor/cli-integration-test/extract-stdlib/test.sh create mode 100644 python/extractor/cli-integration-test/force-enable-library-extraction/repo_dir/foo.py create mode 100755 python/extractor/cli-integration-test/force-enable-library-extraction/test.sh create mode 100644 python/extractor/cli-integration-test/ignore-venv/.gitignore create mode 100644 python/extractor/cli-integration-test/ignore-venv/repo_dir/foo.py create mode 100755 python/extractor/cli-integration-test/ignore-venv/test.sh create mode 100644 python/extractor/cli-integration-test/pip-21.3-build-dir/.gitignore create mode 100644 python/extractor/cli-integration-test/pip-21.3-build-dir/repo_dir/setup.py create mode 100644 python/extractor/cli-integration-test/pip-21.3-build-dir/repo_dir/src/example_pkg/__init__.py create mode 100644 python/extractor/cli-integration-test/pip-21.3-build-dir/repo_dir/src/example_pkg/foo.py create mode 100755 python/extractor/cli-integration-test/pip-21.3-build-dir/test.sh create mode 100644 python/extractor/cli-integration-test/python-2-deprecation/query.only-python2.expected create mode 100644 python/extractor/cli-integration-test/python-2-deprecation/query.python2-using-python3.expected create mode 100644 python/extractor/cli-integration-test/python-2-deprecation/query.ql create mode 100644 python/extractor/cli-integration-test/python-2-deprecation/query.without-python2.expected create mode 100644 python/extractor/cli-integration-test/python-2-deprecation/repo_dir/setup.py create mode 100644 python/extractor/cli-integration-test/python-2-deprecation/repo_dir/test.py create mode 100755 python/extractor/cli-integration-test/python-2-deprecation/test.sh create mode 100755 python/extractor/cli-integration-test/python-2-deprecation/without-python2/python2 create mode 100755 python/extractor/cli-integration-test/python-2-deprecation/without-python2/which create mode 100755 python/extractor/cli-integration-test/python-2-deprecation/without-python3/python create mode 100755 python/extractor/cli-integration-test/python-2-deprecation/without-python3/python3 create mode 100755 python/extractor/cli-integration-test/python-2-deprecation/without-python3/which create mode 100755 python/extractor/cli-integration-test/run-all-tests.sh create mode 100644 python/extractor/cli-integration-test/stdout-encoding/repo_dir/ನನà³à²¨_ಸà³à²•à³à²°à²¿à²ªà³à²Ÿà³.py create mode 100755 python/extractor/cli-integration-test/stdout-encoding/test.sh create mode 100644 python/extractor/cli-integration-test/symlinks/.gitignore create mode 100644 python/extractor/cli-integration-test/symlinks/query.ql create mode 100644 python/extractor/cli-integration-test/symlinks/repo_dir/foo.py create mode 100755 python/extractor/cli-integration-test/symlinks/test.sh create mode 100644 python/extractor/cli-integration-test/writing-diagnostics/diagnostics.expected create mode 100644 python/extractor/cli-integration-test/writing-diagnostics/make_test.py create mode 100644 python/extractor/cli-integration-test/writing-diagnostics/query.expected create mode 100644 python/extractor/cli-integration-test/writing-diagnostics/query.ql create mode 100644 python/extractor/cli-integration-test/writing-diagnostics/repo_dir/safe.py create mode 100644 python/extractor/cli-integration-test/writing-diagnostics/repo_dir/syntaxerror1.py create mode 100644 python/extractor/cli-integration-test/writing-diagnostics/repo_dir/syntaxerror2.py create mode 100644 python/extractor/cli-integration-test/writing-diagnostics/repo_dir/syntaxerror3.py create mode 100755 python/extractor/cli-integration-test/writing-diagnostics/test.sh create mode 100644 python/extractor/cli-integration-test/writing-diagnostics/test_diagnostics_output.py create mode 100644 python/extractor/convert_setup.py create mode 100644 python/extractor/data/python/stubs/README.md create mode 100644 python/extractor/data/python/stubs/six/LICENSE create mode 100644 python/extractor/data/python/stubs/six/__init__.py create mode 100644 python/extractor/data/python/stubs/six/moves/__init__.py create mode 100644 python/extractor/data/python/stubs/six/moves/urllib/__init__.py create mode 100644 python/extractor/data/python/stubs/six/moves/urllib_error.py create mode 100644 python/extractor/data/python/stubs/six/moves/urllib_parse.py create mode 100644 python/extractor/data/python/stubs/six/moves/urllib_request.py create mode 100644 python/extractor/data/python/stubs/six/moves/urllib_response.py create mode 100644 python/extractor/data/python/stubs/six/moves/urllib_robotparser.py create mode 100644 python/extractor/docs/extractor-python-index.svg create mode 100644 python/extractor/docs/extractor-python-setup.svg create mode 100644 python/extractor/get_venv_lib.py create mode 100644 python/extractor/imp.py create mode 100644 python/extractor/index.py create mode 100644 python/extractor/lark/LICENSE create mode 100644 python/extractor/lark/__init__.py create mode 100644 python/extractor/lark/common.py create mode 100644 python/extractor/lark/exceptions.py create mode 100644 python/extractor/lark/grammar.py create mode 100644 python/extractor/lark/grammars/__init__.py create mode 100644 python/extractor/lark/grammars/common.lark create mode 100644 python/extractor/lark/indenter.py create mode 100644 python/extractor/lark/lark.py create mode 100644 python/extractor/lark/lexer.py create mode 100644 python/extractor/lark/load_grammar.py create mode 100644 python/extractor/lark/parse_tree_builder.py create mode 100644 python/extractor/lark/parser_frontends.py create mode 100644 python/extractor/lark/parsers/__init__.py create mode 100644 python/extractor/lark/parsers/cyk.py create mode 100644 python/extractor/lark/parsers/earley.py create mode 100644 python/extractor/lark/parsers/grammar_analysis.py create mode 100644 python/extractor/lark/parsers/lalr_analysis.py create mode 100644 python/extractor/lark/parsers/lalr_parser.py create mode 100644 python/extractor/lark/parsers/resolve_ambig.py create mode 100644 python/extractor/lark/parsers/xearley.py create mode 100644 python/extractor/lark/reconstruct.py create mode 100644 python/extractor/lark/tools/__init__.py create mode 100644 python/extractor/lark/tools/nearley.py create mode 100644 python/extractor/lark/tools/standalone.py create mode 100644 python/extractor/lark/tree.py create mode 100644 python/extractor/lark/utils.py create mode 100644 python/extractor/lark/visitors.py create mode 100644 python/extractor/licenses.md create mode 100755 python/extractor/make_zips.py create mode 100644 python/extractor/poetry.lock create mode 100644 python/extractor/pyproject.toml create mode 100644 python/extractor/pytest.ini create mode 100755 python/extractor/python_imports.py create mode 100755 python/extractor/python_tracer.py create mode 100644 python/extractor/qlpack.yml create mode 100644 python/extractor/semmle/__init__.py create mode 100644 python/extractor/semmle/cache.py create mode 100644 python/extractor/semmle/cmdline.py create mode 100644 python/extractor/semmle/data/$stdlib_27.trap create mode 100644 python/extractor/semmle/data/$stdlib_33.trap create mode 100644 python/extractor/semmle/data/README.md create mode 100644 python/extractor/semmle/data/__init__.py create mode 100644 python/extractor/semmle/data/interpreter2.trap create mode 100644 python/extractor/semmle/dbscheme.template create mode 100644 python/extractor/semmle/dbscheme_gen.py create mode 100644 python/extractor/semmle/extractors/__init__.py create mode 100644 python/extractor/semmle/extractors/base.py create mode 100644 python/extractor/semmle/extractors/builtin_extractor.py create mode 100644 python/extractor/semmle/extractors/file_extractor.py create mode 100644 python/extractor/semmle/extractors/module_printer.py create mode 100644 python/extractor/semmle/extractors/py_extractor.py create mode 100644 python/extractor/semmle/extractors/super_extractor.py create mode 100644 python/extractor/semmle/extractors/thrift_extractor.py create mode 100644 python/extractor/semmle/files.py create mode 100755 python/extractor/semmle/graph.py create mode 100644 python/extractor/semmle/logging.py create mode 100644 python/extractor/semmle/path_filters.py create mode 100644 python/extractor/semmle/path_rename.py create mode 100644 python/extractor/semmle/populator.py create mode 100644 python/extractor/semmle/profiling.py create mode 100644 python/extractor/semmle/projectlayout.py create mode 100644 python/extractor/semmle/python/AstMeta.py create mode 100644 python/extractor/semmle/python/__init__.py create mode 100644 python/extractor/semmle/python/ast.py create mode 100644 python/extractor/semmle/python/extractor.py create mode 100644 python/extractor/semmle/python/finder.py create mode 100644 python/extractor/semmle/python/imports.py create mode 100755 python/extractor/semmle/python/master.py create mode 100644 python/extractor/semmle/python/modules.py create mode 100644 python/extractor/semmle/python/parser/__init__.py create mode 100644 python/extractor/semmle/python/parser/ast.py create mode 100644 python/extractor/semmle/python/parser/dump_ast.py create mode 100644 python/extractor/semmle/python/parser/tokenizer.py create mode 100644 python/extractor/semmle/python/parser/tsg_parser.py create mode 100644 python/extractor/semmle/python/passes/__init__.py create mode 100644 python/extractor/semmle/python/passes/_pass.py create mode 100644 python/extractor/semmle/python/passes/ast_pass.py create mode 100644 python/extractor/semmle/python/passes/exports.py create mode 100755 python/extractor/semmle/python/passes/flow.py create mode 100644 python/extractor/semmle/python/passes/labeller.py create mode 100644 python/extractor/semmle/python/passes/lexical.py create mode 100644 python/extractor/semmle/python/passes/objects.py create mode 100644 python/extractor/semmle/python/passes/pruner.py create mode 100755 python/extractor/semmle/python/passes/splitter.py create mode 100644 python/extractor/semmle/python/passes/unroller.py create mode 100644 python/extractor/semmle/query_gen.py create mode 100644 python/extractor/semmle/thrift/__init__.py create mode 100644 python/extractor/semmle/thrift/emit.py create mode 100644 python/extractor/semmle/thrift/parse.py create mode 100644 python/extractor/semmle/traverser.py create mode 100644 python/extractor/semmle/util.py create mode 100644 python/extractor/semmle/worker.py create mode 100644 python/extractor/setup.py create mode 100644 python/extractor/test.py create mode 100644 python/extractor/tests/__init__.py create mode 100644 python/extractor/tests/buildtools/__init__.py create mode 100644 python/extractor/tests/buildtools/helper.py create mode 100644 python/extractor/tests/buildtools/test_index.py create mode 100644 python/extractor/tests/buildtools/test_install.py create mode 100755 python/extractor/tests/buildtools/test_python_auto_install.py create mode 100644 python/extractor/tests/buildtools/test_version.py create mode 100644 python/extractor/tests/data-imports/mod1.py create mode 100644 python/extractor/tests/data-imports/mod2.py create mode 100644 python/extractor/tests/data-imports/mod3.py create mode 100644 python/extractor/tests/data-imports/mod4.py create mode 100644 python/extractor/tests/data-imports/mod5.py create mode 100644 python/extractor/tests/data-imports/mod6.py create mode 100644 python/extractor/tests/data/mod1.py create mode 100644 python/extractor/tests/data/mod11.py create mode 100644 python/extractor/tests/data/mod2.py create mode 100644 python/extractor/tests/data/package/__init__.py create mode 100644 python/extractor/tests/data/package/sub/__init__.py create mode 100644 python/extractor/tests/data/package/sub/a.py create mode 100644 python/extractor/tests/data/package/sub/b.py create mode 100644 python/extractor/tests/data/package/sub2.py create mode 100644 python/extractor/tests/data/package/x.py create mode 100644 python/extractor/tests/data/package/y.py create mode 100644 python/extractor/tests/dot-py/why.py/__init__.py create mode 100644 python/extractor/tests/dot-py/why.py/a.py create mode 100644 python/extractor/tests/lgtm_src/x.py create mode 100644 python/extractor/tests/lgtm_src/y.py create mode 100644 python/extractor/tests/off-path/nameless.py create mode 100644 python/extractor/tests/parser/alternating.py create mode 100644 python/extractor/tests/parser/assignment.py create mode 100644 python/extractor/tests/parser/call.py create mode 100644 python/extractor/tests/parser/class.py create mode 100644 python/extractor/tests/parser/collections.py create mode 100644 python/extractor/tests/parser/comment-in-args.py create mode 100644 python/extractor/tests/parser/comprehensions.py create mode 100644 python/extractor/tests/parser/empty.py create mode 100644 python/extractor/tests/parser/exception_groups_new.expected create mode 100644 python/extractor/tests/parser/exception_groups_new.py create mode 100644 python/extractor/tests/parser/exceptions.py create mode 100644 python/extractor/tests/parser/expressions.py create mode 100644 python/extractor/tests/parser/for.py create mode 100644 python/extractor/tests/parser/functions.py create mode 100644 python/extractor/tests/parser/if.py create mode 100644 python/extractor/tests/parser/just_comments.py create mode 100644 python/extractor/tests/parser/just_newlines.py create mode 100644 python/extractor/tests/parser/match_new.expected create mode 100644 python/extractor/tests/parser/match_new.py create mode 100644 python/extractor/tests/parser/misc.py create mode 100644 python/extractor/tests/parser/numbers.py create mode 100644 python/extractor/tests/parser/operators.py create mode 100644 python/extractor/tests/parser/simple_statements.py create mode 100644 python/extractor/tests/parser/simple_statements_py2.py create mode 100644 python/extractor/tests/parser/strings.py create mode 100644 python/extractor/tests/parser/strings_3.12_new.expected create mode 100644 python/extractor/tests/parser/strings_3.12_new.py create mode 100644 python/extractor/tests/parser/strings_new.expected create mode 100644 python/extractor/tests/parser/strings_new.py create mode 100644 python/extractor/tests/parser/types_new.expected create mode 100644 python/extractor/tests/parser/types_new.py create mode 100644 python/extractor/tests/parser/while.py create mode 100644 python/extractor/tests/parser/with.py create mode 100644 python/extractor/tests/project_layout/project-layout create mode 100644 python/extractor/tests/project_layout/src/mod1.py create mode 100644 python/extractor/tests/source_archive_unchanged/src/no_newline.py create mode 100644 python/extractor/tests/source_archive_unchanged/src/weird_bytes.py create mode 100644 python/extractor/tests/syntax-error/error.py create mode 100644 python/extractor/tests/test_concurrent_cache.py create mode 100644 python/extractor/tests/test_config1/setup.py create mode 100644 python/extractor/tests/test_config2/setup.py create mode 100644 python/extractor/tests/test_dot_py.py create mode 100644 python/extractor/tests/test_exclude.py create mode 100644 python/extractor/tests/test_file.py create mode 100644 python/extractor/tests/test_import_restrict.py create mode 100644 python/extractor/tests/test_io_error.py create mode 100644 python/extractor/tests/test_lgtm_relative_path.py create mode 100644 python/extractor/tests/test_off_path.py create mode 100644 python/extractor/tests/test_omit_syntax_error.py create mode 100644 python/extractor/tests/test_parser.py create mode 100644 python/extractor/tests/test_patterns.py create mode 100644 python/extractor/tests/test_projectlayout.py create mode 100644 python/extractor/tests/test_python_sanity.py create mode 100644 python/extractor/tests/test_single.py create mode 100644 python/extractor/tests/test_source_archive_unchanged.py create mode 100644 python/extractor/tests/test_tokenizer.py create mode 100644 python/extractor/tests/test_trap_cache.py create mode 100644 python/extractor/tests/test_use_projectlayout.py create mode 100644 python/extractor/tests/test_utils.py create mode 100644 python/extractor/tests/tokenizer/basic.py create mode 100644 python/extractor/tests/tokenizer/basic.tokens create mode 100644 python/extractor/tests/tokenizer/close_brace.py create mode 100644 python/extractor/tests/tokenizer/close_brace.tokens create mode 100644 python/extractor/tests/tokenizer/comments.py create mode 100644 python/extractor/tests/tokenizer/comments.tokens create mode 100644 python/extractor/tests/tokenizer/continuation.py create mode 100644 python/extractor/tests/tokenizer/continuation.tokens create mode 100644 python/extractor/tests/tokenizer/dollar.py create mode 100644 python/extractor/tests/tokenizer/dollar.tokens create mode 100644 python/extractor/tests/tokenizer/dots.py create mode 100644 python/extractor/tests/tokenizer/dots.tokens create mode 100644 python/extractor/tests/tokenizer/emoji.py create mode 100644 python/extractor/tests/tokenizer/emoji.tokens create mode 100644 python/extractor/tests/tokenizer/feeds.py create mode 100644 python/extractor/tests/tokenizer/feeds.tokens create mode 100644 python/extractor/tests/tokenizer/gen_tokens.py create mode 100644 python/extractor/tests/tokenizer/gen_tokens.tokens create mode 100644 python/extractor/tests/tokenizer/illegal_indentation.py create mode 100644 python/extractor/tests/tokenizer/illegal_indentation.tokens create mode 100644 python/extractor/tests/tokenizer/illegal_indentation2.py create mode 100644 python/extractor/tests/tokenizer/illegal_indentation2.tokens create mode 100644 python/extractor/tests/tokenizer/import.py create mode 100644 python/extractor/tests/tokenizer/import.tokens create mode 100644 python/extractor/tests/tokenizer/kannada.py create mode 100644 python/extractor/tests/tokenizer/kannada.tokens create mode 100644 python/extractor/tests/tokenizer/latin.py create mode 100644 python/extractor/tests/tokenizer/latin.tokens create mode 100644 python/extractor/tests/tokenizer/numbers.py create mode 100644 python/extractor/tests/tokenizer/numbers.tokens create mode 100644 python/extractor/tests/tokenizer/pep484.py create mode 100644 python/extractor/tests/tokenizer/pep484.tokens create mode 100644 python/extractor/tests/tokenizer/shift_jis.py create mode 100644 python/extractor/tests/tokenizer/shift_jis.tokens create mode 100644 python/extractor/tests/tokenizer/strings.py create mode 100644 python/extractor/tests/tokenizer/strings.tokens create mode 100644 python/extractor/tests/tokenizer/tab.py create mode 100644 python/extractor/tests/tokenizer/tab.tokens create mode 100644 python/extractor/tests/tokenizer/temp.tokens create mode 100644 python/extractor/tests/tokenizer/utf8.py create mode 100644 python/extractor/tests/tokenizer/utf8.tokens create mode 100644 python/extractor/tests/tokenizer/utf8_bom.py create mode 100644 python/extractor/tests/tokenizer/utf8_bom.tokens create mode 100755 python/extractor/thrift_extractor.py create mode 100644 python/extractor/tokenizer_generator/README.md create mode 100644 python/extractor/tokenizer_generator/compiled.py create mode 100644 python/extractor/tokenizer_generator/gen_state_machine.py create mode 100644 python/extractor/tokenizer_generator/machine.py create mode 100644 python/extractor/tokenizer_generator/parser.py create mode 100644 python/extractor/tokenizer_generator/state_transition.txt create mode 100644 python/extractor/tokenizer_generator/test.py create mode 100644 python/extractor/tokenizer_generator/tokenizer_template.py create mode 100644 python/extractor/tox.ini create mode 100644 python/extractor/tsg-python/.gitignore create mode 100644 python/extractor/tsg-python/BUILD.bazel create mode 100644 python/extractor/tsg-python/Cargo.Bazel.lock create mode 100644 python/extractor/tsg-python/Cargo.lock create mode 100644 python/extractor/tsg-python/Cargo.toml create mode 100644 python/extractor/tsg-python/LICENSE-APACHE create mode 100644 python/extractor/tsg-python/LICENSE-MIT create mode 100644 python/extractor/tsg-python/README.md create mode 100644 python/extractor/tsg-python/python.tsg create mode 100644 python/extractor/tsg-python/rust-toolchain.toml create mode 100644 python/extractor/tsg-python/src/main.rs create mode 100644 python/extractor/tsg-python/tree-sitter-python/.gitignore create mode 100644 python/extractor/tsg-python/tree-sitter-python/.npmignore create mode 100644 python/extractor/tsg-python/tree-sitter-python/BUILD.bazel create mode 100644 python/extractor/tsg-python/tree-sitter-python/Cargo.toml create mode 100644 python/extractor/tsg-python/tree-sitter-python/LICENSE create mode 100644 python/extractor/tsg-python/tree-sitter-python/README.md create mode 100644 python/extractor/tsg-python/tree-sitter-python/binding.gyp create mode 100644 python/extractor/tsg-python/tree-sitter-python/bindings/node/binding.cc create mode 100644 python/extractor/tsg-python/tree-sitter-python/bindings/node/index.js create mode 100644 python/extractor/tsg-python/tree-sitter-python/bindings/rust/README.md create mode 100644 python/extractor/tsg-python/tree-sitter-python/bindings/rust/build.rs create mode 100644 python/extractor/tsg-python/tree-sitter-python/bindings/rust/lib.rs create mode 100644 python/extractor/tsg-python/tree-sitter-python/grammar.js create mode 100644 python/extractor/tsg-python/tree-sitter-python/log.html create mode 100644 python/extractor/tsg-python/tree-sitter-python/package.json create mode 100644 python/extractor/tsg-python/tree-sitter-python/queries/highlights.scm create mode 100644 python/extractor/tsg-python/tree-sitter-python/queries/tags.scm create mode 100644 python/extractor/tsg-python/tree-sitter-python/src/grammar.json create mode 100644 python/extractor/tsg-python/tree-sitter-python/src/node-types.json create mode 100644 python/extractor/tsg-python/tree-sitter-python/src/parser.c create mode 100644 python/extractor/tsg-python/tree-sitter-python/src/scanner.cc create mode 100644 python/extractor/tsg-python/tree-sitter-python/src/tree_sitter/parser.h create mode 100644 python/extractor/tsg-python/tsg_to_dot.py create mode 100644 python/extractor/unparse.py 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. + +
    + + + +![python extraction overiew](./docs/extractor-python-setup.svg) + +
    + +### 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. + +
    + + + +![python extraction overiew](./docs/extractor-python-index.svg) + +
    + +# 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 " + +__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 + : + 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 ' +__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", + ("", 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 " + +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//`. + + 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 `/Lib/site-packages` (Windows) or + # `/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 + 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 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 \"\", 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 \"\", line 1" + ] + }, + "location": { + "file": "/repo_dir/syntaxerror3.py", + "startColumn": 0, + "endColumn": 0, + "startLine": 1, + "endLine": 1 + }, + "markdownMessage": "A parse error occurred while processing `/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 \"\", 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 \"\", line 3" + ] + }, + "location": { + "file": "/repo_dir/syntaxerror1.py", + "startColumn": 0, + "endColumn": 0, + "startLine": 3, + "endLine": 3 + }, + "markdownMessage": "A parse error occurred while processing `/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 \"\", 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 \"\", line 5" + ] + }, + "location": { + "file": "/repo_dir/syntaxerror2.py", + "startColumn": 0, + "endColumn": 0, + "startLine": 5, + "endLine": 5 + }, + "markdownMessage": "A parse error occurred while processing `/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": "/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 = "" +requirements_file_path = "" + +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 " +__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 @@ + + +
    runs
    runs
    codeql database create
    codeql database create
    exec python index.py
    exec python index.py
    language-packs/python/tools/autobuild.sh
    language-packs/python/tools/autobuild.sh
    python index.py
    python index.py
    index.py1) add zipfile to path2) buildtools.index.main()buildtools.index.main()1) version = buildtools.discover.get_version()2) options = buildtools.index.extractor_options(version)3) subprocess.check_call(['python{version}', 'python_tracer.py'] + options)
    buildtools.index.extractor_options(version)
    buildtools.index.extractor_options(version)
    buildtools.index.get_path_options(version)
    buildtools.index.get_path_options(version)
    buildtools.install.get_library(version)
    buildtools.install.get_library(versi...
    subprocess.check_output()
    subprocess.check_output()
    python_executable get_venv_lib.py
    python_executable get_venv_lib.py
    'index' step on LGTM.com
    'index' step on LGTM.com
    python index.py
    python index.py
    lgtm-buildtools/buildtools/python/index.sh
    lgtm-buildtools/buildtools/python/index.sh
    buildtools.install.Venv.lib()1) self.venv_executable = $LGTM_WORKSPACE/venv/bin/python2) if os.path.exists(self.venv_executable):        python_executable = [self.venv_executable]    else:        python_executable = executable(self.version)3) try:        return subprocess.check_outputl(python_executable + ['get_venv_lib.py']    except:        <some error handling code that seems buggy>get_venv_lib.pyprint(get_venv_lib())get_venv_lib.get_venv_lib()try:    return pip_installed_folder()except:    return first_site_packages()
    Viewer does not support full SVG 1.1
    \ 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 @@ + + +
    python setup.py
    python setup.py
    'python_setup' step on LGTM.com
    'python_setup' step on LGTM.com
    python ${LGTM_BUILDTOOLS}/python/setup.py
    python ${LGTM_BUILDTOOLS}/python/setup.py
    lgtm-buildtools/buildtools/python_setup.sh
    lgtm-buildtools/buildtools/python_setup.sh
    subprocess.call(["python", "$SEMMLE_DIST/tools/setup.py"])
    subprocess.call(["python", "$SEMMLE_DIST/tools/setup.py"])
    lgtm-buildtools/buildtools/python/setup.py
    lgtm-buildtools/buildtools/python/setup.py
    setup.py1) add zipfile to path2) version, root, requirement_files = buildtools.discover.discover()3) buildtools.install.main(version, root, requirement_files)buildtools.install.main(version, root, requirement_files)1) venv = buildtools.install.Venv("$LGTM_WORKSPACE/venv", version)2) venv.create()
    3) requirements_from_setup = "$LGTM_WORKSPACE/setup_requirements.txt"
    3) requirements_from_setup = "$LGTM_WORKSPACE/setup_requirements.txt"
    4) args = [root, requirements_from_setup, system_packages(version)]5) subprocess.call([venv.venv_executable, 'convert_setup.py'] + args)6) if os.path.exists(requirements_from_setup):        requirement_files = [ requirements_from_setup ] + requirement_files[1:]7) requirements = unify_requirements.gather(requirement_files)8) buildtools.auto_install.install(requirements, venv)buildtools.install.Venv.create()1) exe = buildtools.version.executable(self.version)2) if self.version == 2:      subprocess.check_call(exe, ["-m", "virtualenv", "$LGTM_WORKSPACE/venv"]
    3) if self.version == 3:
          subprocess.check_call(exe, ["-m", "venv", "$LGTM_WORKSPACE/venv"
    3) if self.version == 3:...
    $LGTM_WORKSPACE/venv/bin/python convert_setup.py
    $LGTM_WORKSPACE/venv/bin/python convert_setup.py
    running root/setup.py
    running root/setup.py
    convert_setup.py1) root = sys.argv[1]    global requirements_file_path = sys.argv[2]    sys.path.extend(sys.argv[3:])    override = os.environ.get("LGTM_PYTHON_SETUP_SETUP_PY")2) if override == "false":       sys.exit(0)3) if override:        setup_file_path = os.path.join(override, 'setup.py')    else:        setup_file_path = os.path.join(root, 'setup.py')4) setattr(setuptools, "setup", setup_interceptor)    setattr(distutils.core, "setup", setup_interceptor)
    5) imp.load_source(setup_file_path)
        as though invoked as './setup.py build'
    5) imp.load_source(setup_file_path)...
    convert_setup.setup_interceptor(**args)
    1) requirements = gather requirements from **args
    ('requires', 'install_requires', 'extras_require', 'dependency_links')
    1) requirements = gather requirements from **args...
    2) write 'requirements' to 'global requirements_file_path' 
        ("$LGTM_WORKSPACE/setup_requirements.txt")
    2) write 'requirements' to 'global requirements_file_path'...
    buildtools.auto_install.install(requirements, venv)
    informally what boils down to
    for req in requirements:
        run $LGTM_WORKSPACE/venv/bin/python -m pip install 'req'
    informally what boils down to...
    Viewer does not support full SVG 1.1
    \ 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 = '' + 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 == '': # 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 " % 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..8be72421d45 --- /dev/null +++ b/python/extractor/qlpack.yml @@ -0,0 +1,5 @@ +name: extractor-python +dependencies: + codeql/python-all: "*" + codeql/python-queries: "*" +extractor: python 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$ 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, '/* %s.%s = %s, %s */\n', + n.ql_name(), name, offset, f_t.__name__) + if n.parents: + fprintf(out, '/* %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 null 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 = "" + + #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<= 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 "" 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', '') + + 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: aÿb") \ 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 -*- +# Günter + 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‚²‚ë‚©‚çŠJŽn‚³‚ê‚Ä‚¢‚Ü‚·B +ŠJ”­ŽÒ‚Ì Guido van Rossum ‚Í‹³ˆç—p‚̃vƒƒOƒ‰ƒ~ƒ“ƒOŒ¾ŒêuABCv‚ÌŠJ”­‚ÉŽQ‰Á‚µ‚Ä‚¢‚Ü‚µ‚½‚ªAABC ‚ÍŽÀ—pã‚Ì–Ú“I‚ɂ͂ ‚Ü‚è“K‚µ‚Ä‚¢‚Ü‚¹‚ñ‚Å‚µ‚½B +‚±‚̂悤‚È”wŒi‚©‚綂܂ꂽ Python ‚ÌŒ¾ŒêÝŒv‚ÍAuƒVƒ“ƒvƒ‹v‚ÅuK“¾‚ª—eˆÕv‚Æ‚¢‚¤–Ú•W‚Éd“_‚ª’u‚©‚ê‚Ä‚¢‚Ü‚·B +‘½‚­‚̃XƒNƒŠƒvƒgŒnŒ¾Œê‚ł̓†[ƒU‚Ì–Úæ‚Ì—˜•Ö«‚ð—D悵‚ÄFX‚È‹@”\‚ðŒ¾Œê—v‘f‚Æ‚µ‚ÄŽæ‚è“ü‚ê‚éꇂª‘½‚¢‚̂ł·‚ªAPython ‚ł͂»‚¤‚¢‚Á‚½¬×H‚ª’ljÁ‚³‚ê‚邱‚Ƃ͂ ‚܂肠‚è‚Ü‚¹‚ñB +Œ¾ŒêŽ©‘̂̋@”\‚ÍŬŒÀ‚ɉŸ‚³‚¦A•K—v‚È‹@”\‚ÍŠg’£ƒ‚ƒWƒ…[ƒ‹‚Æ‚µ‚ĒljÁ‚·‚éA‚Æ‚¢‚¤‚Ì‚ª 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[\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[\\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 "] +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 + +{ + attr (@nd.node) field_name = some_value +} +``` + +For fields that point directly to an AST node: + +```tsg + +{ + attr (@parent.node) field_name = @child.node +} +``` + +For fields that point to lists of AST nodes: + +```tsg + +{ + edge @parent.node -> @child.node + attr (@parent.node -> @child.node) field_name = +} +``` + +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: +; name: +; top: #false +; name: +; asname: +; Name: +; variable: Variable(, None) +; ctx: "store" +; alias: +; value: +; ImportMember: +; module: +; ImportExpr: +; level: +; name: +; top: #false +; name: +; asname: +; Name: +; variable: Variable(, 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 { + 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 { + 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 { + 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 { + 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 { + 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 { + 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 { + 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 { + 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 { + 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 { + 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 { + 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 { + 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 { + 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 { + 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 { + 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 { + 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 { + 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 ") + .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 ", + "Douglas Creager ", +] +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": [ + " +#include "nan.h" + +using namespace v8; + +extern "C" TSLanguage * tree_sitter_python(); + +namespace { + +NAN_METHOD(New) {} + +void Init(Local exports, Local module) { + Local tpl = Nan::New(New); + tpl->SetClassName(Nan::New("Language").ToLocalChecked()); + tpl->InstanceTemplate()->SetInternalFieldCount(1); + + Local constructor = Nan::GetFunction(tpl).ToLocalChecked(); + Local 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 @@ + + + + + + + + + + + +%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 From 4b0689b6baa97aa4bf0c6934483b73dde5129ac2 Mon Sep 17 00:00:00 2001 From: Taus Date: Wed, 28 Feb 2024 15:22:05 +0000 Subject: [PATCH 221/430] Python: Add `warnOnImplicitThis: true` to `qlpack.yml` --- python/extractor/qlpack.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/python/extractor/qlpack.yml b/python/extractor/qlpack.yml index 8be72421d45..783c301abbb 100644 --- a/python/extractor/qlpack.yml +++ b/python/extractor/qlpack.yml @@ -3,3 +3,4 @@ dependencies: codeql/python-all: "*" codeql/python-queries: "*" extractor: python +warnOnImplicitThis: true From 7d74125508aaf237af675369655dbce2a0ae1b3d Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Thu, 7 Mar 2024 15:17:49 +0100 Subject: [PATCH 222/430] Go: Promote go/uncontrolled-allocation-size --- .../security/UncontrolledAllocationSize.qll | 34 +++++++++++ ...controlledAllocationSizeCustomizations.qll | 33 +++++++++++ .../CWE-770/UncontrolledAllocationSize.qhelp | 36 +++++++++++ .../CWE-770/UncontrolledAllocationSize.ql | 22 +++++++ .../CWE-770/UncontrolledAllocationSizeBad.go} | 0 .../UncontrolledAllocationSizeGood.go} | 0 ...2024-03-07-uncontrolled-allocation-size.md | 4 ++ .../CWE-770/DenialOfService.qhelp | 32 ---------- .../experimental/CWE-770/DenialOfService.ql | 59 ------------------- .../CWE-770/DenialOfService.expected | 18 ------ .../CWE-770/DenialOfService.qlref | 1 - .../UncontrolledAllocationSize.expected | 0 .../CWE-770/UncontrolledAllocationSize.ql | 4 ++ .../CWE-770/UncontrolledAllocationSizeBad.go} | 2 +- .../UncontrolledAllocationSizeGood.go} | 0 15 files changed, 134 insertions(+), 111 deletions(-) create mode 100644 go/ql/lib/semmle/go/security/UncontrolledAllocationSize.qll create mode 100644 go/ql/lib/semmle/go/security/UncontrolledAllocationSizeCustomizations.qll create mode 100644 go/ql/src/Security/CWE-770/UncontrolledAllocationSize.qhelp create mode 100644 go/ql/src/Security/CWE-770/UncontrolledAllocationSize.ql rename go/ql/src/{experimental/CWE-770/DenialOfServiceBad.go => Security/CWE-770/UncontrolledAllocationSizeBad.go} (100%) rename go/ql/src/{experimental/CWE-770/DenialOfServiceGood.go => Security/CWE-770/UncontrolledAllocationSizeGood.go} (100%) create mode 100644 go/ql/src/change-notes/2024-03-07-uncontrolled-allocation-size.md delete mode 100644 go/ql/src/experimental/CWE-770/DenialOfService.qhelp delete mode 100644 go/ql/src/experimental/CWE-770/DenialOfService.ql delete mode 100644 go/ql/test/experimental/CWE-770/DenialOfService.expected delete mode 100644 go/ql/test/experimental/CWE-770/DenialOfService.qlref create mode 100644 go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSize.expected create mode 100644 go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSize.ql rename go/ql/test/{experimental/CWE-770/DenialOfServiceBad.go => query-tests/Security/CWE-770/UncontrolledAllocationSizeBad.go} (89%) rename go/ql/test/{experimental/CWE-770/DenialOfServiceGood.go => query-tests/Security/CWE-770/UncontrolledAllocationSizeGood.go} (100%) 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; +} 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-770/UncontrolledAllocationSize.qhelp b/go/ql/src/Security/CWE-770/UncontrolledAllocationSize.qhelp new file mode 100644 index 00000000000..b4029e93e1e --- /dev/null +++ b/go/ql/src/Security/CWE-770/UncontrolledAllocationSize.qhelp @@ -0,0 +1,36 @@ + + + + +

    Using untrusted input to allocate slices with the built-in make 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.

    +
    + + +

    Implement a maximum allowed value for size allocations with the built-in make + function to prevent excessively large allocations.

    +
    + + +

    In the following example snippet, the n parameter is user-controlled.

    +

    If the external user provides an excessively large value, the application allocates a slice + of size n without further verification, potentially exhausting all the available + memory.

    + + + +

    One way to prevent this vulnerability is by implementing a maximum allowed value for the + user-controlled input, as seen in the following example:

    + + +
    + + +
  • OWASP: Denial + of Service Cheat Sheet +
  • +
    +
    \ 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..2be09c6901b --- /dev/null +++ b/go/ql/src/Security/CWE-770/UncontrolledAllocationSize.ql @@ -0,0 +1,22 @@ +/** + * @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 warning + * @security-severity 6.0 + * @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/experimental/CWE-770/DenialOfServiceBad.go b/go/ql/src/Security/CWE-770/UncontrolledAllocationSizeBad.go similarity index 100% rename from go/ql/src/experimental/CWE-770/DenialOfServiceBad.go rename to go/ql/src/Security/CWE-770/UncontrolledAllocationSizeBad.go diff --git a/go/ql/src/experimental/CWE-770/DenialOfServiceGood.go b/go/ql/src/Security/CWE-770/UncontrolledAllocationSizeGood.go similarity index 100% rename from go/ql/src/experimental/CWE-770/DenialOfServiceGood.go rename to go/ql/src/Security/CWE-770/UncontrolledAllocationSizeGood.go 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/experimental/CWE-770/DenialOfService.qhelp b/go/ql/src/experimental/CWE-770/DenialOfService.qhelp deleted file mode 100644 index b91f1f7e3b0..00000000000 --- a/go/ql/src/experimental/CWE-770/DenialOfService.qhelp +++ /dev/null @@ -1,32 +0,0 @@ - - - - -

    Using untrusted input to created with the built-in make 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 DoS attack by consuming all available server resources.

    -
    - - -

    Implement a maximum allowed value for creates a slice with the built-in make function to prevent excessively large allocations. - For instance, you could restrict it to a reasonable upper limit.

    -
    - - -

    In the following example snippet, the n field is user-controlled.

    -

    The server trusts that n has an acceptable value, however when using a maliciously large value, - it allocates a slice of n of strings before filling the slice with data.

    - - - -

    One way to prevent this vulnerability is by implementing a maximum allowed value for the user-controlled input:

    - - -
    - - -
  • - OWASP: Denial of Service Cheat Sheet -
  • -
    -
    \ No newline at end of file diff --git a/go/ql/src/experimental/CWE-770/DenialOfService.ql b/go/ql/src/experimental/CWE-770/DenialOfService.ql deleted file mode 100644 index 199cd0df552..00000000000 --- a/go/ql/src/experimental/CWE-770/DenialOfService.ql +++ /dev/null @@ -1,59 +0,0 @@ -/** - * @name Denial Of Service - * @description slices created with the built-in make function from user-controlled sources using a - * maliciously large value possibly leading to a denial of service. - * @kind path-problem - * @problem.severity error - * @security-severity 9 - * @precision high - * @id go/denial-of-service - * @tags security - * experimental - * external/cwe/cwe-770 - */ - -import go - -/** - * Holds if the guard `g` on its branch `branch` checks that `e` is not constant and is less than some other value. - */ -predicate denialOfServiceSanitizerGuard(DataFlow::Node g, Expr e, boolean branch) { - exists(DataFlow::Node lesser | - e = lesser.asExpr() and - g.(DataFlow::RelationalComparisonNode).leq(branch, lesser, _, _) and - not e.isConst() - ) -} - -/** - * Module for defining predicates and tracking taint flow related to denial of service issues. - */ -module Config implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { source instanceof UntrustedFlowSource } - - 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) - ) - } - - predicate isBarrier(DataFlow::Node node) { - node = DataFlow::BarrierGuard::getABarrierNode() - } - - predicate isSink(DataFlow::Node sink) { sink = Builtin::make().getACall().getArgument(0) } -} - -/** - * Tracks taint flow for reasoning about denial of service, where source is - * user-controlled and unchecked. - */ -module Flow = TaintTracking::Global; - -import Flow::PathGraph - -from Flow::PathNode source, Flow::PathNode sink -where Flow::flowPath(source, sink) -select sink, source, sink, "This variable might be leading to denial of service." diff --git a/go/ql/test/experimental/CWE-770/DenialOfService.expected b/go/ql/test/experimental/CWE-770/DenialOfService.expected deleted file mode 100644 index 4a2ae9d6646..00000000000 --- a/go/ql/test/experimental/CWE-770/DenialOfService.expected +++ /dev/null @@ -1,18 +0,0 @@ -edges -| DenialOfServiceBad.go:11:12:11:16 | selection of URL | DenialOfServiceBad.go:11:12:11:24 | call to Query | provenance | | -| DenialOfServiceBad.go:11:12:11:24 | call to Query | DenialOfServiceBad.go:13:15:13:20 | source | provenance | | -| DenialOfServiceBad.go:13:15:13:20 | source | DenialOfServiceBad.go:13:15:13:29 | call to Get | provenance | | -| DenialOfServiceBad.go:13:15:13:29 | call to Get | DenialOfServiceBad.go:14:28:14:36 | sourceStr | provenance | | -| DenialOfServiceBad.go:14:2:14:37 | ... := ...[0] | DenialOfServiceBad.go:20:27:20:30 | sink | provenance | | -| DenialOfServiceBad.go:14:28:14:36 | sourceStr | DenialOfServiceBad.go:14:2:14:37 | ... := ...[0] | provenance | | -nodes -| DenialOfServiceBad.go:11:12:11:16 | selection of URL | semmle.label | selection of URL | -| DenialOfServiceBad.go:11:12:11:24 | call to Query | semmle.label | call to Query | -| DenialOfServiceBad.go:13:15:13:20 | source | semmle.label | source | -| DenialOfServiceBad.go:13:15:13:29 | call to Get | semmle.label | call to Get | -| DenialOfServiceBad.go:14:2:14:37 | ... := ...[0] | semmle.label | ... := ...[0] | -| DenialOfServiceBad.go:14:28:14:36 | sourceStr | semmle.label | sourceStr | -| DenialOfServiceBad.go:20:27:20:30 | sink | semmle.label | sink | -subpaths -#select -| DenialOfServiceBad.go:20:27:20:30 | sink | DenialOfServiceBad.go:11:12:11:16 | selection of URL | DenialOfServiceBad.go:20:27:20:30 | sink | This variable might be leading to denial of service. | diff --git a/go/ql/test/experimental/CWE-770/DenialOfService.qlref b/go/ql/test/experimental/CWE-770/DenialOfService.qlref deleted file mode 100644 index e5896bb61df..00000000000 --- a/go/ql/test/experimental/CWE-770/DenialOfService.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/CWE-770/DenialOfService.ql \ No newline at end of file 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 diff --git a/go/ql/test/experimental/CWE-770/DenialOfServiceBad.go b/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSizeBad.go similarity index 89% rename from go/ql/test/experimental/CWE-770/DenialOfServiceBad.go rename to go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSizeBad.go index 2d61cdbdafc..0ae70436bde 100644 --- a/go/ql/test/experimental/CWE-770/DenialOfServiceBad.go +++ b/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSizeBad.go @@ -17,7 +17,7 @@ func OutOfMemoryBad(w http.ResponseWriter, r *http.Request) { return } - result := make([]string, sink) + result := make([]string, sink) // $hasTaintFlow="sink" for i := 0; i < sink; i++ { result[i] = fmt.Sprintf("Item %d", i+1) } diff --git a/go/ql/test/experimental/CWE-770/DenialOfServiceGood.go b/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSizeGood.go similarity index 100% rename from go/ql/test/experimental/CWE-770/DenialOfServiceGood.go rename to go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSizeGood.go From 138ce42cf6f4f65c04e829448831bef548eeaec4 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Thu, 7 Mar 2024 15:22:46 +0100 Subject: [PATCH 223/430] Fix qhelp --- go/ql/src/Security/CWE-770/UncontrolledAllocationSize.qhelp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/go/ql/src/Security/CWE-770/UncontrolledAllocationSize.qhelp b/go/ql/src/Security/CWE-770/UncontrolledAllocationSize.qhelp index b4029e93e1e..14930944bb6 100644 --- a/go/ql/src/Security/CWE-770/UncontrolledAllocationSize.qhelp +++ b/go/ql/src/Security/CWE-770/UncontrolledAllocationSize.qhelp @@ -19,12 +19,12 @@ of size n without further verification, potentially exhausting all the available memory.

    - +

    One way to prevent this vulnerability is by implementing a maximum allowed value for the user-controlled input, as seen in the following example:

    - + From ea38bf5ebc41ff49970cab0efffb5ab988641a92 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 7 Mar 2024 15:35:06 +0100 Subject: [PATCH 224/430] C#: Improve `global.json` file parsing --- .../Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs index f0220b6be74..41a117ed5d8 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs @@ -131,11 +131,16 @@ namespace Semmle.Extraction.CSharp.DependencyFetching try { var o = JObject.Parse(File.ReadAllText(path)); - versions.Add((string)o?["sdk"]?["version"]!); + 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; } } From 76564edc93c74c2823273981c68f2d5991989d1f Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 7 Mar 2024 16:50:28 +0100 Subject: [PATCH 225/430] Address review comment --- shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index f1fc71bb1bf..d555b281710 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -3999,10 +3999,8 @@ module MakeImpl { 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) - | - isStoreStep = true or - not ap.storeTargetIsClearedAt(node) + not inBarrier(node, state) and + if ap.storeTargetIsClearedAt(node) then isStoreStep = true else any() ) } From 9e77b898856dec5ce1a139ed051eac019a9bd11c Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Thu, 7 Mar 2024 08:33:49 -0800 Subject: [PATCH 226/430] Update TypeConfusion.qhelp Co-authored-by: hubwriter --- cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.qhelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.qhelp b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.qhelp index 0f72a992205..205a1ae7ff8 100644 --- a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.qhelp +++ b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.qhelp @@ -3,7 +3,7 @@

    -Certain casts in C and C++ places no restrictions on the target type. For +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 From 85782ff1d4943ca27c109faff48a0b32d40354ef Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 7 Mar 2024 17:34:01 +0100 Subject: [PATCH 227/430] Ruby: Exclude calls with arguments from `OrmFieldAsSource` --- ruby/ql/lib/codeql/ruby/security/XSS.qll | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ruby/ql/lib/codeql/ruby/security/XSS.qll b/ruby/ql/lib/codeql/ruby/security/XSS.qll index 26aa90fe831..a212369d4e6 100644 --- a/ruby/ql/lib/codeql/ruby/security/XSS.qll +++ b/ruby/ql/lib/codeql/ruby/security/XSS.qll @@ -324,7 +324,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()) ) } } From b0eb0e1f1e478f0bc06b19b9a1a5921f7c8885e7 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 25 Jan 2024 11:34:49 -0500 Subject: [PATCH 228/430] Move common source kinds to "shared" --- shared/mad/codeql/mad/ModelValidation.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shared/mad/codeql/mad/ModelValidation.qll b/shared/mad/codeql/mad/ModelValidation.qll index 20ef0015d78..2f990af4e0f 100644 --- a/shared/mad/codeql/mad/ModelValidation.qll +++ b/shared/mad/codeql/mad/ModelValidation.qll @@ -116,9 +116,9 @@ 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", // JavaScript From 51afe12ae1a85f7b15aee6b1698b7642d055ce1d Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 25 Jan 2024 11:36:03 -0500 Subject: [PATCH 229/430] Environment variable sources --- csharp/ql/lib/ext/System.model.yml | 3 +++ .../security/dataflow/flowsources/Local.qll | 7 +++++ .../local/environment/EnvironmentVariables.cs | 27 +++++++++++++++++++ .../environment/EnvironmentVariables.expected | 7 +++++ .../local/environment/EnvironmentVariables.ql | 6 +++++ 5 files changed, 50 insertions(+) create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariables.cs create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariables.expected create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariables.ql diff --git a/csharp/ql/lib/ext/System.model.yml b/csharp/ql/lib/ext/System.model.yml index 36ce30e0ecb..7efb928793b 100644 --- a/csharp/ql/lib/ext/System.model.yml +++ b/csharp/ql/lib/ext/System.model.yml @@ -6,6 +6,9 @@ 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", "", "", "ReturnValue", "environment", "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/csharp/security/dataflow/flowsources/Local.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/flowsources/Local.qll index 121f53c4929..95cb9a357b2 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 @@ -29,3 +29,10 @@ class TextFieldSource extends LocalUserInputSource { override string getSourceType() { result = "TextBox text" } } + +abstract class EnvironmentVariableSource extends LocalFlowSource { + override string getThreatModel() { result = "environment" } + + override string getSourceType() { result = "environment variable" } +} + 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..6607b46c197 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariables.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections; + +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%"); + } + } +} \ 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..3cd02f3ffe1 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariables.expected @@ -0,0 +1,7 @@ +| EnvironmentVariables.cs:10:28:10:82 | call to method GetEnvironmentVariable | +| EnvironmentVariables.cs:11:40:11:129 | call to method GetEnvironmentVariable | +| EnvironmentVariables.cs:12:39:12:128 | call to method GetEnvironmentVariable | +| EnvironmentVariables.cs:17:48:17:84 | call to method GetEnvironmentVariables | +| EnvironmentVariables.cs:18:60:18:129 | call to method GetEnvironmentVariables | +| EnvironmentVariables.cs:19:59:19:128 | call to method GetEnvironmentVariables | +| EnvironmentVariables.cs:24:31:24:78 | call to method ExpandEnvironmentVariables | 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 From a3f6bfe1df9a0bef580749a23f8ec46300ec6d6a Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 25 Jan 2024 11:38:07 -0500 Subject: [PATCH 230/430] `commandargs` sources --- csharp/ql/lib/ext/System.model.yml | 2 ++ .../security/dataflow/flowsources/Local.qll | 19 +++++++++++++++++++ .../local/commandargs/CommandArgs.cs | 17 +++++++++++++++++ .../local/commandargs/CommandArgs.expected | 2 ++ .../local/commandargs/CommandArgs.ql | 6 ++++++ 5 files changed, 46 insertions(+) create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.cs create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.expected create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.ql diff --git a/csharp/ql/lib/ext/System.model.yml b/csharp/ql/lib/ext/System.model.yml index 7efb928793b..46f4abe5aaa 100644 --- a/csharp/ql/lib/ext/System.model.yml +++ b/csharp/ql/lib/ext/System.model.yml @@ -7,6 +7,8 @@ extensions: - ["System", "Console", False, "ReadKey", "", "", "ReturnValue", "local", "manual"] - ["System", "Console", False, "ReadLine", "", "", "ReturnValue", "local", "manual"] - ["System", "Environment", False, "ExpandEnvironmentVariables", "", "", "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: 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 95cb9a357b2..9f3f398e5b1 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,6 +6,7 @@ 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 { @@ -30,9 +31,27 @@ 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" } } +/** + * 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" } +} + +/** + * 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() } +} 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..a45cdc2d38b --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.cs @@ -0,0 +1,17 @@ +using System; + +namespace CommandArgs +{ + class CommandArgsUse + { + public static void M1() + { + string result = Environment.GetCommandLineArgs()[0]; + } + + public static void M2() + { + string result = Environment.CommandLine; + } + } +} \ 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..99a1bef00f0 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.expected @@ -0,0 +1,2 @@ +| CommandArgs.cs:9:29:9:60 | call to method GetCommandLineArgs | +| CommandArgs.cs:14:29:14:51 | access to property CommandLine | 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..87564b062aa --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.ql @@ -0,0 +1,6 @@ +import csharp +import semmle.code.csharp.dataflow.internal.ExternalFlow + +from DataFlow::Node source +where sourceNode(source, "commandargs") +select source From ec6e17360d71588f34e3fb56162e49918531d3ff Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 29 Feb 2024 12:10:09 -0500 Subject: [PATCH 231/430] Replace `Main`-method parameters with `ThreatModelFlowSource` --- .../src/Security Features/CWE-114/AssemblyPathInjection.ql | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/csharp/ql/src/Security Features/CWE-114/AssemblyPathInjection.ql b/csharp/ql/src/Security Features/CWE-114/AssemblyPathInjection.ql index a6150b53798..9d30366af8f 100644 --- a/csharp/ql/src/Security Features/CWE-114/AssemblyPathInjection.ql +++ b/csharp/ql/src/Security Features/CWE-114/AssemblyPathInjection.ql @@ -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 ThreatModelFlowSource 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 | From f8c805de6b30fcdfeb76ad3035b8393b7cfb1d41 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Tue, 5 Mar 2024 17:32:19 -0500 Subject: [PATCH 232/430] Microsoft.Extensions.Configuration models --- ...crosoft.Extensions.Configuration.model.yml | 17 +++++++++++++ .../local/commandargs/CommandArgs.cs | 24 ++++++++++++++++++- .../local/commandargs/CommandArgs.expected | 6 +++-- .../local/commandargs/CommandArgs.ext.yml | 7 ++++++ .../local/commandargs/CommandArgs.ql | 4 ++-- .../commandargs/CommandLineFlow.expected | 2 ++ .../local/commandargs/CommandLineFlow.ext.yml | 7 ++++++ .../local/commandargs/CommandLineFlow.ql | 16 +++++++++++++ .../flowsources/local/commandargs/options | 3 +++ .../EnvironmentVariableFlow.expected | 2 ++ .../environment/EnvironmentVariableFlow.ql | 16 +++++++++++++ .../local/environment/EnvironmentVariables.cs | 22 +++++++++++++++++ .../environment/EnvironmentVariables.expected | 17 +++++++------ .../flowsources/local/environment/options | 3 +++ .../dataflow/library/FlowSummaries.expected | 22 ++++++++++++----- .../library/FlowSummariesFiltered.expected | 17 ++++++++----- 16 files changed, 161 insertions(+), 24 deletions(-) create mode 100644 csharp/ql/lib/ext/Microsoft.Extensions.Configuration.model.yml create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.ext.yml create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandLineFlow.expected create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandLineFlow.ext.yml create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandLineFlow.ql create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/options create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariableFlow.expected create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariableFlow.ql create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/local/environment/options 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/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.cs b/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.cs index a45cdc2d38b..c0961e0169b 100644 --- a/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.cs +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.cs @@ -1,8 +1,10 @@ using System; +using System.Collections.Generic; +using Microsoft.Extensions.Configuration; namespace CommandArgs { - class CommandArgsUse + public class CommandArgsUse { public static void M1() { @@ -13,5 +15,25 @@ namespace CommandArgs { 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 index 99a1bef00f0..2a2c1c40b2b 100644 --- a/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.expected +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.expected @@ -1,2 +1,4 @@ -| CommandArgs.cs:9:29:9:60 | call to method GetCommandLineArgs | -| CommandArgs.cs:14:29:14:51 | access to property CommandLine | +| 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 index 87564b062aa..aa89a4c3455 100644 --- a/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.ql +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.ql @@ -1,6 +1,6 @@ import csharp -import semmle.code.csharp.dataflow.internal.ExternalFlow +import semmle.code.csharp.security.dataflow.flowsources.FlowSources from DataFlow::Node source -where sourceNode(source, "commandargs") +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; + +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; + +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 index 6607b46c197..a685106b7f2 100644 --- a/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariables.cs +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariables.cs @@ -1,5 +1,6 @@ using System; using System.Collections; +using Microsoft.Extensions.Configuration; namespace EnvironmentVariables { @@ -23,5 +24,26 @@ namespace EnvironmentVariables { 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 index 3cd02f3ffe1..25cbc81de97 100644 --- a/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariables.expected +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariables.expected @@ -1,7 +1,10 @@ -| EnvironmentVariables.cs:10:28:10:82 | call to method GetEnvironmentVariable | -| EnvironmentVariables.cs:11:40:11:129 | call to method GetEnvironmentVariable | -| EnvironmentVariables.cs:12:39:12:128 | call to method GetEnvironmentVariable | -| EnvironmentVariables.cs:17:48:17:84 | call to method GetEnvironmentVariables | -| EnvironmentVariables.cs:18:60:18:129 | call to method GetEnvironmentVariables | -| EnvironmentVariables.cs:19:59:19:128 | call to method GetEnvironmentVariables | -| EnvironmentVariables.cs:24:31:24:78 | call to method ExpandEnvironmentVariables | +| 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: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/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/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index 2d7a0c0c192..3de789220af 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -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);;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);;Argument[0];ReturnValue;taint;df-generated | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action);;Argument[1];Argument[0];taint;manual | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action);;Argument[1];Argument[1].Parameter[delegate-self];value;manual | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action);;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);;Argument[1];Argument[0];taint;manual | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[],System.Collections.Generic.IDictionary);;Argument[1];ReturnValue;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;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[],System.Collections.Generic.IDictionary);;Argument[2];ReturnValue;taint;manual | | Microsoft.Extensions.Configuration;ConfigurationBinder;false;Bind;(Microsoft.Extensions.Configuration.IConfiguration,System.Object,System.Action);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Microsoft.Extensions.Configuration;ConfigurationBinder;false;Get;(Microsoft.Extensions.Configuration.IConfiguration,System.Type,System.Action);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Microsoft.Extensions.Configuration;ConfigurationBinder;false;Get;(Microsoft.Extensions.Configuration.IConfiguration,System.Action);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | @@ -1040,6 +1046,7 @@ summary | Microsoft.Extensions.Configuration;ConfigurationBinder;false;GetValue;(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;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action);;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);;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);;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);;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);;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);;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 | diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected index df2d33561ff..1e894631bd2 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);;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);;Argument[0];ReturnValue;taint;df-generated | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action);;Argument[1];Argument[0];taint;manual | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action);;Argument[1];Argument[1].Parameter[delegate-self];value;manual | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action);;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);;Argument[1];Argument[0];taint;manual | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[],System.Collections.Generic.IDictionary);;Argument[1];ReturnValue;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;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[],System.Collections.Generic.IDictionary);;Argument[2];ReturnValue;taint;manual | | Microsoft.Extensions.Configuration;ConfigurationBinder;false;Bind;(Microsoft.Extensions.Configuration.IConfiguration,System.Object,System.Action);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Microsoft.Extensions.Configuration;ConfigurationBinder;false;Get;(Microsoft.Extensions.Configuration.IConfiguration,System.Type,System.Action);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Microsoft.Extensions.Configuration;ConfigurationBinder;false;Get;(Microsoft.Extensions.Configuration.IConfiguration,System.Action);;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);;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);;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);;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);;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 | From 1f64f5f8c9d44bb7604df53881520d3774047506 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Tue, 5 Mar 2024 22:27:54 -0500 Subject: [PATCH 233/430] Change note --- .../2024-03-05-new-commandargs-and-environment-models.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 csharp/ql/lib/change-notes/2024-03-05-new-commandargs-and-environment-models.md 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. From 608a3f907c675517e9c646c9e25646fdada746dc Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 6 Mar 2024 22:37:48 -0500 Subject: [PATCH 234/430] Add type signature for methods with no overloads --- csharp/ql/lib/ext/System.model.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/csharp/ql/lib/ext/System.model.yml b/csharp/ql/lib/ext/System.model.yml index 46f4abe5aaa..7e37f7a48a9 100644 --- a/csharp/ql/lib/ext/System.model.yml +++ b/csharp/ql/lib/ext/System.model.yml @@ -6,9 +6,9 @@ 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", "", "", "ReturnValue", "environment", "manual"] - - ["System", "Environment", False, "GetCommandLineArgs", "", "", "ReturnValue", "commandargs", "manual"] - - ["System", "Environment", False, "get_CommandLine", "", "", "ReturnValue", "commandargs", "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: From 5b48bc4a3ea7e90026ff6c81db14c2490823911b Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 7 Mar 2024 09:43:11 +0100 Subject: [PATCH 235/430] C#: Delete the experimental IR queries. --- csharp/ql/src/experimental/ir/IR.qll | 6 - .../src/experimental/ir/IRConfiguration.qll | 1 - .../ql/src/experimental/ir/IRConsistency.ql | 8 - csharp/ql/src/experimental/ir/PrintIR.ql | 8 - csharp/ql/src/experimental/ir/PrintIR.qll | 1 - csharp/ql/src/experimental/ir/Util.qll | 43 - .../ql/src/experimental/ir/ValueNumbering.qll | 1 - .../ir/implementation/EdgeKind.qll | 139 - .../ir/implementation/IRConfiguration.qll | 45 - .../experimental/ir/implementation/IRType.qll | 349 --- .../ir/implementation/MemoryAccessKind.qll | 101 - .../experimental/ir/implementation/Opcode.qll | 1272 ---------- .../ir/implementation/TempVariableTag.qll | 17 - .../implementation/UseSoundEscapeAnalysis.qll | 9 - .../internal/AliasedSSAStub.qll | 19 - .../internal/EdgeKindInternal.qll | 1 - .../internal/IRConfigurationInternal.qll | 1 - .../internal/IRFunctionBase.qll | 32 - .../internal/IRFunctionBaseInternal.qll | 2 - .../internal/IRTypeInternal.qll | 1 - .../implementation/internal/OpcodeImports.qll | 1 - .../ir/implementation/internal/OperandTag.qll | 300 --- .../internal/OperandTagInternal.qll | 1 - .../implementation/internal/TIRVariable.qll | 23 - .../internal/TIRVariableInternal.qll | 7 - .../implementation/internal/TInstruction.qll | 106 - .../internal/TInstructionImports.qll | 2 - .../internal/TInstructionInternal.qll | 4 - .../ir/implementation/internal/TOperand.qll | 150 -- .../internal/TempVariableTagInternal.qll | 6 - .../experimental/ir/implementation/raw/IR.qll | 92 - .../ir/implementation/raw/IRBlock.qll | 356 --- .../ir/implementation/raw/IRConsistency.ql | 8 - .../ir/implementation/raw/IRConsistency.qll | 549 ---- .../ir/implementation/raw/IRFunction.qll | 61 - .../ir/implementation/raw/IRVariable.qll | 337 --- .../ir/implementation/raw/Instruction.qll | 2231 ----------------- .../ir/implementation/raw/Operand.qll | 499 ---- .../ir/implementation/raw/PrintIR.ql | 8 - .../ir/implementation/raw/PrintIR.qll | 342 --- .../raw/constant/ConstantAnalysis.qll | 62 - .../raw/constant/PrintConstantAnalysis.qll | 11 - .../internal/ConstantAnalysisInternal.qll | 1 - .../raw/gvn/PrintValueNumbering.qll | 17 - .../implementation/raw/gvn/ValueNumbering.qll | 90 - .../gvn/internal/ValueNumberingImports.qll | 3 - .../gvn/internal/ValueNumberingInternal.qll | 356 --- .../raw/internal/IRBlockImports.qll | 1 - .../raw/internal/IRConsistencyImports.qll | 1 - .../raw/internal/IRConstruction.qll | 435 ---- .../raw/internal/IRFunctionImports.qll | 1 - .../implementation/raw/internal/IRImports.qll | 3 - .../raw/internal/IRInternal.qll | 4 - .../raw/internal/IRVariableImports.qll | 5 - .../raw/internal/InstructionImports.qll | 6 - .../raw/internal/InstructionTag.qll | 204 -- .../raw/internal/OperandImports.qll | 5 - .../raw/internal/OperandInternal.qll | 2 - .../raw/internal/PrintIRImports.qll | 2 - .../raw/internal/TranslatedCall.qll | 102 - .../raw/internal/TranslatedCondition.qll | 164 -- .../raw/internal/TranslatedDeclaration.qll | 76 - .../raw/internal/TranslatedElement.qll | 569 ----- .../raw/internal/TranslatedExpr.qll | 2095 ---------------- .../raw/internal/TranslatedFunction.qll | 333 --- .../raw/internal/TranslatedInitialization.qll | 388 --- .../raw/internal/TranslatedStmt.qll | 1092 -------- .../internal/common/TranslatedCallBase.qll | 174 -- .../common/TranslatedConditionBase.qll | 79 - .../common/TranslatedDeclarationBase.qll | 93 - .../internal/common/TranslatedExprBase.qll | 14 - .../raw/internal/desugar/Common.qll | 235 -- .../raw/internal/desugar/Delegate.qll | 109 - .../raw/internal/desugar/Foreach.qll | 457 ---- .../raw/internal/desugar/Lock.qll | 426 ---- .../raw/internal/desugar/Using.qll | 1 - .../TranslatedCompilerGeneratedCall.qll | 18 - .../TranslatedCompilerGeneratedCondition.qll | 17 - ...TranslatedCompilerGeneratedDeclaration.qll | 81 - .../TranslatedCompilerGeneratedElement.qll | 23 - .../TranslatedCompilerGeneratedExpr.qll | 18 - .../TranslatedCompilerGeneratedStmt.qll | 14 - .../raw/internal/reachability/Dominance.qll | 22 - .../reachability/DominanceInternal.qll | 7 - .../internal/reachability/PrintDominance.qll | 22 - .../reachability/PrintReachableBlock.qll | 17 - .../internal/reachability/ReachableBlock.qll | 53 - .../reachability/ReachableBlockInternal.qll | 2 - .../ir/implementation/unaliased_ssa/IR.qll | 92 - .../implementation/unaliased_ssa/IRBlock.qll | 356 --- .../unaliased_ssa/IRConsistency.ql | 8 - .../unaliased_ssa/IRConsistency.qll | 549 ---- .../unaliased_ssa/IRFunction.qll | 61 - .../unaliased_ssa/IRVariable.qll | 337 --- .../unaliased_ssa/Instruction.qll | 2231 ----------------- .../implementation/unaliased_ssa/Operand.qll | 499 ---- .../implementation/unaliased_ssa/PrintIR.ql | 8 - .../implementation/unaliased_ssa/PrintIR.qll | 342 --- .../constant/ConstantAnalysis.qll | 54 - .../constant/PrintConstantAnalysis.qll | 11 - .../internal/ConstantAnalysisInternal.qll | 1 - .../unaliased_ssa/gvn/PrintValueNumbering.qll | 17 - .../unaliased_ssa/gvn/ValueNumbering.qll | 90 - .../gvn/internal/ValueNumberingImports.qll | 3 - .../gvn/internal/ValueNumberingInternal.qll | 356 --- .../unaliased_ssa/internal/AliasAnalysis.qll | 474 ---- .../internal/AliasAnalysisImports.qll | 269 -- .../internal/AliasAnalysisInternal.qll | 3 - .../internal/AliasConfiguration.qll | 18 - .../internal/AliasConfigurationImports.qll | 1 - .../unaliased_ssa/internal/IRBlockImports.qll | 1 - .../internal/IRConsistencyImports.qll | 1 - .../internal/IRFunctionImports.qll | 1 - .../unaliased_ssa/internal/IRImports.qll | 3 - .../unaliased_ssa/internal/IRInternal.qll | 4 - .../internal/IRVariableImports.qll | 5 - .../internal/InstructionImports.qll | 6 - .../unaliased_ssa/internal/OperandImports.qll | 5 - .../internal/OperandInternal.qll | 2 - .../unaliased_ssa/internal/PrintIRImports.qll | 2 - .../unaliased_ssa/internal/PrintSSA.qll | 157 -- .../unaliased_ssa/internal/SSAConsistency.ql | 8 - .../unaliased_ssa/internal/SSAConsistency.qll | 55 - .../internal/SSAConsistencyImports.qll | 3 - .../internal/SSAConstruction.qll | 1056 -------- .../internal/SSAConstructionImports.qll | 5 - .../internal/SSAConstructionInternal.qll | 9 - .../unaliased_ssa/internal/SimpleSSA.qll | 111 - .../internal/SimpleSSAImports.qll | 4 - .../internal/SimpleSSAPublicImports.qll | 1 - .../internal/reachability/Dominance.qll | 22 - .../reachability/DominanceInternal.qll | 7 - .../internal/reachability/PrintDominance.qll | 22 - .../reachability/PrintReachableBlock.qll | 17 - .../internal/reachability/ReachableBlock.qll | 53 - .../reachability/ReachableBlockInternal.qll | 2 - .../experimental/ir/internal/CSharpType.qll | 365 --- .../ir/internal/IRCSharpLanguage.qll | 162 -- .../ir/internal/IRCSharpLanguageDebug.qll | 5 - .../src/experimental/ir/internal/IRGuards.qll | 670 ----- .../experimental/ir/internal/IRUtilities.qll | 16 - .../ir/internal/IntegerConstant.qll | 236 -- .../ir/internal/IntegerInterval.qll | 35 - .../ir/internal/IntegerPartial.qll | 99 - .../src/experimental/ir/internal/Overlap.qll | 70 - .../ir/internal/TempVariableTag.qll | 32 - .../experimental/ir/rangeanalysis/Bound.qll | 79 - .../ir/rangeanalysis/RangeAnalysis.qll | 633 ----- .../ir/rangeanalysis/RangeUtils.qll | 96 - .../ir/rangeanalysis/SignAnalysis.qll | 585 ----- .../test/experimental/ir/ir/PrintAst.expected | 1379 ---------- .../ql/test/experimental/ir/ir/PrintAst.qlref | 1 - csharp/ql/test/experimental/ir/ir/array.cs | 22 - csharp/ql/test/experimental/ir/ir/assignop.cs | 22 - csharp/ql/test/experimental/ir/ir/casts.cs | 17 - .../ql/test/experimental/ir/ir/collections.cs | 19 - .../experimental/ir/ir/constructor_init.cs | 35 - csharp/ql/test/experimental/ir/ir/crement.cs | 11 - .../ql/test/experimental/ir/ir/delegates.cs | 15 - csharp/ql/test/experimental/ir/ir/events.cs | 35 - csharp/ql/test/experimental/ir/ir/foreach.cs | 12 - .../ir/ir/func_with_param_call.cs | 14 - csharp/ql/test/experimental/ir/ir/indexers.cs | 26 - .../ir/ir/inheritance_polymorphism.cs | 37 - csharp/ql/test/experimental/ir/ir/inoutref.cs | 38 - csharp/ql/test/experimental/ir/ir/isexpr.cs | 22 - csharp/ql/test/experimental/ir/ir/jumps.cs | 40 - csharp/ql/test/experimental/ir/ir/lock.cs | 13 - .../test/experimental/ir/ir/obj_creation.cs | 29 - csharp/ql/test/experimental/ir/ir/options | 1 - csharp/ql/test/experimental/ir/ir/pointers.cs | 42 - csharp/ql/test/experimental/ir/ir/prop.cs | 32 - .../test/experimental/ir/ir/raw_ir.expected | 2008 --------------- .../ql/test/experimental/ir/ir/raw_ir.qlref | 1 - .../ir/ir/raw_ir_consistency.expected | 35 - .../ir/ir/raw_ir_consistency.qlref | 1 - .../ql/test/experimental/ir/ir/simple_call.cs | 14 - .../experimental/ir/ir/simple_function.cs | 9 - csharp/ql/test/experimental/ir/ir/stmts.cs | 110 - .../ir/ir/unaliased_ssa_consistency.expected | 35 - .../ir/ir/unaliased_ssa_consistency.qlref | 1 - .../ir/unaliased_ssa_ssa_consistency.expected | 3 - .../ir/ir/unaliased_ssa_ssa_consistency.qlref | 1 - csharp/ql/test/experimental/ir/ir/using.cs | 28 - .../ql/test/experimental/ir/ir/variables.cs | 12 - .../ir/offbyone/OffByOneRA.expected | 5 - .../experimental/ir/offbyone/OffByOneRA.ql | 50 - .../ql/test/experimental/ir/offbyone/null.cs | 5 - .../ql/test/experimental/ir/offbyone/test.cs | 107 - .../ir/rangeanalysis/RangeAnalysis.expected | 18 - .../ir/rangeanalysis/RangeAnalysis.ql | 25 - .../experimental/ir/rangeanalysis/null.cs | 5 - .../experimental/ir/rangeanalysis/test.cs | 85 - 193 files changed, 29894 deletions(-) delete mode 100644 csharp/ql/src/experimental/ir/IR.qll delete mode 100644 csharp/ql/src/experimental/ir/IRConfiguration.qll delete mode 100644 csharp/ql/src/experimental/ir/IRConsistency.ql delete mode 100644 csharp/ql/src/experimental/ir/PrintIR.ql delete mode 100644 csharp/ql/src/experimental/ir/PrintIR.qll delete mode 100644 csharp/ql/src/experimental/ir/Util.qll delete mode 100644 csharp/ql/src/experimental/ir/ValueNumbering.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/EdgeKind.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/IRConfiguration.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/IRType.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/MemoryAccessKind.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/Opcode.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/TempVariableTag.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/UseSoundEscapeAnalysis.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/internal/AliasedSSAStub.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/internal/EdgeKindInternal.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/internal/IRConfigurationInternal.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/internal/IRFunctionBase.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/internal/IRFunctionBaseInternal.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/internal/IRTypeInternal.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/internal/OpcodeImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/internal/OperandTag.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/internal/OperandTagInternal.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/internal/TIRVariable.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/internal/TIRVariableInternal.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/internal/TInstruction.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/internal/TInstructionImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/internal/TInstructionInternal.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/internal/TOperand.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/internal/TempVariableTagInternal.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/IR.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/IRBlock.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/IRConsistency.ql delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/IRConsistency.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/IRFunction.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/IRVariable.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/Operand.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/PrintIR.ql delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/PrintIR.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/constant/ConstantAnalysis.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/constant/PrintConstantAnalysis.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/constant/internal/ConstantAnalysisInternal.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/gvn/PrintValueNumbering.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/gvn/ValueNumbering.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/gvn/internal/ValueNumberingImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/IRBlockImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/IRConsistencyImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/IRConstruction.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/IRFunctionImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/IRImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/IRInternal.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/IRVariableImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/InstructionImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/InstructionTag.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/OperandImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/OperandInternal.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/PrintIRImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedCall.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedCondition.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedDeclaration.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedElement.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedExpr.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedFunction.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedInitialization.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedStmt.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/common/TranslatedCallBase.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/common/TranslatedConditionBase.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/common/TranslatedDeclarationBase.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/common/TranslatedExprBase.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Common.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Delegate.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Foreach.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Lock.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Using.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedCall.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedCondition.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedDeclaration.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedElement.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedExpr.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedStmt.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/Dominance.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/DominanceInternal.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/PrintDominance.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/PrintReachableBlock.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/ReachableBlock.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/ReachableBlockInternal.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IR.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRBlock.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRConsistency.ql delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRConsistency.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRFunction.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRVariable.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Operand.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/PrintIR.ql delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/PrintIR.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/constant/ConstantAnalysis.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/constant/PrintConstantAnalysis.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/constant/internal/ConstantAnalysisInternal.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/PrintValueNumbering.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasAnalysis.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasAnalysisImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasAnalysisInternal.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasConfiguration.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasConfigurationImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRBlockImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRConsistencyImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRFunctionImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRInternal.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRVariableImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/InstructionImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/OperandImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/OperandInternal.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/PrintIRImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/PrintSSA.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConsistency.ql delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConsistency.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConsistencyImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConstructionImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConstructionInternal.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SimpleSSA.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SimpleSSAImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SimpleSSAPublicImports.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/Dominance.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/DominanceInternal.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/PrintDominance.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/PrintReachableBlock.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/ReachableBlock.qll delete mode 100644 csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/ReachableBlockInternal.qll delete mode 100644 csharp/ql/src/experimental/ir/internal/CSharpType.qll delete mode 100644 csharp/ql/src/experimental/ir/internal/IRCSharpLanguage.qll delete mode 100644 csharp/ql/src/experimental/ir/internal/IRCSharpLanguageDebug.qll delete mode 100644 csharp/ql/src/experimental/ir/internal/IRGuards.qll delete mode 100644 csharp/ql/src/experimental/ir/internal/IRUtilities.qll delete mode 100644 csharp/ql/src/experimental/ir/internal/IntegerConstant.qll delete mode 100644 csharp/ql/src/experimental/ir/internal/IntegerInterval.qll delete mode 100644 csharp/ql/src/experimental/ir/internal/IntegerPartial.qll delete mode 100644 csharp/ql/src/experimental/ir/internal/Overlap.qll delete mode 100644 csharp/ql/src/experimental/ir/internal/TempVariableTag.qll delete mode 100644 csharp/ql/src/experimental/ir/rangeanalysis/Bound.qll delete mode 100644 csharp/ql/src/experimental/ir/rangeanalysis/RangeAnalysis.qll delete mode 100644 csharp/ql/src/experimental/ir/rangeanalysis/RangeUtils.qll delete mode 100644 csharp/ql/src/experimental/ir/rangeanalysis/SignAnalysis.qll delete mode 100644 csharp/ql/test/experimental/ir/ir/PrintAst.expected delete mode 100644 csharp/ql/test/experimental/ir/ir/PrintAst.qlref delete mode 100644 csharp/ql/test/experimental/ir/ir/array.cs delete mode 100644 csharp/ql/test/experimental/ir/ir/assignop.cs delete mode 100644 csharp/ql/test/experimental/ir/ir/casts.cs delete mode 100644 csharp/ql/test/experimental/ir/ir/collections.cs delete mode 100644 csharp/ql/test/experimental/ir/ir/constructor_init.cs delete mode 100644 csharp/ql/test/experimental/ir/ir/crement.cs delete mode 100644 csharp/ql/test/experimental/ir/ir/delegates.cs delete mode 100644 csharp/ql/test/experimental/ir/ir/events.cs delete mode 100644 csharp/ql/test/experimental/ir/ir/foreach.cs delete mode 100644 csharp/ql/test/experimental/ir/ir/func_with_param_call.cs delete mode 100644 csharp/ql/test/experimental/ir/ir/indexers.cs delete mode 100644 csharp/ql/test/experimental/ir/ir/inheritance_polymorphism.cs delete mode 100644 csharp/ql/test/experimental/ir/ir/inoutref.cs delete mode 100644 csharp/ql/test/experimental/ir/ir/isexpr.cs delete mode 100644 csharp/ql/test/experimental/ir/ir/jumps.cs delete mode 100644 csharp/ql/test/experimental/ir/ir/lock.cs delete mode 100644 csharp/ql/test/experimental/ir/ir/obj_creation.cs delete mode 100644 csharp/ql/test/experimental/ir/ir/options delete mode 100644 csharp/ql/test/experimental/ir/ir/pointers.cs delete mode 100644 csharp/ql/test/experimental/ir/ir/prop.cs delete mode 100644 csharp/ql/test/experimental/ir/ir/raw_ir.expected delete mode 100644 csharp/ql/test/experimental/ir/ir/raw_ir.qlref delete mode 100644 csharp/ql/test/experimental/ir/ir/raw_ir_consistency.expected delete mode 100644 csharp/ql/test/experimental/ir/ir/raw_ir_consistency.qlref delete mode 100644 csharp/ql/test/experimental/ir/ir/simple_call.cs delete mode 100644 csharp/ql/test/experimental/ir/ir/simple_function.cs delete mode 100644 csharp/ql/test/experimental/ir/ir/stmts.cs delete mode 100644 csharp/ql/test/experimental/ir/ir/unaliased_ssa_consistency.expected delete mode 100644 csharp/ql/test/experimental/ir/ir/unaliased_ssa_consistency.qlref delete mode 100644 csharp/ql/test/experimental/ir/ir/unaliased_ssa_ssa_consistency.expected delete mode 100644 csharp/ql/test/experimental/ir/ir/unaliased_ssa_ssa_consistency.qlref delete mode 100644 csharp/ql/test/experimental/ir/ir/using.cs delete mode 100644 csharp/ql/test/experimental/ir/ir/variables.cs delete mode 100644 csharp/ql/test/experimental/ir/offbyone/OffByOneRA.expected delete mode 100644 csharp/ql/test/experimental/ir/offbyone/OffByOneRA.ql delete mode 100644 csharp/ql/test/experimental/ir/offbyone/null.cs delete mode 100644 csharp/ql/test/experimental/ir/offbyone/test.cs delete mode 100644 csharp/ql/test/experimental/ir/rangeanalysis/RangeAnalysis.expected delete mode 100644 csharp/ql/test/experimental/ir/rangeanalysis/RangeAnalysis.ql delete mode 100644 csharp/ql/test/experimental/ir/rangeanalysis/null.cs delete mode 100644 csharp/ql/test/experimental/ir/rangeanalysis/test.cs 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 a7c2d79d949..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.getFullyQualifiedNameWithTypes() } 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/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 7ba67d33cae..00000000000 --- a/csharp/ql/test/experimental/ir/ir/raw_ir.expected +++ /dev/null @@ -1,2008 +0,0 @@ -array.cs: -# 2| 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| 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| 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| 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| 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| BaseClass.BaseClass() -# 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| BaseClass.BaseClass(int) -# 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| DerivedClass.DerivedClass() -# 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| DerivedClass.DerivedClass(int) -# 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| DerivedClass.DerivedClass(int, int) -# 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| 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| 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| Delegates.returns(int) -# 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| 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| Events.Events() -# 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| 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| 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| Events.Fun(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| Events.Main(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| 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| test_call_with_param.f(int, int) -# 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| 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| Indexers+MyClass.get_Item(int) -# 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| Indexers+MyClass.set_Item(int, 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| 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| 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| 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| 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| InOutRef.set(ref 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| InOutRef.F(ref int, ref MyStruct, MyStruct, ref 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| 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| 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| 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| 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| ObjCreation+MyClass.MyClass() -# 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| ObjCreation+MyClass.MyClass(int) -# 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| ObjCreation.SomeFun(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| 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| Pointers.addone(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| 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| 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| PropClass.set_Prop(int) -# 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| 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| 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| 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| 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| 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| test_stmts.ifStmt(int) -# 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| test_stmts.whileStmt(int) -# 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| 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| 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| 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| 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| 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| UsingStmt+MyDisposable.MyDisposable() -# 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| 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| 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| 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| 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 7f3591c786d..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 -missingCanonicalLanguageType -multipleCanonicalLanguageTypes -containsLoopOfForwardEdges -missingIRType -multipleIRTypes -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 | InOutRef.F(ref int, ref MyStruct, MyStruct, ref MyClass, MyClass) | InOutRef.F(ref int, ref MyStruct, MyStruct, ref 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 | InOutRef.F(ref int, ref MyStruct, MyStruct, ref MyClass, MyClass) | InOutRef.F(ref int, ref MyStruct, MyStruct, ref 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 | Pointers.Main() | 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 | InOutRef.Main() | 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 | Pointers.Main() | Pointers.Main() | -nonUniqueIRVariable 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 7f3591c786d..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 -missingCanonicalLanguageType -multipleCanonicalLanguageTypes -containsLoopOfForwardEdges -missingIRType -multipleIRTypes -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 | InOutRef.F(ref int, ref MyStruct, MyStruct, ref MyClass, MyClass) | InOutRef.F(ref int, ref MyStruct, MyStruct, ref 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 | InOutRef.F(ref int, ref MyStruct, MyStruct, ref MyClass, MyClass) | InOutRef.F(ref int, ref MyStruct, MyStruct, ref 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 | Pointers.Main() | 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 | InOutRef.Main() | 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 | Pointers.Main() | Pointers.Main() | -nonUniqueIRVariable 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 - } - } - } -} From f2e467d8eae03df75e824acc0f21a9a454067de3 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 7 Mar 2024 10:02:27 +0100 Subject: [PATCH 236/430] C#: Cleanup identical-files. --- config/identical-files.json | 158 ++++-------------------------------- 1 file changed, 16 insertions(+), 142 deletions(-) diff --git a/config/identical-files.json b/config/identical-files.json index a24b5a3a618..ce0e3a67f35 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" @@ -498,4 +372,4 @@ "python/ql/test/experimental/dataflow/model-summaries/InlineTaintTest.ext.yml", "python/ql/test/experimental/dataflow/model-summaries/NormalDataflowTest.ext.yml" ] -} \ No newline at end of file +} From 79c5ad93b082379c674eca45515ec080337c9e13 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 7 Mar 2024 18:37:00 +0000 Subject: [PATCH 237/430] Kotlin 2: Accept a loc change This is a bit of an odd location for the IrVariableImpl as it includes a comment, but the comment is already included in the corrresponding IrLocalDelegatedPropertyImpl so it's not clearly wrong: Element: 16 59 (2:4 - 2:47) class org.jetbrains.kotlin.ir.declarations.impl.IrLocalDelegatedPropertyImpl -Element: 29 42 (2:17 - 2:30) class org.jetbrains.kotlin.ir.declarations.impl.IrVariableImpl +Element: 16 59 (2:4 - 2:47) class org.jetbrains.kotlin.ir.declarations.impl.IrVariableImpl So just accept the change. --- java/ql/test-kotlin2/library-tests/exprs/exprs.expected | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 06675ccb718..f159ad83e82 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -2,7 +2,7 @@ | delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:19:9:19:51 | | NullLiteral | | delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:19:9:19:51 | | NullLiteral | | delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:23:9:23:31 | | NullLiteral | -| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:33:9:33:47 | | NullLiteral | +| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:33:9:33:76 | | NullLiteral | | delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:34:9:34:48 | | NullLiteral | | delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:34:9:34:48 | | NullLiteral | | delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:39:9:39:51 | | NullLiteral | From e74606eba3558dd1e93ce3c8bc1dd3d489562cd5 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 7 Mar 2024 18:40:59 +0000 Subject: [PATCH 238/430] Kotlin 2: Accept some more loc changes --- java/ql/test-kotlin2/library-tests/exprs/exprs.expected | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index f159ad83e82..d23114e0758 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -319,9 +319,9 @@ | delegatedProperties.kt:62:25:62:48 | int | file://:0:0:0:0 | | 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 | | TypeAccess | | delegatedProperties.kt:63:17:63:37 | int | file://:0:0:0:0 | | TypeAccess | | delegatedProperties.kt:63:17:63:37 | int | file://:0:0:0:0 | | TypeAccess | From cedbfbe7ea4841583f2c7ed1ca9c5ef235109151 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Thu, 7 Mar 2024 10:50:20 -0800 Subject: [PATCH 239/430] C++: Use a more generous definition of compatible types. --- .../src/Security/CWE/CWE-843/TypeConfusion.ql | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql index d43e0145c99..c2a6f89d33f 100644 --- a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql +++ b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql @@ -148,20 +148,32 @@ class UnsafeCast extends Cast { * 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 `U` the list + * 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`. - * For example, if `T` is `struct { unsigned char x; int y; };` - * and `U` is `struct { unsigned char uc; };`. + * + * 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+() } } From 2321eecb9ecb5087f0959fd336f2c4f574225b01 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 1 Mar 2024 12:50:44 +0000 Subject: [PATCH 240/430] Add tests for multi-release jars under Java 11 and 17 --- .../ExtractorInformation.expected | 18 ++++++++++++++++++ .../ExtractorInformation.qlref | 1 + .../mod1/mod1pkg/Mod1Class.java | 3 +++ .../mod1/module-info.java | 5 +++++ .../mod2/mod2pkg/User.java | 7 +++++++ .../mod2/module-info.java | 5 +++++ .../java/multi-release-jar-java11/test.py | 15 +++++++++++++++ .../ExtractorInformation.expected | 18 ++++++++++++++++++ .../ExtractorInformation.qlref | 1 + .../mod1/mod1pkg/Mod1Class.java | 3 +++ .../mod1/module-info.java | 5 +++++ .../mod2/mod2pkg/User.java | 7 +++++++ .../mod2/module-info.java | 5 +++++ .../java/multi-release-jar-java17/test.py | 13 +++++++++++++ 14 files changed, 106 insertions(+) create mode 100644 java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/ExtractorInformation.expected create mode 100644 java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/ExtractorInformation.qlref create mode 100644 java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod1/mod1pkg/Mod1Class.java create mode 100644 java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod1/module-info.java create mode 100644 java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod2/mod2pkg/User.java create mode 100644 java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod2/module-info.java create mode 100644 java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/test.py create mode 100644 java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/ExtractorInformation.expected create mode 100644 java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/ExtractorInformation.qlref create mode 100644 java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod1/mod1pkg/Mod1Class.java create mode 100644 java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod1/module-info.java create mode 100644 java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod2/mod2pkg/User.java create mode 100644 java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod2/module-info.java create mode 100644 java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/test.py 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") From 4f9bdca4f083b3921d6dc22c95c9785c7d81896e Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Thu, 7 Mar 2024 13:08:26 -0800 Subject: [PATCH 241/430] C++: Optimize. --- cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql index c2a6f89d33f..f7ac0465d87 100644 --- a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql +++ b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql @@ -219,16 +219,14 @@ module RelevantStateConfig implements DataFlow::ConfigSig { module RelevantStateFlow = DataFlow::Global; -predicate relevantState(DataFlow::Node sink, Class state) { - exists(DataFlow::Node source | - RelevantStateFlow::flow(source, sink) and - isSourceImpl(source, state) - ) +predicate relevantState(DataFlow::Node source, DataFlow::Node sink, Class state) { + RelevantStateFlow::flow(source, sink) and + isSourceImpl(source, state) } predicate isSinkImpl(DataFlow::Node sink, Class state, Type convertedType, boolean compatible) { exists(UnsafeCast cast | - relevantState(sink, state) and + relevantState(_, sink, state) and sink.asExpr() = cast.getUnconverted() and convertedType = cast.getConvertedType() | @@ -245,10 +243,10 @@ predicate isSinkImpl(DataFlow::Node sink, Class state, Type convertedType, boole */ module BadConfig implements DataFlow::StateConfigSig { class FlowState extends Class { - FlowState() { relevantState(_, this) } + FlowState() { relevantState(_, _, this) } } - predicate isSource(DataFlow::Node source, FlowState state) { isSourceImpl(source, state) } + predicate isSource(DataFlow::Node source, FlowState state) { relevantState(source, _, state) } predicate isBarrier(DataFlow::Node node) { RelevantStateConfig::isBarrier(node) } From a548316747c7c04a952585bae74497567a24322d Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Thu, 7 Mar 2024 13:55:31 -0800 Subject: [PATCH 242/430] C++: Accept test changes. --- .../TlsSettingsMisconfiguration.expected | 18 +----------------- .../query-tests/Likely Bugs/Protocols/test.cpp | 4 ++-- .../Likely Bugs/Protocols/test2.cpp | 2 +- .../Likely Bugs/Protocols/test3.cpp | 2 +- 4 files changed, 5 insertions(+), 21 deletions(-) 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 // ... } From feb1ca29cc90c976fad51608feff447071092186 Mon Sep 17 00:00:00 2001 From: Lindsay Simpkins Date: Tue, 27 Feb 2024 17:50:43 -0500 Subject: [PATCH 243/430] csharp update MaD for HttpRequestMessage --- csharp/ql/lib/ext/System.Net.Http.model.yml | 2 ++ .../test/library-tests/dataflow/library/FlowSummaries.expected | 2 ++ .../dataflow/library/FlowSummariesFiltered.expected | 2 ++ 3 files changed, 6 insertions(+) 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/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index 2d7a0c0c192..8c0dbe4c690 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -11062,6 +11062,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 df2d33561ff..89bbad2298f 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected @@ -9414,6 +9414,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 | From 761f6d3a7eda185f17bd26a3360a5cfeb69cfcab Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Thu, 7 Mar 2024 13:44:41 -0800 Subject: [PATCH 244/430] C++: Disable field flow from the 'cpp/type-confusion' query to fix performance on ChakraCore. --- cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql index f7ac0465d87..530d8804ebd 100644 --- a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql +++ b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql @@ -215,6 +215,8 @@ module RelevantStateConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { exists(UnsafeCast cast | sink.asExpr() = cast.getUnconverted()) } + + int fieldFlowBranchLimit() { result = 0 } } module RelevantStateFlow = DataFlow::Global; @@ -253,6 +255,8 @@ module BadConfig implements DataFlow::StateConfigSig { predicate isSink(DataFlow::Node sink, FlowState state) { isSinkImpl(sink, state, _, false) } predicate isBarrierOut(DataFlow::Node sink, FlowState state) { isSink(sink, state) } + + int fieldFlowBranchLimit() { result = 0 } } module BadFlow = DataFlow::GlobalWithState; @@ -307,6 +311,8 @@ module GoodConfig implements DataFlow::StateConfigSig { isSinkImpl(sink, state, _, true) and BadFlow::flowTo(sink) } + + int fieldFlowBranchLimit() { result = 0 } } module GoodFlow = DataFlow::GlobalWithState; From 7dd175d938605bfc10c8130614dc08930dea3af8 Mon Sep 17 00:00:00 2001 From: Lindsay Simpkins Date: Thu, 7 Mar 2024 17:16:17 -0800 Subject: [PATCH 245/430] change note --- ...-03-07-update-system.net.http.httprequestmessage-models.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/lib/change-notes/2024-03-07-update-system.net.http.httprequestmessage-models.md 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 From 7f950d8e0d318c97b0a9310f9efce6b5843248a7 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Thu, 7 Mar 2024 21:48:05 -0500 Subject: [PATCH 246/430] Fix ExpandEnvironmentVariables test case --- .../flowsources/local/environment/EnvironmentVariables.expected | 1 + 1 file changed, 1 insertion(+) 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 index 25cbc81de97..0400998a4ce 100644 --- a/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariables.expected +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariables.expected @@ -4,6 +4,7 @@ | 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 | From e793a1e9fe78df48abc2069aff8767b822fd46f7 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 5 Mar 2024 09:38:09 +0100 Subject: [PATCH 247/430] Ruby: Add variable capture spurious flow test --- .../library-tests/dataflow/global/Flow.expected | 11 +++++++++++ .../dataflow/global/captured_variables.rb | 14 ++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/ruby/ql/test/library-tests/dataflow/global/Flow.expected b/ruby/ql/test/library-tests/dataflow/global/Flow.expected index 7ae00a80dce..9e01d45a07c 100644 --- a/ruby/ql/test/library-tests/dataflow/global/Flow.expected +++ b/ruby/ql/test/library-tests/dataflow/global/Flow.expected @@ -1,4 +1,5 @@ testFailures +| captured_variables.rb:236:14:236:14 | x | Unexpected result: hasValueFlow=19 | 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 | | @@ -122,6 +123,10 @@ edges | 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:226:5:226:7 | [post] fn1 [captured y] | provenance | | +| captured_variables.rb:233:9:233:17 | call to taint | captured_variables.rb:235:11:237:5 | -> { ... } [captured x] | provenance | | +| captured_variables.rb:235:5:235:7 | fn1 [captured x] | captured_variables.rb:241:5:241:7 | fn1 [captured x] | provenance | | +| captured_variables.rb:235:11:237:5 | -> { ... } [captured x] | captured_variables.rb:235:5:235:7 | fn1 [captured x] | provenance | | +| captured_variables.rb:241:5:241:7 | fn1 [captured x] | captured_variables.rb:236:14:236:14 | x | 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 | | | instance_variables.rb:13:5:15:7 | self in get_field [@field] | instance_variables.rb:14:16:14:21 | self [@field] | provenance | | @@ -385,6 +390,11 @@ nodes | 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 | +| captured_variables.rb:233:9:233:17 | call to taint | semmle.label | call to taint | +| captured_variables.rb:235:5:235:7 | fn1 [captured x] | semmle.label | fn1 [captured x] | +| captured_variables.rb:235:11:237:5 | -> { ... } [captured x] | semmle.label | -> { ... } [captured x] | +| captured_variables.rb:236:14:236:14 | x | semmle.label | x | +| captured_variables.rb:241:5:241:7 | fn1 [captured x] | semmle.label | fn1 [captured x] | | instance_variables.rb:10:19:10:19 | x | semmle.label | x | | instance_variables.rb:11:9:11:14 | [post] self [@field] | semmle.label | [post] self [@field] | | instance_variables.rb:11:18:11:18 | x | semmle.label | x | @@ -595,6 +605,7 @@ subpaths | captured_variables.rb:199:10:199:10 | x | captured_variables.rb:197:9:197:17 | call to taint | captured_variables.rb:199:10:199:10 | x | $@ | captured_variables.rb:197:9:197:17 | call to taint | call to taint | | captured_variables.rb:208:14:208:14 | x | captured_variables.rb:206:13:206:21 | call to taint | captured_variables.rb:208:14:208:14 | x | $@ | captured_variables.rb:206:13:206:21 | call to taint | call to taint | | captured_variables.rb:227:10:227:10 | y | captured_variables.rb:219:9:219:17 | call to taint | captured_variables.rb:227:10:227:10 | y | $@ | captured_variables.rb:219:9:219:17 | call to taint | call to taint | +| captured_variables.rb:236:14:236:14 | x | captured_variables.rb:233:9:233:17 | call to taint | captured_variables.rb:236:14:236:14 | x | $@ | captured_variables.rb:233:9:233:17 | call to taint | call to taint | | instance_variables.rb:20:10:20:13 | @foo | instance_variables.rb:19:12:19:21 | call to taint | instance_variables.rb:20:10:20:13 | @foo | $@ | instance_variables.rb:19:12:19:21 | call to taint | call to taint | | instance_variables.rb:36:10:36:33 | call to get_field | instance_variables.rb:36:14:36:22 | call to taint | instance_variables.rb:36:10:36:33 | call to get_field | $@ | instance_variables.rb:36:14:36:22 | call to taint | call to taint | | instance_variables.rb:39:6:39:33 | call to get_field | instance_variables.rb:39:14:39:22 | call to taint | instance_variables.rb:39:6:39:33 | call to get_field | $@ | instance_variables.rb:39:14:39:22 | call to taint | call to taint | 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 From 63bb772ef9a67b4c2993cb370de4775b44c5f8b3 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 4 Mar 2024 13:25:15 +0100 Subject: [PATCH 248/430] Variable capture: Avoid overlapping and false-positive data flow paths --- .../codeql/dataflow/VariableCapture.qll | 80 +++++++++++++++++-- 1 file changed, 74 insertions(+), 6 deletions(-) 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) From 24e35f6f3d0126b81b72f896aa9bd1d8fa369af4 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 4 Mar 2024 13:31:53 +0100 Subject: [PATCH 249/430] Update expected test output --- .../dataflow/global/DataFlowPath.expected | 86 ------------------- .../global/TaintTrackingPath.expected | 86 ------------------- .../dataflow/variable-capture/by_value.py | 2 +- .../dataflow/global/Flow.expected | 46 ---------- 4 files changed, 1 insertion(+), 219 deletions(-) diff --git a/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected b/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected index c994ff441b4..7ebc9193829 100644 --- a/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected +++ b/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected @@ -1,27 +1,17 @@ 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 [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 [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:350:34:350:34 | a : (...) => ... [captured sink39] : String | provenance | | @@ -37,28 +27,18 @@ edges | 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: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 [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: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: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: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 [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: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 | | @@ -66,19 +46,13 @@ edges | 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: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 | | @@ -93,17 +67,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 | | @@ -112,52 +82,30 @@ edges | 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:355:45:355: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: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:328:17:328:30 | "taint source" : String | Capture.cs:332:9:332:65 | CapturingLocalFunction(...) : CapturingLocalFunction [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: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:332:9:332:65 | CapturingLocalFunction(...) : CapturingLocalFunction [captured x] : 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: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: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:343:34:343:55 | (...) => ... : (...) => ... [captured capturedLambda, 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:16:343:30 | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | Capture.cs:345:9:345:23 | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | provenance | | -| Capture.cs:343:34:343:55 | (...) => ... : (...) => ... [captured capturedLambda, captured x] : String | Capture.cs:343:16:343:30 | access to local variable capturingLambda : (...) => ... [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 : (...) => ... [captured capturedLambda, captured x] : String | Capture.cs:343:40:343:53 | access to local variable capturedLambda : (...) => ... [captured x] : String | 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 | | @@ -519,24 +467,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 [captured tainted] : String | semmle.label | access to local variable captureIn3 : Func [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 | @@ -558,21 +500,15 @@ 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: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: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: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 [captured tainted] : String | semmle.label | access to local variable captureThrough3 : Func [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: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 | @@ -583,7 +519,6 @@ 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: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 | @@ -591,10 +526,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 | @@ -612,14 +544,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 | @@ -632,29 +561,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 | @@ -663,19 +583,13 @@ 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:9:332:65 | CapturingLocalFunction(...) : CapturingLocalFunction [captured x] : String | semmle.label | CapturingLocalFunction(...) : CapturingLocalFunction [captured x] : String | -| 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: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: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:16:343: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:343:34:343:55 | (...) => ... : (...) => ... [captured capturedLambda, captured x] : String | semmle.label | (...) => ... : (...) => ... [captured capturedLambda, captured x] : String | | 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 : (...) => ... [captured capturedLambda, captured x] : String | semmle.label | access to local variable capturingLambda : (...) => ... [captured 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 | diff --git a/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected b/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected index 2bd30574649..a5ceb692695 100644 --- a/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected +++ b/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected @@ -1,27 +1,17 @@ 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 [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 [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:350:34:350:34 | a : (...) => ... [captured sink39] : String | provenance | | @@ -37,28 +27,18 @@ edges | 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: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 [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: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: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: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 [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: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 | | @@ -66,19 +46,13 @@ edges | 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: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 | | @@ -93,17 +67,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 | | @@ -112,52 +82,30 @@ edges | 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:355:45:355: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: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:328:17:328:30 | "taint source" : String | Capture.cs:332:9:332:65 | CapturingLocalFunction(...) : CapturingLocalFunction [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: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:332:9:332:65 | CapturingLocalFunction(...) : CapturingLocalFunction [captured x] : 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: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: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:343:34:343:55 | (...) => ... : (...) => ... [captured capturedLambda, 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:16:343:30 | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | Capture.cs:345:9:345:23 | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | provenance | | -| Capture.cs:343:34:343:55 | (...) => ... : (...) => ... [captured capturedLambda, captured x] : String | Capture.cs:343:16:343:30 | access to local variable capturingLambda : (...) => ... [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 : (...) => ... [captured capturedLambda, captured x] : String | Capture.cs:343:40:343:53 | access to local variable capturedLambda : (...) => ... [captured x] : String | 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 | | @@ -569,24 +517,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 [captured tainted] : String | semmle.label | access to local variable captureIn3 : Func [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 | @@ -608,21 +550,15 @@ 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: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: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: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 [captured tainted] : String | semmle.label | access to local variable captureThrough3 : Func [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: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 | @@ -633,7 +569,6 @@ 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: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 | @@ -641,10 +576,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 | @@ -662,14 +594,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 | @@ -682,29 +611,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 | @@ -713,19 +633,13 @@ 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:9:332:65 | CapturingLocalFunction(...) : CapturingLocalFunction [captured x] : String | semmle.label | CapturingLocalFunction(...) : CapturingLocalFunction [captured x] : String | -| 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: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: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:16:343: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:343:34:343:55 | (...) => ... : (...) => ... [captured capturedLambda, captured x] : String | semmle.label | (...) => ... : (...) => ... [captured capturedLambda, captured x] : String | | 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 : (...) => ... [captured capturedLambda, captured x] : String | semmle.label | access to local variable capturingLambda : (...) => ... [captured 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 | 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/ruby/ql/test/library-tests/dataflow/global/Flow.expected b/ruby/ql/test/library-tests/dataflow/global/Flow.expected index 9e01d45a07c..94589e1aafb 100644 --- a/ruby/ql/test/library-tests/dataflow/global/Flow.expected +++ b/ruby/ql/test/library-tests/dataflow/global/Flow.expected @@ -1,11 +1,7 @@ testFailures -| captured_variables.rb:236:14:236:14 | x | Unexpected result: hasValueFlow=19 | 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 | | @@ -17,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 | | @@ -66,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 | | @@ -82,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 | | @@ -117,16 +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:226:5:226:7 | [post] fn1 [captured y] | provenance | | -| captured_variables.rb:233:9:233:17 | call to taint | captured_variables.rb:235:11:237:5 | -> { ... } [captured x] | provenance | | -| captured_variables.rb:235:5:235:7 | fn1 [captured x] | captured_variables.rb:241:5:241:7 | fn1 [captured x] | provenance | | -| captured_variables.rb:235:11:237:5 | -> { ... } [captured x] | captured_variables.rb:235:5:235:7 | fn1 [captured x] | provenance | | -| captured_variables.rb:241:5:241:7 | fn1 [captured x] | captured_variables.rb:236:14:236:14 | x | 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 | | | instance_variables.rb:13:5:15:7 | self in get_field [@field] | instance_variables.rb:14:16:14:21 | self [@field] | provenance | | @@ -269,8 +243,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 | @@ -286,16 +258,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 | @@ -328,8 +296,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] | @@ -346,10 +312,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] | @@ -385,16 +347,9 @@ 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: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 | -| captured_variables.rb:233:9:233:17 | call to taint | semmle.label | call to taint | -| captured_variables.rb:235:5:235:7 | fn1 [captured x] | semmle.label | fn1 [captured x] | -| captured_variables.rb:235:11:237:5 | -> { ... } [captured x] | semmle.label | -> { ... } [captured x] | -| captured_variables.rb:236:14:236:14 | x | semmle.label | x | -| captured_variables.rb:241:5:241:7 | fn1 [captured x] | semmle.label | fn1 [captured x] | | instance_variables.rb:10:19:10:19 | x | semmle.label | x | | instance_variables.rb:11:9:11:14 | [post] self [@field] | semmle.label | [post] self [@field] | | instance_variables.rb:11:18:11:18 | x | semmle.label | x | @@ -605,7 +560,6 @@ subpaths | captured_variables.rb:199:10:199:10 | x | captured_variables.rb:197:9:197:17 | call to taint | captured_variables.rb:199:10:199:10 | x | $@ | captured_variables.rb:197:9:197:17 | call to taint | call to taint | | captured_variables.rb:208:14:208:14 | x | captured_variables.rb:206:13:206:21 | call to taint | captured_variables.rb:208:14:208:14 | x | $@ | captured_variables.rb:206:13:206:21 | call to taint | call to taint | | captured_variables.rb:227:10:227:10 | y | captured_variables.rb:219:9:219:17 | call to taint | captured_variables.rb:227:10:227:10 | y | $@ | captured_variables.rb:219:9:219:17 | call to taint | call to taint | -| captured_variables.rb:236:14:236:14 | x | captured_variables.rb:233:9:233:17 | call to taint | captured_variables.rb:236:14:236:14 | x | $@ | captured_variables.rb:233:9:233:17 | call to taint | call to taint | | instance_variables.rb:20:10:20:13 | @foo | instance_variables.rb:19:12:19:21 | call to taint | instance_variables.rb:20:10:20:13 | @foo | $@ | instance_variables.rb:19:12:19:21 | call to taint | call to taint | | instance_variables.rb:36:10:36:33 | call to get_field | instance_variables.rb:36:14:36:22 | call to taint | instance_variables.rb:36:10:36:33 | call to get_field | $@ | instance_variables.rb:36:14:36:22 | call to taint | call to taint | | instance_variables.rb:39:6:39:33 | call to get_field | instance_variables.rb:39:14:39:22 | call to taint | instance_variables.rb:39:6:39:33 | call to get_field | $@ | instance_variables.rb:39:14:39:22 | call to taint | call to taint | From fc5b9e2796178bb9fd250a76eb827994d56e1187 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 8 Mar 2024 10:34:39 +0100 Subject: [PATCH 250/430] JS: Expand test case --- .../ql/test/library-tests/TypeTracking/summarize.js | 8 ++++++++ 1 file changed, 8 insertions(+) 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 From 6d8d106d91f78e1c33552c7f65e81ac3cf0aae8d Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 8 Mar 2024 11:18:51 +0100 Subject: [PATCH 251/430] Python: add test for `ReturnValue.TupleElement[n]` --- .../dataflow/model-summaries/InlineTaintTest.ext.yml | 2 ++ .../dataflow/model-summaries/NormalDataflowTest.ext.yml | 2 ++ .../dataflow/model-summaries/model_summaries.py | 9 ++++++++- 3 files changed, 12 insertions(+), 1 deletion(-) 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 From 33eb69164c8bd92e16a66ab9dd83dd6e321ee602 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 8 Mar 2024 11:20:04 +0100 Subject: [PATCH 252/430] C#: Change ID of buildless output assembly --- .../Entities/Assembly.cs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Assembly.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Assembly.cs index a997b7129df..cf814c6087b 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); @@ -68,8 +69,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("\\", "/")); From ac4601cb8fca067c8e5a77a968c65f7dba702ed6 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 8 Mar 2024 13:01:38 +0100 Subject: [PATCH 253/430] Update javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll Co-authored-by: Rasmus Wriedt Larsen --- .../ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll index 682c9a2dffa..7e55944038b 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 From 8fe483d9d802dad7ded644d34abe26f062e9081b Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 7 Mar 2024 14:25:55 +0100 Subject: [PATCH 254/430] Python: Add example of missing use-use flow (see PR for more detailed description) --- .../library-tests/essa/ssa-compute/test2.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 python/ql/test/library-tests/essa/ssa-compute/test2.py 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 From 87b6592dbc99b5ec861b7c6d835868980d58cc6f Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 8 Mar 2024 13:34:26 +0100 Subject: [PATCH 255/430] Python: Accept inconsistency for missing use-use flow At least until we have a proper fix --- python/ql/consistency-queries/TypeTrackingConsistency.ql | 6 ++++++ .../CONSISTENCY/TypeTrackingConsistency.expected | 6 ++++++ 2 files changed, 12 insertions(+) create mode 100644 python/ql/test/library-tests/essa/ssa-compute/CONSISTENCY/TypeTrackingConsistency.expected diff --git a/python/ql/consistency-queries/TypeTrackingConsistency.ql b/python/ql/consistency-queries/TypeTrackingConsistency.ql index b8f1e3a1b48..b937b0c6163 100644 --- a/python/ql/consistency-queries/TypeTrackingConsistency.ql +++ b/python/ql/consistency-queries/TypeTrackingConsistency.ql @@ -24,6 +24,12 @@ private module ConsistencyChecksInput implements ConsistencyChecksInputSig { // 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") } } 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. | From adf5a4b1e445b4f041625f49d1095c2f0be08bb1 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 8 Mar 2024 14:13:47 +0100 Subject: [PATCH 256/430] Python: Fix internal consistency failures --- python/ql/consistency-queries/TypeTrackingConsistency.ql | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/python/ql/consistency-queries/TypeTrackingConsistency.ql b/python/ql/consistency-queries/TypeTrackingConsistency.ql index b937b0c6163..15083229002 100644 --- a/python/ql/consistency-queries/TypeTrackingConsistency.ql +++ b/python/ql/consistency-queries/TypeTrackingConsistency.ql @@ -17,7 +17,13 @@ private module ConsistencyChecksInput implements ConsistencyChecksInputSig { // // match (NONSOURCE, SOURCE): // case (x, y): ... - exists(DataFlow::Node m | m.asCfgNode().getNode() instanceof MatchCapturePattern | + 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 From 3601773856c09fe559c45b5227329ce992a38869 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 8 Mar 2024 14:59:28 +0100 Subject: [PATCH 257/430] python: support encoding lower bound --- .../semmle/python/dataflow/new/internal/FlowSummaryImpl.qll | 5 +++++ 1 file changed, 5 insertions(+) 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 a673a188133..6a7463ccb9b 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll @@ -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 + ":" From 9b5cfc9026515537ba4140a0399c5f483256986a Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 8 Mar 2024 15:02:30 +0100 Subject: [PATCH 258/430] Change assembly population in buildless --- .../Semmle.Extraction.CSharp/Entities/Assembly.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Assembly.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Assembly.cs index cf814c6087b..a826aa5e02c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Assembly.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Assembly.cs @@ -33,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); } } From dbd33d1cf0d8211779a90bfb7fdc4f7eb4aa9ba7 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 8 Mar 2024 14:04:01 +0000 Subject: [PATCH 259/430] Model Argument[1] of ActiveRecord from --- .../2024-03-08-activerecord-from.md | 4 + .../codeql/ruby/frameworks/ActiveRecord.qll | 6 +- .../security/cwe-089/ActiveRecordInjection.rb | 6 + .../security/cwe-089/SqlInjection.expected | 138 +++++++++--------- 4 files changed, 86 insertions(+), 68 deletions(-) create mode 100644 ruby/ql/lib/change-notes/2024-03-08-activerecord-from.md 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/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/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 9bf4513af07..8b6c5bf4d16 100644 --- a/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected @@ -46,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 | | @@ -165,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 | ...[...] | @@ -217,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 | @@ -243,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 | From 66130d208e6bfd9a09a95eec7a82f90926b93734 Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Fri, 8 Mar 2024 19:30:41 +0400 Subject: [PATCH 260/430] convert abstract predicate `isAdditionalFlowStep` to non-abstract --- .../DecompressionBombsCustomizations.qll | 66 +------------------ 1 file changed, 1 insertion(+), 65 deletions(-) diff --git a/go/ql/src/experimental/frameworks/DecompressionBombsCustomizations.qll b/go/ql/src/experimental/frameworks/DecompressionBombsCustomizations.qll index 391e162fa1a..f40b42e7789 100644 --- a/go/ql/src/experimental/frameworks/DecompressionBombsCustomizations.qll +++ b/go/ql/src/experimental/frameworks/DecompressionBombsCustomizations.qll @@ -21,7 +21,7 @@ module DecompressionBombs { /** * Holds if there is a additional taint step between pred and succ. */ - abstract predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode); + predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { none() } /** * Holds if there is a additional taint step between pred and succ. @@ -56,10 +56,6 @@ module DecompressionBombs { toState = "ZstdNewReader" ) } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } } } @@ -93,10 +89,6 @@ module DecompressionBombs { toState = "ZstdNewReader" ) } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } } } @@ -119,10 +111,6 @@ module DecompressionBombs { toState = "ZipOpenReader" ) } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } } } @@ -185,10 +173,6 @@ module DecompressionBombs { toState = "XzNewReader" ) } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } } } @@ -212,10 +196,6 @@ module DecompressionBombs { toState = "GzipNewReader" ) } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } } } @@ -245,10 +225,6 @@ module DecompressionBombs { toState = "GzipNewReader" ) } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } } } @@ -272,10 +248,6 @@ module DecompressionBombs { toState = "Bzip2NewReader" ) } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } } } @@ -299,10 +271,6 @@ module DecompressionBombs { toState = "Bzip2NewReader" ) } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } } } @@ -326,10 +294,6 @@ module DecompressionBombs { toState = "FlateNewReader" ) } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } } } @@ -365,10 +329,6 @@ module DecompressionBombs { toState = "FlateNewReader" ) } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } } } @@ -404,10 +364,6 @@ module DecompressionBombs { toState = "FlateNewReader" ) } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } } } @@ -431,10 +387,6 @@ module DecompressionBombs { toState = "ZlibNewReader" ) } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } } } @@ -458,10 +410,6 @@ module DecompressionBombs { toState = "ZlibNewReader" ) } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } } } @@ -485,10 +433,6 @@ module DecompressionBombs { toState = "SnappyNewReader" ) } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } } } @@ -512,10 +456,6 @@ module DecompressionBombs { toState = "SnappyNewReader" ) } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } } } @@ -551,10 +491,6 @@ module DecompressionBombs { toState = "S2NewReader" ) } - - override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { - none() - } } } From 43df6a2c07bc56a313f8c91a3e275d37d5a7b703 Mon Sep 17 00:00:00 2001 From: am0o0 <77095239+am0o0@users.noreply.github.com> Date: Fri, 8 Mar 2024 20:04:30 +0400 Subject: [PATCH 261/430] add comments for already implemented `io.Read` and `io.WriteTo` Sinks. remove some sinks about `"decompressor"` which was added wrongly. change `GeneralReadIoSink` type from module to class. separate `KlauspostGzipAndPgzip` `KlauspostPgzip` and `KlauspostGzip`. --- .../DecompressionBombsCustomizations.qll | 213 ++++++++++-------- 1 file changed, 116 insertions(+), 97 deletions(-) diff --git a/go/ql/src/experimental/frameworks/DecompressionBombsCustomizations.qll b/go/ql/src/experimental/frameworks/DecompressionBombsCustomizations.qll index f40b42e7789..b50d3757797 100644 --- a/go/ql/src/experimental/frameworks/DecompressionBombsCustomizations.qll +++ b/go/ql/src/experimental/frameworks/DecompressionBombsCustomizations.qll @@ -37,7 +37,9 @@ module DecompressionBombs { abstract class Sink extends DataFlow::Node { } /** - * Provides decompression bomb sinks and additional flow steps for `github.com/DataDog/zstd` package + * Provides decompression bomb sinks and additional flow steps for `github.com/DataDog/zstd` package. + * + * `Reader.Read` already modeled. */ module DataDogZstd { class TheAdditionalTaintStep extends AdditionalTaintStep { @@ -60,7 +62,9 @@ module DecompressionBombs { } /** - * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/zstd` package + * 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 { @@ -155,7 +159,9 @@ module DecompressionBombs { } /** - * Provides decompression bomb sinks and additional flow steps for `github.com/ulikunitz/xz` package + * Provides decompression bomb sinks and additional flow steps for `github.com/ulikunitz/xz` package. + * + * `Reader.Read` already modeled. */ module UlikunitzXz { class TheAdditionalTaintStep extends AdditionalTaintStep { @@ -177,7 +183,9 @@ module DecompressionBombs { } /** - * Provides decompression bomb sinks and additional flow steps for `compress/gzip` package + * Provides decompression bomb sinks and additional flow steps for `compress/gzip` package. + * + * `Reader.Read` already modeled. */ module CompressGzipBombs { class TheAdditionalTaintStep extends AdditionalTaintStep { @@ -200,9 +208,11 @@ module DecompressionBombs { } /** - * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/gzip` package + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/pgzip` package. + * + * `Reader.Read`, `Reader.WriteTo` already modeled. */ - module KlauspostGzipAndPgzip { + module KlauspostPgzip { class TheAdditionalTaintStep extends AdditionalTaintStep { TheAdditionalTaintStep() { this = "AdditionalTaintStep" } @@ -216,7 +226,24 @@ module DecompressionBombs { toNode = call.getResult(0) and fromState = "" and toState = "PgzipNewReader" - or + ) + } + } + } + + /** + * 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 @@ -229,7 +256,9 @@ module DecompressionBombs { } /** - * Provides decompression bomb sinks and additional flow steps for `compress/bzip2` package + * Provides decompression bomb sinks and additional flow steps for `compress/bzip2` package. + * + * `Reader.Read` already modeled. */ module CompressBzip2 { class TheAdditionalTaintStep extends AdditionalTaintStep { @@ -252,7 +281,9 @@ module DecompressionBombs { } /** - * Provides decompression bomb sinks and additional flow steps for `github.com/dsnet/compress/bzip2` package + * 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 { @@ -275,7 +306,9 @@ module DecompressionBombs { } /** - * Provides decompression bomb sinks and additional flow steps for `github.com/dsnet/compress/flate` package + * 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 { @@ -298,21 +331,11 @@ module DecompressionBombs { } /** - * Provides decompression bomb sinks and additional flow steps for `compress/flate` package + * Provides decompression bomb sinks and additional flow steps for `compress/flate` package. + * + * `Reader.Read` already modeled. */ - module CompressFlateBombs { - class TheSink extends Sink { - TheSink() { - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("compress/flate", "decompressor", "Read") and - cn = m.getACall() - | - this = cn.getReceiver() and - not hasFlowToComparison(cn.getResult(0)) - ) - } - } - + module CompressFlate { class TheAdditionalTaintStep extends AdditionalTaintStep { TheAdditionalTaintStep() { this = "AdditionalTaintStep" } @@ -333,21 +356,11 @@ module DecompressionBombs { } /** - * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/flate` package + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/flate` package. + * + * `Reader.Read` already modeled. */ module KlauspostFlate { - class TheSink extends Sink { - TheSink() { - exists(Method m, DataFlow::CallNode cn | - m.hasQualifiedName("github.com/klauspost/compress/flate", "decompressor", "Read") and - cn = m.getACall() - | - this = cn.getReceiver() and - not hasFlowToComparison(cn.getResult(0)) - ) - } - } - class TheAdditionalTaintStep extends AdditionalTaintStep { TheAdditionalTaintStep() { this = "AdditionalTaintStep" } @@ -368,7 +381,9 @@ module DecompressionBombs { } /** - * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/zlib` package + * 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 { @@ -391,7 +406,9 @@ module DecompressionBombs { } /** - * Provides decompression bomb sinks and additional flow steps for `compress/zlib` package + * Provides decompression bomb sinks and additional flow steps for `compress/zlib` package. + * + * `Reader.Read` already modeled. */ module CompressZlibBombs { class TheAdditionalTaintStep extends AdditionalTaintStep { @@ -414,7 +431,9 @@ module DecompressionBombs { } /** - * Provides decompression bomb sinks and additional flow steps for `github.com/golang/snappy` package + * 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 { @@ -437,7 +456,9 @@ module DecompressionBombs { } /** - * Provides decompression bombs sinks and additional flow steps for `github.com/klauspost/compress/snappy` package + * 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 { @@ -460,7 +481,9 @@ module DecompressionBombs { } /** - * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/s2` package + * 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 { @@ -497,61 +520,57 @@ module DecompressionBombs { /** * Provides decompression bomb sinks for packages that use some standard IO interfaces/methods for reading decompressed data */ - module GeneralReadIoSink { - class TheSink extends Sink { - TheSink() { - 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) - ) - } + 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) + ) } } From 589a34241c528aaae5a7c940947a2f7b72360046 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 11 Mar 2024 00:16:32 +0000 Subject: [PATCH 262/430] Add changed framework coverage reports --- .../library-coverage/coverage.csv | 88 +++++++++---------- .../library-coverage/coverage.rst | 6 +- 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/csharp/documentation/library-coverage/coverage.csv b/csharp/documentation/library-coverage/coverage.csv index 43681e0a264..8bb3b01441a 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,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.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,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..bdee069e89a 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.SafeHandles``, ``Mono.Linker``, ``MySql.Data.MySqlClient``, ``Newtonsoft.Json``, ``SourceGenerators``, ``Windows.Security.Cryptography.Core``",8,1547,148, + Totals,,38,13418,409,9 From d300736c7ee28adecb8df656c7661248fdb70b98 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 28 Feb 2024 13:14:16 -0500 Subject: [PATCH 263/430] Remove `AddLocalSource` classes --- .../semmle/code/csharp/security/dataflow/CodeInjectionQuery.qll | 2 -- .../code/csharp/security/dataflow/ResourceInjectionQuery.qll | 2 -- .../semmle/code/csharp/security/dataflow/SqlInjectionQuery.qll | 2 -- 3 files changed, 6 deletions(-) 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 fdfd422c47b..1256ae5a7ee 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/CodeInjectionQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/CodeInjectionQuery.qll @@ -68,8 +68,6 @@ deprecated class RemoteSource extends DataFlow::Node instanceof RemoteFlowSource */ deprecated class LocalSource extends DataFlow::Node instanceof LocalFlowSource { } -private class AddLocalSource extends Source instanceof LocalFlowSource { } - /** A source supported by the current threat model. */ class ThreatModelSource extends Source instanceof ThreatModelFlowSource { } 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 56cb59001cd..a66283de02a 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ResourceInjectionQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ResourceInjectionQuery.qll @@ -67,8 +67,6 @@ deprecated class RemoteSource extends DataFlow::Node instanceof RemoteFlowSource */ deprecated class LocalSource extends DataFlow::Node instanceof LocalFlowSource { } -private class AddLocalSource extends Source instanceof LocalFlowSource { } - /** A source supported by the current threat model. */ class ThreatModelSource extends Source instanceof ThreatModelFlowSource { } 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 12c580381b9..b7b198bbca0 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/SqlInjectionQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/SqlInjectionQuery.qll @@ -78,8 +78,6 @@ deprecated class RemoteSource extends DataFlow::Node instanceof RemoteFlowSource */ deprecated class LocalSource extends DataFlow::Node instanceof LocalFlowSource { } -private class AddLocalSource extends Source instanceof LocalFlowSource { } - /** A source supported by the current threat model. */ class ThreatModelSource extends Source instanceof ThreatModelFlowSource { } From 8187b00562b82deda0746cd5632d540f9db2253b Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Fri, 1 Mar 2024 12:56:56 -0500 Subject: [PATCH 264/430] Change note --- .../change-notes/2024-03-06-remove-default-local-sources.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 csharp/ql/src/change-notes/2024-03-06-remove-default-local-sources.md 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`. + From 3fdc7e95df97282794ca4682a0864f523bb65a1e Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Fri, 1 Mar 2024 13:29:03 -0500 Subject: [PATCH 265/430] Add local models to CodeInjection tests --- .../Security Features/CWE-094/CodeInjection.ext.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 csharp/ql/test/query-tests/Security Features/CWE-094/CodeInjection.ext.yml 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 From a09eb9f4c570184a8d899529bb558c5ef89cb888 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 11 Mar 2024 08:58:59 +0100 Subject: [PATCH 266/430] Update go/ql/src/Security/CWE-770/UncontrolledAllocationSize.ql Co-authored-by: Ben Ahmady <32935794+subatoi@users.noreply.github.com> --- go/ql/src/Security/CWE-770/UncontrolledAllocationSize.ql | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/go/ql/src/Security/CWE-770/UncontrolledAllocationSize.ql b/go/ql/src/Security/CWE-770/UncontrolledAllocationSize.ql index 2be09c6901b..c6d2091cc53 100644 --- a/go/ql/src/Security/CWE-770/UncontrolledAllocationSize.ql +++ b/go/ql/src/Security/CWE-770/UncontrolledAllocationSize.ql @@ -1,7 +1,6 @@ /** * @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. + * @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 warning * @security-severity 6.0 From 7a39f077d9531d48e121659e2cade47488896d50 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 11 Mar 2024 11:58:20 +0100 Subject: [PATCH 267/430] Data flow: Add `ConfigSig::accessPathLimit` --- .../dataflow/internal/ContentDataFlow.qll | 2 ++ .../modelgenerator/internal/CaptureModels.qll | 6 +++--- .../modelgenerator/internal/CaptureModels.qll | 6 +++--- .../ruby/dataflow/internal/DataFlowImpl1.qll | 2 ++ shared/dataflow/codeql/dataflow/DataFlow.qll | 10 ++++++++++ .../codeql/dataflow/internal/DataFlowImpl.qll | 19 ++++++++++++++++--- 6 files changed, 36 insertions(+), 9 deletions(-) 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/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/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/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/shared/dataflow/codeql/dataflow/DataFlow.qll b/shared/dataflow/codeql/dataflow/DataFlow.qll index 6a18c166613..6b14d3d2e06 100644 --- a/shared/dataflow/codeql/dataflow/DataFlow.qll +++ b/shared/dataflow/codeql/dataflow/DataFlow.qll @@ -376,6 +376,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. @@ -495,6 +498,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. @@ -583,6 +589,8 @@ module DataFlowMake { private module C implements FullStateConfigSig { import DefaultState import Config + + predicate accessPathLimit = Config::accessPathLimit/0; } import Impl @@ -599,6 +607,8 @@ module DataFlowMake { module GlobalWithState implements GlobalFlowSig { private module C implements FullStateConfigSig { import Config + + predicate accessPathLimit = Config::accessPathLimit/0; } import Impl diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index d555b281710..2b43cbdd474 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -93,6 +93,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. @@ -1328,6 +1331,13 @@ module MakeImpl { fwdFlow1(_, _, _, _, _, _, t0, t, ap, _) and t0 != t } + bindingset[c, t, tail] + additional Ap apCons(Content c, Typ t, Ap tail) { + result = Param::apCons(c, t, tail) and + Config::accessPathLimit() > 0 and + if tail instanceof ApNil then any() else Config::accessPathLimit() > 1 + } + pragma[nomagic] private predicate fwdFlow0( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, @@ -3026,11 +3036,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) } @@ -3189,7 +3199,10 @@ module MakeImpl { Typ getTyp(DataFlowType t) { result = t } bindingset[c, t, tail] - Ap apCons(Content c, Typ t, Ap tail) { result.isCons(c, t, tail) } + Ap apCons(Content c, Typ t, Ap tail) { + result.isCons(c, t, tail) and + Config::accessPathLimit() > tail.len() + } class ApHeadContent = Content; From da66281fef261b93c2ca667d5c4a66effc53cbaf Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 11 Mar 2024 11:59:15 +0100 Subject: [PATCH 268/430] Sync files --- cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl1.qll | 2 ++ cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll | 2 ++ cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll | 2 ++ cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll | 2 ++ .../lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll | 2 ++ .../lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl1.qll | 2 ++ .../lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll | 2 ++ .../lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll | 2 ++ .../lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll | 2 ++ .../lib/semmle/code/csharp/dataflow/internal/DataFlowImpl1.qll | 2 ++ .../lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll | 2 ++ .../lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll | 2 ++ .../lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll | 2 ++ .../lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll | 2 ++ go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl1.qll | 2 ++ go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl2.qll | 2 ++ .../ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl1.qll | 2 ++ .../ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll | 2 ++ .../ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll | 2 ++ .../ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll | 2 ++ .../ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll | 2 ++ .../ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll | 2 ++ .../lib/semmle/python/dataflow/new/internal/DataFlowImpl1.qll | 2 ++ .../lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll | 2 ++ .../lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll | 2 ++ .../lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll | 2 ++ ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll | 2 ++ swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImpl1.qll | 2 ++ 28 files changed, 56 insertions(+) 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/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/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/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/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/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/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/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/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) { From f571ebdaf4dcef776d521a30dd13f34b422f0135 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 11 Mar 2024 14:43:14 +0100 Subject: [PATCH 269/430] C#: Overall change note for C# 12 / .NET 8 support. --- csharp/ql/lib/change-notes/2024-03-11-csharp12-dotnet8.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/lib/change-notes/2024-03-11-csharp12-dotnet8.md 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. From 7b0df57d7a485d71cdb5f060dccc2388590674bf Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 11 Mar 2024 13:56:22 +0000 Subject: [PATCH 270/430] C++: Remove the two configurations that depend on flow state to speed up performance on ChakraCore. --- .../src/Security/CWE/CWE-843/TypeConfusion.ql | 158 +++++------------- .../CWE/CWE-843/TypeConfusion.expected | 28 ++++ 2 files changed, 72 insertions(+), 114 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql index 530d8804ebd..18a331f9c32 100644 --- a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql +++ b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql @@ -12,7 +12,7 @@ import cpp import semmle.code.cpp.dataflow.new.DataFlow -import BadFlow::PathGraph +import Flow::PathGraph /** * Holds if `f` is a field located at byte offset `offset` in `c`. @@ -179,23 +179,28 @@ class UnsafeCast extends Cast { } /** - * Holds if `source` is an allocation that allocates a value of type `state`. + * Holds if `source` is an allocation that allocates a value of type `type`. */ -predicate isSourceImpl(DataFlow::Node source, Class state) { - state = source.asExpr().(AllocationExpr).getAllocatedElementType().stripType() and +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 = state.getDefinition() and + tde = type.getDefinition() and not tde.isFromUninstantiatedTemplate(_) ) } -/** - * The `RelevantStateConfig` configuration is used to find the set of - * states for the `BadConfig` and `GoodConfig`. The flow computed by - * `RelevantStateConfig` is used to implement the `relevantState` predicate - * which is used to avoid a cartesian product in `isSinkImpl`. - */ -module RelevantStateConfig implements DataFlow::ConfigSig { +/** 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) { @@ -212,122 +217,47 @@ module RelevantStateConfig implements DataFlow::ConfigSig { ) } - predicate isSink(DataFlow::Node sink) { - exists(UnsafeCast cast | sink.asExpr() = cast.getUnconverted()) - } + predicate isSink(DataFlow::Node sink) { sink.asExpr() = any(UnsafeCast cast).getUnconverted() } int fieldFlowBranchLimit() { result = 0 } } -module RelevantStateFlow = DataFlow::Global; +module Flow = DataFlow::Global; -predicate relevantState(DataFlow::Node source, DataFlow::Node sink, Class state) { - RelevantStateFlow::flow(source, sink) and - isSourceImpl(source, state) -} - -predicate isSinkImpl(DataFlow::Node sink, Class state, Type convertedType, boolean compatible) { - exists(UnsafeCast cast | - relevantState(_, sink, state) and - sink.asExpr() = cast.getUnconverted() and - convertedType = cast.getConvertedType() - | - if cast.compatibleWith(state) then compatible = true else compatible = false +predicate relevantType(DataFlow::Node sink, Class allocatedType) { + exists(DataFlow::Node source | + Flow::flow(source, sink) and + isSourceImpl(source, allocatedType) ) } -/** - * The `BadConfig` configuration tracks flow from an allocation to an - * incompatible cast. - * - * We use `FlowState` to track the type of the source, and compare the - * flow state to the target of the cast in the `isSink` definition. - */ -module BadConfig implements DataFlow::StateConfigSig { - class FlowState extends Class { - FlowState() { relevantState(_, _, this) } - } - - predicate isSource(DataFlow::Node source, FlowState state) { relevantState(source, _, state) } - - predicate isBarrier(DataFlow::Node node) { RelevantStateConfig::isBarrier(node) } - - predicate isSink(DataFlow::Node sink, FlowState state) { isSinkImpl(sink, state, _, false) } - - predicate isBarrierOut(DataFlow::Node sink, FlowState state) { isSink(sink, state) } - - int fieldFlowBranchLimit() { result = 0 } +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 + ) } -module BadFlow = DataFlow::GlobalWithState; - -/** - * The `GoodConfig` configuration tracks flow from an allocation to a - * compatible cast. - * - * We use `GoodConfig` to reduce the number of FPs from infeasible paths. - * For example, consider the following example: - * ```cpp - * struct Animal { virtual ~Animal(); }; - * - * struct Cat : public Animal { - * Cat(); - * ~Cat(); - * }; - * - * struct Dog : public Animal { - * Dog(); - * ~Dog(); - * }; - * - * void test9(bool b) { - * Animal* a; - * if(b) { - * a = new Cat; - * } else { - * a = new Dog; - * } - * if(b) { - * Cat* d = static_cast(a); - * } - * } - * ``` - * Here, `BadConfig` finds a flow from `a = new Dog` to `static_cast(a)`. - * However, that path is never realized in an actual execution path. So in - * order to remove this result we exclude results where there exists an - * allocation of a type that's compatible with `static_cast(a)`. - * - * We use `FlowState` to track the type of the source, and compare the - * flow state to the target of the cast in the `isSink` definition. - */ -module GoodConfig implements DataFlow::StateConfigSig { - class FlowState = BadConfig::FlowState; - - predicate isSource(DataFlow::Node source, FlowState state) { BadConfig::isSource(source, state) } - - predicate isBarrier(DataFlow::Node node) { BadConfig::isBarrier(node) } - - predicate isSink(DataFlow::Node sink, FlowState state) { - isSinkImpl(sink, state, _, true) and - BadFlow::flowTo(sink) - } - - int fieldFlowBranchLimit() { result = 0 } -} - -module GoodFlow = DataFlow::GlobalWithState; - from - BadFlow::PathNode source, BadFlow::PathNode sink, Type sourceType, Type sinkType, + Flow::PathNode source, Flow::PathNode sink, Type badSourceType, Type sinkType, DataFlow::Node sinkNode where - BadFlow::flowPath(source, sink) and + 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 GoodFlow::flowTo(sinkNode) and - isSourceImpl(source.getNode(), sourceType) and - isSinkImpl(sinkNode, _, sinkType, false) -select sinkNode, source, sink, "Conversion from $@ to $@ is invalid.", sourceType, - sourceType.toString(), sinkType, sinkType.toString() + 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/test/query-tests/Security/CWE/CWE-843/TypeConfusion.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-843/TypeConfusion.expected index 45355a86a48..4cd377e9f5e 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-843/TypeConfusion.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-843/TypeConfusion.expected @@ -1,34 +1,62 @@ 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 | From 61dbe2685867984fb009bf89c211ecbea5b7c4bc Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 11 Mar 2024 10:31:51 -0400 Subject: [PATCH 271/430] Add sinks for `android.os.ParcelFileDescriptor` --- java/ql/lib/ext/android.os.model.yml | 5 +++++ 1 file changed, 5 insertions(+) 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 From 76aeee2820fc625d1ba45ddf70f03ac548986338 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 11 Mar 2024 10:34:15 -0400 Subject: [PATCH 272/430] Change note --- .../2024-03-11-add-parcelfiledescriptor-open-model.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 java/ql/lib/change-notes/2024-03-11-add-parcelfiledescriptor-open-model.md 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. From ff2d78d2c8bc15bd36bf24ae204b444ba9feb30d Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 11 Mar 2024 15:53:40 +0100 Subject: [PATCH 273/430] Update go/ql/src/Security/CWE-770/UncontrolledAllocationSize.ql --- go/ql/src/Security/CWE-770/UncontrolledAllocationSize.ql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/go/ql/src/Security/CWE-770/UncontrolledAllocationSize.ql b/go/ql/src/Security/CWE-770/UncontrolledAllocationSize.ql index c6d2091cc53..eabfa3333ec 100644 --- a/go/ql/src/Security/CWE-770/UncontrolledAllocationSize.ql +++ b/go/ql/src/Security/CWE-770/UncontrolledAllocationSize.ql @@ -2,8 +2,8 @@ * @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 warning - * @security-severity 6.0 + * @problem.severity error + * @security-severity 7.5 * @precision high * @id go/uncontrolled-allocation-size * @tags security From d73f43477fec68116e8401ae54c1b1648a4562e3 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 11 Mar 2024 16:32:19 +0100 Subject: [PATCH 274/430] update ts to released version 54 --- javascript/extractor/lib/typescript/package-lock.json | 10 +++++----- javascript/extractor/lib/typescript/package.json | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/javascript/extractor/lib/typescript/package-lock.json b/javascript/extractor/lib/typescript/package-lock.json index af309c3b451..604db5f3e37 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.4.1-rc" + "typescript": "5.4" }, "devDependencies": { "@types/node": "18.15.3" @@ -20,9 +20,9 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "5.4.1-rc", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.1-rc.tgz", - "integrity": "sha512-gInURzaO0bbfzfQAc3mfcHxh8qev+No4QOFUZHajo9vBgOLaljELJ3wuzyoGo/zHIzMSezdhtrsRdqL6E9SvNA==", + "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" @@ -32,4 +32,4 @@ } } } -} \ No newline at end of file +} diff --git a/javascript/extractor/lib/typescript/package.json b/javascript/extractor/lib/typescript/package.json index 6a315fed292..8f6a1549a60 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.4.1-rc" + "typescript": "5.4" }, "scripts": { "build": "tsc --project tsconfig.json", @@ -14,4 +14,4 @@ "devDependencies": { "@types/node": "18.15.3" } -} \ No newline at end of file +} From bc745dfd5eea4e87a3d29bc745bea7cb815ba6b2 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 11 Mar 2024 13:55:34 -0400 Subject: [PATCH 275/430] Windows registry sources --- csharp/ql/lib/ext/Microsoft.Win32.model.yml | 9 +++ .../security/dataflow/flowsources/Local.qll | 13 +++++ .../local/registry/Registry.expected | 8 +++ .../local/registry/Registry.ext.yml | 7 +++ .../flowsources/local/registry/Registry.ql | 6 ++ .../flowsources/local/registry/UseRegistry.cs | 55 +++++++++++++++++++ .../flowsources/local/registry/options | 3 + shared/mad/codeql/mad/ModelValidation.qll | 2 +- .../ext/threat-model-grouping.model.yml | 1 + 9 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 csharp/ql/lib/ext/Microsoft.Win32.model.yml create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/local/registry/Registry.expected create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/local/registry/Registry.ext.yml create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/local/registry/Registry.ql create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/local/registry/UseRegistry.cs create mode 100644 csharp/ql/test/library-tests/dataflow/flowsources/local/registry/options 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/semmle/code/csharp/security/dataflow/flowsources/Local.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/flowsources/Local.qll index 9f3f398e5b1..7ad656e11d3 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 @@ -55,3 +55,16 @@ abstract class CommandLineArgumentSource extends LocalFlowSource { 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/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/shared/mad/codeql/mad/ModelValidation.qll b/shared/mad/codeql/mad/ModelValidation.qll index 2f990af4e0f..bb3b8c174b9 100644 --- a/shared/mad/codeql/mad/ModelValidation.qll +++ b/shared/mad/codeql/mad/ModelValidation.qll @@ -120,7 +120,7 @@ module KindValidation { // Java "android-external-storage-dir", "contentprovider", // C# - "file-write", + "file-write", "windows-registry", // JavaScript "database-access-result" ] 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"] From 32e532ff3c6ed015996f760084b87023d19d4402 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 11 Mar 2024 18:42:42 +0000 Subject: [PATCH 276/430] C++: Some cleanup to avoid conflating the case of a function returning something as a return value, and a function updating one of its arguments. --- .../Likely Bugs/Format/NonConstantFormat.ql | 43 ++++++++++++------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql index 0d1cc7bcf39..72ce3590677 100644 --- a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql +++ b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql @@ -37,6 +37,11 @@ class UncalledFunction extends Function { } } +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: @@ -81,24 +86,30 @@ predicate isNonConst(DataFlow::Node node) { // i.e., functions that with unknown bodies and are not known to define the output through its input // 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() + ( + // Case 1: It's a known dataflow or taintflow function with flow to the return value + 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. + call.getUnconvertedResultExpression() = node.asIndirectExpr() and + func = call.getStaticCallTarget() and + not exists(FunctionOutput output | + dataFlowOrTaintFlowFunction(func, output) and + output.isReturnValueDeref() and + node = callOutput(call, output) + ) ) or - call.getUnconvertedResultExpression() = node.asIndirectExpr() - | - func = call.getStaticCallTarget() 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) - | - node = callOutput(call, output) + // Case 1: It's a known dataflow or taintflow function with flow to an output parameter + exists(Function func, int i, CallInstruction call | + call.getPositionalArgumentOperand(i).getDef().getUnconvertedResultExpression() = + node.asDefiningArgument() and + func = call.getStaticCallTarget() and + not exists(FunctionOutput output | + dataFlowOrTaintFlowFunction(func, output) and + output.isParameterDeref(i) and + node = callOutput(call, output) + ) ) ) and not exists(Call c | From f97b6e2848a1af385534d341e56c770c8453cfde Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 11 Mar 2024 18:44:34 +0000 Subject: [PATCH 277/430] C++: Stop conflating pointers and indirections in the query. --- .../Likely Bugs/Format/NonConstantFormat.ql | 10 +++--- .../NonConstantFormat.expected | 33 +++++-------------- .../Format/NonConstantFormat/test.cpp | 4 +-- .../semmle/consts/NonConstantFormat.expected | 8 ----- 4 files changed, 17 insertions(+), 38 deletions(-) diff --git a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql index 72ce3590677..b02986e0b68 100644 --- a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql +++ b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql @@ -74,7 +74,9 @@ 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() and + // 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)) @@ -116,7 +118,7 @@ predicate isNonConst(DataFlow::Node node) { c.getTarget().hasDefinition() and if node instanceof DataFlow::DefinitionByReferenceNode then c.getAnArgument() = node.asDefiningArgument() - else c = [node.asExpr(), node.asIndirectExpr()] + else c = node.asIndirectExpr() ) } @@ -125,7 +127,7 @@ 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())) } @@ -136,7 +138,7 @@ module NonConstFlowConfig implements DataFlow::ConfigSig { 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()) } } 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 2539c728d87..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 @@ -8,15 +8,10 @@ edges | 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:27:39:27:39 | n | test.cpp:27:13:27:24 | **make_message | provenance | | -| test.cpp:46:14:46:17 | argc | test.cpp:51:23:51:30 | ... - ... | provenance | | | test.cpp:46:27:46:30 | **argv | test.cpp:130:20:130:26 | *access to array | provenance | | -| test.cpp:51:23:51:30 | ... - ... | test.cpp:27:39:27:39 | n | provenance | | -| test.cpp:51:23:51:30 | ... - ... | test.cpp:51:10:51:21 | *call to make_message | provenance | | -| test.cpp:155:27:155:30 | data | test.cpp:157:12:157:15 | data | 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: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 | | @@ -42,19 +37,12 @@ nodes | 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:27:13:27:24 | **make_message | semmle.label | **make_message | -| test.cpp:27:39:27:39 | n | semmle.label | n | -| test.cpp:46:14:46:17 | argc | semmle.label | argc | | test.cpp:46:27:46:30 | **argv | semmle.label | **argv | -| test.cpp:51:10:51:21 | *call to make_message | semmle.label | *call to make_message | -| test.cpp:51:23:51:30 | ... - ... | semmle.label | ... - ... | | test.cpp:130:20:130:26 | *access to array | semmle.label | *access to array | -| test.cpp:155:27:155:30 | data | semmle.label | data | -| test.cpp:157:12:157:15 | data | semmle.label | data | -| test.cpp:167:31:167:34 | data | semmle.label | data | +| 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: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 | *... + ... | @@ -74,7 +62,6 @@ nodes | 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 -| test.cpp:51:23:51:30 | ... - ... | test.cpp:27:39:27:39 | n | test.cpp:27:13:27:24 | **make_message | test.cpp:51:10:51:21 | *call to make_message | #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 | @@ -82,12 +69,10 @@ subpaths | 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:51:10:51:21 | *call to make_message | test.cpp:46:14:46:17 | argc | test.cpp:51:10:51:21 | *call to make_message | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | test.cpp:51:3:51:8 | call to printf | printf | | 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:157:12:157:15 | data | test.cpp:155:27:155:30 | data | test.cpp:157:12:157:15 | data | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | test.cpp:157:5:157:10 | call to printf | printf | -| 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: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 | 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/Security/CWE/CWE-134/semmle/consts/NonConstantFormat.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/consts/NonConstantFormat.expected index 91f3d367db6..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 @@ -23,9 +23,7 @@ edges | 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: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 | | -| 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 | @@ -47,13 +45,9 @@ nodes | 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:139:13:139:16 | readString output argument | semmle.label | readString output argument | | consts.cpp:140:9:140:11 | *v11 | semmle.label | *v11 | -| 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:144:16:144:18 | readStringRef output argument | semmle.label | readStringRef output argument | | consts.cpp:145:9:145:11 | *v12 | semmle.label | *v12 | -| 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 | @@ -78,6 +72,4 @@ subpaths | 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: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 | -| 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 | From 2345907a52b1f690f2647394bf6d12ef0123dbfe Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 11 Mar 2024 18:49:03 +0000 Subject: [PATCH 278/430] C++: Reintroduce the 'cannotContainString' optimization that was removed in #15516. --- .../Likely Bugs/Format/NonConstantFormat.ql | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql index b02986e0b68..ee3139f3682 100644 --- a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql +++ b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql @@ -37,6 +37,25 @@ class UncalledFunction extends Function { } } +/** + * 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 + | + unspecified instanceof ArithmeticType or + unspecified instanceof BuiltInType + ) +} + predicate dataFlowOrTaintFlowFunction(Function func, FunctionOutput output) { func.(DataFlowFunction).hasDataFlow(_, output) or func.(TaintFunction).hasTaintFlow(_, output) @@ -132,13 +151,24 @@ predicate isSinkImpl(DataFlow::Node sink, Expr formatString) { } 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.asIndirectExpr()) + or + exists(Type t | + t = node.getType() and + cannotContainString(t) + ) } } From 9854ed4b89f4f0194085504f776a87eb5d3ce57e Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 11 Mar 2024 18:54:53 +0000 Subject: [PATCH 279/430] C++: Delete comment. --- cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql | 2 -- 1 file changed, 2 deletions(-) diff --git a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql index ee3139f3682..461df854c75 100644 --- a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql +++ b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql @@ -110,8 +110,6 @@ predicate isNonConst(DataFlow::Node node) { ( // Case 1: It's a known dataflow or taintflow function with flow to the return value 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. call.getUnconvertedResultExpression() = node.asIndirectExpr() and func = call.getStaticCallTarget() and not exists(FunctionOutput output | From e82e3180f0ea444915438b3195e2402c60284bf9 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 8 Mar 2024 08:47:46 +0100 Subject: [PATCH 280/430] Data flow: Replace `hasLocationInfo` with `getLocation` --- shared/dataflow/codeql/dataflow/DataFlow.qll | 65 ++++++++----------- .../codeql/dataflow/TaintTracking.qll | 12 ++-- .../codeql/dataflow/internal/DataFlowImpl.qll | 61 ++++++----------- .../dataflow/internal/DataFlowImplCommon.qll | 45 +++---------- .../internal/DataFlowImplConsistency.qll | 14 ++-- .../dataflow/internal/FlowSummaryImpl.qll | 13 ++-- .../codeql/dataflow/test/InlineFlowTest.qll | 14 ++-- 7 files changed, 86 insertions(+), 138 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/DataFlow.qll b/shared/dataflow/codeql/dataflow/DataFlow.qll index 6a18c166613..ebb9f7c8c25 100644 --- a/shared/dataflow/codeql/dataflow/DataFlow.qll +++ b/shared/dataflow/codeql/dataflow/DataFlow.qll @@ -4,8 +4,10 @@ * 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. */ @@ -13,16 +15,8 @@ signature module InputSig { /** 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; @@ -321,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. */ @@ -531,10 +525,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` @@ -613,19 +607,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 { @@ -668,6 +654,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 @@ -675,17 +670,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) } } @@ -750,7 +738,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) @@ -758,6 +746,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/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index d555b281710..1db7a258181 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 /** @@ -192,11 +193,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 { @@ -3305,11 +3302,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() } } /** @@ -3727,18 +3720,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. */ @@ -3774,6 +3757,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 @@ -3781,10 +3767,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`. */ @@ -3945,12 +3932,6 @@ module MakeImpl { override predicate isSource() { none() } 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 - } } private class PathNodeSinkGroup extends PathNodeImpl, TPathNodeSinkGroup { @@ -3967,12 +3948,6 @@ module MakeImpl { override predicate isSource() { none() } 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 - } } private predicate pathNode( @@ -4801,6 +4776,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 @@ -4808,10 +4786,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`. */ diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll index 679be2cb5c6..1caf76de7bc 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 @@ -1642,19 +1643,15 @@ module MakeImplCommon { } } + 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( @@ -1800,17 +1797,11 @@ 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. @@ -1821,17 +1812,11 @@ 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) @@ -1842,17 +1827,11 @@ 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) } } @@ -1861,16 +1840,10 @@ 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) - } } /** 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) ) } From 4291290277e7e1618e4902fd17ababe22c146cd6 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 8 Mar 2024 09:04:29 +0100 Subject: [PATCH 281/430] Ruby: Implement new data flow interface --- ruby/ql/consistency-queries/DataFlowConsistency.ql | 4 ++-- ruby/ql/lib/codeql/ruby/DataFlow.qll | 2 +- ruby/ql/lib/codeql/ruby/TaintTracking.qll | 3 ++- ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll | 3 ++- .../lib/codeql/ruby/dataflow/internal/DataFlowImplCommon.qll | 3 ++- .../codeql/ruby/dataflow/internal/DataFlowImplSpecific.qll | 3 ++- ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll | 2 +- .../ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll | 4 ++-- .../ruby/dataflow/internal/TaintTrackingImplSpecific.qll | 3 ++- ruby/ql/test/TestUtilities/InlineFlowTest.qll | 5 +++-- 10 files changed, 19 insertions(+), 13 deletions(-) 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/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/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/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/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/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/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 From 257686eb9a3554d8d602c98be2baaaa67fe8effc Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 8 Mar 2024 09:14:09 +0100 Subject: [PATCH 282/430] C#: Implement new data flow interface --- csharp/ql/consistency-queries/DataFlowConsistency.ql | 4 ++-- csharp/ql/lib/semmle/code/csharp/dataflow/DataFlow.qll | 2 +- .../ql/lib/semmle/code/csharp/dataflow/TaintTracking.qll | 2 +- .../semmle/code/csharp/dataflow/internal/DataFlowImpl.qll | 3 ++- .../code/csharp/dataflow/internal/DataFlowImplCommon.qll | 3 ++- .../csharp/dataflow/internal/DataFlowImplSpecific.qll | 3 ++- .../code/csharp/dataflow/internal/DataFlowPublic.qll | 2 +- .../code/csharp/dataflow/internal/FlowSummaryImpl.qll | 8 ++++---- .../dataflow/internal/TaintTrackingImplSpecific.qll | 3 ++- csharp/ql/test/TestUtilities/InlineFlowTest.qll | 4 ++-- 10 files changed, 19 insertions(+), 15 deletions(-) diff --git a/csharp/ql/consistency-queries/DataFlowConsistency.ql b/csharp/ql/consistency-queries/DataFlowConsistency.ql index 1ee888329c7..2f34368b669 100644 --- a/csharp/ql/consistency-queries/DataFlowConsistency.ql +++ b/csharp/ql/consistency-queries/DataFlowConsistency.ql @@ -4,7 +4,7 @@ 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() } @@ -99,4 +99,4 @@ private module Input implements InputSig { } } -import MakeConsistency +import MakeConsistency 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/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/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/DataFlowPublic.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll index bf30fe5112d..20e3dd8eb7d 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll @@ -58,7 +58,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/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/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 From 1c57e996860357f0bc73987256ff6de496139b02 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 8 Mar 2024 09:48:37 +0100 Subject: [PATCH 283/430] C++: Implement new data flow interface --- cpp/ql/lib/semmle/code/cpp/dataflow/DataFlow.qll | 2 +- cpp/ql/lib/semmle/code/cpp/dataflow/TaintTracking.qll | 2 +- cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll | 3 ++- .../semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll | 3 ++- .../code/cpp/dataflow/internal/DataFlowImplConsistency.qll | 4 ++-- .../code/cpp/dataflow/internal/DataFlowImplSpecific.qll | 3 ++- cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowUtil.qll | 2 +- .../code/cpp/dataflow/internal/TaintTrackingImplSpecific.qll | 3 ++- cpp/ql/lib/semmle/code/cpp/dataflow/new/DataFlow.qll | 2 +- cpp/ql/lib/semmle/code/cpp/dataflow/new/TaintTracking.qll | 3 ++- cpp/ql/lib/semmle/code/cpp/ir/dataflow/DataFlow.qll | 2 +- cpp/ql/lib/semmle/code/cpp/ir/dataflow/TaintTracking.qll | 2 +- .../lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll | 3 ++- .../code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll | 3 ++- .../code/cpp/ir/dataflow/internal/DataFlowImplConsistency.qll | 4 ++-- .../code/cpp/ir/dataflow/internal/DataFlowImplSpecific.qll | 3 ++- .../lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll | 2 +- .../cpp/ir/dataflow/internal/TaintTrackingImplSpecific.qll | 3 ++- 18 files changed, 29 insertions(+), 20 deletions(-) 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/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/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/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/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 b411790596e..ab52e91429f 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 @@ -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) 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 } From 8d767862dc7138ad0d5b38569f197752de1b5777 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 8 Mar 2024 10:08:03 +0100 Subject: [PATCH 284/430] Swift: Implement new data flow interface --- swift/ql/lib/codeql/swift/dataflow/DataFlow.qll | 3 ++- swift/ql/lib/codeql/swift/dataflow/TaintTracking.qll | 3 ++- .../lib/codeql/swift/dataflow/internal/DataFlowImpl.qll | 3 ++- .../codeql/swift/dataflow/internal/DataFlowImplCommon.qll | 3 ++- .../swift/dataflow/internal/DataFlowImplConsistency.qll | 4 ++-- .../swift/dataflow/internal/DataFlowImplSpecific.qll | 2 +- .../lib/codeql/swift/dataflow/internal/DataFlowPublic.qll | 2 +- .../codeql/swift/dataflow/internal/FlowSummaryImpl.qll | 8 ++++---- .../swift/dataflow/internal/TaintTrackingImplSpecific.qll | 3 ++- 9 files changed, 18 insertions(+), 13 deletions(-) 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/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 } From 7745c2c2b76cd207a59907a106c32ca55e0b7a7f Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Mon, 11 Mar 2024 17:00:12 -0400 Subject: [PATCH 285/430] Change note --- csharp/ql/lib/change-notes/2024-03-11-registry-sources.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/lib/change-notes/2024-03-11-registry-sources.md 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. From 1633673cc28fe625b91ae25118292d011d82c53a Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 12 Mar 2024 09:22:38 +0100 Subject: [PATCH 286/430] C#: Deduplicate not yet restored package names --- .../DependencyManager.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index 724ae8f69fd..143ed49f440 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -924,6 +924,17 @@ namespace Semmle.Extraction.CSharp.DependencyFetching return; } + var multipleVersions = notYetDownloadedPackages + .GroupBy(p => p.Name) + .Where(g => g.Count() > 1) + .Select(g => g.Key); + + 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(); From bf27f203d5d62776e369db0becfd51f936ccd7ca Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 4 Mar 2024 13:58:31 +0100 Subject: [PATCH 287/430] C#: Remove CIL extractor projects. --- .../ExtractorOptions.cs | 250 --------- .../InvalidAssemblyException.cs | 7 - .../Semmle.Extraction.CIL.Driver/Program.cs | 64 --- .../Properties/AssemblyInfo.cs | 35 -- .../Semmle.Extraction.CIL.Driver.csproj | 23 - .../Semmle.Extraction.CIL/Analyser.cs | 52 -- .../Semmle.Extraction.CIL/CachedFunction.cs | 68 --- .../Context.Factories.cs | 253 --------- .../Semmle.Extraction.CIL/Context.cs | 115 ---- .../Semmle.Extraction.CIL/EmptyContext.cs | 22 - .../Entities/ArrayType.cs | 74 --- .../Entities/Assembly.cs | 101 ---- .../Entities/Attribute.cs | 90 ---- .../Entities/Base/IExtractedEntity.cs | 16 - .../Entities/Base/IExtractionProduct.cs | 24 - .../Entities/Base/IGenericContext.cs | 24 - .../Entities/Base/LabelledEntity.cs | 36 -- .../Entities/Base/Tuple.cs | 22 - .../Entities/Base/UnlabelledEntity.cs | 29 - .../Entities/ByRefType.cs | 42 -- .../Entities/CilTypeKind.cs | 14 - .../Entities/ConstructedType.cs | 118 ---- .../Entities/CustomAttributeDecoder.cs | 63 --- .../Entities/DefinitionField.cs | 66 --- .../Entities/DefinitionMethod.cs | 299 ----------- .../Entities/ErrorType.cs | 31 -- .../Semmle.Extraction.CIL/Entities/Event.cs | 73 --- .../Entities/ExceptionRegion.cs | 56 -- .../Semmle.Extraction.CIL/Entities/Field.cs | 51 -- .../Semmle.Extraction.CIL/Entities/File.cs | 43 -- .../Semmle.Extraction.CIL/Entities/Folder.cs | 41 -- .../Entities/FunctionPointerType.cs | 114 ---- .../Entities/GenericsHelper.cs | 59 -- .../Entities/IFileOrFolder.cs | 6 - .../Entities/ILocation.cs | 6 - .../Semmle.Extraction.CIL/Entities/IMember.cs | 10 - .../Entities/IParameterizable.cs | 7 - .../Entities/ITypeSignature.cs | 7 - .../Entities/Instruction.cs | 508 ------------------ .../Entities/LocalVariable.cs | 35 -- .../Entities/MemberReferenceField.cs | 42 -- .../Entities/MemberReferenceMethod.cs | 95 ---- .../Semmle.Extraction.CIL/Entities/Method.cs | 131 ----- .../Entities/MethodImplementation.cs | 26 - .../Entities/MethodSpecificationMethod.cs | 104 ---- .../Entities/MethodTypeParameter.cs | 52 -- .../Entities/ModifiedType.cs | 49 -- .../Entities/NamedTypeIdWriter.cs | 61 --- .../Entities/Namespace.cs | 83 --- ...dataHandleType.FullyQualifiedNameParser.cs | 162 ------ .../Entities/NoMetadataHandleType.cs | 161 ------ .../Entities/Parameter.cs | 47 -- .../Entities/PdbSourceFile.cs | 32 -- .../Entities/PointerType.cs | 64 --- .../Entities/PrimitiveType.cs | 44 -- .../Entities/Property.cs | 91 ---- .../Entities/SignatureDecoder.cs | 289 ---------- .../Entities/SourceLocation.cs | 47 -- .../Semmle.Extraction.CIL/Entities/Type.cs | 209 ------- .../Entities/TypeAnnotation.cs | 11 - .../Entities/TypeContainer.cs | 17 - .../Entities/TypeDefinitionType.cs | 263 --------- .../Entities/TypeParameter.cs | 57 -- .../Entities/TypeReferenceType.cs | 104 ---- .../Entities/TypeSignatureDecoder.cs | 60 --- .../Entities/TypeTypeParameter.cs | 48 -- .../ICustomModifierReceiver.cs | 6 - csharp/extractor/Semmle.Extraction.CIL/Id.cs | 33 -- .../Semmle.Extraction.CIL/PDB/IPdb.cs | 26 - .../Semmle.Extraction.CIL/PDB/ISourceFile.cs | 20 - .../Semmle.Extraction.CIL/PDB/Location.cs | 63 --- .../Semmle.Extraction.CIL/PDB/MdProvider.cs | 37 -- .../PDB/MetadataPdbReader.cs | 99 ---- .../Semmle.Extraction.CIL/PDB/Method.cs | 17 - .../PDB/NativePdbReader.cs | 116 ---- .../Semmle.Extraction.CIL/PDB/PdbReader.cs | 19 - .../PDB/SequencePoint.cs | 30 -- .../Properties/AssemblyInfo.cs | 35 -- .../Semmle.Extraction.CIL.csproj | 34 -- .../extractor/Semmle.Extraction.CIL/Tuples.cs | 227 -------- 80 files changed, 6065 deletions(-) delete mode 100644 csharp/extractor/Semmle.Extraction.CIL.Driver/ExtractorOptions.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL.Driver/InvalidAssemblyException.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL.Driver/Program.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL.Driver/Properties/AssemblyInfo.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL.Driver/Semmle.Extraction.CIL.Driver.csproj delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Analyser.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/CachedFunction.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Context.Factories.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Context.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/EmptyContext.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/ArrayType.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/Assembly.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/Attribute.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/Base/IExtractedEntity.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/Base/IExtractionProduct.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/Base/IGenericContext.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/Base/LabelledEntity.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/Base/Tuple.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/Base/UnlabelledEntity.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/ByRefType.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/CilTypeKind.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/ConstructedType.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/CustomAttributeDecoder.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/DefinitionField.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/DefinitionMethod.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/ErrorType.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/Event.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/ExceptionRegion.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/Field.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/File.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/Folder.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/FunctionPointerType.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/GenericsHelper.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/IFileOrFolder.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/ILocation.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/IMember.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/IParameterizable.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/ITypeSignature.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/Instruction.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/LocalVariable.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/MemberReferenceField.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/MemberReferenceMethod.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/Method.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/MethodImplementation.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/MethodSpecificationMethod.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/MethodTypeParameter.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/ModifiedType.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/NamedTypeIdWriter.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/Namespace.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/NoMetadataHandleType.FullyQualifiedNameParser.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/NoMetadataHandleType.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/Parameter.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/PdbSourceFile.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/PointerType.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/PrimitiveType.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/Property.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/SignatureDecoder.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/SourceLocation.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/Type.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/TypeAnnotation.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/TypeContainer.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/TypeDefinitionType.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/TypeParameter.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/TypeReferenceType.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/TypeSignatureDecoder.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Entities/TypeTypeParameter.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/ICustomModifierReceiver.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Id.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/PDB/IPdb.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/PDB/ISourceFile.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/PDB/Location.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/PDB/MdProvider.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/PDB/MetadataPdbReader.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/PDB/Method.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/PDB/NativePdbReader.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/PDB/PdbReader.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/PDB/SequencePoint.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Properties/AssemblyInfo.cs delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Semmle.Extraction.CIL.csproj delete mode 100644 csharp/extractor/Semmle.Extraction.CIL/Tuples.cs 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 2009fe1c94f..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.LogInfo(" 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 50288aadd94..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.LogError(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); - } -} From af06202241d9ddd6752f0f15a129f057399ec582 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 4 Mar 2024 14:16:58 +0100 Subject: [PATCH 288/430] C#: Cleanup implementation. --- csharp/.editorconfig | 5 ++-- csharp/CSharp.sln | 4 --- csharp/codeql-extractor.yml | 7 ----- .../Options.cs | 1 - .../Extractor/Analyser.cs | 14 ---------- .../Semmle.Extraction.CSharp.csproj | 1 - .../Semmle.Extraction.Tests/Options.cs | 28 ------------------- csharp/extractor/Semmle.Extraction/Options.cs | 18 ------------ 8 files changed, 2 insertions(+), 76 deletions(-) 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 0ba39b813bb..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}" diff --git a/csharp/codeql-extractor.yml b/csharp/codeql-extractor.yml index 13019e7b0a3..6c3285c412b 100644 --- a/csharp/codeql-extractor.yml +++ b/csharp/codeql-extractor.yml @@ -47,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/extractor/Semmle.Extraction.CSharp.Standalone/Options.cs b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Options.cs index 2efe7704775..39c363a7753 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Options.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Options.cs @@ -58,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/Extractor/Analyser.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs index 59359b2715a..57ce2f7827c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs @@ -66,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)); } } @@ -177,17 +174,6 @@ namespace Semmle.Extraction.CSharp } } - private void DoExtractCIL(PortableExecutableReference r) - { - var currentTaskId = IncrementTaskCount(); - ReportProgressTaskStarted(currentTaskId, r.FilePath); - var stopwatch = new Stopwatch(); - stopwatch.Start(); - CIL.Analyser.ExtractCIL(r.FilePath!, Logger, options, out var trapFile, out var extracted); - stopwatch.Stop(); - ReportProgressTaskDone(currentTaskId, r.FilePath, trapFile, stopwatch.Elapsed, extracted ? AnalysisAction.Extracted : AnalysisAction.UpToDate); - } - private void DoExtractTree(SyntaxTree tree) { try 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/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": From 2e5155d1f8dbc9fd28fef0d411e7d9d68f54e163 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 4 Mar 2024 16:22:39 +0100 Subject: [PATCH 289/430] C#: Remove all CIL related tests. --- .../test/library-tests/cil/attributes/Test.cs | 5 - .../cil/attributes/attribute.expected | 14750 ---------------- .../library-tests/cil/attributes/attribute.ql | 47 - .../test/library-tests/cil/attributes/options | 1 - .../cil/consistency/Handles.expected | 14 - .../library-tests/cil/consistency/Handles.ql | 68 - .../library-tests/cil/consistency/Program.cs | 8 - .../cil/consistency/consistency.expected | 17 - .../cil/consistency/consistency.ql | 6 - .../library-tests/cil/consistency/options | 1 - .../test/library-tests/cil/enums/Program.cs | 8 - .../library-tests/cil/enums/enums.expected | 290 - .../ql/test/library-tests/cil/enums/enums.ql | 19 - .../ql/test/library-tests/cil/enums/options | 1 - .../cil/functionPointers/Class1.cs_ | 52 - .../cil/functionPointers/Test.cs | 5 - .../cil/functionPointers/fnptr.dll | Bin 5632 -> 0 bytes .../functionPointers.expected | 73 - .../cil/functionPointers/functionPointers.ql | 42 - .../cil/functionPointers/options | 1 - .../cil/init-only-prop/Program.cs | 8 - .../library-tests/cil/init-only-prop/Test.cs_ | 13 - .../cil/init-only-prop/cil-init-prop.dll | Bin 4608 -> 0 bytes .../init-only-prop/customModifiers.expected | 104 - .../cil/init-only-prop/customModifiers.ql | 17 - .../library-tests/cil/init-only-prop/options | 1 - .../cil/init-only-prop/setters.expected | 2 - .../cil/init-only-prop/setters.ql | 11 - .../library-tests/cil/pdbs/EmbeddedPdb.dll | Bin 4608 -> 0 bytes .../test/library-tests/cil/pdbs/FullPdb.dll | Bin 4096 -> 0 bytes .../test/library-tests/cil/pdbs/FullPdb.pdb | Bin 11776 -> 0 bytes .../cil/pdbs/InstructionLocations.expected | 41 - .../cil/pdbs/InstructionLocations.ql | 17 - .../cil/pdbs/MethodLocations.expected | 4 - .../library-tests/cil/pdbs/MethodLocations.ql | 19 - .../test/library-tests/cil/pdbs/PdbOnly.dll | Bin 4096 -> 0 bytes .../test/library-tests/cil/pdbs/PdbOnly.pdb | Bin 11776 -> 0 bytes csharp/ql/test/library-tests/cil/pdbs/Pdbs.cs | 1 - .../library-tests/cil/pdbs/PortablePdb.dll | Bin 4096 -> 0 bytes .../library-tests/cil/pdbs/PortablePdb.pdb | Bin 524 -> 0 bytes .../library-tests/cil/pdbs/Stubs.expected | 2 - .../ql/test/library-tests/cil/pdbs/Stubs.ql | 3 - csharp/ql/test/library-tests/cil/pdbs/options | 1 - .../regressions/ConstructedMethods.expected | 2 - .../cil/regressions/ConstructedMethods.ql | 9 - .../library-tests/cil/regressions/Methods.cs | 17 - .../library-tests/cil/regressions/Methods.dll | Bin 4096 -> 0 bytes .../library-tests/cil/regressions/options | 1 - .../cil/typeAnnotations/Program.cs | 8 - .../library-tests/cil/typeAnnotations/options | 1 - .../typeAnnotations/typeAnnotations.expected | 3942 ----- .../cil/typeAnnotations/typeAnnotations.ql | 94 - .../library-tests/controlflow/guards/options | 1 - .../library-tests/csharp11/PrintAst.expected | 9 - .../library-tests/csharp11/cil/Assembly.cs_ | 16 - .../library-tests/csharp11/cil/Struct.cs_ | 14 - .../library-tests/csharp11/cil/assembly.dll | Bin 5120 -> 0 bytes .../test/library-tests/csharp11/cil/class1.cs | 7 - .../csharp11/cil/genericAttribute.expected | 2 - .../csharp11/cil/genericAttribute.ql | 14 - .../test/library-tests/csharp11/cil/options | 1 - .../csharp11/cil/refField.expected | 6 - .../library-tests/csharp11/cil/refField.ql | 5 - .../csharp11/cil/structassembly.dll | Bin 5120 -> 0 bytes 64 files changed, 19801 deletions(-) delete mode 100644 csharp/ql/test/library-tests/cil/attributes/Test.cs delete mode 100644 csharp/ql/test/library-tests/cil/attributes/attribute.expected delete mode 100644 csharp/ql/test/library-tests/cil/attributes/attribute.ql delete mode 100644 csharp/ql/test/library-tests/cil/attributes/options delete mode 100644 csharp/ql/test/library-tests/cil/consistency/Handles.expected delete mode 100644 csharp/ql/test/library-tests/cil/consistency/Handles.ql delete mode 100644 csharp/ql/test/library-tests/cil/consistency/Program.cs delete mode 100644 csharp/ql/test/library-tests/cil/consistency/consistency.expected delete mode 100644 csharp/ql/test/library-tests/cil/consistency/consistency.ql delete mode 100644 csharp/ql/test/library-tests/cil/consistency/options delete mode 100644 csharp/ql/test/library-tests/cil/enums/Program.cs delete mode 100644 csharp/ql/test/library-tests/cil/enums/enums.expected delete mode 100644 csharp/ql/test/library-tests/cil/enums/enums.ql delete mode 100644 csharp/ql/test/library-tests/cil/enums/options delete mode 100644 csharp/ql/test/library-tests/cil/functionPointers/Class1.cs_ delete mode 100644 csharp/ql/test/library-tests/cil/functionPointers/Test.cs delete mode 100644 csharp/ql/test/library-tests/cil/functionPointers/fnptr.dll delete mode 100644 csharp/ql/test/library-tests/cil/functionPointers/functionPointers.expected delete mode 100644 csharp/ql/test/library-tests/cil/functionPointers/functionPointers.ql delete mode 100644 csharp/ql/test/library-tests/cil/functionPointers/options delete mode 100644 csharp/ql/test/library-tests/cil/init-only-prop/Program.cs delete mode 100644 csharp/ql/test/library-tests/cil/init-only-prop/Test.cs_ delete mode 100644 csharp/ql/test/library-tests/cil/init-only-prop/cil-init-prop.dll delete mode 100644 csharp/ql/test/library-tests/cil/init-only-prop/customModifiers.expected delete mode 100644 csharp/ql/test/library-tests/cil/init-only-prop/customModifiers.ql delete mode 100644 csharp/ql/test/library-tests/cil/init-only-prop/options delete mode 100644 csharp/ql/test/library-tests/cil/init-only-prop/setters.expected delete mode 100644 csharp/ql/test/library-tests/cil/init-only-prop/setters.ql delete mode 100644 csharp/ql/test/library-tests/cil/pdbs/EmbeddedPdb.dll delete mode 100644 csharp/ql/test/library-tests/cil/pdbs/FullPdb.dll delete mode 100644 csharp/ql/test/library-tests/cil/pdbs/FullPdb.pdb delete mode 100644 csharp/ql/test/library-tests/cil/pdbs/InstructionLocations.expected delete mode 100644 csharp/ql/test/library-tests/cil/pdbs/InstructionLocations.ql delete mode 100644 csharp/ql/test/library-tests/cil/pdbs/MethodLocations.expected delete mode 100644 csharp/ql/test/library-tests/cil/pdbs/MethodLocations.ql delete mode 100644 csharp/ql/test/library-tests/cil/pdbs/PdbOnly.dll delete mode 100644 csharp/ql/test/library-tests/cil/pdbs/PdbOnly.pdb delete mode 100644 csharp/ql/test/library-tests/cil/pdbs/Pdbs.cs delete mode 100644 csharp/ql/test/library-tests/cil/pdbs/PortablePdb.dll delete mode 100644 csharp/ql/test/library-tests/cil/pdbs/PortablePdb.pdb delete mode 100644 csharp/ql/test/library-tests/cil/pdbs/Stubs.expected delete mode 100644 csharp/ql/test/library-tests/cil/pdbs/Stubs.ql delete mode 100644 csharp/ql/test/library-tests/cil/pdbs/options delete mode 100644 csharp/ql/test/library-tests/cil/regressions/ConstructedMethods.expected delete mode 100644 csharp/ql/test/library-tests/cil/regressions/ConstructedMethods.ql delete mode 100644 csharp/ql/test/library-tests/cil/regressions/Methods.cs delete mode 100644 csharp/ql/test/library-tests/cil/regressions/Methods.dll delete mode 100644 csharp/ql/test/library-tests/cil/regressions/options delete mode 100644 csharp/ql/test/library-tests/cil/typeAnnotations/Program.cs delete mode 100644 csharp/ql/test/library-tests/cil/typeAnnotations/options delete mode 100644 csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.expected delete mode 100644 csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.ql delete mode 100644 csharp/ql/test/library-tests/csharp11/cil/Assembly.cs_ delete mode 100644 csharp/ql/test/library-tests/csharp11/cil/Struct.cs_ delete mode 100644 csharp/ql/test/library-tests/csharp11/cil/assembly.dll delete mode 100644 csharp/ql/test/library-tests/csharp11/cil/class1.cs delete mode 100644 csharp/ql/test/library-tests/csharp11/cil/genericAttribute.expected delete mode 100644 csharp/ql/test/library-tests/csharp11/cil/genericAttribute.ql delete mode 100644 csharp/ql/test/library-tests/csharp11/cil/options delete mode 100644 csharp/ql/test/library-tests/csharp11/cil/refField.expected delete mode 100644 csharp/ql/test/library-tests/csharp11/cil/refField.ql delete mode 100644 csharp/ql/test/library-tests/csharp11/cil/structassembly.dll 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 76489b3c989..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 - -deprecated 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>" - ] + "%") -} - -deprecated 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() - ) -} - -deprecated 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() - ) -} - -deprecated 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 73c17c713d7..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 - -deprecated class MetadataEntity extends DotNet::NamedElement, @metadata_entity { - int getHandle() { metadata_handle(this, _, result) } - - predicate hasHandle() { exists(this.getHandle()) } - - Assembly getAssembly() { metadata_handle(this, result, _) } -} - -deprecated 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) - ) -} - -deprecated 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%") - ) - } -} - -deprecated 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) - ) -} - -deprecated 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)) -} - -deprecated query predicate csharpLocationViolation(Element e) { - e.fromLibrary() and - e.(MetadataEntity).hasHandle() and - not e.getALocation() = e.(MetadataEntity).getAssembly() -} - -deprecated query predicate matchingObjectMethods(string s1, string s2) { - exists(Callable m1, CIL::Method m2 | - m1.getDeclaringType().hasFullyQualifiedName("System", "Object") and - m1.(DotNet::Callable).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 e7ece7c4e6e..00000000000 --- a/csharp/ql/test/library-tests/cil/consistency/consistency.ql +++ /dev/null @@ -1,6 +0,0 @@ -import cil -import semmle.code.cil.ConsistencyChecks - -deprecated query predicate consistencyViolation(ConsistencyViolation v, string message) { - message = 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/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 07a63dbc847..00000000000 --- a/csharp/ql/test/library-tests/cil/enums/enums.ql +++ /dev/null @@ -1,19 +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. - ) -} - -deprecated query predicate enums(string qualifiedName, string type) { - exists(Enum e, string qualifier, string name | - e.hasFullyQualifiedName(qualifier, name) and - not osSpecific(qualifier, name) and - qualifiedName = getQualifiedName(qualifier, name) and - type = 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 c63b9dcc254503c4d1686d1bb40d3a702bedd6b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5632 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 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 e6a9219bf6c..00000000000 --- a/csharp/ql/test/library-tests/cil/functionPointers/functionPointers.ql +++ /dev/null @@ -1,42 +0,0 @@ -import cil -import semmle.code.cil.Type -import semmle.code.csharp.commons.QualifiedName - -bindingset[kind] -deprecated private string getKind(int kind) { - if kind = 1 then result = "modreq" else result = "modopt" -} - -bindingset[t, e] -deprecated 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() -} - -deprecated 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() - ) -} - -deprecated 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) - ) -} - -deprecated 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 dceff38f4876df7970395ec4a9046e1e1b276225..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4608 zcmeHKU2GiH75-+tHjd*saUdv&pG=4<Sc-ArJ_}KWk%CCox_pq(Q=--M!gNJUcVY z%$isTun_-!;h_=|2#FxxDph$%B~(fuijXQKDg;I4u|lY&NT@B32ob(>XV%`eAp)Kd z;yU-c=kK0-&bfE?-W)#p99jV6*e_lLUgIcjNaLkpnd+_`f9%4A4e#uH&6s*;=j>@W zw!$c=L{8NzIldnxR#90|&9_|N${#IQ)u62GO`AG;GS|~%z?9K~+?!XNtFQJ?TyJeO z`hX5f+EVHG9*!3K5Ie9%(`FjC2qb>pmWh;0Yr*^zVk-Yu$BY#b+y8F>jtVgZ<fRa6 z+dR-oStspg*Xl0CTR?k*zMcF;18*nlY(joYjHuJOW^t3#%>w4_D2__xbZkQ;BvA>d zp$##5J5pXiL#>*pQhe#WIc9AL7^&0saktc!O=2_AipMSBY1Z5j;SXrnnGbPl?ibga zEe~sg0)~<bGGfmrNtY%WF;cjD#K=~Z_!sxtefD7AVE+LLpcNkRH0SPm1o%70KM7q( zBG<3PV)0yST9#eM3ivH)Nqg5_$0qX}UnT#s@FQMO<S32PjeEDfY-|wb3u6#hrul9r zD@TBOee7gpsMyLb^$=dlU#EeMrqE(tG#1P@T+nz9C(O<G4b9u|Z+vL9;YFi|+EI<r zc&*0AG`<VbzG_}ed=d+02LgKNz#oX>{YC+<Dr;@Q3ufNzU*UddE|6>CN(KhdgPoWp zPFphL$#w%bP<|rgHtJbU#%-g{gqv|Ya1*&G<+jf-k`_GF#7PA2F$BR4m|^DK#5P<- z>|l&D<`(p8JfLw{<D|xWH2zwnOKiguaT^>>TeuJJGx8Km_z*TWVn6Y693ozg`-!_y zA>M?Sh=Vv!ydAF-NAXwUue7{C9MXP<GZb(0nqJmuGJaq)YsE7`6uyPsBuZ~3og?O! z(|x8{*7kERa<tJ~LfO^yD=nvIYm&0h(*priR5CXm1z|tp6{;>9Sdk6j;NhTL^VFR< zsIBi@n424MN((&O<F4|`sd!+WxUdu_s%p>F{KTy)<W;d&si<fq3LcD|qNfUplPHV^ z)zI}+beHl~L_v8t;b&8<QI*aR)3ve&FRQBII9Ao7w>0Y}jWcGQh)Ip}=UzP+L<{Tf z$GQA*6~%7guUAg`r-G>JBvd-yw_1$`{wcRoWBg4{(%iIgMtROzO~vaMVOh(yQnFql z4jg}JRgo1_%M-WgdT!F7U39#fLUY~iENJdlU6Xg6iXX&@TZ(O6W0YKPuj{+XUS5o$ zUG}`pv_4}-o$^#kl4~{<ZcZl7$wb(tB#7#B8dj-`vgqylo)=WK=$2HR?KDH=Nh4bb zs%q48;uuGZXSgmV<FT`eins-nTr54v=zb=?=N!JwKmXPK$6xvV$xo5945Pipg3(H% zyIa^UO&(}Je`xN}?hiU{Guy<Vz0ERqbkcSY+W7+{_Zx7X{CdrrSKb>r;gP@}J6lqr zWITIX4y-}D%k+nHvw`jQk+Ip)AX39&_{*%mcPtLt{dCZE#mZ63yK(3_OGkL}u+_k( zrYiG(G0>WpADwjG&l`n*sa!MsaAifV+|)Whd+IG1ho|K$Kf^xHdw*VE6seh*U(QZ3 z-X^@=pc9KVS1x7>`NIDy|9I?;zigfQv#b90pJ)Gdi}>h07W1p<O`NI|FFI!yddq6D zmtS<)+muLeP(0JC^XT<eQest{Fk~&7t?aN|L}6lh;O70v7Q5z=Y%wM@_EGiq`wyOc z_k;HLAGqVH?828|2ZgqTTHopqgH$ue4as}nVaN4RjU^7HPjWWz;%>TGoBDd6KTCe( z6)^NBZU>f|15Mu^{Cw8Q#cqQA#1QaF{c0rtiMfw>90kk~$1p=`k}vHe<R^*a>8l%W z<o^3rdeh2RAuSybr3`P^^xc)QddL$EdUX)dkIVO=qE8>E_->Ncqi4-h>rfg~?;xRF zKrU_Pa}$i!U`z?ET*@oo;HgL3^r8N@4@J_zL3DBMDE(Ct>NS>_kwZ>t_az<EUhUWA z3VUf4(K@6yujkgI&T~eLl8zy4it$oD`uL-2ti*eqJ|cQq&99&Dp}v(aYi^~zR4CE5 zK4bM7BL4QZY?Ns!@9#Z)_ZXPs{ED6}*@t|^N%bl?P0!H3BvX2=qnTVPD{IyB6)vsP zcUd#7^E7=0jHAXnB@I!7yzKoq*SSx>h@0oGt<-9rfLnD<hgrv%IaayT9<#G}%9^XY ZI!9{!6KGcYf5wShe*(GuoWl36z}M1Sag_i7 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 3eeb5cf0697..00000000000 --- a/csharp/ql/test/library-tests/cil/init-only-prop/customModifiers.ql +++ /dev/null @@ -1,17 +0,0 @@ -import semmle.code.cil.Type -import semmle.code.csharp.commons.QualifiedName - -bindingset[kind] -deprecated private string getKind(int kind) { - if kind = 1 then result = "modreq" else result = "modopt" -} - -deprecated query predicate customModifiers(string receiver, string modifier, string kind) { - exists(Type modType, CustomModifierReceiver cmr, string qualifier, string name, int k | - receiver = cmr.toString() and - cil_custom_modifiers(cmr, modType, k) and - modType.hasFullyQualifiedName(qualifier, name) and - modifier = getQualifiedName(qualifier, name) and - kind = getKind(k) - ) -} 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 06ab21392e3..00000000000 --- a/csharp/ql/test/library-tests/cil/init-only-prop/setters.ql +++ /dev/null @@ -1,11 +0,0 @@ -import semmle.code.cil.Method -import semmle.code.csharp.Location - -deprecated private string getType(Setter s) { - if s.isInitOnly() then result = "init" else result = "set" -} - -deprecated query predicate setters(Setter s, string type) { - s.getLocation().(Assembly).getName() = "cil-init-prop" and - type = 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 7a9e483ba2b8c4ce0317a64d9175eba8c758837e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4608 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 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 6ce8636e4ef29d6d9512fe9cdae05365d5529ea5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 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 NpYwwK5C6Fe`~f&5G2#FK 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 69e2f3db261820d8d7c257b3335d5d8004f3b314..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11776 zcmeHMO>9(E6h3blq|+Z@q#5dH<V6Dkit|%Utt6%?#fGL%3N$GS6VmCMnK*XnH1non zjEjj9-DwwYG#W9wAP^U%#)aCX8iR!;O<0j&SQsUQ215c1)A9S>4;dTUq_LIh%sn&b zefQ_wd(S!dz5C9+FP1U#IWw0o=-uJ&)>b_>(4)T)ibR^~g9io#<gxy;70Ckgpk^D? zwF*2iT~bub9_WzYYT5jnx4q$VRO{e6w%K98Mk$rNz*1=)u8OMJ0}q@3O=|wDdCLD~ z+sC1(c5blkn1<5hKcCul@b7nG7ham#F*Sdo-xXvXxty*Y-n+1<yjrE#hzB0_{PU$) zzWy^$a~9$nF;S_xga_38FX5aTsJcIVxbxzMS^va<O!t4~`SO>S`#$;e_bdL1PCMW5 z`TNKG=~@5OZjt+Sy;HXWEu|CZHpf1=m+Lj&dw$403pjn~qy3*6Q~s~N==$|~`;mPe zC%^lt2HaOQChCqQE>?|U%8(^JFh4gx$3Sk7Qr-LF$<&+iv3%~0lu<C_1Bub(aPF;m z&v-U_C^;PO&L&JV8Zt}~V}YpYh^8Sr22taIC?knhFh|(~CaHa;?T1Hyeey;`D?*L* z*wBrc!mPI3pq}zLBDQANZOd8S31;8l%)Hwdcj|c;ur38wR2d%N)7d7w{nX|UM<v}s z0_OBF2Ss`kMj@BaB(fp_S?6clGhiJ|;`|3ixB5cbLY8AaNsb!@s}0YZJ_GZ60#^aH z37`$JyiEpq4~8c17q9nH=go_guU+l^al6m+!})KAP%SYz0Nq8rxB;mPkFa<zlDyEG zd97Z1))Ne9?B_4!Cs+y6@YAi7NImehlSZ>5b=d%<es#e0z}s{4MU;sT`39$alY_K{ z^+6!|Dn1Q_4BC6~Yet*LQ6jP)_>^oz2_>oX7Wlv`cag?8wBI78Ni8<4>Xm!Cpf7xf zzG{T?o&Zu0msfRgj#FIi5mf&x;ep1L=tT8VaUKZBc59vH`l*#I@B!IXRvu}OkfIf* zzEbEvdVuTxV&uLX7OPj~Yu^K$<5Rw<756tt<A;rMCD{bCUIpu5#_QJiK_DprW{iM{ zXW9Z>?9<`$^I^A!STDDn>{*~2<2Xg)Y%N3f)>69mwntu!v~|gI--qtFvbrl=h8{$E zO_qT6;9Qz=bxr_CyC_a%tmlrrj4iIXdt+x9c4reiwaI4<V5i;MHHAxk|2Yav!mngT zM|wxoISG#@PNqx=n|UMrdMc4j<%hF5W5g~<XR;|Xyu3pJ?knh8hRY<rZx~`f17--! zu-w{v02zXl)MqE#4=Z-vh@N!tB$&^6A7;dT-rq*P2<HBMC-@BN_Tc&Anh*hVf5e>) vC&`^WPMWhn;$BG@H*!7UIDFS|&!nhwJg}v5R8g8J4=4{P4=4}(j~@63S3*nE 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 32170537789..00000000000 --- a/csharp/ql/test/library-tests/cil/pdbs/InstructionLocations.ql +++ /dev/null @@ -1,17 +0,0 @@ -import cil - -// Used only because native PDBs are only supported on Windows. -// They are included as tests but disabled here. -deprecated predicate filterMethod(CIL::Method m) { - m.getDeclaringType().getNamespace().getName() = "EmbeddedPdb" or - m.getDeclaringType().getNamespace().getName() = "PortablePdb" -} - -deprecated query predicate instructionLocations(string loc, string extra) { - exists(CIL::Instruction instruction, CIL::Location location | - location = instruction.getLocation() and - filterMethod(instruction.getImplementation().getMethod()) and - loc = location.toString() and - extra = 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 a301741f0cf..00000000000 --- a/csharp/ql/test/library-tests/cil/pdbs/MethodLocations.ql +++ /dev/null @@ -1,19 +0,0 @@ -import cil - -// Used only because native PDBs are only supported on Windows. -// They are included as tests but disabled here. -deprecated predicate filterMethod(CIL::Method m) { - m.getDeclaringType().getNamespace().getName() = "EmbeddedPdb" or - m.getDeclaringType().getNamespace().getName() = "PortablePdb" -} - -deprecated query predicate methodLocations(string m, string loc, boolean primaryLocation) { - exists(CIL::Method method, CIL::Location location | - 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) and - m = method.toStringWithTypes() and - loc = location.toString() - ) -} 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 49fd9b0be231b6e5f888395e5487a04696b59896..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 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 Sf{OPR*`4PF`yc*u9rzt=GAxV$ 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 92f60f94a9d210cbedbb2118c6028731b0c3ea31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11776 zcmeHMOGuPa6uvV~>Nvh8V=~<gflzAmP*aIW$OniGCKHu5i1Wlro00javS=|7<gQ$_ zaUodlY8ASw1cML@+bC2}iztwcN~|C^Ii2r+$Rsi-M$O|MJ@@?g-ZS^{o&Vl@&i!qE zcPJ<XePLsxxv`?cXtTE%>r56)UQS7qoe`<Uf3}w%!^jiukpxdu0D<W!r*uZ3p1n)w z>8JhNb<eG;dhBC`GLy(>(Wr)GG@3yvr&LB@Gy4~C`=_$W|CrltlU4PxyQ)h?r6bph zW=AU~+sDVF{x9vniWEiEfn(`yNA<>{*lPZqBnWJ_{&6VA?*GVRIvZt@Opy;W4g%c% zallD~s#RA<!%WtKe%Q{Y+sD;+o;J6QEG^FKha054ZuCZ%-nXEiDrampyLIZbp*Y%o zuh2I1GuZ0BUelx81vI?Uwanf9Uj0TtH2dJg;>BBQ+3+YiB?$sq@;DWlB*W&z+#v#M z%WKPU<W8fV#v=}o_mX2E6g=;BhXse-8SuD*gN~CPS9_rUiledLDF{}RTVTw+K~<1d z2j~Y-b+4<!lc*rBL=QyhjmMQD6bX=&zPG3%G>)ak&bb%i1=V()dg#*?v1nE0x3Kg9 zVzfOr_T-#Hu2<dyFXcHU1_D@}CRVP;Xq5Z?*fW4^nu$8mwl;6LH|Sx<m`3xg;nU1S z=gZc|Wm@&4`;$G;v9TsrMN&gA1lolIfOi9=$z<wWk_Ku>O-+8I=cA|~QqiB%Cw2yl zSSofLLBCWN*+nv&WCpdYVR^KJXxI;_Od6Z~OoA07;j|?L5Yv@t%`31~E*WbdNnoz< zmKxcC68cF{iX`Z`{>!kib~&XU0tQwl?)})WRZQOC>Dj;z#*|xXEg);^%|G2|6fa0u z&W3cyD3#|A8(-F1MZaIia&P9cc~2fq_$;xJ7{0vteUK!`Knx#&v9HsjphUVIj=djN zY9MpipqxELa^ra~hn6NOv}Co%>uQ?o4_nxwho%)pSMd$yW<;STFEUS5P_5rfLoZu) zI596MLc+gPdfrBe%aqty?gq_CghnOOiXBMLN^Mffc;A1{&`iuH{DHpKfG^0*0p|s; zz|2C(ZSM6tJ>HP3Kj`k03Vi;4uVCKZr2ygzKwByUwx1-q_zdR`OqoM0#vUZ${)6~u zCkcnYmgZASM&b!#tn)Uqh_c?VQa(bA_#N^5YvM{;U)U26qajw?O$;N&8cj!e7*b0N kzY+Th`oURKK+Gv|5Lo}nn>a(_BjE^e1ULd5fq#I&Z^Z05+W-In 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 a6da57ff582eae63ca0fca14a861ef9dd2d05088..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 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 aMO5I=^pM6s2eSJ=!!=%@|KUGZf!_h-2}L9T 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 4dc80964ea8aadb5af7692de3f90e41643b97ff6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 zcmZ<?_HtrmU}OLR9v}{IaZ)HV)H47JFt9Py02v-YtQ?S%1QI&}#0@~KT*tuR0@Mc5 zqa0jPl$n=a3}i9{0L559VxhqdAwV|BAZ7PZPZuEF0_1mq_)a<bAj95Ik?Y>!VC}Wj z_GST(%I{A{<BXz!!VK=BObnbr8mOE>0En5O7{uoXVm=@Sv0)g<1gQaWfnYs^VrT&i z!1RJ>W*`PB(g%{}Kpl(>K47(sKp9vVD1g;4gJnVL#lb3IdLdSTNRW97Kz*R_VaQ}C zD9TSMO)dd(7#QA&N&JsnCE(lsJ>N6A*(BjdQlR}Y_RE43f*B6@FJ@Y}A}GG}=)`@l zTXrZ+EqofZmx0OIia8~<j00#&R%&udF?(=gUP@Aa1$RJxQAuJ_PAV|)Ih}J7i;E5Q zl8f167+E+3B~?Z4y*L)`KTY)1JC6$-v&D~^s5Y#%*9SU|k&T&=L4b(~7>Z0>K!-9h m@G@1hFfiBau>fPVkOSl!ewIWQ21cfO4n{6UWhN;xke>jMX;n%9 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 cfe897f1069..00000000000 --- a/csharp/ql/test/library-tests/cil/pdbs/Stubs.ql +++ /dev/null @@ -1,3 +0,0 @@ -import cil::CIL - -deprecated query predicate stubs(Assembly asm) { assemblyIsStub(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 d472708bb5e..00000000000 --- a/csharp/ql/test/library-tests/cil/regressions/ConstructedMethods.ql +++ /dev/null @@ -1,9 +0,0 @@ -import cil::CIL - -deprecated query predicate constructedMethods( - UnboundGenericMethod f, ConstructedMethod fc, Type typeArgument -) { - fc.getUnboundMethod() = f and - f.hasFullyQualifiedName("Methods", "Class1", "F") and - typeArgument = 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 1178f3e09c4a4c0c08baf63ea2b3d2c8487b2a8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 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 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 d5f2ee7f7c3..00000000000 --- a/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.ql +++ /dev/null @@ -1,94 +0,0 @@ -import cil -import semmle.code.csharp.commons.QualifiedName -import semmle.code.cil.Type - -deprecated 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() -} - -deprecated 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" - ] -} - -deprecated query predicate typeAnnotation(string toString, string type, int i) { - exists(Element e | - 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 - ) - ) -} 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 790a657a8d871b79ad55d2fa28a0c983beb46220..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5120 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 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 d386bb8ce0e..00000000000 --- a/csharp/ql/test/library-tests/csharp11/cil/genericAttribute.ql +++ /dev/null @@ -1,14 +0,0 @@ -import semmle.code.cil.CIL - -deprecated private string getTypeArguments(GenericAttribute a) { - result = "(" + concat(Type t | t = a.getATypeArgument() | t.getName(), ",") + ")" -} - -deprecated query predicate genericAttribute( - GenericAttribute a, string name, int numArgs, string args -) { - a.getFile().getStem() = "assembly" and - name = a.getType().getName() and - numArgs = a.getNumberOfTypeArguments() and - args = 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 3474beb4913..00000000000 --- a/csharp/ql/test/library-tests/csharp11/cil/refField.ql +++ /dev/null @@ -1,5 +0,0 @@ -import cil - -deprecated 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 364ae8b144200483fb4c87f81e1756168d75e733..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5120 zcmeHLYit}>6+Scji0u%^j*D?g0~0$<Tc@41aRNz5Qm<d_wqD!W-Mna}cy{;hdYajp z&CINmr7gG(0rCUX@~0pHLgW_$sS&C~d8z$@go>zSQB^{KAW{J#p$a4(KOiD}=g#bU z?1Z!+{#5F9?l<Rk&pr3tJ9o||`>|&zMnrM+>(_~1#FN{ PA()ZHKaUN^na`RdLW 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 Z4CnhD*0kXN41RU+9TxYy;r?GT@NbvzL398B From f59aaf1d755088c4e2893930fde84d743c95253a Mon Sep 17 00:00:00 2001 From: Michael Nebel <michaelnebel@github.com> Date: Thu, 7 Mar 2024 19:45:05 +0100 Subject: [PATCH 290/430] C#: Add change note. --- csharp/ql/lib/change-notes/2024-03-07-remove-cil-extractor.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/lib/change-notes/2024-03-07-remove-cil-extractor.md 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. From eb62c033aabf238e95333333e20216379656a426 Mon Sep 17 00:00:00 2001 From: Michael Nebel <michaelnebel@github.com> Date: Tue, 12 Mar 2024 11:12:46 +0100 Subject: [PATCH 291/430] C#: Remove the cil extractor option. --- csharp/extractor/Semmle.Util/CommandLineOptions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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<string> GetExtractorOptions() { var extractorOptions = new List<string>(); From 0e0b73a5e67c3f07530e40715358a471cfcc5ba5 Mon Sep 17 00:00:00 2001 From: Tom Hvitved <hvitved@github.com> Date: Tue, 12 Mar 2024 11:22:04 +0100 Subject: [PATCH 292/430] Address review comment --- shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 2b43cbdd474..6fbeb35bded 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -1334,8 +1334,10 @@ module MakeImpl<InputSig Lang> { bindingset[c, t, tail] additional Ap apCons(Content c, Typ t, Ap tail) { result = Param::apCons(c, t, tail) and - Config::accessPathLimit() > 0 and - if tail instanceof ApNil then any() else Config::accessPathLimit() > 1 + exists(int limit | + limit = Config::accessPathLimit() and + if tail instanceof ApNil then limit > 0 else limit > 1 + ) } pragma[nomagic] From 95a5ec7f27520aa050f6ad470add684d111f0d94 Mon Sep 17 00:00:00 2001 From: erik-krogh <erik-krogh@github.com> Date: Tue, 12 Mar 2024 13:22:11 +0100 Subject: [PATCH 293/430] add test that the new `Object.groupBy` method has a type --- .../TypeScript/Types/printAst.expected | 103 ++++++++++++++++-- .../TypeScript/Types/tests.expected | 25 +++++ .../library-tests/TypeScript/Types/tst.ts | 4 + 3 files changed, 124 insertions(+), 8 deletions(-) diff --git a/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected b/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected index 90fa2b8dcda..081636baa06 100644 --- a/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected +++ b/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected @@ -125,6 +125,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 | (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) | @@ -1760,8 +1762,8 @@ 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:492:1 | [NamespaceDeclaration] module ... ow"); } | semmle.label | [NamespaceDeclaration] module ... ow"); } | -| tst.ts:486:1:492:1 | [NamespaceDeclaration] module ... ow"); } | semmle.order | 90 | +| 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 | @@ -1788,6 +1790,33 @@ nodes | 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 | 91 | | tstModuleCJS.cts:1:8:3:1 | [FunctionDeclStmt] functio ... 'b'; } | semmle.label | [FunctionDeclStmt] functio ... 'b'; } | @@ -2251,6 +2280,10 @@ edges | 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 | @@ -2353,6 +2386,10 @@ edges | 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 | @@ -5223,12 +5260,14 @@ 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:492:1 | [NamespaceDeclaration] module ... ow"); } | tst.ts:486:8:486:11 | [VarDecl] TS54 | semmle.label | 1 | -| tst.ts:486:1:492:1 | [NamespaceDeclaration] module ... ow"); } | tst.ts:486:8:486:11 | [VarDecl] TS54 | semmle.order | 1 | -| tst.ts:486:1:492:1 | [NamespaceDeclaration] module ... ow"); } | tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | semmle.label | 2 | -| tst.ts:486:1:492:1 | [NamespaceDeclaration] module ... ow"); } | tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | semmle.order | 2 | -| tst.ts:486:1:492:1 | [NamespaceDeclaration] module ... ow"); } | tst.ts:491:3:491:58 | [ExprStmt] createS ... llow"); | semmle.label | 3 | -| tst.ts:486:1:492:1 | [NamespaceDeclaration] module ... ow"); } | tst.ts:491:3:491:58 | [ExprStmt] createS ... llow"); | semmle.order | 3 | +| 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 | @@ -5271,6 +5310,54 @@ edges | 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 49a1f1e000f..daa1571d73c 100644 --- a/javascript/ql/test/library-tests/TypeScript/Types/tests.expected +++ b/javascript/ql/test/library-tests/TypeScript/Types/tests.expected @@ -669,6 +669,29 @@ getExprType | 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 | @@ -1374,6 +1397,7 @@ 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" | @@ -1381,6 +1405,7 @@ unionIndex | "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" | diff --git a/javascript/ql/test/library-tests/TypeScript/Types/tst.ts b/javascript/ql/test/library-tests/TypeScript/Types/tst.ts index 08d5e610ff5..cef97f9e4fa 100644 --- a/javascript/ql/test/library-tests/TypeScript/Types/tst.ts +++ b/javascript/ql/test/library-tests/TypeScript/Types/tst.ts @@ -489,4 +489,8 @@ module TS54 { } 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 From d7790faeceeee0f9f43f1f2cc837ece38afcc592 Mon Sep 17 00:00:00 2001 From: Tom Hvitved <hvitved@github.com> Date: Tue, 12 Mar 2024 11:51:32 +0100 Subject: [PATCH 294/430] Address review comments --- .../codeql/dataflow/internal/DataFlowImpl.qll | 25 +++++++------------ 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 6fbeb35bded..e075af108d1 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -480,7 +480,9 @@ module MakeImpl<InputSig Lang> { /** * 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() | @@ -1331,15 +1333,6 @@ module MakeImpl<InputSig Lang> { fwdFlow1(_, _, _, _, _, _, t0, t, ap, _) and t0 != t } - bindingset[c, t, tail] - additional Ap apCons(Content c, Typ t, Ap tail) { - result = Param::apCons(c, t, tail) and - exists(int limit | - limit = Config::accessPathLimit() and - if tail instanceof ApNil then limit > 0 else limit > 1 - ) - } - pragma[nomagic] private predicate fwdFlow0( NodeEx node, FlowState state, Cc cc, ParamNodeOption summaryCtx, TypOption argT, @@ -2534,7 +2527,10 @@ module MakeImpl<InputSig Lang> { 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; @@ -3201,10 +3197,7 @@ module MakeImpl<InputSig Lang> { Typ getTyp(DataFlowType t) { result = t } bindingset[c, t, tail] - Ap apCons(Content c, Typ t, Ap tail) { - result.isCons(c, t, tail) and - Config::accessPathLimit() > tail.len() - } + Ap apCons(Content c, Typ t, Ap tail) { result.isCons(c, t, tail) } class ApHeadContent = Content; @@ -4641,7 +4634,7 @@ module MakeImpl<InputSig Lang> { 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 From 6be0ed1dc391cf4428f633f154ba58f8112eee30 Mon Sep 17 00:00:00 2001 From: erik-krogh <erik-krogh@github.com> Date: Tue, 12 Mar 2024 13:42:58 +0100 Subject: [PATCH 295/430] narrow the version specifier used for TypeScript --- javascript/extractor/lib/typescript/package-lock.json | 2 +- javascript/extractor/lib/typescript/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/javascript/extractor/lib/typescript/package-lock.json b/javascript/extractor/lib/typescript/package-lock.json index 604db5f3e37..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.4" + "typescript": "5.4.2" }, "devDependencies": { "@types/node": "18.15.3" diff --git a/javascript/extractor/lib/typescript/package.json b/javascript/extractor/lib/typescript/package.json index 8f6a1549a60..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.4" + "typescript": "5.4.2" }, "scripts": { "build": "tsc --project tsconfig.json", From 695e728ed5584641492df4e5c2ee8da511286b46 Mon Sep 17 00:00:00 2001 From: Tom Hvitved <hvitved@github.com> Date: Mon, 11 Mar 2024 11:59:31 +0100 Subject: [PATCH 296/430] Ruby: Lower access path limit to 1 for `OrmTracking` --- ruby/ql/lib/codeql/ruby/security/XSS.qll | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ruby/ql/lib/codeql/ruby/security/XSS.qll b/ruby/ql/lib/codeql/ruby/security/XSS.qll index a212369d4e6..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<Config> From c2aa334465cc621211405490050ea803eb8f2b82 Mon Sep 17 00:00:00 2001 From: Ian Lynagh <igfoo@github.com> Date: Mon, 11 Mar 2024 19:00:46 +0000 Subject: [PATCH 297/430] Java: Accept test changes --- .../java/buildless-erroneous/diagnostics.expected | 14 ++++++++++++++ .../java/buildless-gradle/diagnostics.expected | 14 ++++++++++++++ .../diagnostics.expected | 14 ++++++++++++++ .../java/buildless-maven/diagnostics.expected | 14 ++++++++++++++ .../diagnostics.expected | 14 ++++++++++++++ .../java/buildless/diagnostics.expected | 14 ++++++++++++++ 6 files changed, 84 insertions(+) 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 index 2118edbe296..03978511bb7 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-erroneous/diagnostics.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless-erroneous/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/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", From 52f71e4553784fa425b2cb07e90b726960cdf186 Mon Sep 17 00:00:00 2001 From: erik-krogh <erik-krogh@github.com> Date: Tue, 12 Mar 2024 15:07:29 +0100 Subject: [PATCH 298/430] small fixes based on review --- .../semmle/code/java/security/RequestForgery.qll | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/RequestForgery.qll b/java/ql/lib/semmle/code/java/security/RequestForgery.qll index e083977c74f..9ab593f0d6f 100644 --- a/java/ql/lib/semmle/code/java/security/RequestForgery.qll +++ b/java/ql/lib/semmle/code/java/security/RequestForgery.qll @@ -103,7 +103,7 @@ private predicate isContainsUrlSanitizer(Guard guard, Expr e, boolean branch) { * 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. */ -class ContainsUrlSanitizer extends RequestForgerySanitizer { +private class ContainsUrlSanitizer extends RequestForgerySanitizer { ContainsUrlSanitizer() { this = DataFlow::BarrierGuard<isContainsUrlSanitizer/3>::getABarrierNode() } @@ -115,11 +115,7 @@ class ContainsUrlSanitizer extends RequestForgerySanitizer { private predicate isRelativeUrlSanitizer(Guard guard, Expr e, boolean branch) { guard = any(MethodCall call | - exists(Method method | - call.getMethod() = method and - method.getName() = "isAbsolute" and - method.getDeclaringType().hasQualifiedName("java.net", "URI") - ) and + call.getMethod().hasQualifiedName("java.net", "URI", "isAbsolute") and e = call.getQualifier() and branch = false ) @@ -128,7 +124,7 @@ private predicate isRelativeUrlSanitizer(Guard guard, Expr e, boolean branch) { /** * A check that the URL is relative, and therefore safe for URL redirects. */ -class RelativeUrlSanitizer extends RequestForgerySanitizer { +private class RelativeUrlSanitizer extends RequestForgerySanitizer { RelativeUrlSanitizer() { this = DataFlow::BarrierGuard<isRelativeUrlSanitizer/3>::getABarrierNode() } @@ -145,8 +141,7 @@ private predicate isHostComparisonSanitizer(Guard guard, Expr e, boolean branch) branch = true and exists(MethodCall hostCall | hostCall = [equalsCall.getQualifier(), equalsCall.getArgument(0)] and - hostCall.getMethod().getName() = "getHost" and - hostCall.getMethod().getDeclaringType().hasQualifiedName("java.net", "URI") and + hostCall.getMethod().hasQualifiedName("java.net", "URI", "getHost") and e = hostCall.getQualifier() ) ) @@ -155,7 +150,7 @@ private predicate isHostComparisonSanitizer(Guard guard, Expr e, boolean branch) /** * A comparison on the `Host` property of a url, that is a sanitizer for URL redirects. */ -class HostComparisonSanitizer extends RequestForgerySanitizer { +private class HostComparisonSanitizer extends RequestForgerySanitizer { HostComparisonSanitizer() { this = DataFlow::BarrierGuard<isHostComparisonSanitizer/3>::getABarrierNode() } From 74876ff49beb5103d6f5c6974457a00afb15a2e7 Mon Sep 17 00:00:00 2001 From: erik-krogh <erik-krogh@github.com> Date: Tue, 12 Mar 2024 15:07:36 +0100 Subject: [PATCH 299/430] add change-note --- java/ql/lib/change-notes/2024-03-12-request-sanitizers.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 java/ql/lib/change-notes/2024-03-12-request-sanitizers.md diff --git a/java/ql/lib/change-notes/2024-03-12-request-sanitizers.md b/java/ql/lib/change-notes/2024-03-12-request-sanitizers.md new file mode 100644 index 00000000000..cc30b339320 --- /dev/null +++ b/java/ql/lib/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 on an URI to the `java/ssrf` query. \ No newline at end of file From b07b0762f271355b2b315f7b77743756cad4bc90 Mon Sep 17 00:00:00 2001 From: Tamas Vajk <tamasvajk@github.com> Date: Tue, 12 Mar 2024 15:07:48 +0100 Subject: [PATCH 300/430] Adjust based on code review feedback --- .../DependencyManager.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index 143ed49f440..f4ae77c3d33 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -927,7 +927,8 @@ namespace Semmle.Extraction.CSharp.DependencyFetching var multipleVersions = notYetDownloadedPackages .GroupBy(p => p.Name) .Where(g => g.Count() > 1) - .Select(g => g.Key); + .Select(g => g.Key) + .ToList(); foreach (var package in multipleVersions) { From 179a7d500e75d3c37d61d4425087100ea62e1c24 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Tue, 12 Mar 2024 14:14:27 +0000 Subject: [PATCH 301/430] C++: Handle 'wchar_t' types that may be defined as unsigned short in C. This brings back SAMATE results. --- cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql index 461df854c75..de397c31201 100644 --- a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql +++ b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql @@ -49,7 +49,9 @@ predicate cannotContainString(Type t) { not unspecified instanceof WideCharType and not unspecified instanceof Char8Type and not unspecified instanceof Char16Type and - not unspecified instanceof Char32Type + not unspecified instanceof Char32Type and + // C often defines `wchar_t` as `unsigned short` + unspecified = any(ShortType short | not short.isUnsigned()) | unspecified instanceof ArithmeticType or unspecified instanceof BuiltInType From 6a563c161e5e3cd677ef8e810f1fe2bf6df16573 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Tue, 12 Mar 2024 14:15:44 +0000 Subject: [PATCH 302/430] C++: Simplify the definition of 'isNonConst'. On ImageMagick I get the same exact sources before and after. --- .../Likely Bugs/Format/NonConstantFormat.ql | 31 +++++++------------ 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql index de397c31201..1a28f494fa6 100644 --- a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql +++ b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql @@ -109,35 +109,28 @@ predicate isNonConst(DataFlow::Node node) { // i.e., functions that with unknown bodies and are not known to define the output through its input // 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 | + not func.hasDefinition() and + func = call.getStaticCallTarget() + | // Case 1: It's a known dataflow or taintflow function with flow to the return value - exists(Function func, CallInstruction call | - call.getUnconvertedResultExpression() = node.asIndirectExpr() and - func = call.getStaticCallTarget() and - not exists(FunctionOutput output | - dataFlowOrTaintFlowFunction(func, output) and - output.isReturnValueDeref() and - node = callOutput(call, output) - ) + call.getUnconvertedResultExpression() = node.asIndirectExpr() and + not exists(FunctionOutput output | + dataFlowOrTaintFlowFunction(func, output) and + output.isReturnValueDeref(_) and + node = callOutput(call, output) ) or - // Case 1: It's a known dataflow or taintflow function with flow to an output parameter - exists(Function func, int i, CallInstruction call | + // 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 - func = call.getStaticCallTarget() and not exists(FunctionOutput output | dataFlowOrTaintFlowFunction(func, output) and - output.isParameterDeref(i) and + output.isParameterDeref(i, _) 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.asIndirectExpr() ) } From 51f57407071cc09cbbc6707722a15bfc5f9828df Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Tue, 12 Mar 2024 14:16:46 +0000 Subject: [PATCH 303/430] C++: Exclude functions that aren't declared inside the source root. This fixes performance on ImageMagick. --- cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql index 1a28f494fa6..3e9576de175 100644 --- a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql +++ b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql @@ -63,6 +63,14 @@ predicate dataFlowOrTaintFlowFunction(Function func, FunctionOutput output) { func.(TaintFunction).hasTaintFlow(_, output) } +/** Holds if `func` is declared inside the source root. */ +predicate isInsideSourceRoot(Function func) { + exists(File f | + f = func.getFile() and + exists(f.getRelativePath()) + ) +} + /** * Holds if `node` is a non-constant source of data flow for non-const format string detection. * This is defined as either: @@ -111,7 +119,8 @@ predicate isNonConst(DataFlow::Node node) { // The function's output must also not be const to be considered a non-const source exists(Function func, CallInstruction call | not func.hasDefinition() and - func = call.getStaticCallTarget() + func = call.getStaticCallTarget() and + isInsideSourceRoot(func) | // Case 1: It's a known dataflow or taintflow function with flow to the return value call.getUnconvertedResultExpression() = node.asIndirectExpr() and From b53ae77c56fd1460559c023150c07ca87208f53a Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen <erik-krogh@github.com> Date: Tue, 12 Mar 2024 15:22:17 +0100 Subject: [PATCH 304/430] expand change-note Co-authored-by: Tony Torralba <atorralba@users.noreply.github.com> --- java/ql/lib/change-notes/2024-03-12-request-sanitizers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/lib/change-notes/2024-03-12-request-sanitizers.md b/java/ql/lib/change-notes/2024-03-12-request-sanitizers.md index cc30b339320..08229d6d7d0 100644 --- a/java/ql/lib/change-notes/2024-03-12-request-sanitizers.md +++ b/java/ql/lib/change-notes/2024-03-12-request-sanitizers.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -* Added sanitizers for relative URLs, `List.contains()`, and checking the host on an URI to the `java/ssrf` query. \ No newline at end of file +* 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 From 35aae0a98108d8b5fbd30be5664180157eb51425 Mon Sep 17 00:00:00 2001 From: erik-krogh <erik-krogh@github.com> Date: Tue, 12 Mar 2024 15:22:57 +0100 Subject: [PATCH 305/430] move changenote to src/ --- .../ql/{lib => src}/change-notes/2024-03-12-request-sanitizers.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename java/ql/{lib => src}/change-notes/2024-03-12-request-sanitizers.md (100%) diff --git a/java/ql/lib/change-notes/2024-03-12-request-sanitizers.md b/java/ql/src/change-notes/2024-03-12-request-sanitizers.md similarity index 100% rename from java/ql/lib/change-notes/2024-03-12-request-sanitizers.md rename to java/ql/src/change-notes/2024-03-12-request-sanitizers.md From f6138230471e2f04fc2309f6f6fc3cd285230fb4 Mon Sep 17 00:00:00 2001 From: erik-krogh <erik-krogh@github.com> Date: Tue, 12 Mar 2024 15:25:27 +0100 Subject: [PATCH 306/430] add explicit QLDoc that any method named "contains" is matched --- java/ql/lib/semmle/code/java/security/RequestForgery.qll | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/security/RequestForgery.qll b/java/ql/lib/semmle/code/java/security/RequestForgery.qll index 9ab593f0d6f..a4e824c1cfe 100644 --- a/java/ql/lib/semmle/code/java/security/RequestForgery.qll +++ b/java/ql/lib/semmle/code/java/security/RequestForgery.qll @@ -86,7 +86,9 @@ private class HostnameSantizer extends RequestForgerySanitizer { } /** - * An argument to a call to `List.contains()` that is a sanitizer for URL redirects. + * 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 = From ab6e2f9364f6b3de360ad3d5e7b2438d5db313c4 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Tue, 12 Mar 2024 15:00:15 +0000 Subject: [PATCH 307/430] C++: Accept test regression. --- .../Format/NonConstantFormat/NonConstantFormat.expected | 4 ---- .../Likely Bugs/Format/NonConstantFormat/nested.cpp | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) 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 c3c94158da8..7cdf2ada53a 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 @@ -7,7 +7,6 @@ edges | 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 | | @@ -35,8 +34,6 @@ nodes | 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 | @@ -68,7 +65,6 @@ subpaths | 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 | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/nested.cpp b/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/nested.cpp index 1c3d2513da5..40a88ee7fc0 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/nested.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/nested.cpp @@ -84,7 +84,7 @@ namespace ns { class blab { void out1(void) { char *fmt = (char *)__builtin_alloca(10); - diagnostic(fmt); // BAD + diagnostic(fmt); // BAD [NOT DETECTED] } }; } From 0e94aa0eb51a6a474d8d4923f09965449d87a95b Mon Sep 17 00:00:00 2001 From: Ian Lynagh <igfoo@github.com> Date: Tue, 12 Mar 2024 16:42:37 +0000 Subject: [PATCH 308/430] Kotlin 2: Accept more changes in the exprs test --- .../library-tests/exprs/exprs.expected | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index d23114e0758..aa19916593a 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -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 | From cff2cdb9e4c9d1ac8569da1a0aa153bdc13001eb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 13 Mar 2024 00:15:53 +0000 Subject: [PATCH 309/430] Add changed framework coverage reports --- .../library-coverage/coverage.csv | 88 +++++++++---------- .../library-coverage/coverage.rst | 4 +- .../library-coverage/coverage.csv | 2 +- .../library-coverage/coverage.rst | 4 +- 4 files changed, 49 insertions(+), 49 deletions(-) diff --git a/csharp/documentation/library-coverage/coverage.csv b/csharp/documentation/library-coverage/coverage.csv index 8bb3b01441a..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:commandargs,source:environment,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,,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.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,30,11864,,8,8,9,,,4,5,,33,2,3,1,17,3,4,9898,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 bdee069e89a..0b11da25d91 100644 --- a/csharp/documentation/library-coverage/coverage.rst +++ b/csharp/documentation/library-coverage/coverage.rst @@ -9,6 +9,6 @@ C# framework & library support Framework / library,Package,Flow sources,Taint & value steps,Sinks (total),`CWE-079` :sub:`Cross-site scripting` `ServiceStack <https://servicestack.net/>`_,"``ServiceStack.*``, ``ServiceStack``",,7,194, 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.SafeHandles``, ``Mono.Linker``, ``MySql.Data.MySqlClient``, ``Newtonsoft.Json``, ``SourceGenerators``, ``Windows.Security.Cryptography.Core``",8,1547,148, - Totals,,38,13418,409,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/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index 751024f5321..a86fdd321be 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,, diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index 903890f7ba2..432d9c2db67 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 @@ -23,5 +23,5 @@ Java framework & library support 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,125,6,22,18,,209 - Totals,,308,18953,2558,337,16,128,33,1,409 + Totals,,308,18953,2559,338,16,128,33,1,409 From 013ed7adb3f6d3a2db42da4c093bc67c599c2241 Mon Sep 17 00:00:00 2001 From: erik-krogh <erik-krogh@github.com> Date: Wed, 13 Mar 2024 09:51:35 +0100 Subject: [PATCH 310/430] Java: update the url-redirection in the same style as the C# qhelp --- .../src/Security/CWE/CWE-601/UrlRedirect.java | 14 ------ .../Security/CWE/CWE-601/UrlRedirect.qhelp | 46 ++++++++++++++++--- .../CWE/CWE-601/examples/UrlRedirect.java | 6 +++ .../CWE/CWE-601/examples/UrlRedirectGood.java | 16 +++++++ .../examples/UrlRedirectGoodDomain.java | 18 ++++++++ 5 files changed, 79 insertions(+), 21 deletions(-) delete mode 100644 java/ql/src/Security/CWE/CWE-601/UrlRedirect.java create mode 100644 java/ql/src/Security/CWE/CWE-601/examples/UrlRedirect.java create mode 100644 java/ql/src/Security/CWE/CWE-601/examples/UrlRedirectGood.java create mode 100644 java/ql/src/Security/CWE/CWE-601/examples/UrlRedirectGoodDomain.java 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..eddca4f62f6 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">XSS +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 From 3ef1ab49ea5ecab585cc0cde42b472b36a231ad1 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema <jketema@github.com> Date: Wed, 13 Mar 2024 12:00:02 +0100 Subject: [PATCH 311/430] C++: Add IR tests for the destruction of temporaries --- .../library-tests/ir/ir/PrintAST.expected | 368 +++++++++++++ .../library-tests/ir/ir/aliased_ir.expected | 493 ++++++++++++++++++ .../ir/ir/destructors_for_temps.cpp | 56 ++ .../ir/ir/operand_locations.expected | 438 ++++++++++++++++ .../test/library-tests/ir/ir/raw_ir.expected | 414 +++++++++++++++ 5 files changed, 1769 insertions(+) create mode 100644 cpp/ql/test/library-tests/ir/ir/destructors_for_temps.cpp diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 24501a4bcae..624954838d6 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -1728,6 +1728,374 @@ 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| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithDestructor2 & +# 1| [CopyConstructor] void ClassWithDestructor2::ClassWithDestructor2(ClassWithDestructor2 const&) +# 1| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithDestructor2 & +# 3| [Constructor] void ClassWithDestructor2::ClassWithDestructor2() +# 3| <params>: +# 4| [Destructor] void ClassWithDestructor2::~ClassWithDestructor2() +# 4| <params>: +# 6| [MemberFunction] char ClassWithDestructor2::get_x() +# 6| <params>: +# 9| [CopyAssignmentOperator] ClassWithConstructor& ClassWithConstructor::operator=(ClassWithConstructor const&) +# 9| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithConstructor & +# 9| [MoveAssignmentOperator] ClassWithConstructor& ClassWithConstructor::operator=(ClassWithConstructor&&) +# 9| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] ClassWithConstructor && +# 9| [CopyConstructor] void ClassWithConstructor::ClassWithConstructor(ClassWithConstructor const&) +# 9| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithConstructor & +# 9| [MoveConstructor] void ClassWithConstructor::ClassWithConstructor(ClassWithConstructor&&) +# 9| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] ClassWithConstructor && +# 9| <initializations>: +# 9| getEntryPoint(): [BlockStmt] { ... } +# 9| getStmt(0): [ReturnStmt] return ... +# 11| [Constructor] void ClassWithConstructor::ClassWithConstructor(char, char) +# 11| <params>: +# 11| getParameter(0): [Parameter] x +# 11| Type = [PlainCharType] char +# 11| getParameter(1): [Parameter] y +# 11| Type = [PlainCharType] char +# 14| [TopLevelFunction] char temp_test() +# 14| <params>: +# 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| <params>: +# 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<ClassWithDestructor2>() +# 27| <params>: +# 27| [TemplateFunction,TopLevelFunction] T returnValue<T>() +# 27| <params>: +# 29| [TopLevelFunction] void temp_test3() +# 29| <params>: +# 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 ... +# 33| [TopLevelFunction] void temp_test4() +# 33| <params>: +# 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(): [VariableAccess] c +# 36| Type = [Class] ClassWithDestructor2 +# 36| ValueCategory = lvalue +# 38| [TopLevelFunction] void temp_test5(bool) +# 38| <params>: +# 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| <params>: +# 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| <params>: +# 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| <params>: +# 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| <params>: 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..fe75f86cfc5 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<unknown>) = VariableAddress[#this] : +# 9| m9_6(glval<ClassWithConstructor>) = InitializeParameter[#this] : &:r9_5 +# 9| r9_7(glval<ClassWithConstructor>) = Load[#this] : &:r9_5, m9_6 +# 9| m9_8(ClassWithConstructor) = InitializeIndirection[#this] : &:r9_7 +#-----| r0_1(glval<ClassWithConstructor &&>) = 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<char>) = VariableAddress[x] : +# 15| r15_2(glval<ClassWithDestructor2>) = VariableAddress[#temp15:14] : +# 15| m15_3(ClassWithDestructor2) = Uninitialized[#temp15:14] : &:r15_2 +# 15| r15_4(glval<unknown>) = 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<unknown>) = 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<ClassWithConstructor>) = VariableAddress[y] : +# 16| m16_2(ClassWithConstructor) = Uninitialized[y] : &:r16_1 +# 16| r16_3(glval<unknown>) = FunctionAddress[ClassWithConstructor] : +# 16| r16_4(char) = Constant[97] : +# 16| r16_5(glval<ClassWithDestructor2>) = VariableAddress[#temp16:33] : +# 16| m16_6(ClassWithDestructor2) = Uninitialized[#temp16:33] : &:r16_5 +# 16| r16_7(glval<unknown>) = 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<unknown>) = 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<char>) = VariableAddress[#return] : +# 17| r17_2(glval<ClassWithDestructor2>) = VariableAddress[#temp17:12] : +# 17| m17_3(ClassWithDestructor2) = Uninitialized[#temp17:12] : &:r17_2 +# 17| r17_4(glval<unknown>) = 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<unknown>) = 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<char>) = 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<unknown>) = 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<unknown>) = 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<char>) = VariableAddress[#return] : +# 23| r23_2(glval<ClassWithDestructor2>) = VariableAddress[#temp23:12] : +# 23| m23_3(ClassWithDestructor2) = Uninitialized[#temp23:12] : &:r23_2 +# 23| r23_4(glval<unknown>) = 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<unknown>) = 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<ClassWithDestructor2>) = VariableAddress[#temp23:45] : +# 23| m23_19(ClassWithDestructor2) = Uninitialized[#temp23:45] : &:r23_18 +# 23| r23_20(glval<unknown>) = 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<unknown>) = 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<char>) = 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<ClassWithDestructor2 &>) = VariableAddress[rs] : +# 30| r30_2(glval<ClassWithDestructor2>) = VariableAddress[#temp30:38] : +# 30| r30_3(glval<unknown>) = 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<ClassWithDestructor2>) = 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<ClassWithDestructor2>) = VariableAddress[c] : +# 34| m34_2(ClassWithDestructor2) = Uninitialized[c] : &:r34_1 +# 34| r34_3(glval<unknown>) = 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<ClassWithDestructor2 &>) = VariableAddress[rs2] : +# 35| r35_2(glval<ClassWithDestructor2>) = VariableAddress[#temp35:39] : +# 35| r35_3(glval<unknown>) = 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<ClassWithDestructor2>) = 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<ClassWithDestructor2>) = VariableAddress[c] : +# 36| r36_3(glval<unknown>) = 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<bool>) = VariableAddress[b] : +# 38| m38_6(bool) = InitializeParameter[b] : &:r38_5 +# 39| r39_1(glval<ClassWithDestructor2>) = VariableAddress[#temp39:3] : +# 39| r39_2(glval<bool>) = 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<ClassWithDestructor2>) = 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<ClassWithDestructor2>) = VariableAddress[#temp39:7] : +# 39| m39_11(ClassWithDestructor2) = Uninitialized[#temp39:7] : &:r39_10 +# 39| r39_12(glval<unknown>) = 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<ClassWithDestructor2>) = VariableAddress[#temp39:3] : +# 39| m39_20(ClassWithDestructor2) = Store[#temp39:3] : &:r39_19, r39_18 +#-----| Goto -> Block 1 + +# 39| Block 3 +# 39| r39_21(glval<ClassWithDestructor2>) = VariableAddress[#temp39:32] : +# 39| m39_22(ClassWithDestructor2) = Uninitialized[#temp39:32] : &:r39_21 +# 39| r39_23(glval<unknown>) = 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<ClassWithDestructor2>) = 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<bool>) = VariableAddress[b] : +# 42| m42_6(bool) = InitializeParameter[b] : &:r42_5 +# 43| r43_1(glval<ClassWithDestructor2>) = VariableAddress[c] : +# 43| m43_2(ClassWithDestructor2) = Uninitialized[c] : &:r43_1 +# 43| r43_3(glval<unknown>) = 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<bool>) = 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<ClassWithConstructor>) = VariableAddress[#throw45:7] : +# 45| m45_2(ClassWithConstructor) = Uninitialized[#throw45:7] : &:r45_1 +# 45| r45_3(glval<unknown>) = FunctionAddress[ClassWithConstructor] : +# 45| r45_4(char) = Constant[120] : +# 45| r45_5(glval<ClassWithDestructor2>) = VariableAddress[#temp45:39] : +# 45| m45_6(ClassWithDestructor2) = Uninitialized[#temp45:39] : &:r45_5 +# 45| r45_7(glval<unknown>) = 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<unknown>) = 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<ClassWithDestructor2>) = VariableAddress[c] : +# 47| r47_3(glval<unknown>) = 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<bool>) = VariableAddress[b] : +# 49| m49_6(bool) = InitializeParameter[b] : &:r49_5 +# 50| r50_1(glval<ClassWithDestructor2>) = VariableAddress[c] : +# 50| m50_2(ClassWithDestructor2) = Uninitialized[c] : &:r50_1 +# 50| r50_3(glval<unknown>) = 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<ClassWithDestructor2>) = VariableAddress[#temp51:5] : +# 51| r51_2(glval<bool>) = 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<ClassWithConstructor>) = VariableAddress[#throw51:9] : +# 51| m51_6(ClassWithConstructor) = Uninitialized[#throw51:9] : &:r51_5 +# 51| r51_7(glval<unknown>) = FunctionAddress[ClassWithConstructor] : +# 51| r51_8(char) = Constant[120] : +# 51| r51_9(glval<ClassWithDestructor2>) = VariableAddress[#temp51:41] : +# 51| m51_10(ClassWithDestructor2) = Uninitialized[#temp51:41] : &:r51_9 +# 51| r51_11(glval<unknown>) = 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<unknown>) = 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<ClassWithDestructor2>) = VariableAddress[#temp51:75] : +# 51| m51_31(ClassWithDestructor2) = Uninitialized[#temp51:75] : &:r51_30 +# 51| r51_32(glval<unknown>) = 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<ClassWithDestructor2>) = VariableAddress[#temp51:5] : +# 51| m51_40(ClassWithDestructor2) = Store[#temp51:5] : &:r51_39, r51_38 +# 51| r51_41(glval<ClassWithDestructor2>) = 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<ClassWithDestructor2>) = VariableAddress[c] : +# 52| r52_3(glval<unknown>) = 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<bool>) = VariableAddress[b] : +# 54| m54_6(bool) = InitializeParameter[b] : &:r54_5 +# 55| r55_1(glval<ClassWithDestructor2>) = VariableAddress[#temp55:5] : +# 55| r55_2(glval<bool>) = 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<ClassWithConstructor>) = VariableAddress[#throw55:9] : +# 55| m55_6(ClassWithConstructor) = Uninitialized[#throw55:9] : &:r55_5 +# 55| r55_7(glval<unknown>) = FunctionAddress[ClassWithConstructor] : +# 55| r55_8(char) = Constant[120] : +# 55| r55_9(glval<ClassWithDestructor2>) = VariableAddress[#temp55:41] : +# 55| m55_10(ClassWithDestructor2) = Uninitialized[#temp55:41] : &:r55_9 +# 55| r55_11(glval<unknown>) = 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<unknown>) = 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<ClassWithDestructor2>) = VariableAddress[#temp55:75] : +# 55| m55_31(ClassWithDestructor2) = Uninitialized[#temp55:75] : &:r55_30 +# 55| r55_32(glval<unknown>) = 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<ClassWithDestructor2>) = VariableAddress[#temp55:5] : +# 55| m55_40(ClassWithDestructor2) = Store[#temp55:5] : &:r55_39, r55_38 +# 55| r55_41(glval<ClassWithDestructor2>) = 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 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<typename T> +T returnValue(); + +void temp_test3() { + const ClassWithDestructor2& rs = returnValue<ClassWithDestructor2>(); +} + +void temp_test4() { + ClassWithDestructor2 c; + const ClassWithDestructor2& rs2 = returnValue<ClassWithDestructor2>(); +} + +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/operand_locations.expected b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected index 6d9a76dc068..7f606978b58 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 | @@ -861,6 +1297,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 | @@ -900,6 +1337,7 @@ | 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 | 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 02bd6400025..671a9f6a0d3 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<unknown>) = VariableAddress[#this] : +# 9| mu9_5(glval<ClassWithConstructor>) = InitializeParameter[#this] : &:r9_4 +# 9| r9_6(glval<ClassWithConstructor>) = Load[#this] : &:r9_4, ~m? +# 9| mu9_7(ClassWithConstructor) = InitializeIndirection[#this] : &:r9_6 +#-----| r0_1(glval<ClassWithConstructor &&>) = 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<char>) = VariableAddress[x] : +# 15| r15_2(glval<ClassWithDestructor2>) = VariableAddress[#temp15:14] : +# 15| mu15_3(ClassWithDestructor2) = Uninitialized[#temp15:14] : &:r15_2 +# 15| r15_4(glval<unknown>) = 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<unknown>) = 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<ClassWithConstructor>) = VariableAddress[y] : +# 16| mu16_2(ClassWithConstructor) = Uninitialized[y] : &:r16_1 +# 16| r16_3(glval<unknown>) = FunctionAddress[ClassWithConstructor] : +# 16| r16_4(char) = Constant[97] : +# 16| r16_5(glval<ClassWithDestructor2>) = VariableAddress[#temp16:33] : +# 16| mu16_6(ClassWithDestructor2) = Uninitialized[#temp16:33] : &:r16_5 +# 16| r16_7(glval<unknown>) = 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<unknown>) = 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<char>) = VariableAddress[#return] : +# 17| r17_2(glval<ClassWithDestructor2>) = VariableAddress[#temp17:12] : +# 17| mu17_3(ClassWithDestructor2) = Uninitialized[#temp17:12] : &:r17_2 +# 17| r17_4(glval<unknown>) = 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<unknown>) = 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<char>) = 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<unknown>) = 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<unknown>) = 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<char>) = VariableAddress[#return] : +# 23| r23_2(glval<ClassWithDestructor2>) = VariableAddress[#temp23:12] : +# 23| mu23_3(ClassWithDestructor2) = Uninitialized[#temp23:12] : &:r23_2 +# 23| r23_4(glval<unknown>) = 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<unknown>) = 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<ClassWithDestructor2>) = VariableAddress[#temp23:45] : +# 23| mu23_15(ClassWithDestructor2) = Uninitialized[#temp23:45] : &:r23_14 +# 23| r23_16(glval<unknown>) = 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<unknown>) = 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<char>) = 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<ClassWithDestructor2 &>) = VariableAddress[rs] : +# 30| r30_2(glval<ClassWithDestructor2>) = VariableAddress[#temp30:38] : +# 30| r30_3(glval<unknown>) = 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<ClassWithDestructor2>) = 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<ClassWithDestructor2>) = VariableAddress[c] : +# 34| mu34_2(ClassWithDestructor2) = Uninitialized[c] : &:r34_1 +# 34| r34_3(glval<unknown>) = 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<ClassWithDestructor2 &>) = VariableAddress[rs2] : +# 35| r35_2(glval<ClassWithDestructor2>) = VariableAddress[#temp35:39] : +# 35| r35_3(glval<unknown>) = 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<ClassWithDestructor2>) = 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<ClassWithDestructor2>) = VariableAddress[c] : +# 36| r36_3(glval<unknown>) = 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<bool>) = VariableAddress[b] : +# 38| mu38_5(bool) = InitializeParameter[b] : &:r38_4 +# 39| r39_1(glval<ClassWithDestructor2>) = VariableAddress[#temp39:3] : +# 39| r39_2(glval<bool>) = 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<ClassWithDestructor2>) = 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<ClassWithDestructor2>) = VariableAddress[#temp39:7] : +# 39| mu39_9(ClassWithDestructor2) = Uninitialized[#temp39:7] : &:r39_8 +# 39| r39_10(glval<unknown>) = 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<ClassWithDestructor2>) = VariableAddress[#temp39:3] : +# 39| mu39_16(ClassWithDestructor2) = Store[#temp39:3] : &:r39_15, r39_14 +#-----| Goto -> Block 1 + +# 39| Block 3 +# 39| r39_17(glval<ClassWithDestructor2>) = VariableAddress[#temp39:32] : +# 39| mu39_18(ClassWithDestructor2) = Uninitialized[#temp39:32] : &:r39_17 +# 39| r39_19(glval<unknown>) = 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<ClassWithDestructor2>) = 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<bool>) = VariableAddress[b] : +# 42| mu42_5(bool) = InitializeParameter[b] : &:r42_4 +# 43| r43_1(glval<ClassWithDestructor2>) = VariableAddress[c] : +# 43| mu43_2(ClassWithDestructor2) = Uninitialized[c] : &:r43_1 +# 43| r43_3(glval<unknown>) = 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<bool>) = 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<ClassWithConstructor>) = VariableAddress[#throw45:7] : +# 45| mu45_2(ClassWithConstructor) = Uninitialized[#throw45:7] : &:r45_1 +# 45| r45_3(glval<unknown>) = FunctionAddress[ClassWithConstructor] : +# 45| r45_4(char) = Constant[120] : +# 45| r45_5(glval<ClassWithDestructor2>) = VariableAddress[#temp45:39] : +# 45| mu45_6(ClassWithDestructor2) = Uninitialized[#temp45:39] : &:r45_5 +# 45| r45_7(glval<unknown>) = 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<unknown>) = 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<ClassWithDestructor2>) = VariableAddress[c] : +# 47| r47_3(glval<unknown>) = 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<bool>) = VariableAddress[b] : +# 49| mu49_5(bool) = InitializeParameter[b] : &:r49_4 +# 50| r50_1(glval<ClassWithDestructor2>) = VariableAddress[c] : +# 50| mu50_2(ClassWithDestructor2) = Uninitialized[c] : &:r50_1 +# 50| r50_3(glval<unknown>) = 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<ClassWithDestructor2>) = VariableAddress[#temp51:5] : +# 51| r51_2(glval<bool>) = 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<ClassWithConstructor>) = VariableAddress[#throw51:9] : +# 51| mu51_6(ClassWithConstructor) = Uninitialized[#throw51:9] : &:r51_5 +# 51| r51_7(glval<unknown>) = FunctionAddress[ClassWithConstructor] : +# 51| r51_8(char) = Constant[120] : +# 51| r51_9(glval<ClassWithDestructor2>) = VariableAddress[#temp51:41] : +# 51| mu51_10(ClassWithDestructor2) = Uninitialized[#temp51:41] : &:r51_9 +# 51| r51_11(glval<unknown>) = 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<unknown>) = 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<ClassWithDestructor2>) = VariableAddress[#temp51:75] : +# 51| mu51_25(ClassWithDestructor2) = Uninitialized[#temp51:75] : &:r51_24 +# 51| r51_26(glval<unknown>) = 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<ClassWithDestructor2>) = VariableAddress[#temp51:5] : +# 51| mu51_32(ClassWithDestructor2) = Store[#temp51:5] : &:r51_31, r51_30 +# 51| r51_33(glval<ClassWithDestructor2>) = 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<ClassWithDestructor2>) = VariableAddress[c] : +# 52| r52_3(glval<unknown>) = 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<bool>) = VariableAddress[b] : +# 54| mu54_5(bool) = InitializeParameter[b] : &:r54_4 +# 55| r55_1(glval<ClassWithDestructor2>) = VariableAddress[#temp55:5] : +# 55| r55_2(glval<bool>) = 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<ClassWithConstructor>) = VariableAddress[#throw55:9] : +# 55| mu55_6(ClassWithConstructor) = Uninitialized[#throw55:9] : &:r55_5 +# 55| r55_7(glval<unknown>) = FunctionAddress[ClassWithConstructor] : +# 55| r55_8(char) = Constant[120] : +# 55| r55_9(glval<ClassWithDestructor2>) = VariableAddress[#temp55:41] : +# 55| mu55_10(ClassWithDestructor2) = Uninitialized[#temp55:41] : &:r55_9 +# 55| r55_11(glval<unknown>) = 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<unknown>) = 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<ClassWithDestructor2>) = VariableAddress[#temp55:75] : +# 55| mu55_25(ClassWithDestructor2) = Uninitialized[#temp55:75] : &:r55_24 +# 55| r55_26(glval<unknown>) = 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<ClassWithDestructor2>) = VariableAddress[#temp55:5] : +# 55| mu55_32(ClassWithDestructor2) = Store[#temp55:5] : &:r55_31, r55_30 +# 55| r55_33(glval<ClassWithDestructor2>) = 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 From 129286aa1c0fb67bd38704dca3ce24bda3c7ac18 Mon Sep 17 00:00:00 2001 From: erik-krogh <erik-krogh@github.com> Date: Wed, 13 Mar 2024 12:03:00 +0100 Subject: [PATCH 312/430] allow more flow through .filter() --- .../ql/lib/semmle/javascript/Arrays.qll | 5 ++- .../ReflectedXss/ReflectedXss.expected | 42 +++++++++++++++++++ .../CWE-079/ReflectedXss/ReflectedXss.js | 14 +++++++ .../ReflectedXssWithCustomSanitizer.expected | 2 + 4 files changed, 61 insertions(+), 2 deletions(-) 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/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 | From bcd36b1994ba35cfca2807af4e566368bdfba9fb Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Wed, 13 Mar 2024 11:39:15 +0000 Subject: [PATCH 313/430] C++: Recognize glib allocations and deallocations. --- .../semmle/code/cpp/models/implementations/Allocation.qll | 8 ++++++-- .../code/cpp/models/implementations/Deallocation.qll | 6 ++++-- 2 files changed, 10 insertions(+), 4 deletions(-) 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 From 3ea39a25536e750dd7601f55850dc3137e43f12c Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Wed, 13 Mar 2024 11:39:34 +0000 Subject: [PATCH 314/430] C++: Add some query tests. --- .../query-tests/Critical/MemoryFreed/DoubleFree.expected | 4 ++++ .../Critical/MemoryFreed/MemoryFreed.expected | 2 ++ .../test/query-tests/Critical/MemoryFreed/test_free.cpp | 7 +++++++ .../Security/CWE/CWE-193/InvalidPointerDeref.expected | 9 +++++++++ cpp/ql/test/query-tests/Security/CWE/CWE-193/test.cpp | 9 +++++++++ 5 files changed, 31 insertions(+) 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/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 From 465c3c18e37d9c9387b58f2c437967a480f89700 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Wed, 13 Mar 2024 11:49:26 +0000 Subject: [PATCH 315/430] C++: Add change note. --- cpp/ql/src/change-notes/2024-03-13-glib-alloc-and-dealloc.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/src/change-notes/2024-03-13-glib-alloc-and-dealloc.md 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. From 16cef92106caebbbfed72734df00cf64391063ef Mon Sep 17 00:00:00 2001 From: Tom Hvitved <hvitved@github.com> Date: Tue, 12 Mar 2024 11:08:18 +0100 Subject: [PATCH 316/430] JS: Add `DataFlow::Node.getLocation` --- config/identical-files.json | 3 +- javascript/ql/lib/semmle/javascript/AST.qll | 16 +- javascript/ql/lib/semmle/javascript/CFG.qll | 4 +- .../ql/lib/semmle/javascript/Comments.qll | 2 - .../ql/lib/semmle/javascript/Errors.qll | 2 - javascript/ql/lib/semmle/javascript/Files.qll | 3 +- javascript/ql/lib/semmle/javascript/HTML.qll | 8 - javascript/ql/lib/semmle/javascript/JSDoc.qll | 4 - javascript/ql/lib/semmle/javascript/JSON.qll | 12 +- javascript/ql/lib/semmle/javascript/Lines.qll | 2 - .../ql/lib/semmle/javascript/Locations.qll | 53 +++--- .../ql/lib/semmle/javascript/Regexp.qll | 2 - .../semmle/javascript/RestrictedLocations.qll | 2 +- .../ql/lib/semmle/javascript/Tokens.qll | 2 - .../ql/lib/semmle/javascript/Variables.qll | 4 +- javascript/ql/lib/semmle/javascript/XML.qll | 8 +- javascript/ql/lib/semmle/javascript/YAML.qll | 8 +- .../semmle/javascript/dataflow/DataFlow.qll | 8 + .../javascript/frameworks/Templating.qll | 9 +- .../javascript/internal/CachedStages.qll | 2 + .../semmle/javascript/internal/Locations.qll | 171 ++++++++++++++++++ .../internal/InlineExpectationsTestImpl.qll | 7 +- 22 files changed, 235 insertions(+), 97 deletions(-) create mode 100644 javascript/ql/lib/semmle/javascript/internal/Locations.qll diff --git a/config/identical-files.json b/config/identical-files.json index ce0e3a67f35..017fdd11481 100644 --- a/config/identical-files.json +++ b/config/identical-files.json @@ -255,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": [ @@ -372,4 +371,4 @@ "python/ql/test/experimental/dataflow/model-summaries/InlineTaintTest.ext.yml", "python/ql/test/experimental/dataflow/model-summaries/NormalDataflowTest.ext.yml" ] -} +} \ 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/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/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 c098c60816e..6d091a720af 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll @@ -152,6 +152,14 @@ module DataFlow { none() } + /** 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 this data flow node comes from. */ File getFile() { none() } // overridden in subclasses 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..09d52e89ee0 100644 --- a/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll +++ b/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll @@ -138,6 +138,8 @@ module Stages { or any(DataFlow::Node node).hasLocationInfo(_, _, _, _, _) or + exists(any(DataFlow::Node node).getLocation()) + or exists(any(DataFlow::Node node).toString()) or exists(any(AccessPath a).getAnInstanceIn(_)) 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..4a21f4a6b98 --- /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(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 } + + /** 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/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; From 8d5eab401d2ed411380f0c28d252b5c5333c57e5 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema <jketema@github.com> Date: Wed, 13 Mar 2024 13:28:27 +0100 Subject: [PATCH 317/430] C++: Introduce re-use expressions in the database scheme --- .../exprs.ql | 13 + .../old.dbscheme | 2250 +++++ .../semmlecode.cpp.dbscheme | 2244 +++++ .../upgrade.properties | 4 + cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll | 20 + cpp/ql/lib/semmlecode.cpp.dbscheme | 6 + cpp/ql/lib/semmlecode.cpp.dbscheme.stats | 8360 +++++++++-------- .../old.dbscheme | 2244 +++++ .../semmlecode.cpp.dbscheme | 2250 +++++ .../upgrade.properties | 2 + 10 files changed, 13274 insertions(+), 4119 deletions(-) create mode 100644 cpp/downgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/exprs.ql create mode 100644 cpp/downgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/old.dbscheme create mode 100644 cpp/downgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/semmlecode.cpp.dbscheme create mode 100644 cpp/downgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/upgrade.properties create mode 100644 cpp/ql/lib/upgrades/298438feb146335af824002589cd6d4e96e5dbf9/old.dbscheme create mode 100644 cpp/ql/lib/upgrades/298438feb146335af824002589cd6d4e96e5dbf9/semmlecode.cpp.dbscheme create mode 100644 cpp/ql/lib/upgrades/298438feb146335af824002589cd6d4e96e5dbf9/upgrade.properties 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/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/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 @@ <typesizes> <e> <k>@compilation</k> - <v>9695</v> + <v>9657</v> </e> <e> <k>@externalDataElement</k> @@ -18,71 +18,71 @@ </e> <e> <k>@location_default</k> - <v>29753112</v> + <v>29786456</v> </e> <e> <k>@location_stmt</k> - <v>3814280</v> - </e> - <e> - <k>@diagnostic</k> - <v>5192</v> - </e> - <e> - <k>@file</k> - <v>122996</v> - </e> - <e> - <k>@folder</k> - <v>15374</v> + <v>3820105</v> </e> <e> <k>@location_expr</k> - <v>13168606</v> + <v>13188716</v> + </e> + <e> + <k>@diagnostic</k> + <v>5013</v> + </e> + <e> + <k>@file</k> + <v>123134</v> + </e> + <e> + <k>@folder</k> + <v>16324</v> </e> <e> <k>@macro_expansion</k> - <v>33099938</v> + <v>32971750</v> </e> <e> <k>@other_macro_reference</k> - <v>857250</v> + <v>858211</v> </e> <e> <k>@function</k> - <v>4640799</v> + <v>4646000</v> </e> <e> <k>@fun_decl</k> - <v>5004199</v> + <v>5009807</v> </e> <e> <k>@var_decl</k> - <v>8413633</v> + <v>8423062</v> </e> <e> <k>@type_decl</k> - <v>3238449</v> + <v>3242079</v> </e> <e> <k>@namespace_decl</k> - <v>311526</v> + <v>311530</v> </e> <e> <k>@using</k> - <v>368990</v> + <v>369403</v> </e> <e> <k>@static_assert</k> - <v>134653</v> + <v>134655</v> </e> <e> <k>@parameter</k> - <v>6568681</v> + <v>6576042</v> </e> <e> <k>@membervariable</k> - <v>1053150</v> + <v>1054758</v> </e> <e> <k>@globalvariable</k> @@ -90,259 +90,259 @@ </e> <e> <k>@localvariable</k> - <v>577491</v> + <v>576906</v> </e> <e> <k>@enumconstant</k> - <v>241316</v> + <v>241684</v> </e> <e> <k>@errortype</k> - <v>465</v> + <v>466</v> </e> <e> <k>@unknowntype</k> - <v>465</v> + <v>466</v> </e> <e> <k>@void</k> - <v>465</v> + <v>466</v> </e> <e> <k>@boolean</k> - <v>465</v> + <v>466</v> </e> <e> <k>@char</k> - <v>465</v> + <v>466</v> </e> <e> <k>@unsigned_char</k> - <v>465</v> + <v>466</v> </e> <e> <k>@signed_char</k> - <v>465</v> + <v>466</v> </e> <e> <k>@short</k> - <v>465</v> + <v>466</v> </e> <e> <k>@unsigned_short</k> - <v>465</v> + <v>466</v> </e> <e> <k>@signed_short</k> - <v>465</v> + <v>466</v> </e> <e> <k>@int</k> - <v>465</v> + <v>466</v> </e> <e> <k>@unsigned_int</k> - <v>465</v> + <v>466</v> </e> <e> <k>@signed_int</k> - <v>465</v> + <v>466</v> </e> <e> <k>@long</k> - <v>465</v> + <v>466</v> </e> <e> <k>@unsigned_long</k> - <v>465</v> + <v>466</v> </e> <e> <k>@signed_long</k> - <v>465</v> + <v>466</v> </e> <e> <k>@long_long</k> - <v>465</v> + <v>466</v> </e> <e> <k>@unsigned_long_long</k> - <v>465</v> + <v>466</v> </e> <e> <k>@signed_long_long</k> - <v>465</v> + <v>466</v> </e> <e> <k>@float</k> - <v>465</v> + <v>466</v> </e> <e> <k>@double</k> - <v>465</v> + <v>466</v> </e> <e> <k>@long_double</k> - <v>465</v> + <v>466</v> </e> <e> <k>@complex_float</k> - <v>465</v> + <v>466</v> </e> <e> <k>@complex_double</k> - <v>465</v> + <v>466</v> </e> <e> <k>@complex_long_double</k> - <v>465</v> + <v>466</v> </e> <e> <k>@imaginary_float</k> - <v>465</v> + <v>466</v> </e> <e> <k>@imaginary_double</k> - <v>465</v> + <v>466</v> </e> <e> <k>@imaginary_long_double</k> - <v>465</v> + <v>466</v> </e> <e> <k>@wchar_t</k> - <v>465</v> + <v>466</v> </e> <e> <k>@decltype_nullptr</k> - <v>465</v> + <v>466</v> </e> <e> <k>@int128</k> - <v>465</v> + <v>466</v> </e> <e> <k>@unsigned_int128</k> - <v>465</v> + <v>466</v> </e> <e> <k>@signed_int128</k> - <v>465</v> + <v>466</v> </e> <e> <k>@float128</k> - <v>465</v> + <v>466</v> </e> <e> <k>@complex_float128</k> - <v>465</v> + <v>466</v> </e> <e> <k>@decimal32</k> - <v>465</v> + <v>466</v> </e> <e> <k>@decimal64</k> - <v>465</v> + <v>466</v> </e> <e> <k>@decimal128</k> - <v>465</v> + <v>466</v> </e> <e> <k>@char16_t</k> - <v>465</v> + <v>466</v> </e> <e> <k>@char32_t</k> - <v>465</v> + <v>466</v> </e> <e> <k>@std_float32</k> - <v>465</v> + <v>466</v> </e> <e> <k>@float32x</k> - <v>465</v> + <v>466</v> </e> <e> <k>@std_float64</k> - <v>465</v> + <v>466</v> </e> <e> <k>@float64x</k> - <v>465</v> + <v>466</v> </e> <e> <k>@std_float128</k> - <v>465</v> + <v>466</v> </e> <e> <k>@char8_t</k> - <v>465</v> + <v>466</v> </e> <e> <k>@float16</k> - <v>465</v> + <v>466</v> </e> <e> <k>@complex_float16</k> - <v>465</v> + <v>466</v> </e> <e> <k>@fp16</k> - <v>465</v> + <v>466</v> </e> <e> <k>@std_bfloat16</k> - <v>465</v> + <v>466</v> </e> <e> <k>@std_float16</k> - <v>465</v> + <v>466</v> </e> <e> <k>@complex_std_float32</k> - <v>465</v> + <v>466</v> </e> <e> <k>@complex_float32x</k> - <v>465</v> + <v>466</v> </e> <e> <k>@complex_std_float64</k> - <v>465</v> + <v>466</v> </e> <e> <k>@complex_float64x</k> - <v>465</v> + <v>466</v> </e> <e> <k>@complex_std_float128</k> - <v>465</v> + <v>466</v> </e> <e> <k>@pointer</k> - <v>566996</v> + <v>567632</v> </e> <e> <k>@type_with_specifiers</k> - <v>1010530</v> + <v>1010263</v> </e> <e> <k>@array</k> - <v>109951</v> + <v>110074</v> </e> <e> <k>@routineptr</k> - <v>633361</v> + <v>624659</v> </e> <e> <k>@reference</k> - <v>1727994</v> + <v>1721148</v> </e> <e> <k>@gnu_vector</k> - <v>696</v> + <v>693</v> </e> <e> <k>@routinereference</k> @@ -350,7 +350,7 @@ </e> <e> <k>@rvalue_reference</k> - <v>627137</v> + <v>620692</v> </e> <e> <k>@block</k> @@ -358,43 +358,43 @@ </e> <e> <k>@decltype</k> - <v>27022</v> + <v>27052</v> </e> <e> <k>@usertype</k> - <v>5224568</v> + <v>5229957</v> </e> <e> <k>@mangledname</k> - <v>6441025</v> + <v>6448244</v> </e> <e> <k>@type_mention</k> - <v>4023226</v> + <v>4029370</v> </e> <e> <k>@routinetype</k> - <v>545338</v> + <v>538161</v> </e> <e> <k>@ptrtomember</k> - <v>37737</v> + <v>37779</v> </e> <e> <k>@specifier</k> - <v>24692</v> + <v>24720</v> </e> <e> <k>@gnuattribute</k> - <v>684868</v> + <v>685636</v> </e> <e> <k>@stdattribute</k> - <v>491954</v> + <v>487895</v> </e> <e> <k>@declspec</k> - <v>243213</v> + <v>243123</v> </e> <e> <k>@msattribute</k> @@ -402,15 +402,15 @@ </e> <e> <k>@alignas</k> - <v>9783</v> + <v>9794</v> </e> <e> <k>@attribute_arg_token</k> - <v>39135</v> + <v>39179</v> </e> <e> <k>@attribute_arg_constant_expr</k> - <v>369922</v> + <v>370336</v> </e> <e> <k>@attribute_arg_empty</k> @@ -422,7 +422,7 @@ </e> <e> <k>@attribute_arg_type</k> - <v>465</v> + <v>466</v> </e> <e> <k>@attribute_arg_expr</k> @@ -430,35 +430,35 @@ </e> <e> <k>@derivation</k> - <v>395209</v> + <v>391086</v> </e> <e> <k>@frienddecl</k> - <v>713754</v> + <v>706182</v> </e> <e> <k>@comment</k> - <v>8751514</v> + <v>8686670</v> </e> <e> <k>@namespace</k> - <v>12113</v> + <v>12126</v> </e> <e> <k>@specialnamequalifyingelement</k> - <v>465</v> + <v>466</v> </e> <e> <k>@namequalifier</k> - <v>1570954</v> + <v>1516804</v> </e> <e> <k>@value</k> - <v>10760930</v> + <v>10777325</v> </e> <e> <k>@initialiser</k> - <v>1710236</v> + <v>1710241</v> </e> <e> <k>@address_of</k> @@ -466,15 +466,15 @@ </e> <e> <k>@indirect</k> - <v>292216</v> + <v>292663</v> </e> <e> <k>@array_to_pointer</k> - <v>1428793</v> + <v>1430922</v> </e> <e> <k>@parexpr</k> - <v>3582350</v> + <v>3587688</v> </e> <e> <k>@arithnegexpr</k> @@ -482,115 +482,115 @@ </e> <e> <k>@unaryplusexpr</k> - <v>2912</v> + <v>2916</v> </e> <e> <k>@complementexpr</k> - <v>27796</v> + <v>27839</v> </e> <e> <k>@notexpr</k> - <v>276021</v> + <v>276441</v> </e> <e> <k>@postincrexpr</k> - <v>61954</v> + <v>62049</v> </e> <e> <k>@postdecrexpr</k> - <v>41975</v> + <v>42038</v> </e> <e> <k>@preincrexpr</k> - <v>70470</v> + <v>70577</v> </e> <e> <k>@predecrexpr</k> - <v>26169</v> + <v>26209</v> </e> <e> <k>@conditionalexpr</k> - <v>656298</v> + <v>657276</v> </e> <e> <k>@addexpr</k> - <v>397812</v> + <v>398417</v> </e> <e> <k>@subexpr</k> - <v>340271</v> + <v>340778</v> </e> <e> <k>@mulexpr</k> - <v>305908</v> + <v>306374</v> </e> <e> <k>@divexpr</k> - <v>132972</v> + <v>133174</v> </e> <e> <k>@remexpr</k> - <v>15790</v> + <v>15622</v> </e> <e> <k>@paddexpr</k> - <v>86535</v> + <v>86667</v> </e> <e> <k>@psubexpr</k> - <v>49827</v> + <v>49903</v> </e> <e> <k>@pdiffexpr</k> - <v>35355</v> + <v>35197</v> </e> <e> <k>@lshiftexpr</k> - <v>565475</v> + <v>566336</v> </e> <e> <k>@rshiftexpr</k> - <v>140634</v> + <v>140848</v> </e> <e> <k>@andexpr</k> - <v>488341</v> + <v>489084</v> </e> <e> <k>@orexpr</k> - <v>145252</v> + <v>145473</v> </e> <e> <k>@xorexpr</k> - <v>54095</v> + <v>54178</v> </e> <e> <k>@eqexpr</k> - <v>469960</v> + <v>470677</v> </e> <e> <k>@neexpr</k> - <v>301236</v> + <v>301684</v> </e> <e> <k>@gtexpr</k> - <v>103895</v> + <v>104011</v> </e> <e> <k>@ltexpr</k> - <v>101565</v> + <v>101679</v> </e> <e> <k>@geexpr</k> - <v>59162</v> + <v>59252</v> </e> <e> <k>@leexpr</k> - <v>212214</v> + <v>212539</v> </e> <e> <k>@assignexpr</k> - <v>935582</v> + <v>937011</v> </e> <e> <k>@assignaddexpr</k> @@ -598,23 +598,23 @@ </e> <e> <k>@assignsubexpr</k> - <v>11183</v> + <v>11200</v> </e> <e> <k>@assignmulexpr</k> - <v>8246</v> + <v>8214</v> </e> <e> <k>@assigndivexpr</k> - <v>4986</v> + <v>4994</v> </e> <e> <k>@assignremexpr</k> - <v>417</v> + <v>414</v> </e> <e> <k>@assignlshiftexpr</k> - <v>2712</v> + <v>2716</v> </e> <e> <k>@assignrshiftexpr</k> @@ -622,43 +622,43 @@ </e> <e> <k>@assignandexpr</k> - <v>4819</v> + <v>4826</v> </e> <e> <k>@assignorexpr</k> - <v>23678</v> + <v>23654</v> </e> <e> <k>@assignxorexpr</k> - <v>21812</v> + <v>21845</v> </e> <e> <k>@assignpaddexpr</k> - <v>13608</v> + <v>13629</v> </e> <e> <k>@assignpsubexpr</k> - <v>1151</v> + <v>1152</v> </e> <e> <k>@andlogicalexpr</k> - <v>249586</v> + <v>249967</v> </e> <e> <k>@orlogicalexpr</k> - <v>864846</v> + <v>866161</v> </e> <e> <k>@commaexpr</k> - <v>123692</v> + <v>122776</v> </e> <e> <k>@subscriptexpr</k> - <v>365254</v> + <v>364887</v> </e> <e> <k>@callexpr</k> - <v>301901</v> + <v>316232</v> </e> <e> <k>@vastartexpr</k> @@ -666,51 +666,51 @@ </e> <e> <k>@vaargexpr</k> - <v>950</v> + <v>952</v> </e> <e> <k>@vaendexpr</k> - <v>2795</v> + <v>2798</v> </e> <e> <k>@vacopyexpr</k> - <v>140</v> + <v>139</v> </e> <e> <k>@varaccess</k> - <v>6020283</v> + <v>6029477</v> </e> <e> <k>@runtime_sizeof</k> - <v>295403</v> + <v>295853</v> </e> <e> <k>@runtime_alignof</k> - <v>49726</v> + <v>49198</v> </e> <e> <k>@expr_stmt</k> - <v>94249</v> + <v>94392</v> </e> <e> <k>@routineexpr</k> - <v>2925479</v> + <v>3151079</v> </e> <e> <k>@type_operand</k> - <v>1127108</v> + <v>1128821</v> </e> <e> <k>@offsetofexpr</k> - <v>19963</v> + <v>19994</v> </e> <e> <k>@typescompexpr</k> - <v>562954</v> + <v>563810</v> </e> <e> <k>@literal</k> - <v>4406828</v> + <v>4406917</v> </e> <e> <k>@aggregateliteral</k> @@ -718,31 +718,31 @@ </e> <e> <k>@c_style_cast</k> - <v>4210119</v> + <v>4210103</v> </e> <e> <k>@temp_init</k> - <v>825128</v> + <v>796653</v> </e> <e> <k>@errorexpr</k> - <v>46737</v> + <v>46241</v> </e> <e> <k>@reference_to</k> - <v>1587202</v> + <v>1570260</v> </e> <e> <k>@ref_indirect</k> - <v>1932263</v> + <v>1906893</v> </e> <e> <k>@vacuous_destructor_call</k> - <v>8123</v> + <v>8037</v> </e> <e> <k>@assume</k> - <v>3230</v> + <v>3231</v> </e> <e> <k>@conjugation</k> @@ -794,35 +794,35 @@ </e> <e> <k>@thisaccess</k> - <v>1117234</v> + <v>1117586</v> </e> <e> <k>@new_expr</k> - <v>47510</v> + <v>47006</v> </e> <e> <k>@delete_expr</k> - <v>11710</v> + <v>11621</v> </e> <e> <k>@throw_expr</k> - <v>21143</v> + <v>21061</v> </e> <e> <k>@condition_decl</k> - <v>42306</v> + <v>40853</v> </e> <e> <k>@braced_init_list</k> - <v>1105</v> + <v>1067</v> </e> <e> <k>@type_id</k> - <v>36362</v> + <v>35977</v> </e> <e> <k>@sizeof_pack</k> - <v>5590</v> + <v>5597</v> </e> <e> <k>@hasassignexpr</k> @@ -878,19 +878,19 @@ </e> <e> <k>@isconvtoexpr</k> - <v>208</v> + <v>207</v> </e> <e> <k>@isemptyexpr</k> - <v>1477</v> + <v>1461</v> </e> <e> <k>@isenumexpr</k> - <v>521</v> + <v>517</v> </e> <e> <k>@ispodexpr</k> - <v>617</v> + <v>615</v> </e> <e> <k>@ispolyexpr</k> @@ -906,7 +906,7 @@ </e> <e> <k>@hastrivialdestructor</k> - <v>465</v> + <v>466</v> </e> <e> <k>@uuidof</k> @@ -914,7 +914,7 @@ </e> <e> <k>@delete_array_expr</k> - <v>1370</v> + <v>1365</v> </e> <e> <k>@new_array_expr</k> @@ -926,55 +926,55 @@ </e> <e> <k>@ctordirectinit</k> - <v>112605</v> + <v>111410</v> </e> <e> <k>@ctorvirtualinit</k> - <v>6347</v> + <v>6322</v> </e> <e> <k>@ctorfieldinit</k> - <v>200453</v> + <v>198326</v> </e> <e> <k>@ctordelegatinginit</k> - <v>3340</v> + <v>3305</v> </e> <e> <k>@dtordirectdestruct</k> - <v>41638</v> + <v>41231</v> </e> <e> <k>@dtorvirtualdestruct</k> - <v>4114</v> + <v>4070</v> </e> <e> <k>@dtorfielddestruct</k> - <v>41567</v> + <v>41126</v> </e> <e> <k>@static_cast</k> - <v>215292</v> + <v>214451</v> </e> <e> <k>@reinterpret_cast</k> - <v>30975</v> + <v>30745</v> </e> <e> <k>@const_cast</k> - <v>35251</v> + <v>34990</v> </e> <e> <k>@dynamic_cast</k> - <v>1011</v> + <v>1007</v> </e> <e> <k>@lambdaexpr</k> - <v>21431</v> + <v>21455</v> </e> <e> <k>@param_ref</k> - <v>244956</v> + <v>236428</v> </e> <e> <k>@noopexpr</k> @@ -982,7 +982,7 @@ </e> <e> <k>@istriviallyconstructibleexpr</k> - <v>1355</v> + <v>1345</v> </e> <e> <k>@isdestructibleexpr</k> @@ -994,7 +994,7 @@ </e> <e> <k>@istriviallydestructibleexpr</k> - <v>834</v> + <v>828</v> </e> <e> <k>@istriviallyassignableexpr</k> @@ -1002,11 +1002,11 @@ </e> <e> <k>@isnothrowassignableexpr</k> - <v>4171</v> + <v>4140</v> </e> <e> <k>@istrivialexpr</k> - <v>931</v> + <v>932</v> </e> <e> <k>@isstandardlayoutexpr</k> @@ -1014,7 +1014,7 @@ </e> <e> <k>@istriviallycopyableexpr</k> - <v>3727</v> + <v>3731</v> </e> <e> <k>@isliteraltypeexpr</k> @@ -1034,11 +1034,11 @@ </e> <e> <k>@isconstructibleexpr</k> - <v>465</v> + <v>466</v> </e> <e> <k>@isnothrowconstructibleexpr</k> - <v>14392</v> + <v>14285</v> </e> <e> <k>@hasfinalizerexpr</k> @@ -1074,11 +1074,11 @@ </e> <e> <k>@isfinalexpr</k> - <v>1688</v> + <v>1670</v> </e> <e> <k>@noexceptexpr</k> - <v>25664</v> + <v>24725</v> </e> <e> <k>@builtinshufflevector</k> @@ -1086,11 +1086,11 @@ </e> <e> <k>@builtinchooseexpr</k> - <v>9051</v> + <v>9065</v> </e> <e> <k>@builtinaddressof</k> - <v>13258</v> + <v>13117</v> </e> <e> <k>@vec_fill</k> @@ -1134,7 +1134,7 @@ </e> <e> <k>@builtinshuffle</k> - <v>1909</v> + <v>1902</v> </e> <e> <k>@blockassignexpr</k> @@ -1248,77 +1248,81 @@ <k>@isvolatile</k> <v>2</v> </e> + <e> + <k>@reuseexpr</k> + <v>331632</v> + </e> <e> <k>@lambdacapture</k> - <v>27953</v> + <v>27985</v> </e> <e> <k>@stmt_expr</k> - <v>1483845</v> + <v>1486111</v> </e> <e> <k>@stmt_if</k> - <v>724849</v> + <v>725956</v> </e> <e> <k>@stmt_while</k> - <v>29345</v> + <v>29152</v> </e> <e> <k>@stmt_goto</k> - <v>110529</v> + <v>110697</v> </e> <e> <k>@stmt_label</k> - <v>53064</v> + <v>53145</v> </e> <e> <k>@stmt_return</k> - <v>1283546</v> + <v>1284984</v> </e> <e> <k>@stmt_block</k> - <v>1422383</v> + <v>1423977</v> </e> <e> <k>@stmt_end_test_while</k> - <v>148655</v> + <v>148882</v> </e> <e> <k>@stmt_for</k> - <v>61466</v> + <v>61560</v> </e> <e> <k>@stmt_switch_case</k> - <v>209046</v> + <v>201865</v> </e> <e> <k>@stmt_switch</k> - <v>20756</v> + <v>20788</v> </e> <e> <k>@stmt_asm</k> - <v>109821</v> + <v>109989</v> </e> <e> <k>@stmt_decl</k> - <v>591603</v> + <v>589211</v> </e> <e> <k>@stmt_empty</k> - <v>192088</v> + <v>191899</v> </e> <e> <k>@stmt_continue</k> - <v>22529</v> + <v>22563</v> </e> <e> <k>@stmt_break</k> - <v>103194</v> + <v>103183</v> </e> <e> <k>@stmt_try_block</k> - <v>46788</v> + <v>45181</v> </e> <e> <k>@stmt_microsoft_try</k> @@ -1334,19 +1338,19 @@ </e> <e> <k>@stmt_assigned_goto</k> - <v>9062</v> + <v>9076</v> </e> <e> <k>@stmt_range_based_for</k> - <v>8386</v> + <v>8395</v> </e> <e> <k>@stmt_handler</k> - <v>65128</v> + <v>62891</v> </e> <e> <k>@stmt_constexpr_if</k> - <v>52355</v> + <v>52071</v> </e> <e> <k>@stmt_co_return</k> @@ -1354,55 +1358,55 @@ </e> <e> <k>@ppd_if</k> - <v>665766</v> + <v>666512</v> </e> <e> <k>@ppd_ifdef</k> - <v>262765</v> + <v>263060</v> </e> <e> <k>@ppd_ifndef</k> - <v>266027</v> + <v>266325</v> </e> <e> <k>@ppd_elif</k> - <v>25158</v> + <v>25186</v> </e> <e> <k>@ppd_else</k> - <v>208721</v> + <v>208955</v> </e> <e> <k>@ppd_endif</k> - <v>1194559</v> + <v>1195898</v> </e> <e> <k>@ppd_plain_include</k> - <v>310753</v> + <v>311101</v> </e> <e> <k>@ppd_define</k> - <v>2426503</v> + <v>2408524</v> </e> <e> <k>@ppd_undef</k> - <v>258106</v> + <v>258396</v> </e> <e> <k>@ppd_include_next</k> - <v>1863</v> + <v>1865</v> </e> <e> <k>@ppd_line</k> - <v>27580</v> + <v>27551</v> </e> <e> <k>@ppd_error</k> - <v>104</v> + <v>103</v> </e> <e> <k>@ppd_pragma</k> - <v>314133</v> + <v>311805</v> </e> <e> <k>@ppd_objc_import</k> @@ -1414,7 +1418,7 @@ </e> <e> <k>@link_target</k> - <v>848</v> + <v>819</v> </e> <e> <k>@xmldtd</k> @@ -1444,11 +1448,11 @@ <stats> <relation> <name>compilations</name> - <cardinality>9695</cardinality> + <cardinality>9657</cardinality> <columnsizes> <e> <k>id</k> - <v>9695</v> + <v>9657</v> </e> <e> <k>cwd</k> @@ -1466,7 +1470,7 @@ <b> <a>1</a> <b>2</b> - <v>9695</v> + <v>9657</v> </b> </bs> </hist> @@ -1492,19 +1496,19 @@ </relation> <relation> <name>compilation_args</name> - <cardinality>651597</cardinality> + <cardinality>652589</cardinality> <columnsizes> <e> <k>id</k> - <v>5506</v> + <v>5514</v> </e> <e> <k>num</k> - <v>708</v> + <v>709</v> </e> <e> <k>arg</k> - <v>34410</v> + <v>34463</v> </e> </columnsizes> <dependencies> @@ -1523,12 +1527,12 @@ <b> <a>71</a> <b>102</b> - <v>274</v> + <v>275</v> </b> <b> <a>126</a> <b>127</b> - <v>3862</v> + <v>3868</v> </b> <b> <a>127</a> @@ -1538,7 +1542,7 @@ <b> <a>131</a> <b>132</b> - <v>813</v> + <v>815</v> </b> <b> <a>134</a> @@ -1564,12 +1568,12 @@ <b> <a>57</a> <b>106</b> - <v>290</v> + <v>291</v> </b> <b> <a>106</a> <b>107</b> - <v>3825</v> + <v>3831</v> </b> <b> <a>107</a> @@ -1579,7 +1583,7 @@ <b> <a>109</a> <b>110</b> - <v>813</v> + <v>815</v> </b> <b> <a>111</a> @@ -1625,12 +1629,12 @@ <b> <a>970</a> <b>989</b> - <v>36</v> + <v>37</v> </b> <b> <a>999</a> <b>1000</b> - <v>73</v> + <v>74</v> </b> <b> <a>1001</a> @@ -1742,12 +1746,12 @@ <b> <a>1</a> <b>2</b> - <v>32350</v> + <v>32399</v> </b> <b> <a>2</a> <b>1043</b> - <v>2060</v> + <v>2063</v> </b> </bs> </hist> @@ -1763,12 +1767,12 @@ <b> <a>1</a> <b>2</b> - <v>33206</v> + <v>33256</v> </b> <b> <a>2</a> <b>56</b> - <v>1204</v> + <v>1206</v> </b> </bs> </hist> @@ -1778,19 +1782,19 @@ </relation> <relation> <name>compilation_compiling_files</name> - <cardinality>11529</cardinality> + <cardinality>11546</cardinality> <columnsizes> <e> <k>id</k> - <v>1994</v> + <v>1997</v> </e> <e> <k>num</k> - <v>3311</v> + <v>3316</v> </e> <e> <k>file</k> - <v>10013</v> + <v>10028</v> </e> </columnsizes> <dependencies> @@ -1804,7 +1808,7 @@ <b> <a>1</a> <b>2</b> - <v>997</v> + <v>998</v> </b> <b> <a>2</a> @@ -1855,7 +1859,7 @@ <b> <a>1</a> <b>2</b> - <v>997</v> + <v>998</v> </b> <b> <a>2</a> @@ -1906,12 +1910,12 @@ <b> <a>1</a> <b>2</b> - <v>1755</v> + <v>1757</v> </b> <b> <a>2</a> <b>3</b> - <v>718</v> + <v>719</v> </b> <b> <a>3</a> @@ -1942,12 +1946,12 @@ <b> <a>1</a> <b>2</b> - <v>1755</v> + <v>1757</v> </b> <b> <a>2</a> <b>3</b> - <v>718</v> + <v>719</v> </b> <b> <a>3</a> @@ -1978,12 +1982,12 @@ <b> <a>1</a> <b>2</b> - <v>9015</v> + <v>9029</v> </b> <b> <a>2</a> <b>4</b> - <v>837</v> + <v>839</v> </b> <b> <a>4</a> @@ -2004,12 +2008,12 @@ <b> <a>1</a> <b>2</b> - <v>9175</v> + <v>9189</v> </b> <b> <a>2</a> <b>4</b> - <v>797</v> + <v>799</v> </b> <b> <a>4</a> @@ -2024,15 +2028,15 @@ </relation> <relation> <name>compilation_time</name> - <cardinality>46116</cardinality> + <cardinality>46187</cardinality> <columnsizes> <e> <k>id</k> - <v>1994</v> + <v>1997</v> </e> <e> <k>num</k> - <v>3311</v> + <v>3316</v> </e> <e> <k>kind</k> @@ -2040,7 +2044,7 @@ </e> <e> <k>seconds</k> - <v>9933</v> + <v>9828</v> </e> </columnsizes> <dependencies> @@ -2054,7 +2058,7 @@ <b> <a>1</a> <b>2</b> - <v>997</v> + <v>998</v> </b> <b> <a>2</a> @@ -2105,7 +2109,7 @@ <b> <a>4</a> <b>5</b> - <v>1994</v> + <v>1997</v> </b> </bs> </hist> @@ -2121,51 +2125,46 @@ <b> <a>3</a> <b>4</b> - <v>359</v> + <v>719</v> </b> <b> <a>4</a> <b>5</b> - <v>638</v> + <v>279</v> </b> <b> - <a>6</a> + <a>5</a> <b>8</b> <v>159</v> </b> <b> - <a>8</a> + <a>9</a> <b>10</b> - <v>79</v> + <v>159</v> </b> <b> <a>10</a> - <b>11</b> - <v>119</v> - </b> - <b> - <a>11</a> - <b>13</b> + <b>12</b> <v>159</v> </b> <b> - <a>14</a> - <b>17</b> + <a>12</a> + <b>16</b> <v>119</v> </b> <b> - <a>17</a> - <b>19</b> - <v>119</v> - </b> - <b> - <a>20</a> - <b>41</b> + <a>16</a> + <b>18</b> <v>159</v> </b> <b> - <a>52</a> - <b>102</b> + <a>19</a> + <b>43</b> + <v>159</v> + </b> + <b> + <a>57</a> + <b>92</b> <v>79</v> </b> </bs> @@ -2182,12 +2181,12 @@ <b> <a>1</a> <b>2</b> - <v>1755</v> + <v>1757</v> </b> <b> <a>2</a> <b>3</b> - <v>718</v> + <v>719</v> </b> <b> <a>3</a> @@ -2218,7 +2217,7 @@ <b> <a>4</a> <b>5</b> - <v>3311</v> + <v>3316</v> </b> </bs> </hist> @@ -2234,12 +2233,12 @@ <b> <a>3</a> <b>4</b> - <v>837</v> + <v>1478</v> </b> <b> <a>4</a> <b>5</b> - <v>917</v> + <v>279</v> </b> <b> <a>5</a> @@ -2249,33 +2248,28 @@ <b> <a>6</a> <b>7</b> - <v>199</v> + <v>439</v> </b> <b> <a>7</a> <b>8</b> - <v>319</v> + <v>119</v> </b> <b> <a>8</a> <b>9</b> - <v>79</v> + <v>199</v> </b> <b> <a>9</a> - <b>11</b> + <b>23</b> <v>279</v> </b> <b> - <a>11</a> - <b>29</b> + <a>24</a> + <b>90</b> <v>279</v> </b> - <b> - <a>32</a> - <b>93</b> - <v>159</v> - </b> </bs> </hist> </val> @@ -2335,8 +2329,8 @@ <v>39</v> </b> <b> - <a>156</a> - <b>157</b> + <a>146</a> + <b>147</b> <v>39</v> </b> </bs> @@ -2353,27 +2347,27 @@ <b> <a>1</a> <b>2</b> - <v>4946</v> + <v>4834</v> </b> <b> <a>2</a> <b>3</b> - <v>2473</v> + <v>2557</v> </b> <b> <a>3</a> <b>4</b> - <v>1436</v> + <v>1238</v> </b> <b> <a>4</a> <b>5</b> - <v>757</v> + <v>719</v> </b> <b> <a>5</a> <b>46</b> - <v>319</v> + <v>479</v> </b> </bs> </hist> @@ -2389,32 +2383,32 @@ <b> <a>1</a> <b>2</b> - <v>4667</v> + <v>4474</v> </b> <b> <a>2</a> <b>3</b> - <v>1914</v> + <v>2197</v> </b> <b> <a>3</a> <b>4</b> - <v>1476</v> + <v>1318</v> </b> <b> <a>4</a> <b>5</b> - <v>997</v> + <v>679</v> </b> <b> <a>5</a> - <b>10</b> - <v>757</v> + <b>7</b> + <v>799</v> </b> <b> - <a>43</a> - <b>75</b> - <v>119</v> + <a>7</a> + <b>76</b> + <v>359</v> </b> </bs> </hist> @@ -2430,12 +2424,12 @@ <b> <a>1</a> <b>2</b> - <v>7938</v> + <v>8110</v> </b> <b> <a>2</a> <b>3</b> - <v>1994</v> + <v>1718</v> </b> </bs> </hist> @@ -2445,15 +2439,15 @@ </relation> <relation> <name>diagnostic_for</name> - <cardinality>5665</cardinality> + <cardinality>5471</cardinality> <columnsizes> <e> <k>diagnostic</k> - <v>5192</v> + <v>5013</v> </e> <e> <k>compilation</k> - <v>848</v> + <v>819</v> </e> <e> <k>file_number</k> @@ -2461,7 +2455,7 @@ </e> <e> <k>file_number_diagnostic_number</k> - <v>414</v> + <v>400</v> </e> </columnsizes> <dependencies> @@ -2475,12 +2469,12 @@ <b> <a>1</a> <b>2</b> - <v>5034</v> + <v>4861</v> </b> <b> <a>2</a> <b>7</b> - <v>157</v> + <v>152</v> </b> </bs> </hist> @@ -2496,7 +2490,7 @@ <b> <a>1</a> <b>2</b> - <v>5192</v> + <v>5013</v> </b> </bs> </hist> @@ -2512,7 +2506,7 @@ <b> <a>1</a> <b>2</b> - <v>5192</v> + <v>5013</v> </b> </bs> </hist> @@ -2528,27 +2522,27 @@ <b> <a>5</a> <b>6</b> - <v>631</v> + <v>610</v> </b> <b> <a>7</a> <b>8</b> - <v>78</v> + <v>76</v> </b> <b> <a>9</a> <b>12</b> - <v>59</v> + <v>57</v> </b> <b> <a>13</a> <b>16</b> - <v>39</v> + <v>38</v> </b> <b> <a>21</a> <b>22</b> - <v>39</v> + <v>38</v> </b> </bs> </hist> @@ -2564,7 +2558,7 @@ <b> <a>1</a> <b>2</b> - <v>848</v> + <v>819</v> </b> </bs> </hist> @@ -2580,27 +2574,27 @@ <b> <a>5</a> <b>6</b> - <v>631</v> + <v>610</v> </b> <b> <a>7</a> <b>8</b> - <v>78</v> + <v>76</v> </b> <b> <a>9</a> <b>12</b> - <v>59</v> + <v>57</v> </b> <b> <a>13</a> <b>16</b> - <v>39</v> + <v>38</v> </b> <b> <a>21</a> <b>22</b> - <v>39</v> + <v>38</v> </b> </bs> </hist> @@ -2664,37 +2658,37 @@ <b> <a>2</a> <b>3</b> - <v>118</v> + <v>114</v> </b> <b> <a>3</a> <b>4</b> - <v>39</v> + <v>38</v> </b> <b> <a>4</a> <b>5</b> - <v>39</v> + <v>38</v> </b> <b> <a>5</a> <b>6</b> - <v>39</v> + <v>38</v> </b> <b> <a>7</a> <b>8</b> - <v>39</v> + <v>38</v> </b> <b> <a>11</a> <b>12</b> - <v>39</v> + <v>38</v> </b> <b> <a>37</a> <b>38</b> - <v>78</v> + <v>76</v> </b> <b> <a>43</a> @@ -2715,37 +2709,37 @@ <b> <a>2</a> <b>3</b> - <v>118</v> + <v>114</v> </b> <b> <a>3</a> <b>4</b> - <v>39</v> + <v>38</v> </b> <b> <a>4</a> <b>5</b> - <v>39</v> + <v>38</v> </b> <b> <a>5</a> <b>6</b> - <v>39</v> + <v>38</v> </b> <b> <a>7</a> <b>8</b> - <v>39</v> + <v>38</v> </b> <b> <a>11</a> <b>12</b> - <v>39</v> + <v>38</v> </b> <b> <a>43</a> <b>44</b> - <v>98</v> + <v>95</v> </b> </bs> </hist> @@ -2761,7 +2755,7 @@ <b> <a>1</a> <b>2</b> - <v>414</v> + <v>400</v> </b> </bs> </hist> @@ -2771,19 +2765,19 @@ </relation> <relation> <name>compilation_finished</name> - <cardinality>9695</cardinality> + <cardinality>9657</cardinality> <columnsizes> <e> <k>id</k> - <v>9695</v> + <v>9657</v> </e> <e> <k>cpu_seconds</k> - <v>7190</v> + <v>7330</v> </e> <e> <k>elapsed_seconds</k> - <v>146</v> + <v>145</v> </e> </columnsizes> <dependencies> @@ -2797,7 +2791,7 @@ <b> <a>1</a> <b>2</b> - <v>9695</v> + <v>9657</v> </b> </bs> </hist> @@ -2813,7 +2807,7 @@ <b> <a>1</a> <b>2</b> - <v>9695</v> + <v>9657</v> </b> </bs> </hist> @@ -2829,17 +2823,17 @@ <b> <a>1</a> <b>2</b> - <v>5864</v> + <v>6054</v> </b> <b> <a>2</a> <b>3</b> - <v>831</v> + <v>850</v> </b> <b> <a>3</a> - <b>17</b> - <v>494</v> + <b>20</b> + <v>425</v> </b> </bs> </hist> @@ -2855,12 +2849,12 @@ <b> <a>1</a> <b>2</b> - <v>6561</v> + <v>6692</v> </b> <b> <a>2</a> <b>3</b> - <v>629</v> + <v>637</v> </b> </bs> </hist> @@ -2876,26 +2870,21 @@ <b> <a>1</a> <b>2</b> - <v>22</v> + <v>11</v> </b> <b> <a>2</a> <b>3</b> - <v>11</v> + <v>33</v> </b> <b> - <a>3</a> - <b>4</b> + <a>7</a> + <b>8</b> <v>22</v> </b> <b> - <a>6</a> - <b>7</b> - <v>11</v> - </b> - <b> - <a>10</a> - <b>11</b> + <a>11</a> + <b>12</b> <v>11</v> </b> <b> @@ -2904,28 +2893,28 @@ <v>11</v> </b> <b> - <a>46</a> - <b>47</b> + <a>52</a> + <b>53</b> <v>11</v> </b> <b> - <a>159</a> - <b>160</b> + <a>161</a> + <b>162</b> <v>11</v> </b> <b> - <a>165</a> - <b>166</b> + <a>163</a> + <b>164</b> <v>11</v> </b> <b> - <a>204</a> - <b>205</b> + <a>184</a> + <b>185</b> <v>11</v> </b> <b> - <a>251</a> - <b>252</b> + <a>259</a> + <b>260</b> <v>11</v> </b> </bs> @@ -2942,26 +2931,21 @@ <b> <a>1</a> <b>2</b> - <v>22</v> + <v>11</v> </b> <b> <a>2</a> <b>3</b> - <v>11</v> + <v>33</v> </b> <b> - <a>3</a> - <b>4</b> + <a>7</a> + <b>8</b> <v>22</v> </b> <b> - <a>6</a> - <b>7</b> - <v>11</v> - </b> - <b> - <a>10</a> - <b>11</b> + <a>11</a> + <b>12</b> <v>11</v> </b> <b> @@ -2970,13 +2954,13 @@ <v>11</v> </b> <b> - <a>44</a> - <b>45</b> + <a>52</a> + <b>53</b> <v>11</v> </b> <b> - <a>116</a> - <b>117</b> + <a>115</a> + <b>116</b> <v>11</v> </b> <b> @@ -2985,13 +2969,13 @@ <v>11</v> </b> <b> - <a>148</a> - <b>149</b> + <a>140</a> + <b>141</b> <v>11</v> </b> <b> - <a>231</a> - <b>232</b> + <a>242</a> + <b>243</b> <v>11</v> </b> </bs> @@ -3218,11 +3202,11 @@ </relation> <relation> <name>sourceLocationPrefix</name> - <cardinality>465</cardinality> + <cardinality>466</cardinality> <columnsizes> <e> <k>prefix</k> - <v>465</v> + <v>466</v> </e> </columnsizes> <dependencies/> @@ -4716,15 +4700,15 @@ </relation> <relation> <name>extractor_version</name> - <cardinality>465</cardinality> + <cardinality>466</cardinality> <columnsizes> <e> <k>codeql_version</k> - <v>465</v> + <v>466</v> </e> <e> <k>frontend_version</k> - <v>465</v> + <v>466</v> </e> </columnsizes> <dependencies> @@ -4738,7 +4722,7 @@ <b> <a>1</a> <b>2</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -4754,7 +4738,7 @@ <b> <a>1</a> <b>2</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -4764,31 +4748,31 @@ </relation> <relation> <name>locations_default</name> - <cardinality>29753112</cardinality> + <cardinality>29786456</cardinality> <columnsizes> <e> <k>id</k> - <v>29753112</v> + <v>29786456</v> </e> <e> <k>container</k> - <v>122996</v> + <v>123134</v> </e> <e> <k>startLine</k> - <v>2090945</v> + <v>2093288</v> </e> <e> <k>startColumn</k> - <v>36805</v> + <v>36847</v> </e> <e> <k>endLine</k> - <v>2095138</v> + <v>2097486</v> </e> <e> <k>endColumn</k> - <v>47987</v> + <v>48041</v> </e> </columnsizes> <dependencies> @@ -4802,7 +4786,7 @@ <b> <a>1</a> <b>2</b> - <v>29753112</v> + <v>29786456</v> </b> </bs> </hist> @@ -4818,7 +4802,7 @@ <b> <a>1</a> <b>2</b> - <v>29753112</v> + <v>29786456</v> </b> </bs> </hist> @@ -4834,7 +4818,7 @@ <b> <a>1</a> <b>2</b> - <v>29753112</v> + <v>29786456</v> </b> </bs> </hist> @@ -4850,7 +4834,7 @@ <b> <a>1</a> <b>2</b> - <v>29753112</v> + <v>29786456</v> </b> </bs> </hist> @@ -4866,7 +4850,7 @@ <b> <a>1</a> <b>2</b> - <v>29753112</v> + <v>29786456</v> </b> </bs> </hist> @@ -4882,67 +4866,67 @@ <b> <a>1</a> <b>11</b> - <v>9783</v> + <v>9794</v> </b> <b> <a>11</a> <b>18</b> - <v>10249</v> + <v>10261</v> </b> <b> <a>18</a> <b>30</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>30</a> <b>42</b> - <v>9783</v> + <v>9794</v> </b> <b> <a>43</a> <b>61</b> - <v>9783</v> + <v>9794</v> </b> <b> <a>61</a> <b>79</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>80</a> <b>106</b> - <v>9783</v> + <v>9794</v> </b> <b> <a>109</a> <b>149</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>149</a> <b>199</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>206</a> <b>292</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>305</a> <b>469</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>482</a> <b>850</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>939</a> <b>2380</b> - <v>8386</v> + <v>8395</v> </b> </bs> </hist> @@ -4958,72 +4942,72 @@ <b> <a>1</a> <b>8</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>8</a> <b>13</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>13</a> <b>20</b> - <v>9783</v> + <v>9794</v> </b> <b> <a>20</a> <b>32</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>32</a> <b>43</b> - <v>9783</v> + <v>9794</v> </b> <b> <a>44</a> <b>61</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>62</a> <b>72</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>73</a> <b>93</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>97</a> <b>128</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>128</a> <b>180</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>180</a> <b>267</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>277</a> <b>414</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>439</a> <b>1465</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>1557</a> <b>1569</b> - <v>931</v> + <v>932</v> </b> </bs> </hist> @@ -5039,67 +5023,67 @@ <b> <a>1</a> <b>4</b> - <v>8852</v> + <v>8861</v> </b> <b> <a>4</a> <b>5</b> - <v>7920</v> + <v>7929</v> </b> <b> <a>5</a> <b>6</b> - <v>7454</v> + <v>7462</v> </b> <b> <a>6</a> <b>8</b> - <v>11181</v> + <v>11194</v> </b> <b> <a>8</a> <b>10</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>10</a> <b>15</b> - <v>10715</v> + <v>10727</v> </b> <b> <a>15</a> <b>23</b> - <v>9783</v> + <v>9794</v> </b> <b> <a>23</a> <b>28</b> - <v>11181</v> + <v>11194</v> </b> <b> <a>28</a> <b>34</b> - <v>9783</v> + <v>9794</v> </b> <b> <a>34</a> <b>44</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>44</a> <b>55</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>55</a> <b>66</b> - <v>9783</v> + <v>9794</v> </b> <b> <a>66</a> <b>77</b> - <v>8386</v> + <v>8395</v> </b> </bs> </hist> @@ -5115,72 +5099,72 @@ <b> <a>1</a> <b>8</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>8</a> <b>13</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>13</a> <b>20</b> - <v>9783</v> + <v>9794</v> </b> <b> <a>20</a> <b>32</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>32</a> <b>43</b> - <v>9783</v> + <v>9794</v> </b> <b> <a>43</a> <b>60</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>61</a> <b>71</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>72</a> <b>93</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>94</a> <b>127</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>128</a> <b>179</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>180</a> <b>268</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>278</a> <b>413</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>437</a> <b>1465</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>1554</a> <b>1566</b> - <v>931</v> + <v>932</v> </b> </bs> </hist> @@ -5196,67 +5180,67 @@ <b> <a>1</a> <b>9</b> - <v>9783</v> + <v>9794</v> </b> <b> <a>9</a> <b>13</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>13</a> <b>18</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>18</a> <b>26</b> - <v>10249</v> + <v>10261</v> </b> <b> <a>27</a> <b>33</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>33</a> <b>39</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>39</a> <b>47</b> - <v>10249</v> + <v>10261</v> </b> <b> <a>47</a> <b>54</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>54</a> <b>60</b> - <v>10249</v> + <v>10261</v> </b> <b> <a>60</a> <b>66</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>66</a> <b>74</b> - <v>9783</v> + <v>9794</v> </b> <b> <a>74</a> <b>78</b> - <v>9783</v> + <v>9794</v> </b> <b> <a>78</a> <b>90</b> - <v>6988</v> + <v>6996</v> </b> </bs> </hist> @@ -5272,52 +5256,52 @@ <b> <a>1</a> <b>2</b> - <v>580507</v> + <v>581158</v> </b> <b> <a>2</a> <b>3</b> - <v>314480</v> + <v>314832</v> </b> <b> <a>3</a> <b>4</b> - <v>194744</v> + <v>194963</v> </b> <b> <a>4</a> <b>6</b> - <v>162132</v> + <v>162313</v> </b> <b> <a>6</a> <b>10</b> - <v>183097</v> + <v>183302</v> </b> <b> <a>10</a> <b>16</b> - <v>161666</v> + <v>161847</v> </b> <b> <a>16</a> <b>25</b> - <v>168188</v> + <v>168377</v> </b> <b> <a>25</a> <b>45</b> - <v>157007</v> + <v>157183</v> </b> <b> <a>45</a> <b>160</b> - <v>157473</v> + <v>157649</v> </b> <b> <a>160</a> <b>265</b> - <v>11647</v> + <v>11660</v> </b> </bs> </hist> @@ -5333,42 +5317,42 @@ <b> <a>1</a> <b>2</b> - <v>869363</v> + <v>870338</v> </b> <b> <a>2</a> <b>3</b> - <v>273015</v> + <v>273321</v> </b> <b> <a>3</a> <b>5</b> - <v>193347</v> + <v>193563</v> </b> <b> <a>5</a> <b>8</b> - <v>173313</v> + <v>173507</v> </b> <b> <a>8</a> <b>13</b> - <v>187756</v> + <v>187966</v> </b> <b> <a>13</a> <b>20</b> - <v>160734</v> + <v>160914</v> </b> <b> <a>20</a> <b>51</b> - <v>159336</v> + <v>159515</v> </b> <b> <a>51</a> <b>265</b> - <v>74077</v> + <v>74160</v> </b> </bs> </hist> @@ -5384,47 +5368,47 @@ <b> <a>1</a> <b>2</b> - <v>610790</v> + <v>611475</v> </b> <b> <a>2</a> <b>3</b> - <v>312616</v> + <v>312967</v> </b> <b> <a>3</a> <b>4</b> - <v>198006</v> + <v>198228</v> </b> <b> <a>4</a> <b>6</b> - <v>182631</v> + <v>182836</v> </b> <b> <a>6</a> <b>9</b> - <v>172847</v> + <v>173041</v> </b> <b> <a>9</a> <b>13</b> - <v>163063</v> + <v>163246</v> </b> <b> <a>13</a> <b>19</b> - <v>173779</v> + <v>173974</v> </b> <b> <a>19</a> <b>29</b> - <v>164927</v> + <v>165112</v> </b> <b> <a>29</a> <b>52</b> - <v>112281</v> + <v>112407</v> </b> </bs> </hist> @@ -5440,22 +5424,22 @@ <b> <a>1</a> <b>2</b> - <v>1528607</v> + <v>1530321</v> </b> <b> <a>2</a> <b>3</b> - <v>348025</v> + <v>348415</v> </b> <b> <a>3</a> <b>5</b> - <v>161666</v> + <v>161847</v> </b> <b> <a>5</a> <b>16</b> - <v>52646</v> + <v>52705</v> </b> </bs> </hist> @@ -5471,47 +5455,47 @@ <b> <a>1</a> <b>2</b> - <v>585166</v> + <v>585822</v> </b> <b> <a>2</a> <b>3</b> - <v>315878</v> + <v>316232</v> </b> <b> <a>3</a> <b>4</b> - <v>197540</v> + <v>197761</v> </b> <b> <a>4</a> <b>6</b> - <v>168188</v> + <v>168377</v> </b> <b> <a>6</a> <b>10</b> - <v>191483</v> + <v>191698</v> </b> <b> <a>10</a> <b>15</b> - <v>165393</v> + <v>165578</v> </b> <b> <a>15</a> <b>22</b> - <v>167722</v> + <v>167910</v> </b> <b> <a>22</a> <b>34</b> - <v>163995</v> + <v>164179</v> </b> <b> <a>34</a> <b>66</b> - <v>135576</v> + <v>135727</v> </b> </bs> </hist> @@ -5527,72 +5511,72 @@ <b> <a>1</a> <b>31</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>42</a> <b>85</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>86</a> <b>128</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>129</a> <b>229</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>247</a> <b>286</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>291</a> <b>360</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>373</a> <b>457</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>475</a> <b>565</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>566</a> <b>620</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>623</a> <b>689</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>696</a> <b>807</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>820</a> <b>1563</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>1638</a> <b>5632</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>15295</a> <b>15296</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -5608,67 +5592,67 @@ <b> <a>1</a> <b>18</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>23</a> <b>35</b> - <v>3261</v> + <v>3264</v> </b> <b> <a>38</a> <b>43</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>44</a> <b>61</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>65</a> <b>73</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>73</a> <b>84</b> - <v>3261</v> + <v>3264</v> </b> <b> <a>84</a> <b>96</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>96</a> <b>101</b> - <v>3261</v> + <v>3264</v> </b> <b> <a>101</a> <b>105</b> - <v>3261</v> + <v>3264</v> </b> <b> <a>107</a> <b>112</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>112</a> <b>126</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>137</a> <b>170</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>195</a> <b>265</b> - <v>1397</v> + <v>1399</v> </b> </bs> </hist> @@ -5684,72 +5668,72 @@ <b> <a>1</a> <b>19</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>30</a> <b>72</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>83</a> <b>122</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>122</a> <b>205</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>214</a> <b>261</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>265</a> <b>322</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>322</a> <b>379</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>404</a> <b>430</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>453</a> <b>474</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>478</a> <b>505</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>511</a> <b>583</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>585</a> <b>836</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>1104</a> <b>2196</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>2387</a> <b>2388</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -5765,72 +5749,72 @@ <b> <a>1</a> <b>19</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>30</a> <b>72</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>83</a> <b>122</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>122</a> <b>205</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>214</a> <b>261</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>265</a> <b>322</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>322</a> <b>380</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>404</a> <b>430</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>453</a> <b>474</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>477</a> <b>504</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>514</a> <b>582</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>585</a> <b>835</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>1109</a> <b>2203</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>2382</a> <b>2383</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -5846,67 +5830,67 @@ <b> <a>1</a> <b>7</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>7</a> <b>11</b> - <v>3261</v> + <v>3264</v> </b> <b> <a>11</a> <b>16</b> - <v>3261</v> + <v>3264</v> </b> <b> <a>16</a> <b>22</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>22</a> <b>24</b> - <v>3261</v> + <v>3264</v> </b> <b> <a>24</a> <b>28</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>29</a> <b>34</b> - <v>3261</v> + <v>3264</v> </b> <b> <a>34</a> <b>41</b> - <v>3261</v> + <v>3264</v> </b> <b> <a>41</a> <b>46</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>47</a> <b>49</b> - <v>1863</v> + <v>1865</v> </b> <b> <a>49</a> <b>54</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>54</a> <b>74</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>75</a> <b>86</b> - <v>1863</v> + <v>1865</v> </b> </bs> </hist> @@ -5922,52 +5906,52 @@ <b> <a>1</a> <b>2</b> - <v>590757</v> + <v>591419</v> </b> <b> <a>2</a> <b>3</b> - <v>306560</v> + <v>306903</v> </b> <b> <a>3</a> <b>4</b> - <v>198006</v> + <v>198228</v> </b> <b> <a>4</a> <b>6</b> - <v>159336</v> + <v>159515</v> </b> <b> <a>6</a> <b>10</b> - <v>182631</v> + <v>182836</v> </b> <b> <a>10</a> <b>16</b> - <v>160268</v> + <v>160448</v> </b> <b> <a>16</a> <b>25</b> - <v>170518</v> + <v>170709</v> </b> <b> <a>25</a> <b>45</b> - <v>157939</v> + <v>158116</v> </b> <b> <a>45</a> <b>160</b> - <v>157939</v> + <v>158116</v> </b> <b> <a>160</a> <b>265</b> - <v>11181</v> + <v>11194</v> </b> </bs> </hist> @@ -5983,47 +5967,47 @@ <b> <a>1</a> <b>2</b> - <v>884738</v> + <v>885729</v> </b> <b> <a>2</a> <b>3</b> - <v>259504</v> + <v>259795</v> </b> <b> <a>3</a> <b>4</b> - <v>124860</v> + <v>125000</v> </b> <b> <a>4</a> <b>6</b> - <v>140700</v> + <v>140858</v> </b> <b> <a>6</a> <b>10</b> - <v>184495</v> + <v>184701</v> </b> <b> <a>10</a> <b>15</b> - <v>168188</v> + <v>168377</v> </b> <b> <a>15</a> <b>26</b> - <v>163063</v> + <v>163246</v> </b> <b> <a>26</a> <b>120</b> - <v>157939</v> + <v>158116</v> </b> <b> <a>121</a> <b>265</b> - <v>11647</v> + <v>11660</v> </b> </bs> </hist> @@ -6039,22 +6023,22 @@ <b> <a>1</a> <b>2</b> - <v>1526278</v> + <v>1527988</v> </b> <b> <a>2</a> <b>3</b> - <v>341036</v> + <v>341418</v> </b> <b> <a>3</a> <b>5</b> - <v>170518</v> + <v>170709</v> </b> <b> <a>5</a> <b>10</b> - <v>57305</v> + <v>57369</v> </b> </bs> </hist> @@ -6070,47 +6054,47 @@ <b> <a>1</a> <b>2</b> - <v>621972</v> + <v>622669</v> </b> <b> <a>2</a> <b>3</b> - <v>302833</v> + <v>303172</v> </b> <b> <a>3</a> <b>4</b> - <v>201267</v> + <v>201493</v> </b> <b> <a>4</a> <b>6</b> - <v>183563</v> + <v>183769</v> </b> <b> <a>6</a> <b>9</b> - <v>169586</v> + <v>169776</v> </b> <b> <a>9</a> <b>13</b> - <v>166325</v> + <v>166511</v> </b> <b> <a>13</a> <b>19</b> - <v>174711</v> + <v>174907</v> </b> <b> <a>19</a> <b>29</b> - <v>160734</v> + <v>160914</v> </b> <b> <a>29</a> <b>52</b> - <v>114144</v> + <v>114272</v> </b> </bs> </hist> @@ -6126,52 +6110,52 @@ <b> <a>1</a> <b>2</b> - <v>597279</v> + <v>597949</v> </b> <b> <a>2</a> <b>3</b> - <v>306560</v> + <v>306903</v> </b> <b> <a>3</a> <b>4</b> - <v>196142</v> + <v>196362</v> </b> <b> <a>4</a> <b>6</b> - <v>169120</v> + <v>169310</v> </b> <b> <a>6</a> <b>9</b> - <v>154677</v> + <v>154851</v> </b> <b> <a>9</a> <b>14</b> - <v>168188</v> + <v>168377</v> </b> <b> <a>14</a> <b>21</b> - <v>178438</v> + <v>178638</v> </b> <b> <a>21</a> <b>32</b> - <v>163063</v> + <v>163246</v> </b> <b> <a>32</a> <b>60</b> - <v>157939</v> + <v>158116</v> </b> <b> <a>60</a> <b>65</b> - <v>3727</v> + <v>3731</v> </b> </bs> </hist> @@ -6187,67 +6171,67 @@ <b> <a>1</a> <b>2</b> - <v>5124</v> + <v>5130</v> </b> <b> <a>2</a> <b>8</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>9</a> <b>186</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>193</a> <b>288</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>294</a> <b>495</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>503</a> <b>555</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>561</a> <b>634</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>640</a> <b>758</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>758</a> <b>869</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>876</a> <b>1074</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>1075</a> <b>1281</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>1289</a> <b>1590</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>1685</a> <b>2418</b> - <v>1863</v> + <v>1865</v> </b> </bs> </hist> @@ -6263,67 +6247,67 @@ <b> <a>1</a> <b>2</b> - <v>5590</v> + <v>5597</v> </b> <b> <a>2</a> <b>5</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>5</a> <b>65</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>70</a> <b>100</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>100</a> <b>111</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>112</a> <b>122</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>122</a> <b>134</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>139</a> <b>152</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>152</a> <b>160</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>160</a> <b>171</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>171</a> <b>175</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>176</a> <b>192</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>207</a> <b>265</b> - <v>1397</v> + <v>1399</v> </b> </bs> </hist> @@ -6339,67 +6323,67 @@ <b> <a>1</a> <b>2</b> - <v>5590</v> + <v>5597</v> </b> <b> <a>2</a> <b>8</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>9</a> <b>105</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>155</a> <b>241</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>253</a> <b>336</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>340</a> <b>426</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>434</a> <b>488</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>489</a> <b>572</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>573</a> <b>623</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>628</a> <b>696</b> - <v>4193</v> + <v>4197</v> </b> <b> <a>701</a> <b>819</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>837</a> <b>1095</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>1172</a> <b>1174</b> - <v>931</v> + <v>932</v> </b> </bs> </hist> @@ -6415,67 +6399,67 @@ <b> <a>1</a> <b>2</b> - <v>6056</v> + <v>6063</v> </b> <b> <a>2</a> <b>4</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>4</a> <b>8</b> - <v>4193</v> + <v>4197</v> </b> <b> <a>8</a> <b>15</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>15</a> <b>23</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>23</a> <b>29</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>29</a> <b>35</b> - <v>4193</v> + <v>4197</v> </b> <b> <a>35</a> <b>39</b> - <v>3261</v> + <v>3264</v> </b> <b> <a>39</a> <b>42</b> - <v>3261</v> + <v>3264</v> </b> <b> <a>42</a> <b>44</b> - <v>3261</v> + <v>3264</v> </b> <b> <a>44</a> <b>46</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>46</a> <b>49</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>49</a> <b>53</b> - <v>1397</v> + <v>1399</v> </b> </bs> </hist> @@ -6491,67 +6475,67 @@ <b> <a>1</a> <b>2</b> - <v>5590</v> + <v>5597</v> </b> <b> <a>2</a> <b>8</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>9</a> <b>156</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>159</a> <b>240</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>251</a> <b>335</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>342</a> <b>430</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>432</a> <b>490</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>490</a> <b>573</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>574</a> <b>622</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>628</a> <b>698</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>700</a> <b>812</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>812</a> <b>987</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>1096</a> <b>1180</b> - <v>1397</v> + <v>1399</v> </b> </bs> </hist> @@ -6561,31 +6545,31 @@ </relation> <relation> <name>locations_stmt</name> - <cardinality>3814280</cardinality> + <cardinality>3820105</cardinality> <columnsizes> <e> <k>id</k> - <v>3814280</v> + <v>3820105</v> </e> <e> <k>container</k> - <v>3083</v> + <v>3088</v> </e> <e> <k>startLine</k> - <v>199878</v> + <v>200183</v> </e> <e> <k>startColumn</k> - <v>1870</v> + <v>1873</v> </e> <e> <k>endLine</k> - <v>194143</v> + <v>194439</v> </e> <e> <k>endColumn</k> - <v>2364</v> + <v>2367</v> </e> </columnsizes> <dependencies> @@ -6599,7 +6583,7 @@ <b> <a>1</a> <b>2</b> - <v>3814280</v> + <v>3820105</v> </b> </bs> </hist> @@ -6615,7 +6599,7 @@ <b> <a>1</a> <b>2</b> - <v>3814280</v> + <v>3820105</v> </b> </bs> </hist> @@ -6631,7 +6615,7 @@ <b> <a>1</a> <b>2</b> - <v>3814280</v> + <v>3820105</v> </b> </bs> </hist> @@ -6647,7 +6631,7 @@ <b> <a>1</a> <b>2</b> - <v>3814280</v> + <v>3820105</v> </b> </bs> </hist> @@ -6663,7 +6647,7 @@ <b> <a>1</a> <b>2</b> - <v>3814280</v> + <v>3820105</v> </b> </bs> </hist> @@ -6679,62 +6663,62 @@ <b> <a>1</a> <b>13</b> - <v>246</v> + <v>247</v> </b> <b> <a>16</a> <b>48</b> - <v>246</v> + <v>247</v> </b> <b> <a>61</a> <b>175</b> - <v>246</v> + <v>247</v> </b> <b> <a>176</a> <b>417</b> - <v>246</v> + <v>247</v> </b> <b> <a>436</a> <b>608</b> - <v>246</v> + <v>247</v> </b> <b> <a>621</a> <b>797</b> - <v>246</v> + <v>247</v> </b> <b> <a>848</a> <b>1139</b> - <v>246</v> + <v>247</v> </b> <b> <a>1158</a> <b>1417</b> - <v>246</v> + <v>247</v> </b> <b> <a>1453</a> <b>1715</b> - <v>246</v> + <v>247</v> </b> <b> <a>1771</a> <b>2252</b> - <v>246</v> + <v>247</v> </b> <b> <a>2282</a> <b>2669</b> - <v>246</v> + <v>247</v> </b> <b> <a>2736</a> <b>3751</b> - <v>246</v> + <v>247</v> </b> <b> <a>3768</a> @@ -6755,17 +6739,17 @@ <b> <a>1</a> <b>13</b> - <v>246</v> + <v>247</v> </b> <b> <a>16</a> <b>47</b> - <v>246</v> + <v>247</v> </b> <b> <a>48</a> <b>161</b> - <v>246</v> + <v>247</v> </b> <b> <a>169</a> @@ -6775,42 +6759,42 @@ <b> <a>393</a> <b>586</b> - <v>246</v> + <v>247</v> </b> <b> <a>602</a> <b>783</b> - <v>246</v> + <v>247</v> </b> <b> <a>845</a> <b>1120</b> - <v>246</v> + <v>247</v> </b> <b> <a>1131</a> <b>1390</b> - <v>246</v> + <v>247</v> </b> <b> <a>1394</a> <b>1692</b> - <v>246</v> + <v>247</v> </b> <b> <a>1726</a> <b>2208</b> - <v>246</v> + <v>247</v> </b> <b> <a>2225</a> <b>2680</b> - <v>246</v> + <v>247</v> </b> <b> <a>2777</a> <b>3643</b> - <v>246</v> + <v>247</v> </b> <b> <a>3885</a> @@ -6846,7 +6830,7 @@ <b> <a>9</a> <b>11</b> - <v>246</v> + <v>247</v> </b> <b> <a>11</a> @@ -6861,7 +6845,7 @@ <b> <a>14</a> <b>16</b> - <v>246</v> + <v>247</v> </b> <b> <a>16</a> @@ -6881,22 +6865,22 @@ <b> <a>21</a> <b>23</b> - <v>246</v> + <v>247</v> </b> <b> <a>23</a> <b>29</b> - <v>246</v> + <v>247</v> </b> <b> <a>29</a> <b>43</b> - <v>246</v> + <v>247</v> </b> <b> <a>48</a> <b>60</b> - <v>143</v> + <v>144</v> </b> </bs> </hist> @@ -6912,62 +6896,62 @@ <b> <a>1</a> <b>11</b> - <v>246</v> + <v>247</v> </b> <b> <a>12</a> <b>34</b> - <v>246</v> + <v>247</v> </b> <b> <a>43</a> <b>132</b> - <v>246</v> + <v>247</v> </b> <b> <a>134</a> <b>282</b> - <v>246</v> + <v>247</v> </b> <b> <a>294</a> <b>452</b> - <v>246</v> + <v>247</v> </b> <b> <a>459</a> <b>601</b> - <v>246</v> + <v>247</v> </b> <b> <a>609</a> <b>831</b> - <v>246</v> + <v>247</v> </b> <b> <a>838</a> <b>1062</b> - <v>246</v> + <v>247</v> </b> <b> <a>1071</a> <b>1265</b> - <v>246</v> + <v>247</v> </b> <b> <a>1323</a> <b>1679</b> - <v>246</v> + <v>247</v> </b> <b> <a>1688</a> <b>2006</b> - <v>246</v> + <v>247</v> </b> <b> <a>2044</a> <b>2758</b> - <v>246</v> + <v>247</v> </b> <b> <a>2776</a> @@ -6988,22 +6972,22 @@ <b> <a>1</a> <b>8</b> - <v>246</v> + <v>247</v> </b> <b> <a>8</a> <b>21</b> - <v>246</v> + <v>247</v> </b> <b> <a>22</a> <b>45</b> - <v>246</v> + <v>247</v> </b> <b> <a>45</a> <b>56</b> - <v>246</v> + <v>247</v> </b> <b> <a>56</a> @@ -7013,12 +6997,12 @@ <b> <a>63</a> <b>67</b> - <v>246</v> + <v>247</v> </b> <b> <a>67</a> <b>69</b> - <v>246</v> + <v>247</v> </b> <b> <a>69</a> @@ -7028,22 +7012,22 @@ <b> <a>71</a> <b>72</b> - <v>246</v> + <v>247</v> </b> <b> <a>72</a> <b>74</b> - <v>246</v> + <v>247</v> </b> <b> <a>74</a> <b>76</b> - <v>246</v> + <v>247</v> </b> <b> <a>76</a> <b>80</b> - <v>246</v> + <v>247</v> </b> <b> <a>81</a> @@ -7064,67 +7048,67 @@ <b> <a>1</a> <b>2</b> - <v>21544</v> + <v>21576</v> </b> <b> <a>2</a> <b>3</b> - <v>15294</v> + <v>15317</v> </b> <b> <a>3</a> <b>4</b> - <v>12478</v> + <v>12497</v> </b> <b> <a>4</a> <b>6</b> - <v>14451</v> + <v>14473</v> </b> <b> <a>6</a> <b>8</b> - <v>12519</v> + <v>12538</v> </b> <b> <a>8</a> <b>11</b> - <v>16713</v> + <v>16738</v> </b> <b> <a>11</a> <b>16</b> - <v>17268</v> + <v>17294</v> </b> <b> <a>16</a> <b>22</b> - <v>15356</v> + <v>15379</v> </b> <b> <a>22</a> <b>29</b> - <v>16980</v> + <v>17006</v> </b> <b> <a>29</a> <b>37</b> - <v>17370</v> + <v>17397</v> </b> <b> <a>37</a> <b>45</b> - <v>15089</v> + <v>15112</v> </b> <b> <a>45</a> <b>56</b> - <v>16178</v> + <v>16203</v> </b> <b> <a>56</a> <b>73</b> - <v>8634</v> + <v>8647</v> </b> </bs> </hist> @@ -7140,67 +7124,67 @@ <b> <a>1</a> <b>2</b> - <v>22304</v> + <v>22338</v> </b> <b> <a>2</a> <b>3</b> - <v>15726</v> + <v>15750</v> </b> <b> <a>3</a> <b>4</b> - <v>12683</v> + <v>12703</v> </b> <b> <a>4</a> <b>6</b> - <v>14390</v> + <v>14412</v> </b> <b> <a>6</a> <b>8</b> - <v>12724</v> + <v>12744</v> </b> <b> <a>8</a> <b>11</b> - <v>17576</v> + <v>17603</v> </b> <b> <a>11</a> <b>16</b> - <v>16363</v> + <v>16388</v> </b> <b> <a>16</a> <b>22</b> - <v>16219</v> + <v>16244</v> </b> <b> <a>22</a> <b>29</b> - <v>16959</v> + <v>16985</v> </b> <b> <a>29</a> <b>36</b> - <v>15993</v> + <v>16017</v> </b> <b> <a>36</a> <b>44</b> - <v>16322</v> + <v>16347</v> </b> <b> <a>44</a> <b>54</b> - <v>15644</v> + <v>15667</v> </b> <b> <a>54</a> <b>69</b> - <v>6968</v> + <v>6979</v> </b> </bs> </hist> @@ -7216,57 +7200,57 @@ <b> <a>1</a> <b>2</b> - <v>26827</v> + <v>26868</v> </b> <b> <a>2</a> <b>3</b> - <v>20845</v> + <v>20876</v> </b> <b> <a>3</a> <b>4</b> - <v>16815</v> + <v>16841</v> </b> <b> <a>4</a> <b>5</b> - <v>16075</v> + <v>16100</v> </b> <b> <a>5</a> <b>6</b> - <v>17432</v> + <v>17459</v> </b> <b> <a>6</a> <b>7</b> - <v>19858</v> + <v>19888</v> </b> <b> <a>7</a> <b>8</b> - <v>22756</v> + <v>22791</v> </b> <b> <a>8</a> <b>9</b> - <v>20392</v> + <v>20423</v> </b> <b> <a>9</a> <b>10</b> - <v>15006</v> + <v>15029</v> </b> <b> <a>10</a> <b>12</b> - <v>16651</v> + <v>16676</v> </b> <b> <a>12</a> <b>18</b> - <v>7215</v> + <v>7226</v> </b> </bs> </hist> @@ -7282,67 +7266,67 @@ <b> <a>1</a> <b>2</b> - <v>34597</v> + <v>34650</v> </b> <b> <a>2</a> <b>3</b> - <v>25799</v> + <v>25838</v> </b> <b> <a>3</a> <b>4</b> - <v>18439</v> + <v>18468</v> </b> <b> <a>4</a> <b>5</b> - <v>16219</v> + <v>16244</v> </b> <b> <a>5</a> <b>6</b> - <v>12786</v> + <v>12806</v> </b> <b> <a>6</a> <b>7</b> - <v>12026</v> + <v>12044</v> </b> <b> <a>7</a> <b>8</b> - <v>10175</v> + <v>10191</v> </b> <b> <a>8</a> <b>9</b> - <v>10977</v> + <v>10994</v> </b> <b> <a>9</a> <b>10</b> - <v>10730</v> + <v>10747</v> </b> <b> <a>10</a> <b>11</b> - <v>10525</v> + <v>10541</v> </b> <b> <a>11</a> <b>12</b> - <v>10175</v> + <v>10191</v> </b> <b> <a>12</a> <b>14</b> - <v>15787</v> + <v>15812</v> </b> <b> <a>14</a> <b>24</b> - <v>11635</v> + <v>11653</v> </b> </bs> </hist> @@ -7358,67 +7342,67 @@ <b> <a>1</a> <b>2</b> - <v>22140</v> + <v>22174</v> </b> <b> <a>2</a> <b>3</b> - <v>16199</v> + <v>16223</v> </b> <b> <a>3</a> <b>4</b> - <v>12951</v> + <v>12970</v> </b> <b> <a>4</a> <b>6</b> - <v>16075</v> + <v>16100</v> </b> <b> <a>6</a> <b>8</b> - <v>14698</v> + <v>14720</v> </b> <b> <a>8</a> <b>10</b> - <v>13197</v> + <v>13217</v> </b> <b> <a>10</a> <b>14</b> - <v>18295</v> + <v>18323</v> </b> <b> <a>14</a> <b>18</b> - <v>17021</v> + <v>17047</v> </b> <b> <a>18</a> <b>22</b> - <v>17576</v> + <v>17603</v> </b> <b> <a>22</a> <b>26</b> - <v>18501</v> + <v>18529</v> </b> <b> <a>26</a> <b>30</b> - <v>16384</v> + <v>16409</v> </b> <b> <a>30</a> <b>36</b> - <v>15232</v> + <v>15256</v> </b> <b> <a>36</a> <b>42</b> - <v>1603</v> + <v>1605</v> </b> </bs> </hist> @@ -7439,7 +7423,7 @@ <b> <a>2</a> <b>3</b> - <v>143</v> + <v>144</v> </b> <b> <a>3</a> @@ -7449,7 +7433,7 @@ <b> <a>7</a> <b>12</b> - <v>143</v> + <v>144</v> </b> <b> <a>12</a> @@ -7459,37 +7443,37 @@ <b> <a>21</a> <b>53</b> - <v>143</v> + <v>144</v> </b> <b> <a>54</a> <b>74</b> - <v>143</v> + <v>144</v> </b> <b> <a>78</a> <b>92</b> - <v>143</v> + <v>144</v> </b> <b> <a>92</a> <b>134</b> - <v>143</v> + <v>144</v> </b> <b> <a>134</a> <b>228</b> - <v>143</v> + <v>144</v> </b> <b> <a>228</a> <b>2062</b> - <v>143</v> + <v>144</v> </b> <b> <a>3245</a> <b>40863</b> - <v>143</v> + <v>144</v> </b> <b> <a>53257</a> @@ -7510,7 +7494,7 @@ <b> <a>1</a> <b>2</b> - <v>287</v> + <v>288</v> </b> <b> <a>2</a> @@ -7530,42 +7514,42 @@ <b> <a>8</a> <b>13</b> - <v>143</v> + <v>144</v> </b> <b> <a>13</a> <b>18</b> - <v>143</v> + <v>144</v> </b> <b> <a>18</a> <b>22</b> - <v>143</v> + <v>144</v> </b> <b> <a>22</a> <b>24</b> - <v>143</v> + <v>144</v> </b> <b> <a>24</a> <b>29</b> - <v>143</v> + <v>144</v> </b> <b> <a>33</a> <b>42</b> - <v>143</v> + <v>144</v> </b> <b> <a>47</a> <b>109</b> - <v>143</v> + <v>144</v> </b> <b> <a>116</a> <b>150</b> - <v>143</v> + <v>144</v> </b> </bs> </hist> @@ -7586,7 +7570,7 @@ <b> <a>2</a> <b>3</b> - <v>143</v> + <v>144</v> </b> <b> <a>3</a> @@ -7596,7 +7580,7 @@ <b> <a>7</a> <b>12</b> - <v>143</v> + <v>144</v> </b> <b> <a>12</a> @@ -7606,37 +7590,37 @@ <b> <a>21</a> <b>53</b> - <v>143</v> + <v>144</v> </b> <b> <a>54</a> <b>74</b> - <v>143</v> + <v>144</v> </b> <b> <a>77</a> <b>88</b> - <v>143</v> + <v>144</v> </b> <b> <a>90</a> <b>131</b> - <v>143</v> + <v>144</v> </b> <b> <a>134</a> <b>224</b> - <v>143</v> + <v>144</v> </b> <b> <a>226</a> <b>1699</b> - <v>143</v> + <v>144</v> </b> <b> <a>2430</a> <b>7900</b> - <v>143</v> + <v>144</v> </b> <b> <a>8302</a> @@ -7662,7 +7646,7 @@ <b> <a>2</a> <b>3</b> - <v>143</v> + <v>144</v> </b> <b> <a>3</a> @@ -7672,7 +7656,7 @@ <b> <a>7</a> <b>12</b> - <v>143</v> + <v>144</v> </b> <b> <a>12</a> @@ -7682,37 +7666,37 @@ <b> <a>21</a> <b>53</b> - <v>143</v> + <v>144</v> </b> <b> <a>54</a> <b>74</b> - <v>143</v> + <v>144</v> </b> <b> <a>77</a> <b>88</b> - <v>143</v> + <v>144</v> </b> <b> <a>90</a> <b>130</b> - <v>143</v> + <v>144</v> </b> <b> <a>134</a> <b>221</b> - <v>143</v> + <v>144</v> </b> <b> <a>226</a> <b>1414</b> - <v>143</v> + <v>144</v> </b> <b> <a>2290</a> <b>7741</b> - <v>143</v> + <v>144</v> </b> <b> <a>8096</a> @@ -7733,12 +7717,12 @@ <b> <a>1</a> <b>2</b> - <v>287</v> + <v>288</v> </b> <b> <a>2</a> <b>3</b> - <v>143</v> + <v>144</v> </b> <b> <a>3</a> @@ -7758,7 +7742,7 @@ <b> <a>8</a> <b>11</b> - <v>143</v> + <v>144</v> </b> <b> <a>11</a> @@ -7768,27 +7752,27 @@ <b> <a>15</a> <b>19</b> - <v>143</v> + <v>144</v> </b> <b> <a>19</a> <b>26</b> - <v>143</v> + <v>144</v> </b> <b> <a>28</a> <b>35</b> - <v>143</v> + <v>144</v> </b> <b> <a>41</a> <b>69</b> - <v>143</v> + <v>144</v> </b> <b> <a>70</a> <b>104</b> - <v>143</v> + <v>144</v> </b> </bs> </hist> @@ -7804,67 +7788,67 @@ <b> <a>1</a> <b>2</b> - <v>17412</v> + <v>17438</v> </b> <b> <a>2</a> <b>3</b> - <v>14410</v> + <v>14432</v> </b> <b> <a>3</a> <b>4</b> - <v>11491</v> + <v>11509</v> </b> <b> <a>4</a> <b>6</b> - <v>15602</v> + <v>15626</v> </b> <b> <a>6</a> <b>8</b> - <v>12498</v> + <v>12517</v> </b> <b> <a>8</a> <b>11</b> - <v>15459</v> + <v>15482</v> </b> <b> <a>11</a> <b>15</b> - <v>14636</v> + <v>14659</v> </b> <b> <a>15</a> <b>21</b> - <v>16096</v> + <v>16120</v> </b> <b> <a>21</a> <b>27</b> - <v>15417</v> + <v>15441</v> </b> <b> <a>27</a> <b>34</b> - <v>14945</v> + <v>14967</v> </b> <b> <a>34</a> <b>42</b> - <v>15746</v> + <v>15770</v> </b> <b> <a>42</a> <b>52</b> - <v>16014</v> + <v>16038</v> </b> <b> <a>52</a> <b>130</b> - <v>14410</v> + <v>14432</v> </b> </bs> </hist> @@ -7880,62 +7864,62 @@ <b> <a>1</a> <b>2</b> - <v>24956</v> + <v>24994</v> </b> <b> <a>2</a> <b>3</b> - <v>16137</v> + <v>16162</v> </b> <b> <a>3</a> <b>4</b> - <v>12766</v> + <v>12785</v> </b> <b> <a>4</a> <b>6</b> - <v>15664</v> + <v>15688</v> </b> <b> <a>6</a> <b>8</b> - <v>15006</v> + <v>15029</v> </b> <b> <a>8</a> <b>11</b> - <v>15890</v> + <v>15915</v> </b> <b> <a>11</a> <b>16</b> - <v>17453</v> + <v>17479</v> </b> <b> <a>16</a> <b>20</b> - <v>14595</v> + <v>14617</v> </b> <b> <a>20</a> <b>26</b> - <v>17165</v> + <v>17191</v> </b> <b> <a>26</a> <b>32</b> - <v>16260</v> + <v>16285</v> </b> <b> <a>32</a> <b>39</b> - <v>14862</v> + <v>14885</v> </b> <b> <a>39</a> <b>59</b> - <v>13382</v> + <v>13403</v> </b> </bs> </hist> @@ -7951,62 +7935,62 @@ <b> <a>1</a> <b>2</b> - <v>32480</v> + <v>32530</v> </b> <b> <a>2</a> <b>3</b> - <v>23764</v> + <v>23800</v> </b> <b> <a>3</a> <b>4</b> - <v>18460</v> + <v>18488</v> </b> <b> <a>4</a> <b>5</b> - <v>15150</v> + <v>15173</v> </b> <b> <a>5</a> <b>6</b> - <v>13876</v> + <v>13897</v> </b> <b> <a>6</a> <b>7</b> - <v>11676</v> + <v>11694</v> </b> <b> <a>7</a> <b>8</b> - <v>11738</v> + <v>11756</v> </b> <b> <a>8</a> <b>9</b> - <v>10915</v> + <v>10932</v> </b> <b> <a>9</a> <b>10</b> - <v>10175</v> + <v>10191</v> </b> <b> <a>10</a> <b>12</b> - <v>17967</v> + <v>17994</v> </b> <b> <a>12</a> <b>15</b> - <v>17720</v> + <v>17747</v> </b> <b> <a>15</a> <b>100</b> - <v>10216</v> + <v>10232</v> </b> </bs> </hist> @@ -8022,57 +8006,57 @@ <b> <a>1</a> <b>2</b> - <v>24956</v> + <v>24994</v> </b> <b> <a>2</a> <b>3</b> - <v>20392</v> + <v>20423</v> </b> <b> <a>3</a> <b>4</b> - <v>16836</v> + <v>16862</v> </b> <b> <a>4</a> <b>5</b> - <v>17802</v> + <v>17829</v> </b> <b> <a>5</a> <b>6</b> - <v>18583</v> + <v>18612</v> </b> <b> <a>6</a> <b>7</b> - <v>20433</v> + <v>20465</v> </b> <b> <a>7</a> <b>8</b> - <v>22427</v> + <v>22462</v> </b> <b> <a>8</a> <b>9</b> - <v>18748</v> + <v>18776</v> </b> <b> <a>9</a> <b>10</b> - <v>12930</v> + <v>12950</v> </b> <b> <a>10</a> <b>12</b> - <v>15027</v> + <v>15050</v> </b> <b> <a>12</a> <b>18</b> - <v>6002</v> + <v>6011</v> </b> </bs> </hist> @@ -8088,67 +8072,67 @@ <b> <a>1</a> <b>2</b> - <v>24709</v> + <v>24747</v> </b> <b> <a>2</a> <b>3</b> - <v>16630</v> + <v>16656</v> </b> <b> <a>3</a> <b>4</b> - <v>12539</v> + <v>12559</v> </b> <b> <a>4</a> <b>6</b> - <v>17823</v> + <v>17850</v> </b> <b> <a>6</a> <b>8</b> - <v>15335</v> + <v>15359</v> </b> <b> <a>8</a> <b>10</b> - <v>12827</v> + <v>12847</v> </b> <b> <a>10</a> <b>13</b> - <v>14410</v> + <v>14432</v> </b> <b> <a>13</a> <b>16</b> - <v>15027</v> + <v>15050</v> </b> <b> <a>16</a> <b>19</b> - <v>14657</v> + <v>14679</v> </b> <b> <a>19</a> <b>22</b> - <v>14040</v> + <v>14062</v> </b> <b> <a>22</a> <b>26</b> - <v>17124</v> + <v>17150</v> </b> <b> <a>26</a> <b>31</b> - <v>15335</v> + <v>15359</v> </b> <b> <a>31</a> <b>39</b> - <v>3679</v> + <v>3685</v> </b> </bs> </hist> @@ -8543,31 +8527,31 @@ </relation> <relation> <name>locations_expr</name> - <cardinality>13168606</cardinality> + <cardinality>13188716</cardinality> <columnsizes> <e> <k>id</k> - <v>13168606</v> + <v>13188716</v> </e> <e> <k>container</k> - <v>4645</v> + <v>4653</v> </e> <e> <k>startLine</k> - <v>191943</v> + <v>192236</v> </e> <e> <k>startColumn</k> - <v>2466</v> + <v>2470</v> </e> <e> <k>endLine</k> - <v>191922</v> + <v>192215</v> </e> <e> <k>endColumn</k> - <v>2795</v> + <v>2800</v> </e> </columnsizes> <dependencies> @@ -8581,7 +8565,7 @@ <b> <a>1</a> <b>2</b> - <v>13168606</v> + <v>13188716</v> </b> </bs> </hist> @@ -8597,7 +8581,7 @@ <b> <a>1</a> <b>2</b> - <v>13168606</v> + <v>13188716</v> </b> </bs> </hist> @@ -8613,7 +8597,7 @@ <b> <a>1</a> <b>2</b> - <v>13168606</v> + <v>13188716</v> </b> </bs> </hist> @@ -8629,7 +8613,7 @@ <b> <a>1</a> <b>2</b> - <v>13168606</v> + <v>13188716</v> </b> </bs> </hist> @@ -8645,7 +8629,7 @@ <b> <a>1</a> <b>2</b> - <v>13168606</v> + <v>13188716</v> </b> </bs> </hist> @@ -8666,7 +8650,7 @@ <b> <a>2</a> <b>6</b> - <v>328</v> + <v>329</v> </b> <b> <a>6</a> @@ -8681,47 +8665,47 @@ <b> <a>27</a> <b>96</b> - <v>349</v> + <v>350</v> </b> <b> <a>100</a> <b>514</b> - <v>349</v> + <v>350</v> </b> <b> <a>525</a> <b>1401</b> - <v>349</v> + <v>350</v> </b> <b> <a>1526</a> <b>2343</b> - <v>349</v> + <v>350</v> </b> <b> <a>2404</a> <b>3615</b> - <v>349</v> + <v>350</v> </b> <b> <a>3668</a> <b>5162</b> - <v>349</v> + <v>350</v> </b> <b> <a>5341</a> <b>7345</b> - <v>349</v> + <v>350</v> </b> <b> <a>7399</a> <b>9307</b> - <v>349</v> + <v>350</v> </b> <b> <a>9382</a> <b>16759</b> - <v>349</v> + <v>350</v> </b> <b> <a>18811</a> @@ -8742,7 +8726,7 @@ <b> <a>1</a> <b>2</b> - <v>493</v> + <v>494</v> </b> <b> <a>2</a> @@ -8757,47 +8741,47 @@ <b> <a>10</a> <b>20</b> - <v>349</v> + <v>350</v> </b> <b> <a>20</a> <b>51</b> - <v>349</v> + <v>350</v> </b> <b> <a>65</a> <b>151</b> - <v>349</v> + <v>350</v> </b> <b> <a>161</a> <b>360</b> - <v>349</v> + <v>350</v> </b> <b> <a>361</a> <b>577</b> - <v>349</v> + <v>350</v> </b> <b> <a>590</a> <b>923</b> - <v>349</v> + <v>350</v> </b> <b> <a>928</a> <b>1265</b> - <v>349</v> + <v>350</v> </b> <b> <a>1268</a> <b>1742</b> - <v>349</v> + <v>350</v> </b> <b> <a>1781</a> <b>2320</b> - <v>349</v> + <v>350</v> </b> <b> <a>2491</a> @@ -8818,32 +8802,32 @@ <b> <a>1</a> <b>2</b> - <v>493</v> + <v>494</v> </b> <b> <a>2</a> <b>4</b> - <v>349</v> + <v>350</v> </b> <b> <a>4</a> <b>7</b> - <v>390</v> + <v>391</v> </b> <b> <a>7</a> <b>16</b> - <v>349</v> + <v>350</v> </b> <b> <a>16</a> <b>37</b> - <v>349</v> + <v>350</v> </b> <b> <a>37</a> <b>59</b> - <v>390</v> + <v>391</v> </b> <b> <a>59</a> @@ -8904,7 +8888,7 @@ <b> <a>1</a> <b>2</b> - <v>493</v> + <v>494</v> </b> <b> <a>2</a> @@ -8919,47 +8903,47 @@ <b> <a>10</a> <b>20</b> - <v>349</v> + <v>350</v> </b> <b> <a>20</a> <b>51</b> - <v>349</v> + <v>350</v> </b> <b> <a>65</a> <b>151</b> - <v>349</v> + <v>350</v> </b> <b> <a>162</a> <b>360</b> - <v>349</v> + <v>350</v> </b> <b> <a>361</a> <b>578</b> - <v>349</v> + <v>350</v> </b> <b> <a>591</a> <b>926</b> - <v>349</v> + <v>350</v> </b> <b> <a>930</a> <b>1266</b> - <v>349</v> + <v>350</v> </b> <b> <a>1272</a> <b>1742</b> - <v>349</v> + <v>350</v> </b> <b> <a>1785</a> <b>2324</b> - <v>349</v> + <v>350</v> </b> <b> <a>2500</a> @@ -8985,7 +8969,7 @@ <b> <a>2</a> <b>4</b> - <v>328</v> + <v>329</v> </b> <b> <a>4</a> @@ -8995,22 +8979,22 @@ <b> <a>7</a> <b>15</b> - <v>349</v> + <v>350</v> </b> <b> <a>15</a> <b>36</b> - <v>349</v> + <v>350</v> </b> <b> <a>36</a> <b>61</b> - <v>349</v> + <v>350</v> </b> <b> <a>61</a> <b>70</b> - <v>349</v> + <v>350</v> </b> <b> <a>70</a> @@ -9020,7 +9004,7 @@ <b> <a>73</a> <b>75</b> - <v>328</v> + <v>329</v> </b> <b> <a>75</a> @@ -9035,12 +9019,12 @@ <b> <a>77</a> <b>79</b> - <v>349</v> + <v>350</v> </b> <b> <a>79</a> <b>84</b> - <v>349</v> + <v>350</v> </b> <b> <a>84</a> @@ -9061,67 +9045,67 @@ <b> <a>1</a> <b>5</b> - <v>16116</v> + <v>16141</v> </b> <b> <a>5</a> <b>9</b> - <v>16486</v> + <v>16512</v> </b> <b> <a>9</a> <b>15</b> - <v>16034</v> + <v>16059</v> </b> <b> <a>15</a> <b>23</b> - <v>15109</v> + <v>15132</v> </b> <b> <a>23</a> <b>32</b> - <v>15150</v> + <v>15173</v> </b> <b> <a>32</a> <b>44</b> - <v>15006</v> + <v>15029</v> </b> <b> <a>44</a> <b>60</b> - <v>14760</v> + <v>14782</v> </b> <b> <a>60</a> <b>80</b> - <v>14821</v> + <v>14844</v> </b> <b> <a>80</a> <b>103</b> - <v>14636</v> + <v>14659</v> </b> <b> <a>103</a> <b>130</b> - <v>14780</v> + <v>14803</v> </b> <b> <a>130</a> <b>159</b> - <v>14534</v> + <v>14556</v> </b> <b> <a>159</a> <b>194</b> - <v>14616</v> + <v>14638</v> </b> <b> <a>194</a> <b>302</b> - <v>9888</v> + <v>9903</v> </b> </bs> </hist> @@ -9137,62 +9121,62 @@ <b> <a>1</a> <b>2</b> - <v>23517</v> + <v>23553</v> </b> <b> <a>2</a> <b>3</b> - <v>15623</v> + <v>15647</v> </b> <b> <a>3</a> <b>4</b> - <v>11347</v> + <v>11364</v> </b> <b> <a>4</a> <b>6</b> - <v>16363</v> + <v>16388</v> </b> <b> <a>6</a> <b>8</b> - <v>13629</v> + <v>13650</v> </b> <b> <a>8</a> <b>11</b> - <v>16445</v> + <v>16470</v> </b> <b> <a>11</a> <b>16</b> - <v>17350</v> + <v>17376</v> </b> <b> <a>16</a> <b>21</b> - <v>16445</v> + <v>16470</v> </b> <b> <a>21</a> <b>28</b> - <v>16651</v> + <v>16676</v> </b> <b> <a>28</a> <b>35</b> - <v>15808</v> + <v>15832</v> </b> <b> <a>35</a> <b>43</b> - <v>15849</v> + <v>15873</v> </b> <b> <a>43</a> <b>60</b> - <v>12909</v> + <v>12929</v> </b> </bs> </hist> @@ -9208,62 +9192,62 @@ <b> <a>1</a> <b>4</b> - <v>15973</v> + <v>15997</v> </b> <b> <a>4</a> <b>7</b> - <v>17535</v> + <v>17562</v> </b> <b> <a>7</a> <b>11</b> - <v>16692</v> + <v>16718</v> </b> <b> <a>11</a> <b>16</b> - <v>17412</v> + <v>17438</v> </b> <b> <a>16</a> <b>21</b> - <v>17514</v> + <v>17541</v> </b> <b> <a>21</a> <b>26</b> - <v>15068</v> + <v>15091</v> </b> <b> <a>26</a> <b>31</b> - <v>16178</v> + <v>16203</v> </b> <b> <a>31</a> <b>36</b> - <v>17720</v> + <v>17747</v> </b> <b> <a>36</a> <b>40</b> - <v>15705</v> + <v>15729</v> </b> <b> <a>40</a> <b>44</b> - <v>16301</v> + <v>16326</v> </b> <b> <a>44</a> <b>49</b> - <v>16898</v> + <v>16923</v> </b> <b> <a>49</a> <b>63</b> - <v>8942</v> + <v>8956</v> </b> </bs> </hist> @@ -9279,27 +9263,27 @@ <b> <a>1</a> <b>2</b> - <v>101964</v> + <v>102119</v> </b> <b> <a>2</a> <b>3</b> - <v>44629</v> + <v>44698</v> </b> <b> <a>3</a> <b>4</b> - <v>27649</v> + <v>27691</v> </b> <b> <a>4</a> <b>6</b> - <v>14575</v> + <v>14597</v> </b> <b> <a>6</a> <b>23</b> - <v>3124</v> + <v>3129</v> </b> </bs> </hist> @@ -9315,62 +9299,62 @@ <b> <a>1</a> <b>4</b> - <v>16959</v> + <v>16985</v> </b> <b> <a>4</a> <b>7</b> - <v>16651</v> + <v>16676</v> </b> <b> <a>7</a> <b>11</b> - <v>16425</v> + <v>16450</v> </b> <b> <a>11</a> <b>16</b> - <v>16219</v> + <v>16244</v> </b> <b> <a>16</a> <b>21</b> - <v>16445</v> + <v>16470</v> </b> <b> <a>21</a> <b>27</b> - <v>16774</v> + <v>16800</v> </b> <b> <a>27</a> <b>33</b> - <v>16445</v> + <v>16470</v> </b> <b> <a>33</a> <b>38</b> - <v>14472</v> + <v>14494</v> </b> <b> <a>38</a> <b>43</b> - <v>15541</v> + <v>15565</v> </b> <b> <a>43</a> <b>47</b> - <v>14698</v> + <v>14720</v> </b> <b> <a>47</a> <b>52</b> - <v>16774</v> + <v>16800</v> </b> <b> <a>52</a> <b>65</b> - <v>14451</v> + <v>14473</v> </b> <b> <a>65</a> @@ -9467,7 +9451,7 @@ <b> <a>1</a> <b>2</b> - <v>328</v> + <v>329</v> </b> <b> <a>2</a> @@ -9477,7 +9461,7 @@ <b> <a>3</a> <b>4</b> - <v>143</v> + <v>144</v> </b> <b> <a>4</a> @@ -9517,7 +9501,7 @@ <b> <a>142</a> <b>144</b> - <v>143</v> + <v>144</v> </b> <b> <a>144</a> @@ -9700,7 +9684,7 @@ <b> <a>1</a> <b>2</b> - <v>328</v> + <v>329</v> </b> <b> <a>2</a> @@ -9776,67 +9760,67 @@ <b> <a>1</a> <b>5</b> - <v>16137</v> + <v>16162</v> </b> <b> <a>5</a> <b>9</b> - <v>16486</v> + <v>16512</v> </b> <b> <a>9</a> <b>15</b> - <v>15808</v> + <v>15832</v> </b> <b> <a>15</a> <b>23</b> - <v>15089</v> + <v>15112</v> </b> <b> <a>23</a> <b>32</b> - <v>15644</v> + <v>15667</v> </b> <b> <a>32</a> <b>44</b> - <v>14739</v> + <v>14762</v> </b> <b> <a>44</a> <b>60</b> - <v>14492</v> + <v>14515</v> </b> <b> <a>60</a> <b>80</b> - <v>15253</v> + <v>15276</v> </b> <b> <a>80</a> <b>103</b> - <v>14534</v> + <v>14556</v> </b> <b> <a>103</a> <b>130</b> - <v>14760</v> + <v>14782</v> </b> <b> <a>130</a> <b>160</b> - <v>14883</v> + <v>14906</v> </b> <b> <a>160</a> <b>195</b> - <v>14554</v> + <v>14576</v> </b> <b> <a>195</a> <b>299</b> - <v>9538</v> + <v>9553</v> </b> </bs> </hist> @@ -9852,67 +9836,67 @@ <b> <a>1</a> <b>2</b> - <v>23517</v> + <v>23553</v> </b> <b> <a>2</a> <b>3</b> - <v>15561</v> + <v>15585</v> </b> <b> <a>3</a> <b>4</b> - <v>11347</v> + <v>11364</v> </b> <b> <a>4</a> <b>6</b> - <v>16055</v> + <v>16079</v> </b> <b> <a>6</a> <b>8</b> - <v>13485</v> + <v>13506</v> </b> <b> <a>8</a> <b>11</b> - <v>16507</v> + <v>16532</v> </b> <b> <a>11</a> <b>15</b> - <v>14431</v> + <v>14453</v> </b> <b> <a>15</a> <b>20</b> - <v>16774</v> + <v>16800</v> </b> <b> <a>20</a> <b>26</b> - <v>14986</v> + <v>15009</v> </b> <b> <a>26</a> <b>33</b> - <v>16055</v> + <v>16079</v> </b> <b> <a>33</a> <b>40</b> - <v>14636</v> + <v>14659</v> </b> <b> <a>40</a> <b>49</b> - <v>14595</v> + <v>14617</v> </b> <b> <a>49</a> <b>60</b> - <v>3967</v> + <v>3973</v> </b> </bs> </hist> @@ -9928,27 +9912,27 @@ <b> <a>1</a> <b>2</b> - <v>95488</v> + <v>95634</v> </b> <b> <a>2</a> <b>3</b> - <v>50015</v> + <v>50092</v> </b> <b> <a>3</a> <b>4</b> - <v>29376</v> + <v>29421</v> </b> <b> <a>4</a> <b>6</b> - <v>15602</v> + <v>15626</v> </b> <b> <a>6</a> <b>11</b> - <v>1439</v> + <v>1441</v> </b> </bs> </hist> @@ -9964,62 +9948,62 @@ <b> <a>1</a> <b>4</b> - <v>15829</v> + <v>15853</v> </b> <b> <a>4</a> <b>7</b> - <v>17453</v> + <v>17479</v> </b> <b> <a>7</a> <b>11</b> - <v>16486</v> + <v>16512</v> </b> <b> <a>11</a> <b>16</b> - <v>17350</v> + <v>17376</v> </b> <b> <a>16</a> <b>21</b> - <v>17309</v> + <v>17335</v> </b> <b> <a>21</a> <b>26</b> - <v>15150</v> + <v>15173</v> </b> <b> <a>26</a> <b>31</b> - <v>16301</v> + <v>16326</v> </b> <b> <a>31</a> <b>36</b> - <v>17679</v> + <v>17706</v> </b> <b> <a>36</a> <b>40</b> - <v>15294</v> + <v>15317</v> </b> <b> <a>40</a> <b>44</b> - <v>16445</v> + <v>16470</v> </b> <b> <a>44</a> <b>49</b> - <v>16980</v> + <v>17006</v> </b> <b> <a>49</a> <b>63</b> - <v>9641</v> + <v>9656</v> </b> </bs> </hist> @@ -10035,62 +10019,62 @@ <b> <a>1</a> <b>4</b> - <v>17185</v> + <v>17212</v> </b> <b> <a>4</a> <b>7</b> - <v>16795</v> + <v>16820</v> </b> <b> <a>7</a> <b>11</b> - <v>16425</v> + <v>16450</v> </b> <b> <a>11</a> <b>16</b> - <v>16877</v> + <v>16903</v> </b> <b> <a>16</a> <b>21</b> - <v>16014</v> + <v>16038</v> </b> <b> <a>21</a> <b>26</b> - <v>14513</v> + <v>14535</v> </b> <b> <a>26</a> <b>32</b> - <v>16158</v> + <v>16182</v> </b> <b> <a>32</a> <b>38</b> - <v>17494</v> + <v>17520</v> </b> <b> <a>38</a> <b>43</b> - <v>16137</v> + <v>16162</v> </b> <b> <a>43</a> <b>47</b> - <v>14472</v> + <v>14494</v> </b> <b> <a>47</a> <b>52</b> - <v>16569</v> + <v>16594</v> </b> <b> <a>52</a> <b>69</b> - <v>13280</v> + <v>13300</v> </b> </bs> </hist> @@ -10121,7 +10105,7 @@ <b> <a>10</a> <b>16</b> - <v>246</v> + <v>247</v> </b> <b> <a>16</a> @@ -10182,7 +10166,7 @@ <b> <a>1</a> <b>2</b> - <v>328</v> + <v>329</v> </b> <b> <a>2</a> @@ -10222,12 +10206,12 @@ <b> <a>137</a> <b>142</b> - <v>246</v> + <v>247</v> </b> <b> <a>142</a> <b>147</b> - <v>143</v> + <v>144</v> </b> <b> <a>147</a> @@ -10237,7 +10221,7 @@ <b> <a>148</a> <b>151</b> - <v>246</v> + <v>247</v> </b> <b> <a>151</a> @@ -10268,7 +10252,7 @@ <b> <a>4</a> <b>8</b> - <v>246</v> + <v>247</v> </b> <b> <a>8</a> @@ -10344,17 +10328,17 @@ <b> <a>4</a> <b>9</b> - <v>246</v> + <v>247</v> </b> <b> <a>9</a> <b>14</b> - <v>246</v> + <v>247</v> </b> <b> <a>14</a> <b>22</b> - <v>246</v> + <v>247</v> </b> <b> <a>23</a> @@ -10415,7 +10399,7 @@ <b> <a>4</a> <b>8</b> - <v>246</v> + <v>247</v> </b> <b> <a>8</a> @@ -10475,23 +10459,23 @@ </relation> <relation> <name>numlines</name> - <cardinality>1380918</cardinality> + <cardinality>1382466</cardinality> <columnsizes> <e> <k>element_id</k> - <v>1373930</v> + <v>1375469</v> </e> <e> <k>num_lines</k> - <v>101565</v> + <v>101679</v> </e> <e> <k>num_code</k> - <v>84793</v> + <v>84888</v> </e> <e> <k>num_comment</k> - <v>59634</v> + <v>59701</v> </e> </columnsizes> <dependencies> @@ -10505,12 +10489,12 @@ <b> <a>1</a> <b>2</b> - <v>1366941</v> + <v>1368473</v> </b> <b> <a>2</a> <b>3</b> - <v>6988</v> + <v>6996</v> </b> </bs> </hist> @@ -10526,12 +10510,12 @@ <b> <a>1</a> <b>2</b> - <v>1367873</v> + <v>1369406</v> </b> <b> <a>2</a> <b>3</b> - <v>6056</v> + <v>6063</v> </b> </bs> </hist> @@ -10547,7 +10531,7 @@ <b> <a>1</a> <b>2</b> - <v>1373930</v> + <v>1375469</v> </b> </bs> </hist> @@ -10563,27 +10547,27 @@ <b> <a>1</a> <b>2</b> - <v>68020</v> + <v>68097</v> </b> <b> <a>2</a> <b>3</b> - <v>12113</v> + <v>12126</v> </b> <b> <a>3</a> <b>4</b> - <v>7454</v> + <v>7462</v> </b> <b> <a>4</a> <b>21</b> - <v>7920</v> + <v>7929</v> </b> <b> <a>29</a> <b>921</b> - <v>6056</v> + <v>6063</v> </b> </bs> </hist> @@ -10599,27 +10583,27 @@ <b> <a>1</a> <b>2</b> - <v>70350</v> + <v>70429</v> </b> <b> <a>2</a> <b>3</b> - <v>12113</v> + <v>12126</v> </b> <b> <a>3</a> <b>4</b> - <v>8386</v> + <v>8395</v> </b> <b> <a>4</a> <b>6</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>6</a> <b>7</b> - <v>1397</v> + <v>1399</v> </b> </bs> </hist> @@ -10635,22 +10619,22 @@ <b> <a>1</a> <b>2</b> - <v>69418</v> + <v>69496</v> </b> <b> <a>2</a> <b>3</b> - <v>14908</v> + <v>14925</v> </b> <b> <a>3</a> <b>4</b> - <v>10715</v> + <v>10727</v> </b> <b> <a>4</a> <b>7</b> - <v>6522</v> + <v>6529</v> </b> </bs> </hist> @@ -10666,27 +10650,27 @@ <b> <a>1</a> <b>2</b> - <v>52646</v> + <v>52705</v> </b> <b> <a>2</a> <b>3</b> - <v>14442</v> + <v>14458</v> </b> <b> <a>3</a> <b>5</b> - <v>6522</v> + <v>6529</v> </b> <b> <a>5</a> <b>42</b> - <v>6522</v> + <v>6529</v> </b> <b> <a>44</a> <b>922</b> - <v>4658</v> + <v>4664</v> </b> </bs> </hist> @@ -10702,27 +10686,27 @@ <b> <a>1</a> <b>2</b> - <v>52646</v> + <v>52705</v> </b> <b> <a>2</a> <b>3</b> - <v>16772</v> + <v>16791</v> </b> <b> <a>3</a> <b>5</b> - <v>6056</v> + <v>6063</v> </b> <b> <a>5</a> <b>8</b> - <v>6522</v> + <v>6529</v> </b> <b> <a>8</a> <b>12</b> - <v>2795</v> + <v>2798</v> </b> </bs> </hist> @@ -10738,27 +10722,27 @@ <b> <a>1</a> <b>2</b> - <v>53112</v> + <v>53171</v> </b> <b> <a>2</a> <b>3</b> - <v>15840</v> + <v>15858</v> </b> <b> <a>3</a> <b>5</b> - <v>7454</v> + <v>7462</v> </b> <b> <a>5</a> <b>7</b> - <v>5124</v> + <v>5130</v> </b> <b> <a>7</a> <b>10</b> - <v>3261</v> + <v>3264</v> </b> </bs> </hist> @@ -10774,32 +10758,32 @@ <b> <a>1</a> <b>2</b> - <v>34476</v> + <v>34515</v> </b> <b> <a>2</a> <b>3</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>3</a> <b>4</b> - <v>4193</v> + <v>4197</v> </b> <b> <a>4</a> <b>6</b> - <v>4658</v> + <v>4664</v> </b> <b> <a>6</a> <b>11</b> - <v>5124</v> + <v>5130</v> </b> <b> <a>17</a> <b>2596</b> - <v>1863</v> + <v>1865</v> </b> </bs> </hist> @@ -10815,32 +10799,32 @@ <b> <a>1</a> <b>2</b> - <v>34476</v> + <v>34515</v> </b> <b> <a>2</a> <b>3</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>3</a> <b>4</b> - <v>4193</v> + <v>4197</v> </b> <b> <a>4</a> <b>6</b> - <v>4658</v> + <v>4664</v> </b> <b> <a>6</a> <b>8</b> - <v>4658</v> + <v>4664</v> </b> <b> <a>10</a> <b>38</b> - <v>2329</v> + <v>2332</v> </b> </bs> </hist> @@ -10856,32 +10840,32 @@ <b> <a>1</a> <b>2</b> - <v>34476</v> + <v>34515</v> </b> <b> <a>2</a> <b>3</b> - <v>9317</v> + <v>9328</v> </b> <b> <a>3</a> <b>4</b> - <v>4193</v> + <v>4197</v> </b> <b> <a>4</a> <b>6</b> - <v>4658</v> + <v>4664</v> </b> <b> <a>6</a> <b>10</b> - <v>4658</v> + <v>4664</v> </b> <b> <a>10</a> <b>37</b> - <v>2329</v> + <v>2332</v> </b> </bs> </hist> @@ -10891,11 +10875,11 @@ </relation> <relation> <name>diagnostics</name> - <cardinality>5192</cardinality> + <cardinality>5013</cardinality> <columnsizes> <e> <k>id</k> - <v>5192</v> + <v>5013</v> </e> <e> <k>severity</k> @@ -10903,19 +10887,19 @@ </e> <e> <k>error_tag</k> - <v>39</v> + <v>38</v> </e> <e> <k>error_message</k> - <v>414</v> + <v>400</v> </e> <e> <k>full_error_message</k> - <v>4362</v> + <v>4213</v> </e> <e> <k>location</k> - <v>177</v> + <v>171</v> </e> </columnsizes> <dependencies> @@ -10929,7 +10913,7 @@ <b> <a>1</a> <b>2</b> - <v>5192</v> + <v>5013</v> </b> </bs> </hist> @@ -10945,7 +10929,7 @@ <b> <a>1</a> <b>2</b> - <v>5192</v> + <v>5013</v> </b> </bs> </hist> @@ -10961,7 +10945,7 @@ <b> <a>1</a> <b>2</b> - <v>5192</v> + <v>5013</v> </b> </bs> </hist> @@ -10977,7 +10961,7 @@ <b> <a>1</a> <b>2</b> - <v>5192</v> + <v>5013</v> </b> </bs> </hist> @@ -10993,7 +10977,7 @@ <b> <a>1</a> <b>2</b> - <v>5192</v> + <v>5013</v> </b> </bs> </hist> @@ -11110,7 +11094,7 @@ <b> <a>1</a> <b>2</b> - <v>39</v> + <v>38</v> </b> </bs> </hist> @@ -11189,17 +11173,17 @@ <b> <a>1</a> <b>2</b> - <v>118</v> + <v>114</v> </b> <b> <a>2</a> <b>3</b> - <v>157</v> + <v>152</v> </b> <b> <a>3</a> <b>4</b> - <v>78</v> + <v>76</v> </b> <b> <a>43</a> @@ -11209,7 +11193,7 @@ <b> <a>93</a> <b>94</b> - <v>39</v> + <v>38</v> </b> </bs> </hist> @@ -11225,7 +11209,7 @@ <b> <a>1</a> <b>2</b> - <v>414</v> + <v>400</v> </b> </bs> </hist> @@ -11241,7 +11225,7 @@ <b> <a>1</a> <b>2</b> - <v>414</v> + <v>400</v> </b> </bs> </hist> @@ -11257,22 +11241,22 @@ <b> <a>1</a> <b>2</b> - <v>138</v> + <v>133</v> </b> <b> <a>2</a> <b>3</b> - <v>157</v> + <v>152</v> </b> <b> <a>3</a> <b>4</b> - <v>78</v> + <v>76</v> </b> <b> <a>93</a> <b>94</b> - <v>39</v> + <v>38</v> </b> </bs> </hist> @@ -11288,22 +11272,22 @@ <b> <a>1</a> <b>2</b> - <v>177</v> + <v>171</v> </b> <b> <a>2</a> <b>3</b> - <v>118</v> + <v>114</v> </b> <b> <a>3</a> <b>4</b> - <v>78</v> + <v>76</v> </b> <b> <a>4</a> <b>5</b> - <v>39</v> + <v>38</v> </b> </bs> </hist> @@ -11319,7 +11303,7 @@ <b> <a>1</a> <b>2</b> - <v>4343</v> + <v>4194</v> </b> <b> <a>43</a> @@ -11340,7 +11324,7 @@ <b> <a>1</a> <b>2</b> - <v>4362</v> + <v>4213</v> </b> </bs> </hist> @@ -11356,7 +11340,7 @@ <b> <a>1</a> <b>2</b> - <v>4362</v> + <v>4213</v> </b> </bs> </hist> @@ -11372,7 +11356,7 @@ <b> <a>1</a> <b>2</b> - <v>4362</v> + <v>4213</v> </b> </bs> </hist> @@ -11388,7 +11372,7 @@ <b> <a>1</a> <b>2</b> - <v>4362</v> + <v>4213</v> </b> </bs> </hist> @@ -11404,17 +11388,17 @@ <b> <a>6</a> <b>7</b> - <v>39</v> + <v>38</v> </b> <b> <a>22</a> <b>23</b> - <v>39</v> + <v>38</v> </b> <b> <a>41</a> <b>42</b> - <v>78</v> + <v>76</v> </b> <b> <a>43</a> @@ -11435,7 +11419,7 @@ <b> <a>1</a> <b>2</b> - <v>177</v> + <v>171</v> </b> </bs> </hist> @@ -11451,7 +11435,7 @@ <b> <a>1</a> <b>2</b> - <v>177</v> + <v>171</v> </b> </bs> </hist> @@ -11472,17 +11456,17 @@ <b> <a>3</a> <b>4</b> - <v>39</v> + <v>38</v> </b> <b> <a>5</a> <b>6</b> - <v>39</v> + <v>38</v> </b> <b> <a>6</a> <b>7</b> - <v>78</v> + <v>76</v> </b> </bs> </hist> @@ -11503,17 +11487,17 @@ <b> <a>6</a> <b>7</b> - <v>39</v> + <v>38</v> </b> <b> <a>22</a> <b>23</b> - <v>39</v> + <v>38</v> </b> <b> <a>41</a> <b>42</b> - <v>78</v> + <v>76</v> </b> </bs> </hist> @@ -11523,15 +11507,15 @@ </relation> <relation> <name>files</name> - <cardinality>122996</cardinality> + <cardinality>123134</cardinality> <columnsizes> <e> <k>id</k> - <v>122996</v> + <v>123134</v> </e> <e> <k>name</k> - <v>122996</v> + <v>123134</v> </e> </columnsizes> <dependencies> @@ -11545,7 +11529,7 @@ <b> <a>1</a> <b>2</b> - <v>122996</v> + <v>123134</v> </b> </bs> </hist> @@ -11561,7 +11545,7 @@ <b> <a>1</a> <b>2</b> - <v>122996</v> + <v>123134</v> </b> </bs> </hist> @@ -11571,15 +11555,15 @@ </relation> <relation> <name>folders</name> - <cardinality>15374</cardinality> + <cardinality>16324</cardinality> <columnsizes> <e> <k>id</k> - <v>15374</v> + <v>16324</v> </e> <e> <k>name</k> - <v>15374</v> + <v>16324</v> </e> </columnsizes> <dependencies> @@ -11593,7 +11577,7 @@ <b> <a>1</a> <b>2</b> - <v>15374</v> + <v>16324</v> </b> </bs> </hist> @@ -11609,7 +11593,7 @@ <b> <a>1</a> <b>2</b> - <v>15374</v> + <v>16324</v> </b> </bs> </hist> @@ -11619,15 +11603,15 @@ </relation> <relation> <name>containerparent</name> - <cardinality>137439</cardinality> + <cardinality>138526</cardinality> <columnsizes> <e> <k>parent</k> - <v>15374</v> + <v>16324</v> </e> <e> <k>child</k> - <v>137439</v> + <v>138526</v> </e> </columnsizes> <dependencies> @@ -11641,32 +11625,32 @@ <b> <a>1</a> <b>2</b> - <v>6522</v> + <v>7462</v> </b> <b> <a>2</a> <b>3</b> - <v>3261</v> + <v>3264</v> </b> <b> <a>3</a> - <b>5</b> - <v>1397</v> + <b>4</b> + <v>1399</v> </b> <b> - <a>5</a> + <a>4</a> <b>12</b> - <v>1397</v> + <v>1399</v> </b> <b> <a>23</a> <b>28</b> - <v>1397</v> + <v>1399</v> </b> <b> <a>40</a> <b>67</b> - <v>1397</v> + <v>1399</v> </b> </bs> </hist> @@ -11682,7 +11666,7 @@ <b> <a>1</a> <b>2</b> - <v>137439</v> + <v>138526</v> </b> </bs> </hist> @@ -11692,11 +11676,11 @@ </relation> <relation> <name>fileannotations</name> - <cardinality>5104924</cardinality> + <cardinality>5084962</cardinality> <columnsizes> <e> <k>id</k> - <v>4875</v> + <v>4856</v> </e> <e> <k>kind</k> @@ -11704,11 +11688,11 @@ </e> <e> <k>name</k> - <v>54511</v> + <v>54298</v> </e> <e> <k>value</k> - <v>45826</v> + <v>45647</v> </e> </columnsizes> <dependencies> @@ -11722,12 +11706,12 @@ <b> <a>1</a> <b>2</b> - <v>168</v> + <v>167</v> </b> <b> <a>2</a> <b>3</b> - <v>4707</v> + <v>4688</v> </b> </bs> </hist> @@ -11743,42 +11727,42 @@ <b> <a>1</a> <b>102</b> - <v>381</v> + <v>380</v> </b> <b> <a>102</a> <b>225</b> - <v>370</v> + <v>369</v> </b> <b> <a>227</a> <b>299</b> - <v>370</v> + <v>369</v> </b> <b> <a>301</a> <b>452</b> - <v>393</v> + <v>391</v> </b> <b> <a>452</a> <b>555</b> - <v>370</v> + <v>369</v> </b> <b> <a>559</a> <b>626</b> - <v>370</v> + <v>369</v> </b> <b> <a>626</a> <b>716</b> - <v>370</v> + <v>369</v> </b> <b> <a>729</a> <b>904</b> - <v>370</v> + <v>369</v> </b> <b> <a>904</a> @@ -11788,12 +11772,12 @@ <b> <a>936</a> <b>937</b> - <v>1415</v> + <v>1410</v> </b> <b> <a>1083</a> <b>2036</b> - <v>370</v> + <v>369</v> </b> <b> <a>2293</a> @@ -11814,52 +11798,52 @@ <b> <a>1</a> <b>114</b> - <v>381</v> + <v>380</v> </b> <b> <a>114</a> <b>275</b> - <v>370</v> + <v>369</v> </b> <b> <a>275</a> <b>363</b> - <v>370</v> + <v>369</v> </b> <b> <a>393</a> <b>638</b> - <v>370</v> + <v>369</v> </b> <b> <a>643</a> <b>744</b> - <v>370</v> + <v>369</v> </b> <b> <a>751</a> <b>955</b> - <v>370</v> + <v>369</v> </b> <b> <a>955</a> <b>1087</b> - <v>370</v> + <v>369</v> </b> <b> <a>1088</a> <b>1501</b> - <v>247</v> + <v>246</v> </b> <b> <a>1501</a> <b>1502</b> - <v>1415</v> + <v>1410</v> </b> <b> <a>1504</a> <b>1874</b> - <v>370</v> + <v>369</v> </b> <b> <a>1972</a> @@ -11943,62 +11927,62 @@ <b> <a>1</a> <b>2</b> - <v>8819</v> + <v>8784</v> </b> <b> <a>2</a> <b>3</b> - <v>6190</v> + <v>6166</v> </b> <b> <a>3</a> <b>5</b> - <v>4156</v> + <v>4140</v> </b> <b> <a>5</a> <b>9</b> - <v>4246</v> + <v>4230</v> </b> <b> <a>9</a> <b>14</b> - <v>3965</v> + <v>3950</v> </b> <b> <a>14</a> <b>18</b> - <v>4156</v> + <v>4140</v> </b> <b> <a>18</a> <b>20</b> - <v>4696</v> + <v>4677</v> </b> <b> <a>20</a> <b>34</b> - <v>4201</v> + <v>4185</v> </b> <b> <a>34</a> <b>128</b> - <v>4482</v> + <v>4465</v> </b> <b> <a>128</a> <b>229</b> - <v>4100</v> + <v>4084</v> </b> <b> <a>229</a> <b>387</b> - <v>4224</v> + <v>4207</v> </b> <b> <a>387</a> <b>434</b> - <v>1269</v> + <v>1264</v> </b> </bs> </hist> @@ -12014,7 +11998,7 @@ <b> <a>1</a> <b>2</b> - <v>54511</v> + <v>54298</v> </b> </bs> </hist> @@ -12030,62 +12014,62 @@ <b> <a>1</a> <b>2</b> - <v>8830</v> + <v>8796</v> </b> <b> <a>2</a> <b>3</b> - <v>8021</v> + <v>7990</v> </b> <b> <a>3</a> <b>4</b> - <v>2550</v> + <v>2540</v> </b> <b> <a>4</a> <b>6</b> - <v>4493</v> + <v>4476</v> </b> <b> <a>6</a> <b>9</b> - <v>4111</v> + <v>4095</v> </b> <b> <a>9</a> <b>14</b> - <v>4190</v> + <v>4174</v> </b> <b> <a>14</a> <b>17</b> - <v>4111</v> + <v>4095</v> </b> <b> <a>17</a> <b>22</b> - <v>4572</v> + <v>4554</v> </b> <b> <a>22</a> <b>41</b> - <v>4190</v> + <v>4174</v> </b> <b> <a>41</a> <b>82</b> - <v>4145</v> + <v>4129</v> </b> <b> <a>82</a> <b>157</b> - <v>4089</v> + <v>4073</v> </b> <b> <a>158</a> <b>1895</b> - <v>1202</v> + <v>1197</v> </b> </bs> </hist> @@ -12101,67 +12085,67 @@ <b> <a>1</a> <b>2</b> - <v>7122</v> + <v>7095</v> </b> <b> <a>2</a> <b>5</b> - <v>2224</v> + <v>2215</v> </b> <b> <a>5</a> <b>8</b> - <v>3314</v> + <v>3301</v> </b> <b> <a>8</a> <b>15</b> - <v>3516</v> + <v>3502</v> </b> <b> <a>15</a> <b>17</b> - <v>2527</v> + <v>2517</v> </b> <b> <a>17</a> <b>19</b> - <v>4123</v> + <v>4107</v> </b> <b> <a>19</a> <b>34</b> - <v>3314</v> + <v>3301</v> </b> <b> <a>34</a> <b>189</b> - <v>3606</v> + <v>3592</v> </b> <b> <a>189</a> <b>201</b> - <v>3595</v> + <v>3581</v> </b> <b> <a>201</a> <b>266</b> - <v>3538</v> + <v>3525</v> </b> <b> <a>266</a> <b>321</b> - <v>3662</v> + <v>3648</v> </b> <b> <a>322</a> <b>399</b> - <v>3932</v> + <v>3916</v> </b> <b> <a>399</a> <b>435</b> - <v>1348</v> + <v>1342</v> </b> </bs> </hist> @@ -12177,7 +12161,7 @@ <b> <a>1</a> <b>2</b> - <v>45815</v> + <v>45636</v> </b> <b> <a>2</a> @@ -12198,67 +12182,67 @@ <b> <a>1</a> <b>2</b> - <v>7145</v> + <v>7117</v> </b> <b> <a>2</a> <b>5</b> - <v>2572</v> + <v>2562</v> </b> <b> <a>5</a> <b>8</b> - <v>3494</v> + <v>3480</v> </b> <b> <a>8</a> <b>15</b> - <v>3538</v> + <v>3525</v> </b> <b> <a>15</a> <b>17</b> - <v>2819</v> + <v>2808</v> </b> <b> <a>17</a> <b>19</b> - <v>3572</v> + <v>3558</v> </b> <b> <a>19</a> <b>29</b> - <v>3494</v> + <v>3480</v> </b> <b> <a>29</a> <b>39</b> - <v>3651</v> + <v>3637</v> </b> <b> <a>39</a> <b>48</b> - <v>3595</v> + <v>3581</v> </b> <b> <a>48</a> <b>74</b> - <v>3550</v> + <v>3536</v> </b> <b> <a>74</a> <b>102</b> - <v>3437</v> + <v>3424</v> </b> <b> <a>102</a> <b>119</b> - <v>3583</v> + <v>3569</v> </b> <b> <a>119</a> <b>146</b> - <v>1370</v> + <v>1365</v> </b> </bs> </hist> @@ -12268,15 +12252,15 @@ </relation> <relation> <name>inmacroexpansion</name> - <cardinality>109622207</cardinality> + <cardinality>109785545</cardinality> <columnsizes> <e> <k>id</k> - <v>18001590</v> + <v>18028412</v> </e> <e> <k>inv</k> - <v>2696311</v> + <v>2700329</v> </e> </columnsizes> <dependencies> @@ -12290,37 +12274,37 @@ <b> <a>1</a> <b>3</b> - <v>1579695</v> + <v>1582049</v> </b> <b> <a>3</a> <b>5</b> - <v>1076257</v> + <v>1077861</v> </b> <b> <a>5</a> <b>6</b> - <v>1183189</v> + <v>1184952</v> </b> <b> <a>6</a> <b>7</b> - <v>4813034</v> + <v>4820205</v> </b> <b> <a>7</a> <b>8</b> - <v>6376831</v> + <v>6386332</v> </b> <b> <a>8</a> <b>9</b> - <v>2601529</v> + <v>2605405</v> </b> <b> <a>9</a> <b>21</b> - <v>371052</v> + <v>371604</v> </b> </bs> </hist> @@ -12336,57 +12320,57 @@ <b> <a>1</a> <b>2</b> - <v>377884</v> + <v>378447</v> </b> <b> <a>2</a> <b>3</b> - <v>543330</v> + <v>544135</v> </b> <b> <a>3</a> <b>4</b> - <v>351012</v> + <v>351535</v> </b> <b> <a>4</a> <b>7</b> - <v>200372</v> + <v>200670</v> </b> <b> <a>7</a> <b>8</b> - <v>206856</v> + <v>207164</v> </b> <b> <a>8</a> <b>9</b> - <v>241543</v> + <v>241902</v> </b> <b> <a>9</a> <b>10</b> - <v>2207</v> + <v>2210</v> </b> <b> <a>10</a> <b>11</b> - <v>325021</v> + <v>325505</v> </b> <b> <a>11</a> <b>337</b> - <v>224525</v> + <v>224864</v> </b> <b> <a>339</a> <b>423</b> - <v>206058</v> + <v>206365</v> </b> <b> <a>423</a> <b>7616</b> - <v>17499</v> + <v>17525</v> </b> </bs> </hist> @@ -12396,15 +12380,15 @@ </relation> <relation> <name>affectedbymacroexpansion</name> - <cardinality>35638060</cardinality> + <cardinality>35691161</cardinality> <columnsizes> <e> <k>id</k> - <v>5149370</v> + <v>5157043</v> </e> <e> <k>inv</k> - <v>2780793</v> + <v>2784936</v> </e> </columnsizes> <dependencies> @@ -12418,37 +12402,37 @@ <b> <a>1</a> <b>2</b> - <v>2811908</v> + <v>2816098</v> </b> <b> <a>2</a> <b>3</b> - <v>559328</v> + <v>560161</v> </b> <b> <a>3</a> <b>4</b> - <v>264527</v> + <v>264922</v> </b> <b> <a>4</a> <b>5</b> - <v>564985</v> + <v>565827</v> </b> <b> <a>5</a> <b>12</b> - <v>391343</v> + <v>391926</v> </b> <b> <a>12</a> <b>50</b> - <v>406819</v> + <v>407425</v> </b> <b> <a>50</a> <b>9900</b> - <v>150457</v> + <v>150681</v> </b> </bs> </hist> @@ -12464,67 +12448,67 @@ <b> <a>1</a> <b>4</b> - <v>228789</v> + <v>229130</v> </b> <b> <a>4</a> <b>7</b> - <v>231457</v> + <v>231802</v> </b> <b> <a>7</a> <b>9</b> - <v>220163</v> + <v>220491</v> </b> <b> <a>9</a> <b>12</b> - <v>250729</v> + <v>251102</v> </b> <b> <a>12</a> <b>13</b> - <v>333500</v> + <v>333997</v> </b> <b> <a>13</a> <b>14</b> - <v>165351</v> + <v>165598</v> </b> <b> <a>14</a> <b>15</b> - <v>298417</v> + <v>298861</v> </b> <b> <a>15</a> <b>16</b> - <v>121669</v> + <v>121850</v> </b> <b> <a>16</a> <b>17</b> - <v>276213</v> + <v>276624</v> </b> <b> <a>17</a> <b>18</b> - <v>146730</v> + <v>146949</v> </b> <b> <a>18</a> <b>20</b> - <v>251774</v> + <v>252149</v> </b> <b> <a>20</a> <b>25</b> - <v>208680</v> + <v>208991</v> </b> <b> <a>25</a> <b>109</b> - <v>47316</v> + <v>47386</v> </b> </bs> </hist> @@ -12534,19 +12518,19 @@ </relation> <relation> <name>macroinvocations</name> - <cardinality>33332083</cardinality> + <cardinality>33202987</cardinality> <columnsizes> <e> <k>id</k> - <v>33332083</v> + <v>33202987</v> </e> <e> <k>macro_id</k> - <v>79104</v> + <v>78795</v> </e> <e> <k>location</k> - <v>756755</v> + <v>753796</v> </e> <e> <k>kind</k> @@ -12564,7 +12548,7 @@ <b> <a>1</a> <b>2</b> - <v>33332083</v> + <v>33202987</v> </b> </bs> </hist> @@ -12580,7 +12564,7 @@ <b> <a>1</a> <b>2</b> - <v>33332083</v> + <v>33202987</v> </b> </bs> </hist> @@ -12596,7 +12580,7 @@ <b> <a>1</a> <b>2</b> - <v>33332083</v> + <v>33202987</v> </b> </bs> </hist> @@ -12612,57 +12596,57 @@ <b> <a>1</a> <b>2</b> - <v>16178</v> + <v>16114</v> </b> <b> <a>2</a> <b>3</b> - <v>16492</v> + <v>16428</v> </b> <b> <a>3</a> <b>4</b> - <v>3100</v> + <v>3088</v> </b> <b> <a>4</a> <b>5</b> - <v>5246</v> + <v>5226</v> </b> <b> <a>5</a> <b>8</b> - <v>5662</v> + <v>5640</v> </b> <b> <a>8</a> <b>13</b> - <v>6078</v> + <v>6054</v> </b> <b> <a>13</a> <b>26</b> - <v>6156</v> + <v>6121</v> </b> <b> <a>26</a> <b>61</b> - <v>6033</v> + <v>6009</v> </b> <b> <a>61</a> - <b>200</b> - <v>5954</v> + <b>199</b> + <v>5919</v> </b> <b> - <a>200</a> + <a>199</a> <b>1697</b> - <v>5965</v> + <v>5964</v> </b> <b> <a>1716</a> <b>168807</b> - <v>2235</v> + <v>2226</v> </b> </bs> </hist> @@ -12678,37 +12662,37 @@ <b> <a>1</a> <b>2</b> - <v>42265</v> + <v>42100</v> </b> <b> <a>2</a> <b>3</b> - <v>10347</v> + <v>10306</v> </b> <b> <a>3</a> <b>4</b> - <v>5134</v> + <v>5114</v> </b> <b> <a>4</a> <b>6</b> - <v>6808</v> + <v>6781</v> </b> <b> <a>6</a> <b>13</b> - <v>6448</v> + <v>6423</v> </b> <b> <a>13</a> <b>66</b> - <v>5976</v> + <v>5953</v> </b> <b> <a>66</a> <b>3614</b> - <v>2123</v> + <v>2115</v> </b> </bs> </hist> @@ -12724,12 +12708,12 @@ <b> <a>1</a> <b>2</b> - <v>73397</v> + <v>73110</v> </b> <b> <a>2</a> <b>3</b> - <v>5707</v> + <v>5684</v> </b> </bs> </hist> @@ -12745,42 +12729,37 @@ <b> <a>1</a> <b>2</b> - <v>279881</v> + <v>278787</v> </b> <b> <a>2</a> <b>3</b> - <v>168814</v> + <v>168154</v> </b> <b> <a>3</a> <b>4</b> - <v>70419</v> + <v>70144</v> </b> <b> <a>4</a> <b>5</b> - <v>60005</v> + <v>59770</v> </b> <b> <a>5</a> - <b>8</b> - <v>53679</v> + <b>9</b> + <v>69786</v> </b> <b> - <a>8</a> - <b>17</b> - <v>62544</v> + <a>9</a> + <b>21</b> + <v>58595</v> </b> <b> - <a>17</a> - <b>525</b> - <v>56769</v> - </b> - <b> - <a>534</a> + <a>21</a> <b>244764</b> - <v>4639</v> + <v>48557</v> </b> </bs> </hist> @@ -12796,12 +12775,12 @@ <b> <a>1</a> <b>2</b> - <v>710804</v> + <v>708025</v> </b> <b> <a>2</a> <b>350</b> - <v>45950</v> + <v>45770</v> </b> </bs> </hist> @@ -12817,7 +12796,7 @@ <b> <a>1</a> <b>2</b> - <v>756755</v> + <v>753796</v> </b> </bs> </hist> @@ -12836,8 +12815,8 @@ <v>11</v> </b> <b> - <a>2946191</a> - <b>2946192</b> + <a>2946302</a> + <b>2946303</b> <v>11</v> </b> </bs> @@ -12890,15 +12869,15 @@ </relation> <relation> <name>macroparent</name> - <cardinality>29807887</cardinality> + <cardinality>29691721</cardinality> <columnsizes> <e> <k>id</k> - <v>29807887</v> + <v>29691721</v> </e> <e> <k>parent_id</k> - <v>23175993</v> + <v>23085760</v> </e> </columnsizes> <dependencies> @@ -12912,7 +12891,7 @@ <b> <a>1</a> <b>2</b> - <v>29807887</v> + <v>29691721</v> </b> </bs> </hist> @@ -12928,17 +12907,17 @@ <b> <a>1</a> <b>2</b> - <v>17907074</v> + <v>17837443</v> </b> <b> <a>2</a> <b>3</b> - <v>4438249</v> + <v>4420895</v> </b> <b> <a>3</a> <b>88</b> - <v>830669</v> + <v>827421</v> </b> </bs> </hist> @@ -12948,15 +12927,15 @@ </relation> <relation> <name>macrolocationbind</name> - <cardinality>4037867</cardinality> + <cardinality>4044034</cardinality> <columnsizes> <e> <k>id</k> - <v>2826997</v> + <v>2831314</v> </e> <e> <k>location</k> - <v>2018105</v> + <v>2021186</v> </e> </columnsizes> <dependencies> @@ -12970,22 +12949,22 @@ <b> <a>1</a> <b>2</b> - <v>2226651</v> + <v>2230051</v> </b> <b> <a>2</a> <b>3</b> - <v>340625</v> + <v>341145</v> </b> <b> <a>3</a> <b>7</b> - <v>230187</v> + <v>230539</v> </b> <b> <a>7</a> <b>57</b> - <v>29533</v> + <v>29578</v> </b> </bs> </hist> @@ -13001,22 +12980,22 @@ <b> <a>1</a> <b>2</b> - <v>1608661</v> + <v>1611118</v> </b> <b> <a>2</a> <b>3</b> - <v>177421</v> + <v>177692</v> </b> <b> <a>3</a> <b>8</b> - <v>156639</v> + <v>156878</v> </b> <b> <a>8</a> <b>723</b> - <v>75382</v> + <v>75497</v> </b> </bs> </hist> @@ -13026,19 +13005,19 @@ </relation> <relation> <name>macro_argument_unexpanded</name> - <cardinality>84144991</cardinality> + <cardinality>83818746</cardinality> <columnsizes> <e> <k>invocation</k> - <v>26089756</v> + <v>25989002</v> </e> <e> <k>argument_index</k> - <v>741</v> + <v>738</v> </e> <e> <k>text</k> - <v>316788</v> + <v>315549</v> </e> </columnsizes> <dependencies> @@ -13052,22 +13031,22 @@ <b> <a>1</a> <b>2</b> - <v>7397659</v> + <v>7368800</v> </b> <b> <a>2</a> <b>3</b> - <v>10622885</v> + <v>10582220</v> </b> <b> <a>3</a> <b>4</b> - <v>6109677</v> + <v>6086111</v> </b> <b> <a>4</a> <b>67</b> - <v>1959533</v> + <v>1951870</v> </b> </bs> </hist> @@ -13083,22 +13062,22 @@ <b> <a>1</a> <b>2</b> - <v>7467484</v> + <v>7438351</v> </b> <b> <a>2</a> <b>3</b> - <v>10768736</v> + <v>10727500</v> </b> <b> <a>3</a> <b>4</b> - <v>5944143</v> + <v>5921224</v> </b> <b> <a>4</a> <b>67</b> - <v>1909392</v> + <v>1901925</v> </b> </bs> </hist> @@ -13114,16 +13093,16 @@ <b> <a>41230</a> <b>41231</b> - <v>651</v> + <v>649</v> </b> <b> <a>41432</a> <b>174417</b> - <v>56</v> + <v>55</v> </b> <b> - <a>718232</a> - <b>2322223</b> + <a>718261</a> + <b>2322336</b> <v>33</v> </b> </bs> @@ -13140,12 +13119,12 @@ <b> <a>2</a> <b>3</b> - <v>651</v> + <v>649</v> </b> <b> <a>13</a> <b>995</b> - <v>56</v> + <v>55</v> </b> <b> <a>6559</a> @@ -13166,57 +13145,57 @@ <b> <a>1</a> <b>2</b> - <v>34906</v> + <v>34770</v> </b> <b> <a>2</a> <b>3</b> - <v>60971</v> + <v>60732</v> </b> <b> <a>3</a> <b>4</b> - <v>17661</v> + <v>17592</v> </b> <b> <a>4</a> <b>5</b> - <v>44849</v> + <v>44674</v> </b> <b> <a>5</a> <b>7</b> - <v>23885</v> + <v>23713</v> </b> <b> <a>7</a> <b>12</b> - <v>18402</v> + <v>18364</v> </b> <b> <a>12</a> <b>16</b> - <v>21503</v> + <v>21430</v> </b> <b> <a>16</a> <b>23</b> - <v>24851</v> + <v>24765</v> </b> <b> <a>23</a> <b>42</b> - <v>24199</v> + <v>24116</v> </b> <b> <a>42</a> <b>129</b> - <v>23963</v> + <v>23870</v> </b> <b> <a>129</a> <b>522417</b> - <v>21593</v> + <v>21520</v> </b> </bs> </hist> @@ -13232,17 +13211,17 @@ <b> <a>1</a> <b>2</b> - <v>229100</v> + <v>228204</v> </b> <b> <a>2</a> <b>3</b> - <v>77452</v> + <v>77150</v> </b> <b> <a>3</a> <b>9</b> - <v>10234</v> + <v>10194</v> </b> </bs> </hist> @@ -13252,19 +13231,19 @@ </relation> <relation> <name>macro_argument_expanded</name> - <cardinality>84144991</cardinality> + <cardinality>83818746</cardinality> <columnsizes> <e> <k>invocation</k> - <v>26089756</v> + <v>25989002</v> </e> <e> <k>argument_index</k> - <v>741</v> + <v>738</v> </e> <e> <k>text</k> - <v>191980</v> + <v>191229</v> </e> </columnsizes> <dependencies> @@ -13278,22 +13257,22 @@ <b> <a>1</a> <b>2</b> - <v>7397659</v> + <v>7368800</v> </b> <b> <a>2</a> <b>3</b> - <v>10622885</v> + <v>10582220</v> </b> <b> <a>3</a> <b>4</b> - <v>6109677</v> + <v>6086111</v> </b> <b> <a>4</a> <b>67</b> - <v>1959533</v> + <v>1951870</v> </b> </bs> </hist> @@ -13309,22 +13288,22 @@ <b> <a>1</a> <b>2</b> - <v>10638704</v> + <v>10597171</v> </b> <b> <a>2</a> <b>3</b> - <v>9157482</v> + <v>9122547</v> </b> <b> <a>3</a> <b>4</b> - <v>5183073</v> + <v>5163131</v> </b> <b> <a>4</a> <b>9</b> - <v>1110494</v> + <v>1106152</v> </b> </bs> </hist> @@ -13340,16 +13319,16 @@ <b> <a>41230</a> <b>41231</b> - <v>651</v> + <v>649</v> </b> <b> <a>41432</a> <b>174417</b> - <v>56</v> + <v>55</v> </b> <b> - <a>718232</a> - <b>2322223</b> + <a>718261</a> + <b>2322336</b> <v>33</v> </b> </bs> @@ -13366,12 +13345,12 @@ <b> <a>1</a> <b>2</b> - <v>640</v> + <v>637</v> </b> <b> <a>2</a> <b>76</b> - <v>56</v> + <v>55</v> </b> <b> <a>870</a> @@ -13392,62 +13371,62 @@ <b> <a>1</a> <b>2</b> - <v>20694</v> + <v>20613</v> </b> <b> <a>2</a> <b>3</b> - <v>37131</v> + <v>36985</v> </b> <b> <a>3</a> <b>4</b> - <v>9021</v> + <v>8986</v> </b> <b> <a>4</a> <b>5</b> - <v>16301</v> + <v>16237</v> </b> <b> <a>5</a> <b>6</b> - <v>2471</v> + <v>2394</v> </b> <b> <a>6</a> <b>7</b> - <v>22750</v> + <v>22650</v> </b> <b> <a>7</a> <b>9</b> - <v>14695</v> + <v>14671</v> </b> <b> <a>9</a> <b>14</b> - <v>11976</v> + <v>11940</v> </b> <b> <a>14</a> <b>19</b> - <v>14504</v> + <v>14425</v> </b> <b> <a>19</a> - <b>49</b> - <v>15739</v> + <b>48</b> + <v>14346</v> </b> <b> - <a>49</a> - <b>169</b> - <v>14414</v> + <a>48</a> + <b>151</b> + <v>14357</v> </b> <b> - <a>169</a> + <a>152</a> <b>1060462</b> - <v>12279</v> + <v>13619</v> </b> </bs> </hist> @@ -13463,17 +13442,17 @@ <b> <a>1</a> <b>2</b> - <v>97158</v> + <v>96778</v> </b> <b> <a>2</a> <b>3</b> - <v>80486</v> + <v>80171</v> </b> <b> <a>3</a> <b>66</b> - <v>14335</v> + <v>14279</v> </b> </bs> </hist> @@ -13483,19 +13462,19 @@ </relation> <relation> <name>functions</name> - <cardinality>4640799</cardinality> + <cardinality>4646000</cardinality> <columnsizes> <e> <k>id</k> - <v>4640799</v> + <v>4646000</v> </e> <e> <k>name</k> - <v>1915302</v> + <v>1916982</v> </e> <e> <k>kind</k> - <v>3261</v> + <v>3264</v> </e> </columnsizes> <dependencies> @@ -13509,7 +13488,7 @@ <b> <a>1</a> <b>2</b> - <v>4640799</v> + <v>4646000</v> </b> </bs> </hist> @@ -13525,7 +13504,7 @@ <b> <a>1</a> <b>2</b> - <v>4640799</v> + <v>4646000</v> </b> </bs> </hist> @@ -13541,22 +13520,22 @@ <b> <a>1</a> <b>2</b> - <v>1502983</v> + <v>1504201</v> </b> <b> <a>2</a> <b>3</b> - <v>151882</v> + <v>152052</v> </b> <b> <a>3</a> <b>5</b> - <v>150018</v> + <v>150186</v> </b> <b> <a>5</a> <b>1676</b> - <v>110417</v> + <v>110541</v> </b> </bs> </hist> @@ -13572,12 +13551,12 @@ <b> <a>1</a> <b>2</b> - <v>1914836</v> + <v>1916516</v> </b> <b> <a>2</a> <b>3</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -13593,37 +13572,37 @@ <b> <a>4</a> <b>5</b> - <v>465</v> + <v>466</v> </b> <b> <a>64</a> <b>65</b> - <v>465</v> + <v>466</v> </b> <b> <a>173</a> <b>174</b> - <v>465</v> + <v>466</v> </b> <b> <a>195</a> <b>196</b> - <v>465</v> + <v>466</v> </b> <b> <a>1354</a> <b>1355</b> - <v>465</v> + <v>466</v> </b> <b> <a>2382</a> <b>2383</b> - <v>465</v> + <v>466</v> </b> <b> <a>5789</a> <b>5790</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -13639,37 +13618,37 @@ <b> <a>2</a> <b>3</b> - <v>465</v> + <v>466</v> </b> <b> <a>33</a> <b>34</b> - <v>465</v> + <v>466</v> </b> <b> - <a>39</a> - <b>40</b> - <v>465</v> + <a>38</a> + <b>39</b> + <v>466</v> </b> <b> <a>94</a> <b>95</b> - <v>465</v> + <v>466</v> </b> <b> <a>195</a> <b>196</b> - <v>465</v> + <v>466</v> </b> <b> <a>245</a> <b>246</b> - <v>465</v> + <v>466</v> </b> <b> <a>3504</a> <b>3505</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -13679,15 +13658,15 @@ </relation> <relation> <name>function_entry_point</name> - <cardinality>1155424</cardinality> + <cardinality>1156719</cardinality> <columnsizes> <e> <k>id</k> - <v>1145640</v> + <v>1146924</v> </e> <e> <k>entry_point</k> - <v>1155424</v> + <v>1156719</v> </e> </columnsizes> <dependencies> @@ -13701,12 +13680,12 @@ <b> <a>1</a> <b>2</b> - <v>1135856</v> + <v>1137129</v> </b> <b> <a>2</a> <b>3</b> - <v>9783</v> + <v>9794</v> </b> </bs> </hist> @@ -13722,7 +13701,7 @@ <b> <a>1</a> <b>2</b> - <v>1155424</v> + <v>1156719</v> </b> </bs> </hist> @@ -13732,15 +13711,15 @@ </relation> <relation> <name>function_return_type</name> - <cardinality>4645924</cardinality> + <cardinality>4651131</cardinality> <columnsizes> <e> <k>id</k> - <v>4640799</v> + <v>4646000</v> </e> <e> <k>return_type</k> - <v>986303</v> + <v>987409</v> </e> </columnsizes> <dependencies> @@ -13754,12 +13733,12 @@ <b> <a>1</a> <b>2</b> - <v>4635674</v> + <v>4640870</v> </b> <b> <a>2</a> <b>3</b> - <v>5124</v> + <v>5130</v> </b> </bs> </hist> @@ -13775,22 +13754,22 @@ <b> <a>1</a> <b>2</b> - <v>509691</v> + <v>510262</v> </b> <b> <a>2</a> <b>3</b> - <v>375512</v> + <v>375933</v> </b> <b> <a>3</a> <b>10</b> - <v>75009</v> + <v>75093</v> </b> <b> <a>10</a> <b>2516</b> - <v>26090</v> + <v>26119</v> </b> </bs> </hist> @@ -13808,7 +13787,7 @@ </e> <e> <k>traits</k> - <v>2</v> + <v>1</v> </e> <e> <k>handle</k> @@ -13876,9 +13855,9 @@ <budget>12</budget> <bs> <b> - <a>1</a> - <b>2</b> - <v>2</v> + <a>2</a> + <b>3</b> + <v>1</v> </b> </bs> </hist> @@ -13892,9 +13871,9 @@ <budget>12</budget> <bs> <b> - <a>1</a> - <b>2</b> - <v>2</v> + <a>2</a> + <b>3</b> + <v>1</v> </b> </bs> </hist> @@ -13908,9 +13887,9 @@ <budget>12</budget> <bs> <b> - <a>1</a> - <b>2</b> - <v>2</v> + <a>2</a> + <b>3</b> + <v>1</v> </b> </bs> </hist> @@ -14112,59 +14091,59 @@ </relation> <relation> <name>purefunctions</name> - <cardinality>100915</cardinality> + <cardinality>100917</cardinality> <columnsizes> <e> <k>id</k> - <v>100915</v> + <v>100917</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>function_deleted</name> - <cardinality>137439</cardinality> + <cardinality>137593</cardinality> <columnsizes> <e> <k>id</k> - <v>137439</v> + <v>137593</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>function_defaulted</name> - <cardinality>73611</cardinality> + <cardinality>73694</cardinality> <columnsizes> <e> <k>id</k> - <v>73611</v> + <v>73694</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>function_prototyped</name> - <cardinality>4549018</cardinality> + <cardinality>4554116</cardinality> <columnsizes> <e> <k>id</k> - <v>4549018</v> + <v>4554116</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>member_function_this_type</name> - <cardinality>551738</cardinality> + <cardinality>546094</cardinality> <columnsizes> <e> <k>id</k> - <v>551738</v> + <v>546094</v> </e> <e> <k>this_type</k> - <v>189340</v> + <v>187436</v> </e> </columnsizes> <dependencies> @@ -14178,7 +14157,7 @@ <b> <a>1</a> <b>2</b> - <v>551738</v> + <v>546094</v> </b> </bs> </hist> @@ -14194,32 +14173,32 @@ <b> <a>1</a> <b>2</b> - <v>68329</v> + <v>67674</v> </b> <b> <a>2</a> <b>3</b> - <v>45365</v> + <v>44849</v> </b> <b> <a>3</a> <b>4</b> - <v>30454</v> + <v>30201</v> </b> <b> <a>4</a> <b>5</b> - <v>15508</v> + <v>15344</v> </b> <b> <a>5</a> <b>7</b> - <v>15543</v> + <v>15379</v> </b> <b> <a>7</a> <b>66</b> - <v>14137</v> + <v>13987</v> </b> </bs> </hist> @@ -14229,27 +14208,27 @@ </relation> <relation> <name>fun_decls</name> - <cardinality>5009324</cardinality> + <cardinality>5014938</cardinality> <columnsizes> <e> <k>id</k> - <v>5004199</v> + <v>5009807</v> </e> <e> <k>function</k> - <v>4497303</v> + <v>4502343</v> </e> <e> <k>type_id</k> - <v>984906</v> + <v>986009</v> </e> <e> <k>name</k> - <v>1817930</v> + <v>1819500</v> </e> <e> <k>location</k> - <v>3414558</v> + <v>3418385</v> </e> </columnsizes> <dependencies> @@ -14263,7 +14242,7 @@ <b> <a>1</a> <b>2</b> - <v>5004199</v> + <v>5009807</v> </b> </bs> </hist> @@ -14279,12 +14258,12 @@ <b> <a>1</a> <b>2</b> - <v>4999074</v> + <v>5004676</v> </b> <b> <a>2</a> <b>3</b> - <v>5124</v> + <v>5130</v> </b> </bs> </hist> @@ -14300,7 +14279,7 @@ <b> <a>1</a> <b>2</b> - <v>5004199</v> + <v>5009807</v> </b> </bs> </hist> @@ -14316,7 +14295,7 @@ <b> <a>1</a> <b>2</b> - <v>5004199</v> + <v>5009807</v> </b> </bs> </hist> @@ -14332,17 +14311,17 @@ <b> <a>1</a> <b>2</b> - <v>4069144</v> + <v>4073704</v> </b> <b> <a>2</a> <b>3</b> - <v>355479</v> + <v>355877</v> </b> <b> <a>3</a> <b>7</b> - <v>72679</v> + <v>72761</v> </b> </bs> </hist> @@ -14358,12 +14337,12 @@ <b> <a>1</a> <b>2</b> - <v>4457702</v> + <v>4462697</v> </b> <b> <a>2</a> <b>3</b> - <v>39601</v> + <v>39645</v> </b> </bs> </hist> @@ -14379,7 +14358,7 @@ <b> <a>1</a> <b>2</b> - <v>4497303</v> + <v>4502343</v> </b> </bs> </hist> @@ -14395,17 +14374,17 @@ <b> <a>1</a> <b>2</b> - <v>4125517</v> + <v>4130141</v> </b> <b> <a>2</a> <b>4</b> - <v>370853</v> + <v>371269</v> </b> <b> <a>5</a> <b>6</b> - <v>931</v> + <v>932</v> </b> </bs> </hist> @@ -14421,22 +14400,22 @@ <b> <a>1</a> <b>2</b> - <v>435147</v> + <v>435635</v> </b> <b> <a>2</a> <b>3</b> - <v>437943</v> + <v>438433</v> </b> <b> <a>3</a> <b>8</b> - <v>75009</v> + <v>75093</v> </b> <b> <a>8</a> <b>2761</b> - <v>36805</v> + <v>36847</v> </b> </bs> </hist> @@ -14452,22 +14431,22 @@ <b> <a>1</a> <b>2</b> - <v>519009</v> + <v>519590</v> </b> <b> <a>2</a> <b>3</b> - <v>367126</v> + <v>367538</v> </b> <b> <a>3</a> <b>11</b> - <v>75475</v> + <v>75559</v> </b> <b> <a>11</a> <b>2477</b> - <v>23294</v> + <v>23320</v> </b> </bs> </hist> @@ -14483,17 +14462,17 @@ <b> <a>1</a> <b>2</b> - <v>857716</v> + <v>858677</v> </b> <b> <a>2</a> <b>5</b> - <v>89452</v> + <v>89552</v> </b> <b> <a>5</a> <b>823</b> - <v>37737</v> + <v>37779</v> </b> </bs> </hist> @@ -14509,22 +14488,22 @@ <b> <a>1</a> <b>2</b> - <v>753821</v> + <v>754666</v> </b> <b> <a>2</a> <b>3</b> - <v>131382</v> + <v>131530</v> </b> <b> <a>3</a> <b>10</b> - <v>74543</v> + <v>74627</v> </b> <b> <a>10</a> <b>2030</b> - <v>25158</v> + <v>25186</v> </b> </bs> </hist> @@ -14540,27 +14519,27 @@ <b> <a>1</a> <b>2</b> - <v>1233695</v> + <v>1234611</v> </b> <b> <a>2</a> <b>3</b> - <v>266493</v> + <v>266791</v> </b> <b> <a>3</a> <b>4</b> - <v>80600</v> + <v>80690</v> </b> <b> <a>4</a> <b>6</b> - <v>136507</v> + <v>136660</v> </b> <b> <a>6</a> <b>1710</b> - <v>100633</v> + <v>100746</v> </b> </bs> </hist> @@ -14576,22 +14555,22 @@ <b> <a>1</a> <b>2</b> - <v>1412599</v> + <v>1413716</v> </b> <b> <a>2</a> <b>3</b> - <v>150950</v> + <v>151119</v> </b> <b> <a>3</a> <b>5</b> - <v>143962</v> + <v>144123</v> </b> <b> <a>5</a> <b>1660</b> - <v>110417</v> + <v>110541</v> </b> </bs> </hist> @@ -14607,17 +14586,17 @@ <b> <a>1</a> <b>2</b> - <v>1600356</v> + <v>1601216</v> </b> <b> <a>2</a> <b>4</b> - <v>134178</v> + <v>134795</v> </b> <b> <a>4</a> <b>930</b> - <v>83395</v> + <v>83489</v> </b> </bs> </hist> @@ -14633,27 +14612,27 @@ <b> <a>1</a> <b>2</b> - <v>1254660</v> + <v>1255600</v> </b> <b> <a>2</a> <b>3</b> - <v>293515</v> + <v>293377</v> </b> <b> <a>3</a> <b>4</b> - <v>79202</v> + <v>79757</v> </b> <b> <a>4</a> <b>8</b> - <v>137439</v> + <v>137593</v> </b> <b> <a>8</a> <b>653</b> - <v>53112</v> + <v>53171</v> </b> </bs> </hist> @@ -14669,17 +14648,17 @@ <b> <a>1</a> <b>2</b> - <v>2958911</v> + <v>2962227</v> </b> <b> <a>2</a> <b>4</b> - <v>295844</v> + <v>296176</v> </b> <b> <a>4</a> <b>55</b> - <v>159802</v> + <v>159981</v> </b> </bs> </hist> @@ -14695,17 +14674,17 @@ <b> <a>1</a> <b>2</b> - <v>3026000</v> + <v>3029392</v> </b> <b> <a>2</a> <b>6</b> - <v>262299</v> + <v>262593</v> </b> <b> <a>6</a> <b>55</b> - <v>126258</v> + <v>126399</v> </b> </bs> </hist> @@ -14721,12 +14700,12 @@ <b> <a>1</a> <b>2</b> - <v>3204905</v> + <v>3208496</v> </b> <b> <a>2</a> <b>25</b> - <v>209653</v> + <v>209888</v> </b> </bs> </hist> @@ -14742,12 +14721,12 @@ <b> <a>1</a> <b>2</b> - <v>3242642</v> + <v>3246276</v> </b> <b> <a>2</a> <b>13</b> - <v>171915</v> + <v>172108</v> </b> </bs> </hist> @@ -14757,22 +14736,22 @@ </relation> <relation> <name>fun_def</name> - <cardinality>1933006</cardinality> + <cardinality>1935172</cardinality> <columnsizes> <e> <k>id</k> - <v>1933006</v> + <v>1935172</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>fun_specialized</name> - <cardinality>26090</cardinality> + <cardinality>26119</cardinality> <columnsizes> <e> <k>id</k> - <v>26090</v> + <v>26119</v> </e> </columnsizes> <dependencies/> @@ -14790,15 +14769,15 @@ </relation> <relation> <name>fun_decl_specifiers</name> - <cardinality>2900674</cardinality> + <cardinality>2903925</cardinality> <columnsizes> <e> <k>id</k> - <v>1686081</v> + <v>1687970</v> </e> <e> <k>name</k> - <v>2795</v> + <v>2798</v> </e> </columnsizes> <dependencies> @@ -14812,17 +14791,17 @@ <b> <a>1</a> <b>2</b> - <v>490123</v> + <v>490672</v> </b> <b> <a>2</a> <b>3</b> - <v>1177321</v> + <v>1178641</v> </b> <b> <a>3</a> <b>4</b> - <v>18635</v> + <v>18656</v> </b> </bs> </hist> @@ -14838,32 +14817,32 @@ <b> <a>50</a> <b>51</b> - <v>465</v> + <v>466</v> </b> <b> <a>203</a> <b>204</b> - <v>465</v> + <v>466</v> </b> <b> <a>209</a> <b>210</b> - <v>465</v> + <v>466</v> </b> <b> <a>639</a> <b>640</b> - <v>465</v> + <v>466</v> </b> <b> <a>2561</a> <b>2562</b> - <v>465</v> + <v>466</v> </b> <b> <a>2564</a> <b>2565</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -14994,26 +14973,26 @@ </relation> <relation> <name>fun_decl_empty_throws</name> - <cardinality>1931608</cardinality> + <cardinality>1933773</cardinality> <columnsizes> <e> <k>fun_decl</k> - <v>1931608</v> + <v>1933773</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>fun_decl_noexcept</name> - <cardinality>61011</cardinality> + <cardinality>60559</cardinality> <columnsizes> <e> <k>fun_decl</k> - <v>61011</v> + <v>60559</v> </e> <e> <k>constant</k> - <v>60907</v> + <v>60456</v> </e> </columnsizes> <dependencies> @@ -15027,7 +15006,7 @@ <b> <a>1</a> <b>2</b> - <v>61011</v> + <v>60559</v> </b> </bs> </hist> @@ -15043,12 +15022,12 @@ <b> <a>1</a> <b>2</b> - <v>60803</v> + <v>60352</v> </b> <b> <a>2</a> <b>3</b> - <v>104</v> + <v>103</v> </b> </bs> </hist> @@ -15058,22 +15037,22 @@ </relation> <relation> <name>fun_decl_empty_noexcept</name> - <cardinality>868897</cardinality> + <cardinality>869871</cardinality> <columnsizes> <e> <k>fun_decl</k> - <v>868897</v> + <v>869871</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>fun_decl_typedef_type</name> - <cardinality>2870</cardinality> + <cardinality>2867</cardinality> <columnsizes> <e> <k>fun_decl</k> - <v>2870</v> + <v>2867</v> </e> <e> <k>typedeftype_id</k> @@ -15091,7 +15070,7 @@ <b> <a>1</a> <b>2</b> - <v>2870</v> + <v>2867</v> </b> </bs> </hist> @@ -15167,19 +15146,19 @@ </relation> <relation> <name>param_decl_bind</name> - <cardinality>7371421</cardinality> + <cardinality>7379682</cardinality> <columnsizes> <e> <k>id</k> - <v>7371421</v> + <v>7379682</v> </e> <e> <k>index</k> - <v>7920</v> + <v>7929</v> </e> <e> <k>fun_decl</k> - <v>4218231</v> + <v>4222958</v> </e> </columnsizes> <dependencies> @@ -15193,7 +15172,7 @@ <b> <a>1</a> <b>2</b> - <v>7371421</v> + <v>7379682</v> </b> </bs> </hist> @@ -15209,7 +15188,7 @@ <b> <a>1</a> <b>2</b> - <v>7371421</v> + <v>7379682</v> </b> </bs> </hist> @@ -15225,72 +15204,72 @@ <b> <a>2</a> <b>3</b> - <v>931</v> + <v>932</v> </b> <b> <a>5</a> <b>6</b> - <v>465</v> + <v>466</v> </b> <b> <a>7</a> <b>8</b> - <v>465</v> + <v>466</v> </b> <b> <a>10</a> <b>11</b> - <v>931</v> + <v>932</v> </b> <b> <a>11</a> <b>12</b> - <v>465</v> + <v>466</v> </b> <b> <a>12</a> <b>13</b> - <v>931</v> + <v>932</v> </b> <b> <a>13</a> <b>14</b> - <v>465</v> + <v>466</v> </b> <b> <a>25</a> <b>26</b> - <v>465</v> + <v>466</v> </b> <b> <a>78</a> <b>79</b> - <v>465</v> + <v>466</v> </b> <b> <a>245</a> <b>246</b> - <v>465</v> + <v>466</v> </b> <b> <a>636</a> <b>637</b> - <v>465</v> + <v>466</v> </b> <b> <a>1713</a> <b>1714</b> - <v>465</v> + <v>466</v> </b> <b> <a>3987</a> <b>3988</b> - <v>465</v> + <v>466</v> </b> <b> <a>9054</a> <b>9055</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -15306,72 +15285,72 @@ <b> <a>2</a> <b>3</b> - <v>931</v> + <v>932</v> </b> <b> <a>5</a> <b>6</b> - <v>465</v> + <v>466</v> </b> <b> <a>7</a> <b>8</b> - <v>465</v> + <v>466</v> </b> <b> <a>10</a> <b>11</b> - <v>931</v> + <v>932</v> </b> <b> <a>11</a> <b>12</b> - <v>465</v> + <v>466</v> </b> <b> <a>12</a> <b>13</b> - <v>931</v> + <v>932</v> </b> <b> <a>13</a> <b>14</b> - <v>465</v> + <v>466</v> </b> <b> <a>25</a> <b>26</b> - <v>465</v> + <v>466</v> </b> <b> <a>78</a> <b>79</b> - <v>465</v> + <v>466</v> </b> <b> <a>245</a> <b>246</b> - <v>465</v> + <v>466</v> </b> <b> <a>636</a> <b>637</b> - <v>465</v> + <v>466</v> </b> <b> <a>1713</a> <b>1714</b> - <v>465</v> + <v>466</v> </b> <b> <a>3987</a> <b>3988</b> - <v>465</v> + <v>466</v> </b> <b> <a>9054</a> <b>9055</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -15387,22 +15366,22 @@ <b> <a>1</a> <b>2</b> - <v>2360699</v> + <v>2363345</v> </b> <b> <a>2</a> <b>3</b> - <v>1059449</v> + <v>1060637</v> </b> <b> <a>3</a> <b>4</b> - <v>501771</v> + <v>502333</v> </b> <b> <a>4</a> <b>18</b> - <v>296310</v> + <v>296642</v> </b> </bs> </hist> @@ -15418,22 +15397,22 @@ <b> <a>1</a> <b>2</b> - <v>2360699</v> + <v>2363345</v> </b> <b> <a>2</a> <b>3</b> - <v>1059449</v> + <v>1060637</v> </b> <b> <a>3</a> <b>4</b> - <v>501771</v> + <v>502333</v> </b> <b> <a>4</a> <b>18</b> - <v>296310</v> + <v>296642</v> </b> </bs> </hist> @@ -15443,27 +15422,27 @@ </relation> <relation> <name>var_decls</name> - <cardinality>8484449</cardinality> + <cardinality>8493958</cardinality> <columnsizes> <e> <k>id</k> - <v>8413633</v> + <v>8423062</v> </e> <e> <k>variable</k> - <v>7403568</v> + <v>7411865</v> </e> <e> <k>type_id</k> - <v>2381665</v> + <v>2384334</v> </e> <e> <k>name</k> - <v>666232</v> + <v>666979</v> </e> <e> <k>location</k> - <v>5300975</v> + <v>5306916</v> </e> </columnsizes> <dependencies> @@ -15477,7 +15456,7 @@ <b> <a>1</a> <b>2</b> - <v>8413633</v> + <v>8423062</v> </b> </bs> </hist> @@ -15493,12 +15472,12 @@ <b> <a>1</a> <b>2</b> - <v>8345612</v> + <v>8354965</v> </b> <b> <a>2</a> <b>3</b> - <v>68020</v> + <v>68097</v> </b> </bs> </hist> @@ -15514,7 +15493,7 @@ <b> <a>1</a> <b>2</b> - <v>8413633</v> + <v>8423062</v> </b> </bs> </hist> @@ -15530,12 +15509,12 @@ <b> <a>1</a> <b>2</b> - <v>8410838</v> + <v>8420264</v> </b> <b> <a>2</a> <b>3</b> - <v>2795</v> + <v>2798</v> </b> </bs> </hist> @@ -15551,17 +15530,17 @@ <b> <a>1</a> <b>2</b> - <v>6553306</v> + <v>6560651</v> </b> <b> <a>2</a> <b>3</b> - <v>696981</v> + <v>697762</v> </b> <b> <a>3</a> <b>7</b> - <v>153280</v> + <v>153451</v> </b> </bs> </hist> @@ -15577,12 +15556,12 @@ <b> <a>1</a> <b>2</b> - <v>7232584</v> + <v>7240690</v> </b> <b> <a>2</a> <b>4</b> - <v>170984</v> + <v>171175</v> </b> </bs> </hist> @@ -15598,12 +15577,12 @@ <b> <a>1</a> <b>2</b> - <v>7288492</v> + <v>7296660</v> </b> <b> <a>2</a> <b>3</b> - <v>115076</v> + <v>115205</v> </b> </bs> </hist> @@ -15619,12 +15598,12 @@ <b> <a>1</a> <b>2</b> - <v>6859401</v> + <v>6867088</v> </b> <b> <a>2</a> <b>4</b> - <v>544167</v> + <v>544777</v> </b> </bs> </hist> @@ -15640,27 +15619,27 @@ <b> <a>1</a> <b>2</b> - <v>1467575</v> + <v>1469220</v> </b> <b> <a>2</a> <b>3</b> - <v>508759</v> + <v>509329</v> </b> <b> <a>3</a> <b>4</b> - <v>97838</v> + <v>97948</v> </b> <b> <a>4</a> <b>7</b> - <v>186824</v> + <v>187034</v> </b> <b> <a>7</a> <b>762</b> - <v>120667</v> + <v>120802</v> </b> </bs> </hist> @@ -15676,22 +15655,22 @@ <b> <a>1</a> <b>2</b> - <v>1600822</v> + <v>1602616</v> </b> <b> <a>2</a> <b>3</b> - <v>484066</v> + <v>484609</v> </b> <b> <a>3</a> <b>7</b> - <v>186358</v> + <v>186567</v> </b> <b> <a>7</a> <b>724</b> - <v>110417</v> + <v>110541</v> </b> </bs> </hist> @@ -15707,17 +15686,17 @@ <b> <a>1</a> <b>2</b> - <v>1875235</v> + <v>1877336</v> </b> <b> <a>2</a> <b>3</b> - <v>384365</v> + <v>384795</v> </b> <b> <a>3</a> <b>128</b> - <v>122065</v> + <v>122201</v> </b> </bs> </hist> @@ -15733,22 +15712,22 @@ <b> <a>1</a> <b>2</b> - <v>1703319</v> + <v>1705228</v> </b> <b> <a>2</a> <b>3</b> - <v>401137</v> + <v>401586</v> </b> <b> <a>3</a> <b>8</b> - <v>188222</v> + <v>188433</v> </b> <b> <a>8</a> <b>592</b> - <v>88986</v> + <v>89086</v> </b> </bs> </hist> @@ -15764,37 +15743,37 @@ <b> <a>1</a> <b>2</b> - <v>340570</v> + <v>340952</v> </b> <b> <a>2</a> <b>3</b> - <v>86656</v> + <v>86753</v> </b> <b> <a>3</a> <b>4</b> - <v>48453</v> + <v>48507</v> </b> <b> <a>4</a> <b>6</b> - <v>51714</v> + <v>51772</v> </b> <b> <a>6</a> <b>12</b> - <v>52180</v> + <v>52238</v> </b> <b> <a>12</a> <b>33</b> - <v>50316</v> + <v>50373</v> </b> <b> <a>34</a> <b>3223</b> - <v>36339</v> + <v>36380</v> </b> </bs> </hist> @@ -15810,37 +15789,37 @@ <b> <a>1</a> <b>2</b> - <v>368058</v> + <v>368471</v> </b> <b> <a>2</a> <b>3</b> - <v>77804</v> + <v>77891</v> </b> <b> <a>3</a> <b>4</b> - <v>45192</v> + <v>45242</v> </b> <b> <a>4</a> <b>6</b> - <v>49385</v> + <v>49440</v> </b> <b> <a>6</a> <b>14</b> - <v>53112</v> + <v>53171</v> </b> <b> <a>14</a> <b>56</b> - <v>50782</v> + <v>50839</v> </b> <b> <a>56</a> <b>3140</b> - <v>21897</v> + <v>21921</v> </b> </bs> </hist> @@ -15856,27 +15835,27 @@ <b> <a>1</a> <b>2</b> - <v>456113</v> + <v>456624</v> </b> <b> <a>2</a> <b>3</b> - <v>93645</v> + <v>93750</v> </b> <b> <a>3</a> <b>5</b> - <v>46589</v> + <v>46641</v> </b> <b> <a>5</a> <b>19</b> - <v>50782</v> + <v>50839</v> </b> <b> <a>19</a> <b>1927</b> - <v>19101</v> + <v>19123</v> </b> </bs> </hist> @@ -15892,32 +15871,32 @@ <b> <a>1</a> <b>2</b> - <v>378308</v> + <v>378732</v> </b> <b> <a>2</a> <b>3</b> - <v>90384</v> + <v>90485</v> </b> <b> <a>3</a> <b>5</b> - <v>59634</v> + <v>59701</v> </b> <b> <a>5</a> <b>9</b> - <v>51248</v> + <v>51306</v> </b> <b> <a>9</a> <b>21</b> - <v>50316</v> + <v>50373</v> </b> <b> <a>21</a> <b>1010</b> - <v>36339</v> + <v>36380</v> </b> </bs> </hist> @@ -15933,17 +15912,17 @@ <b> <a>1</a> <b>2</b> - <v>4487053</v> + <v>4492082</v> </b> <b> <a>2</a> <b>3</b> - <v>530656</v> + <v>531251</v> </b> <b> <a>3</a> <b>1735</b> - <v>283265</v> + <v>283582</v> </b> </bs> </hist> @@ -15959,17 +15938,17 @@ <b> <a>1</a> <b>2</b> - <v>4875611</v> + <v>4881075</v> </b> <b> <a>2</a> <b>17</b> - <v>414648</v> + <v>415112</v> </b> <b> <a>17</a> <b>1731</b> - <v>10715</v> + <v>10727</v> </b> </bs> </hist> @@ -15985,12 +15964,12 @@ <b> <a>1</a> <b>2</b> - <v>4951553</v> + <v>4957102</v> </b> <b> <a>2</a> <b>1513</b> - <v>349422</v> + <v>349814</v> </b> </bs> </hist> @@ -16006,12 +15985,12 @@ <b> <a>1</a> <b>2</b> - <v>5291657</v> + <v>5297588</v> </b> <b> <a>2</a> <b>6</b> - <v>9317</v> + <v>9328</v> </b> </bs> </hist> @@ -16021,26 +16000,26 @@ </relation> <relation> <name>var_def</name> - <cardinality>4020225</cardinality> + <cardinality>4024730</cardinality> <columnsizes> <e> <k>id</k> - <v>4020225</v> + <v>4024730</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>var_decl_specifiers</name> - <cardinality>310287</cardinality> + <cardinality>310635</cardinality> <columnsizes> <e> <k>id</k> - <v>310287</v> + <v>310635</v> </e> <e> <k>name</k> - <v>1397</v> + <v>1399</v> </e> </columnsizes> <dependencies> @@ -16054,7 +16033,7 @@ <b> <a>1</a> <b>2</b> - <v>310287</v> + <v>310635</v> </b> </bs> </hist> @@ -16070,17 +16049,17 @@ <b> <a>15</a> <b>16</b> - <v>465</v> + <v>466</v> </b> <b> <a>66</a> <b>67</b> - <v>465</v> + <v>466</v> </b> <b> <a>585</a> <b>586</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -16101,19 +16080,19 @@ </relation> <relation> <name>type_decls</name> - <cardinality>3238449</cardinality> + <cardinality>3242079</cardinality> <columnsizes> <e> <k>id</k> - <v>3238449</v> + <v>3242079</v> </e> <e> <k>type_id</k> - <v>3188133</v> + <v>3191705</v> </e> <e> <k>location</k> - <v>3159713</v> + <v>3163254</v> </e> </columnsizes> <dependencies> @@ -16127,7 +16106,7 @@ <b> <a>1</a> <b>2</b> - <v>3238449</v> + <v>3242079</v> </b> </bs> </hist> @@ -16143,7 +16122,7 @@ <b> <a>1</a> <b>2</b> - <v>3238449</v> + <v>3242079</v> </b> </bs> </hist> @@ -16159,12 +16138,12 @@ <b> <a>1</a> <b>2</b> - <v>3146668</v> + <v>3150194</v> </b> <b> <a>2</a> <b>5</b> - <v>41464</v> + <v>41511</v> </b> </bs> </hist> @@ -16180,12 +16159,12 @@ <b> <a>1</a> <b>2</b> - <v>3146668</v> + <v>3150194</v> </b> <b> <a>2</a> <b>5</b> - <v>41464</v> + <v>41511</v> </b> </bs> </hist> @@ -16201,12 +16180,12 @@ <b> <a>1</a> <b>2</b> - <v>3119646</v> + <v>3123142</v> </b> <b> <a>2</a> <b>20</b> - <v>40067</v> + <v>40112</v> </b> </bs> </hist> @@ -16222,12 +16201,12 @@ <b> <a>1</a> <b>2</b> - <v>3119646</v> + <v>3123142</v> </b> <b> <a>2</a> <b>20</b> - <v>40067</v> + <v>40112</v> </b> </bs> </hist> @@ -16237,33 +16216,33 @@ </relation> <relation> <name>type_def</name> - <cardinality>2621602</cardinality> + <cardinality>2624540</cardinality> <columnsizes> <e> <k>id</k> - <v>2621602</v> + <v>2624540</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>type_decl_top</name> - <cardinality>742173</cardinality> + <cardinality>743005</cardinality> <columnsizes> <e> <k>type_decl</k> - <v>742173</v> + <v>743005</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>namespace_decls</name> - <cardinality>311526</cardinality> + <cardinality>311530</cardinality> <columnsizes> <e> <k>id</k> - <v>311526</v> + <v>311530</v> </e> <e> <k>namespace_id</k> @@ -16271,11 +16250,11 @@ </e> <e> <k>location</k> - <v>311526</v> + <v>311530</v> </e> <e> <k>bodylocation</k> - <v>311526</v> + <v>311530</v> </e> </columnsizes> <dependencies> @@ -16289,7 +16268,7 @@ <b> <a>1</a> <b>2</b> - <v>311526</v> + <v>311530</v> </b> </bs> </hist> @@ -16305,7 +16284,7 @@ <b> <a>1</a> <b>2</b> - <v>311526</v> + <v>311530</v> </b> </bs> </hist> @@ -16321,7 +16300,7 @@ <b> <a>1</a> <b>2</b> - <v>311526</v> + <v>311530</v> </b> </bs> </hist> @@ -16535,7 +16514,7 @@ <b> <a>1</a> <b>2</b> - <v>311526</v> + <v>311530</v> </b> </bs> </hist> @@ -16551,7 +16530,7 @@ <b> <a>1</a> <b>2</b> - <v>311526</v> + <v>311530</v> </b> </bs> </hist> @@ -16567,7 +16546,7 @@ <b> <a>1</a> <b>2</b> - <v>311526</v> + <v>311530</v> </b> </bs> </hist> @@ -16583,7 +16562,7 @@ <b> <a>1</a> <b>2</b> - <v>311526</v> + <v>311530</v> </b> </bs> </hist> @@ -16599,7 +16578,7 @@ <b> <a>1</a> <b>2</b> - <v>311526</v> + <v>311530</v> </b> </bs> </hist> @@ -16615,7 +16594,7 @@ <b> <a>1</a> <b>2</b> - <v>311526</v> + <v>311530</v> </b> </bs> </hist> @@ -16625,19 +16604,19 @@ </relation> <relation> <name>usings</name> - <cardinality>368990</cardinality> + <cardinality>369403</cardinality> <columnsizes> <e> <k>id</k> - <v>368990</v> + <v>369403</v> </e> <e> <k>element_id</k> - <v>314946</v> + <v>315299</v> </e> <e> <k>location</k> - <v>247391</v> + <v>247668</v> </e> </columnsizes> <dependencies> @@ -16651,7 +16630,7 @@ <b> <a>1</a> <b>2</b> - <v>368990</v> + <v>369403</v> </b> </bs> </hist> @@ -16667,7 +16646,7 @@ <b> <a>1</a> <b>2</b> - <v>368990</v> + <v>369403</v> </b> </bs> </hist> @@ -16683,17 +16662,17 @@ <b> <a>1</a> <b>2</b> - <v>262765</v> + <v>263060</v> </b> <b> <a>2</a> <b>3</b> - <v>50782</v> + <v>50839</v> </b> <b> <a>3</a> <b>5</b> - <v>1397</v> + <v>1399</v> </b> </bs> </hist> @@ -16709,17 +16688,17 @@ <b> <a>1</a> <b>2</b> - <v>262765</v> + <v>263060</v> </b> <b> <a>2</a> <b>3</b> - <v>50782</v> + <v>50839</v> </b> <b> <a>3</a> <b>5</b> - <v>1397</v> + <v>1399</v> </b> </bs> </hist> @@ -16735,22 +16714,22 @@ <b> <a>1</a> <b>2</b> - <v>202199</v> + <v>202425</v> </b> <b> <a>2</a> <b>4</b> - <v>10715</v> + <v>10727</v> </b> <b> <a>4</a> <b>5</b> - <v>31215</v> + <v>31250</v> </b> <b> <a>5</a> <b>11</b> - <v>3261</v> + <v>3264</v> </b> </bs> </hist> @@ -16766,22 +16745,22 @@ <b> <a>1</a> <b>2</b> - <v>202199</v> + <v>202425</v> </b> <b> <a>2</a> <b>4</b> - <v>10715</v> + <v>10727</v> </b> <b> <a>4</a> <b>5</b> - <v>31215</v> + <v>31250</v> </b> <b> <a>5</a> <b>11</b> - <v>3261</v> + <v>3264</v> </b> </bs> </hist> @@ -16791,15 +16770,15 @@ </relation> <relation> <name>using_container</name> - <cardinality>464571</cardinality> + <cardinality>462754</cardinality> <columnsizes> <e> <k>parent</k> - <v>10998</v> + <v>10955</v> </e> <e> <k>child</k> - <v>294577</v> + <v>293425</v> </e> </columnsizes> <dependencies> @@ -16813,42 +16792,42 @@ <b> <a>1</a> <b>2</b> - <v>3280</v> + <v>3267</v> </b> <b> <a>2</a> <b>4</b> - <v>932</v> + <v>928</v> </b> <b> <a>4</a> <b>6</b> - <v>415</v> + <v>414</v> </b> <b> <a>6</a> <b>7</b> - <v>2482</v> + <v>2473</v> </b> <b> <a>7</a> <b>17</b> - <v>898</v> + <v>895</v> </b> <b> <a>19</a> <b>143</b> - <v>763</v> + <v>760</v> </b> <b> <a>178</a> <b>179</b> - <v>1292</v> + <v>1286</v> </b> <b> <a>179</a> <b>183</b> - <v>853</v> + <v>850</v> </b> <b> <a>201</a> @@ -16869,22 +16848,22 @@ <b> <a>1</a> <b>2</b> - <v>217270</v> + <v>216420</v> </b> <b> <a>2</a> <b>3</b> - <v>51477</v> + <v>51276</v> </b> <b> <a>3</a> <b>11</b> - <v>23705</v> + <v>23612</v> </b> <b> <a>13</a> <b>41</b> - <v>2123</v> + <v>2115</v> </b> </bs> </hist> @@ -16894,15 +16873,15 @@ </relation> <relation> <name>static_asserts</name> - <cardinality>134653</cardinality> + <cardinality>134655</cardinality> <columnsizes> <e> <k>id</k> - <v>134653</v> + <v>134655</v> </e> <e> <k>condition</k> - <v>134653</v> + <v>134655</v> </e> <e> <k>message</k> @@ -16928,7 +16907,7 @@ <b> <a>1</a> <b>2</b> - <v>134653</v> + <v>134655</v> </b> </bs> </hist> @@ -16944,7 +16923,7 @@ <b> <a>1</a> <b>2</b> - <v>134653</v> + <v>134655</v> </b> </bs> </hist> @@ -16960,7 +16939,7 @@ <b> <a>1</a> <b>2</b> - <v>134653</v> + <v>134655</v> </b> </bs> </hist> @@ -16976,7 +16955,7 @@ <b> <a>1</a> <b>2</b> - <v>134653</v> + <v>134655</v> </b> </bs> </hist> @@ -16992,7 +16971,7 @@ <b> <a>1</a> <b>2</b> - <v>134653</v> + <v>134655</v> </b> </bs> </hist> @@ -17008,7 +16987,7 @@ <b> <a>1</a> <b>2</b> - <v>134653</v> + <v>134655</v> </b> </bs> </hist> @@ -17024,7 +17003,7 @@ <b> <a>1</a> <b>2</b> - <v>134653</v> + <v>134655</v> </b> </bs> </hist> @@ -17040,7 +17019,7 @@ <b> <a>1</a> <b>2</b> - <v>134653</v> + <v>134655</v> </b> </bs> </hist> @@ -17502,23 +17481,23 @@ </relation> <relation> <name>params</name> - <cardinality>6732211</cardinality> + <cardinality>6739755</cardinality> <columnsizes> <e> <k>id</k> - <v>6568681</v> + <v>6576042</v> </e> <e> <k>function</k> - <v>3875331</v> + <v>3879674</v> </e> <e> <k>index</k> - <v>7920</v> + <v>7929</v> </e> <e> <k>type_id</k> - <v>2186454</v> + <v>2188904</v> </e> </columnsizes> <dependencies> @@ -17532,7 +17511,7 @@ <b> <a>1</a> <b>2</b> - <v>6568681</v> + <v>6576042</v> </b> </bs> </hist> @@ -17548,7 +17527,7 @@ <b> <a>1</a> <b>2</b> - <v>6568681</v> + <v>6576042</v> </b> </bs> </hist> @@ -17564,12 +17543,12 @@ <b> <a>1</a> <b>2</b> - <v>6445218</v> + <v>6452441</v> </b> <b> <a>2</a> <b>4</b> - <v>123462</v> + <v>123601</v> </b> </bs> </hist> @@ -17585,22 +17564,22 @@ <b> <a>1</a> <b>2</b> - <v>2254475</v> + <v>2257002</v> </b> <b> <a>2</a> <b>3</b> - <v>950895</v> + <v>951961</v> </b> <b> <a>3</a> <b>4</b> - <v>429091</v> + <v>429571</v> </b> <b> <a>4</a> <b>18</b> - <v>240868</v> + <v>241138</v> </b> </bs> </hist> @@ -17616,22 +17595,22 @@ <b> <a>1</a> <b>2</b> - <v>2254475</v> + <v>2257002</v> </b> <b> <a>2</a> <b>3</b> - <v>950895</v> + <v>951961</v> </b> <b> <a>3</a> <b>4</b> - <v>429091</v> + <v>429571</v> </b> <b> <a>4</a> <b>18</b> - <v>240868</v> + <v>241138</v> </b> </bs> </hist> @@ -17647,22 +17626,22 @@ <b> <a>1</a> <b>2</b> - <v>2552183</v> + <v>2555043</v> </b> <b> <a>2</a> <b>3</b> - <v>825103</v> + <v>826028</v> </b> <b> <a>3</a> <b>4</b> - <v>345695</v> + <v>346082</v> </b> <b> <a>4</a> <b>12</b> - <v>152348</v> + <v>152519</v> </b> </bs> </hist> @@ -17678,72 +17657,72 @@ <b> <a>2</a> <b>3</b> - <v>931</v> + <v>932</v> </b> <b> <a>4</a> <b>5</b> - <v>465</v> + <v>466</v> </b> <b> <a>6</a> <b>7</b> - <v>465</v> + <v>466</v> </b> <b> <a>8</a> <b>9</b> - <v>931</v> + <v>932</v> </b> <b> <a>9</a> <b>10</b> - <v>465</v> + <v>466</v> </b> <b> <a>10</a> <b>11</b> - <v>931</v> + <v>932</v> </b> <b> <a>11</a> <b>12</b> - <v>465</v> + <v>466</v> </b> <b> <a>19</a> <b>20</b> - <v>465</v> + <v>466</v> </b> <b> <a>64</a> <b>65</b> - <v>465</v> + <v>466</v> </b> <b> <a>194</a> <b>195</b> - <v>465</v> + <v>466</v> </b> <b> <a>517</a> <b>518</b> - <v>465</v> + <v>466</v> </b> <b> <a>1438</a> <b>1439</b> - <v>465</v> + <v>466</v> </b> <b> <a>3479</a> <b>3480</b> - <v>465</v> + <v>466</v> </b> <b> <a>8318</a> <b>8319</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -17759,72 +17738,72 @@ <b> <a>2</a> <b>3</b> - <v>931</v> + <v>932</v> </b> <b> <a>4</a> <b>5</b> - <v>465</v> + <v>466</v> </b> <b> <a>6</a> <b>7</b> - <v>465</v> + <v>466</v> </b> <b> <a>8</a> <b>9</b> - <v>931</v> + <v>932</v> </b> <b> <a>9</a> <b>10</b> - <v>465</v> + <v>466</v> </b> <b> <a>10</a> <b>11</b> - <v>931</v> + <v>932</v> </b> <b> <a>11</a> <b>12</b> - <v>465</v> + <v>466</v> </b> <b> <a>19</a> <b>20</b> - <v>465</v> + <v>466</v> </b> <b> <a>64</a> <b>65</b> - <v>465</v> + <v>466</v> </b> <b> <a>194</a> <b>195</b> - <v>465</v> + <v>466</v> </b> <b> <a>517</a> <b>518</b> - <v>465</v> + <v>466</v> </b> <b> <a>1438</a> <b>1439</b> - <v>465</v> + <v>466</v> </b> <b> <a>3479</a> <b>3480</b> - <v>465</v> + <v>466</v> </b> <b> <a>8318</a> <b>8319</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -17840,67 +17819,67 @@ <b> <a>1</a> <b>2</b> - <v>931</v> + <v>932</v> </b> <b> <a>3</a> <b>4</b> - <v>465</v> + <v>466</v> </b> <b> <a>4</a> <b>5</b> - <v>465</v> + <v>466</v> </b> <b> <a>5</a> <b>6</b> - <v>465</v> + <v>466</v> </b> <b> <a>6</a> <b>7</b> - <v>1397</v> + <v>1399</v> </b> <b> <a>7</a> <b>8</b> - <v>931</v> + <v>932</v> </b> <b> <a>11</a> <b>12</b> - <v>465</v> + <v>466</v> </b> <b> <a>42</a> <b>43</b> - <v>465</v> + <v>466</v> </b> <b> <a>106</a> <b>107</b> - <v>465</v> + <v>466</v> </b> <b> <a>228</a> <b>229</b> - <v>465</v> + <v>466</v> </b> <b> <a>582</a> <b>583</b> - <v>465</v> + <v>466</v> </b> <b> <a>1271</a> <b>1272</b> - <v>465</v> + <v>466</v> </b> <b> <a>3609</a> <b>3610</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -17916,22 +17895,22 @@ <b> <a>1</a> <b>2</b> - <v>1486677</v> + <v>1488343</v> </b> <b> <a>2</a> <b>3</b> - <v>439806</v> + <v>440299</v> </b> <b> <a>3</a> <b>8</b> - <v>170052</v> + <v>170242</v> </b> <b> <a>8</a> <b>518</b> - <v>89918</v> + <v>90018</v> </b> </bs> </hist> @@ -17947,22 +17926,22 @@ <b> <a>1</a> <b>2</b> - <v>1706114</v> + <v>1708026</v> </b> <b> <a>2</a> <b>3</b> - <v>247857</v> + <v>248134</v> </b> <b> <a>3</a> <b>9</b> - <v>168188</v> + <v>168377</v> </b> <b> <a>9</a> <b>502</b> - <v>64293</v> + <v>64365</v> </b> </bs> </hist> @@ -17978,17 +17957,17 @@ <b> <a>1</a> <b>2</b> - <v>1759692</v> + <v>1761664</v> </b> <b> <a>2</a> <b>3</b> - <v>348025</v> + <v>348415</v> </b> <b> <a>3</a> <b>13</b> - <v>78736</v> + <v>78824</v> </b> </bs> </hist> @@ -17998,15 +17977,15 @@ </relation> <relation> <name>overrides</name> - <cardinality>125996</cardinality> + <cardinality>125866</cardinality> <columnsizes> <e> <k>new</k> - <v>123017</v> + <v>122890</v> </e> <e> <k>old</k> - <v>9763</v> + <v>9753</v> </e> </columnsizes> <dependencies> @@ -18020,12 +17999,12 @@ <b> <a>1</a> <b>2</b> - <v>120046</v> + <v>119922</v> </b> <b> <a>2</a> <b>4</b> - <v>2970</v> + <v>2967</v> </b> </bs> </hist> @@ -18041,17 +18020,17 @@ <b> <a>1</a> <b>2</b> - <v>4297</v> + <v>4293</v> </b> <b> <a>2</a> <b>3</b> - <v>2102</v> + <v>2100</v> </b> <b> <a>3</a> <b>4</b> - <v>926</v> + <v>925</v> </b> <b> <a>4</a> @@ -18061,17 +18040,17 @@ <b> <a>5</a> <b>7</b> - <v>851</v> + <v>850</v> </b> <b> <a>7</a> <b>23</b> - <v>763</v> + <v>762</v> </b> <b> <a>25</a> <b>1464</b> - <v>363</v> + <v>362</v> </b> </bs> </hist> @@ -18081,19 +18060,19 @@ </relation> <relation> <name>membervariables</name> - <cardinality>1054945</cardinality> + <cardinality>1056556</cardinality> <columnsizes> <e> <k>id</k> - <v>1053150</v> + <v>1054758</v> </e> <e> <k>type_id</k> - <v>327246</v> + <v>327746</v> </e> <e> <k>name</k> - <v>450956</v> + <v>451645</v> </e> </columnsizes> <dependencies> @@ -18107,12 +18086,12 @@ <b> <a>1</a> <b>2</b> - <v>1051434</v> + <v>1053040</v> </b> <b> <a>2</a> <b>4</b> - <v>1715</v> + <v>1718</v> </b> </bs> </hist> @@ -18128,7 +18107,7 @@ <b> <a>1</a> <b>2</b> - <v>1053150</v> + <v>1054758</v> </b> </bs> </hist> @@ -18144,22 +18123,22 @@ <b> <a>1</a> <b>2</b> - <v>242672</v> + <v>243043</v> </b> <b> <a>2</a> <b>3</b> - <v>51821</v> + <v>51900</v> </b> <b> <a>3</a> <b>10</b> - <v>25491</v> + <v>25530</v> </b> <b> <a>10</a> <b>4152</b> - <v>7260</v> + <v>7271</v> </b> </bs> </hist> @@ -18175,22 +18154,22 @@ <b> <a>1</a> <b>2</b> - <v>254879</v> + <v>255269</v> </b> <b> <a>2</a> <b>3</b> - <v>46396</v> + <v>46467</v> </b> <b> <a>3</a> <b>40</b> - <v>24574</v> + <v>24611</v> </b> <b> <a>41</a> <b>2031</b> - <v>1396</v> + <v>1398</v> </b> </bs> </hist> @@ -18206,22 +18185,22 @@ <b> <a>1</a> <b>2</b> - <v>294893</v> + <v>295343</v> </b> <b> <a>2</a> <b>3</b> - <v>86409</v> + <v>86541</v> </b> <b> <a>3</a> <b>5</b> - <v>41130</v> + <v>41193</v> </b> <b> <a>5</a> <b>646</b> - <v>28523</v> + <v>28567</v> </b> </bs> </hist> @@ -18237,17 +18216,17 @@ <b> <a>1</a> <b>2</b> - <v>367300</v> + <v>367860</v> </b> <b> <a>2</a> <b>3</b> - <v>51662</v> + <v>51741</v> </b> <b> <a>3</a> <b>650</b> - <v>31994</v> + <v>32043</v> </b> </bs> </hist> @@ -18428,19 +18407,19 @@ </relation> <relation> <name>localvariables</name> - <cardinality>577491</cardinality> + <cardinality>576906</cardinality> <columnsizes> <e> <k>id</k> - <v>577491</v> + <v>576906</v> </e> <e> <k>type_id</k> - <v>37631</v> + <v>37597</v> </e> <e> <k>name</k> - <v>90743</v> + <v>90649</v> </e> </columnsizes> <dependencies> @@ -18454,7 +18433,7 @@ <b> <a>1</a> <b>2</b> - <v>577491</v> + <v>576906</v> </b> </bs> </hist> @@ -18470,7 +18449,7 @@ <b> <a>1</a> <b>2</b> - <v>577491</v> + <v>576906</v> </b> </bs> </hist> @@ -18486,32 +18465,32 @@ <b> <a>1</a> <b>2</b> - <v>21054</v> + <v>21032</v> </b> <b> <a>2</a> <b>3</b> - <v>5378</v> + <v>5368</v> </b> <b> <a>3</a> <b>4</b> - <v>2461</v> + <v>2467</v> </b> <b> <a>4</a> <b>7</b> - <v>3383</v> + <v>3380</v> </b> <b> <a>7</a> <b>18</b> - <v>2858</v> + <v>2851</v> </b> <b> <a>18</a> - <b>15847</b> - <v>2495</v> + <b>15849</b> + <v>2496</v> </b> </bs> </hist> @@ -18527,27 +18506,27 @@ <b> <a>1</a> <b>2</b> - <v>26803</v> + <v>26772</v> </b> <b> <a>2</a> <b>3</b> - <v>4573</v> + <v>4572</v> </b> <b> <a>3</a> <b>5</b> - <v>2920</v> + <v>2921</v> </b> <b> <a>5</a> <b>31</b> - <v>2824</v> + <v>2821</v> </b> <b> <a>31</a> <b>3455</b> - <v>509</v> + <v>508</v> </b> </bs> </hist> @@ -18563,27 +18542,27 @@ <b> <a>1</a> <b>2</b> - <v>57154</v> + <v>57095</v> </b> <b> <a>2</a> <b>3</b> - <v>14315</v> + <v>14301</v> </b> <b> <a>3</a> <b>5</b> - <v>8328</v> + <v>8319</v> </b> <b> <a>5</a> <b>15</b> - <v>6997</v> + <v>6990</v> </b> <b> <a>15</a> - <b>5176</b> - <v>3947</v> + <b>5178</b> + <v>3943</v> </b> </bs> </hist> @@ -18599,17 +18578,17 @@ <b> <a>1</a> <b>2</b> - <v>76656</v> + <v>76577</v> </b> <b> <a>2</a> <b>3</b> - <v>7427</v> + <v>7419</v> </b> <b> <a>3</a> <b>1486</b> - <v>6659</v> + <v>6652</v> </b> </bs> </hist> @@ -18619,15 +18598,15 @@ </relation> <relation> <name>autoderivation</name> - <cardinality>148931</cardinality> + <cardinality>148035</cardinality> <columnsizes> <e> <k>var</k> - <v>148931</v> + <v>148035</v> </e> <e> <k>derivation_type</k> - <v>521</v> + <v>517</v> </e> </columnsizes> <dependencies> @@ -18641,7 +18620,7 @@ <b> <a>1</a> <b>2</b> - <v>148931</v> + <v>148035</v> </b> </bs> </hist> @@ -18657,27 +18636,27 @@ <b> <a>33</a> <b>34</b> - <v>104</v> + <v>103</v> </b> <b> - <a>90</a> - <b>91</b> - <v>104</v> + <a>91</a> + <b>92</b> + <v>103</v> </b> <b> - <a>353</a> - <b>354</b> - <v>104</v> + <a>354</a> + <b>355</b> + <v>103</v> </b> <b> <a>392</a> <b>393</b> - <v>104</v> + <v>103</v> </b> <b> <a>560</a> <b>561</b> - <v>104</v> + <v>103</v> </b> </bs> </hist> @@ -18687,15 +18666,15 @@ </relation> <relation> <name>orphaned_variables</name> - <cardinality>37769</cardinality> + <cardinality>37368</cardinality> <columnsizes> <e> <k>var</k> - <v>37769</v> + <v>37368</v> </e> <e> <k>function</k> - <v>33197</v> + <v>32845</v> </e> </columnsizes> <dependencies> @@ -18709,7 +18688,7 @@ <b> <a>1</a> <b>2</b> - <v>37769</v> + <v>37368</v> </b> </bs> </hist> @@ -18725,12 +18704,12 @@ <b> <a>1</a> <b>2</b> - <v>31123</v> + <v>30792</v> </b> <b> <a>2</a> <b>47</b> - <v>2074</v> + <v>2052</v> </b> </bs> </hist> @@ -18740,19 +18719,19 @@ </relation> <relation> <name>enumconstants</name> - <cardinality>241316</cardinality> + <cardinality>241684</cardinality> <columnsizes> <e> <k>id</k> - <v>241316</v> + <v>241684</v> </e> <e> <k>parent</k> - <v>28484</v> + <v>28527</v> </e> <e> <k>index</k> - <v>10212</v> + <v>10228</v> </e> <e> <k>type_id</k> @@ -18760,11 +18739,11 @@ </e> <e> <k>name</k> - <v>241036</v> + <v>241405</v> </e> <e> <k>location</k> - <v>221249</v> + <v>221587</v> </e> </columnsizes> <dependencies> @@ -18778,7 +18757,7 @@ <b> <a>1</a> <b>2</b> - <v>241316</v> + <v>241684</v> </b> </bs> </hist> @@ -18794,7 +18773,7 @@ <b> <a>1</a> <b>2</b> - <v>241316</v> + <v>241684</v> </b> </bs> </hist> @@ -18810,7 +18789,7 @@ <b> <a>1</a> <b>2</b> - <v>241316</v> + <v>241684</v> </b> </bs> </hist> @@ -18826,7 +18805,7 @@ <b> <a>1</a> <b>2</b> - <v>241316</v> + <v>241684</v> </b> </bs> </hist> @@ -18842,7 +18821,7 @@ <b> <a>1</a> <b>2</b> - <v>241316</v> + <v>241684</v> </b> </bs> </hist> @@ -18858,52 +18837,52 @@ <b> <a>1</a> <b>2</b> - <v>997</v> + <v>998</v> </b> <b> <a>2</a> <b>3</b> - <v>4029</v> + <v>4035</v> </b> <b> <a>3</a> <b>4</b> - <v>5784</v> + <v>5793</v> </b> <b> <a>4</a> <b>5</b> - <v>3909</v> + <v>3915</v> </b> <b> <a>5</a> <b>6</b> - <v>3071</v> + <v>3076</v> </b> <b> <a>6</a> <b>7</b> - <v>1835</v> + <v>1837</v> </b> <b> <a>7</a> <b>8</b> - <v>1476</v> + <v>1478</v> </b> <b> <a>8</a> <b>11</b> - <v>2593</v> + <v>2597</v> </b> <b> <a>11</a> <b>17</b> - <v>2353</v> + <v>2357</v> </b> <b> <a>17</a> <b>84</b> - <v>2154</v> + <v>2157</v> </b> <b> <a>94</a> @@ -18924,52 +18903,52 @@ <b> <a>1</a> <b>2</b> - <v>997</v> + <v>998</v> </b> <b> <a>2</a> <b>3</b> - <v>4029</v> + <v>4035</v> </b> <b> <a>3</a> <b>4</b> - <v>5784</v> + <v>5793</v> </b> <b> <a>4</a> <b>5</b> - <v>3909</v> + <v>3915</v> </b> <b> <a>5</a> <b>6</b> - <v>3071</v> + <v>3076</v> </b> <b> <a>6</a> <b>7</b> - <v>1835</v> + <v>1837</v> </b> <b> <a>7</a> <b>8</b> - <v>1476</v> + <v>1478</v> </b> <b> <a>8</a> <b>11</b> - <v>2593</v> + <v>2597</v> </b> <b> <a>11</a> <b>17</b> - <v>2353</v> + <v>2357</v> </b> <b> <a>17</a> <b>84</b> - <v>2154</v> + <v>2157</v> </b> <b> <a>94</a> @@ -18990,7 +18969,7 @@ <b> <a>1</a> <b>2</b> - <v>28484</v> + <v>28527</v> </b> </bs> </hist> @@ -19006,52 +18985,52 @@ <b> <a>1</a> <b>2</b> - <v>997</v> + <v>998</v> </b> <b> <a>2</a> <b>3</b> - <v>4029</v> + <v>4035</v> </b> <b> <a>3</a> <b>4</b> - <v>5784</v> + <v>5793</v> </b> <b> <a>4</a> <b>5</b> - <v>3909</v> + <v>3915</v> </b> <b> <a>5</a> <b>6</b> - <v>3071</v> + <v>3076</v> </b> <b> <a>6</a> <b>7</b> - <v>1835</v> + <v>1837</v> </b> <b> <a>7</a> <b>8</b> - <v>1476</v> + <v>1478</v> </b> <b> <a>8</a> <b>11</b> - <v>2593</v> + <v>2597</v> </b> <b> <a>11</a> <b>17</b> - <v>2353</v> + <v>2357</v> </b> <b> <a>17</a> <b>84</b> - <v>2154</v> + <v>2157</v> </b> <b> <a>94</a> @@ -19072,52 +19051,52 @@ <b> <a>1</a> <b>2</b> - <v>1436</v> + <v>1438</v> </b> <b> <a>2</a> <b>3</b> - <v>4188</v> + <v>4195</v> </b> <b> <a>3</a> <b>4</b> - <v>5824</v> + <v>5833</v> </b> <b> <a>4</a> <b>5</b> - <v>3869</v> + <v>3875</v> </b> <b> <a>5</a> <b>6</b> - <v>3071</v> + <v>3076</v> </b> <b> <a>6</a> <b>7</b> - <v>1795</v> + <v>1797</v> </b> <b> <a>7</a> <b>8</b> - <v>1396</v> + <v>1398</v> </b> <b> <a>8</a> <b>11</b> - <v>2513</v> + <v>2517</v> </b> <b> <a>11</a> <b>17</b> - <v>2234</v> + <v>2237</v> </b> <b> <a>17</a> <b>257</b> - <v>2154</v> + <v>2157</v> </b> </bs> </hist> @@ -19133,47 +19112,47 @@ <b> <a>1</a> <b>2</b> - <v>2034</v> + <v>2037</v> </b> <b> <a>2</a> <b>3</b> - <v>1635</v> + <v>1638</v> </b> <b> <a>3</a> <b>4</b> - <v>1755</v> + <v>1757</v> </b> <b> <a>4</a> <b>5</b> - <v>877</v> + <v>878</v> </b> <b> <a>5</a> <b>9</b> - <v>797</v> + <v>799</v> </b> <b> <a>9</a> <b>12</b> - <v>837</v> + <v>839</v> </b> <b> <a>12</a> <b>20</b> - <v>877</v> + <v>878</v> </b> <b> <a>20</a> <b>69</b> - <v>797</v> + <v>799</v> </b> <b> <a>77</a> <b>715</b> - <v>598</v> + <v>599</v> </b> </bs> </hist> @@ -19189,47 +19168,47 @@ <b> <a>1</a> <b>2</b> - <v>2034</v> + <v>2037</v> </b> <b> <a>2</a> <b>3</b> - <v>1635</v> + <v>1638</v> </b> <b> <a>3</a> <b>4</b> - <v>1755</v> + <v>1757</v> </b> <b> <a>4</a> <b>5</b> - <v>877</v> + <v>878</v> </b> <b> <a>5</a> <b>9</b> - <v>797</v> + <v>799</v> </b> <b> <a>9</a> <b>12</b> - <v>837</v> + <v>839</v> </b> <b> <a>12</a> <b>20</b> - <v>877</v> + <v>878</v> </b> <b> <a>20</a> <b>69</b> - <v>797</v> + <v>799</v> </b> <b> <a>77</a> <b>715</b> - <v>598</v> + <v>599</v> </b> </bs> </hist> @@ -19245,7 +19224,7 @@ <b> <a>1</a> <b>2</b> - <v>10212</v> + <v>10228</v> </b> </bs> </hist> @@ -19261,47 +19240,47 @@ <b> <a>1</a> <b>2</b> - <v>2034</v> + <v>2037</v> </b> <b> <a>2</a> <b>3</b> - <v>1635</v> + <v>1638</v> </b> <b> <a>3</a> <b>4</b> - <v>1755</v> + <v>1757</v> </b> <b> <a>4</a> <b>5</b> - <v>877</v> + <v>878</v> </b> <b> <a>5</a> <b>9</b> - <v>797</v> + <v>799</v> </b> <b> <a>9</a> <b>12</b> - <v>837</v> + <v>839</v> </b> <b> <a>12</a> <b>20</b> - <v>877</v> + <v>878</v> </b> <b> <a>20</a> <b>69</b> - <v>797</v> + <v>799</v> </b> <b> <a>77</a> <b>712</b> - <v>598</v> + <v>599</v> </b> </bs> </hist> @@ -19317,47 +19296,47 @@ <b> <a>1</a> <b>2</b> - <v>2034</v> + <v>2037</v> </b> <b> <a>2</a> <b>3</b> - <v>1635</v> + <v>1638</v> </b> <b> <a>3</a> <b>4</b> - <v>1755</v> + <v>1757</v> </b> <b> <a>4</a> <b>5</b> - <v>877</v> + <v>878</v> </b> <b> <a>5</a> <b>9</b> - <v>797</v> + <v>799</v> </b> <b> <a>9</a> <b>12</b> - <v>837</v> + <v>839</v> </b> <b> <a>12</a> <b>20</b> - <v>877</v> + <v>878</v> </b> <b> <a>20</a> <b>69</b> - <v>797</v> + <v>799</v> </b> <b> <a>77</a> <b>715</b> - <v>598</v> + <v>599</v> </b> </bs> </hist> @@ -19453,7 +19432,7 @@ <b> <a>1</a> <b>2</b> - <v>240757</v> + <v>241125</v> </b> <b> <a>2</a> @@ -19474,7 +19453,7 @@ <b> <a>1</a> <b>2</b> - <v>240757</v> + <v>241125</v> </b> <b> <a>2</a> @@ -19495,7 +19474,7 @@ <b> <a>1</a> <b>2</b> - <v>241036</v> + <v>241405</v> </b> </bs> </hist> @@ -19511,7 +19490,7 @@ <b> <a>1</a> <b>2</b> - <v>241036</v> + <v>241405</v> </b> </bs> </hist> @@ -19527,7 +19506,7 @@ <b> <a>1</a> <b>2</b> - <v>240757</v> + <v>241125</v> </b> <b> <a>2</a> @@ -19548,12 +19527,12 @@ <b> <a>1</a> <b>2</b> - <v>220491</v> + <v>220828</v> </b> <b> <a>2</a> <b>205</b> - <v>757</v> + <v>759</v> </b> </bs> </hist> @@ -19569,7 +19548,7 @@ <b> <a>1</a> <b>2</b> - <v>221249</v> + <v>221587</v> </b> </bs> </hist> @@ -19585,12 +19564,12 @@ <b> <a>1</a> <b>2</b> - <v>220491</v> + <v>220828</v> </b> <b> <a>2</a> <b>205</b> - <v>757</v> + <v>759</v> </b> </bs> </hist> @@ -19606,7 +19585,7 @@ <b> <a>1</a> <b>2</b> - <v>221249</v> + <v>221587</v> </b> </bs> </hist> @@ -19622,12 +19601,12 @@ <b> <a>1</a> <b>2</b> - <v>220491</v> + <v>220828</v> </b> <b> <a>2</a> <b>205</b> - <v>757</v> + <v>759</v> </b> </bs> </hist> @@ -19637,31 +19616,31 @@ </relation> <relation> <name>builtintypes</name> - <cardinality>26090</cardinality> + <cardinality>26119</cardinality> <columnsizes> <e> <k>id</k> - <v>26090</v> + <v>26119</v> </e> <e> <k>name</k> - <v>26090</v> + <v>26119</v> </e> <e> <k>kind</k> - <v>26090</v> + <v>26119</v> </e> <e> <k>size</k> - <v>3261</v> + <v>3264</v> </e> <e> <k>sign</k> - <v>1397</v> + <v>1399</v> </e> <e> <k>alignment</k> - <v>2329</v> + <v>2332</v> </e> </columnsizes> <dependencies> @@ -19675,7 +19654,7 @@ <b> <a>1</a> <b>2</b> - <v>26090</v> + <v>26119</v> </b> </bs> </hist> @@ -19691,7 +19670,7 @@ <b> <a>1</a> <b>2</b> - <v>26090</v> + <v>26119</v> </b> </bs> </hist> @@ -19707,7 +19686,7 @@ <b> <a>1</a> <b>2</b> - <v>26090</v> + <v>26119</v> </b> </bs> </hist> @@ -19723,7 +19702,7 @@ <b> <a>1</a> <b>2</b> - <v>26090</v> + <v>26119</v> </b> </bs> </hist> @@ -19739,7 +19718,7 @@ <b> <a>1</a> <b>2</b> - <v>26090</v> + <v>26119</v> </b> </bs> </hist> @@ -19755,7 +19734,7 @@ <b> <a>1</a> <b>2</b> - <v>26090</v> + <v>26119</v> </b> </bs> </hist> @@ -19771,7 +19750,7 @@ <b> <a>1</a> <b>2</b> - <v>26090</v> + <v>26119</v> </b> </bs> </hist> @@ -19787,7 +19766,7 @@ <b> <a>1</a> <b>2</b> - <v>26090</v> + <v>26119</v> </b> </bs> </hist> @@ -19803,7 +19782,7 @@ <b> <a>1</a> <b>2</b> - <v>26090</v> + <v>26119</v> </b> </bs> </hist> @@ -19819,7 +19798,7 @@ <b> <a>1</a> <b>2</b> - <v>26090</v> + <v>26119</v> </b> </bs> </hist> @@ -19835,7 +19814,7 @@ <b> <a>1</a> <b>2</b> - <v>26090</v> + <v>26119</v> </b> </bs> </hist> @@ -19851,7 +19830,7 @@ <b> <a>1</a> <b>2</b> - <v>26090</v> + <v>26119</v> </b> </bs> </hist> @@ -19867,7 +19846,7 @@ <b> <a>1</a> <b>2</b> - <v>26090</v> + <v>26119</v> </b> </bs> </hist> @@ -19883,7 +19862,7 @@ <b> <a>1</a> <b>2</b> - <v>26090</v> + <v>26119</v> </b> </bs> </hist> @@ -19899,7 +19878,7 @@ <b> <a>1</a> <b>2</b> - <v>26090</v> + <v>26119</v> </b> </bs> </hist> @@ -19915,37 +19894,37 @@ <b> <a>1</a> <b>2</b> - <v>465</v> + <v>466</v> </b> <b> <a>4</a> <b>5</b> - <v>465</v> + <v>466</v> </b> <b> <a>7</a> <b>8</b> - <v>465</v> + <v>466</v> </b> <b> <a>8</a> <b>9</b> - <v>465</v> + <v>466</v> </b> <b> <a>10</a> <b>11</b> - <v>465</v> + <v>466</v> </b> <b> <a>12</a> <b>13</b> - <v>465</v> + <v>466</v> </b> <b> <a>14</a> <b>15</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -19961,37 +19940,37 @@ <b> <a>1</a> <b>2</b> - <v>465</v> + <v>466</v> </b> <b> <a>4</a> <b>5</b> - <v>465</v> + <v>466</v> </b> <b> <a>7</a> <b>8</b> - <v>465</v> + <v>466</v> </b> <b> <a>8</a> <b>9</b> - <v>465</v> + <v>466</v> </b> <b> <a>10</a> <b>11</b> - <v>465</v> + <v>466</v> </b> <b> <a>12</a> <b>13</b> - <v>465</v> + <v>466</v> </b> <b> <a>14</a> <b>15</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -20007,37 +19986,37 @@ <b> <a>1</a> <b>2</b> - <v>465</v> + <v>466</v> </b> <b> <a>4</a> <b>5</b> - <v>465</v> + <v>466</v> </b> <b> <a>7</a> <b>8</b> - <v>465</v> + <v>466</v> </b> <b> <a>8</a> <b>9</b> - <v>465</v> + <v>466</v> </b> <b> <a>10</a> <b>11</b> - <v>465</v> + <v>466</v> </b> <b> <a>12</a> <b>13</b> - <v>465</v> + <v>466</v> </b> <b> <a>14</a> <b>15</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -20053,12 +20032,12 @@ <b> <a>1</a> <b>2</b> - <v>931</v> + <v>932</v> </b> <b> <a>3</a> <b>4</b> - <v>2329</v> + <v>2332</v> </b> </bs> </hist> @@ -20074,12 +20053,12 @@ <b> <a>1</a> <b>2</b> - <v>1863</v> + <v>1865</v> </b> <b> <a>2</a> <b>3</b> - <v>1397</v> + <v>1399</v> </b> </bs> </hist> @@ -20095,17 +20074,17 @@ <b> <a>6</a> <b>7</b> - <v>465</v> + <v>466</v> </b> <b> <a>12</a> <b>13</b> - <v>465</v> + <v>466</v> </b> <b> <a>38</a> <b>39</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -20121,17 +20100,17 @@ <b> <a>6</a> <b>7</b> - <v>465</v> + <v>466</v> </b> <b> <a>12</a> <b>13</b> - <v>465</v> + <v>466</v> </b> <b> <a>38</a> <b>39</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -20147,17 +20126,17 @@ <b> <a>6</a> <b>7</b> - <v>465</v> + <v>466</v> </b> <b> <a>12</a> <b>13</b> - <v>465</v> + <v>466</v> </b> <b> <a>38</a> <b>39</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -20173,12 +20152,12 @@ <b> <a>5</a> <b>6</b> - <v>931</v> + <v>932</v> </b> <b> <a>7</a> <b>8</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -20194,7 +20173,7 @@ <b> <a>5</a> <b>6</b> - <v>1397</v> + <v>1399</v> </b> </bs> </hist> @@ -20210,27 +20189,27 @@ <b> <a>8</a> <b>9</b> - <v>465</v> + <v>466</v> </b> <b> <a>9</a> <b>10</b> - <v>465</v> + <v>466</v> </b> <b> <a>11</a> <b>12</b> - <v>465</v> + <v>466</v> </b> <b> <a>13</a> <b>14</b> - <v>465</v> + <v>466</v> </b> <b> <a>15</a> <b>16</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -20246,27 +20225,27 @@ <b> <a>8</a> <b>9</b> - <v>465</v> + <v>466</v> </b> <b> <a>9</a> <b>10</b> - <v>465</v> + <v>466</v> </b> <b> <a>11</a> <b>12</b> - <v>465</v> + <v>466</v> </b> <b> <a>13</a> <b>14</b> - <v>465</v> + <v>466</v> </b> <b> <a>15</a> <b>16</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -20282,27 +20261,27 @@ <b> <a>8</a> <b>9</b> - <v>465</v> + <v>466</v> </b> <b> <a>9</a> <b>10</b> - <v>465</v> + <v>466</v> </b> <b> <a>11</a> <b>12</b> - <v>465</v> + <v>466</v> </b> <b> <a>13</a> <b>14</b> - <v>465</v> + <v>466</v> </b> <b> <a>15</a> <b>16</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -20318,7 +20297,7 @@ <b> <a>2</a> <b>3</b> - <v>2329</v> + <v>2332</v> </b> </bs> </hist> @@ -20334,7 +20313,7 @@ <b> <a>3</a> <b>4</b> - <v>2329</v> + <v>2332</v> </b> </bs> </hist> @@ -20344,23 +20323,23 @@ </relation> <relation> <name>derivedtypes</name> - <cardinality>4332841</cardinality> + <cardinality>4330701</cardinality> <columnsizes> <e> <k>id</k> - <v>4332841</v> + <v>4330701</v> </e> <e> <k>name</k> - <v>2158500</v> + <v>2160919</v> </e> <e> <k>kind</k> - <v>2795</v> + <v>2798</v> </e> <e> <k>type_id</k> - <v>2673316</v> + <v>2670715</v> </e> </columnsizes> <dependencies> @@ -20374,7 +20353,7 @@ <b> <a>1</a> <b>2</b> - <v>4332841</v> + <v>4330701</v> </b> </bs> </hist> @@ -20390,7 +20369,7 @@ <b> <a>1</a> <b>2</b> - <v>4332841</v> + <v>4330701</v> </b> </bs> </hist> @@ -20406,7 +20385,7 @@ <b> <a>1</a> <b>2</b> - <v>4332841</v> + <v>4330701</v> </b> </bs> </hist> @@ -20422,17 +20401,17 @@ <b> <a>1</a> <b>2</b> - <v>1897132</v> + <v>1899258</v> </b> <b> <a>2</a> <b>5</b> - <v>164461</v> + <v>164645</v> </b> <b> <a>5</a> - <b>1165</b> - <v>96906</v> + <b>1153</b> + <v>97015</v> </b> </bs> </hist> @@ -20448,12 +20427,12 @@ <b> <a>1</a> <b>2</b> - <v>2157568</v> + <v>2159986</v> </b> <b> <a>2</a> <b>3</b> - <v>931</v> + <v>932</v> </b> </bs> </hist> @@ -20469,17 +20448,17 @@ <b> <a>1</a> <b>2</b> - <v>1897132</v> + <v>1899258</v> </b> <b> <a>2</a> <b>5</b> - <v>164461</v> + <v>164645</v> </b> <b> <a>5</a> - <b>1147</b> - <v>96906</v> + <b>1135</b> + <v>97015</v> </b> </bs> </hist> @@ -20495,32 +20474,32 @@ <b> <a>236</a> <b>237</b> - <v>465</v> + <v>466</v> </b> <b> <a>1077</a> <b>1078</b> - <v>465</v> + <v>466</v> </b> <b> - <a>1146</a> - <b>1147</b> - <v>465</v> + <a>1134</a> + <b>1135</b> + <v>466</v> </b> <b> <a>1217</a> <b>1218</b> - <v>465</v> + <v>466</v> </b> <b> - <a>2169</a> - <b>2170</b> - <v>465</v> + <a>2166</a> + <b>2167</b> + <v>466</v> </b> <b> <a>3455</a> <b>3456</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -20536,32 +20515,32 @@ <b> <a>1</a> <b>2</b> - <v>465</v> + <v>466</v> </b> <b> <a>201</a> <b>202</b> - <v>465</v> + <v>466</v> </b> <b> <a>606</a> <b>607</b> - <v>465</v> + <v>466</v> </b> <b> <a>760</a> <b>761</b> - <v>465</v> + <v>466</v> </b> <b> <a>1128</a> <b>1129</b> - <v>465</v> + <v>466</v> </b> <b> <a>1939</a> <b>1940</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -20577,32 +20556,32 @@ <b> <a>84</a> <b>85</b> - <v>465</v> + <v>466</v> </b> <b> <a>1077</a> <b>1078</b> - <v>465</v> + <v>466</v> </b> <b> - <a>1146</a> - <b>1147</b> - <v>465</v> + <a>1134</a> + <b>1135</b> + <v>466</v> </b> <b> <a>1217</a> <b>1218</b> - <v>465</v> + <v>466</v> </b> <b> - <a>2124</a> - <b>2125</b> - <v>465</v> + <a>2121</a> + <b>2122</b> + <v>466</v> </b> <b> <a>3455</a> <b>3456</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -20618,22 +20597,22 @@ <b> <a>1</a> <b>2</b> - <v>1653468</v> + <v>1651123</v> </b> <b> <a>2</a> <b>3</b> - <v>560939</v> + <v>560169</v> </b> <b> <a>3</a> <b>4</b> - <v>353615</v> + <v>354012</v> </b> <b> <a>4</a> <b>72</b> - <v>105292</v> + <v>105410</v> </b> </bs> </hist> @@ -20649,22 +20628,22 @@ <b> <a>1</a> <b>2</b> - <v>1664649</v> + <v>1662317</v> </b> <b> <a>2</a> <b>3</b> - <v>553485</v> + <v>552706</v> </b> <b> <a>3</a> <b>4</b> - <v>350820</v> + <v>351213</v> </b> <b> <a>4</a> <b>72</b> - <v>104360</v> + <v>104477</v> </b> </bs> </hist> @@ -20680,22 +20659,22 @@ <b> <a>1</a> <b>2</b> - <v>1657661</v> + <v>1655321</v> </b> <b> <a>2</a> <b>3</b> - <v>564667</v> + <v>563900</v> </b> <b> <a>3</a> <b>4</b> - <v>352684</v> + <v>353079</v> </b> <b> <a>4</a> <b>6</b> - <v>98304</v> + <v>98414</v> </b> </bs> </hist> @@ -20705,19 +20684,19 @@ </relation> <relation> <name>pointerishsize</name> - <cardinality>3212359</cardinality> + <cardinality>3210362</cardinality> <columnsizes> <e> <k>id</k> - <v>3212359</v> + <v>3210362</v> </e> <e> <k>size</k> - <v>465</v> + <v>466</v> </e> <e> <k>alignment</k> - <v>465</v> + <v>466</v> </e> </columnsizes> <dependencies> @@ -20731,7 +20710,7 @@ <b> <a>1</a> <b>2</b> - <v>3212359</v> + <v>3210362</v> </b> </bs> </hist> @@ -20747,7 +20726,7 @@ <b> <a>1</a> <b>2</b> - <v>3212359</v> + <v>3210362</v> </b> </bs> </hist> @@ -20761,9 +20740,9 @@ <budget>12</budget> <bs> <b> - <a>6895</a> - <b>6896</b> - <v>465</v> + <a>6883</a> + <b>6884</b> + <v>466</v> </b> </bs> </hist> @@ -20779,7 +20758,7 @@ <b> <a>1</a> <b>2</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -20793,9 +20772,9 @@ <budget>12</budget> <bs> <b> - <a>6895</a> - <b>6896</b> - <v>465</v> + <a>6883</a> + <b>6884</b> + <v>466</v> </b> </bs> </hist> @@ -20811,7 +20790,7 @@ <b> <a>1</a> <b>2</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -20821,23 +20800,23 @@ </relation> <relation> <name>arraysizes</name> - <cardinality>88054</cardinality> + <cardinality>88153</cardinality> <columnsizes> <e> <k>id</k> - <v>88054</v> + <v>88153</v> </e> <e> <k>num_elements</k> - <v>31680</v> + <v>31716</v> </e> <e> <k>bytesize</k> - <v>33078</v> + <v>33115</v> </e> <e> <k>alignment</k> - <v>1863</v> + <v>1865</v> </e> </columnsizes> <dependencies> @@ -20851,7 +20830,7 @@ <b> <a>1</a> <b>2</b> - <v>88054</v> + <v>88153</v> </b> </bs> </hist> @@ -20867,7 +20846,7 @@ <b> <a>1</a> <b>2</b> - <v>88054</v> + <v>88153</v> </b> </bs> </hist> @@ -20883,7 +20862,7 @@ <b> <a>1</a> <b>2</b> - <v>88054</v> + <v>88153</v> </b> </bs> </hist> @@ -20899,27 +20878,27 @@ <b> <a>1</a> <b>2</b> - <v>1863</v> + <v>1865</v> </b> <b> <a>2</a> <b>3</b> - <v>23760</v> + <v>23787</v> </b> <b> <a>3</a> <b>5</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>5</a> <b>13</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>13</a> <b>14</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -20935,17 +20914,17 @@ <b> <a>1</a> <b>2</b> - <v>26556</v> + <v>26585</v> </b> <b> <a>2</a> <b>3</b> - <v>2329</v> + <v>2332</v> </b> <b> <a>3</a> <b>7</b> - <v>2795</v> + <v>2798</v> </b> </bs> </hist> @@ -20961,17 +20940,17 @@ <b> <a>1</a> <b>2</b> - <v>26556</v> + <v>26585</v> </b> <b> <a>2</a> <b>3</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>3</a> <b>5</b> - <v>2329</v> + <v>2332</v> </b> </bs> </hist> @@ -20987,27 +20966,27 @@ <b> <a>1</a> <b>2</b> - <v>1863</v> + <v>1865</v> </b> <b> <a>2</a> <b>3</b> - <v>23760</v> + <v>23787</v> </b> <b> <a>3</a> <b>4</b> - <v>3261</v> + <v>3264</v> </b> <b> <a>4</a> <b>6</b> - <v>2329</v> + <v>2332</v> </b> <b> <a>7</a> <b>16</b> - <v>1863</v> + <v>1865</v> </b> </bs> </hist> @@ -21023,17 +21002,17 @@ <b> <a>1</a> <b>2</b> - <v>27487</v> + <v>27518</v> </b> <b> <a>2</a> <b>3</b> - <v>3727</v> + <v>3731</v> </b> <b> <a>3</a> <b>5</b> - <v>1863</v> + <v>1865</v> </b> </bs> </hist> @@ -21049,17 +21028,17 @@ <b> <a>1</a> <b>2</b> - <v>27487</v> + <v>27518</v> </b> <b> <a>2</a> <b>3</b> - <v>4658</v> + <v>4664</v> </b> <b> <a>4</a> <b>5</b> - <v>931</v> + <v>932</v> </b> </bs> </hist> @@ -21075,22 +21054,22 @@ <b> <a>5</a> <b>6</b> - <v>465</v> + <v>466</v> </b> <b> <a>16</a> <b>17</b> - <v>465</v> + <v>466</v> </b> <b> <a>31</a> <b>32</b> - <v>465</v> + <v>466</v> </b> <b> <a>137</a> <b>138</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -21106,17 +21085,17 @@ <b> <a>4</a> <b>5</b> - <v>465</v> + <v>466</v> </b> <b> <a>7</a> <b>8</b> - <v>931</v> + <v>932</v> </b> <b> <a>68</a> <b>69</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -21132,22 +21111,22 @@ <b> <a>4</a> <b>5</b> - <v>465</v> + <v>466</v> </b> <b> <a>7</a> <b>8</b> - <v>465</v> + <v>466</v> </b> <b> <a>8</a> <b>9</b> - <v>465</v> + <v>466</v> </b> <b> <a>68</a> <b>69</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -21157,15 +21136,15 @@ </relation> <relation> <name>typedefbase</name> - <cardinality>1679336</cardinality> + <cardinality>1672769</cardinality> <columnsizes> <e> <k>id</k> - <v>1679336</v> + <v>1672769</v> </e> <e> <k>type_id</k> - <v>790504</v> + <v>787413</v> </e> </columnsizes> <dependencies> @@ -21179,7 +21158,7 @@ <b> <a>1</a> <b>2</b> - <v>1679336</v> + <v>1672769</v> </b> </bs> </hist> @@ -21195,22 +21174,22 @@ <b> <a>1</a> <b>2</b> - <v>615196</v> + <v>612790</v> </b> <b> <a>2</a> <b>3</b> - <v>82913</v> + <v>82588</v> </b> <b> <a>3</a> <b>6</b> - <v>61746</v> + <v>61505</v> </b> <b> <a>6</a> <b>5437</b> - <v>30648</v> + <v>30528</v> </b> </bs> </hist> @@ -21220,19 +21199,19 @@ </relation> <relation> <name>decltypes</name> - <cardinality>172128</cardinality> + <cardinality>166216</cardinality> <columnsizes> <e> <k>id</k> - <v>17293</v> + <v>16699</v> </e> <e> <k>expr</k> - <v>172128</v> + <v>166216</v> </e> <e> <k>base_type</k> - <v>10324</v> + <v>9970</v> </e> <e> <k>parentheses_would_change_meaning</k> @@ -21250,37 +21229,37 @@ <b> <a>1</a> <b>2</b> - <v>5271</v> + <v>5090</v> </b> <b> <a>2</a> <b>3</b> - <v>6416</v> + <v>6195</v> </b> <b> <a>3</a> <b>5</b> - <v>1145</v> + <v>1105</v> </b> <b> <a>5</a> <b>12</b> - <v>1342</v> + <v>1296</v> </b> <b> <a>12</a> <b>18</b> - <v>1401</v> + <v>1353</v> </b> <b> <a>18</a> <b>46</b> - <v>1302</v> + <v>1258</v> </b> <b> <a>51</a> <b>740</b> - <v>414</v> + <v>400</v> </b> </bs> </hist> @@ -21296,7 +21275,7 @@ <b> <a>1</a> <b>2</b> - <v>17293</v> + <v>16699</v> </b> </bs> </hist> @@ -21312,7 +21291,7 @@ <b> <a>1</a> <b>2</b> - <v>17293</v> + <v>16699</v> </b> </bs> </hist> @@ -21328,7 +21307,7 @@ <b> <a>1</a> <b>2</b> - <v>172128</v> + <v>166216</v> </b> </bs> </hist> @@ -21344,7 +21323,7 @@ <b> <a>1</a> <b>2</b> - <v>172128</v> + <v>166216</v> </b> </bs> </hist> @@ -21360,7 +21339,7 @@ <b> <a>1</a> <b>2</b> - <v>172128</v> + <v>166216</v> </b> </bs> </hist> @@ -21376,17 +21355,17 @@ <b> <a>1</a> <b>2</b> - <v>7501</v> + <v>7244</v> </b> <b> <a>2</a> <b>3</b> - <v>2349</v> + <v>2268</v> </b> <b> <a>4</a> <b>149</b> - <v>473</v> + <v>457</v> </b> </bs> </hist> @@ -21402,37 +21381,37 @@ <b> <a>1</a> <b>2</b> - <v>750</v> + <v>724</v> </b> <b> <a>2</a> <b>3</b> - <v>6356</v> + <v>6138</v> </b> <b> <a>3</a> <b>4</b> - <v>355</v> + <v>343</v> </b> <b> <a>4</a> <b>5</b> - <v>1006</v> + <v>972</v> </b> <b> <a>5</a> <b>7</b> - <v>789</v> + <v>762</v> </b> <b> <a>7</a> <b>32</b> - <v>829</v> + <v>800</v> </b> <b> <a>32</a> <b>3888</b> - <v>236</v> + <v>228</v> </b> </bs> </hist> @@ -21448,7 +21427,7 @@ <b> <a>1</a> <b>2</b> - <v>10324</v> + <v>9970</v> </b> </bs> </hist> @@ -21506,19 +21485,19 @@ </relation> <relation> <name>usertypes</name> - <cardinality>5224568</cardinality> + <cardinality>5229957</cardinality> <columnsizes> <e> <k>id</k> - <v>5224568</v> + <v>5229957</v> </e> <e> <k>name</k> - <v>1349703</v> + <v>1351216</v> </e> <e> <k>kind</k> - <v>5124</v> + <v>5130</v> </e> </columnsizes> <dependencies> @@ -21532,7 +21511,7 @@ <b> <a>1</a> <b>2</b> - <v>5224568</v> + <v>5229957</v> </b> </bs> </hist> @@ -21548,7 +21527,7 @@ <b> <a>1</a> <b>2</b> - <v>5224568</v> + <v>5229957</v> </b> </bs> </hist> @@ -21564,27 +21543,27 @@ <b> <a>1</a> <b>2</b> - <v>981644</v> + <v>982745</v> </b> <b> <a>2</a> <b>3</b> - <v>153280</v> + <v>153451</v> </b> <b> <a>3</a> <b>7</b> - <v>104360</v> + <v>104477</v> </b> <b> <a>7</a> <b>61</b> - <v>101565</v> + <v>101679</v> </b> <b> <a>65</a> <b>874</b> - <v>8852</v> + <v>8861</v> </b> </bs> </hist> @@ -21600,17 +21579,17 @@ <b> <a>1</a> <b>2</b> - <v>1209468</v> + <v>1210823</v> </b> <b> <a>2</a> <b>3</b> - <v>124860</v> + <v>125000</v> </b> <b> <a>3</a> <b>7</b> - <v>15374</v> + <v>15391</v> </b> </bs> </hist> @@ -21626,57 +21605,57 @@ <b> <a>6</a> <b>7</b> - <v>465</v> + <v>466</v> </b> <b> <a>10</a> <b>11</b> - <v>465</v> + <v>466</v> </b> <b> <a>26</a> <b>27</b> - <v>465</v> + <v>466</v> </b> <b> <a>124</a> <b>125</b> - <v>465</v> + <v>466</v> </b> <b> <a>135</a> <b>136</b> - <v>465</v> + <v>466</v> </b> <b> <a>663</a> <b>664</b> - <v>465</v> + <v>466</v> </b> <b> <a>853</a> <b>854</b> - <v>465</v> + <v>466</v> </b> <b> - <a>959</a> - <b>960</b> - <v>465</v> + <a>958</a> + <b>959</b> + <v>466</v> </b> <b> <a>1752</a> <b>1753</b> - <v>465</v> + <v>466</v> </b> <b> <a>1842</a> <b>1843</b> - <v>465</v> + <v>466</v> </b> <b> <a>4844</a> <b>4845</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -21692,57 +21671,57 @@ <b> <a>5</a> <b>6</b> - <v>465</v> + <v>466</v> </b> <b> <a>6</a> <b>7</b> - <v>465</v> + <v>466</v> </b> <b> <a>14</a> <b>15</b> - <v>465</v> + <v>466</v> </b> <b> <a>30</a> <b>31</b> - <v>465</v> + <v>466</v> </b> <b> <a>43</a> <b>44</b> - <v>465</v> + <v>466</v> </b> <b> <a>125</a> <b>126</b> - <v>465</v> + <v>466</v> </b> <b> <a>267</a> <b>268</b> - <v>465</v> + <v>466</v> </b> <b> <a>371</a> <b>372</b> - <v>465</v> + <v>466</v> </b> <b> <a>438</a> <b>439</b> - <v>465</v> + <v>466</v> </b> <b> <a>739</a> <b>740</b> - <v>465</v> + <v>466</v> </b> <b> <a>1200</a> <b>1201</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -21752,19 +21731,19 @@ </relation> <relation> <name>usertypesize</name> - <cardinality>1704251</cardinality> + <cardinality>1705694</cardinality> <columnsizes> <e> <k>id</k> - <v>1704251</v> + <v>1705694</v> </e> <e> <k>size</k> - <v>13511</v> + <v>13526</v> </e> <e> <k>alignment</k> - <v>2329</v> + <v>2332</v> </e> </columnsizes> <dependencies> @@ -21778,7 +21757,7 @@ <b> <a>1</a> <b>2</b> - <v>1704251</v> + <v>1705694</v> </b> </bs> </hist> @@ -21794,7 +21773,7 @@ <b> <a>1</a> <b>2</b> - <v>1704251</v> + <v>1705694</v> </b> </bs> </hist> @@ -21810,47 +21789,47 @@ <b> <a>1</a> <b>2</b> - <v>3261</v> + <v>3264</v> </b> <b> <a>2</a> <b>3</b> - <v>4193</v> + <v>4197</v> </b> <b> <a>3</a> <b>4</b> - <v>465</v> + <v>466</v> </b> <b> <a>4</a> <b>5</b> - <v>931</v> + <v>932</v> </b> <b> <a>6</a> <b>8</b> - <v>931</v> + <v>932</v> </b> <b> <a>9</a> <b>15</b> - <v>931</v> + <v>932</v> </b> <b> <a>37</a> <b>84</b> - <v>931</v> + <v>932</v> </b> <b> <a>92</a> <b>163</b> - <v>931</v> + <v>932</v> </b> <b> <a>740</a> - <b>2473</b> - <v>931</v> + <b>2472</b> + <v>932</v> </b> </bs> </hist> @@ -21866,17 +21845,17 @@ <b> <a>1</a> <b>2</b> - <v>10249</v> + <v>10261</v> </b> <b> <a>2</a> <b>3</b> - <v>2795</v> + <v>2798</v> </b> <b> <a>3</a> <b>4</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -21892,27 +21871,27 @@ <b> <a>2</a> <b>3</b> - <v>465</v> + <v>466</v> </b> <b> <a>6</a> <b>7</b> - <v>465</v> + <v>466</v> </b> <b> <a>184</a> <b>185</b> - <v>465</v> + <v>466</v> </b> <b> <a>254</a> <b>255</b> - <v>465</v> + <v>466</v> </b> <b> - <a>3212</a> - <b>3213</b> - <v>465</v> + <a>3211</a> + <b>3212</b> + <v>466</v> </b> </bs> </hist> @@ -21928,27 +21907,27 @@ <b> <a>1</a> <b>2</b> - <v>465</v> + <v>466</v> </b> <b> <a>2</a> <b>3</b> - <v>465</v> + <v>466</v> </b> <b> <a>3</a> <b>4</b> - <v>465</v> + <v>466</v> </b> <b> <a>9</a> <b>10</b> - <v>465</v> + <v>466</v> </b> <b> <a>22</a> <b>23</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -21958,22 +21937,22 @@ </relation> <relation> <name>usertype_final</name> - <cardinality>9490</cardinality> + <cardinality>9420</cardinality> <columnsizes> <e> <k>id</k> - <v>9490</v> + <v>9420</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>usertype_uuid</name> - <cardinality>36638</cardinality> + <cardinality>36639</cardinality> <columnsizes> <e> <k>id</k> - <v>36638</v> + <v>36639</v> </e> <e> <k>uuid</k> @@ -21991,7 +21970,7 @@ <b> <a>1</a> <b>2</b> - <v>36638</v> + <v>36639</v> </b> </bs> </hist> @@ -22007,7 +21986,7 @@ <b> <a>1</a> <b>2</b> - <v>35889</v> + <v>35890</v> </b> <b> <a>2</a> @@ -22022,19 +22001,19 @@ </relation> <relation> <name>mangled_name</name> - <cardinality>9467492</cardinality> + <cardinality>9477636</cardinality> <columnsizes> <e> <k>id</k> - <v>9467492</v> + <v>9477636</v> </e> <e> <k>mangled_name</k> - <v>6441025</v> + <v>6448244</v> </e> <e> <k>is_complete</k> - <v>465</v> + <v>466</v> </e> </columnsizes> <dependencies> @@ -22048,7 +22027,7 @@ <b> <a>1</a> <b>2</b> - <v>9467492</v> + <v>9477636</v> </b> </bs> </hist> @@ -22064,7 +22043,7 @@ <b> <a>1</a> <b>2</b> - <v>9467492</v> + <v>9477636</v> </b> </bs> </hist> @@ -22080,12 +22059,12 @@ <b> <a>1</a> <b>2</b> - <v>6160555</v> + <v>6167459</v> </b> <b> <a>2</a> <b>874</b> - <v>280469</v> + <v>280784</v> </b> </bs> </hist> @@ -22101,7 +22080,7 @@ <b> <a>1</a> <b>2</b> - <v>6441025</v> + <v>6448244</v> </b> </bs> </hist> @@ -22115,9 +22094,9 @@ <budget>12</budget> <bs> <b> - <a>20321</a> - <b>20322</b> - <v>465</v> + <a>20320</a> + <b>20321</b> + <v>466</v> </b> </bs> </hist> @@ -22133,7 +22112,7 @@ <b> <a>13825</a> <b>13826</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -22143,59 +22122,59 @@ </relation> <relation> <name>is_pod_class</name> - <cardinality>532834</cardinality> + <cardinality>530716</cardinality> <columnsizes> <e> <k>id</k> - <v>532834</v> + <v>530716</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>is_standard_layout_class</name> - <cardinality>1252796</cardinality> + <cardinality>1253734</cardinality> <columnsizes> <e> <k>id</k> - <v>1252796</v> + <v>1253734</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>is_complete</name> - <cardinality>1643684</cardinality> + <cardinality>1645060</cardinality> <columnsizes> <e> <k>id</k> - <v>1643684</v> + <v>1645060</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>is_class_template</name> - <cardinality>397410</cardinality> + <cardinality>397855</cardinality> <columnsizes> <e> <k>id</k> - <v>397410</v> + <v>397855</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>class_instantiation</name> - <cardinality>1087869</cardinality> + <cardinality>1088622</cardinality> <columnsizes> <e> <k>to</k> - <v>1087869</v> + <v>1088622</v> </e> <e> <k>from</k> - <v>168188</v> + <v>168377</v> </e> </columnsizes> <dependencies> @@ -22209,7 +22188,7 @@ <b> <a>1</a> <b>2</b> - <v>1087869</v> + <v>1088622</v> </b> </bs> </hist> @@ -22225,47 +22204,47 @@ <b> <a>1</a> <b>2</b> - <v>59634</v> + <v>59701</v> </b> <b> <a>2</a> <b>3</b> - <v>29351</v> + <v>29384</v> </b> <b> <a>3</a> <b>4</b> - <v>15840</v> + <v>15858</v> </b> <b> <a>4</a> <b>5</b> - <v>13045</v> + <v>13059</v> </b> <b> <a>5</a> <b>6</b> - <v>9783</v> + <v>9794</v> </b> <b> <a>6</a> <b>10</b> - <v>12579</v> + <v>12593</v> </b> <b> <a>10</a> <b>16</b> - <v>13045</v> + <v>13059</v> </b> <b> <a>16</a> <b>70</b> - <v>13511</v> + <v>13526</v> </b> <b> <a>70</a> <b>84</b> - <v>1397</v> + <v>1399</v> </b> </bs> </hist> @@ -22275,19 +22254,19 @@ </relation> <relation> <name>class_template_argument</name> - <cardinality>2870306</cardinality> + <cardinality>2859038</cardinality> <columnsizes> <e> <k>type_id</k> - <v>1310002</v> + <v>1304835</v> </e> <e> <k>index</k> - <v>1258</v> + <v>1253</v> </e> <e> <k>arg_type</k> - <v>836511</v> + <v>833229</v> </e> </columnsizes> <dependencies> @@ -22301,27 +22280,27 @@ <b> <a>1</a> <b>2</b> - <v>538743</v> + <v>536592</v> </b> <b> <a>2</a> <b>3</b> - <v>397645</v> + <v>396090</v> </b> <b> <a>3</a> <b>4</b> - <v>230325</v> + <v>229424</v> </b> <b> <a>4</a> <b>7</b> - <v>119796</v> + <v>119328</v> </b> <b> <a>7</a> <b>113</b> - <v>23492</v> + <v>23400</v> </b> </bs> </hist> @@ -22337,22 +22316,22 @@ <b> <a>1</a> <b>2</b> - <v>565268</v> + <v>563013</v> </b> <b> <a>2</a> <b>3</b> - <v>408835</v> + <v>407236</v> </b> <b> <a>3</a> <b>4</b> - <v>243705</v> + <v>242752</v> </b> <b> <a>4</a> <b>113</b> - <v>92192</v> + <v>91832</v> </b> </bs> </hist> @@ -22373,31 +22352,31 @@ <b> <a>2</a> <b>3</b> - <v>797</v> + <v>794</v> </b> <b> <a>3</a> <b>26</b> - <v>101</v> + <v>100</v> </b> <b> <a>29</a> <b>64</b> - <v>101</v> + <v>100</v> </b> <b> <a>69</a> <b>411</b> - <v>101</v> + <v>100</v> </b> <b> <a>592</a> <b>8901</b> - <v>101</v> + <v>100</v> </b> <b> <a>13095</a> - <b>114270</b> + <b>114267</b> <v>44</v> </b> </bs> @@ -22419,31 +22398,31 @@ <b> <a>2</a> <b>3</b> - <v>797</v> + <v>794</v> </b> <b> <a>3</a> <b>14</b> - <v>112</v> + <v>111</v> </b> <b> <a>14</a> <b>26</b> - <v>101</v> + <v>100</v> </b> <b> <a>28</a> <b>145</b> - <v>101</v> + <v>100</v> </b> <b> <a>195</a> <b>3469</b> - <v>101</v> + <v>100</v> </b> <b> <a>10524</a> - <b>39739</b> + <b>39738</b> <v>33</v> </b> </bs> @@ -22460,27 +22439,27 @@ <b> <a>1</a> <b>2</b> - <v>520779</v> + <v>518731</v> </b> <b> <a>2</a> <b>3</b> - <v>173600</v> + <v>172921</v> </b> <b> <a>3</a> <b>4</b> - <v>51084</v> + <v>50884</v> </b> <b> <a>4</a> <b>10</b> - <v>63768</v> + <v>63519</v> </b> <b> <a>10</a> <b>10265</b> - <v>27278</v> + <v>27171</v> </b> </bs> </hist> @@ -22496,17 +22475,17 @@ <b> <a>1</a> <b>2</b> - <v>737319</v> + <v>734424</v> </b> <b> <a>2</a> <b>3</b> - <v>80946</v> + <v>80630</v> </b> <b> <a>3</a> <b>22</b> - <v>18245</v> + <v>18174</v> </b> </bs> </hist> @@ -22516,19 +22495,19 @@ </relation> <relation> <name>class_template_argument_value</name> - <cardinality>494316</cardinality> + <cardinality>494870</cardinality> <columnsizes> <e> <k>type_id</k> - <v>304230</v> + <v>304571</v> </e> <e> <k>index</k> - <v>1863</v> + <v>1865</v> </e> <e> <k>arg_value</k> - <v>494316</v> + <v>494870</v> </e> </columnsizes> <dependencies> @@ -22542,17 +22521,17 @@ <b> <a>1</a> <b>2</b> - <v>249254</v> + <v>249534</v> </b> <b> <a>2</a> <b>3</b> - <v>53112</v> + <v>53171</v> </b> <b> <a>3</a> <b>4</b> - <v>1863</v> + <v>1865</v> </b> </bs> </hist> @@ -22568,22 +22547,22 @@ <b> <a>1</a> <b>2</b> - <v>189154</v> + <v>189366</v> </b> <b> <a>2</a> <b>3</b> - <v>81066</v> + <v>81156</v> </b> <b> <a>3</a> <b>4</b> - <v>12113</v> + <v>12126</v> </b> <b> <a>4</a> <b>9</b> - <v>21897</v> + <v>21921</v> </b> </bs> </hist> @@ -22599,22 +22578,22 @@ <b> <a>18</a> <b>19</b> - <v>465</v> + <v>466</v> </b> <b> <a>92</a> <b>93</b> - <v>465</v> + <v>466</v> </b> <b> <a>293</a> <b>294</b> - <v>465</v> + <v>466</v> </b> <b> <a>372</a> <b>373</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -22630,22 +22609,22 @@ <b> <a>19</a> <b>20</b> - <v>465</v> + <v>466</v> </b> <b> <a>124</a> <b>125</b> - <v>465</v> + <v>466</v> </b> <b> <a>409</a> <b>410</b> - <v>465</v> + <v>466</v> </b> <b> <a>509</a> <b>510</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -22661,7 +22640,7 @@ <b> <a>1</a> <b>2</b> - <v>494316</v> + <v>494870</v> </b> </bs> </hist> @@ -22677,7 +22656,7 @@ <b> <a>1</a> <b>2</b> - <v>494316</v> + <v>494870</v> </b> </bs> </hist> @@ -22687,15 +22666,15 @@ </relation> <relation> <name>is_proxy_class_for</name> - <cardinality>62896</cardinality> + <cardinality>62966</cardinality> <columnsizes> <e> <k>id</k> - <v>62896</v> + <v>62966</v> </e> <e> <k>templ_param_id</k> - <v>62896</v> + <v>62966</v> </e> </columnsizes> <dependencies> @@ -22709,7 +22688,7 @@ <b> <a>1</a> <b>2</b> - <v>62896</v> + <v>62966</v> </b> </bs> </hist> @@ -22725,7 +22704,7 @@ <b> <a>1</a> <b>2</b> - <v>62896</v> + <v>62966</v> </b> </bs> </hist> @@ -22735,19 +22714,19 @@ </relation> <relation> <name>type_mentions</name> - <cardinality>4023226</cardinality> + <cardinality>4029370</cardinality> <columnsizes> <e> <k>id</k> - <v>4023226</v> + <v>4029370</v> </e> <e> <k>type_id</k> - <v>197911</v> + <v>198214</v> </e> <e> <k>location</k> - <v>3989755</v> + <v>3995848</v> </e> <e> <k>kind</k> @@ -22765,7 +22744,7 @@ <b> <a>1</a> <b>2</b> - <v>4023226</v> + <v>4029370</v> </b> </bs> </hist> @@ -22781,7 +22760,7 @@ <b> <a>1</a> <b>2</b> - <v>4023226</v> + <v>4029370</v> </b> </bs> </hist> @@ -22797,7 +22776,7 @@ <b> <a>1</a> <b>2</b> - <v>4023226</v> + <v>4029370</v> </b> </bs> </hist> @@ -22813,42 +22792,42 @@ <b> <a>1</a> <b>2</b> - <v>97459</v> + <v>97608</v> </b> <b> <a>2</a> <b>3</b> - <v>21702</v> + <v>21735</v> </b> <b> <a>3</a> <b>4</b> - <v>8218</v> + <v>8230</v> </b> <b> <a>4</a> <b>5</b> - <v>10771</v> + <v>10787</v> </b> <b> <a>5</a> <b>7</b> - <v>14361</v> + <v>14383</v> </b> <b> <a>7</a> <b>12</b> - <v>15837</v> + <v>15861</v> </b> <b> <a>12</a> <b>27</b> - <v>15159</v> + <v>15182</v> </b> <b> <a>27</a> <b>8555</b> - <v>14401</v> + <v>14423</v> </b> </bs> </hist> @@ -22864,42 +22843,42 @@ <b> <a>1</a> <b>2</b> - <v>97459</v> + <v>97608</v> </b> <b> <a>2</a> <b>3</b> - <v>21702</v> + <v>21735</v> </b> <b> <a>3</a> <b>4</b> - <v>8218</v> + <v>8230</v> </b> <b> <a>4</a> <b>5</b> - <v>10771</v> + <v>10787</v> </b> <b> <a>5</a> <b>7</b> - <v>14361</v> + <v>14383</v> </b> <b> <a>7</a> <b>12</b> - <v>15837</v> + <v>15861</v> </b> <b> <a>12</a> <b>27</b> - <v>15159</v> + <v>15182</v> </b> <b> <a>27</a> <b>8555</b> - <v>14401</v> + <v>14423</v> </b> </bs> </hist> @@ -22915,7 +22894,7 @@ <b> <a>1</a> <b>2</b> - <v>197911</v> + <v>198214</v> </b> </bs> </hist> @@ -22931,12 +22910,12 @@ <b> <a>1</a> <b>2</b> - <v>3956284</v> + <v>3962326</v> </b> <b> <a>2</a> <b>3</b> - <v>33470</v> + <v>33521</v> </b> </bs> </hist> @@ -22952,12 +22931,12 @@ <b> <a>1</a> <b>2</b> - <v>3956284</v> + <v>3962326</v> </b> <b> <a>2</a> <b>3</b> - <v>33470</v> + <v>33521</v> </b> </bs> </hist> @@ -22973,7 +22952,7 @@ <b> <a>1</a> <b>2</b> - <v>3989755</v> + <v>3995848</v> </b> </bs> </hist> @@ -23031,26 +23010,26 @@ </relation> <relation> <name>is_function_template</name> - <cardinality>1400020</cardinality> + <cardinality>1401589</cardinality> <columnsizes> <e> <k>id</k> - <v>1400020</v> + <v>1401589</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>function_instantiation</name> - <cardinality>904114</cardinality> + <cardinality>894870</cardinality> <columnsizes> <e> <k>to</k> - <v>904114</v> + <v>894870</v> </e> <e> <k>from</k> - <v>145768</v> + <v>144256</v> </e> </columnsizes> <dependencies> @@ -23064,7 +23043,7 @@ <b> <a>1</a> <b>2</b> - <v>904114</v> + <v>894870</v> </b> </bs> </hist> @@ -23080,27 +23059,27 @@ <b> <a>1</a> <b>2</b> - <v>101070</v> + <v>100033</v> </b> <b> <a>2</a> <b>3</b> - <v>14383</v> + <v>14230</v> </b> <b> <a>3</a> <b>6</b> - <v>11992</v> + <v>11864</v> </b> <b> <a>6</a> <b>21</b> - <v>12027</v> + <v>11899</v> </b> <b> <a>22</a> - <b>869</b> - <v>6294</v> + <b>870</b> + <v>6228</v> </b> </bs> </hist> @@ -23110,19 +23089,19 @@ </relation> <relation> <name>function_template_argument</name> - <cardinality>2335210</cardinality> + <cardinality>2310645</cardinality> <columnsizes> <e> <k>function_id</k> - <v>1333998</v> + <v>1319951</v> </e> <e> <k>index</k> - <v>562</v> + <v>556</v> </e> <e> <k>arg_type</k> - <v>304055</v> + <v>300865</v> </e> </columnsizes> <dependencies> @@ -23136,22 +23115,22 @@ <b> <a>1</a> <b>2</b> - <v>680767</v> + <v>673580</v> </b> <b> <a>2</a> <b>3</b> - <v>394154</v> + <v>390007</v> </b> <b> <a>3</a> <b>4</b> - <v>188531</v> + <v>186566</v> </b> <b> <a>4</a> <b>15</b> - <v>70545</v> + <v>69797</v> </b> </bs> </hist> @@ -23167,22 +23146,22 @@ <b> <a>1</a> <b>2</b> - <v>698351</v> + <v>690977</v> </b> <b> <a>2</a> <b>3</b> - <v>404036</v> + <v>399784</v> </b> <b> <a>3</a> <b>4</b> - <v>168415</v> + <v>166664</v> </b> <b> <a>4</a> <b>9</b> - <v>63195</v> + <v>62525</v> </b> </bs> </hist> @@ -23198,57 +23177,57 @@ <b> <a>1</a> <b>2</b> - <v>211</v> + <v>208</v> </b> <b> <a>7</a> <b>8</b> - <v>35</v> + <v>34</v> </b> <b> <a>35</a> <b>36</b> - <v>35</v> + <v>34</v> </b> <b> <a>108</a> <b>109</b> - <v>35</v> + <v>34</v> </b> <b> <a>164</a> <b>165</b> - <v>35</v> + <v>34</v> </b> <b> <a>294</a> <b>295</b> - <v>35</v> + <v>34</v> </b> <b> <a>849</a> <b>850</b> - <v>35</v> + <v>34</v> </b> <b> - <a>3293</a> - <b>3294</b> - <v>35</v> + <a>3294</a> + <b>3295</b> + <v>34</v> </b> <b> - <a>8740</a> - <b>8741</b> - <v>35</v> + <a>8741</a> + <b>8742</b> + <v>34</v> </b> <b> - <a>17935</a> - <b>17936</b> - <v>35</v> + <a>17936</a> + <b>17937</b> + <v>34</v> </b> <b> - <a>34972</a> - <b>34973</b> - <v>35</v> + <a>34975</a> + <b>34976</b> + <v>34</v> </b> </bs> </hist> @@ -23264,57 +23243,57 @@ <b> <a>1</a> <b>2</b> - <v>211</v> + <v>208</v> </b> <b> <a>3</a> <b>4</b> - <v>35</v> + <v>34</v> </b> <b> <a>11</a> <b>12</b> - <v>35</v> + <v>34</v> </b> <b> <a>22</a> <b>23</b> - <v>35</v> + <v>34</v> </b> <b> <a>30</a> <b>31</b> - <v>35</v> + <v>34</v> </b> <b> <a>61</a> <b>62</b> - <v>35</v> + <v>34</v> </b> <b> <a>134</a> <b>135</b> - <v>35</v> + <v>34</v> </b> <b> <a>453</a> <b>454</b> - <v>35</v> + <v>34</v> </b> <b> <a>1126</a> <b>1127</b> - <v>35</v> + <v>34</v> </b> <b> <a>2397</a> <b>2398</b> - <v>35</v> + <v>34</v> </b> <b> - <a>5837</a> - <b>5838</b> - <v>35</v> + <a>5838</a> + <b>5839</b> + <v>34</v> </b> </bs> </hist> @@ -23330,32 +23309,32 @@ <b> <a>1</a> <b>2</b> - <v>186245</v> + <v>184304</v> </b> <b> <a>2</a> <b>3</b> - <v>44521</v> + <v>44049</v> </b> <b> <a>3</a> <b>5</b> - <v>23421</v> + <v>23172</v> </b> <b> <a>5</a> <b>16</b> - <v>23456</v> + <v>23207</v> </b> <b> <a>16</a> <b>107</b> - <v>22964</v> + <v>22720</v> </b> <b> <a>108</a> <b>957</b> - <v>3446</v> + <v>3409</v> </b> </bs> </hist> @@ -23371,17 +23350,17 @@ <b> <a>1</a> <b>2</b> - <v>273987</v> + <v>271116</v> </b> <b> <a>2</a> <b>4</b> - <v>25953</v> + <v>25678</v> </b> <b> <a>4</a> <b>17</b> - <v>4114</v> + <v>4070</v> </b> </bs> </hist> @@ -23391,19 +23370,19 @@ </relation> <relation> <name>function_template_argument_value</name> - <cardinality>362328</cardinality> + <cardinality>358553</cardinality> <columnsizes> <e> <k>function_id</k> - <v>194509</v> + <v>192516</v> </e> <e> <k>index</k> - <v>562</v> + <v>556</v> </e> <e> <k>arg_value</k> - <v>359690</v> + <v>355944</v> </e> </columnsizes> <dependencies> @@ -23417,12 +23396,12 @@ <b> <a>1</a> <b>2</b> - <v>185155</v> + <v>183260</v> </b> <b> <a>2</a> <b>8</b> - <v>9354</v> + <v>9255</v> </b> </bs> </hist> @@ -23438,17 +23417,17 @@ <b> <a>1</a> <b>2</b> - <v>177735</v> + <v>175919</v> </b> <b> <a>2</a> <b>31</b> - <v>15262</v> + <v>15100</v> </b> <b> <a>32</a> <b>97</b> - <v>1512</v> + <v>1496</v> </b> </bs> </hist> @@ -23464,52 +23443,52 @@ <b> <a>1</a> <b>2</b> - <v>211</v> + <v>208</v> </b> <b> <a>2</a> <b>3</b> - <v>70</v> + <v>69</v> </b> <b> <a>11</a> <b>12</b> - <v>35</v> + <v>34</v> </b> <b> <a>26</a> <b>27</b> - <v>35</v> + <v>34</v> </b> <b> <a>94</a> <b>95</b> - <v>35</v> + <v>34</v> </b> <b> <a>314</a> <b>315</b> - <v>35</v> + <v>34</v> </b> <b> <a>844</a> <b>845</b> - <v>35</v> + <v>34</v> </b> <b> - <a>992</a> - <b>993</b> - <v>35</v> + <a>994</a> + <b>995</b> + <v>34</v> </b> <b> <a>1187</a> <b>1188</b> - <v>35</v> + <v>34</v> </b> <b> <a>2397</a> <b>2398</b> - <v>35</v> + <v>34</v> </b> </bs> </hist> @@ -23525,52 +23504,52 @@ <b> <a>1</a> <b>2</b> - <v>211</v> + <v>208</v> </b> <b> <a>2</a> <b>3</b> - <v>70</v> + <v>69</v> </b> <b> <a>60</a> <b>61</b> - <v>35</v> + <v>34</v> </b> <b> <a>80</a> <b>81</b> - <v>35</v> + <v>34</v> </b> <b> <a>141</a> <b>142</b> - <v>35</v> + <v>34</v> </b> <b> <a>533</a> <b>534</b> - <v>35</v> + <v>34</v> </b> <b> - <a>1610</a> - <b>1611</b> - <v>35</v> + <a>1612</a> + <b>1613</b> + <v>34</v> </b> <b> <a>1821</a> <b>1822</b> - <v>35</v> + <v>34</v> </b> <b> <a>2202</a> <b>2203</b> - <v>35</v> + <v>34</v> </b> <b> <a>3771</a> <b>3772</b> - <v>35</v> + <v>34</v> </b> </bs> </hist> @@ -23586,12 +23565,12 @@ <b> <a>1</a> <b>2</b> - <v>357052</v> + <v>353334</v> </b> <b> <a>2</a> <b>3</b> - <v>2637</v> + <v>2609</v> </b> </bs> </hist> @@ -23607,7 +23586,7 @@ <b> <a>1</a> <b>2</b> - <v>359690</v> + <v>355944</v> </b> </bs> </hist> @@ -23617,26 +23596,26 @@ </relation> <relation> <name>is_variable_template</name> - <cardinality>47349</cardinality> + <cardinality>46998</cardinality> <columnsizes> <e> <k>id</k> - <v>47349</v> + <v>46998</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>variable_instantiation</name> - <cardinality>172502</cardinality> + <cardinality>171327</cardinality> <columnsizes> <e> <k>to</k> - <v>172502</v> + <v>171327</v> </e> <e> <k>from</k> - <v>25864</v> + <v>25673</v> </e> </columnsizes> <dependencies> @@ -23650,7 +23629,7 @@ <b> <a>1</a> <b>2</b> - <v>172502</v> + <v>171327</v> </b> </bs> </hist> @@ -23666,42 +23645,42 @@ <b> <a>1</a> <b>2</b> - <v>13871</v> + <v>13768</v> </b> <b> <a>2</a> <b>3</b> - <v>2607</v> + <v>2588</v> </b> <b> <a>3</a> <b>4</b> - <v>1251</v> + <v>1242</v> </b> <b> <a>4</a> <b>6</b> - <v>1877</v> + <v>1863</v> </b> <b> <a>6</a> <b>8</b> - <v>1355</v> + <v>1345</v> </b> <b> <a>8</a> <b>12</b> - <v>2190</v> + <v>2173</v> </b> <b> <a>12</a> <b>38</b> - <v>1981</v> + <v>1966</v> </b> <b> <a>46</a> - <b>277</b> - <v>730</v> + <b>278</b> + <v>724</v> </b> </bs> </hist> @@ -23711,19 +23690,19 @@ </relation> <relation> <name>variable_template_argument</name> - <cardinality>310587</cardinality> + <cardinality>308493</cardinality> <columnsizes> <e> <k>variable_id</k> - <v>163324</v> + <v>162217</v> </e> <e> <k>index</k> - <v>1772</v> + <v>1759</v> </e> <e> <k>arg_type</k> - <v>171146</v> + <v>170085</v> </e> </columnsizes> <dependencies> @@ -23737,22 +23716,22 @@ <b> <a>1</a> <b>2</b> - <v>83643</v> + <v>83023</v> </b> <b> <a>2</a> <b>3</b> - <v>50791</v> + <v>50518</v> </b> <b> <a>3</a> <b>4</b> - <v>18772</v> + <v>18633</v> </b> <b> <a>4</a> <b>17</b> - <v>10116</v> + <v>10041</v> </b> </bs> </hist> @@ -23768,22 +23747,22 @@ <b> <a>1</a> <b>2</b> - <v>88336</v> + <v>87682</v> </b> <b> <a>2</a> <b>3</b> - <v>52042</v> + <v>51760</v> </b> <b> <a>3</a> <b>4</b> - <v>13662</v> + <v>13561</v> </b> <b> <a>4</a> <b>17</b> - <v>9282</v> + <v>9213</v> </b> </bs> </hist> @@ -23799,47 +23778,47 @@ <b> <a>9</a> <b>10</b> - <v>104</v> + <v>103</v> </b> <b> <a>19</a> <b>20</b> - <v>625</v> + <v>621</v> </b> <b> <a>26</a> <b>27</b> - <v>417</v> + <v>414</v> </b> <b> <a>47</a> <b>48</b> - <v>104</v> + <v>103</v> </b> <b> <a>93</a> <b>94</b> - <v>104</v> + <v>103</v> </b> <b> <a>185</a> <b>186</b> - <v>104</v> + <v>103</v> </b> <b> - <a>547</a> - <b>548</b> - <v>104</v> + <a>548</a> + <b>549</b> + <v>103</v> </b> <b> - <a>626</a> - <b>627</b> - <v>104</v> + <a>627</a> + <b>628</b> + <v>103</v> </b> <b> <a>1253</a> <b>1254</b> - <v>104</v> + <v>103</v> </b> </bs> </hist> @@ -23855,52 +23834,52 @@ <b> <a>1</a> <b>2</b> - <v>104</v> + <v>103</v> </b> <b> <a>10</a> <b>11</b> - <v>417</v> + <v>414</v> </b> <b> <a>11</a> <b>12</b> - <v>208</v> + <v>207</v> </b> <b> <a>12</a> <b>13</b> - <v>417</v> + <v>414</v> </b> <b> <a>29</a> <b>30</b> - <v>104</v> + <v>103</v> </b> <b> <a>48</a> <b>49</b> - <v>104</v> + <v>103</v> </b> <b> <a>130</a> <b>131</b> - <v>104</v> + <v>103</v> </b> <b> - <a>375</a> - <b>376</b> - <v>104</v> + <a>376</a> + <b>377</b> + <v>103</v> </b> <b> - <a>402</a> - <b>403</b> - <v>104</v> + <a>403</a> + <b>404</b> + <v>103</v> </b> <b> <a>743</a> <b>744</b> - <v>104</v> + <v>103</v> </b> </bs> </hist> @@ -23916,22 +23895,22 @@ <b> <a>1</a> <b>2</b> - <v>137668</v> + <v>136855</v> </b> <b> <a>2</a> <b>3</b> - <v>19502</v> + <v>19358</v> </b> <b> <a>3</a> <b>24</b> - <v>12932</v> + <v>12836</v> </b> <b> <a>24</a> <b>110</b> - <v>1042</v> + <v>1035</v> </b> </bs> </hist> @@ -23947,17 +23926,17 @@ <b> <a>1</a> <b>2</b> - <v>154146</v> + <v>153211</v> </b> <b> <a>2</a> <b>3</b> - <v>14914</v> + <v>14803</v> </b> <b> <a>3</a> <b>6</b> - <v>2085</v> + <v>2070</v> </b> </bs> </hist> @@ -23967,19 +23946,19 @@ </relation> <relation> <name>variable_template_argument_value</name> - <cardinality>11889</cardinality> + <cardinality>11801</cardinality> <columnsizes> <e> <k>variable_id</k> - <v>7822</v> + <v>7764</v> </e> <e> <k>index</k> - <v>417</v> + <v>414</v> </e> <e> <k>arg_value</k> - <v>11889</v> + <v>11801</v> </e> </columnsizes> <dependencies> @@ -23993,12 +23972,12 @@ <b> <a>1</a> <b>2</b> - <v>7404</v> + <v>7350</v> </b> <b> <a>2</a> <b>3</b> - <v>417</v> + <v>414</v> </b> </bs> </hist> @@ -24014,17 +23993,17 @@ <b> <a>1</a> <b>2</b> - <v>4380</v> + <v>4347</v> </b> <b> <a>2</a> <b>3</b> - <v>3128</v> + <v>3105</v> </b> <b> <a>4</a> <b>5</b> - <v>312</v> + <v>310</v> </b> </bs> </hist> @@ -24040,22 +24019,22 @@ <b> <a>4</a> <b>5</b> - <v>104</v> + <v>103</v> </b> <b> <a>19</a> <b>20</b> - <v>104</v> + <v>103</v> </b> <b> <a>26</a> <b>27</b> - <v>104</v> + <v>103</v> </b> <b> <a>30</a> <b>31</b> - <v>104</v> + <v>103</v> </b> </bs> </hist> @@ -24071,22 +24050,22 @@ <b> <a>7</a> <b>8</b> - <v>104</v> + <v>103</v> </b> <b> <a>28</a> <b>29</b> - <v>104</v> + <v>103</v> </b> <b> <a>38</a> <b>39</b> - <v>104</v> + <v>103</v> </b> <b> <a>41</a> <b>42</b> - <v>104</v> + <v>103</v> </b> </bs> </hist> @@ -24102,7 +24081,7 @@ <b> <a>1</a> <b>2</b> - <v>11889</v> + <v>11801</v> </b> </bs> </hist> @@ -24118,7 +24097,7 @@ <b> <a>1</a> <b>2</b> - <v>11889</v> + <v>11801</v> </b> </bs> </hist> @@ -24128,15 +24107,15 @@ </relation> <relation> <name>routinetypes</name> - <cardinality>545338</cardinality> + <cardinality>538161</cardinality> <columnsizes> <e> <k>id</k> - <v>545338</v> + <v>538161</v> </e> <e> <k>return_type</k> - <v>284819</v> + <v>280406</v> </e> </columnsizes> <dependencies> @@ -24150,7 +24129,7 @@ <b> <a>1</a> <b>2</b> - <v>545338</v> + <v>538161</v> </b> </bs> </hist> @@ -24166,17 +24145,17 @@ <b> <a>1</a> <b>2</b> - <v>248175</v> + <v>244220</v> </b> <b> <a>2</a> <b>3</b> - <v>21276</v> + <v>20946</v> </b> <b> <a>3</a> - <b>3594</b> - <v>15368</v> + <b>3595</b> + <v>15239</v> </b> </bs> </hist> @@ -24186,19 +24165,19 @@ </relation> <relation> <name>routinetypeargs</name> - <cardinality>982110</cardinality> + <cardinality>982278</cardinality> <columnsizes> <e> <k>routine</k> - <v>423034</v> + <v>423042</v> </e> <e> <k>index</k> - <v>7920</v> + <v>7929</v> </e> <e> <k>type_id</k> - <v>226425</v> + <v>226679</v> </e> </columnsizes> <dependencies> @@ -24212,27 +24191,27 @@ <b> <a>1</a> <b>2</b> - <v>152348</v> + <v>152519</v> </b> <b> <a>2</a> <b>3</b> - <v>134178</v> + <v>133862</v> </b> <b> <a>3</a> <b>4</b> - <v>63361</v> + <v>63432</v> </b> <b> <a>4</a> <b>5</b> - <v>45657</v> + <v>45709</v> </b> <b> <a>5</a> <b>18</b> - <v>27487</v> + <v>27518</v> </b> </bs> </hist> @@ -24248,27 +24227,27 @@ <b> <a>1</a> <b>2</b> - <v>182165</v> + <v>182369</v> </b> <b> <a>2</a> <b>3</b> - <v>133712</v> + <v>133395</v> </b> <b> <a>3</a> <b>4</b> - <v>58703</v> + <v>58768</v> </b> <b> <a>4</a> <b>5</b> - <v>33544</v> + <v>33582</v> </b> <b> <a>5</a> <b>11</b> - <v>14908</v> + <v>14925</v> </b> </bs> </hist> @@ -24284,67 +24263,67 @@ <b> <a>2</a> <b>3</b> - <v>931</v> + <v>932</v> </b> <b> <a>4</a> <b>5</b> - <v>465</v> + <v>466</v> </b> <b> <a>6</a> <b>7</b> - <v>465</v> + <v>466</v> </b> <b> <a>8</a> <b>9</b> - <v>931</v> + <v>932</v> </b> <b> <a>9</a> <b>10</b> - <v>465</v> + <v>466</v> </b> <b> <a>10</a> <b>11</b> - <v>1397</v> + <v>1399</v> </b> <b> <a>13</a> <b>14</b> - <v>465</v> + <v>466</v> </b> <b> <a>28</a> <b>29</b> - <v>465</v> + <v>466</v> </b> <b> <a>59</a> <b>60</b> - <v>465</v> + <v>466</v> </b> <b> <a>157</a> <b>158</b> - <v>465</v> + <v>466</v> </b> <b> <a>293</a> <b>294</b> - <v>465</v> + <v>466</v> </b> <b> - <a>581</a> - <b>582</b> - <v>465</v> + <a>580</a> + <b>581</b> + <v>466</v> </b> <b> - <a>908</a> - <b>909</b> - <v>465</v> + <a>907</a> + <b>908</b> + <v>466</v> </b> </bs> </hist> @@ -24360,57 +24339,57 @@ <b> <a>1</a> <b>2</b> - <v>931</v> + <v>932</v> </b> <b> <a>3</a> <b>4</b> - <v>931</v> + <v>932</v> </b> <b> <a>4</a> <b>5</b> - <v>1397</v> + <v>1399</v> </b> <b> <a>5</a> <b>6</b> - <v>931</v> + <v>932</v> </b> <b> <a>6</a> <b>7</b> - <v>931</v> + <v>932</v> </b> <b> <a>10</a> <b>11</b> - <v>465</v> + <v>466</v> </b> <b> <a>14</a> <b>15</b> - <v>465</v> + <v>466</v> </b> <b> <a>47</a> <b>48</b> - <v>465</v> + <v>466</v> </b> <b> <a>90</a> <b>91</b> - <v>465</v> + <v>466</v> </b> <b> <a>176</a> <b>177</b> - <v>465</v> + <v>466</v> </b> <b> <a>347</a> <b>348</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -24426,27 +24405,27 @@ <b> <a>1</a> <b>2</b> - <v>146291</v> + <v>146455</v> </b> <b> <a>2</a> <b>3</b> - <v>30749</v> + <v>30783</v> </b> <b> <a>3</a> <b>5</b> - <v>16772</v> + <v>16791</v> </b> <b> <a>5</a> <b>12</b> - <v>18169</v> + <v>18190</v> </b> <b> <a>12</a> - <b>111</b> - <v>14442</v> + <b>110</b> + <v>14458</v> </b> </bs> </hist> @@ -24462,22 +24441,22 @@ <b> <a>1</a> <b>2</b> - <v>172381</v> + <v>172575</v> </b> <b> <a>2</a> <b>3</b> - <v>30749</v> + <v>30783</v> </b> <b> <a>3</a> <b>6</b> - <v>18635</v> + <v>18656</v> </b> <b> <a>6</a> <b>14</b> - <v>4658</v> + <v>4664</v> </b> </bs> </hist> @@ -24487,19 +24466,19 @@ </relation> <relation> <name>ptrtomembers</name> - <cardinality>37737</cardinality> + <cardinality>37779</cardinality> <columnsizes> <e> <k>id</k> - <v>37737</v> + <v>37779</v> </e> <e> <k>type_id</k> - <v>37737</v> + <v>37779</v> </e> <e> <k>class_id</k> - <v>15374</v> + <v>15391</v> </e> </columnsizes> <dependencies> @@ -24513,7 +24492,7 @@ <b> <a>1</a> <b>2</b> - <v>37737</v> + <v>37779</v> </b> </bs> </hist> @@ -24529,7 +24508,7 @@ <b> <a>1</a> <b>2</b> - <v>37737</v> + <v>37779</v> </b> </bs> </hist> @@ -24545,7 +24524,7 @@ <b> <a>1</a> <b>2</b> - <v>37737</v> + <v>37779</v> </b> </bs> </hist> @@ -24561,7 +24540,7 @@ <b> <a>1</a> <b>2</b> - <v>37737</v> + <v>37779</v> </b> </bs> </hist> @@ -24577,17 +24556,17 @@ <b> <a>1</a> <b>2</b> - <v>13511</v> + <v>13526</v> </b> <b> <a>8</a> <b>9</b> - <v>1397</v> + <v>1399</v> </b> <b> <a>28</a> <b>29</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -24603,17 +24582,17 @@ <b> <a>1</a> <b>2</b> - <v>13511</v> + <v>13526</v> </b> <b> <a>8</a> <b>9</b> - <v>1397</v> + <v>1399</v> </b> <b> <a>28</a> <b>29</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -24623,15 +24602,15 @@ </relation> <relation> <name>specifiers</name> - <cardinality>24692</cardinality> + <cardinality>24720</cardinality> <columnsizes> <e> <k>id</k> - <v>24692</v> + <v>24720</v> </e> <e> <k>str</k> - <v>24692</v> + <v>24720</v> </e> </columnsizes> <dependencies> @@ -24645,7 +24624,7 @@ <b> <a>1</a> <b>2</b> - <v>24692</v> + <v>24720</v> </b> </bs> </hist> @@ -24661,7 +24640,7 @@ <b> <a>1</a> <b>2</b> - <v>24692</v> + <v>24720</v> </b> </bs> </hist> @@ -24671,15 +24650,15 @@ </relation> <relation> <name>typespecifiers</name> - <cardinality>1291000</cardinality> + <cardinality>1291048</cardinality> <columnsizes> <e> <k>type_id</k> - <v>1272830</v> + <v>1272857</v> </e> <e> <k>spec_id</k> - <v>3727</v> + <v>3731</v> </e> </columnsizes> <dependencies> @@ -24693,12 +24672,12 @@ <b> <a>1</a> <b>2</b> - <v>1254660</v> + <v>1254667</v> </b> <b> <a>2</a> <b>3</b> - <v>18169</v> + <v>18190</v> </b> </bs> </hist> @@ -24714,42 +24693,42 @@ <b> <a>8</a> <b>9</b> - <v>465</v> + <v>466</v> </b> <b> <a>36</a> <b>37</b> - <v>465</v> + <v>466</v> </b> <b> <a>51</a> <b>52</b> - <v>465</v> + <v>466</v> </b> <b> <a>86</a> <b>87</b> - <v>465</v> + <v>466</v> </b> <b> <a>105</a> <b>106</b> - <v>465</v> + <v>466</v> </b> <b> <a>219</a> <b>220</b> - <v>465</v> + <v>466</v> </b> <b> <a>221</a> <b>222</b> - <v>465</v> + <v>466</v> </b> <b> - <a>2045</a> - <b>2046</b> - <v>465</v> + <a>2042</a> + <b>2043</b> + <v>466</v> </b> </bs> </hist> @@ -24759,15 +24738,15 @@ </relation> <relation> <name>funspecifiers</name> - <cardinality>12739754</cardinality> + <cardinality>12607036</cardinality> <columnsizes> <e> <k>func_id</k> - <v>3895228</v> + <v>3854601</v> </e> <e> <k>spec_id</k> - <v>703</v> + <v>695</v> </e> </columnsizes> <dependencies> @@ -24781,27 +24760,27 @@ <b> <a>1</a> <b>2</b> - <v>314078</v> + <v>310746</v> </b> <b> <a>2</a> <b>3</b> - <v>545865</v> + <v>540214</v> </b> <b> <a>3</a> <b>4</b> - <v>1145748</v> + <v>1133732</v> </b> <b> <a>4</a> <b>5</b> - <v>1641079</v> + <v>1624017</v> </b> <b> <a>5</a> <b>8</b> - <v>248456</v> + <v>245890</v> </b> </bs> </hist> @@ -24817,97 +24796,97 @@ <b> <a>13</a> <b>14</b> - <v>70</v> + <v>69</v> </b> <b> <a>98</a> <b>99</b> - <v>35</v> + <v>34</v> </b> <b> <a>202</a> <b>203</b> - <v>35</v> + <v>34</v> </b> <b> <a>296</a> <b>297</b> - <v>35</v> + <v>34</v> </b> <b> <a>304</a> <b>305</b> - <v>35</v> + <v>34</v> </b> <b> <a>572</a> <b>573</b> - <v>35</v> + <v>34</v> </b> <b> <a>709</a> <b>710</b> - <v>35</v> + <v>34</v> </b> <b> <a>1599</a> <b>1600</b> - <v>35</v> + <v>34</v> </b> <b> <a>1646</a> <b>1647</b> - <v>35</v> + <v>34</v> </b> <b> <a>3782</a> <b>3783</b> - <v>35</v> + <v>34</v> </b> <b> <a>3923</a> <b>3924</b> - <v>35</v> + <v>34</v> </b> <b> <a>5095</a> <b>5096</b> - <v>35</v> + <v>34</v> </b> <b> - <a>6822</a> - <b>6823</b> - <v>35</v> + <a>6823</a> + <b>6824</b> + <v>34</v> </b> <b> - <a>9687</a> - <b>9688</b> - <v>35</v> + <a>9692</a> + <b>9693</b> + <v>34</v> </b> <b> - <a>12226</a> - <b>12227</b> - <v>35</v> + <a>12228</a> + <b>12229</b> + <v>34</v> </b> <b> - <a>50649</a> - <b>50650</b> - <v>35</v> + <a>50664</a> + <b>50665</b> + <v>34</v> </b> <b> - <a>77765</a> - <b>77766</b> - <v>35</v> + <a>77775</a> + <b>77776</b> + <v>34</v> </b> <b> - <a>89259</a> - <b>89260</b> - <v>35</v> + <a>89276</a> + <b>89277</b> + <v>34</v> </b> <b> - <a>97602</a> - <b>97603</b> - <v>35</v> + <a>97622</a> + <b>97623</b> + <v>34</v> </b> </bs> </hist> @@ -24917,15 +24896,15 @@ </relation> <relation> <name>varspecifiers</name> - <cardinality>2241430</cardinality> + <cardinality>2243942</cardinality> <columnsizes> <e> <k>var_id</k> - <v>1222513</v> + <v>1223883</v> </e> <e> <k>spec_id</k> - <v>3727</v> + <v>3731</v> </e> </columnsizes> <dependencies> @@ -24939,22 +24918,22 @@ <b> <a>1</a> <b>2</b> - <v>728662</v> + <v>729479</v> </b> <b> <a>2</a> <b>3</b> - <v>202199</v> + <v>202425</v> </b> <b> <a>3</a> <b>4</b> - <v>58237</v> + <v>58302</v> </b> <b> <a>4</a> <b>5</b> - <v>233414</v> + <v>233675</v> </b> </bs> </hist> @@ -24970,42 +24949,42 @@ <b> <a>112</a> <b>113</b> - <v>465</v> + <v>466</v> </b> <b> <a>315</a> <b>316</b> - <v>465</v> + <v>466</v> </b> <b> <a>416</a> <b>417</b> - <v>465</v> + <v>466</v> </b> <b> <a>514</a> <b>515</b> - <v>465</v> + <v>466</v> </b> <b> <a>646</a> <b>647</b> - <v>465</v> + <v>466</v> </b> <b> <a>686</a> <b>687</b> - <v>465</v> + <v>466</v> </b> <b> <a>700</a> <b>701</b> - <v>465</v> + <v>466</v> </b> <b> <a>1422</a> <b>1423</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -25015,27 +24994,27 @@ </relation> <relation> <name>attributes</name> - <cardinality>735689</cardinality> + <cardinality>729824</cardinality> <columnsizes> <e> <k>id</k> - <v>735689</v> + <v>729824</v> </e> <e> <k>kind</k> - <v>312</v> + <v>310</v> </e> <e> <k>name</k> - <v>1668</v> + <v>1656</v> </e> <e> <k>name_space</k> - <v>208</v> + <v>207</v> </e> <e> <k>location</k> - <v>483193</v> + <v>479613</v> </e> </columnsizes> <dependencies> @@ -25049,7 +25028,7 @@ <b> <a>1</a> <b>2</b> - <v>735689</v> + <v>729824</v> </b> </bs> </hist> @@ -25065,7 +25044,7 @@ <b> <a>1</a> <b>2</b> - <v>735689</v> + <v>729824</v> </b> </bs> </hist> @@ -25081,7 +25060,7 @@ <b> <a>1</a> <b>2</b> - <v>735689</v> + <v>729824</v> </b> </bs> </hist> @@ -25097,7 +25076,7 @@ <b> <a>1</a> <b>2</b> - <v>735689</v> + <v>729824</v> </b> </bs> </hist> @@ -25113,17 +25092,17 @@ <b> <a>5</a> <b>6</b> - <v>104</v> + <v>103</v> </b> <b> <a>2332</a> <b>2333</b> - <v>104</v> + <v>103</v> </b> <b> - <a>4717</a> - <b>4718</b> - <v>104</v> + <a>4713</a> + <b>4714</b> + <v>103</v> </b> </bs> </hist> @@ -25139,17 +25118,17 @@ <b> <a>1</a> <b>2</b> - <v>104</v> + <v>103</v> </b> <b> <a>6</a> <b>7</b> - <v>104</v> + <v>103</v> </b> <b> <a>11</a> <b>12</b> - <v>104</v> + <v>103</v> </b> </bs> </hist> @@ -25165,12 +25144,12 @@ <b> <a>1</a> <b>2</b> - <v>208</v> + <v>207</v> </b> <b> <a>2</a> <b>3</b> - <v>104</v> + <v>103</v> </b> </bs> </hist> @@ -25186,17 +25165,17 @@ <b> <a>2</a> <b>3</b> - <v>104</v> + <v>103</v> </b> <b> <a>2057</a> <b>2058</b> - <v>104</v> + <v>103</v> </b> <b> <a>2574</a> <b>2575</b> - <v>104</v> + <v>103</v> </b> </bs> </hist> @@ -25212,72 +25191,72 @@ <b> <a>1</a> <b>2</b> - <v>208</v> + <v>310</v> </b> <b> <a>2</a> <b>3</b> - <v>104</v> + <v>103</v> </b> <b> <a>4</a> <b>5</b> - <v>104</v> + <v>103</v> </b> <b> <a>5</a> <b>6</b> - <v>208</v> + <v>103</v> </b> <b> <a>11</a> <b>12</b> - <v>104</v> + <v>103</v> </b> <b> <a>14</a> <b>15</b> - <v>104</v> + <v>103</v> </b> <b> <a>16</a> <b>17</b> - <v>104</v> + <v>103</v> </b> <b> <a>18</a> <b>19</b> - <v>104</v> + <v>103</v> </b> <b> <a>24</a> <b>25</b> - <v>104</v> + <v>103</v> </b> <b> <a>86</a> <b>87</b> - <v>104</v> + <v>103</v> </b> <b> <a>115</a> <b>116</b> - <v>104</v> + <v>103</v> </b> <b> <a>1048</a> <b>1049</b> - <v>104</v> + <v>103</v> </b> <b> <a>1760</a> <b>1761</b> - <v>104</v> + <v>103</v> </b> <b> <a>3944</a> <b>3945</b> - <v>104</v> + <v>103</v> </b> </bs> </hist> @@ -25293,12 +25272,12 @@ <b> <a>1</a> <b>2</b> - <v>1460</v> + <v>1449</v> </b> <b> <a>2</a> <b>3</b> - <v>208</v> + <v>207</v> </b> </bs> </hist> @@ -25314,7 +25293,7 @@ <b> <a>1</a> <b>2</b> - <v>1668</v> + <v>1656</v> </b> </bs> </hist> @@ -25330,67 +25309,67 @@ <b> <a>1</a> <b>2</b> - <v>312</v> + <v>310</v> </b> <b> <a>2</a> <b>3</b> - <v>208</v> + <v>207</v> </b> <b> <a>4</a> <b>5</b> - <v>104</v> + <v>103</v> </b> <b> <a>6</a> <b>7</b> - <v>104</v> + <v>103</v> </b> <b> <a>8</a> <b>9</b> - <v>104</v> + <v>103</v> </b> <b> <a>9</a> <b>10</b> - <v>104</v> + <v>103</v> </b> <b> <a>14</a> <b>15</b> - <v>104</v> + <v>103</v> </b> <b> <a>18</a> <b>19</b> - <v>104</v> + <v>103</v> </b> <b> <a>59</a> <b>60</b> - <v>104</v> + <v>103</v> </b> <b> <a>72</a> <b>73</b> - <v>104</v> + <v>103</v> </b> <b> <a>333</a> <b>334</b> - <v>104</v> + <v>103</v> </b> <b> <a>1756</a> <b>1757</b> - <v>104</v> + <v>103</v> </b> <b> <a>2388</a> <b>2389</b> - <v>104</v> + <v>103</v> </b> </bs> </hist> @@ -25404,14 +25383,14 @@ <budget>12</budget> <bs> <b> - <a>23</a> - <b>24</b> - <v>104</v> + <a>19</a> + <b>20</b> + <v>103</v> </b> <b> <a>7031</a> <b>7032</b> - <v>104</v> + <v>103</v> </b> </bs> </hist> @@ -25427,12 +25406,12 @@ <b> <a>1</a> <b>2</b> - <v>104</v> + <v>103</v> </b> <b> <a>3</a> <b>4</b> - <v>104</v> + <v>103</v> </b> </bs> </hist> @@ -25448,12 +25427,12 @@ <b> <a>2</a> <b>3</b> - <v>104</v> + <v>103</v> </b> <b> <a>14</a> <b>15</b> - <v>104</v> + <v>103</v> </b> </bs> </hist> @@ -25469,12 +25448,12 @@ <b> <a>9</a> <b>10</b> - <v>104</v> + <v>103</v> </b> <b> <a>4624</a> <b>4625</b> - <v>104</v> + <v>103</v> </b> </bs> </hist> @@ -25490,17 +25469,17 @@ <b> <a>1</a> <b>2</b> - <v>425623</v> + <v>422573</v> </b> <b> <a>2</a> <b>3</b> - <v>36607</v> + <v>36335</v> </b> <b> <a>3</a> <b>201</b> - <v>20963</v> + <v>20704</v> </b> </bs> </hist> @@ -25516,7 +25495,7 @@ <b> <a>1</a> <b>2</b> - <v>483193</v> + <v>479613</v> </b> </bs> </hist> @@ -25532,12 +25511,12 @@ <b> <a>1</a> <b>2</b> - <v>478917</v> + <v>475369</v> </b> <b> <a>2</a> <b>3</b> - <v>4276</v> + <v>4244</v> </b> </bs> </hist> @@ -25553,7 +25532,7 @@ <b> <a>1</a> <b>2</b> - <v>483193</v> + <v>479613</v> </b> </bs> </hist> @@ -25563,27 +25542,27 @@ </relation> <relation> <name>attribute_args</name> - <cardinality>409523</cardinality> + <cardinality>409982</cardinality> <columnsizes> <e> <k>id</k> - <v>409523</v> + <v>409982</v> </e> <e> <k>kind</k> - <v>1397</v> + <v>1399</v> </e> <e> <k>attribute</k> - <v>297708</v> + <v>298041</v> </e> <e> <k>index</k> - <v>1397</v> + <v>1399</v> </e> <e> <k>location</k> - <v>327059</v> + <v>327426</v> </e> </columnsizes> <dependencies> @@ -25597,7 +25576,7 @@ <b> <a>1</a> <b>2</b> - <v>409523</v> + <v>409982</v> </b> </bs> </hist> @@ -25613,7 +25592,7 @@ <b> <a>1</a> <b>2</b> - <v>409523</v> + <v>409982</v> </b> </bs> </hist> @@ -25629,7 +25608,7 @@ <b> <a>1</a> <b>2</b> - <v>409523</v> + <v>409982</v> </b> </bs> </hist> @@ -25645,7 +25624,7 @@ <b> <a>1</a> <b>2</b> - <v>409523</v> + <v>409982</v> </b> </bs> </hist> @@ -25661,17 +25640,17 @@ <b> <a>1</a> <b>2</b> - <v>465</v> + <v>466</v> </b> <b> <a>84</a> <b>85</b> - <v>465</v> + <v>466</v> </b> <b> <a>794</a> <b>795</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -25687,17 +25666,17 @@ <b> <a>1</a> <b>2</b> - <v>465</v> + <v>466</v> </b> <b> <a>84</a> <b>85</b> - <v>465</v> + <v>466</v> </b> <b> <a>606</a> <b>607</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -25713,12 +25692,12 @@ <b> <a>1</a> <b>2</b> - <v>931</v> + <v>932</v> </b> <b> <a>3</a> <b>4</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -25734,17 +25713,17 @@ <b> <a>1</a> <b>2</b> - <v>465</v> + <v>466</v> </b> <b> <a>54</a> <b>55</b> - <v>465</v> + <v>466</v> </b> <b> <a>674</a> <b>675</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -25760,17 +25739,17 @@ <b> <a>1</a> <b>2</b> - <v>215710</v> + <v>215952</v> </b> <b> <a>2</a> <b>3</b> - <v>52180</v> + <v>52238</v> </b> <b> <a>3</a> <b>4</b> - <v>29817</v> + <v>29850</v> </b> </bs> </hist> @@ -25786,12 +25765,12 @@ <b> <a>1</a> <b>2</b> - <v>273481</v> + <v>273788</v> </b> <b> <a>2</a> <b>3</b> - <v>24226</v> + <v>24253</v> </b> </bs> </hist> @@ -25807,17 +25786,17 @@ <b> <a>1</a> <b>2</b> - <v>215710</v> + <v>215952</v> </b> <b> <a>2</a> <b>3</b> - <v>52180</v> + <v>52238</v> </b> <b> <a>3</a> <b>4</b> - <v>29817</v> + <v>29850</v> </b> </bs> </hist> @@ -25833,17 +25812,17 @@ <b> <a>1</a> <b>2</b> - <v>215710</v> + <v>215952</v> </b> <b> <a>2</a> <b>3</b> - <v>52180</v> + <v>52238</v> </b> <b> <a>3</a> <b>4</b> - <v>29817</v> + <v>29850</v> </b> </bs> </hist> @@ -25859,17 +25838,17 @@ <b> <a>64</a> <b>65</b> - <v>465</v> + <v>466</v> </b> <b> <a>176</a> <b>177</b> - <v>465</v> + <v>466</v> </b> <b> <a>639</a> <b>640</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -25885,12 +25864,12 @@ <b> <a>1</a> <b>2</b> - <v>931</v> + <v>932</v> </b> <b> <a>3</a> <b>4</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -25906,17 +25885,17 @@ <b> <a>64</a> <b>65</b> - <v>465</v> + <v>466</v> </b> <b> <a>176</a> <b>177</b> - <v>465</v> + <v>466</v> </b> <b> <a>639</a> <b>640</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -25932,17 +25911,17 @@ <b> <a>34</a> <b>35</b> - <v>465</v> + <v>466</v> </b> <b> <a>140</a> <b>141</b> - <v>465</v> + <v>466</v> </b> <b> <a>528</a> <b>529</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -25958,22 +25937,22 @@ <b> <a>1</a> <b>2</b> - <v>278606</v> + <v>278918</v> </b> <b> <a>2</a> <b>3</b> - <v>23294</v> + <v>23320</v> </b> <b> <a>3</a> <b>9</b> - <v>24692</v> + <v>24720</v> </b> <b> <a>17</a> <b>18</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -25989,12 +25968,12 @@ <b> <a>1</a> <b>2</b> - <v>314480</v> + <v>314832</v> </b> <b> <a>2</a> <b>3</b> - <v>12579</v> + <v>12593</v> </b> </bs> </hist> @@ -26010,22 +25989,22 @@ <b> <a>1</a> <b>2</b> - <v>278606</v> + <v>278918</v> </b> <b> <a>2</a> <b>3</b> - <v>23294</v> + <v>23320</v> </b> <b> <a>3</a> <b>9</b> - <v>24692</v> + <v>24720</v> </b> <b> <a>17</a> <b>18</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -26041,7 +26020,7 @@ <b> <a>1</a> <b>2</b> - <v>327059</v> + <v>327426</v> </b> </bs> </hist> @@ -26051,15 +26030,15 @@ </relation> <relation> <name>attribute_arg_value</name> - <cardinality>39135</cardinality> + <cardinality>39179</cardinality> <columnsizes> <e> <k>arg</k> - <v>39135</v> + <v>39179</v> </e> <e> <k>value</k> - <v>15840</v> + <v>15858</v> </e> </columnsizes> <dependencies> @@ -26073,7 +26052,7 @@ <b> <a>1</a> <b>2</b> - <v>39135</v> + <v>39179</v> </b> </bs> </hist> @@ -26089,12 +26068,12 @@ <b> <a>1</a> <b>2</b> - <v>14442</v> + <v>14458</v> </b> <b> <a>2</a> <b>34</b> - <v>1397</v> + <v>1399</v> </b> </bs> </hist> @@ -26104,15 +26083,15 @@ </relation> <relation> <name>attribute_arg_type</name> - <cardinality>465</cardinality> + <cardinality>466</cardinality> <columnsizes> <e> <k>arg</k> - <v>465</v> + <v>466</v> </e> <e> <k>type_id</k> - <v>465</v> + <v>466</v> </e> </columnsizes> <dependencies> @@ -26126,7 +26105,7 @@ <b> <a>1</a> <b>2</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -26142,7 +26121,7 @@ <b> <a>1</a> <b>2</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -26152,15 +26131,15 @@ </relation> <relation> <name>attribute_arg_constant</name> - <cardinality>369922</cardinality> + <cardinality>370336</cardinality> <columnsizes> <e> <k>arg</k> - <v>369922</v> + <v>370336</v> </e> <e> <k>constant</k> - <v>369922</v> + <v>370336</v> </e> </columnsizes> <dependencies> @@ -26174,7 +26153,7 @@ <b> <a>1</a> <b>2</b> - <v>369922</v> + <v>370336</v> </b> </bs> </hist> @@ -26190,7 +26169,7 @@ <b> <a>1</a> <b>2</b> - <v>369922</v> + <v>370336</v> </b> </bs> </hist> @@ -26301,15 +26280,15 @@ </relation> <relation> <name>typeattributes</name> - <cardinality>84999</cardinality> + <cardinality>84369</cardinality> <columnsizes> <e> <k>type_id</k> - <v>62159</v> + <v>61698</v> </e> <e> <k>spec_id</k> - <v>84999</v> + <v>84369</v> </e> </columnsizes> <dependencies> @@ -26323,17 +26302,17 @@ <b> <a>1</a> <b>2</b> - <v>56214</v> + <v>55797</v> </b> <b> <a>2</a> <b>4</b> - <v>4276</v> + <v>4244</v> </b> <b> <a>12</a> <b>13</b> - <v>1668</v> + <v>1656</v> </b> </bs> </hist> @@ -26349,7 +26328,7 @@ <b> <a>1</a> <b>2</b> - <v>84999</v> + <v>84369</v> </b> </bs> </hist> @@ -26359,15 +26338,15 @@ </relation> <relation> <name>funcattributes</name> - <cardinality>650858</cardinality> + <cardinality>651587</cardinality> <columnsizes> <e> <k>func_id</k> - <v>442602</v> + <v>443098</v> </e> <e> <k>spec_id</k> - <v>650858</v> + <v>651587</v> </e> </columnsizes> <dependencies> @@ -26381,22 +26360,22 @@ <b> <a>1</a> <b>2</b> - <v>334048</v> + <v>334422</v> </b> <b> <a>2</a> <b>3</b> - <v>65225</v> + <v>65298</v> </b> <b> <a>3</a> <b>6</b> - <v>34942</v> + <v>34981</v> </b> <b> <a>6</a> <b>9</b> - <v>8386</v> + <v>8395</v> </b> </bs> </hist> @@ -26412,7 +26391,7 @@ <b> <a>1</a> <b>2</b> - <v>650858</v> + <v>651587</v> </b> </bs> </hist> @@ -26480,15 +26459,15 @@ </relation> <relation> <name>stmtattributes</name> - <cardinality>977</cardinality> + <cardinality>973</cardinality> <columnsizes> <e> <k>stmt_id</k> - <v>977</v> + <v>973</v> </e> <e> <k>spec_id</k> - <v>977</v> + <v>973</v> </e> </columnsizes> <dependencies> @@ -26502,7 +26481,7 @@ <b> <a>1</a> <b>2</b> - <v>977</v> + <v>973</v> </b> </bs> </hist> @@ -26518,7 +26497,7 @@ <b> <a>1</a> <b>2</b> - <v>977</v> + <v>973</v> </b> </bs> </hist> @@ -26528,15 +26507,15 @@ </relation> <relation> <name>unspecifiedtype</name> - <cardinality>10144906</cardinality> + <cardinality>10144615</cardinality> <columnsizes> <e> <k>type_id</k> - <v>10144906</v> + <v>10144615</v> </e> <e> <k>unspecified_type_id</k> - <v>6818402</v> + <v>6817181</v> </e> </columnsizes> <dependencies> @@ -26550,7 +26529,7 @@ <b> <a>1</a> <b>2</b> - <v>10144906</v> + <v>10144615</v> </b> </bs> </hist> @@ -26566,17 +26545,17 @@ <b> <a>1</a> <b>2</b> - <v>4585358</v> + <v>4584433</v> </b> <b> <a>2</a> <b>3</b> - <v>1995902</v> + <v>1995340</v> </b> <b> <a>3</a> <b>145</b> - <v>237141</v> + <v>237407</v> </b> </bs> </hist> @@ -26586,19 +26565,19 @@ </relation> <relation> <name>member</name> - <cardinality>4997440</cardinality> + <cardinality>4945084</cardinality> <columnsizes> <e> <k>parent</k> - <v>646092</v> + <v>639377</v> </e> <e> <k>index</k> - <v>8791</v> + <v>8698</v> </e> <e> <k>child</k> - <v>4952285</v> + <v>4900409</v> </e> </columnsizes> <dependencies> @@ -26612,42 +26591,42 @@ <b> <a>1</a> <b>3</b> - <v>19271</v> + <v>19067</v> </b> <b> <a>3</a> <b>4</b> - <v>348050</v> + <v>344496</v> </b> <b> <a>4</a> <b>5</b> - <v>38226</v> + <v>37786</v> </b> <b> <a>5</a> <b>7</b> - <v>53032</v> + <v>52504</v> </b> <b> <a>7</a> <b>10</b> - <v>52750</v> + <v>52191</v> </b> <b> <a>10</a> <b>15</b> - <v>50148</v> + <v>49581</v> </b> <b> <a>15</a> <b>24</b> - <v>49445</v> + <v>48955</v> </b> <b> <a>24</a> <b>251</b> - <v>35167</v> + <v>34794</v> </b> </bs> </hist> @@ -26663,42 +26642,42 @@ <b> <a>1</a> <b>3</b> - <v>19271</v> + <v>19067</v> </b> <b> <a>3</a> <b>4</b> - <v>347979</v> + <v>344427</v> </b> <b> <a>4</a> <b>5</b> - <v>38261</v> + <v>37821</v> </b> <b> <a>5</a> <b>7</b> - <v>53137</v> + <v>52608</v> </b> <b> <a>7</a> <b>10</b> - <v>53102</v> + <v>52539</v> </b> <b> <a>10</a> <b>15</b> - <v>49761</v> + <v>49198</v> </b> <b> <a>15</a> <b>24</b> - <v>49515</v> + <v>49024</v> </b> <b> <a>24</a> <b>255</b> - <v>35061</v> + <v>34689</v> </b> </bs> </hist> @@ -26714,62 +26693,62 @@ <b> <a>1</a> <b>2</b> - <v>1406</v> + <v>1391</v> </b> <b> <a>2</a> <b>3</b> - <v>808</v> + <v>800</v> </b> <b> <a>3</a> <b>4</b> - <v>949</v> + <v>939</v> </b> <b> <a>5</a> <b>22</b> - <v>668</v> + <v>661</v> </b> <b> <a>22</a> <b>42</b> - <v>668</v> + <v>661</v> </b> <b> <a>42</a> <b>56</b> - <v>668</v> + <v>661</v> </b> <b> <a>56</a> <b>100</b> - <v>668</v> + <v>661</v> </b> <b> <a>104</a> <b>164</b> - <v>668</v> + <v>661</v> </b> <b> <a>181</a> <b>299</b> - <v>668</v> + <v>661</v> </b> <b> <a>300</a> <b>727</b> - <v>668</v> + <v>661</v> </b> <b> <a>845</a> <b>4002</b> - <v>668</v> + <v>661</v> </b> <b> <a>4606</a> - <b>18041</b> - <v>281</v> + <b>18045</b> + <v>278</v> </b> </bs> </hist> @@ -26785,62 +26764,62 @@ <b> <a>1</a> <b>2</b> - <v>808</v> + <v>800</v> </b> <b> <a>2</a> <b>3</b> - <v>879</v> + <v>869</v> </b> <b> <a>3</a> <b>4</b> - <v>1160</v> + <v>1148</v> </b> <b> <a>4</a> <b>15</b> - <v>668</v> + <v>661</v> </b> <b> <a>16</a> <b>35</b> - <v>738</v> + <v>730</v> </b> <b> <a>36</a> <b>55</b> - <v>668</v> + <v>661</v> </b> <b> <a>57</a> <b>93</b> - <v>738</v> + <v>730</v> </b> <b> <a>97</a> <b>135</b> - <v>668</v> + <v>661</v> </b> <b> <a>140</a> <b>256</b> - <v>668</v> + <v>661</v> </b> <b> <a>268</a> <b>612</b> - <v>668</v> + <v>661</v> </b> <b> <a>619</a> <b>2611</b> - <v>668</v> + <v>661</v> </b> <b> <a>2770</a> - <b>18053</b> - <v>457</v> + <b>18057</b> + <v>452</v> </b> </bs> </hist> @@ -26856,7 +26835,7 @@ <b> <a>1</a> <b>2</b> - <v>4952285</v> + <v>4900409</v> </b> </bs> </hist> @@ -26872,12 +26851,12 @@ <b> <a>1</a> <b>2</b> - <v>4908502</v> + <v>4857090</v> </b> <b> <a>2</a> <b>8</b> - <v>43783</v> + <v>43318</v> </b> </bs> </hist> @@ -26887,15 +26866,15 @@ </relation> <relation> <name>enclosingfunction</name> - <cardinality>118347</cardinality> + <cardinality>117884</cardinality> <columnsizes> <e> <k>child</k> - <v>118347</v> + <v>117884</v> </e> <e> <k>parent</k> - <v>67599</v> + <v>67335</v> </e> </columnsizes> <dependencies> @@ -26909,7 +26888,7 @@ <b> <a>1</a> <b>2</b> - <v>118347</v> + <v>117884</v> </b> </bs> </hist> @@ -26925,22 +26904,22 @@ <b> <a>1</a> <b>2</b> - <v>35726</v> + <v>35587</v> </b> <b> <a>2</a> <b>3</b> - <v>20975</v> + <v>20893</v> </b> <b> <a>3</a> <b>4</b> - <v>5931</v> + <v>5908</v> </b> <b> <a>4</a> <b>45</b> - <v>4965</v> + <v>4946</v> </b> </bs> </hist> @@ -26950,27 +26929,27 @@ </relation> <relation> <name>derivations</name> - <cardinality>395209</cardinality> + <cardinality>391086</cardinality> <columnsizes> <e> <k>derivation</k> - <v>395209</v> + <v>391086</v> </e> <e> <k>sub</k> - <v>374742</v> + <v>370836</v> </e> <e> <k>index</k> - <v>211</v> + <v>208</v> </e> <e> <k>super</k> - <v>204673</v> + <v>202501</v> </e> <e> <k>location</k> - <v>38086</v> + <v>37682</v> </e> </columnsizes> <dependencies> @@ -26984,7 +26963,7 @@ <b> <a>1</a> <b>2</b> - <v>395209</v> + <v>391086</v> </b> </bs> </hist> @@ -27000,7 +26979,7 @@ <b> <a>1</a> <b>2</b> - <v>395209</v> + <v>391086</v> </b> </bs> </hist> @@ -27016,7 +26995,7 @@ <b> <a>1</a> <b>2</b> - <v>395209</v> + <v>391086</v> </b> </bs> </hist> @@ -27032,7 +27011,7 @@ <b> <a>1</a> <b>2</b> - <v>395209</v> + <v>391086</v> </b> </bs> </hist> @@ -27048,12 +27027,12 @@ <b> <a>1</a> <b>2</b> - <v>359620</v> + <v>355874</v> </b> <b> <a>2</a> <b>7</b> - <v>15121</v> + <v>14961</v> </b> </bs> </hist> @@ -27069,12 +27048,12 @@ <b> <a>1</a> <b>2</b> - <v>359620</v> + <v>355874</v> </b> <b> <a>2</a> <b>7</b> - <v>15121</v> + <v>14961</v> </b> </bs> </hist> @@ -27090,12 +27069,12 @@ <b> <a>1</a> <b>2</b> - <v>359620</v> + <v>355874</v> </b> <b> <a>2</a> <b>7</b> - <v>15121</v> + <v>14961</v> </b> </bs> </hist> @@ -27111,12 +27090,12 @@ <b> <a>1</a> <b>2</b> - <v>359620</v> + <v>355874</v> </b> <b> <a>2</a> <b>7</b> - <v>15121</v> + <v>14961</v> </b> </bs> </hist> @@ -27132,22 +27111,22 @@ <b> <a>25</a> <b>26</b> - <v>105</v> + <v>104</v> </b> <b> <a>77</a> <b>78</b> - <v>35</v> + <v>34</v> </b> <b> <a>430</a> <b>431</b> - <v>35</v> + <v>34</v> </b> <b> - <a>10656</a> - <b>10657</b> - <v>35</v> + <a>10658</a> + <b>10659</b> + <v>34</v> </b> </bs> </hist> @@ -27163,22 +27142,22 @@ <b> <a>25</a> <b>26</b> - <v>105</v> + <v>104</v> </b> <b> <a>77</a> <b>78</b> - <v>35</v> + <v>34</v> </b> <b> <a>430</a> <b>431</b> - <v>35</v> + <v>34</v> </b> <b> - <a>10656</a> - <b>10657</b> - <v>35</v> + <a>10658</a> + <b>10659</b> + <v>34</v> </b> </bs> </hist> @@ -27194,27 +27173,27 @@ <b> <a>23</a> <b>24</b> - <v>35</v> + <v>34</v> </b> <b> <a>25</a> <b>26</b> - <v>70</v> + <v>69</v> </b> <b> <a>35</a> <b>36</b> - <v>35</v> + <v>34</v> </b> <b> <a>261</a> <b>262</b> - <v>35</v> + <v>34</v> </b> <b> <a>5465</a> <b>5466</b> - <v>35</v> + <v>34</v> </b> </bs> </hist> @@ -27230,22 +27209,22 @@ <b> <a>1</a> <b>2</b> - <v>105</v> + <v>104</v> </b> <b> <a>9</a> <b>10</b> - <v>35</v> + <v>34</v> </b> <b> <a>66</a> <b>67</b> - <v>35</v> + <v>34</v> </b> <b> <a>1005</a> <b>1006</b> - <v>35</v> + <v>34</v> </b> </bs> </hist> @@ -27261,12 +27240,12 @@ <b> <a>1</a> <b>2</b> - <v>197217</v> + <v>195125</v> </b> <b> <a>2</a> - <b>1518</b> - <v>7455</v> + <b>1519</b> + <v>7376</v> </b> </bs> </hist> @@ -27282,12 +27261,12 @@ <b> <a>1</a> <b>2</b> - <v>197217</v> + <v>195125</v> </b> <b> <a>2</a> - <b>1518</b> - <v>7455</v> + <b>1519</b> + <v>7376</v> </b> </bs> </hist> @@ -27303,12 +27282,12 @@ <b> <a>1</a> <b>2</b> - <v>204216</v> + <v>202049</v> </b> <b> <a>2</a> <b>4</b> - <v>457</v> + <v>452</v> </b> </bs> </hist> @@ -27324,12 +27303,12 @@ <b> <a>1</a> <b>2</b> - <v>200980</v> + <v>198848</v> </b> <b> <a>2</a> <b>108</b> - <v>3692</v> + <v>3653</v> </b> </bs> </hist> @@ -27345,27 +27324,27 @@ <b> <a>1</a> <b>2</b> - <v>28309</v> + <v>28009</v> </b> <b> <a>2</a> <b>5</b> - <v>3235</v> + <v>3201</v> </b> <b> <a>5</a> <b>15</b> - <v>2918</v> + <v>2887</v> </b> <b> <a>15</a> <b>134</b> - <v>2883</v> + <v>2853</v> </b> <b> <a>136</a> <b>476</b> - <v>738</v> + <v>730</v> </b> </bs> </hist> @@ -27381,27 +27360,27 @@ <b> <a>1</a> <b>2</b> - <v>28309</v> + <v>28009</v> </b> <b> <a>2</a> <b>5</b> - <v>3235</v> + <v>3201</v> </b> <b> <a>5</a> <b>15</b> - <v>2918</v> + <v>2887</v> </b> <b> <a>15</a> <b>134</b> - <v>2883</v> + <v>2853</v> </b> <b> <a>136</a> <b>476</b> - <v>738</v> + <v>730</v> </b> </bs> </hist> @@ -27417,7 +27396,7 @@ <b> <a>1</a> <b>2</b> - <v>38086</v> + <v>37682</v> </b> </bs> </hist> @@ -27433,22 +27412,22 @@ <b> <a>1</a> <b>2</b> - <v>30700</v> + <v>30375</v> </b> <b> <a>2</a> <b>5</b> - <v>3376</v> + <v>3340</v> </b> <b> <a>5</a> <b>45</b> - <v>2883</v> + <v>2853</v> </b> <b> <a>54</a> <b>415</b> - <v>1125</v> + <v>1113</v> </b> </bs> </hist> @@ -27458,15 +27437,15 @@ </relation> <relation> <name>derspecifiers</name> - <cardinality>397108</cardinality> + <cardinality>392965</cardinality> <columnsizes> <e> <k>der_id</k> - <v>394822</v> + <v>390703</v> </e> <e> <k>spec_id</k> - <v>140</v> + <v>139</v> </e> </columnsizes> <dependencies> @@ -27480,12 +27459,12 @@ <b> <a>1</a> <b>2</b> - <v>392536</v> + <v>388441</v> </b> <b> <a>2</a> <b>3</b> - <v>2285</v> + <v>2261</v> </b> </bs> </hist> @@ -27501,22 +27480,22 @@ <b> <a>65</a> <b>66</b> - <v>35</v> + <v>34</v> </b> <b> <a>93</a> <b>94</b> - <v>35</v> + <v>34</v> </b> <b> <a>1127</a> <b>1128</b> - <v>35</v> + <v>34</v> </b> <b> - <a>10007</a> - <b>10008</b> - <v>35</v> + <a>10009</a> + <b>10010</b> + <v>34</v> </b> </bs> </hist> @@ -27526,15 +27505,15 @@ </relation> <relation> <name>direct_base_offsets</name> - <cardinality>365985</cardinality> + <cardinality>362172</cardinality> <columnsizes> <e> <k>der_id</k> - <v>365985</v> + <v>362172</v> </e> <e> <k>offset</k> - <v>351</v> + <v>347</v> </e> </columnsizes> <dependencies> @@ -27548,7 +27527,7 @@ <b> <a>1</a> <b>2</b> - <v>365985</v> + <v>362172</v> </b> </bs> </hist> @@ -27564,32 +27543,32 @@ <b> <a>1</a> <b>2</b> - <v>35</v> + <v>34</v> </b> <b> <a>2</a> <b>3</b> - <v>105</v> + <v>104</v> </b> <b> <a>3</a> <b>4</b> - <v>70</v> + <v>69</v> </b> <b> <a>4</a> <b>5</b> - <v>70</v> + <v>69</v> </b> <b> <a>85</a> <b>86</b> - <v>35</v> + <v>34</v> </b> <b> - <a>10301</a> - <b>10302</b> - <v>35</v> + <a>10303</a> + <b>10304</b> + <v>34</v> </b> </bs> </hist> @@ -27599,19 +27578,19 @@ </relation> <relation> <name>virtual_base_offsets</name> - <cardinality>6471</cardinality> + <cardinality>6445</cardinality> <columnsizes> <e> <k>sub</k> - <v>3572</v> + <v>3558</v> </e> <e> <k>super</k> - <v>494</v> + <v>492</v> </e> <e> <k>offset</k> - <v>247</v> + <v>246</v> </e> </columnsizes> <dependencies> @@ -27625,17 +27604,17 @@ <b> <a>1</a> <b>2</b> - <v>2808</v> + <v>2797</v> </b> <b> <a>2</a> <b>4</b> - <v>314</v> + <v>313</v> </b> <b> <a>4</a> <b>7</b> - <v>258</v> + <v>257</v> </b> <b> <a>7</a> @@ -27656,17 +27635,17 @@ <b> <a>1</a> <b>2</b> - <v>3010</v> + <v>2999</v> </b> <b> <a>2</a> <b>4</b> - <v>303</v> + <v>302</v> </b> <b> <a>4</a> <b>8</b> - <v>258</v> + <v>257</v> </b> </bs> </hist> @@ -27692,7 +27671,7 @@ <b> <a>3</a> <b>4</b> - <v>56</v> + <v>55</v> </b> <b> <a>4</a> @@ -27743,7 +27722,7 @@ <b> <a>1</a> <b>2</b> - <v>280</v> + <v>279</v> </b> <b> <a>2</a> @@ -27890,23 +27869,23 @@ </relation> <relation> <name>frienddecls</name> - <cardinality>713754</cardinality> + <cardinality>706182</cardinality> <columnsizes> <e> <k>id</k> - <v>713754</v> + <v>706182</v> </e> <e> <k>type_id</k> - <v>42306</v> + <v>41857</v> </e> <e> <k>decl_id</k> - <v>70053</v> + <v>69309</v> </e> <e> <k>location</k> - <v>6330</v> + <v>6262</v> </e> </columnsizes> <dependencies> @@ -27920,7 +27899,7 @@ <b> <a>1</a> <b>2</b> - <v>713754</v> + <v>706182</v> </b> </bs> </hist> @@ -27936,7 +27915,7 @@ <b> <a>1</a> <b>2</b> - <v>713754</v> + <v>706182</v> </b> </bs> </hist> @@ -27952,7 +27931,7 @@ <b> <a>1</a> <b>2</b> - <v>713754</v> + <v>706182</v> </b> </bs> </hist> @@ -27968,47 +27947,47 @@ <b> <a>1</a> <b>2</b> - <v>6189</v> + <v>6123</v> </b> <b> <a>2</a> <b>3</b> - <v>13187</v> + <v>13047</v> </b> <b> <a>3</a> <b>6</b> - <v>2954</v> + <v>2922</v> </b> <b> <a>6</a> <b>10</b> - <v>3200</v> + <v>3166</v> </b> <b> <a>10</a> <b>17</b> - <v>3270</v> + <v>3235</v> </b> <b> <a>17</a> <b>24</b> - <v>3340</v> + <v>3305</v> </b> <b> <a>25</a> <b>36</b> - <v>3305</v> + <v>3270</v> </b> <b> <a>37</a> <b>55</b> - <v>3235</v> + <v>3201</v> </b> <b> <a>55</a> <b>103</b> - <v>3622</v> + <v>3583</v> </b> </bs> </hist> @@ -28024,47 +28003,47 @@ <b> <a>1</a> <b>2</b> - <v>6189</v> + <v>6123</v> </b> <b> <a>2</a> <b>3</b> - <v>13187</v> + <v>13047</v> </b> <b> <a>3</a> <b>6</b> - <v>2954</v> + <v>2922</v> </b> <b> <a>6</a> <b>10</b> - <v>3200</v> + <v>3166</v> </b> <b> <a>10</a> <b>17</b> - <v>3270</v> + <v>3235</v> </b> <b> <a>17</a> <b>24</b> - <v>3340</v> + <v>3305</v> </b> <b> <a>25</a> <b>36</b> - <v>3305</v> + <v>3270</v> </b> <b> <a>37</a> <b>55</b> - <v>3235</v> + <v>3201</v> </b> <b> <a>55</a> <b>103</b> - <v>3622</v> + <v>3583</v> </b> </bs> </hist> @@ -28080,12 +28059,12 @@ <b> <a>1</a> <b>2</b> - <v>40864</v> + <v>40430</v> </b> <b> <a>2</a> <b>13</b> - <v>1441</v> + <v>1426</v> </b> </bs> </hist> @@ -28101,37 +28080,37 @@ <b> <a>1</a> <b>2</b> - <v>40407</v> + <v>39978</v> </b> <b> <a>2</a> <b>3</b> - <v>5872</v> + <v>5810</v> </b> <b> <a>3</a> <b>8</b> - <v>6013</v> + <v>5949</v> </b> <b> <a>8</a> <b>15</b> - <v>5415</v> + <v>5358</v> </b> <b> <a>15</a> <b>32</b> - <v>5275</v> + <v>5219</v> </b> <b> <a>32</a> <b>71</b> - <v>5275</v> + <v>5219</v> </b> <b> <a>72</a> <b>160</b> - <v>1793</v> + <v>1774</v> </b> </bs> </hist> @@ -28147,37 +28126,37 @@ <b> <a>1</a> <b>2</b> - <v>40407</v> + <v>39978</v> </b> <b> <a>2</a> <b>3</b> - <v>5872</v> + <v>5810</v> </b> <b> <a>3</a> <b>8</b> - <v>6013</v> + <v>5949</v> </b> <b> <a>8</a> <b>15</b> - <v>5415</v> + <v>5358</v> </b> <b> <a>15</a> <b>32</b> - <v>5275</v> + <v>5219</v> </b> <b> <a>32</a> <b>71</b> - <v>5275</v> + <v>5219</v> </b> <b> <a>72</a> <b>160</b> - <v>1793</v> + <v>1774</v> </b> </bs> </hist> @@ -28193,12 +28172,12 @@ <b> <a>1</a> <b>2</b> - <v>69384</v> + <v>68648</v> </b> <b> <a>2</a> <b>5</b> - <v>668</v> + <v>661</v> </b> </bs> </hist> @@ -28214,12 +28193,12 @@ <b> <a>1</a> <b>2</b> - <v>5943</v> + <v>5880</v> </b> <b> <a>2</a> <b>20106</b> - <v>386</v> + <v>382</v> </b> </bs> </hist> @@ -28235,12 +28214,12 @@ <b> <a>1</a> <b>2</b> - <v>6189</v> + <v>6123</v> </b> <b> <a>2</a> <b>1105</b> - <v>140</v> + <v>139</v> </b> </bs> </hist> @@ -28256,12 +28235,12 @@ <b> <a>1</a> <b>2</b> - <v>5978</v> + <v>5915</v> </b> <b> <a>2</a> <b>1837</b> - <v>351</v> + <v>347</v> </b> </bs> </hist> @@ -28271,19 +28250,19 @@ </relation> <relation> <name>comments</name> - <cardinality>8751514</cardinality> + <cardinality>8686670</cardinality> <columnsizes> <e> <k>id</k> - <v>8751514</v> + <v>8686670</v> </e> <e> <k>contents</k> - <v>3332400</v> + <v>3307709</v> </e> <e> <k>location</k> - <v>8751514</v> + <v>8686670</v> </e> </columnsizes> <dependencies> @@ -28297,7 +28276,7 @@ <b> <a>1</a> <b>2</b> - <v>8751514</v> + <v>8686670</v> </b> </bs> </hist> @@ -28313,7 +28292,7 @@ <b> <a>1</a> <b>2</b> - <v>8751514</v> + <v>8686670</v> </b> </bs> </hist> @@ -28329,17 +28308,17 @@ <b> <a>1</a> <b>2</b> - <v>3048408</v> + <v>3025820</v> </b> <b> <a>2</a> <b>7</b> - <v>250514</v> + <v>248657</v> </b> <b> <a>7</a> <b>32784</b> - <v>33478</v> + <v>33230</v> </b> </bs> </hist> @@ -28355,17 +28334,17 @@ <b> <a>1</a> <b>2</b> - <v>3048408</v> + <v>3025820</v> </b> <b> <a>2</a> <b>7</b> - <v>250514</v> + <v>248657</v> </b> <b> <a>7</a> <b>32784</b> - <v>33478</v> + <v>33230</v> </b> </bs> </hist> @@ -28381,7 +28360,7 @@ <b> <a>1</a> <b>2</b> - <v>8751514</v> + <v>8686670</v> </b> </bs> </hist> @@ -28397,7 +28376,7 @@ <b> <a>1</a> <b>2</b> - <v>8751514</v> + <v>8686670</v> </b> </bs> </hist> @@ -28407,15 +28386,15 @@ </relation> <relation> <name>commentbinding</name> - <cardinality>3084703</cardinality> + <cardinality>3088160</cardinality> <columnsizes> <e> <k>id</k> - <v>2440368</v> + <v>2443103</v> </e> <e> <k>element</k> - <v>3008296</v> + <v>3011668</v> </e> </columnsizes> <dependencies> @@ -28429,12 +28408,12 @@ <b> <a>1</a> <b>2</b> - <v>2363495</v> + <v>2366144</v> </b> <b> <a>2</a> <b>97</b> - <v>76873</v> + <v>76959</v> </b> </bs> </hist> @@ -28450,12 +28429,12 @@ <b> <a>1</a> <b>2</b> - <v>2931889</v> + <v>2935175</v> </b> <b> <a>2</a> <b>3</b> - <v>76407</v> + <v>76492</v> </b> </bs> </hist> @@ -28465,15 +28444,15 @@ </relation> <relation> <name>exprconv</name> - <cardinality>7022968</cardinality> + <cardinality>7033432</cardinality> <columnsizes> <e> <k>converted</k> - <v>7022968</v> + <v>7033432</v> </e> <e> <k>conversion</k> - <v>7022968</v> + <v>7033432</v> </e> </columnsizes> <dependencies> @@ -28487,7 +28466,7 @@ <b> <a>1</a> <b>2</b> - <v>7022968</v> + <v>7033432</v> </b> </bs> </hist> @@ -28503,7 +28482,7 @@ <b> <a>1</a> <b>2</b> - <v>7022968</v> + <v>7033432</v> </b> </bs> </hist> @@ -28513,30 +28492,30 @@ </relation> <relation> <name>compgenerated</name> - <cardinality>9150058</cardinality> + <cardinality>9265823</cardinality> <columnsizes> <e> <k>id</k> - <v>9150058</v> + <v>9265823</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>synthetic_destructor_call</name> - <cardinality>143878</cardinality> + <cardinality>471159</cardinality> <columnsizes> <e> <k>element</k> - <v>111422</v> + <v>286813</v> </e> <e> <k>i</k> - <v>335</v> + <v>381</v> </e> <e> <k>destructor_call</k> - <v>143878</v> + <v>471159</v> </e> </columnsizes> <dependencies> @@ -28550,17 +28529,27 @@ <b> <a>1</a> <b>2</b> - <v>91779</v> + <v>190103</v> </b> <b> <a>2</a> <b>3</b> - <v>12950</v> + <v>50404</v> </b> <b> <a>3</a> - <b>18</b> - <v>6692</v> + <b>4</b> + <v>21503</v> + </b> + <b> + <a>4</a> + <b>7</b> + <v>23238</v> + </b> + <b> + <a>7</a> + <b>20</b> + <v>1563</v> </b> </bs> </hist> @@ -28576,17 +28565,27 @@ <b> <a>1</a> <b>2</b> - <v>91779</v> + <v>189912</v> </b> <b> <a>2</a> <b>3</b> - <v>12950</v> + <v>50537</v> </b> <b> <a>3</a> - <b>18</b> - <v>6692</v> + <b>4</b> + <v>21503</v> + </b> + <b> + <a>4</a> + <b>7</b> + <v>23295</v> + </b> + <b> + <a>7</a> + <b>20</b> + <v>1563</v> </b> </bs> </hist> @@ -28599,15 +28598,10 @@ <hist> <budget>12</budget> <bs> - <b> - <a>1</a> - <b>2</b> - <v>19</v> - </b> <b> <a>2</a> <b>3</b> - <v>59</v> + <v>19</v> </b> <b> <a>3</a> @@ -28617,21 +28611,46 @@ <b> <a>4</a> <b>5</b> - <v>59</v> + <v>19</v> + </b> + <b> + <a>5</a> + <b>6</b> + <v>19</v> </b> <b> <a>6</a> <b>7</b> <v>19</v> </b> + <b> + <a>7</a> + <b>8</b> + <v>19</v> + </b> + <b> + <a>10</a> + <b>11</b> + <v>19</v> + </b> <b> <a>11</a> <b>12</b> <v>19</v> </b> <b> - <a>20</a> - <b>21</b> + <a>16</a> + <b>17</b> + <v>19</v> + </b> + <b> + <a>18</a> + <b>19</b> + <v>19</v> + </b> + <b> + <a>26</a> + <b>27</b> <v>19</v> </b> <b> @@ -28640,28 +28659,43 @@ <v>19</v> </b> <b> - <a>65</a> - <b>66</b> + <a>37</a> + <b>38</b> <v>19</v> </b> <b> - <a>152</a> - <b>153</b> + <a>82</a> + <b>83</b> <v>19</v> </b> <b> - <a>339</a> - <b>340</b> + <a>193</a> + <b>194</b> <v>19</v> </b> <b> - <a>995</a> - <b>996</b> + <a>422</a> + <b>423</b> <v>19</v> </b> <b> - <a>5644</a> - <b>5645</b> + <a>1301</a> + <b>1302</b> + <v>19</v> + </b> + <b> + <a>2429</a> + <b>2430</b> + <v>19</v> + </b> + <b> + <a>5068</a> + <b>5069</b> + <v>19</v> + </b> + <b> + <a>15013</a> + <b>15014</b> <v>19</v> </b> </bs> @@ -28675,15 +28709,10 @@ <hist> <budget>12</budget> <bs> - <b> - <a>1</a> - <b>2</b> - <v>19</v> - </b> <b> <a>2</a> <b>3</b> - <v>59</v> + <v>19</v> </b> <b> <a>3</a> @@ -28693,21 +28722,46 @@ <b> <a>4</a> <b>5</b> - <v>59</v> + <v>19</v> + </b> + <b> + <a>5</a> + <b>6</b> + <v>19</v> </b> <b> <a>6</a> <b>7</b> <v>19</v> </b> + <b> + <a>7</a> + <b>8</b> + <v>19</v> + </b> + <b> + <a>10</a> + <b>11</b> + <v>19</v> + </b> <b> <a>11</a> <b>12</b> <v>19</v> </b> <b> - <a>20</a> - <b>21</b> + <a>16</a> + <b>17</b> + <v>19</v> + </b> + <b> + <a>18</a> + <b>19</b> + <v>19</v> + </b> + <b> + <a>26</a> + <b>27</b> <v>19</v> </b> <b> @@ -28716,28 +28770,43 @@ <v>19</v> </b> <b> - <a>65</a> - <b>66</b> + <a>37</a> + <b>38</b> <v>19</v> </b> <b> - <a>152</a> - <b>153</b> + <a>82</a> + <b>83</b> <v>19</v> </b> <b> - <a>339</a> - <b>340</b> + <a>193</a> + <b>194</b> <v>19</v> </b> <b> - <a>995</a> - <b>996</b> + <a>422</a> + <b>423</b> <v>19</v> </b> <b> - <a>5644</a> - <b>5645</b> + <a>1301</a> + <b>1302</b> + <v>19</v> + </b> + <b> + <a>2429</a> + <b>2430</b> + <v>19</v> + </b> + <b> + <a>5071</a> + <b>5072</b> + <v>19</v> + </b> + <b> + <a>15038</a> + <b>15039</b> <v>19</v> </b> </bs> @@ -28754,7 +28823,7 @@ <b> <a>1</a> <b>2</b> - <v>143878</v> + <v>471159</v> </b> </bs> </hist> @@ -28770,7 +28839,7 @@ <b> <a>1</a> <b>2</b> - <v>143878</v> + <v>471159</v> </b> </bs> </hist> @@ -28780,15 +28849,15 @@ </relation> <relation> <name>namespaces</name> - <cardinality>12113</cardinality> + <cardinality>12126</cardinality> <columnsizes> <e> <k>id</k> - <v>12113</v> + <v>12126</v> </e> <e> <k>name</k> - <v>9783</v> + <v>9794</v> </e> </columnsizes> <dependencies> @@ -28802,7 +28871,7 @@ <b> <a>1</a> <b>2</b> - <v>12113</v> + <v>12126</v> </b> </bs> </hist> @@ -28818,17 +28887,17 @@ <b> <a>1</a> <b>2</b> - <v>8386</v> + <v>8395</v> </b> <b> <a>2</a> <b>3</b> - <v>465</v> + <v>466</v> </b> <b> <a>3</a> <b>4</b> - <v>931</v> + <v>932</v> </b> </bs> </hist> @@ -28838,26 +28907,26 @@ </relation> <relation> <name>namespace_inline</name> - <cardinality>1397</cardinality> + <cardinality>1399</cardinality> <columnsizes> <e> <k>id</k> - <v>1397</v> + <v>1399</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>namespacembrs</name> - <cardinality>2383528</cardinality> + <cardinality>2385733</cardinality> <columnsizes> <e> <k>parentid</k> - <v>10249</v> + <v>10261</v> </e> <e> <k>memberid</k> - <v>2383528</v> + <v>2385733</v> </e> </columnsizes> <dependencies> @@ -28871,52 +28940,52 @@ <b> <a>1</a> <b>2</b> - <v>1863</v> + <v>1865</v> </b> <b> <a>2</a> <b>4</b> - <v>931</v> + <v>932</v> </b> <b> <a>4</a> <b>5</b> - <v>931</v> + <v>932</v> </b> <b> <a>5</a> <b>7</b> - <v>931</v> + <v>932</v> </b> <b> <a>7</a> <b>8</b> - <v>931</v> + <v>932</v> </b> <b> <a>8</a> <b>12</b> - <v>931</v> + <v>932</v> </b> <b> <a>17</a> <b>30</b> - <v>931</v> + <v>932</v> </b> <b> <a>43</a> <b>47</b> - <v>931</v> + <v>932</v> </b> <b> <a>52</a> <b>143</b> - <v>931</v> + <v>932</v> </b> <b> <a>258</a> - <b>4469</b> - <v>931</v> + <b>4468</b> + <v>932</v> </b> </bs> </hist> @@ -28932,7 +29001,7 @@ <b> <a>1</a> <b>2</b> - <v>2383528</v> + <v>2385733</v> </b> </bs> </hist> @@ -28942,19 +29011,19 @@ </relation> <relation> <name>exprparents</name> - <cardinality>14185678</cardinality> + <cardinality>14207341</cardinality> <columnsizes> <e> <k>expr_id</k> - <v>14185678</v> + <v>14207341</v> </e> <e> <k>child_index</k> - <v>14636</v> + <v>14659</v> </e> <e> <k>parent_id</k> - <v>9439823</v> + <v>9454239</v> </e> </columnsizes> <dependencies> @@ -28968,7 +29037,7 @@ <b> <a>1</a> <b>2</b> - <v>14185678</v> + <v>14207341</v> </b> </bs> </hist> @@ -28984,7 +29053,7 @@ <b> <a>1</a> <b>2</b> - <v>14185678</v> + <v>14207341</v> </b> </bs> </hist> @@ -29000,12 +29069,12 @@ <b> <a>1</a> <b>2</b> - <v>2816</v> + <v>2820</v> </b> <b> <a>2</a> <b>3</b> - <v>1110</v> + <v>1111</v> </b> <b> <a>3</a> @@ -29015,22 +29084,22 @@ <b> <a>4</a> <b>5</b> - <v>6557</v> + <v>6567</v> </b> <b> <a>5</a> <b>8</b> - <v>1212</v> + <v>1214</v> </b> <b> <a>8</a> <b>11</b> - <v>1192</v> + <v>1194</v> </b> <b> <a>11</a> <b>53</b> - <v>1110</v> + <v>1111</v> </b> <b> <a>56</a> @@ -29051,12 +29120,12 @@ <b> <a>1</a> <b>2</b> - <v>2816</v> + <v>2820</v> </b> <b> <a>2</a> <b>3</b> - <v>1110</v> + <v>1111</v> </b> <b> <a>3</a> @@ -29066,22 +29135,22 @@ <b> <a>4</a> <b>5</b> - <v>6557</v> + <v>6567</v> </b> <b> <a>5</a> <b>8</b> - <v>1212</v> + <v>1214</v> </b> <b> <a>8</a> <b>11</b> - <v>1192</v> + <v>1194</v> </b> <b> <a>11</a> <b>53</b> - <v>1110</v> + <v>1111</v> </b> <b> <a>56</a> @@ -29102,17 +29171,17 @@ <b> <a>1</a> <b>2</b> - <v>5401426</v> + <v>5409675</v> </b> <b> <a>2</a> <b>3</b> - <v>3701154</v> + <v>3706806</v> </b> <b> <a>3</a> <b>712</b> - <v>337242</v> + <v>337757</v> </b> </bs> </hist> @@ -29128,17 +29197,17 @@ <b> <a>1</a> <b>2</b> - <v>5401426</v> + <v>5409675</v> </b> <b> <a>2</a> <b>3</b> - <v>3701154</v> + <v>3706806</v> </b> <b> <a>3</a> <b>712</b> - <v>337242</v> + <v>337757</v> </b> </bs> </hist> @@ -29148,22 +29217,22 @@ </relation> <relation> <name>expr_isload</name> - <cardinality>5203642</cardinality> + <cardinality>5170780</cardinality> <columnsizes> <e> <k>expr_id</k> - <v>5203642</v> + <v>5170780</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>conversionkinds</name> - <cardinality>4221347</cardinality> + <cardinality>4221331</cardinality> <columnsizes> <e> <k>expr_id</k> - <v>4221347</v> + <v>4221331</v> </e> <e> <k>kind</k> @@ -29181,7 +29250,7 @@ <b> <a>1</a> <b>2</b> - <v>4221347</v> + <v>4221331</v> </b> </bs> </hist> @@ -29205,8 +29274,8 @@ <v>1</v> </b> <b> - <a>13929</a> - <b>13930</b> + <a>13928</a> + <b>13929</b> <v>1</v> </b> <b> @@ -29220,8 +29289,8 @@ <v>1</v> </b> <b> - <a>4131269</a> - <b>4131270</b> + <a>4131254</a> + <b>4131255</b> <v>1</v> </b> </bs> @@ -29232,15 +29301,15 @@ </relation> <relation> <name>iscall</name> - <cardinality>2958862</cardinality> + <cardinality>3183297</cardinality> <columnsizes> <e> <k>caller</k> - <v>2958862</v> + <v>3183297</v> </e> <e> <k>kind</k> - <v>59</v> + <v>57</v> </e> </columnsizes> <dependencies> @@ -29254,7 +29323,7 @@ <b> <a>1</a> <b>2</b> - <v>2958862</v> + <v>3183297</v> </b> </bs> </hist> @@ -29278,8 +29347,8 @@ <v>19</v> </b> <b> - <a>146089</a> - <b>146090</b> + <a>163193</a> + <b>163194</b> <v>19</v> </b> </bs> @@ -29290,15 +29359,15 @@ </relation> <relation> <name>numtemplatearguments</name> - <cardinality>397495</cardinality> + <cardinality>393347</cardinality> <columnsizes> <e> <k>expr_id</k> - <v>397495</v> + <v>393347</v> </e> <e> <k>num</k> - <v>316</v> + <v>313</v> </e> </columnsizes> <dependencies> @@ -29312,7 +29381,7 @@ <b> <a>1</a> <b>2</b> - <v>397495</v> + <v>393347</v> </b> </bs> </hist> @@ -29328,37 +29397,37 @@ <b> <a>1</a> <b>2</b> - <v>105</v> + <v>104</v> </b> <b> <a>4</a> <b>5</b> - <v>35</v> + <v>34</v> </b> <b> <a>20</a> <b>21</b> - <v>35</v> + <v>34</v> </b> <b> <a>101</a> <b>102</b> - <v>35</v> + <v>34</v> </b> <b> <a>229</a> <b>230</b> - <v>35</v> + <v>34</v> </b> <b> <a>248</a> <b>249</b> - <v>35</v> + <v>34</v> </b> <b> - <a>10698</a> - <b>10699</b> - <v>35</v> + <a>10700</a> + <b>10701</b> + <v>34</v> </b> </bs> </hist> @@ -29368,15 +29437,15 @@ </relation> <relation> <name>specialnamequalifyingelements</name> - <cardinality>465</cardinality> + <cardinality>466</cardinality> <columnsizes> <e> <k>id</k> - <v>465</v> + <v>466</v> </e> <e> <k>name</k> - <v>465</v> + <v>466</v> </e> </columnsizes> <dependencies> @@ -29390,7 +29459,7 @@ <b> <a>1</a> <b>2</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -29406,7 +29475,7 @@ <b> <a>1</a> <b>2</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -29416,23 +29485,23 @@ </relation> <relation> <name>namequalifiers</name> - <cardinality>1570954</cardinality> + <cardinality>1516804</cardinality> <columnsizes> <e> <k>id</k> - <v>1570954</v> + <v>1516804</v> </e> <e> <k>qualifiableelement</k> - <v>1570954</v> + <v>1516804</v> </e> <e> <k>qualifyingelement</k> - <v>101314</v> + <v>97777</v> </e> <e> <k>location</k> - <v>316244</v> + <v>305343</v> </e> </columnsizes> <dependencies> @@ -29446,7 +29515,7 @@ <b> <a>1</a> <b>2</b> - <v>1570954</v> + <v>1516804</v> </b> </bs> </hist> @@ -29462,7 +29531,7 @@ <b> <a>1</a> <b>2</b> - <v>1570954</v> + <v>1516804</v> </b> </bs> </hist> @@ -29478,7 +29547,7 @@ <b> <a>1</a> <b>2</b> - <v>1570954</v> + <v>1516804</v> </b> </bs> </hist> @@ -29494,7 +29563,7 @@ <b> <a>1</a> <b>2</b> - <v>1570954</v> + <v>1516804</v> </b> </bs> </hist> @@ -29510,7 +29579,7 @@ <b> <a>1</a> <b>2</b> - <v>1570954</v> + <v>1516804</v> </b> </bs> </hist> @@ -29526,7 +29595,7 @@ <b> <a>1</a> <b>2</b> - <v>1570954</v> + <v>1516804</v> </b> </bs> </hist> @@ -29542,27 +29611,27 @@ <b> <a>1</a> <b>2</b> - <v>60745</v> + <v>58601</v> </b> <b> <a>2</a> <b>3</b> - <v>23255</v> + <v>22457</v> </b> <b> <a>3</a> <b>5</b> - <v>9239</v> + <v>8921</v> </b> <b> <a>5</a> <b>92</b> - <v>7640</v> + <v>7377</v> </b> <b> <a>96</a> - <b>21576</b> - <v>434</v> + <b>21572</b> + <v>419</v> </b> </bs> </hist> @@ -29578,27 +29647,27 @@ <b> <a>1</a> <b>2</b> - <v>60745</v> + <v>58601</v> </b> <b> <a>2</a> <b>3</b> - <v>23255</v> + <v>22457</v> </b> <b> <a>3</a> <b>5</b> - <v>9239</v> + <v>8921</v> </b> <b> <a>5</a> <b>92</b> - <v>7640</v> + <v>7377</v> </b> <b> <a>96</a> - <b>21576</b> - <v>434</v> + <b>21572</b> + <v>419</v> </b> </bs> </hist> @@ -29614,22 +29683,22 @@ <b> <a>1</a> <b>2</b> - <v>66371</v> + <v>64035</v> </b> <b> <a>2</a> <b>3</b> - <v>21439</v> + <v>20703</v> </b> <b> <a>3</a> <b>5</b> - <v>8686</v> + <v>8388</v> </b> <b> <a>5</a> <b>7095</b> - <v>4817</v> + <v>4651</v> </b> </bs> </hist> @@ -29645,32 +29714,32 @@ <b> <a>1</a> <b>2</b> - <v>104631</v> + <v>101018</v> </b> <b> <a>2</a> <b>3</b> - <v>29415</v> + <v>28385</v> </b> <b> <a>3</a> <b>4</b> - <v>46373</v> + <v>44780</v> </b> <b> <a>4</a> <b>6</b> - <v>14826</v> + <v>14316</v> </b> <b> <a>6</a> <b>7</b> - <v>98788</v> + <v>95394</v> </b> <b> <a>7</a> <b>790</b> - <v>22209</v> + <v>21446</v> </b> </bs> </hist> @@ -29686,32 +29755,32 @@ <b> <a>1</a> <b>2</b> - <v>104631</v> + <v>101018</v> </b> <b> <a>2</a> <b>3</b> - <v>29415</v> + <v>28385</v> </b> <b> <a>3</a> <b>4</b> - <v>46373</v> + <v>44780</v> </b> <b> <a>4</a> <b>6</b> - <v>14826</v> + <v>14316</v> </b> <b> <a>6</a> <b>7</b> - <v>98788</v> + <v>95394</v> </b> <b> <a>7</a> <b>790</b> - <v>22209</v> + <v>21446</v> </b> </bs> </hist> @@ -29727,22 +29796,22 @@ <b> <a>1</a> <b>2</b> - <v>142575</v> + <v>137659</v> </b> <b> <a>2</a> <b>3</b> - <v>57804</v> + <v>55799</v> </b> <b> <a>3</a> <b>4</b> - <v>106309</v> + <v>102658</v> </b> <b> <a>4</a> <b>143</b> - <v>9555</v> + <v>9226</v> </b> </bs> </hist> @@ -29752,15 +29821,15 @@ </relation> <relation> <name>varbind</name> - <cardinality>6020283</cardinality> + <cardinality>6029477</cardinality> <columnsizes> <e> <k>expr</k> - <v>6020283</v> + <v>6029477</v> </e> <e> <k>var</k> - <v>767403</v> + <v>768575</v> </e> </columnsizes> <dependencies> @@ -29774,7 +29843,7 @@ <b> <a>1</a> <b>2</b> - <v>6020283</v> + <v>6029477</v> </b> </bs> </hist> @@ -29790,52 +29859,52 @@ <b> <a>1</a> <b>2</b> - <v>126036</v> + <v>126229</v> </b> <b> <a>2</a> <b>3</b> - <v>137672</v> + <v>137882</v> </b> <b> <a>3</a> <b>4</b> - <v>106137</v> + <v>106299</v> </b> <b> <a>4</a> <b>5</b> - <v>85086</v> + <v>85216</v> </b> <b> <a>5</a> <b>6</b> - <v>61199</v> + <v>61292</v> </b> <b> <a>6</a> <b>7</b> - <v>48042</v> + <v>48115</v> </b> <b> <a>7</a> <b>9</b> - <v>59533</v> + <v>59624</v> </b> <b> <a>9</a> <b>13</b> - <v>59184</v> + <v>59274</v> </b> <b> <a>13</a> <b>28</b> - <v>58793</v> + <v>58883</v> </b> <b> <a>28</a> <b>5137</b> - <v>25717</v> + <v>25756</v> </b> </bs> </hist> @@ -29845,15 +29914,15 @@ </relation> <relation> <name>funbind</name> - <cardinality>2962929</cardinality> + <cardinality>3187262</cardinality> <columnsizes> <e> <k>expr</k> - <v>2959178</v> + <v>3183583</v> </e> <e> <k>fun</k> - <v>532278</v> + <v>512661</v> </e> </columnsizes> <dependencies> @@ -29867,12 +29936,12 @@ <b> <a>1</a> <b>2</b> - <v>2955427</v> + <v>3179903</v> </b> <b> <a>2</a> <b>3</b> - <v>3750</v> + <v>3679</v> </b> </bs> </hist> @@ -29888,32 +29957,32 @@ <b> <a>1</a> <b>2</b> - <v>328780</v> + <v>316152</v> </b> <b> <a>2</a> <b>3</b> - <v>81948</v> + <v>78084</v> </b> <b> <a>3</a> <b>4</b> - <v>31784</v> + <v>31455</v> </b> <b> <a>4</a> <b>7</b> - <v>47913</v> + <v>46210</v> </b> <b> <a>7</a> - <b>158</b> - <v>39937</v> + <b>133</b> + <v>38451</v> </b> <b> - <a>159</a> - <b>4943</b> - <v>1914</v> + <a>133</a> + <b>4992</b> + <v>2306</v> </b> </bs> </hist> @@ -29923,19 +29992,19 @@ </relation> <relation> <name>expr_allocator</name> - <cardinality>46455</cardinality> + <cardinality>45963</cardinality> <columnsizes> <e> <k>expr</k> - <v>46455</v> + <v>45963</v> </e> <e> <k>func</k> - <v>105</v> + <v>104</v> </e> <e> <k>form</k> - <v>35</v> + <v>34</v> </e> </columnsizes> <dependencies> @@ -29949,7 +30018,7 @@ <b> <a>1</a> <b>2</b> - <v>46455</v> + <v>45963</v> </b> </bs> </hist> @@ -29965,7 +30034,7 @@ <b> <a>1</a> <b>2</b> - <v>46455</v> + <v>45963</v> </b> </bs> </hist> @@ -29981,17 +30050,17 @@ <b> <a>1</a> <b>2</b> - <v>35</v> + <v>34</v> </b> <b> <a>585</a> <b>586</b> - <v>35</v> + <v>34</v> </b> <b> <a>735</a> <b>736</b> - <v>35</v> + <v>34</v> </b> </bs> </hist> @@ -30007,7 +30076,7 @@ <b> <a>1</a> <b>2</b> - <v>105</v> + <v>104</v> </b> </bs> </hist> @@ -30023,7 +30092,7 @@ <b> <a>1321</a> <b>1322</b> - <v>35</v> + <v>34</v> </b> </bs> </hist> @@ -30039,7 +30108,7 @@ <b> <a>3</a> <b>4</b> - <v>35</v> + <v>34</v> </b> </bs> </hist> @@ -30049,19 +30118,19 @@ </relation> <relation> <name>expr_deallocator</name> - <cardinality>55212</cardinality> + <cardinality>54626</cardinality> <columnsizes> <e> <k>expr</k> - <v>55212</v> + <v>54626</v> </e> <e> <k>func</k> - <v>105</v> + <v>104</v> </e> <e> <k>form</k> - <v>70</v> + <v>69</v> </e> </columnsizes> <dependencies> @@ -30075,7 +30144,7 @@ <b> <a>1</a> <b>2</b> - <v>55212</v> + <v>54626</v> </b> </bs> </hist> @@ -30091,7 +30160,7 @@ <b> <a>1</a> <b>2</b> - <v>55212</v> + <v>54626</v> </b> </bs> </hist> @@ -30107,17 +30176,17 @@ <b> <a>1</a> <b>2</b> - <v>35</v> + <v>34</v> </b> <b> <a>722</a> <b>723</b> - <v>35</v> + <v>34</v> </b> <b> <a>847</a> <b>848</b> - <v>35</v> + <v>34</v> </b> </bs> </hist> @@ -30133,7 +30202,7 @@ <b> <a>1</a> <b>2</b> - <v>105</v> + <v>104</v> </b> </bs> </hist> @@ -30149,12 +30218,12 @@ <b> <a>722</a> <b>723</b> - <v>35</v> + <v>34</v> </b> <b> <a>848</a> <b>849</b> - <v>35</v> + <v>34</v> </b> </bs> </hist> @@ -30170,12 +30239,12 @@ <b> <a>1</a> <b>2</b> - <v>35</v> + <v>34</v> </b> <b> <a>2</a> <b>3</b> - <v>35</v> + <v>34</v> </b> </bs> </hist> @@ -30185,26 +30254,26 @@ </relation> <relation> <name>expr_cond_two_operand</name> - <cardinality>480</cardinality> + <cardinality>481</cardinality> <columnsizes> <e> <k>cond</k> - <v>480</v> + <v>481</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>expr_cond_guard</name> - <cardinality>656298</cardinality> + <cardinality>657276</cardinality> <columnsizes> <e> <k>cond</k> - <v>656298</v> + <v>657276</v> </e> <e> <k>guard</k> - <v>656298</v> + <v>657276</v> </e> </columnsizes> <dependencies> @@ -30218,7 +30287,7 @@ <b> <a>1</a> <b>2</b> - <v>656298</v> + <v>657276</v> </b> </bs> </hist> @@ -30234,7 +30303,7 @@ <b> <a>1</a> <b>2</b> - <v>656298</v> + <v>657276</v> </b> </bs> </hist> @@ -30244,15 +30313,15 @@ </relation> <relation> <name>expr_cond_true</name> - <cardinality>656295</cardinality> + <cardinality>657273</cardinality> <columnsizes> <e> <k>cond</k> - <v>656295</v> + <v>657273</v> </e> <e> <k>true</k> - <v>656295</v> + <v>657273</v> </e> </columnsizes> <dependencies> @@ -30266,7 +30335,7 @@ <b> <a>1</a> <b>2</b> - <v>656295</v> + <v>657273</v> </b> </bs> </hist> @@ -30282,7 +30351,7 @@ <b> <a>1</a> <b>2</b> - <v>656295</v> + <v>657273</v> </b> </bs> </hist> @@ -30292,15 +30361,15 @@ </relation> <relation> <name>expr_cond_false</name> - <cardinality>656298</cardinality> + <cardinality>657276</cardinality> <columnsizes> <e> <k>cond</k> - <v>656298</v> + <v>657276</v> </e> <e> <k>false</k> - <v>656298</v> + <v>657276</v> </e> </columnsizes> <dependencies> @@ -30314,7 +30383,7 @@ <b> <a>1</a> <b>2</b> - <v>656298</v> + <v>657276</v> </b> </bs> </hist> @@ -30330,7 +30399,7 @@ <b> <a>1</a> <b>2</b> - <v>656298</v> + <v>657276</v> </b> </bs> </hist> @@ -30340,15 +30409,15 @@ </relation> <relation> <name>values</name> - <cardinality>10760930</cardinality> + <cardinality>10777325</cardinality> <columnsizes> <e> <k>id</k> - <v>10760930</v> + <v>10777325</v> </e> <e> <k>str</k> - <v>87934</v> + <v>88068</v> </e> </columnsizes> <dependencies> @@ -30362,7 +30431,7 @@ <b> <a>1</a> <b>2</b> - <v>10760930</v> + <v>10777325</v> </b> </bs> </hist> @@ -30378,27 +30447,27 @@ <b> <a>1</a> <b>2</b> - <v>59458</v> + <v>59548</v> </b> <b> <a>2</a> <b>3</b> - <v>12391</v> + <v>12410</v> </b> <b> <a>3</a> <b>6</b> - <v>6906</v> + <v>6916</v> </b> <b> <a>6</a> <b>56</b> - <v>6621</v> + <v>6631</v> </b> <b> <a>57</a> - <b>452015</b> - <v>2557</v> + <b>452017</b> + <v>2561</v> </b> </bs> </hist> @@ -30471,15 +30540,15 @@ </relation> <relation> <name>valuebind</name> - <cardinality>11194506</cardinality> + <cardinality>11211571</cardinality> <columnsizes> <e> <k>val</k> - <v>10760930</v> + <v>10777325</v> </e> <e> <k>expr</k> - <v>11194506</v> + <v>11211571</v> </e> </columnsizes> <dependencies> @@ -30493,12 +30562,12 @@ <b> <a>1</a> <b>2</b> - <v>10349865</v> + <v>10365623</v> </b> <b> <a>2</a> <b>7</b> - <v>411064</v> + <v>411701</v> </b> </bs> </hist> @@ -30514,7 +30583,7 @@ <b> <a>1</a> <b>2</b> - <v>11194506</v> + <v>11211571</v> </b> </bs> </hist> @@ -30524,15 +30593,15 @@ </relation> <relation> <name>fieldoffsets</name> - <cardinality>1053150</cardinality> + <cardinality>1054758</cardinality> <columnsizes> <e> <k>id</k> - <v>1053150</v> + <v>1054758</v> </e> <e> <k>byteoffset</k> - <v>22659</v> + <v>22694</v> </e> <e> <k>bitoffset</k> @@ -30550,7 +30619,7 @@ <b> <a>1</a> <b>2</b> - <v>1053150</v> + <v>1054758</v> </b> </bs> </hist> @@ -30566,7 +30635,7 @@ <b> <a>1</a> <b>2</b> - <v>1053150</v> + <v>1054758</v> </b> </bs> </hist> @@ -30582,37 +30651,37 @@ <b> <a>1</a> <b>2</b> - <v>13005</v> + <v>13025</v> </b> <b> <a>2</a> <b>3</b> - <v>1715</v> + <v>1718</v> </b> <b> <a>3</a> <b>5</b> - <v>1795</v> + <v>1797</v> </b> <b> <a>5</a> <b>12</b> - <v>1914</v> + <v>1917</v> </b> <b> <a>12</a> <b>35</b> - <v>1715</v> + <v>1718</v> </b> <b> <a>35</a> <b>205</b> - <v>1715</v> + <v>1718</v> </b> <b> <a>244</a> <b>5638</b> - <v>797</v> + <v>799</v> </b> </bs> </hist> @@ -30628,12 +30697,12 @@ <b> <a>1</a> <b>2</b> - <v>21981</v> + <v>22014</v> </b> <b> <a>2</a> <b>9</b> - <v>678</v> + <v>679</v> </b> </bs> </hist> @@ -30725,19 +30794,19 @@ </relation> <relation> <name>bitfield</name> - <cardinality>20858</cardinality> + <cardinality>20704</cardinality> <columnsizes> <e> <k>id</k> - <v>20858</v> + <v>20704</v> </e> <e> <k>bits</k> - <v>2607</v> + <v>2588</v> </e> <e> <k>declared_bits</k> - <v>2607</v> + <v>2588</v> </e> </columnsizes> <dependencies> @@ -30751,7 +30820,7 @@ <b> <a>1</a> <b>2</b> - <v>20858</v> + <v>20704</v> </b> </bs> </hist> @@ -30767,7 +30836,7 @@ <b> <a>1</a> <b>2</b> - <v>20858</v> + <v>20704</v> </b> </bs> </hist> @@ -30783,42 +30852,42 @@ <b> <a>1</a> <b>2</b> - <v>730</v> + <v>724</v> </b> <b> <a>2</a> <b>3</b> - <v>625</v> + <v>621</v> </b> <b> <a>3</a> <b>4</b> - <v>208</v> + <v>207</v> </b> <b> <a>4</a> <b>5</b> - <v>208</v> + <v>207</v> </b> <b> <a>5</a> <b>6</b> - <v>208</v> + <v>207</v> </b> <b> <a>6</a> <b>8</b> - <v>208</v> + <v>207</v> </b> <b> <a>8</a> <b>11</b> - <v>208</v> + <v>207</v> </b> <b> <a>12</a> <b>115</b> - <v>208</v> + <v>207</v> </b> </bs> </hist> @@ -30834,7 +30903,7 @@ <b> <a>1</a> <b>2</b> - <v>2607</v> + <v>2588</v> </b> </bs> </hist> @@ -30850,42 +30919,42 @@ <b> <a>1</a> <b>2</b> - <v>730</v> + <v>724</v> </b> <b> <a>2</a> <b>3</b> - <v>625</v> + <v>621</v> </b> <b> <a>3</a> <b>4</b> - <v>208</v> + <v>207</v> </b> <b> <a>4</a> <b>5</b> - <v>208</v> + <v>207</v> </b> <b> <a>5</a> <b>6</b> - <v>208</v> + <v>207</v> </b> <b> <a>6</a> <b>8</b> - <v>208</v> + <v>207</v> </b> <b> <a>8</a> <b>11</b> - <v>208</v> + <v>207</v> </b> <b> <a>12</a> <b>115</b> - <v>208</v> + <v>207</v> </b> </bs> </hist> @@ -30901,7 +30970,7 @@ <b> <a>1</a> <b>2</b> - <v>2607</v> + <v>2588</v> </b> </bs> </hist> @@ -30911,23 +30980,23 @@ </relation> <relation> <name>initialisers</name> - <cardinality>1710236</cardinality> + <cardinality>1710241</cardinality> <columnsizes> <e> <k>init</k> - <v>1710236</v> + <v>1710241</v> </e> <e> <k>var</k> - <v>719575</v> + <v>719566</v> </e> <e> <k>expr</k> - <v>1710236</v> + <v>1710241</v> </e> <e> <k>location</k> - <v>394516</v> + <v>394521</v> </e> </columnsizes> <dependencies> @@ -30941,7 +31010,7 @@ <b> <a>1</a> <b>2</b> - <v>1710236</v> + <v>1710241</v> </b> </bs> </hist> @@ -30957,7 +31026,7 @@ <b> <a>1</a> <b>2</b> - <v>1710236</v> + <v>1710241</v> </b> </bs> </hist> @@ -30973,7 +31042,7 @@ <b> <a>1</a> <b>2</b> - <v>1710236</v> + <v>1710241</v> </b> </bs> </hist> @@ -30989,7 +31058,7 @@ <b> <a>1</a> <b>2</b> - <v>633831</v> + <v>633820</v> </b> <b> <a>2</a> @@ -30999,7 +31068,7 @@ <b> <a>16</a> <b>25</b> - <v>57021</v> + <v>57022</v> </b> </bs> </hist> @@ -31015,7 +31084,7 @@ <b> <a>1</a> <b>2</b> - <v>633831</v> + <v>633820</v> </b> <b> <a>2</a> @@ -31025,7 +31094,7 @@ <b> <a>16</a> <b>25</b> - <v>57021</v> + <v>57022</v> </b> </bs> </hist> @@ -31041,7 +31110,7 @@ <b> <a>1</a> <b>2</b> - <v>719569</v> + <v>719560</v> </b> <b> <a>2</a> @@ -31062,7 +31131,7 @@ <b> <a>1</a> <b>2</b> - <v>1710236</v> + <v>1710241</v> </b> </bs> </hist> @@ -31078,7 +31147,7 @@ <b> <a>1</a> <b>2</b> - <v>1710236</v> + <v>1710241</v> </b> </bs> </hist> @@ -31094,7 +31163,7 @@ <b> <a>1</a> <b>2</b> - <v>1710236</v> + <v>1710241</v> </b> </bs> </hist> @@ -31110,7 +31179,7 @@ <b> <a>1</a> <b>2</b> - <v>321600</v> + <v>321604</v> </b> <b> <a>2</a> @@ -31120,7 +31189,7 @@ <b> <a>3</a> <b>15</b> - <v>30976</v> + <v>30977</v> </b> <b> <a>15</a> @@ -31141,17 +31210,17 @@ <b> <a>1</a> <b>2</b> - <v>344483</v> + <v>344488</v> </b> <b> <a>2</a> <b>4</b> - <v>36086</v> + <v>36106</v> </b> <b> <a>4</a> <b>12073</b> - <v>13945</v> + <v>13927</v> </b> </bs> </hist> @@ -31167,7 +31236,7 @@ <b> <a>1</a> <b>2</b> - <v>321600</v> + <v>321604</v> </b> <b> <a>2</a> @@ -31177,7 +31246,7 @@ <b> <a>3</a> <b>15</b> - <v>30976</v> + <v>30977</v> </b> <b> <a>15</a> @@ -31192,26 +31261,26 @@ </relation> <relation> <name>braced_initialisers</name> - <cardinality>41639</cardinality> + <cardinality>41701</cardinality> <columnsizes> <e> <k>init</k> - <v>41639</v> + <v>41701</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>expr_ancestor</name> - <cardinality>148162</cardinality> + <cardinality>475296</cardinality> <columnsizes> <e> <k>exp</k> - <v>148162</v> + <v>475296</v> </e> <e> <k>ancestor</k> - <v>92668</v> + <v>269541</v> </e> </columnsizes> <dependencies> @@ -31225,7 +31294,7 @@ <b> <a>1</a> <b>2</b> - <v>148162</v> + <v>475296</v> </b> </bs> </hist> @@ -31241,22 +31310,27 @@ <b> <a>1</a> <b>2</b> - <v>65069</v> + <v>165739</v> </b> <b> <a>2</a> <b>3</b> - <v>18359</v> + <v>54712</v> </b> <b> <a>3</a> + <b>4</b> + <v>22152</v> + </b> + <b> + <a>4</a> <b>6</b> - <v>7422</v> + <v>22132</v> </b> <b> <a>6</a> <b>26</b> - <v>1816</v> + <v>4804</v> </b> </bs> </hist> @@ -31266,19 +31340,19 @@ </relation> <relation> <name>exprs</name> - <cardinality>18360534</cardinality> + <cardinality>18388573</cardinality> <columnsizes> <e> <k>id</k> - <v>18360534</v> + <v>18388573</v> </e> <e> <k>kind</k> - <v>1163</v> + <v>1165</v> </e> <e> <k>location</k> - <v>8475665</v> + <v>8488587</v> </e> </columnsizes> <dependencies> @@ -31292,7 +31366,7 @@ <b> <a>1</a> <b>2</b> - <v>18360534</v> + <v>18388573</v> </b> </bs> </hist> @@ -31308,7 +31382,7 @@ <b> <a>1</a> <b>2</b> - <v>18360534</v> + <v>18388573</v> </b> </bs> </hist> @@ -31383,7 +31457,7 @@ </b> <b> <a>63119</a> - <b>136808</b> + <b>136815</b> <v>88</v> </b> <b> @@ -31486,22 +31560,22 @@ <b> <a>1</a> <b>2</b> - <v>7134774</v> + <v>7145568</v> </b> <b> <a>2</a> <b>3</b> - <v>661975</v> + <v>663069</v> </b> <b> <a>3</a> <b>18</b> - <v>637171</v> + <v>638140</v> </b> <b> <a>18</a> <b>71656</b> - <v>41744</v> + <v>41808</v> </b> </bs> </hist> @@ -31517,17 +31591,65 @@ <b> <a>1</a> <b>2</b> - <v>7240687</v> + <v>7251643</v> </b> <b> <a>2</a> <b>3</b> - <v>617251</v> + <v>618277</v> </b> <b> <a>3</a> <b>32</b> - <v>617727</v> + <v>618666</v> + </b> + </bs> + </hist> + </val> + </dep> + </dependencies> + </relation> + <relation> + <name>expr_reuse</name> + <cardinality>331632</cardinality> + <columnsizes> + <e> + <k>reuse</k> + <v>331632</v> + </e> + <e> + <k>original</k> + <v>331632</v> + </e> + </columnsizes> + <dependencies> + <dep> + <src>reuse</src> + <trg>original</trg> + <val> + <hist> + <budget>12</budget> + <bs> + <b> + <a>1</a> + <b>2</b> + <v>331632</v> + </b> + </bs> + </hist> + </val> + </dep> + <dep> + <src>original</src> + <trg>reuse</trg> + <val> + <hist> + <budget>12</budget> + <bs> + <b> + <a>1</a> + <b>2</b> + <v>331632</v> </b> </bs> </hist> @@ -31537,15 +31659,15 @@ </relation> <relation> <name>expr_types</name> - <cardinality>18487847</cardinality> + <cardinality>18461112</cardinality> <columnsizes> <e> <k>id</k> - <v>18356624</v> + <v>18330447</v> </e> <e> <k>typeid</k> - <v>1243492</v> + <v>1237209</v> </e> <e> <k>value_category</k> @@ -31563,12 +31685,12 @@ <b> <a>1</a> <b>2</b> - <v>18225401</v> + <v>18199782</v> </b> <b> <a>2</a> <b>3</b> - <v>131222</v> + <v>130664</v> </b> </bs> </hist> @@ -31584,7 +31706,7 @@ <b> <a>1</a> <b>2</b> - <v>18356624</v> + <v>18330447</v> </b> </bs> </hist> @@ -31600,42 +31722,42 @@ <b> <a>1</a> <b>2</b> - <v>450100</v> + <v>448184</v> </b> <b> <a>2</a> <b>3</b> - <v>258108</v> + <v>256965</v> </b> <b> <a>3</a> <b>4</b> - <v>103214</v> + <v>102788</v> </b> <b> <a>4</a> <b>5</b> - <v>84643</v> + <v>84133</v> </b> <b> <a>5</a> <b>8</b> - <v>111056</v> + <v>110196</v> </b> <b> <a>8</a> <b>14</b> - <v>99102</v> + <v>98435</v> </b> <b> <a>14</a> <b>42</b> - <v>94046</v> + <v>93511</v> </b> <b> <a>42</a> - <b>125383</b> - <v>43220</v> + <b>125366</b> + <v>42995</v> </b> </bs> </hist> @@ -31651,17 +31773,17 @@ <b> <a>1</a> <b>2</b> - <v>1074947</v> + <v>1069468</v> </b> <b> <a>2</a> <b>3</b> - <v>158085</v> + <v>157321</v> </b> <b> <a>3</a> <b>4</b> - <v>10459</v> + <v>10418</v> </b> </bs> </hist> @@ -31675,18 +31797,18 @@ <budget>12</budget> <bs> <b> - <a>14895</a> - <b>14896</b> + <a>14892</a> + <b>14893</b> <v>11</v> </b> <b> - <a>372954</a> - <b>372955</b> + <a>372687</a> + <b>372688</b> <v>11</v> </b> <b> - <a>1246055</a> - <b>1246056</b> + <a>1250400</a> + <b>1250401</b> <v>11</v> </b> </bs> @@ -31706,13 +31828,13 @@ <v>11</v> </b> <b> - <a>30879</a> - <b>30880</b> + <a>30862</a> + <b>30863</b> <v>11</v> </b> <b> - <a>93014</a> - <b>93015</b> + <a>92891</a> + <b>92892</b> <v>11</v> </b> </bs> @@ -31723,15 +31845,15 @@ </relation> <relation> <name>new_allocated_type</name> - <cardinality>47510</cardinality> + <cardinality>47006</cardinality> <columnsizes> <e> <k>expr</k> - <v>47510</v> + <v>47006</v> </e> <e> <k>type_id</k> - <v>28098</v> + <v>27800</v> </e> </columnsizes> <dependencies> @@ -31745,7 +31867,7 @@ <b> <a>1</a> <b>2</b> - <v>47510</v> + <v>47006</v> </b> </bs> </hist> @@ -31761,17 +31883,17 @@ <b> <a>1</a> <b>2</b> - <v>11745</v> + <v>11621</v> </b> <b> <a>2</a> <b>3</b> - <v>14875</v> + <v>14717</v> </b> <b> <a>3</a> <b>19</b> - <v>1477</v> + <v>1461</v> </b> </bs> </hist> @@ -32866,15 +32988,15 @@ </relation> <relation> <name>condition_decl_bind</name> - <cardinality>42306</cardinality> + <cardinality>40853</cardinality> <columnsizes> <e> <k>expr</k> - <v>42306</v> + <v>40853</v> </e> <e> <k>decl</k> - <v>42306</v> + <v>40853</v> </e> </columnsizes> <dependencies> @@ -32888,7 +33010,7 @@ <b> <a>1</a> <b>2</b> - <v>42306</v> + <v>40853</v> </b> </bs> </hist> @@ -32904,7 +33026,7 @@ <b> <a>1</a> <b>2</b> - <v>42306</v> + <v>40853</v> </b> </bs> </hist> @@ -32914,15 +33036,15 @@ </relation> <relation> <name>typeid_bind</name> - <cardinality>36362</cardinality> + <cardinality>35977</cardinality> <columnsizes> <e> <k>expr</k> - <v>36362</v> + <v>35977</v> </e> <e> <k>type_id</k> - <v>16352</v> + <v>16179</v> </e> </columnsizes> <dependencies> @@ -32936,7 +33058,7 @@ <b> <a>1</a> <b>2</b> - <v>36362</v> + <v>35977</v> </b> </bs> </hist> @@ -32952,12 +33074,12 @@ <b> <a>1</a> <b>2</b> - <v>15930</v> + <v>15761</v> </b> <b> <a>3</a> <b>328</b> - <v>422</v> + <v>417</v> </b> </bs> </hist> @@ -32975,7 +33097,7 @@ </e> <e> <k>type_id</k> - <v>20096</v> + <v>20097</v> </e> </columnsizes> <dependencies> @@ -33005,7 +33127,7 @@ <b> <a>1</a> <b>2</b> - <v>19931</v> + <v>19932</v> </b> <b> <a>2</a> @@ -33020,15 +33142,15 @@ </relation> <relation> <name>sizeof_bind</name> - <cardinality>198892</cardinality> + <cardinality>199195</cardinality> <columnsizes> <e> <k>expr</k> - <v>198892</v> + <v>199195</v> </e> <e> <k>type_id</k> - <v>8169</v> + <v>8181</v> </e> </columnsizes> <dependencies> @@ -33042,7 +33164,7 @@ <b> <a>1</a> <b>2</b> - <v>198892</v> + <v>199195</v> </b> </bs> </hist> @@ -33058,22 +33180,22 @@ <b> <a>1</a> <b>2</b> - <v>2689</v> + <v>2693</v> </b> <b> <a>2</a> <b>3</b> - <v>2330</v> + <v>2333</v> </b> <b> <a>3</a> <b>4</b> - <v>776</v> + <v>777</v> </b> <b> <a>4</a> <b>5</b> - <v>739</v> + <v>740</v> </b> <b> <a>5</a> @@ -33083,12 +33205,12 @@ <b> <a>6</a> <b>9</b> - <v>713</v> + <v>714</v> </b> <b> <a>9</a> <b>133</b> - <v>649</v> + <v>650</v> </b> <b> <a>164</a> @@ -33151,19 +33273,19 @@ </relation> <relation> <name>lambdas</name> - <cardinality>21431</cardinality> + <cardinality>21455</cardinality> <columnsizes> <e> <k>expr</k> - <v>21431</v> + <v>21455</v> </e> <e> <k>default_capture</k> - <v>465</v> + <v>466</v> </e> <e> <k>has_explicit_return_type</k> - <v>465</v> + <v>466</v> </e> </columnsizes> <dependencies> @@ -33177,7 +33299,7 @@ <b> <a>1</a> <b>2</b> - <v>21431</v> + <v>21455</v> </b> </bs> </hist> @@ -33193,7 +33315,7 @@ <b> <a>1</a> <b>2</b> - <v>21431</v> + <v>21455</v> </b> </bs> </hist> @@ -33209,7 +33331,7 @@ <b> <a>46</a> <b>47</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -33225,7 +33347,7 @@ <b> <a>1</a> <b>2</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -33241,7 +33363,7 @@ <b> <a>46</a> <b>47</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -33257,7 +33379,7 @@ <b> <a>1</a> <b>2</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -33267,35 +33389,35 @@ </relation> <relation> <name>lambda_capture</name> - <cardinality>27953</cardinality> + <cardinality>27985</cardinality> <columnsizes> <e> <k>id</k> - <v>27953</v> + <v>27985</v> </e> <e> <k>lambda</k> - <v>20499</v> + <v>20522</v> </e> <e> <k>index</k> - <v>931</v> + <v>932</v> </e> <e> <k>field</k> - <v>27953</v> + <v>27985</v> </e> <e> <k>captured_by_reference</k> - <v>465</v> + <v>466</v> </e> <e> <k>is_implicit</k> - <v>465</v> + <v>466</v> </e> <e> <k>location</k> - <v>2795</v> + <v>2798</v> </e> </columnsizes> <dependencies> @@ -33309,7 +33431,7 @@ <b> <a>1</a> <b>2</b> - <v>27953</v> + <v>27985</v> </b> </bs> </hist> @@ -33325,7 +33447,7 @@ <b> <a>1</a> <b>2</b> - <v>27953</v> + <v>27985</v> </b> </bs> </hist> @@ -33341,7 +33463,7 @@ <b> <a>1</a> <b>2</b> - <v>27953</v> + <v>27985</v> </b> </bs> </hist> @@ -33357,7 +33479,7 @@ <b> <a>1</a> <b>2</b> - <v>27953</v> + <v>27985</v> </b> </bs> </hist> @@ -33373,7 +33495,7 @@ <b> <a>1</a> <b>2</b> - <v>27953</v> + <v>27985</v> </b> </bs> </hist> @@ -33389,7 +33511,7 @@ <b> <a>1</a> <b>2</b> - <v>27953</v> + <v>27985</v> </b> </bs> </hist> @@ -33405,12 +33527,12 @@ <b> <a>1</a> <b>2</b> - <v>13045</v> + <v>13059</v> </b> <b> <a>2</a> <b>3</b> - <v>7454</v> + <v>7462</v> </b> </bs> </hist> @@ -33426,12 +33548,12 @@ <b> <a>1</a> <b>2</b> - <v>13045</v> + <v>13059</v> </b> <b> <a>2</a> <b>3</b> - <v>7454</v> + <v>7462</v> </b> </bs> </hist> @@ -33447,12 +33569,12 @@ <b> <a>1</a> <b>2</b> - <v>13045</v> + <v>13059</v> </b> <b> <a>2</a> <b>3</b> - <v>7454</v> + <v>7462</v> </b> </bs> </hist> @@ -33468,7 +33590,7 @@ <b> <a>1</a> <b>2</b> - <v>20499</v> + <v>20522</v> </b> </bs> </hist> @@ -33484,7 +33606,7 @@ <b> <a>1</a> <b>2</b> - <v>20499</v> + <v>20522</v> </b> </bs> </hist> @@ -33500,12 +33622,12 @@ <b> <a>1</a> <b>2</b> - <v>13045</v> + <v>13059</v> </b> <b> <a>2</a> <b>3</b> - <v>7454</v> + <v>7462</v> </b> </bs> </hist> @@ -33521,12 +33643,12 @@ <b> <a>16</a> <b>17</b> - <v>465</v> + <v>466</v> </b> <b> <a>44</a> <b>45</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -33542,12 +33664,12 @@ <b> <a>16</a> <b>17</b> - <v>465</v> + <v>466</v> </b> <b> <a>44</a> <b>45</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -33563,12 +33685,12 @@ <b> <a>16</a> <b>17</b> - <v>465</v> + <v>466</v> </b> <b> <a>44</a> <b>45</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -33584,7 +33706,7 @@ <b> <a>1</a> <b>2</b> - <v>931</v> + <v>932</v> </b> </bs> </hist> @@ -33600,7 +33722,7 @@ <b> <a>1</a> <b>2</b> - <v>931</v> + <v>932</v> </b> </bs> </hist> @@ -33616,12 +33738,12 @@ <b> <a>2</a> <b>3</b> - <v>465</v> + <v>466</v> </b> <b> <a>4</a> <b>5</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -33637,7 +33759,7 @@ <b> <a>1</a> <b>2</b> - <v>27953</v> + <v>27985</v> </b> </bs> </hist> @@ -33653,7 +33775,7 @@ <b> <a>1</a> <b>2</b> - <v>27953</v> + <v>27985</v> </b> </bs> </hist> @@ -33669,7 +33791,7 @@ <b> <a>1</a> <b>2</b> - <v>27953</v> + <v>27985</v> </b> </bs> </hist> @@ -33685,7 +33807,7 @@ <b> <a>1</a> <b>2</b> - <v>27953</v> + <v>27985</v> </b> </bs> </hist> @@ -33701,7 +33823,7 @@ <b> <a>1</a> <b>2</b> - <v>27953</v> + <v>27985</v> </b> </bs> </hist> @@ -33717,7 +33839,7 @@ <b> <a>1</a> <b>2</b> - <v>27953</v> + <v>27985</v> </b> </bs> </hist> @@ -33733,7 +33855,7 @@ <b> <a>60</a> <b>61</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -33749,7 +33871,7 @@ <b> <a>44</a> <b>45</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -33765,7 +33887,7 @@ <b> <a>2</a> <b>3</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -33781,7 +33903,7 @@ <b> <a>60</a> <b>61</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -33797,7 +33919,7 @@ <b> <a>1</a> <b>2</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -33813,7 +33935,7 @@ <b> <a>6</a> <b>7</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -33829,7 +33951,7 @@ <b> <a>60</a> <b>61</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -33845,7 +33967,7 @@ <b> <a>44</a> <b>45</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -33861,7 +33983,7 @@ <b> <a>2</a> <b>3</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -33877,7 +33999,7 @@ <b> <a>60</a> <b>61</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -33893,7 +34015,7 @@ <b> <a>1</a> <b>2</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -33909,7 +34031,7 @@ <b> <a>6</a> <b>7</b> - <v>465</v> + <v>466</v> </b> </bs> </hist> @@ -33925,12 +34047,12 @@ <b> <a>8</a> <b>9</b> - <v>1863</v> + <v>1865</v> </b> <b> <a>14</a> <b>15</b> - <v>931</v> + <v>932</v> </b> </bs> </hist> @@ -33946,12 +34068,12 @@ <b> <a>8</a> <b>9</b> - <v>1863</v> + <v>1865</v> </b> <b> <a>14</a> <b>15</b> - <v>931</v> + <v>932</v> </b> </bs> </hist> @@ -33967,7 +34089,7 @@ <b> <a>1</a> <b>2</b> - <v>2795</v> + <v>2798</v> </b> </bs> </hist> @@ -33983,12 +34105,12 @@ <b> <a>8</a> <b>9</b> - <v>1863</v> + <v>1865</v> </b> <b> <a>14</a> <b>15</b> - <v>931</v> + <v>932</v> </b> </bs> </hist> @@ -34004,7 +34126,7 @@ <b> <a>1</a> <b>2</b> - <v>2795</v> + <v>2798</v> </b> </bs> </hist> @@ -34020,7 +34142,7 @@ <b> <a>1</a> <b>2</b> - <v>2795</v> + <v>2798</v> </b> </bs> </hist> @@ -34146,19 +34268,19 @@ </relation> <relation> <name>stmts</name> - <cardinality>4648694</cardinality> + <cardinality>4619943</cardinality> <columnsizes> <e> <k>id</k> - <v>4648694</v> + <v>4619943</v> </e> <e> <k>kind</k> - <v>1981</v> + <v>1966</v> </e> <e> <k>location</k> - <v>2286749</v> + <v>2269598</v> </e> </columnsizes> <dependencies> @@ -34172,7 +34294,7 @@ <b> <a>1</a> <b>2</b> - <v>4648694</v> + <v>4619943</v> </b> </bs> </hist> @@ -34188,7 +34310,7 @@ <b> <a>1</a> <b>2</b> - <v>4648694</v> + <v>4619943</v> </b> </bs> </hist> @@ -34204,97 +34326,97 @@ <b> <a>1</a> <b>2</b> - <v>104</v> + <v>103</v> </b> <b> <a>18</a> <b>19</b> - <v>104</v> + <v>103</v> </b> <b> <a>22</a> <b>23</b> - <v>104</v> + <v>103</v> </b> <b> <a>46</a> <b>47</b> - <v>104</v> + <v>103</v> </b> <b> <a>75</a> <b>76</b> - <v>104</v> + <v>103</v> </b> <b> <a>83</a> <b>84</b> - <v>104</v> + <v>103</v> </b> <b> <a>102</a> <b>103</b> - <v>104</v> + <v>103</v> </b> <b> <a>154</a> <b>155</b> - <v>104</v> + <v>103</v> </b> <b> <a>242</a> <b>243</b> - <v>104</v> + <v>103</v> </b> <b> <a>284</a> <b>285</b> - <v>104</v> + <v>103</v> </b> <b> <a>383</a> <b>384</b> - <v>104</v> + <v>103</v> </b> <b> <a>418</a> <b>419</b> - <v>104</v> + <v>103</v> </b> <b> - <a>502</a> - <b>503</b> - <v>104</v> + <a>503</a> + <b>504</b> + <v>103</v> </b> <b> - <a>1325</a> - <b>1326</b> - <v>104</v> + <a>1326</a> + <b>1327</b> + <v>103</v> </b> <b> - <a>2630</a> - <b>2631</b> - <v>104</v> + <a>2635</a> + <b>2636</b> + <v>103</v> </b> <b> - <a>4613</a> - <b>4614</b> - <v>104</v> + <a>4621</a> + <b>4622</b> + <v>103</v> </b> <b> - <a>8794</a> - <b>8795</b> - <v>104</v> + <a>8803</a> + <b>8804</b> + <v>103</v> </b> <b> - <a>11560</a> - <b>11561</b> - <v>104</v> + <a>11577</a> + <b>11578</b> + <v>103</v> </b> <b> - <a>13321</a> - <b>13322</b> - <v>104</v> + <a>13335</a> + <b>13336</b> + <v>103</v> </b> </bs> </hist> @@ -34310,97 +34432,97 @@ <b> <a>1</a> <b>2</b> - <v>104</v> + <v>103</v> </b> <b> <a>8</a> <b>9</b> - <v>104</v> + <v>103</v> </b> <b> <a>18</a> <b>19</b> - <v>104</v> + <v>103</v> </b> <b> <a>45</a> <b>46</b> - <v>104</v> + <v>103</v> </b> <b> <a>50</a> <b>51</b> - <v>104</v> + <v>103</v> </b> <b> <a>56</a> <b>57</b> - <v>104</v> + <v>103</v> </b> <b> <a>74</a> <b>75</b> - <v>104</v> + <v>103</v> </b> <b> <a>89</a> <b>90</b> - <v>104</v> + <v>103</v> </b> <b> <a>101</a> <b>102</b> - <v>104</v> + <v>103</v> </b> <b> <a>128</a> <b>129</b> - <v>104</v> + <v>103</v> </b> <b> <a>209</a> <b>210</b> - <v>104</v> + <v>103</v> </b> <b> <a>252</a> <b>253</b> - <v>104</v> + <v>103</v> </b> <b> <a>368</a> <b>369</b> - <v>104</v> + <v>103</v> </b> <b> <a>642</a> <b>643</b> - <v>104</v> + <v>103</v> </b> <b> <a>1743</a> <b>1744</b> - <v>104</v> + <v>103</v> </b> <b> <a>2190</a> <b>2191</b> - <v>104</v> + <v>103</v> </b> <b> - <a>4229</a> - <b>4230</b> - <v>104</v> + <a>4228</a> + <b>4229</b> + <v>103</v> </b> <b> <a>6071</a> <b>6072</b> - <v>104</v> + <v>103</v> </b> <b> - <a>6568</a> - <b>6569</b> - <v>104</v> + <a>6567</a> + <b>6568</b> + <v>103</v> </b> </bs> </hist> @@ -34416,22 +34538,22 @@ <b> <a>1</a> <b>2</b> - <v>1893352</v> + <v>1879323</v> </b> <b> <a>2</a> <b>4</b> - <v>175318</v> + <v>174019</v> </b> <b> <a>4</a> <b>12</b> - <v>175631</v> + <v>174122</v> </b> <b> <a>12</a> <b>687</b> - <v>42447</v> + <v>42133</v> </b> </bs> </hist> @@ -34447,12 +34569,12 @@ <b> <a>1</a> <b>2</b> - <v>2229596</v> + <v>2212869</v> </b> <b> <a>2</a> <b>8</b> - <v>57153</v> + <v>56729</v> </b> </bs> </hist> @@ -34558,15 +34680,15 @@ </relation> <relation> <name>if_initialization</name> - <cardinality>312</cardinality> + <cardinality>310</cardinality> <columnsizes> <e> <k>if_stmt</k> - <v>312</v> + <v>310</v> </e> <e> <k>init_id</k> - <v>312</v> + <v>310</v> </e> </columnsizes> <dependencies> @@ -34580,7 +34702,7 @@ <b> <a>1</a> <b>2</b> - <v>312</v> + <v>310</v> </b> </bs> </hist> @@ -34596,7 +34718,7 @@ <b> <a>1</a> <b>2</b> - <v>312</v> + <v>310</v> </b> </bs> </hist> @@ -34606,15 +34728,15 @@ </relation> <relation> <name>if_then</name> - <cardinality>724849</cardinality> + <cardinality>725956</cardinality> <columnsizes> <e> <k>if_stmt</k> - <v>724849</v> + <v>725956</v> </e> <e> <k>then_id</k> - <v>724849</v> + <v>725956</v> </e> </columnsizes> <dependencies> @@ -34628,7 +34750,7 @@ <b> <a>1</a> <b>2</b> - <v>724849</v> + <v>725956</v> </b> </bs> </hist> @@ -34644,7 +34766,7 @@ <b> <a>1</a> <b>2</b> - <v>724849</v> + <v>725956</v> </b> </bs> </hist> @@ -34654,15 +34776,15 @@ </relation> <relation> <name>if_else</name> - <cardinality>184398</cardinality> + <cardinality>184680</cardinality> <columnsizes> <e> <k>if_stmt</k> - <v>184398</v> + <v>184680</v> </e> <e> <k>else_id</k> - <v>184398</v> + <v>184680</v> </e> </columnsizes> <dependencies> @@ -34676,7 +34798,7 @@ <b> <a>1</a> <b>2</b> - <v>184398</v> + <v>184680</v> </b> </bs> </hist> @@ -34692,7 +34814,7 @@ <b> <a>1</a> <b>2</b> - <v>184398</v> + <v>184680</v> </b> </bs> </hist> @@ -34750,15 +34872,15 @@ </relation> <relation> <name>constexpr_if_then</name> - <cardinality>52355</cardinality> + <cardinality>52071</cardinality> <columnsizes> <e> <k>constexpr_if_stmt</k> - <v>52355</v> + <v>52071</v> </e> <e> <k>then_id</k> - <v>52355</v> + <v>52071</v> </e> </columnsizes> <dependencies> @@ -34772,7 +34894,7 @@ <b> <a>1</a> <b>2</b> - <v>52355</v> + <v>52071</v> </b> </bs> </hist> @@ -34788,7 +34910,7 @@ <b> <a>1</a> <b>2</b> - <v>52355</v> + <v>52071</v> </b> </bs> </hist> @@ -34798,15 +34920,15 @@ </relation> <relation> <name>constexpr_if_else</name> - <cardinality>30766</cardinality> + <cardinality>30538</cardinality> <columnsizes> <e> <k>constexpr_if_stmt</k> - <v>30766</v> + <v>30538</v> </e> <e> <k>else_id</k> - <v>30766</v> + <v>30538</v> </e> </columnsizes> <dependencies> @@ -34820,7 +34942,7 @@ <b> <a>1</a> <b>2</b> - <v>30766</v> + <v>30538</v> </b> </bs> </hist> @@ -34836,7 +34958,7 @@ <b> <a>1</a> <b>2</b> - <v>30766</v> + <v>30538</v> </b> </bs> </hist> @@ -34846,15 +34968,15 @@ </relation> <relation> <name>while_body</name> - <cardinality>29345</cardinality> + <cardinality>29152</cardinality> <columnsizes> <e> <k>while_stmt</k> - <v>29345</v> + <v>29152</v> </e> <e> <k>body_id</k> - <v>29345</v> + <v>29152</v> </e> </columnsizes> <dependencies> @@ -34868,7 +34990,7 @@ <b> <a>1</a> <b>2</b> - <v>29345</v> + <v>29152</v> </b> </bs> </hist> @@ -34884,7 +35006,7 @@ <b> <a>1</a> <b>2</b> - <v>29345</v> + <v>29152</v> </b> </bs> </hist> @@ -34894,15 +35016,15 @@ </relation> <relation> <name>do_body</name> - <cardinality>148655</cardinality> + <cardinality>148882</cardinality> <columnsizes> <e> <k>do_stmt</k> - <v>148655</v> + <v>148882</v> </e> <e> <k>body_id</k> - <v>148655</v> + <v>148882</v> </e> </columnsizes> <dependencies> @@ -34916,7 +35038,7 @@ <b> <a>1</a> <b>2</b> - <v>148655</v> + <v>148882</v> </b> </bs> </hist> @@ -34932,7 +35054,7 @@ <b> <a>1</a> <b>2</b> - <v>148655</v> + <v>148882</v> </b> </bs> </hist> @@ -34942,15 +35064,15 @@ </relation> <relation> <name>switch_initialization</name> - <cardinality>4</cardinality> + <cardinality>5</cardinality> <columnsizes> <e> <k>switch_stmt</k> - <v>4</v> + <v>5</v> </e> <e> <k>init_id</k> - <v>4</v> + <v>5</v> </e> </columnsizes> <dependencies> @@ -34964,7 +35086,7 @@ <b> <a>1</a> <b>2</b> - <v>4</v> + <v>5</v> </b> </bs> </hist> @@ -34980,7 +35102,7 @@ <b> <a>1</a> <b>2</b> - <v>4</v> + <v>5</v> </b> </bs> </hist> @@ -34990,19 +35112,19 @@ </relation> <relation> <name>switch_case</name> - <cardinality>209046</cardinality> + <cardinality>201865</cardinality> <columnsizes> <e> <k>switch_stmt</k> - <v>11193</v> + <v>10809</v> </e> <e> <k>index</k> - <v>4856</v> + <v>4689</v> </e> <e> <k>case_id</k> - <v>209046</v> + <v>201865</v> </e> </columnsizes> <dependencies> @@ -35016,57 +35138,57 @@ <b> <a>2</a> <b>3</b> - <v>59</v> + <v>57</v> </b> <b> <a>3</a> <b>4</b> - <v>2487</v> + <v>2402</v> </b> <b> <a>4</a> <b>5</b> - <v>1816</v> + <v>1753</v> </b> <b> <a>5</a> <b>6</b> - <v>1085</v> + <v>1048</v> </b> <b> <a>6</a> <b>8</b> - <v>1026</v> + <v>991</v> </b> <b> <a>8</a> <b>9</b> - <v>552</v> + <v>533</v> </b> <b> <a>9</a> <b>10</b> - <v>1066</v> + <v>1029</v> </b> <b> <a>10</a> <b>12</b> - <v>1026</v> + <v>991</v> </b> <b> <a>12</a> <b>25</b> - <v>868</v> + <v>838</v> </b> <b> <a>30</a> <b>152</b> - <v>848</v> + <v>819</v> </b> <b> <a>181</a> <b>247</b> - <v>355</v> + <v>343</v> </b> </bs> </hist> @@ -35082,57 +35204,57 @@ <b> <a>2</a> <b>3</b> - <v>59</v> + <v>57</v> </b> <b> <a>3</a> <b>4</b> - <v>2487</v> + <v>2402</v> </b> <b> <a>4</a> <b>5</b> - <v>1816</v> + <v>1753</v> </b> <b> <a>5</a> <b>6</b> - <v>1085</v> + <v>1048</v> </b> <b> <a>6</a> <b>8</b> - <v>1026</v> + <v>991</v> </b> <b> <a>8</a> <b>9</b> - <v>552</v> + <v>533</v> </b> <b> <a>9</a> <b>10</b> - <v>1066</v> + <v>1029</v> </b> <b> <a>10</a> <b>12</b> - <v>1026</v> + <v>991</v> </b> <b> <a>12</a> <b>25</b> - <v>868</v> + <v>838</v> </b> <b> <a>30</a> <b>152</b> - <v>848</v> + <v>819</v> </b> <b> <a>181</a> <b>247</b> - <v>355</v> + <v>343</v> </b> </bs> </hist> @@ -35148,32 +35270,32 @@ <b> <a>14</a> <b>15</b> - <v>1283</v> + <v>1239</v> </b> <b> <a>18</a> <b>19</b> - <v>592</v> + <v>571</v> </b> <b> <a>32</a> <b>33</b> - <v>2092</v> + <v>2020</v> </b> <b> <a>33</a> <b>62</b> - <v>414</v> + <v>400</v> </b> <b> <a>66</a> <b>292</b> - <v>375</v> + <v>362</v> </b> <b> <a>346</a> <b>568</b> - <v>98</v> + <v>95</v> </b> </bs> </hist> @@ -35189,32 +35311,32 @@ <b> <a>14</a> <b>15</b> - <v>1283</v> + <v>1239</v> </b> <b> <a>18</a> <b>19</b> - <v>592</v> + <v>571</v> </b> <b> <a>32</a> <b>33</b> - <v>2092</v> + <v>2020</v> </b> <b> <a>33</a> <b>62</b> - <v>414</v> + <v>400</v> </b> <b> <a>66</a> <b>292</b> - <v>375</v> + <v>362</v> </b> <b> <a>346</a> <b>568</b> - <v>98</v> + <v>95</v> </b> </bs> </hist> @@ -35230,7 +35352,7 @@ <b> <a>1</a> <b>2</b> - <v>209046</v> + <v>201865</v> </b> </bs> </hist> @@ -35246,7 +35368,7 @@ <b> <a>1</a> <b>2</b> - <v>209046</v> + <v>201865</v> </b> </bs> </hist> @@ -35256,15 +35378,15 @@ </relation> <relation> <name>switch_body</name> - <cardinality>20756</cardinality> + <cardinality>20788</cardinality> <columnsizes> <e> <k>switch_stmt</k> - <v>20756</v> + <v>20788</v> </e> <e> <k>body_id</k> - <v>20756</v> + <v>20788</v> </e> </columnsizes> <dependencies> @@ -35278,7 +35400,7 @@ <b> <a>1</a> <b>2</b> - <v>20756</v> + <v>20788</v> </b> </bs> </hist> @@ -35294,7 +35416,7 @@ <b> <a>1</a> <b>2</b> - <v>20756</v> + <v>20788</v> </b> </bs> </hist> @@ -35304,15 +35426,15 @@ </relation> <relation> <name>for_initialization</name> - <cardinality>53325</cardinality> + <cardinality>53407</cardinality> <columnsizes> <e> <k>for_stmt</k> - <v>53325</v> + <v>53407</v> </e> <e> <k>init_id</k> - <v>53325</v> + <v>53407</v> </e> </columnsizes> <dependencies> @@ -35326,7 +35448,7 @@ <b> <a>1</a> <b>2</b> - <v>53325</v> + <v>53407</v> </b> </bs> </hist> @@ -35342,7 +35464,7 @@ <b> <a>1</a> <b>2</b> - <v>53325</v> + <v>53407</v> </b> </bs> </hist> @@ -35352,15 +35474,15 @@ </relation> <relation> <name>for_condition</name> - <cardinality>55586</cardinality> + <cardinality>55671</cardinality> <columnsizes> <e> <k>for_stmt</k> - <v>55586</v> + <v>55671</v> </e> <e> <k>condition_id</k> - <v>55586</v> + <v>55671</v> </e> </columnsizes> <dependencies> @@ -35374,7 +35496,7 @@ <b> <a>1</a> <b>2</b> - <v>55586</v> + <v>55671</v> </b> </bs> </hist> @@ -35390,7 +35512,7 @@ <b> <a>1</a> <b>2</b> - <v>55586</v> + <v>55671</v> </b> </bs> </hist> @@ -35400,15 +35522,15 @@ </relation> <relation> <name>for_update</name> - <cardinality>53428</cardinality> + <cardinality>53509</cardinality> <columnsizes> <e> <k>for_stmt</k> - <v>53428</v> + <v>53509</v> </e> <e> <k>update_id</k> - <v>53428</v> + <v>53509</v> </e> </columnsizes> <dependencies> @@ -35422,7 +35544,7 @@ <b> <a>1</a> <b>2</b> - <v>53428</v> + <v>53509</v> </b> </bs> </hist> @@ -35438,7 +35560,7 @@ <b> <a>1</a> <b>2</b> - <v>53428</v> + <v>53509</v> </b> </bs> </hist> @@ -35448,15 +35570,15 @@ </relation> <relation> <name>for_body</name> - <cardinality>61466</cardinality> + <cardinality>61560</cardinality> <columnsizes> <e> <k>for_stmt</k> - <v>61466</v> + <v>61560</v> </e> <e> <k>body_id</k> - <v>61466</v> + <v>61560</v> </e> </columnsizes> <dependencies> @@ -35470,7 +35592,7 @@ <b> <a>1</a> <b>2</b> - <v>61466</v> + <v>61560</v> </b> </bs> </hist> @@ -35486,7 +35608,7 @@ <b> <a>1</a> <b>2</b> - <v>61466</v> + <v>61560</v> </b> </bs> </hist> @@ -35496,11 +35618,11 @@ </relation> <relation> <name>stmtparents</name> - <cardinality>4054126</cardinality> + <cardinality>4054468</cardinality> <columnsizes> <e> <k>id</k> - <v>4054126</v> + <v>4054468</v> </e> <e> <k>index</k> @@ -35508,7 +35630,7 @@ </e> <e> <k>parent</k> - <v>1721123</v> + <v>1721248</v> </e> </columnsizes> <dependencies> @@ -35522,7 +35644,7 @@ <b> <a>1</a> <b>2</b> - <v>4054126</v> + <v>4054468</v> </b> </bs> </hist> @@ -35538,7 +35660,7 @@ <b> <a>1</a> <b>2</b> - <v>4054126</v> + <v>4054468</v> </b> </bs> </hist> @@ -35598,7 +35720,7 @@ </b> <b> <a>77</a> - <b>195121</b> + <b>195132</b> <v>704</v> </b> </bs> @@ -35659,7 +35781,7 @@ </b> <b> <a>77</a> - <b>195121</b> + <b>195132</b> <v>704</v> </b> </bs> @@ -35676,27 +35798,27 @@ <b> <a>1</a> <b>2</b> - <v>989099</v> + <v>989113</v> </b> <b> <a>2</a> <b>3</b> - <v>372496</v> + <v>372551</v> </b> <b> <a>3</a> <b>4</b> - <v>105695</v> + <v>105697</v> </b> <b> <a>4</a> <b>6</b> - <v>111192</v> + <v>111251</v> </b> <b> <a>6</a> <b>17</b> - <v>130356</v> + <v>130351</v> </b> <b> <a>17</a> @@ -35717,27 +35839,27 @@ <b> <a>1</a> <b>2</b> - <v>989099</v> + <v>989113</v> </b> <b> <a>2</a> <b>3</b> - <v>372496</v> + <v>372551</v> </b> <b> <a>3</a> <b>4</b> - <v>105695</v> + <v>105697</v> </b> <b> <a>4</a> <b>6</b> - <v>111192</v> + <v>111251</v> </b> <b> <a>6</a> <b>17</b> - <v>130356</v> + <v>130351</v> </b> <b> <a>17</a> @@ -35752,22 +35874,22 @@ </relation> <relation> <name>ishandler</name> - <cardinality>65128</cardinality> + <cardinality>62891</cardinality> <columnsizes> <e> <k>block</k> - <v>65128</v> + <v>62891</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>stmt_decl_bind</name> - <cardinality>581396</cardinality> + <cardinality>580807</cardinality> <columnsizes> <e> <k>stmt</k> - <v>541537</v> + <v>540988</v> </e> <e> <k>num</k> @@ -35775,7 +35897,7 @@ </e> <e> <k>decl</k> - <v>581292</v> + <v>580703</v> </e> </columnsizes> <dependencies> @@ -35789,12 +35911,12 @@ <b> <a>1</a> <b>2</b> - <v>520808</v> + <v>520281</v> </b> <b> <a>2</a> <b>19</b> - <v>20728</v> + <v>20707</v> </b> </bs> </hist> @@ -35810,12 +35932,12 @@ <b> <a>1</a> <b>2</b> - <v>520808</v> + <v>520281</v> </b> <b> <a>2</a> <b>19</b> - <v>20728</v> + <v>20707</v> </b> </bs> </hist> @@ -35904,8 +36026,8 @@ <v>4</v> </b> <b> - <a>129788</a> - <b>129789</b> + <a>129790</a> + <b>129791</b> <v>4</v> </b> </bs> @@ -35995,8 +36117,8 @@ <v>4</v> </b> <b> - <a>129763</a> - <b>129764</b> + <a>129765</a> + <b>129766</b> <v>4</v> </b> </bs> @@ -36013,7 +36135,7 @@ <b> <a>1</a> <b>2</b> - <v>581255</v> + <v>580665</v> </b> <b> <a>2</a> @@ -36034,7 +36156,7 @@ <b> <a>1</a> <b>2</b> - <v>581292</v> + <v>580703</v> </b> </bs> </hist> @@ -36044,11 +36166,11 @@ </relation> <relation> <name>stmt_decl_entry_bind</name> - <cardinality>524221</cardinality> + <cardinality>523682</cardinality> <columnsizes> <e> <k>stmt</k> - <v>484662</v> + <v>484163</v> </e> <e> <k>num</k> @@ -36056,7 +36178,7 @@ </e> <e> <k>decl_entry</k> - <v>524163</v> + <v>523624</v> </e> </columnsizes> <dependencies> @@ -36070,12 +36192,12 @@ <b> <a>1</a> <b>2</b> - <v>464196</v> + <v>463719</v> </b> <b> <a>2</a> <b>19</b> - <v>20465</v> + <v>20444</v> </b> </bs> </hist> @@ -36091,12 +36213,12 @@ <b> <a>1</a> <b>2</b> - <v>464196</v> + <v>463719</v> </b> <b> <a>2</a> <b>19</b> - <v>20465</v> + <v>20444</v> </b> </bs> </hist> @@ -36294,7 +36416,7 @@ <b> <a>1</a> <b>2</b> - <v>524142</v> + <v>523603</v> </b> <b> <a>3</a> @@ -36315,7 +36437,7 @@ <b> <a>1</a> <b>2</b> - <v>524163</v> + <v>523624</v> </b> </bs> </hist> @@ -36325,15 +36447,15 @@ </relation> <relation> <name>blockscope</name> - <cardinality>1413997</cardinality> + <cardinality>1415581</cardinality> <columnsizes> <e> <k>block</k> - <v>1413997</v> + <v>1415581</v> </e> <e> <k>enclosing</k> - <v>1298920</v> + <v>1300376</v> </e> </columnsizes> <dependencies> @@ -36347,7 +36469,7 @@ <b> <a>1</a> <b>2</b> - <v>1413997</v> + <v>1415581</v> </b> </bs> </hist> @@ -36363,12 +36485,12 @@ <b> <a>1</a> <b>2</b> - <v>1233695</v> + <v>1235077</v> </b> <b> <a>2</a> <b>13</b> - <v>65225</v> + <v>65298</v> </b> </bs> </hist> @@ -36378,19 +36500,19 @@ </relation> <relation> <name>jumpinfo</name> - <cardinality>254083</cardinality> + <cardinality>254471</cardinality> <columnsizes> <e> <k>id</k> - <v>254083</v> + <v>254471</v> </e> <e> <k>str</k> - <v>21159</v> + <v>21192</v> </e> <e> <k>target</k> - <v>53064</v> + <v>53145</v> </e> </columnsizes> <dependencies> @@ -36404,7 +36526,7 @@ <b> <a>1</a> <b>2</b> - <v>254083</v> + <v>254471</v> </b> </bs> </hist> @@ -36420,7 +36542,7 @@ <b> <a>1</a> <b>2</b> - <v>254083</v> + <v>254471</v> </b> </bs> </hist> @@ -36436,37 +36558,37 @@ <b> <a>2</a> <b>3</b> - <v>9879</v> + <v>9894</v> </b> <b> <a>3</a> <b>4</b> - <v>4247</v> + <v>4254</v> </b> <b> <a>4</a> <b>5</b> - <v>1566</v> + <v>1568</v> </b> <b> <a>5</a> <b>6</b> - <v>1340</v> + <v>1342</v> </b> <b> <a>6</a> <b>10</b> - <v>1700</v> + <v>1702</v> </b> <b> <a>10</a> <b>22</b> - <v>1621</v> + <v>1623</v> </b> <b> <a>22</a> <b>13723</b> - <v>804</v> + <v>805</v> </b> </bs> </hist> @@ -36482,17 +36604,17 @@ <b> <a>1</a> <b>2</b> - <v>16723</v> + <v>16748</v> </b> <b> <a>2</a> <b>3</b> - <v>2632</v> + <v>2636</v> </b> <b> <a>3</a> <b>10</b> - <v>1688</v> + <v>1690</v> </b> <b> <a>10</a> @@ -36518,27 +36640,27 @@ <b> <a>2</a> <b>3</b> - <v>26437</v> + <v>26478</v> </b> <b> <a>3</a> <b>4</b> - <v>12901</v> + <v>12921</v> </b> <b> <a>4</a> <b>5</b> - <v>5344</v> + <v>5352</v> </b> <b> <a>5</a> <b>8</b> - <v>4692</v> + <v>4699</v> </b> <b> <a>8</a> <b>2124</b> - <v>3662</v> + <v>3668</v> </b> </bs> </hist> @@ -36554,7 +36676,7 @@ <b> <a>1</a> <b>2</b> - <v>53064</v> + <v>53145</v> </b> </bs> </hist> @@ -36564,19 +36686,19 @@ </relation> <relation> <name>preprocdirects</name> - <cardinality>4421959</cardinality> + <cardinality>4389195</cardinality> <columnsizes> <e> <k>id</k> - <v>4421959</v> + <v>4389195</v> </e> <e> <k>kind</k> - <v>1147</v> + <v>1138</v> </e> <e> <k>location</k> - <v>4419352</v> + <v>4386607</v> </e> </columnsizes> <dependencies> @@ -36590,7 +36712,7 @@ <b> <a>1</a> <b>2</b> - <v>4421959</v> + <v>4389195</v> </b> </bs> </hist> @@ -36606,7 +36728,7 @@ <b> <a>1</a> <b>2</b> - <v>4421959</v> + <v>4389195</v> </b> </bs> </hist> @@ -36622,57 +36744,57 @@ <b> <a>1</a> <b>2</b> - <v>104</v> + <v>103</v> </b> <b> <a>122</a> <b>123</b> - <v>104</v> + <v>103</v> </b> <b> <a>694</a> <b>695</b> - <v>104</v> + <v>103</v> </b> <b> <a>799</a> <b>800</b> - <v>104</v> + <v>103</v> </b> <b> <a>932</a> <b>933</b> - <v>104</v> + <v>103</v> </b> <b> <a>1689</a> <b>1690</b> - <v>104</v> + <v>103</v> </b> <b> <a>1792</a> <b>1793</b> - <v>104</v> + <v>103</v> </b> <b> <a>3012</a> <b>3013</b> - <v>104</v> + <v>103</v> </b> <b> <a>3802</a> <b>3803</b> - <v>104</v> + <v>103</v> </b> <b> <a>6290</a> <b>6291</b> - <v>104</v> + <v>103</v> </b> <b> <a>23266</a> <b>23267</b> - <v>104</v> + <v>103</v> </b> </bs> </hist> @@ -36688,57 +36810,57 @@ <b> <a>1</a> <b>2</b> - <v>104</v> + <v>103</v> </b> <b> <a>122</a> <b>123</b> - <v>104</v> + <v>103</v> </b> <b> <a>694</a> <b>695</b> - <v>104</v> + <v>103</v> </b> <b> <a>799</a> <b>800</b> - <v>104</v> + <v>103</v> </b> <b> <a>932</a> <b>933</b> - <v>104</v> + <v>103</v> </b> <b> <a>1689</a> <b>1690</b> - <v>104</v> + <v>103</v> </b> <b> <a>1792</a> <b>1793</b> - <v>104</v> + <v>103</v> </b> <b> <a>3012</a> <b>3013</b> - <v>104</v> + <v>103</v> </b> <b> <a>3802</a> <b>3803</b> - <v>104</v> + <v>103</v> </b> <b> <a>6290</a> <b>6291</b> - <v>104</v> + <v>103</v> </b> <b> <a>23241</a> <b>23242</b> - <v>104</v> + <v>103</v> </b> </bs> </hist> @@ -36754,12 +36876,12 @@ <b> <a>1</a> <b>2</b> - <v>4419247</v> + <v>4386503</v> </b> <b> <a>26</a> <b>27</b> - <v>104</v> + <v>103</v> </b> </bs> </hist> @@ -36775,7 +36897,7 @@ <b> <a>1</a> <b>2</b> - <v>4419352</v> + <v>4386607</v> </b> </bs> </hist> @@ -36785,15 +36907,15 @@ </relation> <relation> <name>preprocpair</name> - <cardinality>1428440</cardinality> + <cardinality>1430040</cardinality> <columnsizes> <e> <k>begin</k> - <v>1194559</v> + <v>1195898</v> </e> <e> <k>elseelifend</k> - <v>1428440</v> + <v>1430040</v> </e> </columnsizes> <dependencies> @@ -36807,17 +36929,17 @@ <b> <a>1</a> <b>2</b> - <v>976520</v> + <v>977614</v> </b> <b> <a>2</a> <b>3</b> - <v>207790</v> + <v>208022</v> </b> <b> <a>3</a> <b>11</b> - <v>10249</v> + <v>10261</v> </b> </bs> </hist> @@ -36833,7 +36955,7 @@ <b> <a>1</a> <b>2</b> - <v>1428440</v> + <v>1430040</v> </b> </bs> </hist> @@ -36843,41 +36965,41 @@ </relation> <relation> <name>preproctrue</name> - <cardinality>765468</cardinality> + <cardinality>766326</cardinality> <columnsizes> <e> <k>branch</k> - <v>765468</v> + <v>766326</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>preprocfalse</name> - <cardinality>330786</cardinality> + <cardinality>331157</cardinality> <columnsizes> <e> <k>branch</k> - <v>330786</v> + <v>331157</v> </e> </columnsizes> <dependencies/> </relation> <relation> <name>preproctext</name> - <cardinality>3565497</cardinality> + <cardinality>3539079</cardinality> <columnsizes> <e> <k>id</k> - <v>3565497</v> + <v>3539079</v> </e> <e> <k>head</k> - <v>2583987</v> + <v>2564841</v> </e> <e> <k>body</k> - <v>1510176</v> + <v>1498986</v> </e> </columnsizes> <dependencies> @@ -36891,7 +37013,7 @@ <b> <a>1</a> <b>2</b> - <v>3565497</v> + <v>3539079</v> </b> </bs> </hist> @@ -36907,7 +37029,7 @@ <b> <a>1</a> <b>2</b> - <v>3565497</v> + <v>3539079</v> </b> </bs> </hist> @@ -36923,12 +37045,12 @@ <b> <a>1</a> <b>2</b> - <v>2437036</v> + <v>2418979</v> </b> <b> <a>2</a> <b>740</b> - <v>146950</v> + <v>145861</v> </b> </bs> </hist> @@ -36944,12 +37066,12 @@ <b> <a>1</a> <b>2</b> - <v>2521827</v> + <v>2503142</v> </b> <b> <a>2</a> <b>5</b> - <v>62159</v> + <v>61698</v> </b> </bs> </hist> @@ -36965,17 +37087,17 @@ <b> <a>1</a> <b>2</b> - <v>1367085</v> + <v>1356955</v> </b> <b> <a>2</a> <b>6</b> - <v>113263</v> + <v>112424</v> </b> <b> <a>6</a> <b>11630</b> - <v>29828</v> + <v>29607</v> </b> </bs> </hist> @@ -36991,17 +37113,17 @@ <b> <a>1</a> <b>2</b> - <v>1370109</v> + <v>1359957</v> </b> <b> <a>2</a> <b>7</b> - <v>113576</v> + <v>112734</v> </b> <b> <a>7</a> <b>2980</b> - <v>26490</v> + <v>26294</v> </b> </bs> </hist> @@ -37011,15 +37133,15 @@ </relation> <relation> <name>includes</name> - <cardinality>312616</cardinality> + <cardinality>312967</cardinality> <columnsizes> <e> <k>id</k> - <v>312616</v> + <v>312967</v> </e> <e> <k>included</k> - <v>116940</v> + <v>117071</v> </e> </columnsizes> <dependencies> @@ -37033,7 +37155,7 @@ <b> <a>1</a> <b>2</b> - <v>312616</v> + <v>312967</v> </b> </bs> </hist> @@ -37049,32 +37171,32 @@ <b> <a>1</a> <b>2</b> - <v>61032</v> + <v>61100</v> </b> <b> <a>2</a> <b>3</b> - <v>21897</v> + <v>21921</v> </b> <b> <a>3</a> <b>4</b> - <v>12579</v> + <v>12593</v> </b> <b> <a>4</a> <b>6</b> - <v>10249</v> + <v>10261</v> </b> <b> <a>6</a> <b>14</b> - <v>8852</v> + <v>8861</v> </b> <b> <a>14</a> <b>47</b> - <v>2329</v> + <v>2332</v> </b> </bs> </hist> @@ -37084,15 +37206,15 @@ </relation> <relation> <name>link_targets</name> - <cardinality>848</cardinality> + <cardinality>819</cardinality> <columnsizes> <e> <k>id</k> - <v>848</v> + <v>819</v> </e> <e> <k>binary</k> - <v>848</v> + <v>819</v> </e> </columnsizes> <dependencies> @@ -37106,7 +37228,7 @@ <b> <a>1</a> <b>2</b> - <v>848</v> + <v>819</v> </b> </bs> </hist> @@ -37122,7 +37244,7 @@ <b> <a>1</a> <b>2</b> - <v>848</v> + <v>819</v> </b> </bs> </hist> @@ -37132,15 +37254,15 @@ </relation> <relation> <name>link_parent</name> - <cardinality>39286447</cardinality> + <cardinality>38877182</cardinality> <columnsizes> <e> <k>element</k> - <v>4979610</v> + <v>4927618</v> </e> <e> <k>link_target</k> - <v>351</v> + <v>347</v> </e> </columnsizes> <dependencies> @@ -37154,17 +37276,17 @@ <b> <a>1</a> <b>2</b> - <v>671377</v> + <v>664255</v> </b> <b> <a>2</a> <b>9</b> - <v>26129</v> + <v>25852</v> </b> <b> <a>9</a> <b>10</b> - <v>4282103</v> + <v>4237510</v> </b> </bs> </hist> @@ -37180,52 +37302,52 @@ <b> <a>3</a> <b>4</b> - <v>35</v> + <v>34</v> </b> <b> - <a>121946</a> - <b>121947</b> - <v>35</v> + <a>121970</a> + <b>121971</b> + <v>34</v> </b> <b> - <a>122058</a> - <b>122059</b> - <v>35</v> + <a>122082</a> + <b>122083</b> + <v>34</v> </b> <b> - <a>122157</a> - <b>122158</b> - <v>35</v> + <a>122181</a> + <b>122182</b> + <v>34</v> </b> <b> - <a>122188</a> - <b>122189</b> - <v>35</v> + <a>122212</a> + <b>122213</b> + <v>34</v> </b> <b> - <a>122200</a> - <b>122201</b> - <v>35</v> + <a>122224</a> + <b>122225</b> + <v>34</v> </b> <b> - <a>122217</a> - <b>122218</b> - <v>35</v> + <a>122241</a> + <b>122242</b> + <v>34</v> </b> <b> - <a>124217</a> - <b>124218</b> - <v>35</v> + <a>124241</a> + <b>124242</b> + <v>34</v> </b> <b> - <a>128871</a> - <b>128872</b> - <v>35</v> + <a>128895</a> + <b>128896</b> + <v>34</v> </b> <b> - <a>131275</a> - <b>131276</b> - <v>35</v> + <a>131299</a> + <b>131300</b> + <v>34</v> </b> </bs> </hist> 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 From 560b355e0c2496929a0f26bbf5cdeb4b95cb7452 Mon Sep 17 00:00:00 2001 From: Michael Nebel <michaelnebel@github.com> Date: Wed, 13 Mar 2024 14:26:30 +0100 Subject: [PATCH 318/430] C#: Remove hard-coded local sources from the uncontrolled-format-string query. --- .../src/Security Features/CWE-134/UncontrolledFormatString.ql | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/csharp/ql/src/Security Features/CWE-134/UncontrolledFormatString.ql b/csharp/ql/src/Security Features/CWE-134/UncontrolledFormatString.ql index 657fdd0e183..7eec0bb90c6 100644 --- a/csharp/ql/src/Security Features/CWE-134/UncontrolledFormatString.ql +++ b/csharp/ql/src/Security Features/CWE-134/UncontrolledFormatString.ql @@ -17,9 +17,7 @@ import semmle.code.csharp.frameworks.Format import FormatString::PathGraph module FormatStringConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - source instanceof ThreatModelFlowSource 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() From e4a4c1816632a2dc1e5b99054076470d90b48464 Mon Sep 17 00:00:00 2001 From: Tom Hvitved <hvitved@github.com> Date: Mon, 11 Mar 2024 09:21:33 +0100 Subject: [PATCH 319/430] Go: Implement new data flow interface --- go/ql/lib/semmle/go/DiagnosticsReporting.qll | 3 +- go/ql/lib/semmle/go/Files.qll | 2 - go/ql/lib/semmle/go/HTML.qll | 8 - go/ql/lib/semmle/go/Locations.qll | 21 ++- go/ql/lib/semmle/go/dataflow/DataFlow.qll | 2 +- .../lib/semmle/go/dataflow/TaintTracking.qll | 3 +- .../go/dataflow/internal/DataFlowImpl.qll | 3 +- .../dataflow/internal/DataFlowImplCommon.qll | 3 +- .../internal/DataFlowImplConsistency.qll | 5 +- .../internal/DataFlowImplSpecific.qll | 3 +- .../go/dataflow/internal/DataFlowNodes.qll | 8 + .../go/dataflow/internal/DataFlowPrivate.qll | 2 - .../go/dataflow/internal/FlowSummaryImpl.qll | 8 +- .../internal/TaintTrackingImplSpecific.qll | 3 +- go/ql/lib/semmle/go/internal/Locations.qll | 143 ++++++++++++++++++ .../Security/CWE-338/InsecureRandomness.ql | 2 +- go/ql/test/TestUtilities/InlineFlowTest.qll | 4 +- .../internal/InlineExpectationsTestImpl.qll | 7 +- .../diagnostics/Diagnostics.ql | 8 +- 19 files changed, 200 insertions(+), 38 deletions(-) create mode 100644 go/ql/lib/semmle/go/internal/Locations.qll 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/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/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/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/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/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, _, _, _) From 02ae2d15207df8d6c977f0791d1c4fd14bf487df Mon Sep 17 00:00:00 2001 From: Tom Hvitved <hvitved@github.com> Date: Mon, 11 Mar 2024 13:19:21 +0100 Subject: [PATCH 320/430] Java: Implement new data flow interface --- java/ql/lib/semmle/code/java/dataflow/DataFlow.qll | 2 +- java/ql/lib/semmle/code/java/dataflow/TaintTracking.qll | 2 +- .../semmle/code/java/dataflow/internal/DataFlowImpl.qll | 3 ++- .../code/java/dataflow/internal/DataFlowImplCommon.qll | 3 ++- .../java/dataflow/internal/DataFlowImplConsistency.qll | 4 ++-- .../code/java/dataflow/internal/DataFlowImplSpecific.qll | 3 ++- .../semmle/code/java/dataflow/internal/DataFlowNodes.qll | 2 +- .../code/java/dataflow/internal/FlowSummaryImpl.qll | 8 ++++---- .../java/dataflow/internal/TaintTrackingImplSpecific.qll | 3 ++- java/ql/test-kotlin1/TestUtilities/InlineFlowTest.qll | 4 ++-- java/ql/test/TestUtilities/InlineFlowTest.qll | 4 ++-- 11 files changed, 21 insertions(+), 17 deletions(-) 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/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/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/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/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/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> From 6c0ed28e6b6485e6201fdd39013679dc230fefe0 Mon Sep 17 00:00:00 2001 From: Tom Hvitved <hvitved@github.com> Date: Mon, 11 Mar 2024 13:26:01 +0100 Subject: [PATCH 321/430] Python: Implement new data flow interface --- python/ql/consistency-queries/DataFlowConsistency.ql | 8 ++++++-- python/ql/lib/semmle/python/ApiGraphs.qll | 5 ++++- python/ql/lib/semmle/python/dataflow/new/DataFlow.qll | 2 +- .../ql/lib/semmle/python/dataflow/new/TaintTracking.qll | 2 +- .../python/dataflow/new/internal/DataFlowDispatch.qll | 2 +- .../semmle/python/dataflow/new/internal/DataFlowImpl.qll | 3 ++- .../python/dataflow/new/internal/DataFlowImplCommon.qll | 3 ++- .../python/dataflow/new/internal/DataFlowImplSpecific.qll | 2 +- .../python/dataflow/new/internal/DataFlowPublic.qll | 4 ++-- .../python/dataflow/new/internal/FlowSummaryImpl.qll | 4 ++-- .../dataflow/new/internal/TaintTrackingImplSpecific.qll | 3 ++- python/ql/lib/semmle/python/internal/CachedStages.qll | 2 +- 12 files changed, 25 insertions(+), 15 deletions(-) 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<PythonDataFlow> { +private module Input implements InputSig<Location, PythonDataFlow> { 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<PythonDataFlow> { } } -import MakeConsistency<PythonDataFlow, PythonTaintTracking, Input> +import MakeConsistency<Location, PythonDataFlow, PythonTaintTracking, Input> 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<PythonDataFlow> + import DataFlowMake<Location, PythonDataFlow> import internal.DataFlowImpl1 } 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<PythonDataFlow, PythonTaintTracking> + import TaintFlowMake<Location, PythonDataFlow, PythonTaintTracking> 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..5abb5e31edb 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -1595,7 +1595,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<PythonDataFlow> +private import semmle.python.Files +import MakeImpl<Location, PythonDataFlow> 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<PythonDataFlow> +private import semmle.python.Files +import MakeImplCommon<Location, PythonDataFlow> 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<Python::Location> { import Private import Public 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 73c87992c48..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 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..5e45a961b5b 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<DataFlowImplSpecific::PythonDataFlow> { +module Input implements InputSig<Location, DataFlowImplSpecific::PythonDataFlow> { class SummarizedCallableBase = string; ArgumentPosition callbackSelfParameterPosition() { result.isLambdaSelf() } @@ -83,7 +83,7 @@ module Input implements InputSig<DataFlowImplSpecific::PythonDataFlow> { } } -private import Make<DataFlowImplSpecific::PythonDataFlow, Input> as Impl +private import Make<Location, DataFlowImplSpecific::PythonDataFlow, Input> as Impl private module StepsInput implements Impl::Private::StepsInputSig { DataFlowCall getACall(Public::SummarizedCallable sc) { 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<PythonDataFlow> { +module PythonTaintTracking implements InputSig<Location, PythonDataFlow> { import TaintTrackingPrivate } 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 From 039bea1625b4c05e6b0bb91305e3041855a5fa78 Mon Sep 17 00:00:00 2001 From: Tony Torralba <atorralba@users.noreply.github.com> Date: Wed, 13 Mar 2024 16:59:38 +0100 Subject: [PATCH 322/430] Java: Add more neutral JDK models This is similar to https://github.com/github/codeql/pull/15766, in the sense that it adds neutral models to prevent the model generator from generating summaries for them. These models were spotted while evaluating https://github.com/github/codeql/pull/14919. --- java/ql/lib/ext/java.beans.model.yml | 9 +++++++++ java/ql/lib/ext/java.io.model.yml | 3 +++ java/ql/lib/ext/java.net.model.yml | 7 +++++++ java/ql/lib/ext/java.util.logging.yml | 8 ++++++++ java/ql/lib/ext/java.util.model.yml | 4 ++++ java/ql/lib/ext/java.util.prefs.model.yml | 2 ++ java/ql/lib/ext/java.util.regex.model.yml | 5 +++++ java/ql/lib/ext/javax.crypto.model.yml | 2 ++ java/ql/lib/ext/javax.crypto.spec.model.yml | 5 +++++ 9 files changed, 45 insertions(+) create mode 100644 java/ql/lib/ext/java.util.logging.yml diff --git a/java/ql/lib/ext/java.beans.model.yml b/java/ql/lib/ext/java.beans.model.yml index b9d06ea5694..53e8522643a 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", "manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs + - ["java.beans", "PropertyEditor", "getValue", "()", "summary", "manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs + - ["java.beans", "PropertyEditor", "setAsText", "()", "summary", "manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs + - ["java.beans", "PropertyEditor", "setValue", "()", "summary", "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..bcf0494da8f 100644 --- a/java/ql/lib/ext/java.io.model.yml +++ b/java/ql/lib/ext/java.io.model.yml @@ -116,9 +116,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", "manual"] - ["java.io", "File", "mkdirs", "()", "summary", "manual"] - ["java.io", "FileInputStream", "FileInputStream", "(File)", "summary", "manual"] + - ["java.io", "FileInputStream", "FileInputStream", "(String)", "summary", "manual"] - ["java.io", "InputStream", "close", "()", "summary", "manual"] + - ["java.io", "ObjectInput", "readObject", "()", "summary", "manual"] - ["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.net.model.yml b/java/ql/lib/ext/java.net.model.yml index afdf3320b08..5eb501d19d9 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", "manual"] + - ["java.net", "Socket", "connect", "(SocketAddress,int)", "summary", "manual"] 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..d2620776d9a --- /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", "manual"] + - ["java.util.logging", "LogRecord", "setParameters", "", "summary", "manual"] diff --git a/java/ql/lib/ext/java.util.model.yml b/java/ql/lib/ext/java.util.model.yml index bd6e58918aa..87675d49f96 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", "manual"] + - ["java.util", "ConcurrentHashMap", False, "ConcurrentHashMap", "(Map)", "", "Argument[0].MapValue", "Argument[this].MapValue", "value", "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"] @@ -428,6 +430,7 @@ extensions: - ["java.util", "Collections", "emptySet", "()", "summary", "manual"] - ["java.util", "Collections", "sort", "", "summary", "manual"] - ["java.util", "Enumeration", "hasMoreElements", "()", "summary", "manual"] + - ["java.util", "EnumSet", "copyOf", "(EnumSet)", "summary", "manual"] - ["java.util", "HashMap", "containsKey", "(Object)", "summary", "manual"] - ["java.util", "HashMap", "HashMap", "(int)", "summary", "manual"] - ["java.util", "HashMap", "size", "()", "summary", "manual"] @@ -454,6 +457,7 @@ 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", "manual"] - ["java.util", "Set", "contains", "(Object)", "summary", "manual"] - ["java.util", "Set", "isEmpty", "()", "summary", "manual"] - ["java.util", "Set", "size", "()", "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..cb299746343 100644 --- a/java/ql/lib/ext/java.util.prefs.model.yml +++ b/java/ql/lib/ext/java.util.prefs.model.yml @@ -3,6 +3,8 @@ extensions: pack: codeql/java-all extensible: neutralModel data: + # summary neutrals + - ["java.util.prefs", "Preferences", "get", "(String,String)", "summary", "manual"] # 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..02519c64af1 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", "manual"] + - ["java.util.regex", "Matcher", "appendTail", "(StringBuffer)", "summary", "manual"] - ["java.util.regex", "Matcher", "find", "()", "summary", "manual"] + - ["java.util.regex", "Matcher", "pattern", "()", "summary", "manual"] + - ["java.util.regex", "Pattern", "compile", "(String,int)", "summary", "manual"] + - ["java.util.regex", "Pattern", "pattern", "()", "summary", "manual"] diff --git a/java/ql/lib/ext/javax.crypto.model.yml b/java/ql/lib/ext/javax.crypto.model.yml index 9c909320344..40db2df856f 100644 --- a/java/ql/lib/ext/javax.crypto.model.yml +++ b/java/ql/lib/ext/javax.crypto.model.yml @@ -24,3 +24,5 @@ extensions: - ["javax.crypto", "Cipher", "update", "", "summary", "manual"] - ["javax.crypto", "Cipher", "updateAAD", "", "summary", "manual"] - ["javax.crypto", "Cipher", "wrap", "", "summary", "manual"] + - ["javax.crypto", "Mac", "init", "(Key)", "summary", "manual"] + - ["javax.crypto", "Mac", "doFinal", "()", "summary", "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..759197d52e7 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", "manual"] From 54fa8181da3527974a8ca0ce6572dbb23783dba8 Mon Sep 17 00:00:00 2001 From: Tom Hvitved <hvitved@github.com> Date: Wed, 13 Mar 2024 20:03:01 +0100 Subject: [PATCH 323/430] Address review comment --- javascript/ql/lib/semmle/javascript/SSA.qll | 8 ++ .../semmle/javascript/dataflow/DataFlow.qll | 122 ++++-------------- .../javascript/internal/CachedStages.qll | 2 - .../semmle/javascript/internal/Locations.qll | 2 +- 4 files changed, 32 insertions(+), 102 deletions(-) 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/dataflow/DataFlow.qll b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll index 6d091a720af..79fede61b8f 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll @@ -145,20 +145,15 @@ 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. */ - 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) - ) - } + cached + Location getLocation() { none() } /** Gets the file this data flow node comes from. */ File getFile() { none() } // overridden in subclasses @@ -300,11 +295,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() } @@ -325,11 +318,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() } @@ -348,13 +337,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() } @@ -375,11 +358,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() } @@ -400,11 +379,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() } @@ -429,11 +404,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() } @@ -453,11 +424,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" } @@ -474,11 +441,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() } @@ -968,11 +931,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 } @@ -990,11 +949,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 } @@ -1012,11 +967,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() } @@ -1038,11 +989,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() } @@ -1064,11 +1011,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() } @@ -1090,11 +1033,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() } @@ -1366,15 +1305,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() ) } @@ -1393,11 +1327,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() } } @@ -1409,13 +1339,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/internal/CachedStages.qll b/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll index 09d52e89ee0..39da790b6b9 100644 --- a/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll +++ b/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll @@ -136,8 +136,6 @@ module Stages { or exists(DataFlow::ssaDefinitionNode(_)) or - any(DataFlow::Node node).hasLocationInfo(_, _, _, _, _) - or exists(any(DataFlow::Node node).getLocation()) or exists(any(DataFlow::Node node).toString()) diff --git a/javascript/ql/lib/semmle/javascript/internal/Locations.qll b/javascript/ql/lib/semmle/javascript/internal/Locations.qll index 4a21f4a6b98..d1dc8d403f7 100644 --- a/javascript/ql/lib/semmle/javascript/internal/Locations.qll +++ b/javascript/ql/lib/semmle/javascript/internal/Locations.qll @@ -9,7 +9,7 @@ import javascript 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 + 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 From 866a3934d4af805ba4a8b50245c3420fe579c10c Mon Sep 17 00:00:00 2001 From: Jeroen Ketema <jketema@github.com> Date: Wed, 13 Mar 2024 20:17:00 +0100 Subject: [PATCH 324/430] C++: suppress destructors with reuse expressions until proper support is added --- .../raw/internal/TranslatedElement.qll | 5 +++++ .../raw/internal/TranslatedStmt.qll | 20 ++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) 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 a9d4b6e1095..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 @@ -99,6 +99,11 @@ private predicate ignoreExprAndDescendants(Expr 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 + ) } /** 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() } From ef8368cfc4a7201187e8e677fa940347b424287d Mon Sep 17 00:00:00 2001 From: erik-krogh <erik-krogh@github.com> Date: Wed, 13 Mar 2024 22:37:13 +0100 Subject: [PATCH 325/430] fix typo --- csharp/ql/src/Security Features/CWE-601/UrlRedirect.qhelp | 2 +- java/ql/src/Security/CWE/CWE-601/UrlRedirect.qhelp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 ( <li> OWASP: -<a href="https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html">XSS +<a href="https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html"> Unvalidated Redirects and Forwards Cheat Sheet</a>. </li> <li> diff --git a/java/ql/src/Security/CWE/CWE-601/UrlRedirect.qhelp b/java/ql/src/Security/CWE/CWE-601/UrlRedirect.qhelp index eddca4f62f6..4325ccf5430 100644 --- a/java/ql/src/Security/CWE/CWE-601/UrlRedirect.qhelp +++ b/java/ql/src/Security/CWE/CWE-601/UrlRedirect.qhelp @@ -57,7 +57,7 @@ which is harmless but perhaps not intended. You can substitute your own domain ( <li> OWASP: -<a href="https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html">XSS +<a href="https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html"> Unvalidated Redirects and Forwards Cheat Sheet</a>. </li> <li> From 61597f5ac79b2a38285a2299fc0d5439d6257ae0 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Wed, 13 Mar 2024 22:37:03 +0000 Subject: [PATCH 326/430] C++: This commit does two things: 1. It fixes a logic error in the cannotContainString predicate. 2. It reverts the changes to the `isSource` predicate that required the external function to be within the source root. The change to `isSource` was meant to fix the a performance problem that occurred because of the logic error in the cannotContainString predicate. However, now that the logic error is fixed this is no longer necessary :tada: --- .../Likely Bugs/Format/NonConstantFormat.ql | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql index 3e9576de175..62c3c98e197 100644 --- a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql +++ b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql @@ -37,6 +37,11 @@ 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. @@ -51,7 +56,7 @@ predicate cannotContainString(Type t) { not unspecified instanceof Char16Type and not unspecified instanceof Char32Type and // C often defines `wchar_t` as `unsigned short` - unspecified = any(ShortType short | not short.isUnsigned()) + not unspecified instanceof UnsignedShort | unspecified instanceof ArithmeticType or unspecified instanceof BuiltInType @@ -63,14 +68,6 @@ predicate dataFlowOrTaintFlowFunction(Function func, FunctionOutput output) { func.(TaintFunction).hasTaintFlow(_, output) } -/** Holds if `func` is declared inside the source root. */ -predicate isInsideSourceRoot(Function func) { - exists(File f | - f = func.getFile() and - exists(f.getRelativePath()) - ) -} - /** * Holds if `node` is a non-constant source of data flow for non-const format string detection. * This is defined as either: @@ -119,8 +116,7 @@ predicate isNonConst(DataFlow::Node node) { // The function's output must also not be const to be considered a non-const source exists(Function func, CallInstruction call | not func.hasDefinition() and - func = call.getStaticCallTarget() and - isInsideSourceRoot(func) + func = call.getStaticCallTarget() | // Case 1: It's a known dataflow or taintflow function with flow to the return value call.getUnconvertedResultExpression() = node.asIndirectExpr() and From d1c253b5193db7f758792660319fd6ef17d10fa7 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Wed, 13 Mar 2024 22:41:32 +0000 Subject: [PATCH 327/430] C++: Accept test changes. --- .../Format/NonConstantFormat/NonConstantFormat.expected | 4 ++++ .../Likely Bugs/Format/NonConstantFormat/nested.cpp | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) 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 7cdf2ada53a..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 @@ -7,6 +7,7 @@ edges | 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 | | @@ -34,6 +35,8 @@ nodes | 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 | @@ -65,6 +68,7 @@ subpaths | 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 | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/nested.cpp b/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/nested.cpp index 40a88ee7fc0..1c3d2513da5 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/nested.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/nested.cpp @@ -84,7 +84,7 @@ namespace ns { class blab { void out1(void) { char *fmt = (char *)__builtin_alloca(10); - diagnostic(fmt); // BAD [NOT DETECTED] + diagnostic(fmt); // BAD } }; } From a839c929792d101a94d0f066bf28a23fa99b573c Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Wed, 13 Mar 2024 22:57:38 +0000 Subject: [PATCH 328/430] C++: Fix mapping issue between dataflow nodes and expressions when the expression is a prvalue. --- .../cpp/ir/dataflow/internal/DataFlowUtil.qll | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) 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 b411790596e..6d24664331f 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 @@ -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 position) is a PR value and the + // parameter (qualifier or positional) is a (const) reference, IR + // construction introduces a temporary `IRVariable`. The `VariableAddress` + // instruction has the argument as it's `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 IndirectTemporaryExpr extends ExprNodeBase instanceof IndirectOperand { + IndirectTemporaryExpr() { exprNodeShouldBeIndirectOperand(this, _, _) } + + final override Expr getConvertedExpr(int n) { exprNodeShouldBeIndirectOperand(this, result, n) } +} + /** * An expression, viewed as a node in a data flow graph. */ From b5f349bd2c5a982a5ce6973f716598f4160d5e36 Mon Sep 17 00:00:00 2001 From: Tamas Vajk <tamasvajk@github.com> Date: Thu, 14 Mar 2024 08:37:22 +0100 Subject: [PATCH 329/430] C#: Handle namespace resolution error more gracefully --- .../Entities/NamespaceDeclaration.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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())); From 36f6a6fb10cb0bdb04cc807675675f5257f0a554 Mon Sep 17 00:00:00 2001 From: Tony Torralba <atorralba@users.noreply.github.com> Date: Thu, 14 Mar 2024 08:46:43 +0100 Subject: [PATCH 330/430] Model more EnumSet methods as neutrals --- java/ql/lib/ext/java.util.model.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/java/ql/lib/ext/java.util.model.yml b/java/ql/lib/ext/java.util.model.yml index 87675d49f96..0cc520f28f8 100644 --- a/java/ql/lib/ext/java.util.model.yml +++ b/java/ql/lib/ext/java.util.model.yml @@ -430,7 +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", "manual"] + - ["java.util", "EnumSet", "clone", "()", "summary", "manual"] + - ["java.util", "EnumSet", "complementOf", "(EnumSet)", "summary", "manual"] + - ["java.util", "EnumSet", "copyOf", "(Collection)", "summary", "manual"] - ["java.util", "EnumSet", "copyOf", "(EnumSet)", "summary", "manual"] + - ["java.util", "EnumSet", "noneOf", "(Class)", "summary", "manual"] + - ["java.util", "EnumSet", "of", "", "summary", "manual"] + - ["java.util", "EnumSet", "range", "(Object,Object)", "summary", "manual"] - ["java.util", "HashMap", "containsKey", "(Object)", "summary", "manual"] - ["java.util", "HashMap", "HashMap", "(int)", "summary", "manual"] - ["java.util", "HashMap", "size", "()", "summary", "manual"] From 5b88b8a3ed2d3b5a96d41f2fd0f8e20b74628c56 Mon Sep 17 00:00:00 2001 From: Tony Torralba <atorralba@users.noreply.github.com> Date: Thu, 14 Mar 2024 08:47:40 +0100 Subject: [PATCH 331/430] A few more neutrals --- java/ql/lib/ext/java.nio.file.model.yml | 1 + java/ql/lib/ext/java.util.prefs.model.yml | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/ext/java.nio.file.model.yml b/java/ql/lib/ext/java.nio.file.model.yml index 39a83291fc0..c04ae453ba3 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", "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.util.prefs.model.yml b/java/ql/lib/ext/java.util.prefs.model.yml index cb299746343..8d33596bcfc 100644 --- a/java/ql/lib/ext/java.util.prefs.model.yml +++ b/java/ql/lib/ext/java.util.prefs.model.yml @@ -4,7 +4,20 @@ extensions: extensible: neutralModel data: # summary neutrals - - ["java.util.prefs", "Preferences", "get", "(String,String)", "summary", "manual"] + - ["java.util.prefs", "Preferences", "get", "(String,String)", "summary", "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", "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", "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", "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", "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", "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", "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", "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", "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", "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", "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", "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", "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", "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"] From eecab9122a7524371635e822781117048465c219 Mon Sep 17 00:00:00 2001 From: Tony Torralba <atorralba@users.noreply.github.com> Date: Thu, 14 Mar 2024 08:55:47 +0100 Subject: [PATCH 332/430] Recognize the model generator involvement in the models' provenances --- java/ql/lib/ext/java.beans.model.yml | 8 +++--- java/ql/lib/ext/java.io.model.yml | 7 +++--- java/ql/lib/ext/java.net.model.yml | 4 +-- java/ql/lib/ext/java.nio.file.model.yml | 2 +- java/ql/lib/ext/java.util.logging.yml | 4 +-- java/ql/lib/ext/java.util.model.yml | 22 ++++++++-------- java/ql/lib/ext/java.util.prefs.model.yml | 28 ++++++++++----------- java/ql/lib/ext/java.util.regex.model.yml | 10 ++++---- java/ql/lib/ext/javax.crypto.model.yml | 4 +-- java/ql/lib/ext/javax.crypto.spec.model.yml | 2 +- 10 files changed, 45 insertions(+), 46 deletions(-) diff --git a/java/ql/lib/ext/java.beans.model.yml b/java/ql/lib/ext/java.beans.model.yml index 53e8522643a..30667ec6961 100644 --- a/java/ql/lib/ext/java.beans.model.yml +++ b/java/ql/lib/ext/java.beans.model.yml @@ -9,7 +9,7 @@ extensions: extensible: neutralModel data: # summary neutrals - - ["java.beans", "PropertyEditor", "getAsText", "()", "summary", "manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs - - ["java.beans", "PropertyEditor", "getValue", "()", "summary", "manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs - - ["java.beans", "PropertyEditor", "setAsText", "()", "summary", "manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs - - ["java.beans", "PropertyEditor", "setValue", "()", "summary", "manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs + - ["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 bcf0494da8f..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,12 +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", "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", "manual"] + - ["java.io", "FileInputStream", "FileInputStream", "(String)", "summary", "df-manual"] - ["java.io", "InputStream", "close", "()", "summary", "manual"] - - ["java.io", "ObjectInput", "readObject", "()", "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.net.model.yml b/java/ql/lib/ext/java.net.model.yml index 5eb501d19d9..19044ec7a40 100644 --- a/java/ql/lib/ext/java.net.model.yml +++ b/java/ql/lib/ext/java.net.model.yml @@ -66,5 +66,5 @@ extensions: extensible: neutralModel data: # summary neutrals - - ["java.net", "Socket", "getOutputStream", "()", "summary", "manual"] - - ["java.net", "Socket", "connect", "(SocketAddress,int)", "summary", "manual"] + - ["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 c04ae453ba3..fc0648c85aa 100644 --- a/java/ql/lib/ext/java.nio.file.model.yml +++ b/java/ql/lib/ext/java.nio.file.model.yml @@ -91,7 +91,7 @@ extensions: data: # summary neutrals - ["java.nio.file", "Files", "exists", "(Path,LinkOption[])", "summary", "manual"] - - ["java.nio.file", "Files", "newInputStream", "(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.util.logging.yml b/java/ql/lib/ext/java.util.logging.yml index d2620776d9a..c4bf4e77300 100644 --- a/java/ql/lib/ext/java.util.logging.yml +++ b/java/ql/lib/ext/java.util.logging.yml @@ -4,5 +4,5 @@ extensions: extensible: neutralModel data: # summary neutrals - - ["java.util.logging", "LogRecord", "getResourceBundle", "()", "summary", "manual"] - - ["java.util.logging", "LogRecord", "setParameters", "", "summary", "manual"] + - ["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 0cc520f28f8..7ab6780b8f8 100644 --- a/java/ql/lib/ext/java.util.model.yml +++ b/java/ql/lib/ext/java.util.model.yml @@ -107,8 +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", "manual"] - - ["java.util", "ConcurrentHashMap", False, "ConcurrentHashMap", "(Map)", "", "Argument[0].MapValue", "Argument[this].MapValue", "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"] @@ -430,14 +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", "manual"] - - ["java.util", "EnumSet", "clone", "()", "summary", "manual"] - - ["java.util", "EnumSet", "complementOf", "(EnumSet)", "summary", "manual"] - - ["java.util", "EnumSet", "copyOf", "(Collection)", "summary", "manual"] - - ["java.util", "EnumSet", "copyOf", "(EnumSet)", "summary", "manual"] - - ["java.util", "EnumSet", "noneOf", "(Class)", "summary", "manual"] - - ["java.util", "EnumSet", "of", "", "summary", "manual"] - - ["java.util", "EnumSet", "range", "(Object,Object)", "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"] @@ -464,7 +464,7 @@ 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", "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"] diff --git a/java/ql/lib/ext/java.util.prefs.model.yml b/java/ql/lib/ext/java.util.prefs.model.yml index 8d33596bcfc..11289e0782b 100644 --- a/java/ql/lib/ext/java.util.prefs.model.yml +++ b/java/ql/lib/ext/java.util.prefs.model.yml @@ -4,20 +4,20 @@ extensions: extensible: neutralModel data: # summary neutrals - - ["java.util.prefs", "Preferences", "get", "(String,String)", "summary", "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", "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", "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", "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", "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", "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", "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", "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", "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", "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", "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", "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", "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", "manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs + - ["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 02519c64af1..4f0776e59bd 100644 --- a/java/ql/lib/ext/java.util.regex.model.yml +++ b/java/ql/lib/ext/java.util.regex.model.yml @@ -30,9 +30,9 @@ extensions: pack: codeql/java-all extensible: neutralModel data: - - ["java.util.regex", "Matcher", "appendReplacement", "(StringBuffer,String)", "summary", "manual"] - - ["java.util.regex", "Matcher", "appendTail", "(StringBuffer)", "summary", "manual"] + - ["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", "manual"] - - ["java.util.regex", "Pattern", "compile", "(String,int)", "summary", "manual"] - - ["java.util.regex", "Pattern", "pattern", "()", "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/javax.crypto.model.yml b/java/ql/lib/ext/javax.crypto.model.yml index 40db2df856f..53b54f1a22d 100644 --- a/java/ql/lib/ext/javax.crypto.model.yml +++ b/java/ql/lib/ext/javax.crypto.model.yml @@ -24,5 +24,5 @@ extensions: - ["javax.crypto", "Cipher", "update", "", "summary", "manual"] - ["javax.crypto", "Cipher", "updateAAD", "", "summary", "manual"] - ["javax.crypto", "Cipher", "wrap", "", "summary", "manual"] - - ["javax.crypto", "Mac", "init", "(Key)", "summary", "manual"] - - ["javax.crypto", "Mac", "doFinal", "()", "summary", "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 759197d52e7..2a88b6275fd 100644 --- a/java/ql/lib/ext/javax.crypto.spec.model.yml +++ b/java/ql/lib/ext/javax.crypto.spec.model.yml @@ -30,4 +30,4 @@ extensions: pack: codeql/java-all extensible: neutralModel data: - - ["javax.crypto.spec", "SecretKeySpec", "SecretKeySpec", "(byte[],String)", "summary", "manual"] + - ["javax.crypto.spec", "SecretKeySpec", "SecretKeySpec", "(byte[],String)", "summary", "df-manual"] From 9d44045e6f2601e46270deb36a82363bbcba63a7 Mon Sep 17 00:00:00 2001 From: Tony Torralba <atorralba@users.noreply.github.com> Date: Thu, 14 Mar 2024 09:41:34 +0100 Subject: [PATCH 333/430] Adjust test expectations --- java/ql/test/ext/TestModels/Test.java | 3 --- .../TopJdkApisTest/TopJdkApis/java/io/File.java | 2 +- .../TopJdkApisTest/TopJdkApisTest.expected | 2 +- 3 files changed, 2 insertions(+), 5 deletions(-) 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/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 df21c086b2f..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,5 +1,5 @@ | java.awt | 0 | 0 | 2 | 1 | 3 | 0.6666666666666666 | 0.0 | 0.6666666666666666 | 0.0 | NaN | 0.3333333333333333 | -| java.io | 0 | 0 | 21 | 15 | 36 | 0.5833333333333334 | 0.0 | 0.5833333333333334 | 0.0 | NaN | 0.4166666666666667 | +| 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 | From d8c0ab8e1f2a8c2d7bd35025f99fee8329d3cd54 Mon Sep 17 00:00:00 2001 From: Tony Torralba <atorralba@users.noreply.github.com> Date: Thu, 14 Mar 2024 10:11:39 +0100 Subject: [PATCH 334/430] Go: Consider more strings as hardcoded credentials --- go/ql/lib/semmle/go/security/HardcodedCredentials.qll | 6 +----- go/ql/src/Security/CWE-798/HardcodedCredentials.ql | 4 ++-- 2 files changed, 3 insertions(+), 7 deletions(-) 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/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() From c375497fa531c375fb8b9a1606390d504fc09d24 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Thu, 14 Mar 2024 09:16:04 +0000 Subject: [PATCH 335/430] Update cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll --- .../lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 6d24664331f..db92731e3b1 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 @@ -1354,7 +1354,7 @@ private predicate exprNodeShouldBeIndirectOperand(IndirectOperand node, Expr e, // When an argument (qualifier or position) is a PR value and the // parameter (qualifier or positional) is a (const) reference, IR // construction introduces a temporary `IRVariable`. The `VariableAddress` - // instruction has the argument as it's `getConvertedResultExpression` + // 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. From a24432baccc03cc29ed31e840768c534aa34b6af Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Thu, 14 Mar 2024 09:23:33 +0000 Subject: [PATCH 336/430] Update cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll --- .../lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 db92731e3b1..a3459c3ed10 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 @@ -1351,7 +1351,7 @@ 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 position) is a PR value and the + // 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` From 87b2dcc89245de8dbfae1c4d948ef55e02254cbc Mon Sep 17 00:00:00 2001 From: Tony Torralba <atorralba@users.noreply.github.com> Date: Thu, 14 Mar 2024 10:25:04 +0100 Subject: [PATCH 337/430] Adjust test expectations --- .../CWE-798/HardcodedCredentials.expected | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) 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 | From 20691e409cc0cff6472f03f846a533b12881db97 Mon Sep 17 00:00:00 2001 From: Tony Torralba <atorralba@users.noreply.github.com> Date: Thu, 14 Mar 2024 11:56:43 +0100 Subject: [PATCH 338/430] Add change note --- .../2024-03-14-hardcoded-credentials-more-sources.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 go/ql/src/change-notes/2024-03-14-hardcoded-credentials-more-sources.md 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. From 7fdea27d331d7aae758aa0d6b2291cd043ae28b1 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Thu, 14 Mar 2024 11:46:15 +0000 Subject: [PATCH 339/430] C++: Rename 'IndirectTemporaryExpr' to 'IndirectOperandExprNode'. --- .../lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 a3459c3ed10..046e37ae6be 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 @@ -1552,8 +1552,8 @@ private class IndirectArgumentOutExprNode extends ExprNodeBase, IndirectArgument final override Expr getConvertedExpr(int n) { exprNodeShouldBeIndirectOutNode(this, result, n) } } -private class IndirectTemporaryExpr extends ExprNodeBase instanceof IndirectOperand { - IndirectTemporaryExpr() { exprNodeShouldBeIndirectOperand(this, _, _) } +private class IndirectOperandExprNode extends ExprNodeBase instanceof IndirectOperand { + IndirectOperandExprNode() { exprNodeShouldBeIndirectOperand(this, _, _) } final override Expr getConvertedExpr(int n) { exprNodeShouldBeIndirectOperand(this, result, n) } } From 8c31b612ca01c004e3bbfab2881b2d2bb60ebd88 Mon Sep 17 00:00:00 2001 From: Joe Farebrother <joefarebrother@github.com> Date: Wed, 13 Mar 2024 15:48:21 +0000 Subject: [PATCH 340/430] Model UploadedFile `original_filename` and `read` --- .../ruby/frameworks/ActionController.qll | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll index be1df5066e1..c6d6014f8da 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 field of an instance of `ActionController::Parameters` */ + private DataFlow::LocalSourceNode paramsField() { + result = + [ + paramsInstance(), + paramsInstance().getAMethodCall(methodReturnsTaintFromSelf()).getAnElementRead*() + ] + } + + private DataFlow::LocalSourceNode paramsFieldType(TypeTracker t) { + t.start() and + result = paramsField() + or + exists(TypeTracker t2 | result = paramsFieldType(t2).track(t2, t)) + } + + /** Gets a node with a type that can be a field of `ActionController::Parameters */ + private DataFlow::LocalSourceNode paramsFieldType() { + paramsFieldType(TypeTracker::end()).flowsTo(result) + } + /** * A flow summary for methods on `ActionController::Parameters` which * propagate taint from receiver to return value. @@ -569,6 +591,44 @@ private module ParamsSummaries { preservesValue = false } } + + /** Flow summaries for `ActiveDispatch::Http::UploadedFile`, which can be an field of `ActionController::Parameters`. */ + module UploadedFileSummaries { + /** Flow summary for `ActiveDispatch::Http::UploadedFile.original_filename` */ + private class UploadedFileOriginalFilenameSummary extends SummarizedCallable { + UploadedFileOriginalFilenameSummary() { + this = "ActionDispatch::Http::UploadedFile::original_filename" + } + + override MethodCall getACall() { + result = paramsFieldType().getAMethodCall("original_filename").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.original_filename`, + * which propagates taint from the receiver to the return value or to the second (buffer) argument + */ + private class UploadedFileReadSummary extends SummarizedCallable { + UploadedFileReadSummary() { this = "ActionDispatch::Http::UploadedFile::read" } + + override MethodCall getACall() { + result = paramsFieldType().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 + } + } + } } /** From 5333c759192212565762a33680bf9e843daac11c Mon Sep 17 00:00:00 2001 From: Joe Farebrother <joefarebrother@github.com> Date: Thu, 14 Mar 2024 14:44:20 +0000 Subject: [PATCH 341/430] Model additional string attributes --- .../codeql/ruby/frameworks/ActionController.qll | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll index c6d6014f8da..0c49b1f074f 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll @@ -594,14 +594,18 @@ private module ParamsSummaries { /** Flow summaries for `ActiveDispatch::Http::UploadedFile`, which can be an field of `ActionController::Parameters`. */ module UploadedFileSummaries { - /** Flow summary for `ActiveDispatch::Http::UploadedFile.original_filename` */ - private class UploadedFileOriginalFilenameSummary extends SummarizedCallable { - UploadedFileOriginalFilenameSummary() { - this = "ActionDispatch::Http::UploadedFile::original_filename" + /** 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 = paramsFieldType().getAMethodCall("original_filename").asExpr().getExpr() and + result = + paramsFieldType() + .getAMethodCall(["original_filename", "content_type", "headers"]) + .asExpr() + .getExpr() and result.getNumberOfArguments() = 0 } From 3e61be1b6a1a20db3ffb6624c57fc558ce830715 Mon Sep 17 00:00:00 2001 From: Joe Farebrother <joefarebrother@github.com> Date: Thu, 14 Mar 2024 14:46:46 +0000 Subject: [PATCH 342/430] Add test cases --- .../dataflow/local/TaintStep.expected | 3 ++ .../ActionController.expected | 25 ++++++++++++ .../action_controller/params-flow.expected | 40 +++++++++++++++++++ .../action_controller/params_flow.rb | 29 ++++++++++++++ 4 files changed, 97 insertions(+) diff --git a/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected b/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected index f640ff6551a..e73f2e3cb10 100644 --- a/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected +++ b/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected @@ -2835,6 +2835,9 @@ | 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 \| | 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..7e5b5d6d001 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:205:5 | 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:201:5 | m40 | +| params_flow.rb:203:3:205: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:199:5:199:10 | call to params | +| params_flow.rb:204:10:204:15 | 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:199:5:199:10 | call to params | +| params_flow.rb:204:10:204:15 | 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:199:5:199:10 | call to params | ActionController::Metal#params | +| params_flow.rb:204:10:204:15 | 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..698d3b23ccb 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,21 @@ 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 | | 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 +259,26 @@ 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 | 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 +333,8 @@ 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 | 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..018d8b58af0 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 # $ MISSING:hasTaintFlow + end +end \ No newline at end of file From b4ed77343b77cdc16aea4e04af294883ebbefdb7 Mon Sep 17 00:00:00 2001 From: Joe Farebrother <joefarebrother@github.com> Date: Thu, 14 Mar 2024 15:44:53 +0000 Subject: [PATCH 343/430] Add change note + fix qldoc --- .../2024-03-14-actiondispatch-uploadedfile.md | 4 ++++ ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll | 8 ++++---- .../test/library-tests/dataflow/local/TaintStep.expected | 6 +++--- 3 files changed, 11 insertions(+), 7 deletions(-) create mode 100644 ruby/ql/lib/change-notes/2024-03-14-actiondispatch-uploadedfile.md 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/frameworks/ActionController.qll b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll index 0c49b1f074f..7578ba52bb1 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll @@ -597,7 +597,7 @@ private module ParamsSummaries { /** 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]" + this = "ActionDispatch::Http::UploadedFile#[original_filename,content_type,headers]" } override MethodCall getACall() { @@ -615,11 +615,11 @@ private module ParamsSummaries { } /** - * Flow summary for `ActiveDispatch::Http::UploadedFile.original_filename`, - * which propagates taint from the receiver to the return value or to the second (buffer) argument + * 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" } + UploadedFileReadSummary() { this = "ActionDispatch::Http::UploadedFile#read" } override MethodCall getACall() { result = paramsFieldType().getAMethodCall("read").asExpr().getExpr() and diff --git a/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected b/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected index e73f2e3cb10..44f879946ab 100644 --- a/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected +++ b/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected @@ -2835,9 +2835,9 @@ | 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 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 \| | From f464f1b94ef8a3326a51689729c020636ac688e2 Mon Sep 17 00:00:00 2001 From: Joe Farebrother <joefarebrother@github.com> Date: Thu, 14 Mar 2024 16:36:26 +0000 Subject: [PATCH 344/430] Accept test output + fix qldoc typo --- .../ruby/frameworks/ActionController.qll | 2 +- .../ActionController.expected | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll index 7578ba52bb1..19dcb82cfd6 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll @@ -522,7 +522,7 @@ private module ParamsSummaries { exists(TypeTracker t2 | result = paramsFieldType(t2).track(t2, t)) } - /** Gets a node with a type that can be a field of `ActionController::Parameters */ + /** Gets a node with a type that can be a field of `ActionController::Parameters` */ private DataFlow::LocalSourceNode paramsFieldType() { paramsFieldType(TypeTracker::end()).flowsTo(result) } 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 7e5b5d6d001..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,7 +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:205:5 | UploadedFileTests | +| 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 | @@ -91,8 +91,8 @@ actionControllerActionMethods | 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:201:5 | m40 | -| params_flow.rb:203:3:205:5 | m41 | +| 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 | @@ -157,8 +157,8 @@ paramsCalls | 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:199:5:199:10 | call to params | -| params_flow.rb:204:10:204: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 | @@ -223,8 +223,8 @@ paramsSources | 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:199:5:199:10 | call to params | -| params_flow.rb:204:10:204: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 | @@ -347,8 +347,8 @@ httpInputAccesses | 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:199:5:199:10 | call to params | ActionController::Metal#params | -| params_flow.rb:204:10:204: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 From 7f05743212a50d28d68683cb4a413acfa73391d2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 15 Mar 2024 00:16:16 +0000 Subject: [PATCH 345/430] Add changed framework coverage reports --- java/documentation/library-coverage/coverage.csv | 4 ++-- java/documentation/library-coverage/coverage.rst | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index a86fdd321be..ad4f7bdd07f 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -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,522,,,,,,,,,1,,,,,,,,,,,34,,,,2,,,,5,2,,1,2,,,,,,,,,,,,2,,,46,476 +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 432d9c2db67..a37dc0a71ef 100644 --- a/java/documentation/library-coverage/coverage.rst +++ b/java/documentation/library-coverage/coverage.rst @@ -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,737,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,125,6,22,18,,209 - Totals,,308,18953,2559,338,16,128,33,1,409 + Totals,,308,18954,2559,338,16,128,33,1,409 From 71cf94865097d55838ce8291b0b044cbfc2018c8 Mon Sep 17 00:00:00 2001 From: Ed Minnix <egregius313@github.com> Date: Thu, 14 Mar 2024 22:23:54 -0400 Subject: [PATCH 346/430] Classes extending `SourceNode` for local and stored source models Queries such as `cs/sql-injection` cast their source to a `SourceNode` in order to describe them. For example: ```ql import semmle.code.csharp.security.dataflow.flowsources.FlowSources string getSourceType(DataFlow::Node source) { result = source.(SourceNode).getSourceType() } ``` Models as data source models are not included in `SourceNode` by default, they must be wrapped with a class extending `SourceNode`. This adds such classes, which wrap the `sourceNode(DataFlow::Node,string)` predicate and assigns a `getSourceType`. --- .../code/csharp/security/dataflow/flowsources/Local.qll | 8 ++++++++ .../code/csharp/security/dataflow/flowsources/Stored.qll | 4 ++++ 2 files changed, 12 insertions(+) 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 7ad656e11d3..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 @@ -40,6 +40,10 @@ abstract class EnvironmentVariableSource extends LocalFlowSource { 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. */ @@ -49,6 +53,10 @@ abstract class CommandLineArgumentSource extends LocalFlowSource { 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. */ 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 2d2ecd0bccb..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 @@ -73,6 +73,10 @@ 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") } From e7b00a7b42976a08b2b4d0daf985a150a7341fd4 Mon Sep 17 00:00:00 2001 From: Tom Hvitved <hvitved@github.com> Date: Fri, 15 Mar 2024 10:14:47 +0100 Subject: [PATCH 347/430] Ruby: Add post-update argument nodes for string constants --- .../codeql/ruby/dataflow/internal/DataFlowPrivate.qll | 6 +++++- .../library-tests/dataflow/global/instance_variables.rb | 2 +- .../library-tests/dataflow/local/DataflowStep.expected | 9 +++++++++ .../test/library-tests/dataflow/local/TaintStep.expected | 9 +++++++++ .../frameworks/action_controller/params-flow.expected | 8 ++++++++ .../frameworks/action_controller/params_flow.rb | 2 +- 6 files changed, 33 insertions(+), 3 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index a7ef050f1c8..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 } 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/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 44f879946ab..a462aebeba9 100644 --- a/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected +++ b/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected @@ -3167,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 | @@ -3177,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) | @@ -3196,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] ... && ... | @@ -3212,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] ... \|\| ... | @@ -3221,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] ... && ... | @@ -3237,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] ... \|\| ... | @@ -3244,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/frameworks/action_controller/params-flow.expected b/ruby/ql/test/library-tests/frameworks/action_controller/params-flow.expected index 698d3b23ccb..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 @@ -116,6 +116,9 @@ edges | 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 | @@ -279,6 +282,10 @@ nodes | 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 | @@ -338,3 +345,4 @@ subpaths | 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 018d8b58af0..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 @@ -202,6 +202,6 @@ class UploadedFileTests < MyController def m41 a = "" params[:file].read(nil,a) - sink a # $ MISSING:hasTaintFlow + sink a # $ hasTaintFlow end end \ No newline at end of file From 80649786c3c92fd5db3986ccf21201b916eb6ec1 Mon Sep 17 00:00:00 2001 From: Tom Hvitved <hvitved@github.com> Date: Fri, 15 Mar 2024 11:06:15 +0100 Subject: [PATCH 348/430] QL4QL: Remove `MissingOverride` query --- ql/ql/src/queries/style/MissingOverride.ql | 20 ---------- .../MissingOverride/MissingOverride.expected | 2 - .../MissingOverride/MissingOverride.qlref | 1 - .../queries/style/MissingOverride/Test.qll | 37 ------------------- 4 files changed, 60 deletions(-) delete mode 100644 ql/ql/src/queries/style/MissingOverride.ql delete mode 100644 ql/ql/test/queries/style/MissingOverride/MissingOverride.expected delete mode 100644 ql/ql/test/queries/style/MissingOverride/MissingOverride.qlref delete mode 100644 ql/ql/test/queries/style/MissingOverride/Test.qll 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 } -} From d3e0a90ae512fafa8dec022db9651ea8f84cbb07 Mon Sep 17 00:00:00 2001 From: Max Schaefer <max-schaefer@github.com> Date: Fri, 15 Mar 2024 11:19:32 +0000 Subject: [PATCH 349/430] Go: Mention raw string iterals in QHelp for `go/incomplete-hostname-regexp`. --- .../CWE-020/IncompleteHostnameRegexp.qhelp | 4 ++++ .../CWE-020/IncompleteHostnameRegexpGood2.go | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 go/ql/src/Security/CWE-020/IncompleteHostnameRegexpGood2.go 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") +} From a51fe4a00e51fe166fae564971de2414f2a61100 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Fri, 15 Mar 2024 12:10:48 +0000 Subject: [PATCH 350/430] C++: Make the vector and iterator classes in 'ir.cpp' more realistic. This matches the one we use for dataflow tests. --- .../library-tests/ir/ir/PrintAST.expected | 16615 ++++++++-------- .../library-tests/ir/ir/aliased_ir.expected | 14377 ++++++------- cpp/ql/test/library-tests/ir/ir/ir.cpp | 105 +- .../ir/ir/operand_locations.expected | 12886 ++++++------ .../ir/ir/raw_consistency.expected | 2 +- .../test/library-tests/ir/ir/raw_ir.expected | 13033 ++++++------ 6 files changed, 28750 insertions(+), 28268 deletions(-) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 624954838d6..3b369651304 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -9750,2301 +9750,2419 @@ ir.cpp: # 1054| getRightOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 1054| Type = [IntType] int # 1054| ValueCategory = prvalue(load) -# 1059| [CopyAssignmentOperator] vector<ClassWithDestructor>& vector<ClassWithDestructor>::operator=(vector<ClassWithDestructor> const&) -# 1059| <params>: +# 1078| [CopyAssignmentOperator] std::iterator<std::random_access_iterator_tag, ClassWithDestructor, std::ptrdiff_t, ClassWithDestructor*, ClassWithDestructor&>& std::iterator<std::random_access_iterator_tag, ClassWithDestructor, std::ptrdiff_t, ClassWithDestructor*, ClassWithDestructor&>::operator=(std::iterator<std::random_access_iterator_tag, ClassWithDestructor, std::ptrdiff_t, ClassWithDestructor*, ClassWithDestructor&> const&) +# 1078| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> & +# 1078| [CopyAssignmentOperator] std::iterator<std::random_access_iterator_tag, String, std::ptrdiff_t, String*, String&>& std::iterator<std::random_access_iterator_tag, String, std::ptrdiff_t, String*, String&>::operator=(std::iterator<std::random_access_iterator_tag, String, std::ptrdiff_t, String*, String&> const&) +# 1078| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &> & +# 1078| [CopyAssignmentOperator] std::iterator<std::random_access_iterator_tag, int, std::ptrdiff_t, int*, int&>& std::iterator<std::random_access_iterator_tag, int, std::ptrdiff_t, int*, int&>::operator=(std::iterator<std::random_access_iterator_tag, int, std::ptrdiff_t, int*, int&> const&) +# 1078| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> & +# 1081| [Constructor] void std::iterator<Category, value_type, difference_type, pointer_type, reference_type>::iterator() +# 1081| <params>: +# 1082| [Constructor] void std::iterator<Category, value_type, difference_type, pointer_type, reference_type>::iterator(std::iterator<Category, type, std::ptrdiff_t, type*, type&> const&) +# 1082| <params>: +# 1082| getParameter(0): [Parameter] other +# 1082| Type = [LValueReferenceType] const iterator<Category, type, ptrdiff_t, type *, type &> & +# 1082| [CopyConstructor] void std::iterator<std::random_access_iterator_tag, ClassWithDestructor, std::ptrdiff_t, ClassWithDestructor*, ClassWithDestructor&>::iterator(std::iterator<std::random_access_iterator_tag, ClassWithDestructor, std::ptrdiff_t, ClassWithDestructor*, ClassWithDestructor&> const&) +# 1082| <params>: +# 1082| getParameter(0): [Parameter] other +# 1082| Type = [LValueReferenceType] const iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> & +# 1082| [CopyConstructor] void std::iterator<std::random_access_iterator_tag, String, std::ptrdiff_t, String*, String&>::iterator(std::iterator<std::random_access_iterator_tag, String, std::ptrdiff_t, String*, String&> const&) +# 1082| <params>: +# 1082| getParameter(0): [Parameter] other +# 1082| Type = [LValueReferenceType] const iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &> & +# 1082| [CopyConstructor] void std::iterator<std::random_access_iterator_tag, int, std::ptrdiff_t, int*, int&>::iterator(std::iterator<std::random_access_iterator_tag, int, std::ptrdiff_t, int*, int&> const&) +# 1082| <params>: +# 1082| getParameter(0): [Parameter] other +# 1082| Type = [LValueReferenceType] const iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> & +# 1084| [MemberFunction] std::iterator<Category, value_type, difference_type, pointer_type, reference_type>& std::iterator<Category, value_type, difference_type, pointer_type, reference_type>::operator++() +# 1084| <params>: +# 1084| [MemberFunction] std::iterator<std::random_access_iterator_tag, ClassWithDestructor, std::ptrdiff_t, ClassWithDestructor*, ClassWithDestructor&>& std::iterator<std::random_access_iterator_tag, ClassWithDestructor, std::ptrdiff_t, ClassWithDestructor*, ClassWithDestructor&>::operator++() +# 1084| <params>: +# 1084| [MemberFunction] std::iterator<std::random_access_iterator_tag, String, std::ptrdiff_t, String*, String&>& std::iterator<std::random_access_iterator_tag, String, std::ptrdiff_t, String*, String&>::operator++() +# 1084| <params>: +# 1084| [MemberFunction] std::iterator<std::random_access_iterator_tag, int, std::ptrdiff_t, int*, int&>& std::iterator<std::random_access_iterator_tag, int, std::ptrdiff_t, int*, int&>::operator++() +# 1084| <params>: +# 1085| [MemberFunction] std::iterator<Category, value_type, difference_type, pointer_type, reference_type> std::iterator<Category, value_type, difference_type, pointer_type, reference_type>::operator++(int) +# 1085| <params>: +# 1085| getParameter(0): [Parameter] (unnamed parameter 0) +# 1085| Type = [IntType] int +# 1086| [MemberFunction] std::iterator<Category, value_type, difference_type, pointer_type, reference_type>& std::iterator<Category, value_type, difference_type, pointer_type, reference_type>::operator--() +# 1086| <params>: +# 1087| [MemberFunction] std::iterator<Category, value_type, difference_type, pointer_type, reference_type> std::iterator<Category, value_type, difference_type, pointer_type, reference_type>::operator--(int) +# 1087| <params>: +# 1087| getParameter(0): [Parameter] (unnamed parameter 0) +# 1087| Type = [IntType] int +# 1088| [ConstMemberFunction] bool std::iterator<Category, value_type, difference_type, pointer_type, reference_type>::operator==(std::iterator<Category, value_type, difference_type, pointer_type, reference_type>) const +# 1088| <params>: +# 1088| getParameter(0): [Parameter] other +# 1088| Type = [TemplateClass] iterator<Category, value_type, difference_type, pointer_type, reference_type> +# 1089| [ConstMemberFunction] bool std::iterator<Category, value_type, difference_type, pointer_type, reference_type>::operator!=(std::iterator<Category, value_type, difference_type, pointer_type, reference_type>) const +# 1089| <params>: +# 1089| getParameter(0): [Parameter] other +# 1089| Type = [TemplateClass] iterator<Category, value_type, difference_type, pointer_type, reference_type> +# 1089| [ConstMemberFunction] bool std::iterator<std::random_access_iterator_tag, ClassWithDestructor, std::ptrdiff_t, ClassWithDestructor*, ClassWithDestructor&>::operator!=(std::iterator<std::random_access_iterator_tag, ClassWithDestructor, std::ptrdiff_t, ClassWithDestructor*, ClassWithDestructor&>) const +# 1089| <params>: +# 1089| getParameter(0): [Parameter] other +# 1089| Type = [ClassTemplateInstantiation,Struct] iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> +# 1089| [ConstMemberFunction] bool std::iterator<std::random_access_iterator_tag, String, std::ptrdiff_t, String*, String&>::operator!=(std::iterator<std::random_access_iterator_tag, String, std::ptrdiff_t, String*, String&>) const +# 1089| <params>: +# 1089| getParameter(0): [Parameter] other +# 1089| Type = [ClassTemplateInstantiation,Struct] iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &> +# 1089| [ConstMemberFunction] bool std::iterator<std::random_access_iterator_tag, int, std::ptrdiff_t, int*, int&>::operator!=(std::iterator<std::random_access_iterator_tag, int, std::ptrdiff_t, int*, int&>) const +# 1089| <params>: +# 1089| getParameter(0): [Parameter] other +# 1089| Type = [ClassTemplateInstantiation,Struct] iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> +# 1090| [ConstMemberFunction] ClassWithDestructor& std::iterator<std::random_access_iterator_tag, ClassWithDestructor, std::ptrdiff_t, ClassWithDestructor*, ClassWithDestructor&>::operator*() const +# 1090| <params>: +# 1090| [ConstMemberFunction] String& std::iterator<std::random_access_iterator_tag, String, std::ptrdiff_t, String*, String&>::operator*() const +# 1090| <params>: +# 1090| [ConstMemberFunction] int& std::iterator<std::random_access_iterator_tag, int, std::ptrdiff_t, int*, int&>::operator*() const +# 1090| <params>: +# 1090| [ConstMemberFunction] reference_type std::iterator<Category, value_type, difference_type, pointer_type, reference_type>::operator*() const +# 1090| <params>: +# 1091| [ConstMemberFunction] pointer_type std::iterator<Category, value_type, difference_type, pointer_type, reference_type>::operator->() const +# 1091| <params>: +# 1092| [MemberFunction] std::iterator<Category, value_type, difference_type, pointer_type, reference_type> std::iterator<Category, value_type, difference_type, pointer_type, reference_type>::operator+(int) +# 1092| <params>: +# 1092| getParameter(0): [Parameter] (unnamed parameter 0) +# 1092| Type = [IntType] int +# 1093| [MemberFunction] std::iterator<Category, value_type, difference_type, pointer_type, reference_type> std::iterator<Category, value_type, difference_type, pointer_type, reference_type>::operator-(int) +# 1093| <params>: +# 1093| getParameter(0): [Parameter] (unnamed parameter 0) +# 1093| Type = [IntType] int +# 1094| [MemberFunction] std::iterator<Category, value_type, difference_type, pointer_type, reference_type>& std::iterator<Category, value_type, difference_type, pointer_type, reference_type>::operator+=(int) +# 1094| <params>: +# 1094| getParameter(0): [Parameter] (unnamed parameter 0) +# 1094| Type = [IntType] int +# 1095| [MemberFunction] std::iterator<Category, value_type, difference_type, pointer_type, reference_type>& std::iterator<Category, value_type, difference_type, pointer_type, reference_type>::operator-=(int) +# 1095| <params>: +# 1095| getParameter(0): [Parameter] (unnamed parameter 0) +# 1095| Type = [IntType] int +# 1096| [MemberFunction] int std::iterator<Category, value_type, difference_type, pointer_type, reference_type>::operator-(std::iterator<Category, value_type, difference_type, pointer_type, reference_type>) +# 1096| <params>: +# 1096| getParameter(0): [Parameter] (unnamed parameter 0) +# 1096| Type = [TemplateClass] iterator<Category, value_type, difference_type, pointer_type, reference_type> +# 1097| [MemberFunction] reference_type std::iterator<Category, value_type, difference_type, pointer_type, reference_type>::operator[](int) +# 1097| <params>: +# 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| <params>: +#-----| 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| <params>: +#-----| 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| <params>: +#-----| 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| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] forward_iterator_tag && +# 1101| [Constructor] void std::forward_iterator_tag::forward_iterator_tag() +# 1101| <params>: +# 1102| [CopyAssignmentOperator] std::bidirectional_iterator_tag& std::bidirectional_iterator_tag::operator=(std::bidirectional_iterator_tag const&) +# 1102| <params>: +#-----| 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| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] bidirectional_iterator_tag && +# 1102| [Constructor] void std::bidirectional_iterator_tag::bidirectional_iterator_tag() +# 1102| <params>: +# 1103| [CopyAssignmentOperator] std::random_access_iterator_tag& std::random_access_iterator_tag::operator=(std::random_access_iterator_tag const&) +# 1103| <params>: +#-----| 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| <params>: +#-----| 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| <params>: +# 1105| [CopyAssignmentOperator] std::output_iterator_tag& std::output_iterator_tag::operator=(std::output_iterator_tag const&) +# 1105| <params>: +#-----| 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| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] output_iterator_tag && +# 1108| [CopyAssignmentOperator] std::vector<ClassWithDestructor>& std::vector<ClassWithDestructor>::operator=(std::vector<ClassWithDestructor> const&) +# 1108| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const vector<ClassWithDestructor> & -# 1059| [CopyAssignmentOperator] vector<String>& vector<String>::operator=(vector<String> const&) -# 1059| <params>: +# 1108| [CopyAssignmentOperator] std::vector<String>& std::vector<String>::operator=(std::vector<String> const&) +# 1108| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const vector<String> & -# 1059| [CopyAssignmentOperator] vector<int>& vector<int>::operator=(vector<int> const&) -# 1059| <params>: +# 1108| [CopyAssignmentOperator] std::vector<int>& std::vector<int>::operator=(std::vector<int> const&) +# 1108| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const vector<int> & -# 1059| [CopyConstructor] void vector<ClassWithDestructor>::vector(vector<ClassWithDestructor> const&) -# 1059| <params>: +# 1108| [CopyConstructor] void std::vector<ClassWithDestructor>::vector(std::vector<ClassWithDestructor> const&) +# 1108| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const vector<ClassWithDestructor> & -# 1059| [CopyConstructor] void vector<String>::vector(vector<String> const&) -# 1059| <params>: +# 1108| [CopyConstructor] void std::vector<String>::vector(std::vector<String> const&) +# 1108| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const vector<String> & -# 1059| [CopyConstructor] void vector<int>::vector(vector<int> const&) -# 1059| <params>: +# 1108| [CopyConstructor] void std::vector<int>::vector(std::vector<int> const&) +# 1108| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const vector<int> & -# 1060| [CopyAssignmentOperator] vector<ClassWithDestructor>::iterator& vector<ClassWithDestructor>::iterator::operator=(vector<ClassWithDestructor>::iterator const public&) -# 1060| <params>: -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const iterator & -# 1060| [MoveAssignmentOperator] vector<ClassWithDestructor>::iterator& vector<ClassWithDestructor>::iterator::operator=(vector<ClassWithDestructor>::iterator&&) -# 1060| <params>: -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] iterator && -# 1060| [CopyAssignmentOperator] vector<String>::iterator& vector<String>::iterator::operator=(vector<String>::iterator const public&) -# 1060| <params>: -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const iterator & -# 1060| [MoveAssignmentOperator] vector<String>::iterator& vector<String>::iterator::operator=(vector<String>::iterator&&) -# 1060| <params>: -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] iterator && -# 1060| [CopyAssignmentOperator] vector<int>::iterator& vector<int>::iterator::operator=(vector<int>::iterator const public&) -# 1060| <params>: -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const iterator & -# 1060| [MoveAssignmentOperator] vector<int>::iterator& vector<int>::iterator::operator=(vector<int>::iterator&&) -# 1060| <params>: -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] iterator && -# 1062| [MemberFunction] vector<ClassWithDestructor>::iterator& vector<ClassWithDestructor>::iterator::operator++() -# 1062| <params>: -# 1062| [MemberFunction] vector<String>::iterator& vector<String>::iterator::operator++() -# 1062| <params>: -# 1062| [MemberFunction] vector<T>::iterator& vector<T>::iterator::operator++() -# 1062| <params>: -# 1062| [MemberFunction] vector<int>::iterator& vector<int>::iterator::operator++() -# 1062| <params>: -# 1063| [ConstMemberFunction] ClassWithDestructor& vector<ClassWithDestructor>::iterator::operator*() const -# 1063| <params>: -# 1063| [ConstMemberFunction] String& vector<String>::iterator::operator*() const -# 1063| <params>: -# 1063| [ConstMemberFunction] T& vector<T>::iterator::operator*() const -# 1063| <params>: -# 1063| [ConstMemberFunction] int& vector<int>::iterator::operator*() const -# 1063| <params>: -# 1065| [ConstMemberFunction] bool vector<ClassWithDestructor>::iterator::operator!=(vector<ClassWithDestructor>::iterator) const -# 1065| <params>: -# 1065| getParameter(0): [Parameter] right -# 1065| Type = [NestedStruct] iterator -# 1065| [ConstMemberFunction] bool vector<String>::iterator::operator!=(vector<String>::iterator) const -# 1065| <params>: -# 1065| getParameter(0): [Parameter] right -# 1065| Type = [NestedStruct] iterator -# 1065| [ConstMemberFunction] bool vector<T>::iterator::operator!=(vector<T>::iterator) const -# 1065| <params>: -# 1065| getParameter(0): [Parameter] right -# 1065| Type = [NestedClass,TemplateClass] iterator -# 1065| [ConstMemberFunction] bool vector<int>::iterator::operator!=(vector<int>::iterator) const -# 1065| <params>: -# 1065| getParameter(0): [Parameter] right -# 1065| Type = [NestedStruct] iterator -# 1068| [Constructor] void vector<ClassWithDestructor>::vector(ClassWithDestructor) -# 1068| <params>: -# 1068| getParameter(0): [Parameter] (unnamed parameter 0) -# 1068| Type = [Class] ClassWithDestructor -# 1068| [Constructor] void vector<String>::vector(String) -# 1068| <params>: -# 1068| getParameter(0): [Parameter] (unnamed parameter 0) -# 1068| Type = [Struct] String -# 1068| [Constructor] void vector<T>::vector(T) -# 1068| <params>: -# 1068| getParameter(0): [Parameter] (unnamed parameter 0) -# 1068| Type = [TemplateParameter] T -# 1068| [Constructor] void vector<int>::vector(int) -# 1068| <params>: -# 1068| getParameter(0): [Parameter] (unnamed parameter 0) -# 1068| Type = [IntType] int -# 1069| [Destructor] void vector<ClassWithDestructor>::~vector() -# 1069| <params>: -# 1069| [Destructor] void vector<T>::~vector() -# 1069| <params>: -# 1069| [Destructor] void vector<int>::~vector() -# 1069| <params>: -# 1070| [ConstMemberFunction] vector<ClassWithDestructor>::iterator vector<ClassWithDestructor>::begin() const -# 1070| <params>: -# 1070| [ConstMemberFunction] vector<String>::iterator vector<String>::begin() const -# 1070| <params>: -# 1070| [ConstMemberFunction] vector<T>::iterator vector<T>::begin() const -# 1070| <params>: -# 1070| [ConstMemberFunction] vector<int>::iterator vector<int>::begin() const -# 1070| <params>: -# 1071| [ConstMemberFunction] vector<ClassWithDestructor>::iterator vector<ClassWithDestructor>::end() const -# 1071| <params>: -# 1071| [ConstMemberFunction] vector<String>::iterator vector<String>::end() const -# 1071| <params>: -# 1071| [ConstMemberFunction] vector<T>::iterator vector<T>::end() const -# 1071| <params>: -# 1071| [ConstMemberFunction] vector<int>::iterator vector<int>::end() const -# 1071| <params>: -# 1075| [Operator,TemplateFunction,TopLevelFunction] bool operator==<T>(iterator, iterator) -# 1075| <params>: -# 1075| getParameter(0): [Parameter] left -# 1075| Type = [TemplateParameter] iterator -# 1075| getParameter(1): [Parameter] right -# 1075| Type = [TemplateParameter] iterator -# 1077| [Operator,TemplateFunction,TopLevelFunction] bool operator!=<T>(iterator, iterator) -# 1077| <params>: -# 1077| getParameter(0): [Parameter] left -# 1077| Type = [TemplateParameter] iterator -# 1077| getParameter(1): [Parameter] right -# 1077| Type = [TemplateParameter] iterator -# 1079| [TopLevelFunction] void RangeBasedFor(vector<int> const&) -# 1079| <params>: -# 1079| getParameter(0): [Parameter] v -# 1079| Type = [LValueReferenceType] const vector<int> & -# 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<int> & -#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) -# 1080| getExpr(): [VariableAccess] v -# 1080| Type = [LValueReferenceType] const vector<int> & -# 1080| ValueCategory = prvalue(load) -# 1080| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1080| Type = [LValueReferenceType] const vector<int> & -# 1080| ValueCategory = prvalue -# 1080| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1080| Type = [SpecifiedType] const vector<int> -# 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<int> & -# 1080| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [SpecifiedType] const vector<int> -#-----| 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<int> & -# 1080| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [SpecifiedType] const vector<int> -#-----| 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<int> & -#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) -# 1086| getExpr(): [VariableAccess] v -# 1086| Type = [LValueReferenceType] const vector<int> & -# 1086| ValueCategory = prvalue(load) -# 1086| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1086| Type = [LValueReferenceType] const vector<int> & -# 1086| ValueCategory = prvalue -# 1086| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1086| Type = [SpecifiedType] const vector<int> -# 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<int> & -# 1086| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [SpecifiedType] const vector<int> -#-----| 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<int> & -# 1086| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [SpecifiedType] const vector<int> -#-----| 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<ClassWithDestructor>::vector(ClassWithDestructor) +# 1109| <params>: +# 1109| getParameter(0): [Parameter] (unnamed parameter 0) +# 1109| Type = [Class] ClassWithDestructor +# 1109| [Constructor] void std::vector<String>::vector(String) +# 1109| <params>: +# 1109| getParameter(0): [Parameter] (unnamed parameter 0) +# 1109| Type = [Struct] String +# 1109| [Constructor] void std::vector<T>::vector(T) +# 1109| <params>: +# 1109| getParameter(0): [Parameter] (unnamed parameter 0) +# 1109| Type = [TemplateParameter] T +# 1109| [Constructor] void std::vector<int>::vector(int) +# 1109| <params>: +# 1109| getParameter(0): [Parameter] (unnamed parameter 0) +# 1109| Type = [IntType] int +# 1110| [Destructor] void std::vector<ClassWithDestructor>::~vector() # 1110| <params>: -# 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<T>::~vector() +# 1110| <params>: +# 1110| [Destructor] void std::vector<int>::~vector() +# 1110| <params>: +# 1115| [ConstMemberFunction] std::vector<ClassWithDestructor>::iterator std::vector<ClassWithDestructor>::begin() const # 1115| <params>: -# 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| <params>: -# 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| <params>: -# 1128| getParameter(0): [Parameter] (unnamed parameter 0) -# 1128| Type = [FloatType] float -# 1129| [TopLevelFunction] int z(float) -# 1129| <params>: -# 1129| getParameter(0): [Parameter] (unnamed parameter 0) -# 1129| Type = [FloatType] float -# 1129| [TopLevelFunction] int w(float) -# 1129| <params>: -# 1129| getParameter(0): [Parameter] (unnamed parameter 0) -# 1129| Type = [FloatType] float -# 1139| [TopLevelFunction] void ExternDeclarationsInMacro() -# 1139| <params>: -# 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| <params>: -# 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] <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] <handler> -# 1158| getBlock(): [CatchBlock] { ... } -# 1160| getStmt(1): [ReturnStmt] return ... -# 1164| [TopLevelFunction] void VectorTypes(int) -# 1164| <params>: -# 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<String>::iterator std::vector<String>::begin() const +# 1115| <params>: +# 1115| [ConstMemberFunction] std::vector<T>::iterator std::vector<T>::begin() const +# 1115| <params>: +# 1115| [ConstMemberFunction] std::vector<int>::iterator std::vector<int>::begin() const +# 1115| <params>: +# 1116| [ConstMemberFunction] std::vector<ClassWithDestructor>::iterator std::vector<ClassWithDestructor>::end() const +# 1116| <params>: +# 1116| [ConstMemberFunction] std::vector<String>::iterator std::vector<String>::end() const +# 1116| <params>: +# 1116| [ConstMemberFunction] std::vector<T>::iterator std::vector<T>::end() const +# 1116| <params>: +# 1116| [ConstMemberFunction] std::vector<int>::iterator std::vector<int>::end() const +# 1116| <params>: +# 1120| [Operator,TemplateFunction,TopLevelFunction] bool std::operator==<T>(iterator, iterator) +# 1120| <params>: +# 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!=<T>(iterator, iterator) +# 1122| <params>: +# 1122| getParameter(0): [Parameter] left +# 1122| Type = [TemplateParameter] iterator +# 1122| getParameter(1): [Parameter] right +# 1122| Type = [TemplateParameter] iterator +# 1126| [TopLevelFunction] void RangeBasedFor(std::vector<int> const&) +# 1126| <params>: +# 1126| getParameter(0): [Parameter] v +# 1126| Type = [LValueReferenceType] const vector<int> & +# 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<int> & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 1127| getExpr(): [VariableAccess] v +# 1127| Type = [LValueReferenceType] const vector<int> & +# 1127| ValueCategory = prvalue(load) +# 1127| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1127| Type = [LValueReferenceType] const vector<int> & +# 1127| ValueCategory = prvalue +# 1127| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1127| Type = [SpecifiedType] const vector<int> +# 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<int> & +# 1127| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [SpecifiedType] const vector<int> +#-----| 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<int> & +# 1127| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [SpecifiedType] const vector<int> +#-----| 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<random_access_iterator_tag, int, ptrdiff_t, int *, int &> & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> +#-----| ValueCategory = lvalue +# 1127| getUpdate(): [FunctionCall] call to operator++ +# 1127| Type = [LValueReferenceType] iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> & +# 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<random_access_iterator_tag, int, ptrdiff_t, int *, int &>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> +#-----| 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<random_access_iterator_tag, int, ptrdiff_t, int *, int &> +# 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<int> & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 1133| getExpr(): [VariableAccess] v +# 1133| Type = [LValueReferenceType] const vector<int> & +# 1133| ValueCategory = prvalue(load) +# 1133| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1133| Type = [LValueReferenceType] const vector<int> & +# 1133| ValueCategory = prvalue +# 1133| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1133| Type = [SpecifiedType] const vector<int> +# 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<int> & +# 1133| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [SpecifiedType] const vector<int> +#-----| 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<int> & +# 1133| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [SpecifiedType] const vector<int> +#-----| 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<random_access_iterator_tag, int, ptrdiff_t, int *, int &> & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> +#-----| ValueCategory = lvalue +# 1133| getUpdate(): [FunctionCall] call to operator++ +# 1133| Type = [LValueReferenceType] iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> & +# 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<random_access_iterator_tag, int, ptrdiff_t, int *, int &>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> +#-----| 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<random_access_iterator_tag, int, ptrdiff_t, int *, int &> +# 1133| ValueCategory = lvalue +# 1137| getStmt(2): [LabelStmt] label ...: +# 1138| getStmt(3): [ReturnStmt] return ... +# 1157| [TopLevelFunction] int AsmStmt(int) +# 1157| <params>: +# 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| <params>: +# 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| <params>: -# 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| <params>: -# 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| <params>: +# 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| <params>: -# 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| <params>: -# 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| <params>: +# 1175| getParameter(0): [Parameter] (unnamed parameter 0) +# 1175| Type = [FloatType] float +# 1176| [TopLevelFunction] int z(float) +# 1176| <params>: +# 1176| getParameter(0): [Parameter] (unnamed parameter 0) +# 1176| Type = [FloatType] float +# 1176| [TopLevelFunction] int w(float) +# 1176| <params>: +# 1176| getParameter(0): [Parameter] (unnamed parameter 0) +# 1176| Type = [FloatType] float +# 1186| [TopLevelFunction] void ExternDeclarationsInMacro() +# 1186| <params>: +# 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| <params>: -# 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| <params>: +# 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| <params>: -# 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] <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] <handler> +# 1205| getBlock(): [CatchBlock] { ... } +# 1207| getStmt(1): [ReturnStmt] return ... +# 1211| [TopLevelFunction] void VectorTypes(int) +# 1211| <params>: +# 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| <params>: -# 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| <params>: +# 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| <params>: +# 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| <params>: -# 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| <params>: +# 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| <params>: +# 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(<expr>) -# 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| <params>: -# 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| <params>: +# 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| <params>: +# 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| <params>: +# 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| <params>: +# 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(<expr>) +# 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| <params>: +# 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| <params>: -# 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| <params>: -# 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| <params>: -# 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| <params>: +# 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| <params>: +# 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| <params>: +# 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| <params>: +# 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| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const A & -# 1260| [MoveAssignmentOperator] A& A::operator=(A&&) -# 1260| <params>: +# 1307| [MoveAssignmentOperator] A& A::operator=(A&&) +# 1307| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] A && -# 1263| [MemberFunction] void A::static_member(A*, int) -# 1263| <params>: -# 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| <params>: -# 1270| [TopLevelFunction] A* getAnInstanceOfA() -# 1270| <params>: -# 1272| [TopLevelFunction] void test_static_member_functions(int, A*) -# 1272| <params>: -# 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| <params>: -# 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| <params>: -# 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| <params>: -# 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| <params>: -# 1314| [TopLevelFunction] bool predicateB() +# 1310| [MemberFunction] void A::static_member(A*, int) +# 1310| <params>: +# 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| <params>: -# 1316| [TopLevelFunction] int shortCircuitConditional(int, int) -# 1316| <params>: -# 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| <params>: -# 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| <params>: -# 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] <error expr> -# 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<Point>() -# 1328| <params>: -# 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<String>() -# 1328| <params>: -# 1328| getEntryPoint(): [BlockStmt] { ... } -# 1329| getStmt(0): [ReturnStmt] return ... -# 1329| getExpr(): [ConstructorCall] call to String +# 1317| [TopLevelFunction] A* getAnInstanceOfA() +# 1317| <params>: +# 1319| [TopLevelFunction] void test_static_member_functions(int, A*) +# 1319| <params>: +# 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<T>() -# 1328| <params>: -# 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<copy_constructor>() -# 1328| <params>: -# 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<destructor_only>() -# 1328| <params>: -# 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| <params>: +# 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| <params>: +# 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| <params>: +# 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| <params>: +# 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| <params>: +# 1361| [TopLevelFunction] bool predicateB() +# 1361| <params>: +# 1363| [TopLevelFunction] int shortCircuitConditional(int, int) +# 1363| <params>: +# 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| <params>: +# 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| <params>: +# 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] <error expr> +# 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<Point>() +# 1375| <params>: +# 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<String>() +# 1375| <params>: +# 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<T>() +# 1375| <params>: +# 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<copy_constructor>() +# 1375| <params>: +# 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<destructor_only>() +# 1375| <params>: +# 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| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const constructor_only & -# 1332| [MoveAssignmentOperator] constructor_only& constructor_only::operator=(constructor_only&&) -# 1332| <params>: +# 1379| [MoveAssignmentOperator] constructor_only& constructor_only::operator=(constructor_only&&) +# 1379| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] constructor_only && -# 1332| [CopyConstructor] void constructor_only::constructor_only(constructor_only const&) -# 1332| <params>: +# 1379| [CopyConstructor] void constructor_only::constructor_only(constructor_only const&) +# 1379| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const constructor_only & -# 1332| [MoveConstructor] void constructor_only::constructor_only(constructor_only&&) -# 1332| <params>: +# 1379| [MoveConstructor] void constructor_only::constructor_only(constructor_only&&) +# 1379| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] constructor_only && -# 1337| [Constructor] void constructor_only::constructor_only(int) -# 1337| <params>: -# 1337| getParameter(0): [Parameter] x -# 1337| Type = [IntType] int -# 1340| [CopyAssignmentOperator] copy_constructor& copy_constructor::operator=(copy_constructor const&) -# 1340| <params>: +# 1384| [Constructor] void constructor_only::constructor_only(int) +# 1384| <params>: +# 1384| getParameter(0): [Parameter] x +# 1384| Type = [IntType] int +# 1387| [CopyAssignmentOperator] copy_constructor& copy_constructor::operator=(copy_constructor const&) +# 1387| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const copy_constructor & -# 1345| [Constructor] void copy_constructor::copy_constructor() -# 1345| <params>: -# 1346| [CopyConstructor] void copy_constructor::copy_constructor(copy_constructor const&) -# 1346| <params>: -# 1346| getParameter(0): [Parameter] (unnamed parameter 0) -# 1346| Type = [LValueReferenceType] const copy_constructor & -# 1348| [MemberFunction] void copy_constructor::method() -# 1348| <params>: -# 1351| [CopyAssignmentOperator] destructor_only& destructor_only::operator=(destructor_only const&) -# 1351| <params>: +# 1392| [Constructor] void copy_constructor::copy_constructor() +# 1392| <params>: +# 1393| [CopyConstructor] void copy_constructor::copy_constructor(copy_constructor const&) +# 1393| <params>: +# 1393| getParameter(0): [Parameter] (unnamed parameter 0) +# 1393| Type = [LValueReferenceType] const copy_constructor & +# 1395| [MemberFunction] void copy_constructor::method() +# 1395| <params>: +# 1398| [CopyAssignmentOperator] destructor_only& destructor_only::operator=(destructor_only const&) +# 1398| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const destructor_only & -# 1351| [Constructor] void destructor_only::destructor_only() -# 1351| <params>: -# 1353| [Destructor] void destructor_only::~destructor_only() -# 1353| <params>: -# 1355| [MemberFunction] void destructor_only::method() -# 1355| <params>: -# 1359| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef<Point>(Point const&) -# 1359| <params>: -# 1359| getParameter(0): [Parameter] v -# 1359| Type = [LValueReferenceType] const Point & -# 1359| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef<String>(String const&) -# 1359| <params>: -# 1359| getParameter(0): [Parameter] v -# 1359| Type = [LValueReferenceType] const String & -# 1359| [TemplateFunction,TopLevelFunction] void acceptRef<T>(T const&) -# 1359| <params>: -# 1359| getParameter(0): [Parameter] v -# 1359| Type = [LValueReferenceType] const T & -# 1359| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef<copy_constructor>(copy_constructor const&) -# 1359| <params>: -# 1359| getParameter(0): [Parameter] v -# 1359| Type = [LValueReferenceType] const copy_constructor & -# 1359| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef<destructor_only>(destructor_only const&) -# 1359| <params>: -# 1359| getParameter(0): [Parameter] v -# 1359| Type = [LValueReferenceType] const destructor_only & -# 1362| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue<Point>(Point) -# 1362| <params>: -# 1362| getParameter(0): [Parameter] v -# 1362| Type = [Struct] Point -# 1362| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue<String>(String) -# 1362| <params>: -# 1362| getParameter(0): [Parameter] v -# 1362| Type = [Struct] String -# 1362| [TemplateFunction,TopLevelFunction] void acceptValue<T>(T) -# 1362| <params>: -# 1362| getParameter(0): [Parameter] v -# 1362| Type = [TemplateParameter] T -# 1362| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue<copy_constructor>(copy_constructor) -# 1362| <params>: -# 1362| getParameter(0): [Parameter] v -# 1362| Type = [Class] copy_constructor -# 1362| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue<destructor_only>(destructor_only) -# 1362| <params>: -# 1362| getParameter(0): [Parameter] v -# 1362| Type = [Class] destructor_only -# 1365| [FunctionTemplateInstantiation,TopLevelFunction] POD_Derived returnValue<POD_Derived>() -# 1365| <params>: -# 1365| [FunctionTemplateInstantiation,TopLevelFunction] POD_Middle returnValue<POD_Middle>() -# 1365| <params>: -# 1365| [FunctionTemplateInstantiation,TopLevelFunction] Point returnValue<Point>() -# 1365| <params>: -# 1365| [FunctionTemplateInstantiation,TopLevelFunction] String returnValue<String>() -# 1365| <params>: -# 1365| [TemplateFunction,TopLevelFunction] T returnValue<T>() -# 1365| <params>: -# 1365| [FunctionTemplateInstantiation,TopLevelFunction] UnusualFields returnValue<UnusualFields>() -# 1365| <params>: -# 1365| [FunctionTemplateInstantiation,TopLevelFunction] copy_constructor returnValue<copy_constructor>() -# 1365| <params>: -# 1365| [FunctionTemplateInstantiation,TopLevelFunction] destructor_only returnValue<destructor_only>() -# 1365| <params>: -# 1367| [TopLevelFunction] void temporary_string() -# 1367| <params>: -# 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| <params>: -# 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| <params>: -# 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| <params>: +# 1400| [Destructor] void destructor_only::~destructor_only() +# 1400| <params>: +# 1402| [MemberFunction] void destructor_only::method() +# 1402| <params>: +# 1406| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef<Point>(Point const&) # 1406| <params>: -# 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| <params>: +# 1406| getParameter(0): [Parameter] v +# 1406| Type = [LValueReferenceType] const Point & +# 1406| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef<String>(String const&) +# 1406| <params>: +# 1406| getParameter(0): [Parameter] v +# 1406| Type = [LValueReferenceType] const String & +# 1406| [TemplateFunction,TopLevelFunction] void acceptRef<T>(T const&) +# 1406| <params>: +# 1406| getParameter(0): [Parameter] v +# 1406| Type = [LValueReferenceType] const T & +# 1406| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef<copy_constructor>(copy_constructor const&) +# 1406| <params>: +# 1406| getParameter(0): [Parameter] v +# 1406| Type = [LValueReferenceType] const copy_constructor & +# 1406| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef<destructor_only>(destructor_only const&) +# 1406| <params>: +# 1406| getParameter(0): [Parameter] v +# 1406| Type = [LValueReferenceType] const destructor_only & +# 1409| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue<Point>(Point) +# 1409| <params>: +# 1409| getParameter(0): [Parameter] v +# 1409| Type = [Struct] Point +# 1409| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue<String>(String) +# 1409| <params>: +# 1409| getParameter(0): [Parameter] v +# 1409| Type = [Struct] String +# 1409| [TemplateFunction,TopLevelFunction] void acceptValue<T>(T) +# 1409| <params>: +# 1409| getParameter(0): [Parameter] v +# 1409| Type = [TemplateParameter] T +# 1409| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue<copy_constructor>(copy_constructor) +# 1409| <params>: +# 1409| getParameter(0): [Parameter] v +# 1409| Type = [Class] copy_constructor +# 1409| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue<destructor_only>(destructor_only) +# 1409| <params>: +# 1409| getParameter(0): [Parameter] v +# 1409| Type = [Class] destructor_only +# 1412| [FunctionTemplateInstantiation,TopLevelFunction] POD_Derived returnValue<POD_Derived>() +# 1412| <params>: +# 1412| [FunctionTemplateInstantiation,TopLevelFunction] POD_Middle returnValue<POD_Middle>() +# 1412| <params>: +# 1412| [FunctionTemplateInstantiation,TopLevelFunction] Point returnValue<Point>() +# 1412| <params>: +# 1412| [FunctionTemplateInstantiation,TopLevelFunction] String returnValue<String>() +# 1412| <params>: +# 1412| [TemplateFunction,TopLevelFunction] T returnValue<T>() +# 1412| <params>: +# 1412| [FunctionTemplateInstantiation,TopLevelFunction] UnusualFields returnValue<UnusualFields>() +# 1412| <params>: +# 1412| [FunctionTemplateInstantiation,TopLevelFunction] copy_constructor returnValue<copy_constructor>() +# 1412| <params>: +# 1412| [FunctionTemplateInstantiation,TopLevelFunction] destructor_only returnValue<destructor_only>() +# 1412| <params>: +# 1414| [TopLevelFunction] void temporary_string() +# 1414| <params>: +# 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(): [VariableAccess] s +# 1426| Type = [Struct] String +# 1426| ValueCategory = lvalue +# 1428| [TopLevelFunction] void temporary_destructor_only() +# 1428| <params>: +# 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(): [VariableAccess] d +# 1438| Type = [Class] destructor_only +# 1438| ValueCategory = lvalue +# 1440| [TopLevelFunction] void temporary_copy_constructor() +# 1440| <params>: +# 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| <params>: +# 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| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const UnusualFields & -# 1418| [Constructor] void UnusualFields::UnusualFields() -# 1418| <params>: -# 1418| [CopyConstructor] void UnusualFields::UnusualFields(UnusualFields const&) -# 1418| <params>: +# 1465| [Constructor] void UnusualFields::UnusualFields() +# 1465| <params>: +# 1465| [CopyConstructor] void UnusualFields::UnusualFields(UnusualFields const&) +# 1465| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const UnusualFields & -# 1418| [MoveConstructor] void UnusualFields::UnusualFields(UnusualFields&&) -# 1418| <params>: +# 1465| [MoveConstructor] void UnusualFields::UnusualFields(UnusualFields&&) +# 1465| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] UnusualFields && -# 1423| [TopLevelFunction] void temporary_unusual_fields() -# 1423| <params>: -# 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| <params>: +# 1470| [TopLevelFunction] void temporary_unusual_fields() +# 1470| <params>: +# 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| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const POD_Base & -# 1431| [MoveAssignmentOperator] POD_Base& POD_Base::operator=(POD_Base&&) -# 1431| <params>: +# 1478| [MoveAssignmentOperator] POD_Base& POD_Base::operator=(POD_Base&&) +# 1478| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] POD_Base && -# 1434| [ConstMemberFunction] float POD_Base::f() const -# 1434| <params>: -# 1437| [CopyAssignmentOperator] POD_Middle& POD_Middle::operator=(POD_Middle const&) -# 1437| <params>: +# 1481| [ConstMemberFunction] float POD_Base::f() const +# 1481| <params>: +# 1484| [CopyAssignmentOperator] POD_Middle& POD_Middle::operator=(POD_Middle const&) +# 1484| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const POD_Middle & -# 1437| [MoveAssignmentOperator] POD_Middle& POD_Middle::operator=(POD_Middle&&) -# 1437| <params>: +# 1484| [MoveAssignmentOperator] POD_Middle& POD_Middle::operator=(POD_Middle&&) +# 1484| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] POD_Middle && -# 1437| [Constructor] void POD_Middle::POD_Middle() -# 1437| <params>: -# 1441| [CopyAssignmentOperator] POD_Derived& POD_Derived::operator=(POD_Derived const&) -# 1441| <params>: +# 1484| [Constructor] void POD_Middle::POD_Middle() +# 1484| <params>: +# 1488| [CopyAssignmentOperator] POD_Derived& POD_Derived::operator=(POD_Derived const&) +# 1488| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const POD_Derived & -# 1441| [MoveAssignmentOperator] POD_Derived& POD_Derived::operator=(POD_Derived&&) -# 1441| <params>: +# 1488| [MoveAssignmentOperator] POD_Derived& POD_Derived::operator=(POD_Derived&&) +# 1488| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] POD_Derived && -# 1441| [Constructor] void POD_Derived::POD_Derived() -# 1441| <params>: -# 1445| [TopLevelFunction] void temporary_hierarchy() -# 1445| <params>: -# 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| <params>: +# 1492| [TopLevelFunction] void temporary_hierarchy() +# 1492| <params>: +# 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 @@ -12052,40 +12170,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 @@ -12097,16 +12215,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 @@ -12122,99 +12240,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| <params>: +# 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| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Inheritance_Test_B & -# 1452| [Constructor] void Inheritance_Test_B::Inheritance_Test_B() -# 1452| <params>: -# 1453| [Destructor] void Inheritance_Test_B::~Inheritance_Test_B() -# 1453| <params>: -# 1453| getEntryPoint(): [BlockStmt] { ... } -# 1453| getStmt(0): [ReturnStmt] return ... -# 1453| <destructions>: -# 1456| [CopyAssignmentOperator] Inheritance_Test_A& Inheritance_Test_A::operator=(Inheritance_Test_A const&) -# 1456| <params>: +# 1499| [Constructor] void Inheritance_Test_B::Inheritance_Test_B() +# 1499| <params>: +# 1500| [Destructor] void Inheritance_Test_B::~Inheritance_Test_B() +# 1500| <params>: +# 1500| getEntryPoint(): [BlockStmt] { ... } +# 1500| getStmt(0): [ReturnStmt] return ... +# 1500| <destructions>: +# 1503| [CopyAssignmentOperator] Inheritance_Test_A& Inheritance_Test_A::operator=(Inheritance_Test_A const&) +# 1503| <params>: #-----| 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| <params>: +# 1503| [MoveAssignmentOperator] Inheritance_Test_A& Inheritance_Test_A::operator=(Inheritance_Test_A&&) +# 1503| <params>: #-----| 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| <params>: +# 1503| [CopyConstructor] void Inheritance_Test_A::Inheritance_Test_A(Inheritance_Test_A const&) +# 1503| <params>: #-----| 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| <params>: +# 1503| [MoveConstructor] void Inheritance_Test_A::Inheritance_Test_A(Inheritance_Test_A&&) +# 1503| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] Inheritance_Test_A && -# 1456| [Destructor] void Inheritance_Test_A::~Inheritance_Test_A() -# 1456| <params>: -# 1459| [Constructor] void Inheritance_Test_A::Inheritance_Test_A() -# 1459| <params>: -# 1459| <initializations>: -# 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| <params>: -# 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| <params>: +# 1506| [Constructor] void Inheritance_Test_A::Inheritance_Test_A() +# 1506| <params>: +# 1506| <initializations>: +# 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| <params>: +# 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 @@ -12232,8 +12350,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 @@ -12251,1462 +12369,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| <params>: +# 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| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingDataMemberMemberStruct & -# 1484| [MoveAssignmentOperator] StructuredBindingDataMemberMemberStruct& StructuredBindingDataMemberMemberStruct::operator=(StructuredBindingDataMemberMemberStruct&&) -# 1484| <params>: +# 1531| [MoveAssignmentOperator] StructuredBindingDataMemberMemberStruct& StructuredBindingDataMemberMemberStruct::operator=(StructuredBindingDataMemberMemberStruct&&) +# 1531| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] StructuredBindingDataMemberMemberStruct && -# 1484| [Constructor] void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct() -# 1484| <params>: -# 1484| <initializations>: -# 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| <params>: +# 1531| [Constructor] void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct() +# 1531| <params>: +# 1531| <initializations>: +# 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| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingDataMemberMemberStruct & -# 1484| [MoveConstructor] void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct(StructuredBindingDataMemberMemberStruct&&) -# 1484| <params>: +# 1531| [MoveConstructor] void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct(StructuredBindingDataMemberMemberStruct&&) +# 1531| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] StructuredBindingDataMemberMemberStruct && -# 1488| [CopyAssignmentOperator] StructuredBindingDataMemberStruct& StructuredBindingDataMemberStruct::operator=(StructuredBindingDataMemberStruct const&) -# 1488| <params>: +# 1535| [CopyAssignmentOperator] StructuredBindingDataMemberStruct& StructuredBindingDataMemberStruct::operator=(StructuredBindingDataMemberStruct const&) +# 1535| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1488| [Constructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() -# 1488| <params>: -# 1488| <initializations>: -# 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| <params>: +# 1535| [Constructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() +# 1535| <params>: +# 1535| <initializations>: +# 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| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1488| <initializations>: -# 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| <params>: +# 1535| <initializations>: +# 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| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] StructuredBindingDataMemberStruct && -# 1501| [TopLevelFunction] void data_member_structured_binding() -# 1501| <params>: -# 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| <params>: +# 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| <params>: +# 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| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & -# 1541| [Constructor] void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet() -# 1541| <params>: -# 1541| <initializations>: -# 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| <params>: +# 1588| [Constructor] void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet() +# 1588| <params>: +# 1588| <initializations>: +# 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| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & -# 1541| <initializations>: -# 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| <params>: +# 1588| <initializations>: +# 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| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] StructuredBindingTupleRefGet && -# 1547| [MemberFunction,TemplateFunction] type& StructuredBindingTupleRefGet::get<int i>() -# 1547| <params>: -# 1551| [CopyAssignmentOperator] std::tuple_size<StructuredBindingTupleRefGet>& std::tuple_size<StructuredBindingTupleRefGet>::operator=(std::tuple_size<StructuredBindingTupleRefGet> const&) -# 1551| <params>: +# 1594| [MemberFunction,TemplateFunction] type& StructuredBindingTupleRefGet::get<int i>() +# 1594| <params>: +# 1598| [CopyAssignmentOperator] std::tuple_size<StructuredBindingTupleRefGet>& std::tuple_size<StructuredBindingTupleRefGet>::operator=(std::tuple_size<StructuredBindingTupleRefGet> const&) +# 1598| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_size<StructuredBindingTupleRefGet> & -# 1551| [MoveAssignmentOperator] std::tuple_size<StructuredBindingTupleRefGet>& std::tuple_size<StructuredBindingTupleRefGet>::operator=(std::tuple_size<StructuredBindingTupleRefGet>&&) -# 1551| <params>: +# 1598| [MoveAssignmentOperator] std::tuple_size<StructuredBindingTupleRefGet>& std::tuple_size<StructuredBindingTupleRefGet>::operator=(std::tuple_size<StructuredBindingTupleRefGet>&&) +# 1598| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_size<StructuredBindingTupleRefGet> && -# 1556| [CopyAssignmentOperator] std::tuple_element<int 0, StructuredBindingTupleRefGet>& std::tuple_element<int 0, StructuredBindingTupleRefGet>::operator=(std::tuple_element<int 0, StructuredBindingTupleRefGet> const&) -# 1556| <params>: +# 1603| [CopyAssignmentOperator] std::tuple_element<int 0, StructuredBindingTupleRefGet>& std::tuple_element<int 0, StructuredBindingTupleRefGet>::operator=(std::tuple_element<int 0, StructuredBindingTupleRefGet> const&) +# 1603| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<0, StructuredBindingTupleRefGet> & -# 1556| [MoveAssignmentOperator] std::tuple_element<int 0, StructuredBindingTupleRefGet>& std::tuple_element<int 0, StructuredBindingTupleRefGet>::operator=(std::tuple_element<int 0, StructuredBindingTupleRefGet>&&) -# 1556| <params>: +# 1603| [MoveAssignmentOperator] std::tuple_element<int 0, StructuredBindingTupleRefGet>& std::tuple_element<int 0, StructuredBindingTupleRefGet>::operator=(std::tuple_element<int 0, StructuredBindingTupleRefGet>&&) +# 1603| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<0, StructuredBindingTupleRefGet> && -# 1560| [CopyAssignmentOperator] std::tuple_element<int 1, StructuredBindingTupleRefGet>& std::tuple_element<int 1, StructuredBindingTupleRefGet>::operator=(std::tuple_element<int 1, StructuredBindingTupleRefGet> const&) -# 1560| <params>: +# 1607| [CopyAssignmentOperator] std::tuple_element<int 1, StructuredBindingTupleRefGet>& std::tuple_element<int 1, StructuredBindingTupleRefGet>::operator=(std::tuple_element<int 1, StructuredBindingTupleRefGet> const&) +# 1607| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<1, StructuredBindingTupleRefGet> & -# 1560| [MoveAssignmentOperator] std::tuple_element<int 1, StructuredBindingTupleRefGet>& std::tuple_element<int 1, StructuredBindingTupleRefGet>::operator=(std::tuple_element<int 1, StructuredBindingTupleRefGet>&&) -# 1560| <params>: +# 1607| [MoveAssignmentOperator] std::tuple_element<int 1, StructuredBindingTupleRefGet>& std::tuple_element<int 1, StructuredBindingTupleRefGet>::operator=(std::tuple_element<int 1, StructuredBindingTupleRefGet>&&) +# 1607| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<1, StructuredBindingTupleRefGet> && -# 1564| [CopyAssignmentOperator] std::tuple_element<int 2, StructuredBindingTupleRefGet>& std::tuple_element<int 2, StructuredBindingTupleRefGet>::operator=(std::tuple_element<int 2, StructuredBindingTupleRefGet> const&) -# 1564| <params>: +# 1611| [CopyAssignmentOperator] std::tuple_element<int 2, StructuredBindingTupleRefGet>& std::tuple_element<int 2, StructuredBindingTupleRefGet>::operator=(std::tuple_element<int 2, StructuredBindingTupleRefGet> const&) +# 1611| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<2, StructuredBindingTupleRefGet> & -# 1564| [MoveAssignmentOperator] std::tuple_element<int 2, StructuredBindingTupleRefGet>& std::tuple_element<int 2, StructuredBindingTupleRefGet>::operator=(std::tuple_element<int 2, StructuredBindingTupleRefGet>&&) -# 1564| <params>: +# 1611| [MoveAssignmentOperator] std::tuple_element<int 2, StructuredBindingTupleRefGet>& std::tuple_element<int 2, StructuredBindingTupleRefGet>::operator=(std::tuple_element<int 2, StructuredBindingTupleRefGet>&&) +# 1611| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<2, StructuredBindingTupleRefGet> && -# 1569| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element<int 0, StructuredBindingTupleRefGet>::type& StructuredBindingTupleRefGet::get<int 0>() -# 1569| <params>: -# 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<int 0, StructuredBindingTupleRefGet>::type& StructuredBindingTupleRefGet::get<int 0>() +# 1616| <params>: +# 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<int 1, StructuredBindingTupleRefGet>::type& StructuredBindingTupleRefGet::get<int 1>() -# 1573| <params>: -# 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<int 1, StructuredBindingTupleRefGet>::type& StructuredBindingTupleRefGet::get<int 1>() +# 1620| <params>: +# 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<int 2, StructuredBindingTupleRefGet>::type StructuredBindingTupleRefGet::get<int 2>() -# 1577| <params>: -# 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| <params>: -# 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<int 2, StructuredBindingTupleRefGet>::type StructuredBindingTupleRefGet::get<int 2>() +# 1624| <params>: +# 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| <params>: +# 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| <params>: +# 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| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingTupleNoRefGet & -# 1608| [Constructor] void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet() -# 1608| <params>: -# 1608| <initializations>: -# 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| <params>: +# 1655| [Constructor] void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet() +# 1655| <params>: +# 1655| <initializations>: +# 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| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingTupleNoRefGet & -# 1608| [MoveConstructor] void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet(StructuredBindingTupleNoRefGet&&) -# 1608| <params>: +# 1655| [MoveConstructor] void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet(StructuredBindingTupleNoRefGet&&) +# 1655| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] StructuredBindingTupleNoRefGet && -# 1613| [MemberFunction,TemplateFunction] type StructuredBindingTupleNoRefGet::get<int i>() -# 1613| <params>: -# 1617| [CopyAssignmentOperator] std::tuple_size<StructuredBindingTupleNoRefGet>& std::tuple_size<StructuredBindingTupleNoRefGet>::operator=(std::tuple_size<StructuredBindingTupleNoRefGet> const&) -# 1617| <params>: +# 1660| [MemberFunction,TemplateFunction] type StructuredBindingTupleNoRefGet::get<int i>() +# 1660| <params>: +# 1664| [CopyAssignmentOperator] std::tuple_size<StructuredBindingTupleNoRefGet>& std::tuple_size<StructuredBindingTupleNoRefGet>::operator=(std::tuple_size<StructuredBindingTupleNoRefGet> const&) +# 1664| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_size<StructuredBindingTupleNoRefGet> & -# 1617| [MoveAssignmentOperator] std::tuple_size<StructuredBindingTupleNoRefGet>& std::tuple_size<StructuredBindingTupleNoRefGet>::operator=(std::tuple_size<StructuredBindingTupleNoRefGet>&&) -# 1617| <params>: +# 1664| [MoveAssignmentOperator] std::tuple_size<StructuredBindingTupleNoRefGet>& std::tuple_size<StructuredBindingTupleNoRefGet>::operator=(std::tuple_size<StructuredBindingTupleNoRefGet>&&) +# 1664| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_size<StructuredBindingTupleNoRefGet> && -# 1622| [CopyAssignmentOperator] std::tuple_element<int 0, StructuredBindingTupleNoRefGet>& std::tuple_element<int 0, StructuredBindingTupleNoRefGet>::operator=(std::tuple_element<int 0, StructuredBindingTupleNoRefGet> const&) -# 1622| <params>: +# 1669| [CopyAssignmentOperator] std::tuple_element<int 0, StructuredBindingTupleNoRefGet>& std::tuple_element<int 0, StructuredBindingTupleNoRefGet>::operator=(std::tuple_element<int 0, StructuredBindingTupleNoRefGet> const&) +# 1669| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<0, StructuredBindingTupleNoRefGet> & -# 1622| [MoveAssignmentOperator] std::tuple_element<int 0, StructuredBindingTupleNoRefGet>& std::tuple_element<int 0, StructuredBindingTupleNoRefGet>::operator=(std::tuple_element<int 0, StructuredBindingTupleNoRefGet>&&) -# 1622| <params>: +# 1669| [MoveAssignmentOperator] std::tuple_element<int 0, StructuredBindingTupleNoRefGet>& std::tuple_element<int 0, StructuredBindingTupleNoRefGet>::operator=(std::tuple_element<int 0, StructuredBindingTupleNoRefGet>&&) +# 1669| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<0, StructuredBindingTupleNoRefGet> && -# 1626| [CopyAssignmentOperator] std::tuple_element<int 1, StructuredBindingTupleNoRefGet>& std::tuple_element<int 1, StructuredBindingTupleNoRefGet>::operator=(std::tuple_element<int 1, StructuredBindingTupleNoRefGet> const&) -# 1626| <params>: +# 1673| [CopyAssignmentOperator] std::tuple_element<int 1, StructuredBindingTupleNoRefGet>& std::tuple_element<int 1, StructuredBindingTupleNoRefGet>::operator=(std::tuple_element<int 1, StructuredBindingTupleNoRefGet> const&) +# 1673| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<1, StructuredBindingTupleNoRefGet> & -# 1626| [MoveAssignmentOperator] std::tuple_element<int 1, StructuredBindingTupleNoRefGet>& std::tuple_element<int 1, StructuredBindingTupleNoRefGet>::operator=(std::tuple_element<int 1, StructuredBindingTupleNoRefGet>&&) -# 1626| <params>: +# 1673| [MoveAssignmentOperator] std::tuple_element<int 1, StructuredBindingTupleNoRefGet>& std::tuple_element<int 1, StructuredBindingTupleNoRefGet>::operator=(std::tuple_element<int 1, StructuredBindingTupleNoRefGet>&&) +# 1673| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<1, StructuredBindingTupleNoRefGet> && -# 1630| [CopyAssignmentOperator] std::tuple_element<int 2, StructuredBindingTupleNoRefGet>& std::tuple_element<int 2, StructuredBindingTupleNoRefGet>::operator=(std::tuple_element<int 2, StructuredBindingTupleNoRefGet> const&) -# 1630| <params>: +# 1677| [CopyAssignmentOperator] std::tuple_element<int 2, StructuredBindingTupleNoRefGet>& std::tuple_element<int 2, StructuredBindingTupleNoRefGet>::operator=(std::tuple_element<int 2, StructuredBindingTupleNoRefGet> const&) +# 1677| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<2, StructuredBindingTupleNoRefGet> & -# 1630| [MoveAssignmentOperator] std::tuple_element<int 2, StructuredBindingTupleNoRefGet>& std::tuple_element<int 2, StructuredBindingTupleNoRefGet>::operator=(std::tuple_element<int 2, StructuredBindingTupleNoRefGet>&&) -# 1630| <params>: +# 1677| [MoveAssignmentOperator] std::tuple_element<int 2, StructuredBindingTupleNoRefGet>& std::tuple_element<int 2, StructuredBindingTupleNoRefGet>::operator=(std::tuple_element<int 2, StructuredBindingTupleNoRefGet>&&) +# 1677| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<2, StructuredBindingTupleNoRefGet> && -# 1635| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element<int 0, StructuredBindingTupleNoRefGet>::type StructuredBindingTupleNoRefGet::get<int 0>() -# 1635| <params>: -# 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<int 1, StructuredBindingTupleNoRefGet>::type StructuredBindingTupleNoRefGet::get<int 1>() -# 1639| <params>: -# 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<int 2, StructuredBindingTupleNoRefGet>::type StructuredBindingTupleNoRefGet::get<int 2>() -# 1643| <params>: -# 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| <params>: -# 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<int 0, StructuredBindingTupleNoRefGet>::type StructuredBindingTupleNoRefGet::get<int 0>() +# 1682| <params>: +# 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<int 1, StructuredBindingTupleNoRefGet>::type StructuredBindingTupleNoRefGet::get<int 1>() +# 1686| <params>: +# 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<int 2, StructuredBindingTupleNoRefGet>::type StructuredBindingTupleNoRefGet::get<int 2>() +# 1690| <params>: +# 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| <params>: +# 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| <params>: -# 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| <params>: +# 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 @@ -13721,8 +13839,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 @@ -13737,351 +13855,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| <params>: +# 1724| getStmt(2): [ReturnStmt] return ... +# 1726| [CopyAssignmentOperator] CapturedLambdaMyObj& CapturedLambdaMyObj::operator=(CapturedLambdaMyObj const&) +# 1726| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CapturedLambdaMyObj & -# 1679| [MoveAssignmentOperator] CapturedLambdaMyObj& CapturedLambdaMyObj::operator=(CapturedLambdaMyObj&&) -# 1679| <params>: +# 1726| [MoveAssignmentOperator] CapturedLambdaMyObj& CapturedLambdaMyObj::operator=(CapturedLambdaMyObj&&) +# 1726| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CapturedLambdaMyObj && -# 1679| [CopyConstructor] void CapturedLambdaMyObj::CapturedLambdaMyObj(CapturedLambdaMyObj const&) -# 1679| <params>: +# 1726| [CopyConstructor] void CapturedLambdaMyObj::CapturedLambdaMyObj(CapturedLambdaMyObj const&) +# 1726| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CapturedLambdaMyObj & -# 1679| [MoveConstructor] void CapturedLambdaMyObj::CapturedLambdaMyObj(CapturedLambdaMyObj&&) -# 1679| <params>: +# 1726| [MoveConstructor] void CapturedLambdaMyObj::CapturedLambdaMyObj(CapturedLambdaMyObj&&) +# 1726| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CapturedLambdaMyObj && -# 1682| [Constructor] void CapturedLambdaMyObj::CapturedLambdaMyObj() -# 1682| <params>: -# 1682| <initializations>: -# 1682| getEntryPoint(): [BlockStmt] { ... } -# 1682| getStmt(0): [ReturnStmt] return ... -# 1685| [TopLevelFunction] void captured_lambda(int, int&, int&&) -# 1685| <params>: -# 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| <params>: +# 1729| <initializations>: +# 1729| getEntryPoint(): [BlockStmt] { ... } +# 1729| getStmt(0): [ReturnStmt] return ... +# 1732| [TopLevelFunction] void captured_lambda(int, int&, int&&) +# 1732| <params>: +# 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| <params>: +# 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| <params>: #-----| 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| <params>: +#-----| 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| <params>: #-----| 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| <params>: +#-----| 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| <params>: #-----| 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| <params>: -# 1690| [ConstMemberFunction] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const -# 1690| <params>: -# 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| <params>: +#-----| 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| <params>: +# 1737| [ConstMemberFunction] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1737, col. 25)::operator()() const +# 1737| <params>: +# 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| <params>: #-----| 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| <params>: +#-----| 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| <params>: #-----| 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| <params>: +#-----| 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| <params>: #-----| 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| <params>: -# 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| <params>: -# 1691| getEntryPoint(): [BlockStmt] { ... } -# 1691| getStmt(0): [EmptyStmt] ; -# 1691| getStmt(1): [ReturnStmt] return ... -# 1695| [TopLevelFunction] int goto_on_same_line() -# 1695| <params>: -# 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| <params>: +#-----| 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| <params>: +# 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| <params>: +# 1738| getEntryPoint(): [BlockStmt] { ... } +# 1738| getStmt(0): [EmptyStmt] ; +# 1738| getStmt(1): [ReturnStmt] return ... +# 1742| [TopLevelFunction] int goto_on_same_line() +# 1742| <params>: +# 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| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const TrivialLambdaClass & -# 1701| [MoveAssignmentOperator] TrivialLambdaClass& TrivialLambdaClass::operator=(TrivialLambdaClass&&) -# 1701| <params>: +# 1748| [MoveAssignmentOperator] TrivialLambdaClass& TrivialLambdaClass::operator=(TrivialLambdaClass&&) +# 1748| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] TrivialLambdaClass && -# 1703| [ConstMemberFunction] void TrivialLambdaClass::m() const -# 1703| <params>: -# 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| <params>: +# 1750| [ConstMemberFunction] void TrivialLambdaClass::m() const +# 1750| <params>: +# 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| <params>: #-----| 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| <params>: +#-----| 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| <params>: #-----| 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| <params>: +#-----| 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| <params>: #-----| 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| <params>: -# 1704| [ConstMemberFunction] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const -# 1704| <params>: -# 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| <params>: +#-----| 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| <params>: +# 1751| [ConstMemberFunction] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1751, col. 26)::operator()() const +# 1751| <params>: +# 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| <params>: #-----| 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| <params>: +#-----| 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| <params>: #-----| 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| <params>: +#-----| 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| <params>: #-----| 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| <params>: -# 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| <params>: -# 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| <params>: -# 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| <params>: +# 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| <params>: +# 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| <params>: +# 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) @@ -14091,723 +14209,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| <params>: +# 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| <params>: #-----| 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| <params>: +#-----| 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| <params>: #-----| 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| <params>: +#-----| 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| <params>: #-----| 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| <params>: -# 1718| [ConstMemberFunction] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const -# 1718| <params>: -# 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| <params>: +#-----| 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| <params>: +# 1765| [ConstMemberFunction] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1765, col. 21)::operator()() const +# 1765| <params>: +# 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| <params>: #-----| 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| <params>: +#-----| 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| <params>: #-----| 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| <params>: +#-----| 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| <params>: #-----| 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| <params>: -# 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| <params>: -# 1719| getEntryPoint(): [BlockStmt] { ... } -# 1719| getStmt(0): [ReturnStmt] return ... -# 1723| [CopyAssignmentOperator] CopyConstructorWithImplicitArgumentClass& CopyConstructorWithImplicitArgumentClass::operator=(CopyConstructorWithImplicitArgumentClass const&) -# 1723| <params>: +#-----| 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| <params>: +# 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| <params>: +# 1766| getEntryPoint(): [BlockStmt] { ... } +# 1766| getStmt(0): [ReturnStmt] return ... +# 1770| [CopyAssignmentOperator] CopyConstructorWithImplicitArgumentClass& CopyConstructorWithImplicitArgumentClass::operator=(CopyConstructorWithImplicitArgumentClass const&) +# 1770| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & -# 1726| [Constructor] void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass() -# 1726| <params>: -# 1726| <initializations>: -# 1726| getEntryPoint(): [BlockStmt] { ... } -# 1726| getStmt(0): [ReturnStmt] return ... -# 1727| [CopyConstructor] void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass(CopyConstructorWithImplicitArgumentClass const&) -# 1727| <params>: -# 1727| getParameter(0): [Parameter] c -# 1727| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & -# 1727| <initializations>: -# 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| <params>: +# 1773| [Constructor] void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass() +# 1773| <params>: +# 1773| <initializations>: +# 1773| getEntryPoint(): [BlockStmt] { ... } +# 1773| getStmt(0): [ReturnStmt] return ... +# 1774| [CopyConstructor] void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass(CopyConstructorWithImplicitArgumentClass const&) +# 1774| <params>: +# 1774| getParameter(0): [Parameter] c +# 1774| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & +# 1774| <initializations>: +# 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| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorWithBitwiseCopyClass & -# 1732| [MoveAssignmentOperator] CopyConstructorWithBitwiseCopyClass& CopyConstructorWithBitwiseCopyClass::operator=(CopyConstructorWithBitwiseCopyClass&&) -# 1732| <params>: +# 1779| [MoveAssignmentOperator] CopyConstructorWithBitwiseCopyClass& CopyConstructorWithBitwiseCopyClass::operator=(CopyConstructorWithBitwiseCopyClass&&) +# 1779| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorWithBitwiseCopyClass && -# 1732| [CopyConstructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass(CopyConstructorWithBitwiseCopyClass const&) -# 1732| <params>: +# 1779| [CopyConstructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass(CopyConstructorWithBitwiseCopyClass const&) +# 1779| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorWithBitwiseCopyClass & -# 1732| [MoveConstructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass(CopyConstructorWithBitwiseCopyClass&&) -# 1732| <params>: +# 1779| [MoveConstructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass(CopyConstructorWithBitwiseCopyClass&&) +# 1779| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorWithBitwiseCopyClass && -# 1735| [Constructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass() -# 1735| <params>: -# 1735| <initializations>: -# 1735| getEntryPoint(): [BlockStmt] { ... } -# 1735| getStmt(0): [ReturnStmt] return ... -# 1738| [CopyAssignmentOperator] CopyConstructorTestNonVirtualClass& CopyConstructorTestNonVirtualClass::operator=(CopyConstructorTestNonVirtualClass const&) -# 1738| <params>: +# 1782| [Constructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass() +# 1782| <params>: +# 1782| <initializations>: +# 1782| getEntryPoint(): [BlockStmt] { ... } +# 1782| getStmt(0): [ReturnStmt] return ... +# 1785| [CopyAssignmentOperator] CopyConstructorTestNonVirtualClass& CopyConstructorTestNonVirtualClass::operator=(CopyConstructorTestNonVirtualClass const&) +# 1785| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & -# 1738| [MoveAssignmentOperator] CopyConstructorTestNonVirtualClass& CopyConstructorTestNonVirtualClass::operator=(CopyConstructorTestNonVirtualClass&&) -# 1738| <params>: +# 1785| [MoveAssignmentOperator] CopyConstructorTestNonVirtualClass& CopyConstructorTestNonVirtualClass::operator=(CopyConstructorTestNonVirtualClass&&) +# 1785| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorTestNonVirtualClass && -# 1738| [CopyConstructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass const&) -# 1738| <params>: +# 1785| [CopyConstructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass const&) +# 1785| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & -# 1738| <initializations>: -# 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| <params>: +# 1785| <initializations>: +# 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| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorTestNonVirtualClass && -# 1742| [Constructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass() -# 1742| <params>: -# 1742| <initializations>: -# 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| <params>: +# 1789| [Constructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass() +# 1789| <params>: +# 1789| <initializations>: +# 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| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & -# 1745| [MoveAssignmentOperator] CopyConstructorTestVirtualClass& CopyConstructorTestVirtualClass::operator=(CopyConstructorTestVirtualClass&&) -# 1745| <params>: +# 1792| [MoveAssignmentOperator] CopyConstructorTestVirtualClass& CopyConstructorTestVirtualClass::operator=(CopyConstructorTestVirtualClass&&) +# 1792| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorTestVirtualClass && -# 1745| [CopyConstructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass const&) -# 1745| <params>: +# 1792| [CopyConstructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass const&) +# 1792| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & -# 1745| <initializations>: -# 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| <params>: +# 1792| <initializations>: +# 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| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorTestVirtualClass && -# 1749| [Constructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass() -# 1749| <params>: -# 1749| <initializations>: -# 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| <params>: -# 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| <params>: -# 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| <params>: -# 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| <params>: +# 1796| <initializations>: +# 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| <params>: +# 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| <params>: +# 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| <params>: +# 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| <params>: +# 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| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const A & -# 1836| [MoveAssignmentOperator] block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) -# 1836| <params>: +# 1883| [MoveAssignmentOperator] block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) +# 1883| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] A && #-----| getEntryPoint(): [BlockStmt] { ... } @@ -14840,43 +14958,43 @@ ir.cpp: #-----| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) #-----| Type = [LValueReferenceType] A & #-----| ValueCategory = prvalue -# 1836| [Constructor] void block_assignment::A::A() -# 1836| <params>: -# 1836| [CopyConstructor] void block_assignment::A::A(block_assignment::A const&) -# 1836| <params>: +# 1883| [Constructor] void block_assignment::A::A() +# 1883| <params>: +# 1883| [CopyConstructor] void block_assignment::A::A(block_assignment::A const&) +# 1883| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const A & -# 1836| [MoveConstructor] void block_assignment::A::A(block_assignment::A&&) -# 1836| <params>: +# 1883| [MoveConstructor] void block_assignment::A::A(block_assignment::A&&) +# 1883| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] A && -# 1838| [VirtualFunction] void block_assignment::A::f() -# 1838| <params>: -# 1841| [CopyAssignmentOperator] block_assignment::B& block_assignment::B::operator=(block_assignment::B const&) -# 1841| <params>: +# 1885| [VirtualFunction] void block_assignment::A::f() +# 1885| <params>: +# 1888| [CopyAssignmentOperator] block_assignment::B& block_assignment::B::operator=(block_assignment::B const&) +# 1888| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const B & -# 1841| [MoveAssignmentOperator] block_assignment::B& block_assignment::B::operator=(block_assignment::B&&) -# 1841| <params>: +# 1888| [MoveAssignmentOperator] block_assignment::B& block_assignment::B::operator=(block_assignment::B&&) +# 1888| <params>: #-----| 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 @@ -14904,1072 +15022,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| <params>: +# 1888| [CopyConstructor] void block_assignment::B::B(block_assignment::B const&) +# 1888| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const B & -# 1841| [MoveConstructor] void block_assignment::B::B(block_assignment::B&&) -# 1841| <params>: +# 1888| [MoveConstructor] void block_assignment::B::B(block_assignment::B&&) +# 1888| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] B && -# 1842| [Constructor] void block_assignment::B::B(block_assignment::A*) -# 1842| <params>: -# 1842| getParameter(0): [Parameter] (unnamed parameter 0) -# 1842| Type = [PointerType] A * -# 1845| [TopLevelFunction] void block_assignment::foo() -# 1845| <params>: -# 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| <params>: -# 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| <params>: +# 1889| [Constructor] void block_assignment::B::B(block_assignment::A*) +# 1889| <params>: +# 1889| getParameter(0): [Parameter] (unnamed parameter 0) +# 1889| Type = [PointerType] A * +# 1892| [TopLevelFunction] void block_assignment::foo() +# 1892| <params>: +# 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| <params>: +# 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| <params>: #-----| 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| <params>: +# 1904| [MoveAssignmentOperator] missing_declaration_entries::S& missing_declaration_entries::S::operator=(missing_declaration_entries::S&&) +# 1904| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] S && -# 1861| [CopyAssignmentOperator] missing_declaration_entries::Bar1<int>& missing_declaration_entries::Bar1<int>::operator=(missing_declaration_entries::Bar1<int> const&) -# 1861| <params>: +# 1908| [CopyAssignmentOperator] missing_declaration_entries::Bar1<int>& missing_declaration_entries::Bar1<int>::operator=(missing_declaration_entries::Bar1<int> const&) +# 1908| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Bar1<int> & -# 1861| [MoveAssignmentOperator] missing_declaration_entries::Bar1<int>& missing_declaration_entries::Bar1<int>::operator=(missing_declaration_entries::Bar1<int>&&) -# 1861| <params>: +# 1908| [MoveAssignmentOperator] missing_declaration_entries::Bar1<int>& missing_declaration_entries::Bar1<int>::operator=(missing_declaration_entries::Bar1<int>&&) +# 1908| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] Bar1<int> && -# 1864| [MemberFunction] void* missing_declaration_entries::Bar1<T>::missing_type_decl_entry(missing_declaration_entries::Bar1<T>::pointer) -# 1864| <params>: -# 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<int>::missing_type_decl_entry(missing_declaration_entries::Bar1<int>::pointer) -# 1864| <params>: -# 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| <params>: -# 1870| getEntryPoint(): [BlockStmt] { ... } -# 1871| getStmt(0): [DeclStmt] declaration -# 1871| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 1871| Type = [ClassTemplateInstantiation,Struct] Bar1<int> -# 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<int> -# 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<int>& missing_declaration_entries::Bar2<int>::operator=(missing_declaration_entries::Bar2<int> const&) -# 1875| <params>: +# 1911| [MemberFunction] void* missing_declaration_entries::Bar1<T>::missing_type_decl_entry(missing_declaration_entries::Bar1<T>::pointer) +# 1911| <params>: +# 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<int>::missing_type_decl_entry(missing_declaration_entries::Bar1<int>::pointer) +# 1911| <params>: +# 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| <params>: +# 1917| getEntryPoint(): [BlockStmt] { ... } +# 1918| getStmt(0): [DeclStmt] declaration +# 1918| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 1918| Type = [ClassTemplateInstantiation,Struct] Bar1<int> +# 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<int> +# 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<int>& missing_declaration_entries::Bar2<int>::operator=(missing_declaration_entries::Bar2<int> const&) +# 1922| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Bar2<int> & -# 1875| [MoveAssignmentOperator] missing_declaration_entries::Bar2<int>& missing_declaration_entries::Bar2<int>::operator=(missing_declaration_entries::Bar2<int>&&) -# 1875| <params>: +# 1922| [MoveAssignmentOperator] missing_declaration_entries::Bar2<int>& missing_declaration_entries::Bar2<int>::operator=(missing_declaration_entries::Bar2<int>&&) +# 1922| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] Bar2<int> && -# 1877| [MemberFunction] int missing_declaration_entries::Bar2<T>::two_missing_variable_declaration_entries() -# 1877| <params>: -# 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<int>::two_missing_variable_declaration_entries() -# 1877| <params>: -# 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| <params>: -# 1885| getEntryPoint(): [BlockStmt] { ... } -# 1886| getStmt(0): [DeclStmt] declaration -# 1886| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 1886| Type = [ClassTemplateInstantiation,Struct] Bar2<int> -# 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<int> -# 1887| ValueCategory = lvalue -# 1888| getStmt(2): [ReturnStmt] return ... -# 1891| [GlobalVariable] char global_template<char> -# 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<int> -# 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| <params>: -# 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| <params>: -# 1901| [TopLevelFunction] int noreturnTest(int) -# 1901| <params>: -# 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| <params>: -# 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| <params>: -# 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| <params>: -# 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<T>::two_missing_variable_declaration_entries() +# 1924| <params>: +# 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| <params>: -# 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| <params>: -# 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<int>::two_missing_variable_declaration_entries() +# 1924| <params>: +# 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| <params>: +# 1932| getEntryPoint(): [BlockStmt] { ... } +# 1933| getStmt(0): [DeclStmt] declaration +# 1933| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 1933| Type = [ClassTemplateInstantiation,Struct] Bar2<int> +# 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<int> +# 1934| ValueCategory = lvalue +# 1935| getStmt(2): [ReturnStmt] return ... +# 1938| [GlobalVariable] char global_template<char> +# 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<int> +# 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| <params>: -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const D & -# 1940| [MoveAssignmentOperator] D& D::operator=(D&&) -# 1940| <params>: -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] D && -# 1944| [MemberFunction] D& D::ReferenceStaticMemberFunction() -# 1944| <params>: -# 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| <params>: -# 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| <params>: -# 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| <params>: +# 1948| [TopLevelFunction] int noreturnTest(int) +# 1948| <params>: +# 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| <params>: +# 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| <params>: -# 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| <params>: +# 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| <params>: +# 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| <params>: -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const ValCat & -# 1975| [MoveAssignmentOperator] ValCat& ValCat::operator=(ValCat&&) -# 1975| <params>: -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] ValCat && -# 1976| [MemberFunction] ValCat& ValCat::lvalue() -# 1976| <params>: -# 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| <params>: -# 1978| [MemberFunction] ValCat ValCat::prvalue() -# 1978| <params>: -# 1981| [TopLevelFunction] void value_category_test() -# 1981| <params>: -# 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| <params>: +# 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| <params>: -# 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| <params>: -# 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| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const D & +# 1987| [MoveAssignmentOperator] D& D::operator=(D&&) +# 1987| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] D && +# 1991| [MemberFunction] D& D::ReferenceStaticMemberFunction() +# 1991| <params>: +# 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| <params>: +# 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| <params>: +# 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| <params>: +# 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| <params>: +# 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| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ValCat & +# 2022| [MoveAssignmentOperator] ValCat& ValCat::operator=(ValCat&&) +# 2022| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] ValCat && +# 2023| [MemberFunction] ValCat& ValCat::lvalue() +# 2023| <params>: +# 2024| [MemberFunction] ValCat&& ValCat::xvalue() +# 2024| <params>: +# 2025| [MemberFunction] ValCat ValCat::prvalue() +# 2025| <params>: +# 2028| [TopLevelFunction] void value_category_test() +# 2028| <params>: +# 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| <params>: +# 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| <params>: +# 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| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const TernaryPodObj & -# 2005| [MoveAssignmentOperator] TernaryPodObj& TernaryPodObj::operator=(TernaryPodObj&&) -# 2005| <params>: +# 2052| [MoveAssignmentOperator] TernaryPodObj& TernaryPodObj::operator=(TernaryPodObj&&) +# 2052| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] TernaryPodObj && -# 2008| [TopLevelFunction] void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) -# 2008| <params>: -# 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| <params>: +# 2055| [TopLevelFunction] void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) +# 2055| <params>: +# 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| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const TernaryNonPodObj & #-----| getEntryPoint(): [BlockStmt] { ... } @@ -15983,2486 +16101,2551 @@ ir.cpp: #-----| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) #-----| Type = [LValueReferenceType] TernaryNonPodObj & #-----| ValueCategory = prvalue -# 2015| [Constructor] void TernaryNonPodObj::TernaryNonPodObj() -# 2015| <params>: -# 2015| <initializations>: -# 2015| getEntryPoint(): [BlockStmt] { ... } -# 2015| getStmt(0): [ReturnStmt] return ... -# 2015| [CopyConstructor] void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) -# 2015| <params>: +# 2062| [Constructor] void TernaryNonPodObj::TernaryNonPodObj() +# 2062| <params>: +# 2062| <initializations>: +# 2062| getEntryPoint(): [BlockStmt] { ... } +# 2062| getStmt(0): [ReturnStmt] return ... +# 2062| [CopyConstructor] void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) +# 2062| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2015| <initializations>: -# 2015| getEntryPoint(): [BlockStmt] { ... } -# 2015| getStmt(0): [ReturnStmt] return ... -# 2016| [Destructor,VirtualFunction] void TernaryNonPodObj::~TernaryNonPodObj() -# 2016| <params>: -# 2016| getEntryPoint(): [BlockStmt] { ... } -# 2016| getStmt(0): [ReturnStmt] return ... -# 2016| <destructions>: -# 2019| [TopLevelFunction] void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) -# 2019| <params>: -# 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| <params>: -# 2026| getParameter(0): [Parameter] (unnamed parameter 0) -# 2026| Type = [IntType] unsigned int -# 2028| [TopLevelFunction] unsigned int CommaTest(unsigned int) -# 2028| <params>: -# 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| <params>: -# 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| <params>: -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Base2 & -# 2041| [Constructor] void Base2::Base2() -# 2041| <params>: -# 2041| <initializations>: -# 2041| getEntryPoint(): [BlockStmt] { ... } -# 2041| getStmt(0): [ReturnStmt] return ... -# 2041| [CopyConstructor] void Base2::Base2(Base2 const&) -# 2041| <params>: -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Base2 & -# 2043| [MemberFunction] void Base2::operator delete(void*) -# 2043| <params>: -# 2043| getParameter(0): [Parameter] p -# 2043| Type = [VoidPointerType] void * -# 2043| getEntryPoint(): [BlockStmt] { ... } -# 2044| getStmt(0): [ReturnStmt] return ... -# 2045| [Destructor,VirtualFunction] void Base2::~Base2() -# 2045| <params>: -# 2045| getEntryPoint(): [BlockStmt] { ... } -# 2045| getStmt(0): [ReturnStmt] return ... -# 2045| <destructions>: -# 2048| [CopyAssignmentOperator] Derived2& Derived2::operator=(Derived2 const&) -# 2048| <params>: -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Derived2 & -# 2048| [Constructor] void Derived2::Derived2() -# 2048| <params>: -# 2048| <initializations>: -# 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| <params>: -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Derived2 & -# 2051| [Destructor,VirtualFunction] void Derived2::~Derived2() -# 2051| <params>: -# 2051| getEntryPoint(): [BlockStmt] { ... } -# 2051| getStmt(0): [ReturnStmt] return ... -# 2051| <destructions>: -# 2051| getDestruction(0): [DestructorDirectDestruction] call to ~Base2 -# 2051| Type = [VoidType] void -# 2051| ValueCategory = prvalue -# 2053| [MemberFunction] void Derived2::operator delete(void*) -# 2053| <params>: -# 2053| getParameter(0): [Parameter] p -# 2053| Type = [VoidPointerType] void * -# 2053| getEntryPoint(): [BlockStmt] { ... } -# 2054| getStmt(0): [ReturnStmt] return ... -# 2058| [TopLevelFunction] int virtual_delete() -# 2058| <params>: -# 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| <initializations>: +# 2062| getEntryPoint(): [BlockStmt] { ... } +# 2062| getStmt(0): [ReturnStmt] return ... +# 2063| [Destructor,VirtualFunction] void TernaryNonPodObj::~TernaryNonPodObj() +# 2063| <params>: +# 2063| getEntryPoint(): [BlockStmt] { ... } +# 2063| getStmt(0): [ReturnStmt] return ... +# 2063| <destructions>: +# 2066| [TopLevelFunction] void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) +# 2066| <params>: +# 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| <params>: -# 2070| getParameter(0): [Parameter] (unnamed parameter 0) -# 2070| Type = [IntType] int -# 2072| [TopLevelFunction] void test_constant_folding() -# 2072| <params>: -# 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| <params>: -# 2077| getParameter(0): [Parameter] code -# 2077| Type = [IntType] int -# 2079| [TopLevelFunction] int NonExit() -# 2079| <params>: -# 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| <params>: +# 2073| getParameter(0): [Parameter] (unnamed parameter 0) +# 2073| Type = [IntType] unsigned int +# 2075| [TopLevelFunction] unsigned int CommaTest(unsigned int) +# 2075| <params>: +# 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| <params>: +# 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| <params>: -# 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| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Base2 & +# 2088| [Constructor] void Base2::Base2() +# 2088| <params>: +# 2088| <initializations>: +# 2088| getEntryPoint(): [BlockStmt] { ... } +# 2088| getStmt(0): [ReturnStmt] return ... +# 2088| [CopyConstructor] void Base2::Base2(Base2 const&) +# 2088| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Base2 & +# 2090| [MemberFunction] void Base2::operator delete(void*) +# 2090| <params>: +# 2090| getParameter(0): [Parameter] p +# 2090| Type = [VoidPointerType] void * +# 2090| getEntryPoint(): [BlockStmt] { ... } +# 2091| getStmt(0): [ReturnStmt] return ... +# 2092| [Destructor,VirtualFunction] void Base2::~Base2() # 2092| <params>: # 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| <destructions>: +# 2095| [CopyAssignmentOperator] Derived2& Derived2::operator=(Derived2 const&) +# 2095| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Derived2 & +# 2095| [Constructor] void Derived2::Derived2() +# 2095| <params>: +# 2095| <initializations>: +# 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| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Derived2 & +# 2098| [Destructor,VirtualFunction] void Derived2::~Derived2() +# 2098| <params>: +# 2098| getEntryPoint(): [BlockStmt] { ... } +# 2098| getStmt(0): [ReturnStmt] return ... +# 2098| <destructions>: +# 2098| getDestruction(0): [DestructorDirectDestruction] call to ~Base2 +# 2098| Type = [VoidType] void +# 2098| ValueCategory = prvalue +# 2100| [MemberFunction] void Derived2::operator delete(void*) # 2100| <params>: -# 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] <error expr> -# 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| <params>: -# 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| <params>: -# 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| <params>: +# 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| <params>: -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const HasOperatorBool & -# 2117| [MoveAssignmentOperator] HasOperatorBool& HasOperatorBool::operator=(HasOperatorBool&&) -# 2117| <params>: -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] HasOperatorBool && -# 2118| [ConversionOperator] bool HasOperatorBool::operator bool() -# 2118| <params>: -# 2121| [TopLevelFunction] void call_as_child_of_ConditionDeclExpr() -# 2121| <params>: -# 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| <params>: -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const ClassWithDestructor & -# 2125| [CopyConstructor] void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) -# 2125| <params>: -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const ClassWithDestructor & -# 2125| <initializations>: -# 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| <params>: -# 2128| <initializations>: -# 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| <params>: +# 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| <params>: +# 2124| getParameter(0): [Parameter] code +# 2124| Type = [IntType] int +# 2126| [TopLevelFunction] int NonExit() +# 2126| <params>: +# 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| <params>: -# 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| <destructions>: -# 2131| [MemberFunction] void ClassWithDestructor::set_x(char) -# 2131| <params>: -# 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| <params>: -# 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| <params>: -# 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| <params>: +# 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| <params>: +# 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| <params>: +# 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] <error expr> +# 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<ClassWithDestructor> -# 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<ClassWithDestructor> & -#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) -# 2154| getExpr(): [VariableAccess] ys -# 2154| Type = [ClassTemplateInstantiation,Struct] vector<ClassWithDestructor> -# 2154| ValueCategory = lvalue -# 2154| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2154| Type = [LValueReferenceType] vector<ClassWithDestructor> & -# 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<ClassWithDestructor> & -# 2154| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector<ClassWithDestructor>)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector<ClassWithDestructor> -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector<ClassWithDestructor> -#-----| 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<ClassWithDestructor> & -# 2154| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector<ClassWithDestructor>)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector<ClassWithDestructor> -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector<ClassWithDestructor> -#-----| 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<ClassWithDestructor> -# 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<ClassWithDestructor> -# 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<ClassWithDestructor> & -#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) -# 2157| getExpr(): [VariableAccess] ys -# 2157| Type = [ClassTemplateInstantiation,Struct] vector<ClassWithDestructor> -# 2157| ValueCategory = lvalue -# 2157| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2157| Type = [LValueReferenceType] vector<ClassWithDestructor> & -# 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<ClassWithDestructor> & -# 2157| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector<ClassWithDestructor>)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector<ClassWithDestructor> -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector<ClassWithDestructor> -#-----| 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<ClassWithDestructor> & -# 2157| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector<ClassWithDestructor>)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector<ClassWithDestructor> -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector<ClassWithDestructor> -#-----| 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<ClassWithDestructor> -# 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<ClassWithDestructor> -# 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<int> -# 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<int> & -#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) -# 2163| getExpr(): [VariableAccess] ys -# 2163| Type = [ClassTemplateInstantiation,Struct] vector<int> -# 2163| ValueCategory = lvalue -# 2163| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2163| Type = [LValueReferenceType] vector<int> & -# 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<int> & -# 2163| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector<int>)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector<int> -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector<int> -#-----| 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<int> & -# 2163| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector<int>)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector<int> -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector<int> -#-----| 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<int> -# 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<int> -# 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<ClassWithDestructor> -# 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<ClassWithDestructor> & -#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) -# 2168| getExpr(): [VariableAccess] ys -# 2168| Type = [ClassTemplateInstantiation,Struct] vector<ClassWithDestructor> -# 2168| ValueCategory = lvalue -# 2168| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2168| Type = [LValueReferenceType] vector<ClassWithDestructor> & -# 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<ClassWithDestructor> & -# 2168| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector<ClassWithDestructor>)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector<ClassWithDestructor> -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector<ClassWithDestructor> -#-----| 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<ClassWithDestructor> & -# 2168| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector<ClassWithDestructor>)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector<ClassWithDestructor> -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector<ClassWithDestructor> -#-----| 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<ClassWithDestructor> -# 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| <params>: +# 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| <params>: +# 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| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const HasOperatorBool & +# 2164| [MoveAssignmentOperator] HasOperatorBool& HasOperatorBool::operator=(HasOperatorBool&&) +# 2164| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] HasOperatorBool && +# 2165| [ConversionOperator] bool HasOperatorBool::operator bool() +# 2165| <params>: +# 2168| [TopLevelFunction] void call_as_child_of_ConditionDeclExpr() +# 2168| <params>: +# 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| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithDestructor & +# 2172| [CopyConstructor] void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) +# 2172| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithDestructor & +# 2172| <initializations>: +# 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| <params>: -# 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| <params>: +# 2175| <initializations>: +# 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| <params>: +# 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| <destructions>: +# 2178| [MemberFunction] void ClassWithDestructor::set_x(char) +# 2178| <params>: +# 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| <params>: +# 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| <params>: +# 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<ClassWithDestructor> +# 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<ClassWithDestructor> & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2201| getExpr(): [VariableAccess] ys +# 2201| Type = [ClassTemplateInstantiation,Struct] vector<ClassWithDestructor> +# 2201| ValueCategory = lvalue +# 2201| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2201| Type = [LValueReferenceType] vector<ClassWithDestructor> & +# 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<ClassWithDestructor> & +# 2201| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector<ClassWithDestructor>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector<ClassWithDestructor> +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector<ClassWithDestructor> +#-----| 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<ClassWithDestructor> & +# 2201| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector<ClassWithDestructor>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector<ClassWithDestructor> +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector<ClassWithDestructor> +#-----| 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<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> +#-----| ValueCategory = lvalue +# 2201| getUpdate(): [FunctionCall] call to operator++ +# 2201| Type = [LValueReferenceType] iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> & +# 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<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> +#-----| 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<ClassWithDestructor> +# 2201| ValueCategory = lvalue +# 2201| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2201| Type = [ClassTemplateInstantiation,Struct] iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> +# 2201| ValueCategory = lvalue +# 2204| getStmt(6): [RangeBasedForStmt] for(...:...) ... +# 2204| getInitialization(): [DeclStmt] declaration +# 2204| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys +# 2204| Type = [ClassTemplateInstantiation,Struct] vector<ClassWithDestructor> +# 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<ClassWithDestructor> & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2204| getExpr(): [VariableAccess] ys +# 2204| Type = [ClassTemplateInstantiation,Struct] vector<ClassWithDestructor> +# 2204| ValueCategory = lvalue +# 2204| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2204| Type = [LValueReferenceType] vector<ClassWithDestructor> & +# 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<ClassWithDestructor> & +# 2204| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector<ClassWithDestructor>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector<ClassWithDestructor> +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector<ClassWithDestructor> +#-----| 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<ClassWithDestructor> & +# 2204| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector<ClassWithDestructor>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector<ClassWithDestructor> +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector<ClassWithDestructor> +#-----| 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<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> +#-----| ValueCategory = lvalue +# 2204| getUpdate(): [FunctionCall] call to operator++ +# 2204| Type = [LValueReferenceType] iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> & +# 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<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> +#-----| 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<ClassWithDestructor> +# 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<ClassWithDestructor> +# 2204| ValueCategory = lvalue +# 2204| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2204| Type = [ClassTemplateInstantiation,Struct] iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> +# 2204| ValueCategory = lvalue +# 2210| getStmt(7): [RangeBasedForStmt] for(...:...) ... +# 2210| getInitialization(): [DeclStmt] declaration +# 2210| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys +# 2210| Type = [ClassTemplateInstantiation,Struct] vector<int> +# 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<int> & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2210| getExpr(): [VariableAccess] ys +# 2210| Type = [ClassTemplateInstantiation,Struct] vector<int> +# 2210| ValueCategory = lvalue +# 2210| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2210| Type = [LValueReferenceType] vector<int> & +# 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<int> & +# 2210| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector<int>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector<int> +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector<int> +#-----| 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<int> & +# 2210| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector<int>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector<int> +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector<int> +#-----| 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<random_access_iterator_tag, int, ptrdiff_t, int *, int &> & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> +#-----| ValueCategory = lvalue +# 2210| getUpdate(): [FunctionCall] call to operator++ +# 2210| Type = [LValueReferenceType] iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> & +# 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<random_access_iterator_tag, int, ptrdiff_t, int *, int &>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> +#-----| 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<int> +# 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<int> +# 2210| ValueCategory = lvalue +# 2210| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2210| Type = [ClassTemplateInstantiation,Struct] iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> +# 2210| ValueCategory = lvalue +# 2215| getStmt(8): [RangeBasedForStmt] for(...:...) ... +# 2215| getInitialization(): [DeclStmt] declaration +# 2215| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys +# 2215| Type = [ClassTemplateInstantiation,Struct] vector<ClassWithDestructor> +# 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<ClassWithDestructor> & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2215| getExpr(): [VariableAccess] ys +# 2215| Type = [ClassTemplateInstantiation,Struct] vector<ClassWithDestructor> +# 2215| ValueCategory = lvalue +# 2215| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2215| Type = [LValueReferenceType] vector<ClassWithDestructor> & +# 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<ClassWithDestructor> & +# 2215| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector<ClassWithDestructor>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector<ClassWithDestructor> +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector<ClassWithDestructor> +#-----| 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<ClassWithDestructor> & +# 2215| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector<ClassWithDestructor>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector<ClassWithDestructor> +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector<ClassWithDestructor> +#-----| 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<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> +#-----| ValueCategory = lvalue +# 2215| getUpdate(): [FunctionCall] call to operator++ +# 2215| Type = [LValueReferenceType] iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> & +# 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<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> +#-----| 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<ClassWithDestructor> +# 2215| ValueCategory = lvalue +# 2215| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2215| Type = [ClassTemplateInstantiation,Struct] iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> +# 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| <params>: +# 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| <params>: -# 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| <params>: +# 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| <params>: -# 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| <params>: +# 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>(ClassWithDestructor&) -# 2194| <params>: -# 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>(T&) -# 2194| <params>: -# 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>(int&) -# 2194| <params>: -# 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>(ClassWithDestructor&) -# 2197| <params>: -# 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>(T&) -# 2197| <params>: -# 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>(int&) -# 2197| <params>: -# 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| <params>: -# 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| <params>: -# 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| <params>: -# 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] <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] <handler> -# 2223| getBlock(): [CatchBlock] { ... } -# 2225| getChild(3): [Handler] <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| <params>: -# 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| <params>: -# 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<String> && -#-----| 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<String> & -# 2246| ValueCategory = prvalue -# 2246| getExpr(): [TemporaryObjectExpr] temporary object -# 2246| Type = [ClassTemplateInstantiation,Struct] vector<String> -# 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<String> && -# 2246| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector<String>)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector<String> -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector<String> -#-----| 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<String> && -# 2246| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector<String>)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector<String> -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector<String> -#-----| 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>(ClassWithDestructor&) +# 2241| <params>: +# 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>(T&) +# 2241| <params>: +# 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>(int&) +# 2241| <params>: +# 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>(ClassWithDestructor&) +# 2244| <params>: +# 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>(T&) +# 2244| <params>: +# 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>(int&) +# 2244| <params>: +# 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| <params>: +# 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| <params>: -# 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| <params>: -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Bool & -# 2263| [CopyConstructor] void Bool::Bool(Bool const&) -# 2263| <params>: -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Bool & -# 2265| [Constructor] void Bool::Bool(bool) -# 2265| <params>: -# 2265| getParameter(0): [Parameter] b_ -# 2265| Type = [BoolType] bool -# 2266| [ConversionOperator] bool Bool::operator bool() -# 2266| <params>: -# 2267| [Destructor] void Bool::~Bool() -# 2267| <params>: -# 2270| [TopLevelFunction] void IfDestructors3(bool) -# 2270| <params>: -# 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| <params>: -# 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| <params>: +# 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| <params>: +# 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] <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] <handler> +# 2270| getBlock(): [CatchBlock] { ... } +# 2272| getChild(3): [Handler] <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| <params>: +# 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| <params>: +# 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| <params>: -# 2293| getEntryPoint(): [BlockStmt] { ... } -# 2293| getStmt(0): [ReturnStmt] return ... -# 2295| [TopLevelFunction] void IfReturnDestructors(bool) -# 2295| <params>: -# 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<String> && +#-----| 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<String> & +# 2293| ValueCategory = prvalue +# 2293| getExpr(): [TemporaryObjectExpr] temporary object +# 2293| Type = [ClassTemplateInstantiation,Struct] vector<String> +# 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<String> && +# 2293| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector<String>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector<String> +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector<String> +#-----| 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<String> && +# 2293| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector<String>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector<String> +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector<String> +#-----| 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<random_access_iterator_tag, String, ptrdiff_t, String *, String &> & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &> +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &> +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &> +#-----| ValueCategory = lvalue +# 2293| getUpdate(): [FunctionCall] call to operator++ +# 2293| Type = [LValueReferenceType] iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &> & +# 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<random_access_iterator_tag, String, ptrdiff_t, String *, String &>)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &> +#-----| 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<random_access_iterator_tag, String, ptrdiff_t, String *, String &> +# 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| <params>: -# 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| <params>: +# 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| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Bool & +# 2310| [CopyConstructor] void Bool::Bool(Bool const&) +# 2310| <params>: +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Bool & +# 2312| [Constructor] void Bool::Bool(bool) +# 2312| <params>: +# 2312| getParameter(0): [Parameter] b_ +# 2312| Type = [BoolType] bool +# 2313| [ConversionOperator] bool Bool::operator bool() +# 2313| <params>: +# 2314| [Destructor] void Bool::~Bool() # 2314| <params>: -# 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| <params>: +# 2317| [TopLevelFunction] void IfDestructors3(bool) +# 2317| <params>: +# 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| <params>: +# 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| <params>: +# 2340| getEntryPoint(): [BlockStmt] { ... } +# 2340| getStmt(0): [ReturnStmt] return ... +# 2342| [TopLevelFunction] void IfReturnDestructors(bool) +# 2342| <params>: +# 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| <params>: +# 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| <params>: +# 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| <params>: #-----| 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| <params>: +# 2367| [MoveAssignmentOperator] return_routine_type::HasVoidToIntFunc& return_routine_type::HasVoidToIntFunc::operator=(return_routine_type::HasVoidToIntFunc&&) +# 2367| <params>: #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] HasVoidToIntFunc && -# 2322| [MemberFunction] void return_routine_type::HasVoidToIntFunc::VoidToInt(int) -# 2322| <params>: -# 2322| getParameter(0): [Parameter] (unnamed parameter 0) -# 2322| Type = [IntType] int -# 2327| [TopLevelFunction] return_routine_type::VoidToIntMemberFunc return_routine_type::GetVoidToIntFunc() -# 2327| <params>: -# 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| <params>: +# 2369| getParameter(0): [Parameter] (unnamed parameter 0) +# 2369| Type = [IntType] int +# 2374| [TopLevelFunction] return_routine_type::VoidToIntMemberFunc return_routine_type::GetVoidToIntFunc() +# 2374| <params>: +# 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| <params>: 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 fe75f86cfc5..a5c45046307 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -7268,4035 +7268,4057 @@ ir.cpp: # 1054| v1054_43(void) = AliasedUse : ~m1054_20 # 1054| v1054_44(void) = ExitFunction : -# 1079| void RangeBasedFor(vector<int> 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<vector<int> &>) = VariableAddress[v] : -# 1079| m1079_6(vector<int> &) = InitializeParameter[v] : &:r1079_5 -# 1079| r1079_7(vector<int> &) = Load[v] : &:r1079_5, m1079_6 -# 1079| m1079_8(unknown) = InitializeIndirection[v] : &:r1079_7 -# 1080| r1080_1(glval<vector<int> &>) = VariableAddress[(__range)] : -# 1080| r1080_2(glval<vector<int> &>) = VariableAddress[v] : -# 1080| r1080_3(vector<int> &) = Load[v] : &:r1080_2, m1079_6 -# 1080| r1080_4(glval<vector<int>>) = CopyValue : r1080_3 -# 1080| r1080_5(vector<int> &) = CopyValue : r1080_4 -# 1080| m1080_6(vector<int> &) = Store[(__range)] : &:r1080_1, r1080_5 -# 1080| r1080_7(glval<iterator>) = VariableAddress[(__begin)] : -# 1080| r1080_8(glval<vector<int> &>) = VariableAddress[(__range)] : -# 1080| r1080_9(vector<int> &) = Load[(__range)] : &:r1080_8, m1080_6 -#-----| r0_1(glval<vector<int>>) = CopyValue : r1080_9 -# 1080| r1080_10(glval<unknown>) = 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<iterator>) = VariableAddress[(__end)] : -# 1080| r1080_16(glval<vector<int> &>) = VariableAddress[(__range)] : -# 1080| r1080_17(vector<int> &) = Load[(__range)] : &:r1080_16, m1080_6 -#-----| r0_3(glval<vector<int>>) = CopyValue : r1080_17 -# 1080| r1080_18(glval<unknown>) = 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<int> 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<vector<int> &>) = VariableAddress[v] : +# 1126| m1126_6(vector<int> &) = InitializeParameter[v] : &:r1126_5 +# 1126| r1126_7(vector<int> &) = Load[v] : &:r1126_5, m1126_6 +# 1126| m1126_8(unknown) = InitializeIndirection[v] : &:r1126_7 +# 1127| r1127_1(glval<vector<int> &>) = VariableAddress[(__range)] : +# 1127| r1127_2(glval<vector<int> &>) = VariableAddress[v] : +# 1127| r1127_3(vector<int> &) = Load[v] : &:r1127_2, m1126_6 +# 1127| r1127_4(glval<vector<int>>) = CopyValue : r1127_3 +# 1127| r1127_5(vector<int> &) = CopyValue : r1127_4 +# 1127| m1127_6(vector<int> &) = Store[(__range)] : &:r1127_1, r1127_5 +# 1127| r1127_7(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +# 1127| r1127_8(glval<vector<int> &>) = VariableAddress[(__range)] : +# 1127| r1127_9(vector<int> &) = Load[(__range)] : &:r1127_8, m1127_6 +#-----| r0_1(glval<vector<int>>) = CopyValue : r1127_9 +# 1127| r1127_10(glval<unknown>) = FunctionAddress[begin] : +# 1127| r1127_11(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[begin] : func:r1127_10, this:r0_1 +# 1127| m1127_12(unknown) = ^CallSideEffect : ~m1126_4 +# 1127| m1127_13(unknown) = Chi : total:m1126_4, partial:m1127_12 +#-----| v0_2(void) = ^IndirectReadSideEffect[-1] : &:r0_1, ~m1126_8 +# 1127| m1127_14(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__begin)] : &:r1127_7, r1127_11 +# 1127| r1127_15(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +# 1127| r1127_16(glval<vector<int> &>) = VariableAddress[(__range)] : +# 1127| r1127_17(vector<int> &) = Load[(__range)] : &:r1127_16, m1127_6 +#-----| r0_3(glval<vector<int>>) = CopyValue : r1127_17 +# 1127| r1127_18(glval<unknown>) = FunctionAddress[end] : +# 1127| r1127_19(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[end] : func:r1127_18, this:r0_3 +# 1127| m1127_20(unknown) = ^CallSideEffect : ~m1127_13 +# 1127| m1127_21(unknown) = Chi : total:m1127_13, partial:m1127_20 +#-----| v0_4(void) = ^IndirectReadSideEffect[-1] : &:r0_3, ~m1126_8 +# 1127| m1127_22(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__end)] : &:r1127_15, r1127_19 #-----| 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<iterator>) = VariableAddress[(__begin)] : -#-----| r0_5(glval<iterator>) = Convert : r1080_25 -# 1080| r1080_26(glval<unknown>) = FunctionAddress[operator!=] : -# 1080| r1080_27(glval<iterator>) = 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_23(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Phi : from 0:m1127_14, from 4:m1127_54 +# 1127| m1127_24(unknown) = Phi : from 0:~m1127_21, from 4:~m1127_51 +# 1127| r1127_25(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_5(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1127_25 +# 1127| r1127_26(glval<unknown>) = FunctionAddress[operator!=] : +#-----| r0_6(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[#temp0:0] : +#-----| m0_7(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Uninitialized[#temp0:0] : &:r0_6 +# 1127| r1127_27(glval<unknown>) = FunctionAddress[iterator] : +# 1127| r1127_28(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +#-----| r0_8(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1127_28 +#-----| r0_9(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = CopyValue : r0_8 +# 1127| v1127_29(void) = Call[iterator] : func:r1127_27, this:r0_6, 0:r0_9 +# 1127| m1127_30(unknown) = ^CallSideEffect : ~m1127_24 +# 1127| m1127_31(unknown) = Chi : total:m1127_24, partial:m1127_30 +#-----| v0_10(void) = ^BufferReadSideEffect[0] : &:r0_9, ~m1127_22 +# 1127| m1127_32(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_6 +# 1127| m1127_33(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m0_7, partial:m1127_32 +#-----| r0_11(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Load[#temp0:0] : &:r0_6, m1127_33 +# 1127| r1127_34(bool) = Call[operator!=] : func:r1127_26, this:r0_5, 0:r0_11 +# 1127| m1127_35(unknown) = ^CallSideEffect : ~m1127_31 +# 1127| m1127_36(unknown) = Chi : total:m1127_31, partial:m1127_35 +#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m1127_23 +# 1127| v1127_37(void) = ConditionalBranch : r1127_34 #-----| False -> Block 5 #-----| True -> Block 2 -# 1080| Block 2 -# 1080| r1080_33(glval<int>) = VariableAddress[e] : -# 1080| r1080_34(glval<iterator>) = VariableAddress[(__begin)] : -#-----| r0_7(glval<iterator>) = Convert : r1080_34 -# 1080| r1080_35(glval<unknown>) = 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<int>) = 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_38(glval<int>) = VariableAddress[e] : +# 1127| r1127_39(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_13(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1127_39 +# 1127| r1127_40(glval<unknown>) = FunctionAddress[operator*] : +# 1127| r1127_41(int &) = Call[operator*] : func:r1127_40, this:r0_13 +# 1127| m1127_42(unknown) = ^CallSideEffect : ~m1127_36 +# 1127| m1127_43(unknown) = Chi : total:m1127_36, partial:m1127_42 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, m1127_23 +# 1127| r1127_44(int) = Load[?] : &:r1127_41, ~m1127_43 +# 1127| m1127_45(int) = Store[e] : &:r1127_38, r1127_44 +# 1128| r1128_1(glval<int>) = VariableAddress[e] : +# 1128| r1128_2(int) = Load[e] : &:r1128_1, m1127_45 +# 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<iterator>) = VariableAddress[(__begin)] : -# 1080| r1080_43(glval<unknown>) = 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<iterator>) = CopyValue : r1080_44 +# 1127| Block 4 +# 1127| v1127_46(void) = NoOp : +# 1127| r1127_47(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +# 1127| r1127_48(glval<unknown>) = FunctionAddress[operator++] : +# 1127| r1127_49(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = Call[operator++] : func:r1127_48, this:r1127_47 +# 1127| m1127_50(unknown) = ^CallSideEffect : ~m1127_43 +# 1127| m1127_51(unknown) = Chi : total:m1127_43, partial:m1127_50 +# 1127| v1127_52(void) = ^IndirectReadSideEffect[-1] : &:r1127_47, m1127_23 +# 1127| m1127_53(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r1127_47 +# 1127| m1127_54(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m1127_23, partial:m1127_53 +# 1127| r1127_55(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r1127_49 #-----| Goto (back edge) -> Block 1 -# 1086| Block 5 -# 1086| r1086_1(glval<vector<int> &>) = VariableAddress[(__range)] : -# 1086| r1086_2(glval<vector<int> &>) = VariableAddress[v] : -# 1086| r1086_3(vector<int> &) = Load[v] : &:r1086_2, m1079_6 -# 1086| r1086_4(glval<vector<int>>) = CopyValue : r1086_3 -# 1086| r1086_5(vector<int> &) = CopyValue : r1086_4 -# 1086| m1086_6(vector<int> &) = Store[(__range)] : &:r1086_1, r1086_5 -# 1086| r1086_7(glval<iterator>) = VariableAddress[(__begin)] : -# 1086| r1086_8(glval<vector<int> &>) = VariableAddress[(__range)] : -# 1086| r1086_9(vector<int> &) = Load[(__range)] : &:r1086_8, m1086_6 -#-----| r0_9(glval<vector<int>>) = CopyValue : r1086_9 -# 1086| r1086_10(glval<unknown>) = 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<iterator>) = VariableAddress[(__end)] : -# 1086| r1086_16(glval<vector<int> &>) = VariableAddress[(__range)] : -# 1086| r1086_17(vector<int> &) = Load[(__range)] : &:r1086_16, m1086_6 -#-----| r0_11(glval<vector<int>>) = CopyValue : r1086_17 -# 1086| r1086_18(glval<unknown>) = 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<vector<int> &>) = VariableAddress[(__range)] : +# 1133| r1133_2(glval<vector<int> &>) = VariableAddress[v] : +# 1133| r1133_3(vector<int> &) = Load[v] : &:r1133_2, m1126_6 +# 1133| r1133_4(glval<vector<int>>) = CopyValue : r1133_3 +# 1133| r1133_5(vector<int> &) = CopyValue : r1133_4 +# 1133| m1133_6(vector<int> &) = Store[(__range)] : &:r1133_1, r1133_5 +# 1133| r1133_7(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +# 1133| r1133_8(glval<vector<int> &>) = VariableAddress[(__range)] : +# 1133| r1133_9(vector<int> &) = Load[(__range)] : &:r1133_8, m1133_6 +#-----| r0_15(glval<vector<int>>) = CopyValue : r1133_9 +# 1133| r1133_10(glval<unknown>) = FunctionAddress[begin] : +# 1133| r1133_11(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[begin] : func:r1133_10, this:r0_15 +# 1133| m1133_12(unknown) = ^CallSideEffect : ~m1127_36 +# 1133| m1133_13(unknown) = Chi : total:m1127_36, partial:m1133_12 +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m1126_8 +# 1133| m1133_14(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__begin)] : &:r1133_7, r1133_11 +# 1133| r1133_15(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +# 1133| r1133_16(glval<vector<int> &>) = VariableAddress[(__range)] : +# 1133| r1133_17(vector<int> &) = Load[(__range)] : &:r1133_16, m1133_6 +#-----| r0_17(glval<vector<int>>) = CopyValue : r1133_17 +# 1133| r1133_18(glval<unknown>) = FunctionAddress[end] : +# 1133| r1133_19(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[end] : func:r1133_18, this:r0_17 +# 1133| m1133_20(unknown) = ^CallSideEffect : ~m1133_13 +# 1133| m1133_21(unknown) = Chi : total:m1133_13, partial:m1133_20 +#-----| v0_18(void) = ^IndirectReadSideEffect[-1] : &:r0_17, ~m1126_8 +# 1133| m1133_22(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__end)] : &:r1133_15, r1133_19 #-----| 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<iterator>) = VariableAddress[(__begin)] : -#-----| r0_13(glval<iterator>) = Convert : r1086_25 -# 1086| r1086_26(glval<unknown>) = FunctionAddress[operator!=] : -# 1086| r1086_27(glval<iterator>) = 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_23(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Phi : from 5:m1133_14, from 7:m1133_45 +# 1133| m1133_24(unknown) = Phi : from 5:~m1133_21, from 7:~m1133_42 +# 1133| r1133_25(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_19(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1133_25 +# 1133| r1133_26(glval<unknown>) = FunctionAddress[operator!=] : +#-----| r0_20(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[#temp0:0] : +#-----| m0_21(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Uninitialized[#temp0:0] : &:r0_20 +# 1133| r1133_27(glval<unknown>) = FunctionAddress[iterator] : +# 1133| r1133_28(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +#-----| r0_22(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1133_28 +#-----| r0_23(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = CopyValue : r0_22 +# 1133| v1133_29(void) = Call[iterator] : func:r1133_27, this:r0_20, 0:r0_23 +# 1133| m1133_30(unknown) = ^CallSideEffect : ~m1133_24 +# 1133| m1133_31(unknown) = Chi : total:m1133_24, partial:m1133_30 +#-----| v0_24(void) = ^BufferReadSideEffect[0] : &:r0_23, ~m1133_22 +# 1133| m1133_32(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_20 +# 1133| m1133_33(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m0_21, partial:m1133_32 +#-----| r0_25(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Load[#temp0:0] : &:r0_20, m1133_33 +# 1133| r1133_34(bool) = Call[operator!=] : func:r1133_26, this:r0_19, 0:r0_25 +# 1133| m1133_35(unknown) = ^CallSideEffect : ~m1133_31 +# 1133| m1133_36(unknown) = Chi : total:m1133_31, partial:m1133_35 +#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_19, m1133_23 +# 1133| v1133_37(void) = ConditionalBranch : r1133_34 #-----| False -> Block 10 #-----| True -> Block 8 -# 1086| Block 7 -# 1086| r1086_33(glval<iterator>) = VariableAddress[(__begin)] : -# 1086| r1086_34(glval<unknown>) = 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<iterator>) = CopyValue : r1086_35 +# 1133| Block 7 +# 1133| r1133_38(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +# 1133| r1133_39(glval<unknown>) = FunctionAddress[operator++] : +# 1133| r1133_40(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = Call[operator++] : func:r1133_39, this:r1133_38 +# 1133| m1133_41(unknown) = ^CallSideEffect : ~m1133_52 +# 1133| m1133_42(unknown) = Chi : total:m1133_52, partial:m1133_41 +# 1133| v1133_43(void) = ^IndirectReadSideEffect[-1] : &:r1133_38, m1133_23 +# 1133| m1133_44(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r1133_38 +# 1133| m1133_45(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m1133_23, partial:m1133_44 +# 1133| r1133_46(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r1133_40 #-----| Goto (back edge) -> Block 6 -# 1086| Block 8 -# 1086| r1086_42(glval<int &>) = VariableAddress[e] : -# 1086| r1086_43(glval<iterator>) = VariableAddress[(__begin)] : -#-----| r0_15(glval<iterator>) = Convert : r1086_43 -# 1086| r1086_44(glval<unknown>) = 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<int>) = CopyValue : r1086_45 -# 1086| r1086_49(glval<int>) = Convert : r1086_48 -# 1086| r1086_50(int &) = CopyValue : r1086_49 -# 1086| m1086_51(int &) = Store[e] : &:r1086_42, r1086_50 -# 1087| r1087_1(glval<int &>) = 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_47(glval<int &>) = VariableAddress[e] : +# 1133| r1133_48(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_27(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1133_48 +# 1133| r1133_49(glval<unknown>) = FunctionAddress[operator*] : +# 1133| r1133_50(int &) = Call[operator*] : func:r1133_49, this:r0_27 +# 1133| m1133_51(unknown) = ^CallSideEffect : ~m1133_36 +# 1133| m1133_52(unknown) = Chi : total:m1133_36, partial:m1133_51 +#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, m1133_23 +# 1133| r1133_53(glval<int>) = CopyValue : r1133_50 +# 1133| r1133_54(glval<int>) = Convert : r1133_53 +# 1133| r1133_55(int &) = CopyValue : r1133_54 +# 1133| m1133_56(int &) = Store[e] : &:r1133_47, r1133_55 +# 1134| r1134_1(glval<int &>) = VariableAddress[e] : +# 1134| r1134_2(int &) = Load[e] : &:r1134_1, m1133_56 +# 1134| r1134_3(int) = Load[?] : &:r1134_2, ~m1133_52 +# 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_36, from 9:~m1133_52 +# 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<int>) = 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<int>) = VariableAddress[#return] : -# 1112| r1112_2(glval<int>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[#return] : +# 1159| r1159_2(glval<int>) = 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<int>) = 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<unsigned int &>) = 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<unsigned int>) = VariableAddress[b] : -# 1115| m1115_10(unsigned int) = InitializeParameter[b] : &:r1115_9 -# 1115| r1115_11(glval<unsigned int &>) = 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<unsigned int>) = VariableAddress[d] : -# 1115| m1115_16(unsigned int) = InitializeParameter[d] : &:r1115_15 -# 1120| r1120_1(glval<unsigned int &>) = VariableAddress[a] : -# 1120| r1120_2(unsigned int &) = Load[a] : &:r1120_1, m1115_6 -# 1120| r1120_3(glval<unsigned int>) = CopyValue : r1120_2 -# 1120| r1120_4(glval<unsigned int>) = VariableAddress[b] : -# 1120| r1120_5(glval<unsigned int &>) = 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<unsigned int>) = 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<unsigned int &>) = 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<unsigned int>) = VariableAddress[b] : +# 1162| m1162_10(unsigned int) = InitializeParameter[b] : &:r1162_9 +# 1162| r1162_11(glval<unsigned int &>) = 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<unsigned int>) = VariableAddress[d] : +# 1162| m1162_16(unsigned int) = InitializeParameter[d] : &:r1162_15 +# 1167| r1167_1(glval<unsigned int &>) = VariableAddress[a] : +# 1167| r1167_2(unsigned int &) = Load[a] : &:r1167_1, m1162_6 +# 1167| r1167_3(glval<unsigned int>) = CopyValue : r1167_2 +# 1167| r1167_4(glval<unsigned int>) = VariableAddress[b] : +# 1167| r1167_5(glval<unsigned int &>) = 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<unsigned int>) = 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<int>) = VariableAddress[x] : -# 1127| m1127_2(int) = Uninitialized[x] : &:r1127_1 -# 1128| r1128_1(glval<int>) = VariableAddress[y] : -# 1128| m1128_2(int) = Uninitialized[y] : &:r1128_1 -# 1129| r1129_1(glval<int>) = 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<int>) = VariableAddress[x] : +# 1174| m1174_2(int) = Uninitialized[x] : &:r1174_1 +# 1175| r1175_1(glval<int>) = VariableAddress[y] : +# 1175| m1175_2(int) = Uninitialized[y] : &:r1175_1 +# 1176| r1176_1(glval<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = 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<bool>) = VariableAddress[b] : -# 1144| m1144_6(bool) = InitializeParameter[b] : &:r1144_5 -# 1146| r1146_1(glval<int>) = VariableAddress[x] : -# 1146| r1146_2(int) = Constant[5] : -# 1146| m1146_3(int) = Store[x] : &:r1146_1, r1146_2 -# 1147| r1147_1(glval<bool>) = 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<bool>) = VariableAddress[b] : +# 1191| m1191_6(bool) = InitializeParameter[b] : &:r1191_5 +# 1193| r1193_1(glval<int>) = VariableAddress[x] : +# 1193| r1193_2(int) = Constant[5] : +# 1193| m1193_3(int) = Store[x] : &:r1193_1, r1193_2 +# 1194| r1194_1(glval<bool>) = 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<char *>) = VariableAddress[#throw1148:7] : -# 1148| r1148_2(glval<char[15]>) = 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<char *>) = VariableAddress[#throw1195:7] : +# 1195| r1195_2(glval<char[15]>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = 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<char *>) = 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<String>) = VariableAddress[#throw1156:5] : -# 1156| m1156_2(String) = Uninitialized[#throw1156:5] : &:r1156_1 -# 1156| r1156_3(glval<unknown>) = FunctionAddress[String] : -# 1156| r1156_4(glval<char *>) = 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<char *>) = 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<String>) = VariableAddress[#throw1203:5] : +# 1203| m1203_2(String) = Uninitialized[#throw1203:5] : &:r1203_1 +# 1203| r1203_3(glval<unknown>) = FunctionAddress[String] : +# 1203| r1203_4(glval<char *>) = 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<String &>) = 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<String &>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1166| r1166_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1166| r1166_3(glval<int>) = VariableAddress[i] : -# 1166| r1166_4(int) = Load[i] : &:r1166_3, m1164_6 -# 1166| r1166_5(glval<int>) = 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<int>) = 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<int>) = VariableAddress[i] : -# 1167| r1167_5(int) = Load[i] : &:r1167_4, m1164_6 -# 1167| r1167_6(glval<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[x] : +# 1213| r1213_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1213| r1213_3(glval<int>) = VariableAddress[i] : +# 1213| r1213_4(int) = Load[i] : &:r1213_3, m1211_6 +# 1213| r1213_5(glval<int>) = 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<int>) = 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<int>) = VariableAddress[i] : +# 1214| r1214_5(int) = Load[i] : &:r1214_4, m1211_6 +# 1214| r1214_6(glval<int>) = 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<int>) = VariableAddress[x] : -# 1174| m1174_6(int) = InitializeParameter[x] : &:r1174_5 -# 1175| r1175_1(glval<int>) = VariableAddress[y] : -# 1175| m1175_2(int) = Uninitialized[y] : &:r1175_1 -# 1176| r1176_1(glval<unknown>) = FunctionAddress[memcpy] : -# 1176| r1176_2(glval<int>) = VariableAddress[y] : -# 1176| r1176_3(int *) = CopyValue : r1176_2 -# 1176| r1176_4(void *) = Convert : r1176_3 -# 1176| r1176_5(glval<int>) = 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<int>) = VariableAddress[#return] : -# 1177| r1177_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : +# 1221| m1221_6(int) = InitializeParameter[x] : &:r1221_5 +# 1222| r1222_1(glval<int>) = VariableAddress[y] : +# 1222| m1222_2(int) = Uninitialized[y] : &:r1222_1 +# 1223| r1223_1(glval<unknown>) = FunctionAddress[memcpy] : +# 1223| r1223_2(glval<int>) = VariableAddress[y] : +# 1223| r1223_3(int *) = CopyValue : r1223_2 +# 1223| r1223_4(void *) = Convert : r1223_3 +# 1223| r1223_5(glval<int>) = 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<int>) = VariableAddress[#return] : +# 1224| r1224_2(glval<int>) = 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<int>) = 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<String>) = VariableAddress[#return] : -# 1181| m1181_2(String) = Uninitialized[#return] : &:r1181_1 -# 1181| r1181_3(glval<unknown>) = FunctionAddress[String] : -# 1181| r1181_4(glval<char[4]>) = 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<String>) = 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<String>) = VariableAddress[#return] : +# 1228| m1228_2(String) = Uninitialized[#return] : &:r1228_1 +# 1228| r1228_3(glval<unknown>) = FunctionAddress[String] : +# 1228| r1228_4(glval<char[4]>) = 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<String>) = 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<int>) = VariableAddress[x] : -# 1184| m1184_6(int) = InitializeParameter[x] : &:r1184_5 -# 1185| r1185_1(glval<int>) = VariableAddress[y] : -# 1185| r1185_2(int) = Constant[0] : -# 1185| m1185_3(int) = Store[y] : &:r1185_1, r1185_2 -# 1186| r1186_1(glval<int>) = 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<int>) = VariableAddress[x] : +# 1231| m1231_6(int) = InitializeParameter[x] : &:r1231_5 +# 1232| r1232_1(glval<int>) = VariableAddress[y] : +# 1232| r1232_2(int) = Constant[0] : +# 1232| m1232_3(int) = Store[y] : &:r1232_1, r1232_2 +# 1233| r1233_1(glval<int>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[z] : -# 1190| r1190_3(glval<int>) = 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<int>) = VariableAddress[z] : +# 1237| r1237_3(glval<int>) = 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<int>) = VariableAddress[x] : -# 1193| m1193_6(int) = InitializeParameter[x] : &:r1193_5 -# 1194| r1194_1(glval<int>) = VariableAddress[y] : -# 1194| r1194_2(int) = Constant[0] : -# 1194| m1194_3(int) = Store[y] : &:r1194_1, r1194_2 -# 1195| r1195_1(glval<int>) = 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<int>) = VariableAddress[x] : +# 1240| m1240_6(int) = InitializeParameter[x] : &:r1240_5 +# 1241| r1241_1(glval<int>) = VariableAddress[y] : +# 1241| r1241_2(int) = Constant[0] : +# 1241| m1241_3(int) = Store[y] : &:r1241_1, r1241_2 +# 1242| r1242_1(glval<int>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[z] : -# 1201| r1201_3(glval<int>) = 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<int>) = VariableAddress[x] : -# 1204| m1204_6(int) = InitializeParameter[x] : &:r1204_5 -# 1205| r1205_1(glval<int>) = VariableAddress[y] : -# 1205| r1205_2(int) = Constant[0] : -# 1205| m1205_3(int) = Store[y] : &:r1205_1, r1205_2 -# 1206| r1206_1(glval<int>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[z] : -# 1213| r1213_2(glval<int>) = 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<int>) = VariableAddress[x] : -# 1216| m1216_6(int) = InitializeParameter[x] : &:r1216_5 -# 1217| r1217_1(glval<int>) = VariableAddress[y] : -# 1217| r1217_2(int) = Constant[0] : -# 1217| m1217_3(int) = Store[y] : &:r1217_1, r1217_2 -# 1218| r1218_1(glval<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[z] : -# 1230| r1230_2(glval<int>) = 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<int>) = VariableAddress[x] : -# 1233| m1233_6(int) = InitializeParameter[x] : &:r1233_5 -# 1236| r1236_1(glval<bool>) = 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<int>) = VariableAddress[c] : -# 1236| r1236_5(glval<int>) = 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<int>) = VariableAddress[#return] : -# 1239| r1239_4(glval<int>) = VariableAddress[a] : -# 1239| r1239_5(int) = Load[a] : &:r1239_4, ~m1239_2 -# 1239| r1239_6(glval<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = 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<char *>) = 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<bool>) = 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<String>) = VariableAddress[a] : -#-----| r0_1(glval<unknown>) = 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<int>) = 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<bool>) = 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<int>) = 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<int>) = VariableAddress[z] : +# 1248| r1248_3(glval<int>) = 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<int>) = VariableAddress[x] : +# 1251| m1251_6(int) = InitializeParameter[x] : &:r1251_5 +# 1252| r1252_1(glval<int>) = VariableAddress[y] : +# 1252| r1252_2(int) = Constant[0] : +# 1252| m1252_3(int) = Store[y] : &:r1252_1, r1252_2 +# 1253| r1253_1(glval<int>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[z] : +# 1260| r1260_2(glval<int>) = 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<int>) = VariableAddress[x] : +# 1263| m1263_6(int) = InitializeParameter[x] : &:r1263_5 +# 1264| r1264_1(glval<int>) = VariableAddress[y] : +# 1264| r1264_2(int) = Constant[0] : +# 1264| m1264_3(int) = Store[y] : &:r1264_1, r1264_2 +# 1265| r1265_1(glval<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[z] : +# 1277| r1277_2(glval<int>) = 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<int>) = VariableAddress[x] : +# 1280| m1280_6(int) = InitializeParameter[x] : &:r1280_5 +# 1283| r1283_1(glval<bool>) = 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<int>) = VariableAddress[c] : +# 1283| r1283_5(glval<int>) = 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<int>) = VariableAddress[#return] : +# 1286| r1286_4(glval<int>) = VariableAddress[a] : +# 1286| r1286_5(int) = Load[a] : &:r1286_4, ~m1286_2 +# 1286| r1286_6(glval<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = 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<char *>) = 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<bool>) = 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<String>) = VariableAddress[a] : +#-----| r0_1(glval<unknown>) = 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<bool>) = 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<String>) = VariableAddress[b] : -# 1244| r1244_6(glval<unknown>) = FunctionAddress[String] : -# 1244| r1244_7(glval<char[7]>) = 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<String>) = VariableAddress[b] : +# 1291| r1291_6(glval<unknown>) = FunctionAddress[String] : +# 1291| r1291_7(glval<char[7]>) = 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<bool>) = 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<bool>) = 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<String>) = VariableAddress[c] : -# 1245| r1245_6(glval<unknown>) = FunctionAddress[String] : -# 1245| r1245_7(glval<char *>) = 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<String>) = VariableAddress[c] : +# 1292| r1292_6(glval<unknown>) = FunctionAddress[String] : +# 1292| r1292_7(glval<char *>) = 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<char *>) = 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<char *>) = 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<char[1024]>) = VariableAddress[buffer] : -# 1254| m1254_2(char[1024]) = Uninitialized[buffer] : &:r1254_1 -# 1254| r1254_3(int) = Constant[0] : -# 1254| r1254_4(glval<char>) = 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<char>) = 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<unknown>) = FunctionAddress[strcpy] : -# 1256| r1256_2(glval<char[1024]>) = VariableAddress[buffer] : -# 1256| r1256_3(char *) = Convert : r1256_2 -# 1256| r1256_4(glval<char *>) = 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<unknown>) = FunctionAddress[strcat] : -# 1257| r1257_2(glval<char[1024]>) = VariableAddress[buffer] : -# 1257| r1257_3(char *) = Convert : r1257_2 -# 1257| r1257_4(glval<char *>) = 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<char *>) = 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<char *>) = 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<char[1024]>) = VariableAddress[buffer] : +# 1301| m1301_2(char[1024]) = Uninitialized[buffer] : &:r1301_1 +# 1301| r1301_3(int) = Constant[0] : +# 1301| r1301_4(glval<char>) = 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<char>) = 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<unknown>) = FunctionAddress[strcpy] : +# 1303| r1303_2(glval<char[1024]>) = VariableAddress[buffer] : +# 1303| r1303_3(char *) = Convert : r1303_2 +# 1303| r1303_4(glval<char *>) = 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<unknown>) = FunctionAddress[strcat] : +# 1304| r1304_2(glval<char[1024]>) = VariableAddress[buffer] : +# 1304| r1304_3(char *) = Convert : r1304_2 +# 1304| r1304_4(glval<char *>) = 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<A *>) = 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<int>) = VariableAddress[x] : -# 1263| m1263_10(int) = InitializeParameter[x] : &:r1263_9 -# 1264| r1264_1(glval<int>) = VariableAddress[x] : -# 1264| r1264_2(int) = Load[x] : &:r1264_1, m1263_10 -# 1264| r1264_3(glval<A *>) = VariableAddress[a] : -# 1264| r1264_4(A *) = Load[a] : &:r1264_3, m1263_6 -# 1264| r1264_5(glval<int>) = 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<A *>) = 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<int>) = VariableAddress[x] : +# 1310| m1310_10(int) = InitializeParameter[x] : &:r1310_9 +# 1311| r1311_1(glval<int>) = VariableAddress[x] : +# 1311| r1311_2(int) = Load[x] : &:r1311_1, m1310_10 +# 1311| r1311_3(glval<A *>) = VariableAddress[a] : +# 1311| r1311_4(A *) = Load[a] : &:r1311_3, m1310_6 +# 1311| r1311_5(glval<int>) = 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<int>) = VariableAddress[int_arg] : -# 1272| m1272_6(int) = InitializeParameter[int_arg] : &:r1272_5 -# 1272| r1272_7(glval<A *>) = 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<C>) = VariableAddress[c] : -# 1273| m1273_2(C) = Uninitialized[c] : &:r1273_1 -# 1273| r1273_3(glval<unknown>) = 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<C>) = VariableAddress[c] : -# 1274| r1274_2(glval<unknown>) = 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<unknown>) = 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<A>) = VariableAddress[a] : -# 1277| m1277_2(A) = Uninitialized[a] : &:r1277_1 -# 1278| r1278_1(glval<A>) = VariableAddress[a] : -# 1278| r1278_2(glval<unknown>) = FunctionAddress[static_member] : -# 1278| r1278_3(glval<A>) = VariableAddress[a] : -# 1278| r1278_4(A *) = CopyValue : r1278_3 -# 1278| r1278_5(glval<int>) = 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<unknown>) = FunctionAddress[static_member] : -# 1279| r1279_2(glval<A>) = VariableAddress[a] : -# 1279| r1279_3(A *) = CopyValue : r1279_2 -# 1279| r1279_4(glval<int>) = 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<A>) = VariableAddress[a] : -# 1281| r1281_2(A *) = CopyValue : r1281_1 -# 1281| r1281_3(glval<unknown>) = FunctionAddress[static_member] : -# 1281| r1281_4(glval<A *>) = VariableAddress[a_arg] : -# 1281| r1281_5(A *) = Load[a_arg] : &:r1281_4, m1272_8 -# 1281| r1281_6(glval<int>) = 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<A *>) = VariableAddress[a_arg] : -# 1282| r1282_2(A *) = Load[a_arg] : &:r1282_1, m1272_8 -# 1282| r1282_3(glval<A>) = CopyValue : r1282_2 -# 1282| r1282_4(glval<unknown>) = FunctionAddress[static_member] : -# 1282| r1282_5(glval<A>) = 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<A *>) = VariableAddress[a_arg] : -# 1283| r1283_2(A *) = Load[a_arg] : &:r1283_1, m1272_8 -# 1283| r1283_3(glval<unknown>) = FunctionAddress[static_member] : -# 1283| r1283_4(glval<A *>) = 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<A>) = VariableAddress[a] : -# 1285| r1285_2(glval<unknown>) = 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<unknown>) = 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<unknown>) = 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<unknown>) = 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<C>) = VariableAddress[c] : -# 1289| r1289_3(glval<unknown>) = 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<int>) = VariableAddress[int_arg] : +# 1319| m1319_6(int) = InitializeParameter[int_arg] : &:r1319_5 +# 1319| r1319_7(glval<A *>) = 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<C>) = VariableAddress[c] : +# 1320| m1320_2(C) = Uninitialized[c] : &:r1320_1 +# 1320| r1320_3(glval<unknown>) = 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<C>) = VariableAddress[c] : +# 1321| r1321_2(glval<unknown>) = 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<unknown>) = 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<A>) = VariableAddress[a] : +# 1324| m1324_2(A) = Uninitialized[a] : &:r1324_1 +# 1325| r1325_1(glval<A>) = VariableAddress[a] : +# 1325| r1325_2(glval<unknown>) = FunctionAddress[static_member] : +# 1325| r1325_3(glval<A>) = VariableAddress[a] : +# 1325| r1325_4(A *) = CopyValue : r1325_3 +# 1325| r1325_5(glval<int>) = 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<unknown>) = FunctionAddress[static_member] : +# 1326| r1326_2(glval<A>) = VariableAddress[a] : +# 1326| r1326_3(A *) = CopyValue : r1326_2 +# 1326| r1326_4(glval<int>) = 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<A>) = VariableAddress[a] : +# 1328| r1328_2(A *) = CopyValue : r1328_1 +# 1328| r1328_3(glval<unknown>) = FunctionAddress[static_member] : +# 1328| r1328_4(glval<A *>) = VariableAddress[a_arg] : +# 1328| r1328_5(A *) = Load[a_arg] : &:r1328_4, m1319_8 +# 1328| r1328_6(glval<int>) = 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<A *>) = VariableAddress[a_arg] : +# 1329| r1329_2(A *) = Load[a_arg] : &:r1329_1, m1319_8 +# 1329| r1329_3(glval<A>) = CopyValue : r1329_2 +# 1329| r1329_4(glval<unknown>) = FunctionAddress[static_member] : +# 1329| r1329_5(glval<A>) = 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<A *>) = VariableAddress[a_arg] : +# 1330| r1330_2(A *) = Load[a_arg] : &:r1330_1, m1319_8 +# 1330| r1330_3(glval<unknown>) = FunctionAddress[static_member] : +# 1330| r1330_4(glval<A *>) = 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<A>) = VariableAddress[a] : +# 1332| r1332_2(glval<unknown>) = 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<unknown>) = 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<unknown>) = 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<unknown>) = 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<C>) = VariableAddress[c] : +# 1336| r1336_3(glval<unknown>) = 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<bool>) = VariableAddress[b] : -# 1291| m1291_6(bool) = InitializeParameter[b] : &:r1291_5 -# 1291| r1291_7(glval<int>) = VariableAddress[x] : -# 1291| m1291_8(int) = InitializeParameter[x] : &:r1291_7 -# 1292| r1292_1(glval<bool>) = 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<bool>) = VariableAddress[b] : +# 1338| m1338_6(bool) = InitializeParameter[b] : &:r1338_5 +# 1338| r1338_7(glval<int>) = VariableAddress[x] : +# 1338| m1338_8(int) = InitializeParameter[x] : &:r1338_7 +# 1339| r1339_1(glval<bool>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[#return] : -# 1293| r1293_2(glval<int>) = 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<int>) = VariableAddress[#return] : +# 1340| r1340_2(glval<int>) = 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<int>) = VariableAddress[#return] : -# 1295| m1295_2(int) = Uninitialized[#return] : &:r1295_1 +# 1342| Block 3 +# 1342| r1342_1(glval<int>) = 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<int>) = VariableAddress[x] : -# 1297| m1297_6(int) = InitializeParameter[x] : &:r1297_5 -# 1297| r1297_7(glval<int>) = VariableAddress[y] : -# 1297| m1297_8(int) = InitializeParameter[y] : &:r1297_7 -# 1298| r1298_1(glval<unknown>) = FunctionAddress[IntegerOps] : -# 1298| r1298_2(glval<int>) = VariableAddress[x] : -# 1298| r1298_3(int) = Load[x] : &:r1298_2, m1297_6 -# 1298| r1298_4(glval<int>) = 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<int>) = VariableAddress[x] : +# 1344| m1344_6(int) = InitializeParameter[x] : &:r1344_5 +# 1344| r1344_7(glval<int>) = VariableAddress[y] : +# 1344| m1344_8(int) = InitializeParameter[y] : &:r1344_7 +# 1345| r1345_1(glval<unknown>) = FunctionAddress[IntegerOps] : +# 1345| r1345_2(glval<int>) = VariableAddress[x] : +# 1345| r1345_3(int) = Load[x] : &:r1345_2, m1344_6 +# 1345| r1345_4(glval<int>) = 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<bool>) = VariableAddress[b] : -# 1301| m1301_6(bool) = InitializeParameter[b] : &:r1301_5 -# 1301| r1301_7(glval<int>) = VariableAddress[x] : -# 1301| m1301_8(int) = InitializeParameter[x] : &:r1301_7 -# 1301| r1301_9(glval<long>) = VariableAddress[y] : -# 1301| m1301_10(long) = InitializeParameter[y] : &:r1301_9 -# 1302| r1302_1(glval<int>) = VariableAddress[z] : -# 1302| r1302_2(glval<int>) = 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<bool>) = 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<bool>) = VariableAddress[b] : +# 1348| m1348_6(bool) = InitializeParameter[b] : &:r1348_5 +# 1348| r1348_7(glval<int>) = VariableAddress[x] : +# 1348| m1348_8(int) = InitializeParameter[x] : &:r1348_7 +# 1348| r1348_9(glval<long>) = VariableAddress[y] : +# 1348| m1348_10(long) = InitializeParameter[y] : &:r1348_9 +# 1349| r1349_1(glval<int>) = VariableAddress[z] : +# 1349| r1349_2(glval<int>) = 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<bool>) = 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<int>) = VariableAddress[#temp1303:9] : -# 1303| r1303_6(int) = Load[#temp1303:9] : &:r1303_5, m1303_4 -# 1303| r1303_7(glval<int>) = VariableAddress[z] : -# 1303| m1303_8(int) = Store[z] : &:r1303_7, r1303_6 -# 1304| r1304_1(glval<bool>) = 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<int>) = VariableAddress[#temp1350:9] : +# 1350| r1350_6(int) = Load[#temp1350:9] : &:r1350_5, m1350_4 +# 1350| r1350_7(glval<int>) = VariableAddress[z] : +# 1350| m1350_8(int) = Store[z] : &:r1350_7, r1350_6 +# 1351| r1351_1(glval<bool>) = 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<int>) = VariableAddress[#temp1303:9] : -# 1303| m1303_10(int) = Store[#temp1303:9] : &:r1303_9, r1303_2 +# 1350| Block 2 +# 1350| r1350_9(glval<int>) = VariableAddress[#temp1350:9] : +# 1350| m1350_10(int) = Store[#temp1350:9] : &:r1350_9, r1350_2 #-----| Goto -> Block 1 -# 1303| Block 3 -# 1303| r1303_11(glval<int>) = VariableAddress[x] : -# 1303| r1303_12(int) = Load[x] : &:r1303_11, m1301_8 -# 1303| r1303_13(glval<int>) = VariableAddress[#temp1303:9] : -# 1303| m1303_14(int) = Store[#temp1303:9] : &:r1303_13, r1303_12 +# 1350| Block 3 +# 1350| r1350_11(glval<int>) = VariableAddress[x] : +# 1350| r1350_12(int) = Load[x] : &:r1350_11, m1348_8 +# 1350| r1350_13(glval<int>) = 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<long>) = 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<int>) = VariableAddress[z] : -# 1304| m1304_9(int) = Store[z] : &:r1304_8, r1304_7 -# 1305| r1305_1(glval<int>) = 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<long>) = 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<int>) = VariableAddress[z] : +# 1351| m1351_9(int) = Store[z] : &:r1351_8, r1351_7 +# 1352| r1352_1(glval<int>) = 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<long>) = VariableAddress[#temp1304:9] : -# 1304| m1304_11(long) = Store[#temp1304:9] : &:r1304_10, r1304_2 +# 1351| Block 5 +# 1351| r1351_10(glval<long>) = VariableAddress[#temp1351:9] : +# 1351| m1351_11(long) = Store[#temp1351:9] : &:r1351_10, r1351_2 #-----| Goto -> Block 4 -# 1304| Block 6 -# 1304| r1304_12(glval<long>) = VariableAddress[y] : -# 1304| r1304_13(long) = Load[y] : &:r1304_12, m1301_10 -# 1304| r1304_14(glval<long>) = VariableAddress[#temp1304:9] : -# 1304| m1304_15(long) = Store[#temp1304:9] : &:r1304_14, r1304_13 +# 1351| Block 6 +# 1351| r1351_12(glval<long>) = VariableAddress[y] : +# 1351| r1351_13(long) = Load[y] : &:r1351_12, m1348_10 +# 1351| r1351_14(glval<long>) = 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<int>) = VariableAddress[#temp1305:9] : -# 1305| r1305_8(int) = Load[#temp1305:9] : &:r1305_7, m1305_6 -# 1305| r1305_9(glval<int>) = VariableAddress[z] : -# 1305| m1305_10(int) = Store[z] : &:r1305_9, r1305_8 -# 1306| r1306_1(glval<int>) = 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<int>) = VariableAddress[#temp1352:9] : +# 1352| r1352_8(int) = Load[#temp1352:9] : &:r1352_7, m1352_6 +# 1352| r1352_9(glval<int>) = VariableAddress[z] : +# 1352| m1352_10(int) = Store[z] : &:r1352_9, r1352_8 +# 1353| r1353_1(glval<int>) = 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<int>) = VariableAddress[#temp1305:9] : -# 1305| m1305_12(int) = Store[#temp1305:9] : &:r1305_11, r1305_2 +# 1352| Block 8 +# 1352| r1352_11(glval<int>) = VariableAddress[#temp1352:9] : +# 1352| m1352_12(int) = Store[#temp1352:9] : &:r1352_11, r1352_2 #-----| Goto -> Block 7 -# 1305| Block 9 -# 1305| r1305_13(glval<int>) = VariableAddress[x] : -# 1305| r1305_14(int) = Load[x] : &:r1305_13, m1301_8 -# 1305| r1305_15(glval<int>) = VariableAddress[#temp1305:9] : -# 1305| m1305_16(int) = Store[#temp1305:9] : &:r1305_15, r1305_14 +# 1352| Block 9 +# 1352| r1352_13(glval<int>) = VariableAddress[x] : +# 1352| r1352_14(int) = Load[x] : &:r1352_13, m1348_8 +# 1352| r1352_15(glval<int>) = 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<long>) = 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<int>) = VariableAddress[z] : -# 1306| m1306_11(int) = Store[z] : &:r1306_10, r1306_9 -# 1307| r1307_1(glval<long>) = 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<long>) = 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<int>) = VariableAddress[z] : +# 1353| m1353_11(int) = Store[z] : &:r1353_10, r1353_9 +# 1354| r1354_1(glval<long>) = 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<long>) = VariableAddress[#temp1306:9] : -# 1306| m1306_13(long) = Store[#temp1306:9] : &:r1306_12, r1306_2 +# 1353| Block 11 +# 1353| r1353_12(glval<long>) = VariableAddress[#temp1353:9] : +# 1353| m1353_13(long) = Store[#temp1353:9] : &:r1353_12, r1353_2 #-----| Goto -> Block 10 -# 1306| Block 12 -# 1306| r1306_14(glval<long>) = VariableAddress[y] : -# 1306| r1306_15(long) = Load[y] : &:r1306_14, m1301_10 -# 1306| r1306_16(glval<long>) = VariableAddress[#temp1306:9] : -# 1306| m1306_17(long) = Store[#temp1306:9] : &:r1306_16, r1306_15 +# 1353| Block 12 +# 1353| r1353_14(glval<long>) = VariableAddress[y] : +# 1353| r1353_15(long) = Load[y] : &:r1353_14, m1348_10 +# 1353| r1353_16(glval<long>) = 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<long>) = 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<int>) = VariableAddress[z] : -# 1307| m1307_11(int) = Store[z] : &:r1307_10, r1307_9 -# 1308| r1308_1(glval<long>) = 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<long>) = 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<int>) = VariableAddress[z] : +# 1354| m1354_11(int) = Store[z] : &:r1354_10, r1354_9 +# 1355| r1355_1(glval<long>) = 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<long>) = VariableAddress[#temp1307:9] : -# 1307| m1307_13(long) = Store[#temp1307:9] : &:r1307_12, r1307_2 +# 1354| Block 14 +# 1354| r1354_12(glval<long>) = VariableAddress[#temp1354:9] : +# 1354| m1354_13(long) = Store[#temp1354:9] : &:r1354_12, r1354_2 #-----| Goto -> Block 13 -# 1307| Block 15 -# 1307| r1307_14(glval<int>) = VariableAddress[x] : -# 1307| r1307_15(int) = Load[x] : &:r1307_14, m1301_8 -# 1307| r1307_16(long) = Convert : r1307_15 -# 1307| r1307_17(glval<long>) = VariableAddress[#temp1307:9] : -# 1307| m1307_18(long) = Store[#temp1307:9] : &:r1307_17, r1307_16 +# 1354| Block 15 +# 1354| r1354_14(glval<int>) = VariableAddress[x] : +# 1354| r1354_15(int) = Load[x] : &:r1354_14, m1348_8 +# 1354| r1354_16(long) = Convert : r1354_15 +# 1354| r1354_17(glval<long>) = 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<long>) = 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<int>) = VariableAddress[z] : -# 1308| m1308_11(int) = Store[z] : &:r1308_10, r1308_9 -# 1310| r1310_1(glval<int>) = 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<long>) = 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<int>) = VariableAddress[z] : +# 1355| m1355_11(int) = Store[z] : &:r1355_10, r1355_9 +# 1357| r1357_1(glval<int>) = 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<long>) = VariableAddress[#temp1308:9] : -# 1308| m1308_13(long) = Store[#temp1308:9] : &:r1308_12, r1308_2 +# 1355| Block 17 +# 1355| r1355_12(glval<long>) = VariableAddress[#temp1355:9] : +# 1355| m1355_13(long) = Store[#temp1355:9] : &:r1355_12, r1355_2 #-----| Goto -> Block 16 -# 1308| Block 18 -# 1308| r1308_14(glval<long>) = VariableAddress[y] : -# 1308| r1308_15(long) = Load[y] : &:r1308_14, m1301_10 -# 1308| r1308_16(glval<long>) = VariableAddress[#temp1308:9] : -# 1308| m1308_17(long) = Store[#temp1308:9] : &:r1308_16, r1308_15 +# 1355| Block 18 +# 1355| r1355_14(glval<long>) = VariableAddress[y] : +# 1355| r1355_15(long) = Load[y] : &:r1355_14, m1348_10 +# 1355| r1355_16(glval<long>) = 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<int>) = VariableAddress[#temp1310:9] : -# 1310| r1310_8(int) = Load[#temp1310:9] : &:r1310_7, m1310_6 -# 1310| r1310_9(glval<int>) = 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<int>) = VariableAddress[#temp1357:9] : +# 1357| r1357_8(int) = Load[#temp1357:9] : &:r1357_7, m1357_6 +# 1357| r1357_9(glval<int>) = 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<int>) = VariableAddress[#temp1310:9] : -# 1310| m1310_12(int) = Store[#temp1310:9] : &:r1310_11, r1310_18 +# 1357| Block 20 +# 1357| r1357_11(glval<int>) = VariableAddress[#temp1357:9] : +# 1357| m1357_12(int) = Store[#temp1357:9] : &:r1357_11, r1357_18 #-----| Goto -> Block 19 -# 1310| Block 21 -# 1310| r1310_13(glval<bool>) = 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<bool>) = 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<bool>) = 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<bool>) = 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<bool>) = 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<bool>) = 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<bool>) = 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<bool>) = 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<long>) = 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<long>) = 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<int>) = VariableAddress[x] : -# 1310| r1310_32(int) = Load[x] : &:r1310_31, m1301_8 -# 1310| r1310_33(glval<int>) = VariableAddress[#temp1310:9] : -# 1310| m1310_34(int) = Store[#temp1310:9] : &:r1310_33, r1310_32 +# 1357| Block 26 +# 1357| r1357_31(glval<int>) = VariableAddress[x] : +# 1357| r1357_32(int) = Load[x] : &:r1357_31, m1348_8 +# 1357| r1357_33(glval<int>) = 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<int>) = VariableAddress[x] : -# 1316| m1316_6(int) = InitializeParameter[x] : &:r1316_5 -# 1316| r1316_7(glval<int>) = VariableAddress[y] : -# 1316| m1316_8(int) = InitializeParameter[y] : &:r1316_7 -# 1317| r1317_1(glval<int>) = VariableAddress[#return] : -# 1317| r1317_2(glval<unknown>) = 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<int>) = VariableAddress[x] : +# 1363| m1363_6(int) = InitializeParameter[x] : &:r1363_5 +# 1363| r1363_7(glval<int>) = VariableAddress[y] : +# 1363| m1363_8(int) = InitializeParameter[y] : &:r1363_7 +# 1364| r1364_1(glval<int>) = VariableAddress[#return] : +# 1364| r1364_2(glval<unknown>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = 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<unknown>) = 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<unknown>) = 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<int>) = VariableAddress[x] : -# 1317| r1317_18(int) = Load[x] : &:r1317_17, m1316_6 -# 1317| r1317_19(glval<int>) = VariableAddress[#temp1317:12] : -# 1317| m1317_20(int) = Store[#temp1317:12] : &:r1317_19, r1317_18 +# 1364| Block 3 +# 1364| r1364_17(glval<int>) = VariableAddress[x] : +# 1364| r1364_18(int) = Load[x] : &:r1364_17, m1363_6 +# 1364| r1364_19(glval<int>) = 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<int>) = VariableAddress[y] : -# 1317| r1317_23(int) = Load[y] : &:r1317_22, m1316_8 -# 1317| r1317_24(glval<int>) = 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<int>) = VariableAddress[y] : +# 1364| r1364_23(int) = Load[y] : &:r1364_22, m1363_8 +# 1364| r1364_24(glval<int>) = 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<int *>) = 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<unknown>) = FunctionAddress[operator new] : -# 1324| r1324_2(unsigned long) = Constant[4] : -# 1324| r1324_3(glval<int *>) = 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<int *>) = 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<unknown>) = FunctionAddress[operator new] : +# 1371| r1371_2(unsigned long) = Constant[4] : +# 1371| r1371_3(glval<int *>) = 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<Point>() -# 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<Point>) = VariableAddress[#return] : -# 1329| r1329_2(Point) = Constant[0] : -# 1329| m1329_3(Point) = Store[#return] : &:r1329_1, r1329_2 -# 1328| r1328_5(glval<Point>) = 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<Point>() +# 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<Point>) = VariableAddress[#return] : +# 1376| r1376_2(Point) = Constant[0] : +# 1376| m1376_3(Point) = Store[#return] : &:r1376_1, r1376_2 +# 1375| r1375_5(glval<Point>) = 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<String>() -# 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<String>) = VariableAddress[#return] : -# 1329| m1329_2(String) = Uninitialized[#return] : &:r1329_1 -# 1329| r1329_3(glval<unknown>) = 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<String>) = 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<String>() +# 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<String>) = VariableAddress[#return] : +# 1376| m1376_2(String) = Uninitialized[#return] : &:r1376_1 +# 1376| r1376_3(glval<unknown>) = 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<String>) = 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<copy_constructor>() -# 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<copy_constructor>) = VariableAddress[#return] : -# 1329| m1329_2(copy_constructor) = Uninitialized[#return] : &:r1329_1 -# 1329| r1329_3(glval<unknown>) = 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<copy_constructor>) = 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<copy_constructor>() +# 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<copy_constructor>) = VariableAddress[#return] : +# 1376| m1376_2(copy_constructor) = Uninitialized[#return] : &:r1376_1 +# 1376| r1376_3(glval<unknown>) = 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<copy_constructor>) = 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<destructor_only>() -# 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<destructor_only>) = VariableAddress[#return] : -# 1329| r1329_2(destructor_only) = Constant[0] : -# 1329| m1329_3(destructor_only) = Store[#return] : &:r1329_1, r1329_2 -# 1328| r1328_5(glval<destructor_only>) = 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<destructor_only>() +# 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<destructor_only>) = VariableAddress[#return] : +# 1376| r1376_2(destructor_only) = Constant[0] : +# 1376| m1376_3(destructor_only) = Store[#return] : &:r1376_1, r1376_2 +# 1375| r1375_5(glval<destructor_only>) = 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<String>) = VariableAddress[s] : -# 1368| r1368_2(glval<unknown>) = 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<String &>) = VariableAddress[rs] : -# 1369| r1369_2(glval<String>) = VariableAddress[#temp1369:24] : -# 1369| r1369_3(glval<unknown>) = 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<String>) = Convert : r1369_2 -# 1369| r1369_9(String &) = CopyValue : r1369_8 -# 1369| m1369_10(String &) = Store[rs] : &:r1369_1, r1369_9 -# 1371| r1371_1(glval<unknown>) = FunctionAddress[acceptRef] : -# 1371| r1371_2(glval<String>) = VariableAddress[s] : -# 1371| r1371_3(glval<String>) = 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<unknown>) = FunctionAddress[acceptRef] : -# 1372| r1372_2(glval<String>) = VariableAddress[#temp1372:23] : -# 1372| m1372_3(String) = Uninitialized[#temp1372:23] : &:r1372_2 -# 1372| r1372_4(glval<unknown>) = FunctionAddress[String] : -# 1372| r1372_5(glval<char[4]>) = 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<unknown>) = FunctionAddress[acceptValue] : -# 1373| r1373_2(glval<String>) = VariableAddress[#temp1373:17] : -# 1373| m1373_3(String) = Uninitialized[#temp1373:17] : &:r1373_2 -# 1373| r1373_4(glval<unknown>) = FunctionAddress[String] : -# 1373| r1373_5(glval<String>) = VariableAddress[s] : -# 1373| r1373_6(glval<String>) = 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<unknown>) = FunctionAddress[acceptValue] : -# 1374| r1374_2(glval<String>) = VariableAddress[#temp1374:25] : -# 1374| m1374_3(String) = Uninitialized[#temp1374:25] : &:r1374_2 -# 1374| r1374_4(glval<unknown>) = FunctionAddress[String] : -# 1374| r1374_5(glval<char[4]>) = 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<String>) = VariableAddress[#temp1375:5] : -# 1375| m1375_2(String) = Uninitialized[#temp1375:5] : &:r1375_1 -# 1375| r1375_3(glval<unknown>) = 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<String>) = Convert : r1375_1 -# 1375| r1375_10(glval<unknown>) = 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<String>) = VariableAddress[#temp1376:5] : -# 1376| r1376_2(glval<unknown>) = 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<String>) = Convert : r1376_1 -# 1376| r1376_8(glval<unknown>) = 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<String>) = VariableAddress[#temp1378:5] : -# 1378| r1378_2(glval<unknown>) = 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<String>) = VariableAddress[s] : -# 1379| r1379_3(glval<unknown>) = 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<String>) = VariableAddress[s] : +# 1415| r1415_2(glval<unknown>) = 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<String &>) = VariableAddress[rs] : +# 1416| r1416_2(glval<String>) = VariableAddress[#temp1416:24] : +# 1416| r1416_3(glval<unknown>) = 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<String>) = Convert : r1416_2 +# 1416| r1416_9(String &) = CopyValue : r1416_8 +# 1416| m1416_10(String &) = Store[rs] : &:r1416_1, r1416_9 +# 1418| r1418_1(glval<unknown>) = FunctionAddress[acceptRef] : +# 1418| r1418_2(glval<String>) = VariableAddress[s] : +# 1418| r1418_3(glval<String>) = 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<unknown>) = FunctionAddress[acceptRef] : +# 1419| r1419_2(glval<String>) = VariableAddress[#temp1419:23] : +# 1419| m1419_3(String) = Uninitialized[#temp1419:23] : &:r1419_2 +# 1419| r1419_4(glval<unknown>) = FunctionAddress[String] : +# 1419| r1419_5(glval<char[4]>) = 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<unknown>) = FunctionAddress[acceptValue] : +# 1420| r1420_2(glval<String>) = VariableAddress[#temp1420:17] : +# 1420| m1420_3(String) = Uninitialized[#temp1420:17] : &:r1420_2 +# 1420| r1420_4(glval<unknown>) = FunctionAddress[String] : +# 1420| r1420_5(glval<String>) = VariableAddress[s] : +# 1420| r1420_6(glval<String>) = 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<unknown>) = FunctionAddress[acceptValue] : +# 1421| r1421_2(glval<String>) = VariableAddress[#temp1421:25] : +# 1421| m1421_3(String) = Uninitialized[#temp1421:25] : &:r1421_2 +# 1421| r1421_4(glval<unknown>) = FunctionAddress[String] : +# 1421| r1421_5(glval<char[4]>) = 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<String>) = VariableAddress[#temp1422:5] : +# 1422| m1422_2(String) = Uninitialized[#temp1422:5] : &:r1422_1 +# 1422| r1422_3(glval<unknown>) = 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<String>) = Convert : r1422_1 +# 1422| r1422_10(glval<unknown>) = 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<String>) = VariableAddress[#temp1423:5] : +# 1423| r1423_2(glval<unknown>) = 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<String>) = Convert : r1423_1 +# 1423| r1423_8(glval<unknown>) = 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<String>) = VariableAddress[#temp1425:5] : +# 1425| r1425_2(glval<unknown>) = 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<String>) = VariableAddress[s] : +# 1426| r1426_3(glval<unknown>) = 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<destructor_only>) = VariableAddress[d] : -# 1382| r1382_2(glval<unknown>) = 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<destructor_only &>) = VariableAddress[rd] : -# 1383| r1383_2(glval<destructor_only>) = VariableAddress[#temp1383:33] : -# 1383| r1383_3(glval<unknown>) = 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<destructor_only>) = 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<destructor_only>) = VariableAddress[d2] : -# 1384| m1384_2(destructor_only) = Uninitialized[d2] : &:r1384_1 -# 1385| r1385_1(glval<unknown>) = FunctionAddress[acceptRef] : -# 1385| r1385_2(glval<destructor_only>) = VariableAddress[d] : -# 1385| r1385_3(glval<destructor_only>) = 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<unknown>) = FunctionAddress[acceptValue] : -# 1386| r1386_2(glval<destructor_only>) = VariableAddress[#temp1386:17] : -# 1386| r1386_3(glval<destructor_only>) = 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<destructor_only>) = 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<unknown>) = 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<destructor_only>) = VariableAddress[#temp1388:5] : -# 1388| r1388_2(glval<unknown>) = 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<unknown>) = 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<destructor_only>) = VariableAddress[#temp1390:5] : -# 1390| r1390_2(glval<unknown>) = 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<destructor_only>) = VariableAddress[d2] : -# 1391| r1391_3(glval<unknown>) = 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<destructor_only>) = VariableAddress[d] : -# 1391| r1391_11(glval<unknown>) = 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<destructor_only>) = VariableAddress[d] : +# 1429| r1429_2(glval<unknown>) = 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<destructor_only &>) = VariableAddress[rd] : +# 1430| r1430_2(glval<destructor_only>) = VariableAddress[#temp1430:33] : +# 1430| r1430_3(glval<unknown>) = 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<destructor_only>) = 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<destructor_only>) = VariableAddress[d2] : +# 1431| m1431_2(destructor_only) = Uninitialized[d2] : &:r1431_1 +# 1432| r1432_1(glval<unknown>) = FunctionAddress[acceptRef] : +# 1432| r1432_2(glval<destructor_only>) = VariableAddress[d] : +# 1432| r1432_3(glval<destructor_only>) = 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<unknown>) = FunctionAddress[acceptValue] : +# 1433| r1433_2(glval<destructor_only>) = VariableAddress[#temp1433:17] : +# 1433| r1433_3(glval<destructor_only>) = 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<destructor_only>) = 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<unknown>) = 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<destructor_only>) = VariableAddress[#temp1435:5] : +# 1435| r1435_2(glval<unknown>) = 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<unknown>) = 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<destructor_only>) = VariableAddress[#temp1437:5] : +# 1437| r1437_2(glval<unknown>) = 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<destructor_only>) = VariableAddress[d2] : +# 1438| r1438_3(glval<unknown>) = 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<destructor_only>) = VariableAddress[d] : +# 1438| r1438_11(glval<unknown>) = 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<copy_constructor>) = VariableAddress[d] : -# 1394| r1394_2(glval<unknown>) = 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<copy_constructor &>) = VariableAddress[rd] : -# 1395| r1395_2(glval<copy_constructor>) = VariableAddress[#temp1395:34] : -# 1395| r1395_3(glval<unknown>) = 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<copy_constructor>) = 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<copy_constructor>) = VariableAddress[d2] : -# 1396| m1396_2(copy_constructor) = Uninitialized[d2] : &:r1396_1 -# 1396| r1396_3(glval<unknown>) = 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<unknown>) = FunctionAddress[acceptRef] : -# 1397| r1397_2(glval<copy_constructor>) = VariableAddress[d] : -# 1397| r1397_3(glval<copy_constructor>) = 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<unknown>) = FunctionAddress[acceptValue] : -# 1398| r1398_2(glval<copy_constructor>) = VariableAddress[#temp1398:17] : -# 1398| m1398_3(copy_constructor) = Uninitialized[#temp1398:17] : &:r1398_2 -# 1398| r1398_4(glval<unknown>) = FunctionAddress[copy_constructor] : -# 1398| r1398_5(glval<copy_constructor>) = VariableAddress[d] : -# 1398| r1398_6(glval<copy_constructor>) = 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<copy_constructor>) = VariableAddress[#temp1399:5] : -# 1399| m1399_2(copy_constructor) = Uninitialized[#temp1399:5] : &:r1399_1 -# 1399| r1399_3(glval<unknown>) = 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<unknown>) = 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<copy_constructor>) = VariableAddress[#temp1400:5] : -# 1400| r1400_2(glval<unknown>) = 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<unknown>) = 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<copy_constructor>) = VariableAddress[#temp1401:5] : -# 1401| r1401_2(glval<unknown>) = 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<int>) = VariableAddress[y] : -# 1403| r1403_2(glval<copy_constructor>) = VariableAddress[#temp1403:13] : -# 1403| r1403_3(glval<unknown>) = 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<int>) = 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<copy_constructor>) = VariableAddress[d] : +# 1441| r1441_2(glval<unknown>) = 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<copy_constructor &>) = VariableAddress[rd] : +# 1442| r1442_2(glval<copy_constructor>) = VariableAddress[#temp1442:34] : +# 1442| r1442_3(glval<unknown>) = 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<copy_constructor>) = 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<copy_constructor>) = VariableAddress[d2] : +# 1443| m1443_2(copy_constructor) = Uninitialized[d2] : &:r1443_1 +# 1443| r1443_3(glval<unknown>) = 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<unknown>) = FunctionAddress[acceptRef] : +# 1444| r1444_2(glval<copy_constructor>) = VariableAddress[d] : +# 1444| r1444_3(glval<copy_constructor>) = 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<unknown>) = FunctionAddress[acceptValue] : +# 1445| r1445_2(glval<copy_constructor>) = VariableAddress[#temp1445:17] : +# 1445| m1445_3(copy_constructor) = Uninitialized[#temp1445:17] : &:r1445_2 +# 1445| r1445_4(glval<unknown>) = FunctionAddress[copy_constructor] : +# 1445| r1445_5(glval<copy_constructor>) = VariableAddress[d] : +# 1445| r1445_6(glval<copy_constructor>) = 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<copy_constructor>) = VariableAddress[#temp1446:5] : +# 1446| m1446_2(copy_constructor) = Uninitialized[#temp1446:5] : &:r1446_1 +# 1446| r1446_3(glval<unknown>) = 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<unknown>) = 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<copy_constructor>) = VariableAddress[#temp1447:5] : +# 1447| r1447_2(glval<unknown>) = 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<unknown>) = 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<copy_constructor>) = VariableAddress[#temp1448:5] : +# 1448| r1448_2(glval<unknown>) = 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<int>) = VariableAddress[y] : +# 1450| r1450_2(glval<copy_constructor>) = VariableAddress[#temp1450:13] : +# 1450| r1450_3(glval<unknown>) = 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<int>) = 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<Point>) = VariableAddress[p] : -# 1407| r1407_2(glval<unknown>) = 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<Point &>) = VariableAddress[rp] : -# 1408| r1408_2(glval<Point>) = VariableAddress[#temp1408:23] : -# 1408| r1408_3(glval<unknown>) = 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<Point>) = Convert : r1408_2 -# 1408| r1408_9(Point &) = CopyValue : r1408_8 -# 1408| m1408_10(Point &) = Store[rp] : &:r1408_1, r1408_9 -# 1410| r1410_1(glval<unknown>) = FunctionAddress[acceptRef] : -# 1410| r1410_2(glval<Point>) = VariableAddress[p] : -# 1410| r1410_3(glval<Point>) = 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<unknown>) = FunctionAddress[acceptValue] : -# 1411| r1411_2(glval<Point>) = 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<int>) = VariableAddress[y] : -# 1413| r1413_2(glval<unknown>) = 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<Point>) = VariableAddress[#temp1413:13] : -# 1413| m1413_7(Point) = Store[#temp1413:13] : &:r1413_6, r1413_3 -# 1413| r1413_8(glval<int>) = 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<unknown>) = 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<Point>) = VariableAddress[p] : +# 1454| r1454_2(glval<unknown>) = 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<Point &>) = VariableAddress[rp] : +# 1455| r1455_2(glval<Point>) = VariableAddress[#temp1455:23] : +# 1455| r1455_3(glval<unknown>) = 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<Point>) = Convert : r1455_2 +# 1455| r1455_9(Point &) = CopyValue : r1455_8 +# 1455| m1455_10(Point &) = Store[rp] : &:r1455_1, r1455_9 +# 1457| r1457_1(glval<unknown>) = FunctionAddress[acceptRef] : +# 1457| r1457_2(glval<Point>) = VariableAddress[p] : +# 1457| r1457_3(glval<Point>) = 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<unknown>) = FunctionAddress[acceptValue] : +# 1458| r1458_2(glval<Point>) = 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<int>) = VariableAddress[y] : +# 1460| r1460_2(glval<unknown>) = 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<Point>) = VariableAddress[#temp1460:13] : +# 1460| m1460_7(Point) = Store[#temp1460:13] : &:r1460_6, r1460_3 +# 1460| r1460_8(glval<int>) = 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<unknown>) = 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<int &>) = VariableAddress[rx] : -# 1424| r1424_2(glval<unknown>) = 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<UnusualFields>) = VariableAddress[#temp1424:21] : -# 1424| m1424_7(UnusualFields) = Store[#temp1424:21] : &:r1424_6, r1424_3 -# 1424| r1424_8(glval<int &>) = FieldAddress[r] : r1424_6 -# 1424| r1424_9(int &) = Load[?] : &:r1424_8, ~m1424_7 -# 1424| r1424_10(glval<int>) = CopyValue : r1424_9 -# 1424| r1424_11(glval<int>) = Convert : r1424_10 -# 1424| r1424_12(int &) = CopyValue : r1424_11 -# 1424| m1424_13(int &) = Store[rx] : &:r1424_1, r1424_12 -# 1425| r1425_1(glval<int>) = VariableAddress[x] : -# 1425| r1425_2(glval<unknown>) = 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<UnusualFields>) = VariableAddress[#temp1425:13] : -# 1425| m1425_7(UnusualFields) = Store[#temp1425:13] : &:r1425_6, r1425_3 -# 1425| r1425_8(glval<int &>) = 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<float &>) = VariableAddress[rf] : -# 1427| r1427_2(glval<unknown>) = 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<UnusualFields>) = VariableAddress[#temp1427:23] : -# 1427| m1427_7(UnusualFields) = Store[#temp1427:23] : &:r1427_6, r1427_3 -# 1427| r1427_8(glval<float[10]>) = FieldAddress[a] : r1427_6 -# 1427| r1427_9(float *) = Convert : r1427_8 -# 1427| r1427_10(int) = Constant[3] : -# 1427| r1427_11(glval<float>) = PointerAdd[4] : r1427_9, r1427_10 -# 1427| r1427_12(glval<float>) = Convert : r1427_11 -# 1427| r1427_13(float &) = CopyValue : r1427_12 -# 1427| m1427_14(float &) = Store[rf] : &:r1427_1, r1427_13 -# 1428| r1428_1(glval<float>) = VariableAddress[f] : -# 1428| r1428_2(glval<unknown>) = 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<UnusualFields>) = VariableAddress[#temp1428:15] : -# 1428| m1428_7(UnusualFields) = Store[#temp1428:15] : &:r1428_6, r1428_3 -# 1428| r1428_8(glval<float[10]>) = FieldAddress[a] : r1428_6 -# 1428| r1428_9(float *) = Convert : r1428_8 -# 1428| r1428_10(int) = Constant[5] : -# 1428| r1428_11(glval<float>) = 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<int &>) = VariableAddress[rx] : +# 1471| r1471_2(glval<unknown>) = 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<UnusualFields>) = VariableAddress[#temp1471:21] : +# 1471| m1471_7(UnusualFields) = Store[#temp1471:21] : &:r1471_6, r1471_3 +# 1471| r1471_8(glval<int &>) = FieldAddress[r] : r1471_6 +# 1471| r1471_9(int &) = Load[?] : &:r1471_8, ~m1471_7 +# 1471| r1471_10(glval<int>) = CopyValue : r1471_9 +# 1471| r1471_11(glval<int>) = Convert : r1471_10 +# 1471| r1471_12(int &) = CopyValue : r1471_11 +# 1471| m1471_13(int &) = Store[rx] : &:r1471_1, r1471_12 +# 1472| r1472_1(glval<int>) = VariableAddress[x] : +# 1472| r1472_2(glval<unknown>) = 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<UnusualFields>) = VariableAddress[#temp1472:13] : +# 1472| m1472_7(UnusualFields) = Store[#temp1472:13] : &:r1472_6, r1472_3 +# 1472| r1472_8(glval<int &>) = 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<float &>) = VariableAddress[rf] : +# 1474| r1474_2(glval<unknown>) = 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<UnusualFields>) = VariableAddress[#temp1474:23] : +# 1474| m1474_7(UnusualFields) = Store[#temp1474:23] : &:r1474_6, r1474_3 +# 1474| r1474_8(glval<float[10]>) = FieldAddress[a] : r1474_6 +# 1474| r1474_9(float *) = Convert : r1474_8 +# 1474| r1474_10(int) = Constant[3] : +# 1474| r1474_11(glval<float>) = PointerAdd[4] : r1474_9, r1474_10 +# 1474| r1474_12(glval<float>) = Convert : r1474_11 +# 1474| r1474_13(float &) = CopyValue : r1474_12 +# 1474| m1474_14(float &) = Store[rf] : &:r1474_1, r1474_13 +# 1475| r1475_1(glval<float>) = VariableAddress[f] : +# 1475| r1475_2(glval<unknown>) = 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<UnusualFields>) = VariableAddress[#temp1475:15] : +# 1475| m1475_7(UnusualFields) = Store[#temp1475:15] : &:r1475_6, r1475_3 +# 1475| r1475_8(glval<float[10]>) = FieldAddress[a] : r1475_6 +# 1475| r1475_9(float *) = Convert : r1475_8 +# 1475| r1475_10(int) = Constant[5] : +# 1475| r1475_11(glval<float>) = 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<POD_Base>) = 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<POD_Base>) = VariableAddress[b] : #-----| r0_1(glval<POD_Middle>) = VariableAddress[#temp0:0] : -# 1446| r1446_2(glval<unknown>) = 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<unknown>) = 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<POD_Base>) = 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<POD_Derived>) = VariableAddress[#temp1447:9] : -# 1447| r1447_2(glval<unknown>) = 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<POD_Middle>) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r1447_1 -# 1447| r1447_8(glval<POD_Base>) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r1447_7 -# 1447| r1447_9(POD_Base) = Load[?] : &:r1447_8, ~m1447_6 -# 1447| r1447_10(glval<POD_Base>) = VariableAddress[b] : -# 1447| m1447_11(POD_Base) = Store[b] : &:r1447_10, r1447_9 -# 1448| r1448_1(glval<int>) = 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<POD_Derived>) = VariableAddress[#temp1494:9] : +# 1494| r1494_2(glval<unknown>) = 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<POD_Middle>) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r1494_1 +# 1494| r1494_8(glval<POD_Base>) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r1494_7 +# 1494| r1494_9(POD_Base) = Load[?] : &:r1494_8, ~m1494_6 +# 1494| r1494_10(glval<POD_Base>) = VariableAddress[b] : +# 1494| m1494_11(POD_Base) = Store[b] : &:r1494_10, r1494_9 +# 1495| r1495_1(glval<int>) = VariableAddress[x] : #-----| r0_5(glval<POD_Derived>) = VariableAddress[#temp0:0] : -# 1448| r1448_2(glval<unknown>) = 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<unknown>) = 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<POD_Middle>) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r0_5 #-----| r0_7(glval<POD_Base>) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_6 -# 1448| r1448_7(glval<int>) = 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<float>) = VariableAddress[f] : +# 1495| r1495_7(glval<int>) = 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<float>) = VariableAddress[f] : #-----| r0_8(glval<POD_Derived>) = VariableAddress[#temp0:0] : -# 1449| r1449_2(glval<unknown>) = 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<unknown>) = 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<POD_Middle>) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r0_8 #-----| r0_10(glval<POD_Base>) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_9 #-----| r0_11(glval<POD_Base>) = Convert : r0_10 -# 1449| r1449_7(glval<unknown>) = 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<unknown>) = 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<unknown>) = VariableAddress[#this] : -# 1453| m1453_6(glval<Inheritance_Test_B>) = InitializeParameter[#this] : &:r1453_5 -# 1453| r1453_7(glval<Inheritance_Test_B>) = 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<unknown>) = VariableAddress[#this] : +# 1500| m1500_6(glval<Inheritance_Test_B>) = InitializeParameter[#this] : &:r1500_5 +# 1500| r1500_7(glval<Inheritance_Test_B>) = 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<unknown>) = VariableAddress[#this] : -# 1459| m1459_6(glval<Inheritance_Test_A>) = InitializeParameter[#this] : &:r1459_5 -# 1459| r1459_7(glval<Inheritance_Test_A>) = Load[#this] : &:r1459_5, m1459_6 -# 1459| m1459_8(Inheritance_Test_A) = InitializeIndirection[#this] : &:r1459_7 -# 1459| r1459_9(glval<int>) = 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<unknown>) = VariableAddress[#this] : -# 1460| r1460_3(Inheritance_Test_A *) = Load[#this] : &:r1460_2, m1459_6 -# 1460| r1460_4(glval<int>) = 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<unknown>) = VariableAddress[#this] : +# 1506| m1506_6(glval<Inheritance_Test_A>) = InitializeParameter[#this] : &:r1506_5 +# 1506| r1506_7(glval<Inheritance_Test_A>) = Load[#this] : &:r1506_5, m1506_6 +# 1506| m1506_8(Inheritance_Test_A) = InitializeIndirection[#this] : &:r1506_7 +# 1506| r1506_9(glval<int>) = 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<unknown>) = VariableAddress[#this] : +# 1507| r1507_3(Inheritance_Test_A *) = Load[#this] : &:r1507_2, m1506_6 +# 1507| r1507_4(glval<int>) = 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<int[2]>) = VariableAddress[xs] : -# 1465| m1465_2(int[2]) = Uninitialized[xs] : &:r1465_1 -# 1465| r1465_3(int) = Constant[0] : -# 1465| r1465_4(glval<int>) = 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<int>) = 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<int(&)[2]>) = VariableAddress[(unnamed local variable)] : -# 1468| r1468_2(glval<int[2]>) = 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<int &>) = 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<int[2]>) = VariableAddress[xs] : +# 1512| m1512_2(int[2]) = Uninitialized[xs] : &:r1512_1 +# 1512| r1512_3(int) = Constant[0] : +# 1512| r1512_4(glval<int>) = 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<int>) = 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<int(&)[2]>) = VariableAddress[(unnamed local variable)] : +# 1515| r1515_2(glval<int[2]>) = 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<int &>) = VariableAddress[x0] : #-----| r0_1(glval<int(&)[2]>) = 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<int[2]>) = CopyValue : r0_2 #-----| r0_4(int *) = Convert : r0_3 #-----| r0_5(unsigned long) = Constant[0] : #-----| r0_6(glval<int>) = PointerAdd[4] : r0_4, r0_5 -#-----| m0_7(int &) = Store[x0] : &:r1468_5, r0_6 -# 1468| r1468_6(glval<int &>) = VariableAddress[x1] : +#-----| m0_7(int &) = Store[x0] : &:r1515_5, r0_6 +# 1515| r1515_6(glval<int &>) = VariableAddress[x1] : #-----| r0_8(glval<int(&)[2]>) = 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<int[2]>) = CopyValue : r0_9 #-----| r0_11(int *) = Convert : r0_10 #-----| r0_12(unsigned long) = Constant[1] : #-----| r0_13(glval<int>) = 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<int &>) = 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<int &>) = VariableAddress[rx1] : -# 1470| r1470_2(glval<int &>) = 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<int>) = VariableAddress[x] : -# 1471| r1471_2(glval<int &>) = 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<int(&)[2]>) = VariableAddress[unnamed_local_variable] : -# 1475| r1475_2(glval<int[2]>) = 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<int &>) = VariableAddress[x0] : -# 1476| r1476_2(glval<int(&)[2]>) = VariableAddress[unnamed_local_variable] : -# 1476| r1476_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1476_2, m1475_4 -# 1476| r1476_4(glval<int[2]>) = CopyValue : r1476_3 -# 1476| r1476_5(int *) = Convert : r1476_4 -# 1476| r1476_6(int) = Constant[0] : -# 1476| r1476_7(glval<int>) = 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<int &>) = VariableAddress[x1] : -# 1477| r1477_2(glval<int(&)[2]>) = VariableAddress[unnamed_local_variable] : -# 1477| r1477_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1477_2, m1475_4 -# 1477| r1477_4(glval<int[2]>) = CopyValue : r1477_3 -# 1477| r1477_5(int *) = Convert : r1477_4 -# 1477| r1477_6(int) = Constant[1] : -# 1477| r1477_7(glval<int>) = 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<int &>) = VariableAddress[x1] : -# 1478| r1478_3(int &) = Load[x1] : &:r1478_2, m1477_9 -# 1478| r1478_4(glval<int>) = 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<int &>) = VariableAddress[rx1] : -# 1479| r1479_2(glval<int &>) = VariableAddress[x1] : -# 1479| r1479_3(int &) = Load[x1] : &:r1479_2, m1477_9 -# 1479| r1479_4(glval<int>) = CopyValue : r1479_3 -# 1479| r1479_5(int &) = CopyValue : r1479_4 -# 1479| m1479_6(int &) = Store[rx1] : &:r1479_1, r1479_5 -# 1480| r1480_1(glval<int>) = VariableAddress[x] : -# 1480| r1480_2(glval<int &>) = 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<int &>) = 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<int &>) = VariableAddress[rx1] : +# 1517| r1517_2(glval<int &>) = 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<int>) = VariableAddress[x] : +# 1518| r1518_2(glval<int &>) = 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<int(&)[2]>) = VariableAddress[unnamed_local_variable] : +# 1522| r1522_2(glval<int[2]>) = 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<int &>) = VariableAddress[x0] : +# 1523| r1523_2(glval<int(&)[2]>) = VariableAddress[unnamed_local_variable] : +# 1523| r1523_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1523_2, m1522_4 +# 1523| r1523_4(glval<int[2]>) = CopyValue : r1523_3 +# 1523| r1523_5(int *) = Convert : r1523_4 +# 1523| r1523_6(int) = Constant[0] : +# 1523| r1523_7(glval<int>) = 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<int &>) = VariableAddress[x1] : +# 1524| r1524_2(glval<int(&)[2]>) = VariableAddress[unnamed_local_variable] : +# 1524| r1524_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1524_2, m1522_4 +# 1524| r1524_4(glval<int[2]>) = CopyValue : r1524_3 +# 1524| r1524_5(int *) = Convert : r1524_4 +# 1524| r1524_6(int) = Constant[1] : +# 1524| r1524_7(glval<int>) = 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<int &>) = VariableAddress[x1] : +# 1525| r1525_3(int &) = Load[x1] : &:r1525_2, m1524_9 +# 1525| r1525_4(glval<int>) = 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<int &>) = VariableAddress[rx1] : +# 1526| r1526_2(glval<int &>) = VariableAddress[x1] : +# 1526| r1526_3(int &) = Load[x1] : &:r1526_2, m1524_9 +# 1526| r1526_4(glval<int>) = CopyValue : r1526_3 +# 1526| r1526_5(int &) = CopyValue : r1526_4 +# 1526| m1526_6(int &) = Store[rx1] : &:r1526_1, r1526_5 +# 1527| r1527_1(glval<int>) = VariableAddress[x] : +# 1527| r1527_2(glval<int &>) = 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<unknown>) = VariableAddress[#this] : -# 1484| m1484_6(glval<StructuredBindingDataMemberMemberStruct>) = InitializeParameter[#this] : &:r1484_5 -# 1484| r1484_7(glval<StructuredBindingDataMemberMemberStruct>) = 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<unknown>) = VariableAddress[#this] : +# 1531| m1531_6(glval<StructuredBindingDataMemberMemberStruct>) = InitializeParameter[#this] : &:r1531_5 +# 1531| r1531_7(glval<StructuredBindingDataMemberMemberStruct>) = 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<unknown>) = VariableAddress[#this] : -# 1488| m1488_6(glval<StructuredBindingDataMemberStruct>) = InitializeParameter[#this] : &:r1488_5 -# 1488| r1488_7(glval<StructuredBindingDataMemberStruct>) = 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<unknown>) = VariableAddress[#this] : +# 1535| m1535_6(glval<StructuredBindingDataMemberStruct>) = InitializeParameter[#this] : &:r1535_5 +# 1535| r1535_7(glval<StructuredBindingDataMemberStruct>) = 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<unknown>) = VariableAddress[#this] : -# 1488| m1488_6(glval<StructuredBindingDataMemberStruct>) = InitializeParameter[#this] : &:r1488_5 -# 1488| r1488_7(glval<StructuredBindingDataMemberStruct>) = 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<unknown>) = VariableAddress[#this] : +# 1535| m1535_6(glval<StructuredBindingDataMemberStruct>) = InitializeParameter[#this] : &:r1535_5 +# 1535| r1535_7(glval<StructuredBindingDataMemberStruct>) = Load[#this] : &:r1535_5, m1535_6 +# 1535| m1535_8(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1535_7 #-----| r0_1(glval<StructuredBindingDataMemberStruct &>) = 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<int>) = FieldAddress[i] : m1488_6 -# 1488| r1488_10(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_11(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_10, m0_2 -# 1488| r1488_12(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1488_11 -# 1488| r1488_13(glval<int>) = 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<double>) = FieldAddress[d] : m1488_6 -# 1488| r1488_18(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_19(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_18, m0_2 -# 1488| r1488_20(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1488_19 -# 1488| r1488_21(glval<double>) = 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<unsigned int>) = FieldAddress[b] : m1488_6 -# 1488| r1488_26(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_27(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_26, m0_2 -# 1488| r1488_28(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1488_27 -# 1488| r1488_29(glval<unsigned int>) = 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<int &>) = FieldAddress[r] : m1488_6 -# 1488| r1488_34(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_35(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_34, m0_2 -# 1488| r1488_36(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1488_35 -# 1488| r1488_37(glval<int &>) = 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<int *>) = FieldAddress[p] : m1488_6 -# 1488| r1488_42(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_43(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_42, m0_2 -# 1488| r1488_44(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1488_43 -# 1488| r1488_45(glval<int *>) = 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<int[2]>) = FieldAddress[xs] : m1488_6 -# 1488| r1488_50(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_51(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_50, m0_2 -# 1488| r1488_52(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1488_51 -# 1488| r1488_53(glval<int[2]>) = 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<int &>) = FieldAddress[r_alt] : m1488_6 -# 1488| r1488_58(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_59(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_58, m0_2 -# 1488| r1488_60(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1488_59 -# 1488| r1488_61(glval<int &>) = 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<StructuredBindingDataMemberMemberStruct>) = FieldAddress[m] : m1488_6 -# 1488| r1488_66(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_67(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_66, m0_2 -# 1488| r1488_68(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1488_67 -# 1488| r1488_69(glval<StructuredBindingDataMemberMemberStruct>) = 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<int>) = FieldAddress[i] : m1535_6 +# 1535| r1535_10(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_11(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_10, m0_2 +# 1535| r1535_12(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1535_11 +# 1535| r1535_13(glval<int>) = 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<double>) = FieldAddress[d] : m1535_6 +# 1535| r1535_18(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_19(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_18, m0_2 +# 1535| r1535_20(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1535_19 +# 1535| r1535_21(glval<double>) = 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<unsigned int>) = FieldAddress[b] : m1535_6 +# 1535| r1535_26(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_27(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_26, m0_2 +# 1535| r1535_28(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1535_27 +# 1535| r1535_29(glval<unsigned int>) = 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<int &>) = FieldAddress[r] : m1535_6 +# 1535| r1535_34(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_35(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_34, m0_2 +# 1535| r1535_36(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1535_35 +# 1535| r1535_37(glval<int &>) = 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<int *>) = FieldAddress[p] : m1535_6 +# 1535| r1535_42(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_43(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_42, m0_2 +# 1535| r1535_44(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1535_43 +# 1535| r1535_45(glval<int *>) = 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<int[2]>) = FieldAddress[xs] : m1535_6 +# 1535| r1535_50(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_51(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_50, m0_2 +# 1535| r1535_52(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1535_51 +# 1535| r1535_53(glval<int[2]>) = 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<int &>) = FieldAddress[r_alt] : m1535_6 +# 1535| r1535_58(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_59(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_58, m0_2 +# 1535| r1535_60(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1535_59 +# 1535| r1535_61(glval<int &>) = 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<StructuredBindingDataMemberMemberStruct>) = FieldAddress[m] : m1535_6 +# 1535| r1535_66(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_67(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_66, m0_2 +# 1535| r1535_68(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1535_67 +# 1535| r1535_69(glval<StructuredBindingDataMemberMemberStruct>) = 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<StructuredBindingDataMemberStruct>) = VariableAddress[s] : -# 1502| m1502_2(StructuredBindingDataMemberStruct) = Uninitialized[s] : &:r1502_1 -# 1502| r1502_3(glval<unknown>) = 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<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_2(glval<StructuredBindingDataMemberStruct>) = 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<int &>) = VariableAddress[i] : -# 1505| r1505_6(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_7(glval<int>) = FieldAddress[i] : r1505_6 -# 1505| m1505_8(int &) = Store[i] : &:r1505_5, r1505_7 -# 1505| r1505_9(glval<double &>) = VariableAddress[d] : -# 1505| r1505_10(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_11(glval<double>) = FieldAddress[d] : r1505_10 -# 1505| m1505_12(double &) = Store[d] : &:r1505_9, r1505_11 -# 1505| r1505_13(glval<unsigned int &>) = VariableAddress[b] : -# 1505| r1505_14(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_15(glval<unsigned int>) = FieldAddress[b] : r1505_14 -# 1505| m1505_16(unsigned int &) = Store[b] : &:r1505_13, r1505_15 -# 1505| r1505_17(glval<int &>) = VariableAddress[r] : -# 1505| r1505_18(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_19(glval<int &>) = FieldAddress[r] : r1505_18 -# 1505| r1505_20(int &) = Load[?] : &:r1505_19, ~m1505_4 -# 1505| r1505_21(glval<int>) = CopyValue : r1505_20 -# 1505| m1505_22(int &) = Store[r] : &:r1505_17, r1505_21 -# 1505| r1505_23(glval<int *&>) = VariableAddress[p] : -# 1505| r1505_24(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_25(glval<int *>) = FieldAddress[p] : r1505_24 -# 1505| m1505_26(int *&) = Store[p] : &:r1505_23, r1505_25 -# 1505| r1505_27(glval<int(&)[2]>) = VariableAddress[xs] : -# 1505| r1505_28(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_29(glval<int[2]>) = FieldAddress[xs] : r1505_28 -# 1505| m1505_30(int(&)[2]) = Store[xs] : &:r1505_27, r1505_29 -# 1505| r1505_31(glval<int &>) = VariableAddress[r_alt] : -# 1505| r1505_32(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_33(glval<int &>) = FieldAddress[r_alt] : r1505_32 -# 1505| r1505_34(int &) = Load[?] : &:r1505_33, ~m1505_4 -# 1505| r1505_35(glval<int>) = CopyValue : r1505_34 -# 1505| m1505_36(int &) = Store[r_alt] : &:r1505_31, r1505_35 -# 1505| r1505_37(glval<StructuredBindingDataMemberMemberStruct &>) = VariableAddress[m] : -# 1505| r1505_38(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_39(glval<StructuredBindingDataMemberMemberStruct>) = 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<double &>) = 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<double &>) = VariableAddress[rd] : -# 1507| r1507_2(glval<double &>) = 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<int>) = VariableAddress[v] : -# 1508| r1508_2(glval<int &>) = 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<int &>) = 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<int *&>) = 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<int>) = 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<int &>) = VariableAddress[rr] : -# 1511| r1511_2(glval<int &>) = 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<int *>) = VariableAddress[pr] : -# 1512| r1512_2(glval<int &>) = 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<int>) = VariableAddress[w] : -# 1513| r1513_2(glval<int &>) = 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<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] : -# 1517| r1517_2(glval<StructuredBindingDataMemberStruct>) = 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<int &>) = VariableAddress[i] : -# 1518| r1518_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] : -# 1518| r1518_3(glval<int>) = 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<double &>) = VariableAddress[d] : -# 1519| r1519_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] : -# 1519| r1519_3(glval<double>) = 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<int &>) = VariableAddress[r] : -# 1521| r1521_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] : -# 1521| r1521_3(glval<int &>) = FieldAddress[r] : r1521_2 -# 1521| r1521_4(int &) = Load[?] : &:r1521_3, ~m1517_4 -# 1521| r1521_5(glval<int>) = CopyValue : r1521_4 -# 1521| r1521_6(int &) = CopyValue : r1521_5 -# 1521| m1521_7(int &) = Store[r] : &:r1521_1, r1521_6 -# 1522| r1522_1(glval<int *&>) = VariableAddress[p] : -# 1522| r1522_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] : -# 1522| r1522_3(glval<int *>) = 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<double &>) = VariableAddress[d] : -# 1523| r1523_3(double &) = Load[d] : &:r1523_2, m1519_5 -# 1523| r1523_4(glval<double>) = 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<double &>) = VariableAddress[rd] : -# 1524| r1524_2(glval<double &>) = VariableAddress[d] : -# 1524| r1524_3(double &) = Load[d] : &:r1524_2, m1519_5 -# 1524| r1524_4(glval<double>) = CopyValue : r1524_3 -# 1524| r1524_5(double &) = CopyValue : r1524_4 -# 1524| m1524_6(double &) = Store[rd] : &:r1524_1, r1524_5 -# 1525| r1525_1(glval<int>) = VariableAddress[v] : -# 1525| r1525_2(glval<int &>) = 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<int &>) = VariableAddress[r] : -# 1526| r1526_3(int &) = Load[r] : &:r1526_2, m1521_7 -# 1526| r1526_4(glval<int>) = 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<int *&>) = 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<int>) = 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<int &>) = VariableAddress[rr] : -# 1528| r1528_2(glval<int &>) = VariableAddress[r] : -# 1528| r1528_3(int &) = Load[r] : &:r1528_2, m1521_7 -# 1528| r1528_4(glval<int>) = CopyValue : r1528_3 -# 1528| r1528_5(int &) = CopyValue : r1528_4 -# 1528| m1528_6(int &) = Store[rr] : &:r1528_1, r1528_5 -# 1529| r1529_1(glval<int *>) = VariableAddress[pr] : -# 1529| r1529_2(glval<int &>) = VariableAddress[r] : -# 1529| r1529_3(int &) = Load[r] : &:r1529_2, m1521_7 -# 1529| r1529_4(glval<int>) = CopyValue : r1529_3 -# 1529| r1529_5(int *) = CopyValue : r1529_4 -# 1529| m1529_6(int *) = Store[pr] : &:r1529_1, r1529_5 -# 1530| r1530_1(glval<int>) = VariableAddress[w] : -# 1530| r1530_2(glval<int &>) = 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<StructuredBindingDataMemberStruct>) = VariableAddress[s] : +# 1549| m1549_2(StructuredBindingDataMemberStruct) = Uninitialized[s] : &:r1549_1 +# 1549| r1549_3(glval<unknown>) = 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<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_2(glval<StructuredBindingDataMemberStruct>) = 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<int &>) = VariableAddress[i] : +# 1552| r1552_6(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_7(glval<int>) = FieldAddress[i] : r1552_6 +# 1552| m1552_8(int &) = Store[i] : &:r1552_5, r1552_7 +# 1552| r1552_9(glval<double &>) = VariableAddress[d] : +# 1552| r1552_10(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_11(glval<double>) = FieldAddress[d] : r1552_10 +# 1552| m1552_12(double &) = Store[d] : &:r1552_9, r1552_11 +# 1552| r1552_13(glval<unsigned int &>) = VariableAddress[b] : +# 1552| r1552_14(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_15(glval<unsigned int>) = FieldAddress[b] : r1552_14 +# 1552| m1552_16(unsigned int &) = Store[b] : &:r1552_13, r1552_15 +# 1552| r1552_17(glval<int &>) = VariableAddress[r] : +# 1552| r1552_18(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_19(glval<int &>) = FieldAddress[r] : r1552_18 +# 1552| r1552_20(int &) = Load[?] : &:r1552_19, ~m1552_4 +# 1552| r1552_21(glval<int>) = CopyValue : r1552_20 +# 1552| m1552_22(int &) = Store[r] : &:r1552_17, r1552_21 +# 1552| r1552_23(glval<int *&>) = VariableAddress[p] : +# 1552| r1552_24(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_25(glval<int *>) = FieldAddress[p] : r1552_24 +# 1552| m1552_26(int *&) = Store[p] : &:r1552_23, r1552_25 +# 1552| r1552_27(glval<int(&)[2]>) = VariableAddress[xs] : +# 1552| r1552_28(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_29(glval<int[2]>) = FieldAddress[xs] : r1552_28 +# 1552| m1552_30(int(&)[2]) = Store[xs] : &:r1552_27, r1552_29 +# 1552| r1552_31(glval<int &>) = VariableAddress[r_alt] : +# 1552| r1552_32(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_33(glval<int &>) = FieldAddress[r_alt] : r1552_32 +# 1552| r1552_34(int &) = Load[?] : &:r1552_33, ~m1552_4 +# 1552| r1552_35(glval<int>) = CopyValue : r1552_34 +# 1552| m1552_36(int &) = Store[r_alt] : &:r1552_31, r1552_35 +# 1552| r1552_37(glval<StructuredBindingDataMemberMemberStruct &>) = VariableAddress[m] : +# 1552| r1552_38(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_39(glval<StructuredBindingDataMemberMemberStruct>) = 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<double &>) = 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<double &>) = VariableAddress[rd] : +# 1554| r1554_2(glval<double &>) = 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<int>) = VariableAddress[v] : +# 1555| r1555_2(glval<int &>) = 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<int &>) = 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<int *&>) = 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<int>) = 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<int &>) = VariableAddress[rr] : +# 1558| r1558_2(glval<int &>) = 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<int *>) = VariableAddress[pr] : +# 1559| r1559_2(glval<int &>) = 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<int>) = VariableAddress[w] : +# 1560| r1560_2(glval<int &>) = 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<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] : +# 1564| r1564_2(glval<StructuredBindingDataMemberStruct>) = 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<int &>) = VariableAddress[i] : +# 1565| r1565_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] : +# 1565| r1565_3(glval<int>) = 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<double &>) = VariableAddress[d] : +# 1566| r1566_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] : +# 1566| r1566_3(glval<double>) = 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<int &>) = VariableAddress[r] : +# 1568| r1568_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] : +# 1568| r1568_3(glval<int &>) = FieldAddress[r] : r1568_2 +# 1568| r1568_4(int &) = Load[?] : &:r1568_3, ~m1564_4 +# 1568| r1568_5(glval<int>) = CopyValue : r1568_4 +# 1568| r1568_6(int &) = CopyValue : r1568_5 +# 1568| m1568_7(int &) = Store[r] : &:r1568_1, r1568_6 +# 1569| r1569_1(glval<int *&>) = VariableAddress[p] : +# 1569| r1569_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] : +# 1569| r1569_3(glval<int *>) = 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<double &>) = VariableAddress[d] : +# 1570| r1570_3(double &) = Load[d] : &:r1570_2, m1566_5 +# 1570| r1570_4(glval<double>) = 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<double &>) = VariableAddress[rd] : +# 1571| r1571_2(glval<double &>) = VariableAddress[d] : +# 1571| r1571_3(double &) = Load[d] : &:r1571_2, m1566_5 +# 1571| r1571_4(glval<double>) = CopyValue : r1571_3 +# 1571| r1571_5(double &) = CopyValue : r1571_4 +# 1571| m1571_6(double &) = Store[rd] : &:r1571_1, r1571_5 +# 1572| r1572_1(glval<int>) = VariableAddress[v] : +# 1572| r1572_2(glval<int &>) = 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<int &>) = VariableAddress[r] : +# 1573| r1573_3(int &) = Load[r] : &:r1573_2, m1568_7 +# 1573| r1573_4(glval<int>) = 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<int *&>) = 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<int>) = 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<int &>) = VariableAddress[rr] : +# 1575| r1575_2(glval<int &>) = VariableAddress[r] : +# 1575| r1575_3(int &) = Load[r] : &:r1575_2, m1568_7 +# 1575| r1575_4(glval<int>) = CopyValue : r1575_3 +# 1575| r1575_5(int &) = CopyValue : r1575_4 +# 1575| m1575_6(int &) = Store[rr] : &:r1575_1, r1575_5 +# 1576| r1576_1(glval<int *>) = VariableAddress[pr] : +# 1576| r1576_2(glval<int &>) = VariableAddress[r] : +# 1576| r1576_3(int &) = Load[r] : &:r1576_2, m1568_7 +# 1576| r1576_4(glval<int>) = CopyValue : r1576_3 +# 1576| r1576_5(int *) = CopyValue : r1576_4 +# 1576| m1576_6(int *) = Store[pr] : &:r1576_1, r1576_5 +# 1577| r1577_1(glval<int>) = VariableAddress[w] : +# 1577| r1577_2(glval<int &>) = 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<unknown>) = VariableAddress[#this] : -# 1541| m1541_6(glval<StructuredBindingTupleRefGet>) = InitializeParameter[#this] : &:r1541_5 -# 1541| r1541_7(glval<StructuredBindingTupleRefGet>) = 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<unknown>) = VariableAddress[#this] : +# 1588| m1588_6(glval<StructuredBindingTupleRefGet>) = InitializeParameter[#this] : &:r1588_5 +# 1588| r1588_7(glval<StructuredBindingTupleRefGet>) = 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<unknown>) = VariableAddress[#this] : -# 1541| m1541_6(glval<StructuredBindingTupleRefGet>) = InitializeParameter[#this] : &:r1541_5 -# 1541| r1541_7(glval<StructuredBindingTupleRefGet>) = 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<unknown>) = VariableAddress[#this] : +# 1588| m1588_6(glval<StructuredBindingTupleRefGet>) = InitializeParameter[#this] : &:r1588_5 +# 1588| r1588_7(glval<StructuredBindingTupleRefGet>) = Load[#this] : &:r1588_5, m1588_6 +# 1588| m1588_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1588_7 #-----| r0_1(glval<StructuredBindingTupleRefGet &>) = 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<int>) = FieldAddress[i] : m1541_6 -# 1541| r1541_10(glval<StructuredBindingTupleRefGet &>) = VariableAddress[(unnamed parameter 0)] : -# 1541| r1541_11(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_10, m0_2 -# 1541| r1541_12(glval<StructuredBindingTupleRefGet>) = CopyValue : r1541_11 -# 1541| r1541_13(glval<int>) = 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<double>) = FieldAddress[d] : m1541_6 -# 1541| r1541_18(glval<StructuredBindingTupleRefGet &>) = VariableAddress[(unnamed parameter 0)] : -# 1541| r1541_19(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_18, m0_2 -# 1541| r1541_20(glval<StructuredBindingTupleRefGet>) = CopyValue : r1541_19 -# 1541| r1541_21(glval<double>) = 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<int &>) = FieldAddress[r] : m1541_6 -# 1541| r1541_26(glval<StructuredBindingTupleRefGet &>) = VariableAddress[(unnamed parameter 0)] : -# 1541| r1541_27(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_26, m0_2 -# 1541| r1541_28(glval<StructuredBindingTupleRefGet>) = CopyValue : r1541_27 -# 1541| r1541_29(glval<int &>) = 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<int>) = FieldAddress[i] : m1588_6 +# 1588| r1588_10(glval<StructuredBindingTupleRefGet &>) = VariableAddress[(unnamed parameter 0)] : +# 1588| r1588_11(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1588_10, m0_2 +# 1588| r1588_12(glval<StructuredBindingTupleRefGet>) = CopyValue : r1588_11 +# 1588| r1588_13(glval<int>) = 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<double>) = FieldAddress[d] : m1588_6 +# 1588| r1588_18(glval<StructuredBindingTupleRefGet &>) = VariableAddress[(unnamed parameter 0)] : +# 1588| r1588_19(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1588_18, m0_2 +# 1588| r1588_20(glval<StructuredBindingTupleRefGet>) = CopyValue : r1588_19 +# 1588| r1588_21(glval<double>) = 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<int &>) = FieldAddress[r] : m1588_6 +# 1588| r1588_26(glval<StructuredBindingTupleRefGet &>) = VariableAddress[(unnamed parameter 0)] : +# 1588| r1588_27(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1588_26, m0_2 +# 1588| r1588_28(glval<StructuredBindingTupleRefGet>) = CopyValue : r1588_27 +# 1588| r1588_29(glval<int &>) = 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<int 0, StructuredBindingTupleRefGet>::type& StructuredBindingTupleRefGet::get<int 0>() -# 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<unknown>) = VariableAddress[#this] : -# 1569| m1569_6(glval<StructuredBindingTupleRefGet>) = InitializeParameter[#this] : &:r1569_5 -# 1569| r1569_7(glval<StructuredBindingTupleRefGet>) = Load[#this] : &:r1569_5, m1569_6 -# 1569| m1569_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1569_7 -# 1570| r1570_1(glval<int &>) = VariableAddress[#return] : -# 1570| r1570_2(glval<unknown>) = VariableAddress[#this] : -# 1570| r1570_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1570_2, m1569_6 -# 1570| r1570_4(glval<int>) = 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<int &>) = 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<int 0, StructuredBindingTupleRefGet>::type& StructuredBindingTupleRefGet::get<int 0>() +# 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<unknown>) = VariableAddress[#this] : +# 1616| m1616_6(glval<StructuredBindingTupleRefGet>) = InitializeParameter[#this] : &:r1616_5 +# 1616| r1616_7(glval<StructuredBindingTupleRefGet>) = Load[#this] : &:r1616_5, m1616_6 +# 1616| m1616_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1616_7 +# 1617| r1617_1(glval<int &>) = VariableAddress[#return] : +# 1617| r1617_2(glval<unknown>) = VariableAddress[#this] : +# 1617| r1617_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1617_2, m1616_6 +# 1617| r1617_4(glval<int>) = 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<int &>) = 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<int 1, StructuredBindingTupleRefGet>::type& StructuredBindingTupleRefGet::get<int 1>() -# 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<unknown>) = VariableAddress[#this] : -# 1573| m1573_6(glval<StructuredBindingTupleRefGet>) = InitializeParameter[#this] : &:r1573_5 -# 1573| r1573_7(glval<StructuredBindingTupleRefGet>) = Load[#this] : &:r1573_5, m1573_6 -# 1573| m1573_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1573_7 -# 1574| r1574_1(glval<double &>) = VariableAddress[#return] : -# 1574| r1574_2(glval<unknown>) = VariableAddress[#this] : -# 1574| r1574_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1574_2, m1573_6 -# 1574| r1574_4(glval<double>) = 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<double &>) = 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<int 1, StructuredBindingTupleRefGet>::type& StructuredBindingTupleRefGet::get<int 1>() +# 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<unknown>) = VariableAddress[#this] : +# 1620| m1620_6(glval<StructuredBindingTupleRefGet>) = InitializeParameter[#this] : &:r1620_5 +# 1620| r1620_7(glval<StructuredBindingTupleRefGet>) = Load[#this] : &:r1620_5, m1620_6 +# 1620| m1620_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1620_7 +# 1621| r1621_1(glval<double &>) = VariableAddress[#return] : +# 1621| r1621_2(glval<unknown>) = VariableAddress[#this] : +# 1621| r1621_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1621_2, m1620_6 +# 1621| r1621_4(glval<double>) = 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<double &>) = 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<int 2, StructuredBindingTupleRefGet>::type StructuredBindingTupleRefGet::get<int 2>() -# 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<unknown>) = VariableAddress[#this] : -# 1577| m1577_6(glval<StructuredBindingTupleRefGet>) = InitializeParameter[#this] : &:r1577_5 -# 1577| r1577_7(glval<StructuredBindingTupleRefGet>) = Load[#this] : &:r1577_5, m1577_6 -# 1577| m1577_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1577_7 -# 1578| r1578_1(glval<int &>) = VariableAddress[#return] : -# 1578| r1578_2(glval<unknown>) = VariableAddress[#this] : -# 1578| r1578_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1578_2, m1577_6 -# 1578| r1578_4(glval<int &>) = FieldAddress[r] : r1578_3 -# 1578| r1578_5(int &) = Load[?] : &:r1578_4, ~m1577_8 -# 1578| r1578_6(glval<int>) = 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<int &>) = 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<int 2, StructuredBindingTupleRefGet>::type StructuredBindingTupleRefGet::get<int 2>() +# 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<unknown>) = VariableAddress[#this] : +# 1624| m1624_6(glval<StructuredBindingTupleRefGet>) = InitializeParameter[#this] : &:r1624_5 +# 1624| r1624_7(glval<StructuredBindingTupleRefGet>) = Load[#this] : &:r1624_5, m1624_6 +# 1624| m1624_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1624_7 +# 1625| r1625_1(glval<int &>) = VariableAddress[#return] : +# 1625| r1625_2(glval<unknown>) = VariableAddress[#this] : +# 1625| r1625_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1625_2, m1624_6 +# 1625| r1625_4(glval<int &>) = FieldAddress[r] : r1625_3 +# 1625| r1625_5(int &) = Load[?] : &:r1625_4, ~m1624_8 +# 1625| r1625_6(glval<int>) = 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<int &>) = 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<StructuredBindingTupleRefGet>) = VariableAddress[t] : -# 1582| m1582_2(StructuredBindingTupleRefGet) = Uninitialized[t] : &:r1582_1 -# 1582| r1582_3(glval<unknown>) = 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<StructuredBindingTupleRefGet>) = VariableAddress[(unnamed local variable)] : -# 1585| r1585_2(glval<StructuredBindingTupleRefGet>) = 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<int &>) = VariableAddress[i] : -# 1585| r1585_6(glval<StructuredBindingTupleRefGet>) = VariableAddress[(unnamed local variable)] : -# 1585| r1585_7(glval<unknown>) = 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<int>) = CopyValue : r1585_8 -# 1585| r1585_15(int &) = CopyValue : r1585_14 -# 1585| m1585_16(int &) = Store[i] : &:r1585_5, r1585_15 -# 1585| r1585_17(glval<double &>) = VariableAddress[d] : -# 1585| r1585_18(glval<StructuredBindingTupleRefGet>) = VariableAddress[(unnamed local variable)] : -# 1585| r1585_19(glval<unknown>) = 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<double>) = CopyValue : r1585_20 -# 1585| r1585_27(double &) = CopyValue : r1585_26 -# 1585| m1585_28(double &) = Store[d] : &:r1585_17, r1585_27 -# 1585| r1585_29(glval<int &>) = VariableAddress[r] : -# 1585| r1585_30(glval<StructuredBindingTupleRefGet>) = VariableAddress[(unnamed local variable)] : -# 1585| r1585_31(glval<unknown>) = 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<int>) = 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<double &>) = VariableAddress[d] : -# 1586| r1586_3(double &) = Load[d] : &:r1586_2, m1585_28 -# 1586| r1586_4(glval<double>) = 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<double &>) = VariableAddress[rd] : -# 1587| r1587_2(glval<double &>) = VariableAddress[d] : -# 1587| r1587_3(double &) = Load[d] : &:r1587_2, m1585_28 -# 1587| r1587_4(glval<double>) = CopyValue : r1587_3 -# 1587| r1587_5(double &) = CopyValue : r1587_4 -# 1587| m1587_6(double &) = Store[rd] : &:r1587_1, r1587_5 -# 1588| r1588_1(glval<int>) = VariableAddress[v] : -# 1588| r1588_2(glval<int &>) = 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<int &>) = VariableAddress[r] : -# 1589| r1589_3(int &) = Load[r] : &:r1589_2, m1585_40 -# 1589| r1589_4(glval<int>) = 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<int &>) = VariableAddress[rr] : -# 1590| r1590_2(glval<int &>) = VariableAddress[r] : -# 1590| r1590_3(int &) = Load[r] : &:r1590_2, m1585_40 -# 1590| r1590_4(glval<int>) = CopyValue : r1590_3 -# 1590| r1590_5(int &) = CopyValue : r1590_4 -# 1590| m1590_6(int &) = Store[rr] : &:r1590_1, r1590_5 -# 1591| r1591_1(glval<int>) = VariableAddress[w] : -# 1591| r1591_2(glval<int &>) = 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<StructuredBindingTupleRefGet>) = VariableAddress[unnamed_local_variable] : -# 1595| r1595_2(glval<StructuredBindingTupleRefGet>) = 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<int &>) = VariableAddress[i] : -# 1596| r1596_2(glval<StructuredBindingTupleRefGet>) = VariableAddress[unnamed_local_variable] : -# 1596| r1596_3(glval<unknown>) = 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<int>) = CopyValue : r1596_4 -# 1596| r1596_11(int &) = CopyValue : r1596_10 -# 1596| m1596_12(int &) = Store[i] : &:r1596_1, r1596_11 -# 1597| r1597_1(glval<double &>) = VariableAddress[d] : -# 1597| r1597_2(glval<StructuredBindingTupleRefGet>) = VariableAddress[unnamed_local_variable] : -# 1597| r1597_3(glval<unknown>) = 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<double>) = CopyValue : r1597_4 -# 1597| r1597_11(double &) = CopyValue : r1597_10 -# 1597| m1597_12(double &) = Store[d] : &:r1597_1, r1597_11 -# 1598| r1598_1(glval<int &>) = VariableAddress[r] : -# 1598| r1598_2(glval<StructuredBindingTupleRefGet>) = VariableAddress[unnamed_local_variable] : -# 1598| r1598_3(glval<unknown>) = 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<int>) = 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<double &>) = VariableAddress[d] : -# 1599| r1599_3(double &) = Load[d] : &:r1599_2, m1597_12 -# 1599| r1599_4(glval<double>) = 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<double &>) = VariableAddress[rd] : -# 1600| r1600_2(glval<double &>) = VariableAddress[d] : -# 1600| r1600_3(double &) = Load[d] : &:r1600_2, m1597_12 -# 1600| r1600_4(glval<double>) = CopyValue : r1600_3 -# 1600| r1600_5(double &) = CopyValue : r1600_4 -# 1600| m1600_6(double &) = Store[rd] : &:r1600_1, r1600_5 -# 1601| r1601_1(glval<int>) = VariableAddress[v] : -# 1601| r1601_2(glval<int &>) = 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<int &>) = VariableAddress[r] : -# 1602| r1602_3(int &) = Load[r] : &:r1602_2, m1598_12 -# 1602| r1602_4(glval<int>) = 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<int &>) = VariableAddress[rr] : -# 1603| r1603_2(glval<int &>) = VariableAddress[r] : -# 1603| r1603_3(int &) = Load[r] : &:r1603_2, m1598_12 -# 1603| r1603_4(glval<int>) = CopyValue : r1603_3 -# 1603| r1603_5(int &) = CopyValue : r1603_4 -# 1603| m1603_6(int &) = Store[rr] : &:r1603_1, r1603_5 -# 1604| r1604_1(glval<int>) = VariableAddress[w] : -# 1604| r1604_2(glval<int &>) = 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<StructuredBindingTupleRefGet>) = VariableAddress[t] : +# 1629| m1629_2(StructuredBindingTupleRefGet) = Uninitialized[t] : &:r1629_1 +# 1629| r1629_3(glval<unknown>) = 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<StructuredBindingTupleRefGet>) = VariableAddress[(unnamed local variable)] : +# 1632| r1632_2(glval<StructuredBindingTupleRefGet>) = 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<int &>) = VariableAddress[i] : +# 1632| r1632_6(glval<StructuredBindingTupleRefGet>) = VariableAddress[(unnamed local variable)] : +# 1632| r1632_7(glval<unknown>) = 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<int>) = CopyValue : r1632_8 +# 1632| r1632_15(int &) = CopyValue : r1632_14 +# 1632| m1632_16(int &) = Store[i] : &:r1632_5, r1632_15 +# 1632| r1632_17(glval<double &>) = VariableAddress[d] : +# 1632| r1632_18(glval<StructuredBindingTupleRefGet>) = VariableAddress[(unnamed local variable)] : +# 1632| r1632_19(glval<unknown>) = 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<double>) = CopyValue : r1632_20 +# 1632| r1632_27(double &) = CopyValue : r1632_26 +# 1632| m1632_28(double &) = Store[d] : &:r1632_17, r1632_27 +# 1632| r1632_29(glval<int &>) = VariableAddress[r] : +# 1632| r1632_30(glval<StructuredBindingTupleRefGet>) = VariableAddress[(unnamed local variable)] : +# 1632| r1632_31(glval<unknown>) = 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<int>) = 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<double &>) = VariableAddress[d] : +# 1633| r1633_3(double &) = Load[d] : &:r1633_2, m1632_28 +# 1633| r1633_4(glval<double>) = 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<double &>) = VariableAddress[rd] : +# 1634| r1634_2(glval<double &>) = VariableAddress[d] : +# 1634| r1634_3(double &) = Load[d] : &:r1634_2, m1632_28 +# 1634| r1634_4(glval<double>) = CopyValue : r1634_3 +# 1634| r1634_5(double &) = CopyValue : r1634_4 +# 1634| m1634_6(double &) = Store[rd] : &:r1634_1, r1634_5 +# 1635| r1635_1(glval<int>) = VariableAddress[v] : +# 1635| r1635_2(glval<int &>) = 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<int &>) = VariableAddress[r] : +# 1636| r1636_3(int &) = Load[r] : &:r1636_2, m1632_40 +# 1636| r1636_4(glval<int>) = 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<int &>) = VariableAddress[rr] : +# 1637| r1637_2(glval<int &>) = VariableAddress[r] : +# 1637| r1637_3(int &) = Load[r] : &:r1637_2, m1632_40 +# 1637| r1637_4(glval<int>) = CopyValue : r1637_3 +# 1637| r1637_5(int &) = CopyValue : r1637_4 +# 1637| m1637_6(int &) = Store[rr] : &:r1637_1, r1637_5 +# 1638| r1638_1(glval<int>) = VariableAddress[w] : +# 1638| r1638_2(glval<int &>) = 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<StructuredBindingTupleRefGet>) = VariableAddress[unnamed_local_variable] : +# 1642| r1642_2(glval<StructuredBindingTupleRefGet>) = 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<int &>) = VariableAddress[i] : +# 1643| r1643_2(glval<StructuredBindingTupleRefGet>) = VariableAddress[unnamed_local_variable] : +# 1643| r1643_3(glval<unknown>) = 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<int>) = CopyValue : r1643_4 +# 1643| r1643_11(int &) = CopyValue : r1643_10 +# 1643| m1643_12(int &) = Store[i] : &:r1643_1, r1643_11 +# 1644| r1644_1(glval<double &>) = VariableAddress[d] : +# 1644| r1644_2(glval<StructuredBindingTupleRefGet>) = VariableAddress[unnamed_local_variable] : +# 1644| r1644_3(glval<unknown>) = 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<double>) = CopyValue : r1644_4 +# 1644| r1644_11(double &) = CopyValue : r1644_10 +# 1644| m1644_12(double &) = Store[d] : &:r1644_1, r1644_11 +# 1645| r1645_1(glval<int &>) = VariableAddress[r] : +# 1645| r1645_2(glval<StructuredBindingTupleRefGet>) = VariableAddress[unnamed_local_variable] : +# 1645| r1645_3(glval<unknown>) = 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<int>) = 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<double &>) = VariableAddress[d] : +# 1646| r1646_3(double &) = Load[d] : &:r1646_2, m1644_12 +# 1646| r1646_4(glval<double>) = 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<double &>) = VariableAddress[rd] : +# 1647| r1647_2(glval<double &>) = VariableAddress[d] : +# 1647| r1647_3(double &) = Load[d] : &:r1647_2, m1644_12 +# 1647| r1647_4(glval<double>) = CopyValue : r1647_3 +# 1647| r1647_5(double &) = CopyValue : r1647_4 +# 1647| m1647_6(double &) = Store[rd] : &:r1647_1, r1647_5 +# 1648| r1648_1(glval<int>) = VariableAddress[v] : +# 1648| r1648_2(glval<int &>) = 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<int &>) = VariableAddress[r] : +# 1649| r1649_3(int &) = Load[r] : &:r1649_2, m1645_12 +# 1649| r1649_4(glval<int>) = 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<int &>) = VariableAddress[rr] : +# 1650| r1650_2(glval<int &>) = VariableAddress[r] : +# 1650| r1650_3(int &) = Load[r] : &:r1650_2, m1645_12 +# 1650| r1650_4(glval<int>) = CopyValue : r1650_3 +# 1650| r1650_5(int &) = CopyValue : r1650_4 +# 1650| m1650_6(int &) = Store[rr] : &:r1650_1, r1650_5 +# 1651| r1651_1(glval<int>) = VariableAddress[w] : +# 1651| r1651_2(glval<int &>) = 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<unknown>) = VariableAddress[#this] : -# 1608| m1608_6(glval<StructuredBindingTupleNoRefGet>) = InitializeParameter[#this] : &:r1608_5 -# 1608| r1608_7(glval<StructuredBindingTupleNoRefGet>) = 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<unknown>) = VariableAddress[#this] : +# 1655| m1655_6(glval<StructuredBindingTupleNoRefGet>) = InitializeParameter[#this] : &:r1655_5 +# 1655| r1655_7(glval<StructuredBindingTupleNoRefGet>) = 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<int 0, StructuredBindingTupleNoRefGet>::type StructuredBindingTupleNoRefGet::get<int 0>() -# 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<unknown>) = VariableAddress[#this] : -# 1635| m1635_6(glval<StructuredBindingTupleNoRefGet>) = InitializeParameter[#this] : &:r1635_5 -# 1635| r1635_7(glval<StructuredBindingTupleNoRefGet>) = Load[#this] : &:r1635_5, m1635_6 -# 1635| m1635_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1635_7 -# 1636| r1636_1(glval<int>) = VariableAddress[#return] : -# 1636| r1636_2(glval<unknown>) = VariableAddress[#this] : -# 1636| r1636_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1636_2, m1635_6 -# 1636| r1636_4(glval<int>) = 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<int>) = 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<int 0, StructuredBindingTupleNoRefGet>::type StructuredBindingTupleNoRefGet::get<int 0>() +# 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<unknown>) = VariableAddress[#this] : +# 1682| m1682_6(glval<StructuredBindingTupleNoRefGet>) = InitializeParameter[#this] : &:r1682_5 +# 1682| r1682_7(glval<StructuredBindingTupleNoRefGet>) = Load[#this] : &:r1682_5, m1682_6 +# 1682| m1682_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1682_7 +# 1683| r1683_1(glval<int>) = VariableAddress[#return] : +# 1683| r1683_2(glval<unknown>) = VariableAddress[#this] : +# 1683| r1683_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1683_2, m1682_6 +# 1683| r1683_4(glval<int>) = 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<int>) = 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<int 1, StructuredBindingTupleNoRefGet>::type StructuredBindingTupleNoRefGet::get<int 1>() -# 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<unknown>) = VariableAddress[#this] : -# 1639| m1639_6(glval<StructuredBindingTupleNoRefGet>) = InitializeParameter[#this] : &:r1639_5 -# 1639| r1639_7(glval<StructuredBindingTupleNoRefGet>) = Load[#this] : &:r1639_5, m1639_6 -# 1639| m1639_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1639_7 -# 1640| r1640_1(glval<int &>) = VariableAddress[#return] : -# 1640| r1640_2(glval<unknown>) = VariableAddress[#this] : -# 1640| r1640_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1640_2, m1639_6 -# 1640| r1640_4(glval<int &>) = FieldAddress[r] : r1640_3 -# 1640| r1640_5(int &) = Load[?] : &:r1640_4, ~m1639_8 -# 1640| r1640_6(glval<int>) = 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<int &>) = 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<int 1, StructuredBindingTupleNoRefGet>::type StructuredBindingTupleNoRefGet::get<int 1>() +# 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<unknown>) = VariableAddress[#this] : +# 1686| m1686_6(glval<StructuredBindingTupleNoRefGet>) = InitializeParameter[#this] : &:r1686_5 +# 1686| r1686_7(glval<StructuredBindingTupleNoRefGet>) = Load[#this] : &:r1686_5, m1686_6 +# 1686| m1686_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1686_7 +# 1687| r1687_1(glval<int &>) = VariableAddress[#return] : +# 1687| r1687_2(glval<unknown>) = VariableAddress[#this] : +# 1687| r1687_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1687_2, m1686_6 +# 1687| r1687_4(glval<int &>) = FieldAddress[r] : r1687_3 +# 1687| r1687_5(int &) = Load[?] : &:r1687_4, ~m1686_8 +# 1687| r1687_6(glval<int>) = 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<int &>) = 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<int 2, StructuredBindingTupleNoRefGet>::type StructuredBindingTupleNoRefGet::get<int 2>() -# 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<unknown>) = VariableAddress[#this] : -# 1643| m1643_6(glval<StructuredBindingTupleNoRefGet>) = InitializeParameter[#this] : &:r1643_5 -# 1643| r1643_7(glval<StructuredBindingTupleNoRefGet>) = Load[#this] : &:r1643_5, m1643_6 -# 1643| m1643_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1643_7 -# 1644| r1644_1(glval<int &&>) = VariableAddress[#return] : -# 1644| r1644_2(glval<int>) = 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<int &&>) = 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<int 2, StructuredBindingTupleNoRefGet>::type StructuredBindingTupleNoRefGet::get<int 2>() +# 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<unknown>) = VariableAddress[#this] : +# 1690| m1690_6(glval<StructuredBindingTupleNoRefGet>) = InitializeParameter[#this] : &:r1690_5 +# 1690| r1690_7(glval<StructuredBindingTupleNoRefGet>) = Load[#this] : &:r1690_5, m1690_6 +# 1690| m1690_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1690_7 +# 1691| r1691_1(glval<int &&>) = VariableAddress[#return] : +# 1691| r1691_2(glval<int>) = 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<int &&>) = 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<StructuredBindingTupleNoRefGet>) = VariableAddress[t] : -# 1648| m1648_2(StructuredBindingTupleNoRefGet) = Uninitialized[t] : &:r1648_1 -# 1648| r1648_3(glval<unknown>) = 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<StructuredBindingTupleNoRefGet &>) = VariableAddress[(unnamed local variable)] : -# 1651| r1651_2(glval<StructuredBindingTupleNoRefGet>) = 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<int &&>) = VariableAddress[i] : -# 1651| r1651_6(glval<int>) = VariableAddress[#temp1651:16] : -# 1651| r1651_7(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[(unnamed local variable)] : -# 1651| r1651_8(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_7, m1651_4 -# 1651| r1651_9(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1651_8 -# 1651| r1651_10(glval<unknown>) = 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<int &>) = VariableAddress[r] : -# 1651| r1651_21(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[(unnamed local variable)] : -# 1651| r1651_22(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_21, m1651_4 -# 1651| r1651_23(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1651_22 -# 1651| r1651_24(glval<unknown>) = 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<int>) = CopyValue : r1651_25 -# 1651| r1651_32(int &) = CopyValue : r1651_31 -# 1651| m1651_33(int &) = Store[r] : &:r1651_20, r1651_32 -# 1651| r1651_34(glval<int &&>) = VariableAddress[rv] : -# 1651| r1651_35(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[(unnamed local variable)] : -# 1651| r1651_36(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_35, m1651_4 -# 1651| r1651_37(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1651_36 -# 1651| r1651_38(glval<unknown>) = 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<int>) = 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<int &&>) = VariableAddress[i] : -# 1652| r1652_3(int &&) = Load[i] : &:r1652_2, m1651_19 -# 1652| r1652_4(glval<int>) = CopyValue : r1652_3 -# 1652| m1652_5(int) = Store[?] : &:r1652_4, r1652_1 -# 1653| r1653_1(glval<int &>) = VariableAddress[ri] : -# 1653| r1653_2(glval<int &&>) = VariableAddress[i] : -# 1653| r1653_3(int &&) = Load[i] : &:r1653_2, m1651_19 -# 1653| r1653_4(glval<int>) = CopyValue : r1653_3 -# 1653| r1653_5(int &) = CopyValue : r1653_4 -# 1653| m1653_6(int &) = Store[ri] : &:r1653_1, r1653_5 -# 1654| r1654_1(glval<int>) = VariableAddress[v] : -# 1654| r1654_2(glval<int &&>) = 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<int &>) = VariableAddress[r] : -# 1655| r1655_3(int &) = Load[r] : &:r1655_2, m1651_33 -# 1655| r1655_4(glval<int>) = 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<int &>) = VariableAddress[rr] : -# 1656| r1656_2(glval<int &>) = VariableAddress[r] : -# 1656| r1656_3(int &) = Load[r] : &:r1656_2, m1651_33 -# 1656| r1656_4(glval<int>) = CopyValue : r1656_3 -# 1656| r1656_5(int &) = CopyValue : r1656_4 -# 1656| m1656_6(int &) = Store[rr] : &:r1656_1, r1656_5 -# 1657| r1657_1(glval<int>) = VariableAddress[w] : -# 1657| r1657_2(glval<int &>) = 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<StructuredBindingTupleNoRefGet &>) = VariableAddress[unnamed_local_variable] : -# 1661| r1661_2(glval<StructuredBindingTupleNoRefGet>) = 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<int &&>) = VariableAddress[i] : -# 1662| r1662_2(glval<int>) = VariableAddress[#temp1662:20] : -# 1662| r1662_3(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[unnamed_local_variable] : -# 1662| r1662_4(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1662_3, m1661_4 -# 1662| r1662_5(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1662_4 -# 1662| r1662_6(glval<unknown>) = 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<int &>) = VariableAddress[r] : -# 1663| r1663_2(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[unnamed_local_variable] : -# 1663| r1663_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1663_2, m1661_4 -# 1663| r1663_4(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1663_3 -# 1663| r1663_5(glval<unknown>) = 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<int>) = CopyValue : r1663_6 -# 1663| r1663_13(int &) = CopyValue : r1663_12 -# 1663| m1663_14(int &) = Store[r] : &:r1663_1, r1663_13 -# 1664| r1664_1(glval<int &&>) = VariableAddress[rv] : -# 1664| r1664_2(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[unnamed_local_variable] : -# 1664| r1664_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1664_2, m1661_4 -# 1664| r1664_4(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1664_3 -# 1664| r1664_5(glval<unknown>) = 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<int>) = 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<int &&>) = VariableAddress[i] : -# 1665| r1665_3(int &&) = Load[i] : &:r1665_2, m1662_15 -# 1665| r1665_4(glval<int>) = CopyValue : r1665_3 -# 1665| m1665_5(int) = Store[?] : &:r1665_4, r1665_1 -# 1666| r1666_1(glval<int &>) = VariableAddress[ri] : -# 1666| r1666_2(glval<int &&>) = VariableAddress[i] : -# 1666| r1666_3(int &&) = Load[i] : &:r1666_2, m1662_15 -# 1666| r1666_4(glval<int>) = CopyValue : r1666_3 -# 1666| r1666_5(int &) = CopyValue : r1666_4 -# 1666| m1666_6(int &) = Store[ri] : &:r1666_1, r1666_5 -# 1667| r1667_1(glval<int>) = VariableAddress[v] : -# 1667| r1667_2(glval<int &&>) = 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<int &>) = VariableAddress[r] : -# 1668| r1668_3(int &) = Load[r] : &:r1668_2, m1663_14 -# 1668| r1668_4(glval<int>) = 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<int &>) = VariableAddress[rr] : -# 1669| r1669_2(glval<int &>) = VariableAddress[r] : -# 1669| r1669_3(int &) = Load[r] : &:r1669_2, m1663_14 -# 1669| r1669_4(glval<int>) = CopyValue : r1669_3 -# 1669| r1669_5(int &) = CopyValue : r1669_4 -# 1669| m1669_6(int &) = Store[rr] : &:r1669_1, r1669_5 -# 1670| r1670_1(glval<int>) = VariableAddress[w] : -# 1670| r1670_2(glval<int &>) = 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<StructuredBindingTupleNoRefGet>) = VariableAddress[t] : +# 1695| m1695_2(StructuredBindingTupleNoRefGet) = Uninitialized[t] : &:r1695_1 +# 1695| r1695_3(glval<unknown>) = 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<StructuredBindingTupleNoRefGet &>) = VariableAddress[(unnamed local variable)] : +# 1698| r1698_2(glval<StructuredBindingTupleNoRefGet>) = 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<int &&>) = VariableAddress[i] : +# 1698| r1698_6(glval<int>) = VariableAddress[#temp1698:16] : +# 1698| r1698_7(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[(unnamed local variable)] : +# 1698| r1698_8(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1698_7, m1698_4 +# 1698| r1698_9(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1698_8 +# 1698| r1698_10(glval<unknown>) = 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<int &>) = VariableAddress[r] : +# 1698| r1698_21(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[(unnamed local variable)] : +# 1698| r1698_22(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1698_21, m1698_4 +# 1698| r1698_23(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1698_22 +# 1698| r1698_24(glval<unknown>) = 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<int>) = CopyValue : r1698_25 +# 1698| r1698_32(int &) = CopyValue : r1698_31 +# 1698| m1698_33(int &) = Store[r] : &:r1698_20, r1698_32 +# 1698| r1698_34(glval<int &&>) = VariableAddress[rv] : +# 1698| r1698_35(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[(unnamed local variable)] : +# 1698| r1698_36(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1698_35, m1698_4 +# 1698| r1698_37(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1698_36 +# 1698| r1698_38(glval<unknown>) = 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<int>) = 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<int &&>) = VariableAddress[i] : +# 1699| r1699_3(int &&) = Load[i] : &:r1699_2, m1698_19 +# 1699| r1699_4(glval<int>) = CopyValue : r1699_3 +# 1699| m1699_5(int) = Store[?] : &:r1699_4, r1699_1 +# 1700| r1700_1(glval<int &>) = VariableAddress[ri] : +# 1700| r1700_2(glval<int &&>) = VariableAddress[i] : +# 1700| r1700_3(int &&) = Load[i] : &:r1700_2, m1698_19 +# 1700| r1700_4(glval<int>) = CopyValue : r1700_3 +# 1700| r1700_5(int &) = CopyValue : r1700_4 +# 1700| m1700_6(int &) = Store[ri] : &:r1700_1, r1700_5 +# 1701| r1701_1(glval<int>) = VariableAddress[v] : +# 1701| r1701_2(glval<int &&>) = 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<int &>) = VariableAddress[r] : +# 1702| r1702_3(int &) = Load[r] : &:r1702_2, m1698_33 +# 1702| r1702_4(glval<int>) = 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<int &>) = VariableAddress[rr] : +# 1703| r1703_2(glval<int &>) = VariableAddress[r] : +# 1703| r1703_3(int &) = Load[r] : &:r1703_2, m1698_33 +# 1703| r1703_4(glval<int>) = CopyValue : r1703_3 +# 1703| r1703_5(int &) = CopyValue : r1703_4 +# 1703| m1703_6(int &) = Store[rr] : &:r1703_1, r1703_5 +# 1704| r1704_1(glval<int>) = VariableAddress[w] : +# 1704| r1704_2(glval<int &>) = 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<StructuredBindingTupleNoRefGet &>) = VariableAddress[unnamed_local_variable] : +# 1708| r1708_2(glval<StructuredBindingTupleNoRefGet>) = 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<int &&>) = VariableAddress[i] : +# 1709| r1709_2(glval<int>) = VariableAddress[#temp1709:20] : +# 1709| r1709_3(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[unnamed_local_variable] : +# 1709| r1709_4(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1709_3, m1708_4 +# 1709| r1709_5(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1709_4 +# 1709| r1709_6(glval<unknown>) = 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<int &>) = VariableAddress[r] : +# 1710| r1710_2(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[unnamed_local_variable] : +# 1710| r1710_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1710_2, m1708_4 +# 1710| r1710_4(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1710_3 +# 1710| r1710_5(glval<unknown>) = 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<int>) = CopyValue : r1710_6 +# 1710| r1710_13(int &) = CopyValue : r1710_12 +# 1710| m1710_14(int &) = Store[r] : &:r1710_1, r1710_13 +# 1711| r1711_1(glval<int &&>) = VariableAddress[rv] : +# 1711| r1711_2(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[unnamed_local_variable] : +# 1711| r1711_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1711_2, m1708_4 +# 1711| r1711_4(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1711_3 +# 1711| r1711_5(glval<unknown>) = 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<int>) = 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<int &&>) = VariableAddress[i] : +# 1712| r1712_3(int &&) = Load[i] : &:r1712_2, m1709_15 +# 1712| r1712_4(glval<int>) = CopyValue : r1712_3 +# 1712| m1712_5(int) = Store[?] : &:r1712_4, r1712_1 +# 1713| r1713_1(glval<int &>) = VariableAddress[ri] : +# 1713| r1713_2(glval<int &&>) = VariableAddress[i] : +# 1713| r1713_3(int &&) = Load[i] : &:r1713_2, m1709_15 +# 1713| r1713_4(glval<int>) = CopyValue : r1713_3 +# 1713| r1713_5(int &) = CopyValue : r1713_4 +# 1713| m1713_6(int &) = Store[ri] : &:r1713_1, r1713_5 +# 1714| r1714_1(glval<int>) = VariableAddress[v] : +# 1714| r1714_2(glval<int &&>) = 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<int &>) = VariableAddress[r] : +# 1715| r1715_3(int &) = Load[r] : &:r1715_2, m1710_14 +# 1715| r1715_4(glval<int>) = 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<int &>) = VariableAddress[rr] : +# 1716| r1716_2(glval<int &>) = VariableAddress[r] : +# 1716| r1716_3(int &) = Load[r] : &:r1716_2, m1710_14 +# 1716| r1716_4(glval<int>) = CopyValue : r1716_3 +# 1716| r1716_5(int &) = CopyValue : r1716_4 +# 1716| m1716_6(int &) = Store[rr] : &:r1716_1, r1716_5 +# 1717| r1717_1(glval<int>) = VariableAddress[w] : +# 1717| r1717_2(glval<int &>) = 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<int[2]>) = VariableAddress[xs] : -# 1675| m1675_2(int[2]) = Uninitialized[xs] : &:r1675_1 -# 1675| r1675_3(int) = Constant[0] : -# 1675| r1675_4(glval<int>) = 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<int>) = 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<int[2]>) = VariableAddress[(unnamed local variable)] : -# 1676| r1676_2(glval<int[2]>) = 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<int &>) = 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<int[2]>) = VariableAddress[xs] : +# 1722| m1722_2(int[2]) = Uninitialized[xs] : &:r1722_1 +# 1722| r1722_3(int) = Constant[0] : +# 1722| r1722_4(glval<int>) = 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<int>) = 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<int[2]>) = VariableAddress[(unnamed local variable)] : +# 1723| r1723_2(glval<int[2]>) = 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<int &>) = VariableAddress[x0] : #-----| r0_1(glval<int[2]>) = VariableAddress[(unnamed local variable)] : #-----| r0_2(int *) = Convert : r0_1 #-----| r0_3(unsigned long) = Constant[0] : #-----| r0_4(glval<int>) = PointerAdd[4] : r0_2, r0_3 -#-----| m0_5(int &) = Store[x0] : &:r1676_5, r0_4 -# 1676| r1676_6(glval<int &>) = VariableAddress[x1] : +#-----| m0_5(int &) = Store[x0] : &:r1723_5, r0_4 +# 1723| r1723_6(glval<int &>) = VariableAddress[x1] : #-----| r0_6(glval<int[2]>) = VariableAddress[(unnamed local variable)] : #-----| r0_7(int *) = Convert : r0_6 #-----| r0_8(unsigned long) = Constant[1] : #-----| r0_9(glval<int>) = 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<unknown>) = VariableAddress[#this] : -# 1682| m1682_6(glval<CapturedLambdaMyObj>) = InitializeParameter[#this] : &:r1682_5 -# 1682| r1682_7(glval<CapturedLambdaMyObj>) = 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<unknown>) = VariableAddress[#this] : +# 1729| m1729_6(glval<CapturedLambdaMyObj>) = InitializeParameter[#this] : &:r1729_5 +# 1729| r1729_7(glval<CapturedLambdaMyObj>) = 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<int>) = VariableAddress[x] : -# 1685| m1685_6(int) = InitializeParameter[x] : &:r1685_5 -# 1685| r1685_7(glval<int &>) = 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<int &&>) = 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<CapturedLambdaMyObj &>) = VariableAddress[obj1] : -# 1687| r1687_2(glval<CapturedLambdaMyObj>) = VariableAddress[#temp1687:24] : -# 1687| m1687_3(CapturedLambdaMyObj) = Uninitialized[#temp1687:24] : &:r1687_2 -# 1687| r1687_4(glval<unknown>) = 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<CapturedLambdaMyObj>) = Convert : r1687_2 -# 1687| r1687_11(CapturedLambdaMyObj &) = CopyValue : r1687_10 -# 1687| m1687_12(CapturedLambdaMyObj &) = Store[obj1] : &:r1687_1, r1687_11 -# 1688| r1688_1(glval<CapturedLambdaMyObj>) = VariableAddress[obj2] : -# 1688| m1688_2(CapturedLambdaMyObj) = Uninitialized[obj2] : &:r1688_1 -# 1688| r1688_3(glval<unknown>) = 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<decltype([...](...){...})>) = VariableAddress[lambda_outer] : -# 1690| r1690_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1690:24] : -# 1690| m1690_3(decltype([...](...){...})) = Uninitialized[#temp1690:24] : &:r1690_2 -# 1690| r1690_4(glval<CapturedLambdaMyObj>) = FieldAddress[obj1] : r1690_2 -# 1690| r1690_5(glval<CapturedLambdaMyObj &>) = 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<CapturedLambdaMyObj>) = FieldAddress[obj2] : r1690_2 -# 1690| r1690_8(glval<CapturedLambdaMyObj>) = 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<int>) = FieldAddress[x] : r1690_2 -# 1690| r1690_13(glval<int>) = 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<int>) = FieldAddress[y] : r1690_2 -# 1690| r1690_18(glval<int &>) = 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<int>) = FieldAddress[z] : r1690_2 -# 1690| r1690_21(glval<int &&>) = 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<int>) = VariableAddress[x] : +# 1732| m1732_6(int) = InitializeParameter[x] : &:r1732_5 +# 1732| r1732_7(glval<int &>) = 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<int &&>) = 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<CapturedLambdaMyObj &>) = VariableAddress[obj1] : +# 1734| r1734_2(glval<CapturedLambdaMyObj>) = VariableAddress[#temp1734:24] : +# 1734| m1734_3(CapturedLambdaMyObj) = Uninitialized[#temp1734:24] : &:r1734_2 +# 1734| r1734_4(glval<unknown>) = 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<CapturedLambdaMyObj>) = Convert : r1734_2 +# 1734| r1734_11(CapturedLambdaMyObj &) = CopyValue : r1734_10 +# 1734| m1734_12(CapturedLambdaMyObj &) = Store[obj1] : &:r1734_1, r1734_11 +# 1735| r1735_1(glval<CapturedLambdaMyObj>) = VariableAddress[obj2] : +# 1735| m1735_2(CapturedLambdaMyObj) = Uninitialized[obj2] : &:r1735_1 +# 1735| r1735_3(glval<unknown>) = 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<decltype([...](...){...})>) = VariableAddress[lambda_outer] : +# 1737| r1737_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1737:24] : +# 1737| m1737_3(decltype([...](...){...})) = Uninitialized[#temp1737:24] : &:r1737_2 +# 1737| r1737_4(glval<CapturedLambdaMyObj>) = FieldAddress[obj1] : r1737_2 +# 1737| r1737_5(glval<CapturedLambdaMyObj &>) = 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<CapturedLambdaMyObj>) = FieldAddress[obj2] : r1737_2 +# 1737| r1737_8(glval<CapturedLambdaMyObj>) = 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<int>) = FieldAddress[x] : r1737_2 +# 1737| r1737_13(glval<int>) = 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<int>) = FieldAddress[y] : r1737_2 +# 1737| r1737_18(glval<int &>) = 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<int>) = FieldAddress[z] : r1737_2 +# 1737| r1737_21(glval<int &&>) = 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<unknown>) = VariableAddress[#this] : -# 1690| m1690_6(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1690_5 -# 1690| r1690_7(glval<decltype([...](...){...})>) = Load[#this] : &:r1690_5, m1690_6 -# 1690| m1690_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1690_7 -# 1691| r1691_1(glval<decltype([...](...){...})>) = VariableAddress[lambda_inner] : -# 1691| r1691_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1691:28] : -# 1691| m1691_3(decltype([...](...){...})) = Uninitialized[#temp1691:28] : &:r1691_2 -# 1691| r1691_4(glval<CapturedLambdaMyObj>) = FieldAddress[obj1] : r1691_2 -# 1691| r1691_5(glval<unknown>) = VariableAddress[#this] : -# 1691| r1691_6(lambda [] type at line 1691, col. 29 *) = Load[#this] : &:r1691_5, m1690_6 -# 1691| r1691_7(glval<CapturedLambdaMyObj>) = 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<CapturedLambdaMyObj>) = FieldAddress[obj2] : r1691_2 -# 1691| r1691_12(glval<unknown>) = VariableAddress[#this] : -# 1691| r1691_13(lambda [] type at line 1691, col. 29 *) = Load[#this] : &:r1691_12, m1690_6 -# 1691| r1691_14(glval<CapturedLambdaMyObj>) = 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<int>) = FieldAddress[x] : r1691_2 -# 1691| r1691_19(glval<unknown>) = VariableAddress[#this] : -# 1691| r1691_20(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_19, m1690_6 -# 1691| r1691_21(glval<int>) = 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<int>) = FieldAddress[y] : r1691_2 -# 1691| r1691_26(glval<unknown>) = VariableAddress[#this] : -# 1691| r1691_27(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_26, m1690_6 -# 1691| r1691_28(glval<int>) = 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<int>) = FieldAddress[z] : r1691_2 -# 1691| r1691_33(glval<unknown>) = VariableAddress[#this] : -# 1691| r1691_34(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_33, m1690_6 -# 1691| r1691_35(glval<int>) = 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<unknown>) = VariableAddress[#this] : +# 1737| m1737_6(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1737_5 +# 1737| r1737_7(glval<decltype([...](...){...})>) = Load[#this] : &:r1737_5, m1737_6 +# 1737| m1737_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1737_7 +# 1738| r1738_1(glval<decltype([...](...){...})>) = VariableAddress[lambda_inner] : +# 1738| r1738_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1738:28] : +# 1738| m1738_3(decltype([...](...){...})) = Uninitialized[#temp1738:28] : &:r1738_2 +# 1738| r1738_4(glval<CapturedLambdaMyObj>) = FieldAddress[obj1] : r1738_2 +# 1738| r1738_5(glval<unknown>) = VariableAddress[#this] : +# 1738| r1738_6(lambda [] type at line 1738, col. 29 *) = Load[#this] : &:r1738_5, m1737_6 +# 1738| r1738_7(glval<CapturedLambdaMyObj>) = 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<CapturedLambdaMyObj>) = FieldAddress[obj2] : r1738_2 +# 1738| r1738_12(glval<unknown>) = VariableAddress[#this] : +# 1738| r1738_13(lambda [] type at line 1738, col. 29 *) = Load[#this] : &:r1738_12, m1737_6 +# 1738| r1738_14(glval<CapturedLambdaMyObj>) = 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<int>) = FieldAddress[x] : r1738_2 +# 1738| r1738_19(glval<unknown>) = VariableAddress[#this] : +# 1738| r1738_20(lambda [] type at line 1737, col. 25 *) = Load[#this] : &:r1738_19, m1737_6 +# 1738| r1738_21(glval<int>) = 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<int>) = FieldAddress[y] : r1738_2 +# 1738| r1738_26(glval<unknown>) = VariableAddress[#this] : +# 1738| r1738_27(lambda [] type at line 1737, col. 25 *) = Load[#this] : &:r1738_26, m1737_6 +# 1738| r1738_28(glval<int>) = 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<int>) = FieldAddress[z] : r1738_2 +# 1738| r1738_33(glval<unknown>) = VariableAddress[#this] : +# 1738| r1738_34(lambda [] type at line 1737, col. 25 *) = Load[#this] : &:r1738_33, m1737_6 +# 1738| r1738_35(glval<int>) = 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<unknown>) = VariableAddress[#this] : -# 1691| m1691_6(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1691_5 -# 1691| r1691_7(glval<decltype([...](...){...})>) = 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<int>) = 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<int>) = VariableAddress[#return] : -# 1698| r1698_2(glval<int>) = 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<int>) = 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<unknown>) = VariableAddress[#this] : -# 1703| m1703_6(glval<TrivialLambdaClass>) = InitializeParameter[#this] : &:r1703_5 -# 1703| r1703_7(glval<TrivialLambdaClass>) = Load[#this] : &:r1703_5, m1703_6 -# 1703| m1703_8(TrivialLambdaClass) = InitializeIndirection[#this] : &:r1703_7 -# 1704| r1704_1(glval<decltype([...](...){...})>) = VariableAddress[l_m_outer] : -# 1704| r1704_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1704:25] : -# 1704| m1704_3(decltype([...](...){...})) = Uninitialized[#temp1704:25] : &:r1704_2 -# 1704| r1704_4(glval<TrivialLambdaClass>) = FieldAddress[(captured this)] : r1704_2 -# 1704| r1704_5(glval<unknown>) = 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<unknown>) = VariableAddress[#this] : -# 1704| m1704_6(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1704_5 -# 1704| r1704_7(glval<decltype([...](...){...})>) = Load[#this] : &:r1704_5, m1704_6 -# 1704| m1704_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1704_7 -# 1705| r1705_1(glval<unknown>) = VariableAddress[#this] : -# 1705| r1705_2(lambda [] type at line 1704, col. 26 *) = Load[#this] : &:r1705_1, m1704_6 -# 1705| r1705_3(glval<TrivialLambdaClass>) = FieldAddress[(captured this)] : r1705_2 -# 1705| r1705_4(TrivialLambdaClass *) = CopyValue : r1705_3 -# 1705| r1705_5(glval<unknown>) = 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<decltype([...](...){...})>) = VariableAddress[l_m_inner] : -# 1707| r1707_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1707:29] : -# 1707| m1707_3(decltype([...](...){...})) = Uninitialized[#temp1707:29] : &:r1707_2 -# 1707| r1707_4(glval<TrivialLambdaClass>) = FieldAddress[(captured this)] : r1707_2 -# 1707| r1707_5(glval<unknown>) = VariableAddress[#this] : -# 1707| r1707_6(lambda [] type at line 1707, col. 30 *) = Load[#this] : &:r1707_5, m1704_6 -# 1707| r1707_7(glval<TrivialLambdaClass>) = 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<unknown>) = VariableAddress[#this] : -# 1707| m1707_6(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1707_5 -# 1707| r1707_7(glval<decltype([...](...){...})>) = Load[#this] : &:r1707_5, m1707_6 -# 1707| m1707_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1707_7 -# 1708| r1708_1(glval<unknown>) = VariableAddress[#this] : -# 1708| r1708_2(lambda [] type at line 1707, col. 30 *) = Load[#this] : &:r1708_1, m1707_6 -# 1708| r1708_3(glval<TrivialLambdaClass>) = FieldAddress[(captured this)] : r1708_2 -# 1708| r1708_4(TrivialLambdaClass *) = CopyValue : r1708_3 -# 1708| r1708_5(glval<unknown>) = 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<TrivialLambdaClass>) = VariableAddress[p1] : -# 1714| m1714_6(TrivialLambdaClass) = InitializeParameter[p1] : &:r1714_5 -# 1714| r1714_7(glval<TrivialLambdaClass &>) = 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<TrivialLambdaClass &&>) = 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<TrivialLambdaClass>) = VariableAddress[l1] : -# 1715| m1715_2(TrivialLambdaClass) = Uninitialized[l1] : &:r1715_1 -# 1716| r1716_1(glval<TrivialLambdaClass &>) = VariableAddress[l2] : -# 1716| r1716_2(glval<TrivialLambdaClass>) = VariableAddress[#temp1716:36] : -# 1716| r1716_3(TrivialLambdaClass) = Constant[0] : -# 1716| m1716_4(TrivialLambdaClass) = Store[#temp1716:36] : &:r1716_2, r1716_3 -# 1716| r1716_5(glval<TrivialLambdaClass>) = Convert : r1716_2 -# 1716| r1716_6(TrivialLambdaClass &) = CopyValue : r1716_5 -# 1716| m1716_7(TrivialLambdaClass &) = Store[l2] : &:r1716_1, r1716_6 -# 1718| r1718_1(glval<decltype([...](...){...})>) = VariableAddress[l_outer1] : -# 1718| r1718_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1718:20] : -# 1718| m1718_3(decltype([...](...){...})) = Uninitialized[#temp1718:20] : &:r1718_2 -# 1718| r1718_4(glval<TrivialLambdaClass>) = FieldAddress[p1] : r1718_2 -# 1718| r1718_5(glval<TrivialLambdaClass>) = 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<TrivialLambdaClass>) = FieldAddress[p2] : r1718_2 -# 1718| r1718_10(glval<TrivialLambdaClass &>) = 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<TrivialLambdaClass>) = FieldAddress[p3] : r1718_2 -# 1718| r1718_13(glval<TrivialLambdaClass &&>) = 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<TrivialLambdaClass>) = FieldAddress[l1] : r1718_2 -# 1718| r1718_16(glval<TrivialLambdaClass>) = 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<TrivialLambdaClass>) = FieldAddress[l2] : r1718_2 -# 1718| r1718_21(glval<TrivialLambdaClass &>) = 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<unknown>) = VariableAddress[#this] : -# 1718| m1718_6(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1718_5 -# 1718| r1718_7(glval<decltype([...](...){...})>) = Load[#this] : &:r1718_5, m1718_6 -# 1718| m1718_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1718_7 -# 1719| r1719_1(glval<decltype([...](...){...})>) = VariableAddress[l_inner1] : -# 1719| r1719_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1719:24] : -# 1719| m1719_3(decltype([...](...){...})) = Uninitialized[#temp1719:24] : &:r1719_2 -# 1719| r1719_4(glval<TrivialLambdaClass>) = FieldAddress[p1] : r1719_2 -# 1719| r1719_5(glval<unknown>) = VariableAddress[#this] : -# 1719| r1719_6(lambda [] type at line 1719, col. 25 *) = Load[#this] : &:r1719_5, m1718_6 -# 1719| r1719_7(glval<TrivialLambdaClass>) = 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<unknown>) = VariableAddress[#this] : -# 1719| m1719_6(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1719_5 -# 1719| r1719_7(glval<decltype([...](...){...})>) = 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<unknown>) = VariableAddress[#this] : -# 1726| m1726_6(glval<CopyConstructorWithImplicitArgumentClass>) = InitializeParameter[#this] : &:r1726_5 -# 1726| r1726_7(glval<CopyConstructorWithImplicitArgumentClass>) = 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<unknown>) = VariableAddress[#this] : -# 1727| m1727_6(glval<CopyConstructorWithImplicitArgumentClass>) = InitializeParameter[#this] : &:r1727_5 -# 1727| r1727_7(glval<CopyConstructorWithImplicitArgumentClass>) = Load[#this] : &:r1727_5, m1727_6 -# 1727| m1727_8(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1727_7 -# 1727| r1727_9(glval<CopyConstructorWithImplicitArgumentClass &>) = 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<CopyConstructorWithImplicitArgumentClass &>) = VariableAddress[c] : -# 1728| r1728_2(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1728_1, m1727_10 -# 1728| r1728_3(glval<CopyConstructorWithImplicitArgumentClass>) = CopyValue : r1728_2 -# 1728| r1728_4(glval<int>) = FieldAddress[x] : r1728_3 -# 1728| r1728_5(int) = Load[?] : &:r1728_4, ~m1727_12 -# 1728| r1728_6(glval<unknown>) = VariableAddress[#this] : -# 1728| r1728_7(CopyConstructorWithImplicitArgumentClass *) = Load[#this] : &:r1728_6, m1727_6 -# 1728| r1728_8(glval<int>) = 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<unknown>) = VariableAddress[#this] : -# 1735| m1735_6(glval<CopyConstructorWithBitwiseCopyClass>) = InitializeParameter[#this] : &:r1735_5 -# 1735| r1735_7(glval<CopyConstructorWithBitwiseCopyClass>) = 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<unknown>) = VariableAddress[#this] : -# 1738| m1738_6(glval<CopyConstructorTestNonVirtualClass>) = InitializeParameter[#this] : &:r1738_5 -# 1738| r1738_7(glval<CopyConstructorTestNonVirtualClass>) = 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<unknown>) = VariableAddress[#this] : +# 1738| m1738_6(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1738_5 +# 1738| r1738_7(glval<decltype([...](...){...})>) = 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<int>) = 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<int>) = VariableAddress[#return] : +# 1745| r1745_2(glval<int>) = 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<int>) = 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<unknown>) = VariableAddress[#this] : +# 1750| m1750_6(glval<TrivialLambdaClass>) = InitializeParameter[#this] : &:r1750_5 +# 1750| r1750_7(glval<TrivialLambdaClass>) = Load[#this] : &:r1750_5, m1750_6 +# 1750| m1750_8(TrivialLambdaClass) = InitializeIndirection[#this] : &:r1750_7 +# 1751| r1751_1(glval<decltype([...](...){...})>) = VariableAddress[l_m_outer] : +# 1751| r1751_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1751:25] : +# 1751| m1751_3(decltype([...](...){...})) = Uninitialized[#temp1751:25] : &:r1751_2 +# 1751| r1751_4(glval<TrivialLambdaClass>) = FieldAddress[(captured this)] : r1751_2 +# 1751| r1751_5(glval<unknown>) = 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<unknown>) = VariableAddress[#this] : +# 1751| m1751_6(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1751_5 +# 1751| r1751_7(glval<decltype([...](...){...})>) = Load[#this] : &:r1751_5, m1751_6 +# 1751| m1751_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1751_7 +# 1752| r1752_1(glval<unknown>) = VariableAddress[#this] : +# 1752| r1752_2(lambda [] type at line 1751, col. 26 *) = Load[#this] : &:r1752_1, m1751_6 +# 1752| r1752_3(glval<TrivialLambdaClass>) = FieldAddress[(captured this)] : r1752_2 +# 1752| r1752_4(TrivialLambdaClass *) = CopyValue : r1752_3 +# 1752| r1752_5(glval<unknown>) = 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<decltype([...](...){...})>) = VariableAddress[l_m_inner] : +# 1754| r1754_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1754:29] : +# 1754| m1754_3(decltype([...](...){...})) = Uninitialized[#temp1754:29] : &:r1754_2 +# 1754| r1754_4(glval<TrivialLambdaClass>) = FieldAddress[(captured this)] : r1754_2 +# 1754| r1754_5(glval<unknown>) = VariableAddress[#this] : +# 1754| r1754_6(lambda [] type at line 1754, col. 30 *) = Load[#this] : &:r1754_5, m1751_6 +# 1754| r1754_7(glval<TrivialLambdaClass>) = 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<unknown>) = VariableAddress[#this] : +# 1754| m1754_6(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1754_5 +# 1754| r1754_7(glval<decltype([...](...){...})>) = Load[#this] : &:r1754_5, m1754_6 +# 1754| m1754_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1754_7 +# 1755| r1755_1(glval<unknown>) = VariableAddress[#this] : +# 1755| r1755_2(lambda [] type at line 1754, col. 30 *) = Load[#this] : &:r1755_1, m1754_6 +# 1755| r1755_3(glval<TrivialLambdaClass>) = FieldAddress[(captured this)] : r1755_2 +# 1755| r1755_4(TrivialLambdaClass *) = CopyValue : r1755_3 +# 1755| r1755_5(glval<unknown>) = 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<TrivialLambdaClass>) = VariableAddress[p1] : +# 1761| m1761_6(TrivialLambdaClass) = InitializeParameter[p1] : &:r1761_5 +# 1761| r1761_7(glval<TrivialLambdaClass &>) = 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<TrivialLambdaClass &&>) = 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<TrivialLambdaClass>) = VariableAddress[l1] : +# 1762| m1762_2(TrivialLambdaClass) = Uninitialized[l1] : &:r1762_1 +# 1763| r1763_1(glval<TrivialLambdaClass &>) = VariableAddress[l2] : +# 1763| r1763_2(glval<TrivialLambdaClass>) = VariableAddress[#temp1763:36] : +# 1763| r1763_3(TrivialLambdaClass) = Constant[0] : +# 1763| m1763_4(TrivialLambdaClass) = Store[#temp1763:36] : &:r1763_2, r1763_3 +# 1763| r1763_5(glval<TrivialLambdaClass>) = Convert : r1763_2 +# 1763| r1763_6(TrivialLambdaClass &) = CopyValue : r1763_5 +# 1763| m1763_7(TrivialLambdaClass &) = Store[l2] : &:r1763_1, r1763_6 +# 1765| r1765_1(glval<decltype([...](...){...})>) = VariableAddress[l_outer1] : +# 1765| r1765_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1765:20] : +# 1765| m1765_3(decltype([...](...){...})) = Uninitialized[#temp1765:20] : &:r1765_2 +# 1765| r1765_4(glval<TrivialLambdaClass>) = FieldAddress[p1] : r1765_2 +# 1765| r1765_5(glval<TrivialLambdaClass>) = 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<TrivialLambdaClass>) = FieldAddress[p2] : r1765_2 +# 1765| r1765_10(glval<TrivialLambdaClass &>) = 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<TrivialLambdaClass>) = FieldAddress[p3] : r1765_2 +# 1765| r1765_13(glval<TrivialLambdaClass &&>) = 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<TrivialLambdaClass>) = FieldAddress[l1] : r1765_2 +# 1765| r1765_16(glval<TrivialLambdaClass>) = 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<TrivialLambdaClass>) = FieldAddress[l2] : r1765_2 +# 1765| r1765_21(glval<TrivialLambdaClass &>) = 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<unknown>) = VariableAddress[#this] : +# 1765| m1765_6(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1765_5 +# 1765| r1765_7(glval<decltype([...](...){...})>) = Load[#this] : &:r1765_5, m1765_6 +# 1765| m1765_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1765_7 +# 1766| r1766_1(glval<decltype([...](...){...})>) = VariableAddress[l_inner1] : +# 1766| r1766_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1766:24] : +# 1766| m1766_3(decltype([...](...){...})) = Uninitialized[#temp1766:24] : &:r1766_2 +# 1766| r1766_4(glval<TrivialLambdaClass>) = FieldAddress[p1] : r1766_2 +# 1766| r1766_5(glval<unknown>) = VariableAddress[#this] : +# 1766| r1766_6(lambda [] type at line 1766, col. 25 *) = Load[#this] : &:r1766_5, m1765_6 +# 1766| r1766_7(glval<TrivialLambdaClass>) = 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<unknown>) = VariableAddress[#this] : +# 1766| m1766_6(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1766_5 +# 1766| r1766_7(glval<decltype([...](...){...})>) = 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<unknown>) = VariableAddress[#this] : +# 1773| m1773_6(glval<CopyConstructorWithImplicitArgumentClass>) = InitializeParameter[#this] : &:r1773_5 +# 1773| r1773_7(glval<CopyConstructorWithImplicitArgumentClass>) = 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<unknown>) = VariableAddress[#this] : +# 1774| m1774_6(glval<CopyConstructorWithImplicitArgumentClass>) = InitializeParameter[#this] : &:r1774_5 +# 1774| r1774_7(glval<CopyConstructorWithImplicitArgumentClass>) = Load[#this] : &:r1774_5, m1774_6 +# 1774| m1774_8(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1774_7 +# 1774| r1774_9(glval<CopyConstructorWithImplicitArgumentClass &>) = 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<CopyConstructorWithImplicitArgumentClass &>) = VariableAddress[c] : +# 1775| r1775_2(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1775_1, m1774_10 +# 1775| r1775_3(glval<CopyConstructorWithImplicitArgumentClass>) = CopyValue : r1775_2 +# 1775| r1775_4(glval<int>) = FieldAddress[x] : r1775_3 +# 1775| r1775_5(int) = Load[?] : &:r1775_4, ~m1774_12 +# 1775| r1775_6(glval<unknown>) = VariableAddress[#this] : +# 1775| r1775_7(CopyConstructorWithImplicitArgumentClass *) = Load[#this] : &:r1775_6, m1774_6 +# 1775| r1775_8(glval<int>) = 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<unknown>) = VariableAddress[#this] : +# 1782| m1782_6(glval<CopyConstructorWithBitwiseCopyClass>) = InitializeParameter[#this] : &:r1782_5 +# 1782| r1782_7(glval<CopyConstructorWithBitwiseCopyClass>) = 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<unknown>) = VariableAddress[#this] : +# 1785| m1785_6(glval<CopyConstructorTestNonVirtualClass>) = InitializeParameter[#this] : &:r1785_5 +# 1785| r1785_7(glval<CopyConstructorTestNonVirtualClass>) = Load[#this] : &:r1785_5, m1785_6 +# 1785| m1785_8(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1785_7 #-----| r0_1(glval<CopyConstructorTestNonVirtualClass &>) = 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<CopyConstructorWithImplicitArgumentClass>) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1738_6 -# 1738| r1738_10(glval<unknown>) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1738| r1738_11(glval<CopyConstructorTestNonVirtualClass &>) = VariableAddress[(unnamed parameter 0)] : -# 1738| r1738_12(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r1738_11, m0_2 -# 1738| r1738_13(glval<CopyConstructorTestNonVirtualClass>) = CopyValue : r1738_12 -# 1738| r1738_14(glval<CopyConstructorWithImplicitArgumentClass>) = 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<CopyConstructorWithImplicitArgumentClass>) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1785_6 +# 1785| r1785_10(glval<unknown>) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1785| r1785_11(glval<CopyConstructorTestNonVirtualClass &>) = VariableAddress[(unnamed parameter 0)] : +# 1785| r1785_12(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r1785_11, m0_2 +# 1785| r1785_13(glval<CopyConstructorTestNonVirtualClass>) = CopyValue : r1785_12 +# 1785| r1785_14(glval<CopyConstructorWithImplicitArgumentClass>) = 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<unknown>) = VariableAddress[#this] : -# 1742| m1742_6(glval<CopyConstructorTestNonVirtualClass>) = InitializeParameter[#this] : &:r1742_5 -# 1742| r1742_7(glval<CopyConstructorTestNonVirtualClass>) = Load[#this] : &:r1742_5, m1742_6 -# 1742| m1742_8(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1742_7 -# 1742| r1742_9(glval<CopyConstructorWithImplicitArgumentClass>) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1742_6 -# 1742| r1742_10(glval<unknown>) = 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<CopyConstructorWithBitwiseCopyClass>) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithBitwiseCopyClass] : m1742_6 -# 1742| r1742_17(glval<unknown>) = 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<unknown>) = VariableAddress[#this] : +# 1789| m1789_6(glval<CopyConstructorTestNonVirtualClass>) = InitializeParameter[#this] : &:r1789_5 +# 1789| r1789_7(glval<CopyConstructorTestNonVirtualClass>) = Load[#this] : &:r1789_5, m1789_6 +# 1789| m1789_8(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1789_7 +# 1789| r1789_9(glval<CopyConstructorWithImplicitArgumentClass>) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1789_6 +# 1789| r1789_10(glval<unknown>) = 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<CopyConstructorWithBitwiseCopyClass>) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithBitwiseCopyClass] : m1789_6 +# 1789| r1789_17(glval<unknown>) = 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<unknown>) = VariableAddress[#this] : -# 1745| m1745_6(glval<CopyConstructorTestVirtualClass>) = InitializeParameter[#this] : &:r1745_5 -# 1745| r1745_7(glval<CopyConstructorTestVirtualClass>) = 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<unknown>) = VariableAddress[#this] : +# 1792| m1792_6(glval<CopyConstructorTestVirtualClass>) = InitializeParameter[#this] : &:r1792_5 +# 1792| r1792_7(glval<CopyConstructorTestVirtualClass>) = Load[#this] : &:r1792_5, m1792_6 +# 1792| m1792_8(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1792_7 #-----| r0_1(glval<CopyConstructorTestVirtualClass &>) = 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<CopyConstructorWithImplicitArgumentClass>) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1745_6 -# 1745| r1745_10(glval<unknown>) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1745| r1745_11(glval<CopyConstructorTestVirtualClass &>) = VariableAddress[(unnamed parameter 0)] : -# 1745| r1745_12(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r1745_11, m0_2 -# 1745| r1745_13(glval<CopyConstructorTestVirtualClass>) = CopyValue : r1745_12 -# 1745| r1745_14(glval<CopyConstructorWithImplicitArgumentClass>) = 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<CopyConstructorWithImplicitArgumentClass>) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1792_6 +# 1792| r1792_10(glval<unknown>) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1792| r1792_11(glval<CopyConstructorTestVirtualClass &>) = VariableAddress[(unnamed parameter 0)] : +# 1792| r1792_12(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r1792_11, m0_2 +# 1792| r1792_13(glval<CopyConstructorTestVirtualClass>) = CopyValue : r1792_12 +# 1792| r1792_14(glval<CopyConstructorWithImplicitArgumentClass>) = 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<unknown>) = VariableAddress[#this] : -# 1749| m1749_6(glval<CopyConstructorTestVirtualClass>) = InitializeParameter[#this] : &:r1749_5 -# 1749| r1749_7(glval<CopyConstructorTestVirtualClass>) = Load[#this] : &:r1749_5, m1749_6 -# 1749| m1749_8(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1749_7 -# 1749| r1749_9(glval<CopyConstructorWithImplicitArgumentClass>) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1749_6 -# 1749| r1749_10(glval<unknown>) = 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<CopyConstructorWithBitwiseCopyClass>) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithBitwiseCopyClass] : m1749_6 -# 1749| r1749_17(glval<unknown>) = 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<unknown>) = VariableAddress[#this] : +# 1796| m1796_6(glval<CopyConstructorTestVirtualClass>) = InitializeParameter[#this] : &:r1796_5 +# 1796| r1796_7(glval<CopyConstructorTestVirtualClass>) = Load[#this] : &:r1796_5, m1796_6 +# 1796| m1796_8(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1796_7 +# 1796| r1796_9(glval<CopyConstructorWithImplicitArgumentClass>) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1796_6 +# 1796| r1796_10(glval<unknown>) = 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<CopyConstructorWithBitwiseCopyClass>) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithBitwiseCopyClass] : m1796_6 +# 1796| r1796_17(glval<unknown>) = 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<CopyConstructorTestNonVirtualClass &>) = 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<CopyConstructorTestVirtualClass &>) = 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<CopyConstructorTestNonVirtualClass>) = VariableAddress[cx] : -# 1755| m1755_2(CopyConstructorTestNonVirtualClass) = Uninitialized[cx] : &:r1755_1 -# 1755| r1755_3(glval<unknown>) = FunctionAddress[CopyConstructorTestNonVirtualClass] : -# 1755| r1755_4(glval<CopyConstructorTestNonVirtualClass &>) = VariableAddress[x] : -# 1755| r1755_5(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1755_4, m1753_2 -# 1755| r1755_6(glval<CopyConstructorTestNonVirtualClass>) = 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<CopyConstructorTestVirtualClass>) = VariableAddress[cy] : -# 1756| m1756_2(CopyConstructorTestVirtualClass) = Uninitialized[cy] : &:r1756_1 -# 1756| r1756_3(glval<unknown>) = FunctionAddress[CopyConstructorTestVirtualClass] : -# 1756| r1756_4(glval<CopyConstructorTestVirtualClass &>) = VariableAddress[y] : -# 1756| r1756_5(CopyConstructorTestVirtualClass &) = Load[y] : &:r1756_4, m1754_2 -# 1756| r1756_6(glval<CopyConstructorTestVirtualClass>) = 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<int>) = 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<int>) = 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<CopyConstructorTestNonVirtualClass &>) = 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<CopyConstructorTestVirtualClass &>) = 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<CopyConstructorTestNonVirtualClass>) = VariableAddress[cx] : +# 1802| m1802_2(CopyConstructorTestNonVirtualClass) = Uninitialized[cx] : &:r1802_1 +# 1802| r1802_3(glval<unknown>) = FunctionAddress[CopyConstructorTestNonVirtualClass] : +# 1802| r1802_4(glval<CopyConstructorTestNonVirtualClass &>) = VariableAddress[x] : +# 1802| r1802_5(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1802_4, m1800_2 +# 1802| r1802_6(glval<CopyConstructorTestNonVirtualClass>) = 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<CopyConstructorTestVirtualClass>) = VariableAddress[cy] : +# 1803| m1803_2(CopyConstructorTestVirtualClass) = Uninitialized[cy] : &:r1803_1 +# 1803| r1803_3(glval<unknown>) = FunctionAddress[CopyConstructorTestVirtualClass] : +# 1803| r1803_4(glval<CopyConstructorTestVirtualClass &>) = VariableAddress[y] : +# 1803| r1803_5(CopyConstructorTestVirtualClass &) = Load[y] : &:r1803_4, m1801_2 +# 1803| r1803_6(glval<CopyConstructorTestVirtualClass>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1759| m1759_6(int) = InitializeParameter[x] : &:r1759_5 -# 1760| r1760_1(glval<int>) = VariableAddress[y] : -# 1760| r1760_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : +# 1806| m1806_6(int) = InitializeParameter[x] : &:r1806_5 +# 1807| r1807_1(glval<int>) = VariableAddress[y] : +# 1807| r1807_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1761| r1761_2(int) = Load[x] : &:r1761_1, m1759_6 -# 1761| r1761_3(glval<int>) = 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<int>) = VariableAddress[x] : -# 1761| m1761_7(int) = Store[x] : &:r1761_6, r1761_5 +# 1808| Block 1 +# 1808| r1808_1(glval<int>) = VariableAddress[x] : +# 1808| r1808_2(int) = Load[x] : &:r1808_1, m1806_6 +# 1808| r1808_3(glval<int>) = 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<int>) = 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<int>) = VariableAddress[w] : -# 1764| m1764_3(int) = Uninitialized[w] : &:r1764_2 -# 1765| r1765_1(glval<int>) = VariableAddress[x] : -# 1765| r1765_2(int) = Load[x] : &:r1765_1, m1764_1 -# 1765| r1765_3(glval<int>) = VariableAddress[w] : -# 1765| m1765_4(int) = Store[w] : &:r1765_3, r1765_2 -# 1765| r1765_5(glval<int>) = 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<int>) = VariableAddress[w] : +# 1811| m1811_3(int) = Uninitialized[w] : &:r1811_2 +# 1812| r1812_1(glval<int>) = VariableAddress[x] : +# 1812| r1812_2(int) = Load[x] : &:r1812_1, m1811_1 +# 1812| r1812_3(glval<int>) = VariableAddress[w] : +# 1812| m1812_4(int) = Store[w] : &:r1812_3, r1812_2 +# 1812| r1812_5(glval<int>) = 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<int>) = VariableAddress[x] : -# 1766| r1766_2(int) = Load[x] : &:r1766_1, m1764_1 -# 1766| r1766_3(glval<int>) = 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<int>) = VariableAddress[x] : -# 1766| m1766_7(int) = Store[x] : &:r1766_6, r1766_5 +# 1813| Block 3 +# 1813| r1813_1(glval<int>) = VariableAddress[x] : +# 1813| r1813_2(int) = Load[x] : &:r1813_1, m1811_1 +# 1813| r1813_3(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1769| r1769_3(int) = Load[x] : &:r1769_2, m1769_1 -# 1769| r1769_4(glval<int>) = VariableAddress[w] : -# 1769| m1769_5(int) = Store[w] : &:r1769_4, r1769_3 -# 1769| r1769_6(glval<int>) = VariableAddress[w2] : -# 1769| r1769_7(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : +# 1816| r1816_3(int) = Load[x] : &:r1816_2, m1816_1 +# 1816| r1816_4(glval<int>) = VariableAddress[w] : +# 1816| m1816_5(int) = Store[w] : &:r1816_4, r1816_3 +# 1816| r1816_6(glval<int>) = VariableAddress[w2] : +# 1816| r1816_7(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1770| r1770_2(int) = Load[x] : &:r1770_1, m1769_1 -# 1770| r1770_3(glval<int>) = 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<int>) = VariableAddress[x] : -# 1770| m1770_7(int) = Store[x] : &:r1770_6, r1770_5 +# 1817| Block 5 +# 1817| r1817_1(glval<int>) = VariableAddress[x] : +# 1817| r1817_2(int) = Load[x] : &:r1817_1, m1816_1 +# 1817| r1817_3(glval<int>) = 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<int>) = 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<int>) = VariableAddress[v] : -# 1773| r1773_3(glval<int>) = 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<int>) = VariableAddress[v2] : -# 1773| r1773_7(glval<int>) = 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<int>) = 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<int>) = VariableAddress[v] : +# 1820| r1820_3(glval<int>) = 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<int>) = VariableAddress[v2] : +# 1820| r1820_7(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1774| r1774_2(int) = Load[x] : &:r1774_1, m1773_1 -# 1774| r1774_3(glval<int>) = 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<int>) = VariableAddress[x] : -# 1774| m1774_7(int) = Store[x] : &:r1774_6, r1774_5 +# 1821| Block 7 +# 1821| r1821_1(glval<int>) = VariableAddress[x] : +# 1821| r1821_2(int) = Load[x] : &:r1821_1, m1820_1 +# 1821| r1821_3(glval<int>) = 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<int>) = 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<int>) = VariableAddress[z] : -# 1777| r1777_3(glval<int>) = 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<int>) = 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<int>) = VariableAddress[z] : +# 1824| r1824_3(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1779| r1779_2(int) = Load[x] : &:r1779_1, m1777_1 -# 1779| r1779_3(glval<int>) = 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<int>) = VariableAddress[x] : -# 1779| m1779_7(int) = Store[x] : &:r1779_6, r1779_5 +# 1826| Block 9 +# 1826| r1826_1(glval<int>) = VariableAddress[x] : +# 1826| r1826_2(int) = Load[x] : &:r1826_1, m1824_1 +# 1826| r1826_3(glval<int>) = 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<int>) = 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<int>) = VariableAddress[z2] : -# 1782| r1782_3(glval<int>) = 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<int>) = 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<int>) = VariableAddress[z2] : +# 1829| r1829_3(glval<int>) = 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<int>) = 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<int>) = VariableAddress[z2] : -# 1783| r1783_2(int) = Load[z2] : &:r1783_1, m1782_5 -# 1783| r1783_3(glval<int>) = 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<int>) = VariableAddress[z2] : +# 1830| r1830_2(int) = Load[z2] : &:r1830_1, m1829_5 +# 1830| r1830_3(glval<int>) = 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<int>) = VariableAddress[x] : -# 1787| m1787_6(int) = InitializeParameter[x] : &:r1787_5 -# 1788| r1788_1(glval<int>) = VariableAddress[y] : -# 1788| r1788_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : +# 1834| m1834_6(int) = InitializeParameter[x] : &:r1834_5 +# 1835| r1835_1(glval<int>) = VariableAddress[y] : +# 1835| r1835_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1790| r1790_2(int) = Load[x] : &:r1790_1, m1787_6 -# 1790| r1790_3(glval<int>) = 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<int>) = VariableAddress[x] : -# 1790| m1790_7(int) = Store[x] : &:r1790_6, r1790_5 -# 1793| r1793_1(glval<int>) = VariableAddress[w] : -# 1793| m1793_2(int) = Uninitialized[w] : &:r1793_1 -# 1794| r1794_1(glval<int>) = VariableAddress[x] : -# 1794| r1794_2(int) = Load[x] : &:r1794_1, m1790_7 -# 1794| r1794_3(glval<int>) = VariableAddress[w] : -# 1794| m1794_4(int) = Store[w] : &:r1794_3, r1794_2 -# 1794| r1794_5(glval<int>) = 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<int>) = VariableAddress[x] : +# 1837| r1837_2(int) = Load[x] : &:r1837_1, m1834_6 +# 1837| r1837_3(glval<int>) = 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<int>) = VariableAddress[x] : +# 1837| m1837_7(int) = Store[x] : &:r1837_6, r1837_5 +# 1840| r1840_1(glval<int>) = VariableAddress[w] : +# 1840| m1840_2(int) = Uninitialized[w] : &:r1840_1 +# 1841| r1841_1(glval<int>) = VariableAddress[x] : +# 1841| r1841_2(int) = Load[x] : &:r1841_1, m1837_7 +# 1841| r1841_3(glval<int>) = VariableAddress[w] : +# 1841| m1841_4(int) = Store[w] : &:r1841_3, r1841_2 +# 1841| r1841_5(glval<int>) = 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<int>) = VariableAddress[x] : -# 1796| r1796_2(int) = Load[x] : &:r1796_1, m1790_7 -# 1796| r1796_3(glval<int>) = 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<int>) = VariableAddress[x] : -# 1796| m1796_7(int) = Store[x] : &:r1796_6, r1796_5 -# 1799| r1799_1(glval<int>) = VariableAddress[x] : -# 1799| r1799_2(int) = Load[x] : &:r1799_1, m1796_7 -# 1799| r1799_3(glval<int>) = VariableAddress[w] : -# 1799| m1799_4(int) = Store[w] : &:r1799_3, r1799_2 -# 1799| r1799_5(glval<int>) = VariableAddress[w2] : -# 1799| r1799_6(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : +# 1843| r1843_2(int) = Load[x] : &:r1843_1, m1837_7 +# 1843| r1843_3(glval<int>) = 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<int>) = VariableAddress[x] : +# 1843| m1843_7(int) = Store[x] : &:r1843_6, r1843_5 +# 1846| r1846_1(glval<int>) = VariableAddress[x] : +# 1846| r1846_2(int) = Load[x] : &:r1846_1, m1843_7 +# 1846| r1846_3(glval<int>) = VariableAddress[w] : +# 1846| m1846_4(int) = Store[w] : &:r1846_3, r1846_2 +# 1846| r1846_5(glval<int>) = VariableAddress[w2] : +# 1846| r1846_6(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1801| r1801_2(int) = Load[x] : &:r1801_1, m1796_7 -# 1801| r1801_3(glval<int>) = 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<int>) = VariableAddress[x] : -# 1801| m1801_7(int) = Store[x] : &:r1801_6, r1801_5 -# 1804| r1804_1(glval<int>) = VariableAddress[v] : -# 1804| r1804_2(glval<int>) = 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<int>) = VariableAddress[v2] : -# 1804| r1804_6(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : +# 1848| r1848_2(int) = Load[x] : &:r1848_1, m1843_7 +# 1848| r1848_3(glval<int>) = 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<int>) = VariableAddress[x] : +# 1848| m1848_7(int) = Store[x] : &:r1848_6, r1848_5 +# 1851| r1851_1(glval<int>) = VariableAddress[v] : +# 1851| r1851_2(glval<int>) = 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<int>) = VariableAddress[v2] : +# 1851| r1851_6(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1806| r1806_2(int) = Load[x] : &:r1806_1, m1801_7 -# 1806| r1806_3(glval<int>) = 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<int>) = VariableAddress[x] : -# 1806| m1806_7(int) = Store[x] : &:r1806_6, r1806_5 -# 1809| r1809_1(glval<int>) = VariableAddress[z] : -# 1809| r1809_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : +# 1853| r1853_2(int) = Load[x] : &:r1853_1, m1848_7 +# 1853| r1853_3(glval<int>) = 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<int>) = VariableAddress[x] : +# 1853| m1853_7(int) = Store[x] : &:r1853_6, r1853_5 +# 1856| r1856_1(glval<int>) = VariableAddress[z] : +# 1856| r1856_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1812| r1812_2(int) = Load[x] : &:r1812_1, m1806_7 -# 1812| r1812_3(glval<int>) = 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<int>) = VariableAddress[x] : -# 1812| m1812_7(int) = Store[x] : &:r1812_6, r1812_5 -# 1815| r1815_1(glval<int>) = VariableAddress[z2] : -# 1815| r1815_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : +# 1859| r1859_2(int) = Load[x] : &:r1859_1, m1853_7 +# 1859| r1859_3(glval<int>) = 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<int>) = VariableAddress[x] : +# 1859| m1859_7(int) = Store[x] : &:r1859_6, r1859_5 +# 1862| r1862_1(glval<int>) = VariableAddress[z2] : +# 1862| r1862_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[z2] : -# 1817| r1817_2(int) = Load[z2] : &:r1817_1, m1815_4 -# 1817| r1817_3(glval<int>) = 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<int>) = VariableAddress[z2] : +# 1864| r1864_2(int) = Load[z2] : &:r1864_1, m1862_4 +# 1864| r1864_3(glval<int>) = 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<int>) = 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<int>) = 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<constructor_only>) = VariableAddress[global_4] : -# 1827| r1827_4(glval<unknown>) = 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<constructor_only>) = VariableAddress[global_4] : +# 1874| r1874_4(glval<unknown>) = 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<constructor_only>) = VariableAddress[global_5] : -# 1829| r1829_4(glval<unknown>) = 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<constructor_only>) = VariableAddress[global_5] : +# 1876| r1876_4(glval<unknown>) = 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<char *>) = VariableAddress[global_string] : -# 1831| r1831_4(glval<char[14]>) = 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<char *>) = VariableAddress[global_string] : +# 1878| r1878_4(glval<char[14]>) = 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<int>) = VariableAddress[global_6] : -# 1833| r1833_4(glval<int>) = 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<int>) = VariableAddress[global_6] : +# 1880| r1880_4(glval<int>) = 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<unknown>) = VariableAddress[#this] : -# 1836| m1836_6(glval<A>) = InitializeParameter[#this] : &:r1836_5 -# 1836| r1836_7(glval<A>) = 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<unknown>) = VariableAddress[#this] : +# 1883| m1883_6(glval<A>) = InitializeParameter[#this] : &:r1883_5 +# 1883| r1883_7(glval<A>) = Load[#this] : &:r1883_5, m1883_6 +# 1883| m1883_8(A) = InitializeIndirection[#this] : &:r1883_7 #-----| r0_1(glval<A &&>) = 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<unknown>) = VariableAddress[#this] : -#-----| r0_6(A *) = Load[#this] : &:r0_5, m1836_6 +#-----| r0_6(A *) = Load[#this] : &:r0_5, m1883_6 #-----| r0_7(glval<enum <unnamed>[1]>) = FieldAddress[e] : r0_6 #-----| r0_8(glval<A &&>) = VariableAddress[(unnamed parameter 0)] : #-----| r0_9(A &&) = Load[(unnamed parameter 0)] : &:r0_8, m0_2 @@ -11304,3787 +11326,3842 @@ ir.cpp: #-----| r0_11(glval<enum <unnamed>[1]>) = FieldAddress[e] : r0_10 #-----| r0_12(enum <unnamed>[1]) = Load[?] : &:r0_11, ~m0_4 #-----| m0_13(enum <unnamed>[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<A &>) = VariableAddress[#return] : #-----| r0_16(glval<unknown>) = VariableAddress[#this] : -#-----| r0_17(A *) = Load[#this] : &:r0_16, m1836_6 +#-----| r0_17(A *) = Load[#this] : &:r0_16, m1883_6 #-----| r0_18(glval<A>) = 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<A &>) = 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<A &>) = 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<unknown>) = VariableAddress[#this] : -# 1841| m1841_6(glval<B>) = InitializeParameter[#this] : &:r1841_5 -# 1841| r1841_7(glval<B>) = 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<unknown>) = VariableAddress[#this] : +# 1888| m1888_6(glval<B>) = InitializeParameter[#this] : &:r1888_5 +# 1888| r1888_7(glval<B>) = Load[#this] : &:r1888_5, m1888_6 +# 1888| m1888_8(B) = InitializeIndirection[#this] : &:r1888_7 #-----| r0_1(glval<B &&>) = 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<unknown>) = VariableAddress[#this] : -# 1841| r1841_10(B *) = Load[#this] : &:r1841_9, m1841_6 -#-----| r0_5(A *) = ConvertToNonVirtualBase[B : A] : r1841_10 -# 1841| r1841_11(glval<unknown>) = FunctionAddress[operator=] : -# 1841| r1841_12(glval<B &&>) = VariableAddress[(unnamed parameter 0)] : -# 1841| r1841_13(B &&) = Load[(unnamed parameter 0)] : &:r1841_12, m0_2 -#-----| r0_6(glval<B>) = CopyValue : r1841_13 -# 1841| r1841_14(B *) = CopyValue : r0_6 -#-----| r0_7(A *) = ConvertToNonVirtualBase[B : A] : r1841_14 -# 1841| r1841_15(glval<A>) = 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<unknown>) = VariableAddress[#this] : +# 1888| r1888_10(B *) = Load[#this] : &:r1888_9, m1888_6 +#-----| r0_5(A *) = ConvertToNonVirtualBase[B : A] : r1888_10 +# 1888| r1888_11(glval<unknown>) = FunctionAddress[operator=] : +# 1888| r1888_12(glval<B &&>) = VariableAddress[(unnamed parameter 0)] : +# 1888| r1888_13(B &&) = Load[(unnamed parameter 0)] : &:r1888_12, m0_2 +#-----| r0_6(glval<B>) = CopyValue : r1888_13 +# 1888| r1888_14(B *) = CopyValue : r0_6 +#-----| r0_7(A *) = ConvertToNonVirtualBase[B : A] : r1888_14 +# 1888| r1888_15(glval<A>) = 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<A>) = CopyValue : r1841_16 +#-----| r0_15(glval<A>) = CopyValue : r1888_16 #-----| r0_16(glval<B &>) = VariableAddress[#return] : #-----| r0_17(glval<unknown>) = VariableAddress[#this] : -#-----| r0_18(B *) = Load[#this] : &:r0_17, m1841_6 +#-----| r0_18(B *) = Load[#this] : &:r0_17, m1888_6 #-----| r0_19(glval<B>) = 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<B &>) = 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<B &>) = 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<B>) = VariableAddress[v] : -# 1846| m1846_2(B) = Uninitialized[v] : &:r1846_1 -# 1846| r1846_3(glval<unknown>) = 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<B>) = VariableAddress[v] : -# 1847| r1847_2(glval<unknown>) = FunctionAddress[operator=] : -# 1847| r1847_3(glval<B>) = VariableAddress[#temp1847:13] : -# 1847| m1847_4(B) = Uninitialized[#temp1847:13] : &:r1847_3 -# 1847| r1847_5(glval<unknown>) = 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<B>) = 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<B>) = VariableAddress[v] : +# 1893| m1893_2(B) = Uninitialized[v] : &:r1893_1 +# 1893| r1893_3(glval<unknown>) = 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<B>) = VariableAddress[v] : +# 1894| r1894_2(glval<unknown>) = FunctionAddress[operator=] : +# 1894| r1894_3(glval<B>) = VariableAddress[#temp1894:13] : +# 1894| m1894_4(B) = Uninitialized[#temp1894:13] : &:r1894_3 +# 1894| r1894_5(glval<unknown>) = 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<B>) = 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<char *>) = VariableAddress[pf] : -# 1852| r1852_2(glval<char[17]>) = VariableAddress[__PRETTY_FUNCTION__] : -# 1852| r1852_3(char *) = Convert : r1852_2 -# 1852| m1852_4(char *) = Store[pf] : &:r1852_1, r1852_3 -# 1853| r1853_1(glval<char *>) = VariableAddress[strfunc] : -# 1853| r1853_2(glval<char[10]>) = 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<char *>) = VariableAddress[pf] : +# 1899| r1899_2(glval<char[17]>) = VariableAddress[__PRETTY_FUNCTION__] : +# 1899| r1899_3(char *) = Convert : r1899_2 +# 1899| m1899_4(char *) = Store[pf] : &:r1899_1, r1899_3 +# 1900| r1900_1(glval<char *>) = VariableAddress[strfunc] : +# 1900| r1900_2(glval<char[10]>) = 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<int>::missing_type_decl_entry(missing_declaration_entries::Bar1<int>::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<unknown>) = VariableAddress[#this] : -# 1864| m1864_6(glval<Bar1<int>>) = InitializeParameter[#this] : &:r1864_5 -# 1864| r1864_7(glval<Bar1<int>>) = Load[#this] : &:r1864_5, m1864_6 -# 1864| m1864_8(Bar1<int>) = InitializeIndirection[#this] : &:r1864_7 -# 1864| r1864_9(glval<S *>) = 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<void *>) = VariableAddress[#return] : -# 1866| r1866_2(glval<S *>) = 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<void *>) = 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<int>::missing_type_decl_entry(missing_declaration_entries::Bar1<int>::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<unknown>) = VariableAddress[#this] : +# 1911| m1911_6(glval<Bar1<int>>) = InitializeParameter[#this] : &:r1911_5 +# 1911| r1911_7(glval<Bar1<int>>) = Load[#this] : &:r1911_5, m1911_6 +# 1911| m1911_8(Bar1<int>) = InitializeIndirection[#this] : &:r1911_7 +# 1911| r1911_9(glval<S *>) = 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<void *>) = VariableAddress[#return] : +# 1913| r1913_2(glval<S *>) = 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<void *>) = 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<Bar1<int>>) = VariableAddress[b] : -# 1871| m1871_2(Bar1<int>) = Uninitialized[b] : &:r1871_1 -# 1872| r1872_1(glval<Bar1<int>>) = VariableAddress[b] : -# 1872| r1872_2(glval<unknown>) = 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<int>) = ^IndirectMayWriteSideEffect[-1] : &:r1872_1 -# 1872| m1872_10(Bar1<int>) = 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<Bar1<int>>) = VariableAddress[b] : +# 1918| m1918_2(Bar1<int>) = Uninitialized[b] : &:r1918_1 +# 1919| r1919_1(glval<Bar1<int>>) = VariableAddress[b] : +# 1919| r1919_2(glval<unknown>) = 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<int>) = ^IndirectMayWriteSideEffect[-1] : &:r1919_1 +# 1919| m1919_10(Bar1<int>) = 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<int>::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<unknown>) = VariableAddress[#this] : -# 1877| m1877_6(glval<Bar2<int>>) = InitializeParameter[#this] : &:r1877_5 -# 1877| r1877_7(glval<Bar2<int>>) = Load[#this] : &:r1877_5, m1877_6 -# 1877| m1877_8(Bar2<int>) = InitializeIndirection[#this] : &:r1877_7 -# 1878| r1878_1(glval<int[10]>) = VariableAddress[x] : -# 1878| m1878_2(int[10]) = Uninitialized[x] : &:r1878_1 -# 1878| r1878_3(glval<int[10]>) = VariableAddress[y] : -# 1878| m1878_4(int[10]) = Uninitialized[y] : &:r1878_3 -# 1879| r1879_1(int) = Constant[10] : -# 1879| r1879_2(glval<int[10]>) = VariableAddress[x] : -# 1879| r1879_3(int *) = Convert : r1879_2 -# 1879| r1879_4(glval<int>) = 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<int[10]>) = VariableAddress[y] : -# 1880| r1880_3(int *) = Convert : r1880_2 -# 1880| r1880_4(glval<int>) = 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<int>) = VariableAddress[#return] : -# 1881| r1881_2(glval<int[10]>) = VariableAddress[x] : -# 1881| r1881_3(int *) = Convert : r1881_2 -# 1881| r1881_4(int) = Load[?] : &:r1881_3, m1879_5 -# 1881| r1881_5(glval<int[10]>) = 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<int>) = 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<int>::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<unknown>) = VariableAddress[#this] : +# 1924| m1924_6(glval<Bar2<int>>) = InitializeParameter[#this] : &:r1924_5 +# 1924| r1924_7(glval<Bar2<int>>) = Load[#this] : &:r1924_5, m1924_6 +# 1924| m1924_8(Bar2<int>) = InitializeIndirection[#this] : &:r1924_7 +# 1925| r1925_1(glval<int[10]>) = VariableAddress[x] : +# 1925| m1925_2(int[10]) = Uninitialized[x] : &:r1925_1 +# 1925| r1925_3(glval<int[10]>) = VariableAddress[y] : +# 1925| m1925_4(int[10]) = Uninitialized[y] : &:r1925_3 +# 1926| r1926_1(int) = Constant[10] : +# 1926| r1926_2(glval<int[10]>) = VariableAddress[x] : +# 1926| r1926_3(int *) = Convert : r1926_2 +# 1926| r1926_4(glval<int>) = 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<int[10]>) = VariableAddress[y] : +# 1927| r1927_3(int *) = Convert : r1927_2 +# 1927| r1927_4(glval<int>) = 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<int>) = VariableAddress[#return] : +# 1928| r1928_2(glval<int[10]>) = VariableAddress[x] : +# 1928| r1928_3(int *) = Convert : r1928_2 +# 1928| r1928_4(int) = Load[?] : &:r1928_3, m1926_5 +# 1928| r1928_5(glval<int[10]>) = 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<int>) = 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<Bar2<int>>) = VariableAddress[b] : -# 1886| m1886_2(Bar2<int>) = Uninitialized[b] : &:r1886_1 -# 1887| r1887_1(glval<Bar2<int>>) = VariableAddress[b] : -# 1887| r1887_2(glval<unknown>) = 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<int>) = ^IndirectMayWriteSideEffect[-1] : &:r1887_1 -# 1887| m1887_8(Bar2<int>) = 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<Bar2<int>>) = VariableAddress[b] : +# 1933| m1933_2(Bar2<int>) = Uninitialized[b] : &:r1933_1 +# 1934| r1934_1(glval<Bar2<int>>) = VariableAddress[b] : +# 1934| r1934_2(glval<unknown>) = 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<int>) = ^IndirectMayWriteSideEffect[-1] : &:r1934_1 +# 1934| m1934_8(Bar2<int>) = 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<char> -# 1891| Block 0 -# 1891| v1891_1(void) = EnterFunction : -# 1891| m1891_2(unknown) = AliasedDefinition : -# 1891| r1891_3(glval<char>) = 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<char> +# 1938| Block 0 +# 1938| v1938_1(void) = EnterFunction : +# 1938| m1938_2(unknown) = AliasedDefinition : +# 1938| r1938_3(glval<char>) = 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<int> -# 1891| Block 0 -# 1891| v1891_1(void) = EnterFunction : -# 1891| m1891_2(unknown) = AliasedDefinition : -# 1891| r1891_3(glval<int>) = 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<int> +# 1938| Block 0 +# 1938| v1938_1(void) = EnterFunction : +# 1938| m1938_2(unknown) = AliasedDefinition : +# 1938| r1938_3(glval<int>) = 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<int>) = VariableAddress[local_int] : -# 1894| r1894_2(glval<int>) = 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<char>) = VariableAddress[local_char] : -# 1895| r1895_2(glval<char>) = 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<int>) = VariableAddress[#return] : -# 1896| r1896_2(glval<int>) = VariableAddress[local_int] : -# 1896| r1896_3(int) = Load[local_int] : &:r1896_2, m1894_4 -# 1896| r1896_4(glval<char>) = 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<int>) = 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<int>) = VariableAddress[local_int] : +# 1941| r1941_2(glval<int>) = 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<char>) = VariableAddress[local_char] : +# 1942| r1942_2(glval<char>) = 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<int>) = VariableAddress[#return] : +# 1943| r1943_2(glval<int>) = VariableAddress[local_int] : +# 1943| r1943_3(int) = Load[local_int] : &:r1943_2, m1941_4 +# 1943| r1943_4(glval<char>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1901| m1901_6(int) = InitializeParameter[x] : &:r1901_5 -# 1902| r1902_1(glval<int>) = 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<int>) = VariableAddress[x] : +# 1948| m1948_6(int) = InitializeParameter[x] : &:r1948_5 +# 1949| r1949_1(glval<int>) = 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<int>) = VariableAddress[#return] : -# 1903| r1903_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[#return] : +# 1950| r1950_2(glval<int>) = 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<int>) = 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<unknown>) = 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<unknown>) = 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<int>) = VariableAddress[x] : -# 1909| m1909_6(int) = InitializeParameter[x] : &:r1909_5 -# 1910| r1910_1(glval<int>) = 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<int>) = VariableAddress[x] : +# 1956| m1956_6(int) = InitializeParameter[x] : &:r1956_5 +# 1957| r1957_1(glval<int>) = 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<unknown>) = 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<unknown>) = 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<int>) = VariableAddress[#return] : -# 1913| r1913_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[#return] : +# 1960| r1960_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1916| m1916_6(int) = InitializeParameter[x] : &:r1916_5 -# 1917| r1917_1(glval<int>) = VariableAddress[#return] : -# 1917| r1917_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : +# 1963| m1963_6(int) = InitializeParameter[x] : &:r1963_5 +# 1964| r1964_1(glval<int>) = VariableAddress[#return] : +# 1964| r1964_2(glval<int>) = 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<int>) = 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<C>) = VariableAddress[c] : -# 1921| m1921_2(C) = Uninitialized[c] : &:r1921_1 -# 1921| r1921_3(glval<unknown>) = 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<int>) = VariableAddress[x] : -# 1922| m1922_2(int) = Uninitialized[x] : &:r1922_1 -# 1923| r1923_1(glval<C>) = VariableAddress[c] : -# 1923| r1923_2(glval<unknown>) = 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<int>) = VariableAddress[x] : -# 1923| m1923_8(int) = Store[x] : &:r1923_7, r1923_4 -# 1924| r1924_1(glval<int>) = VariableAddress[y] : -# 1924| m1924_2(int) = Uninitialized[y] : &:r1924_1 -# 1925| r1925_1(glval<unknown>) = 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<int>) = VariableAddress[y] : -# 1925| m1925_7(int) = Store[y] : &:r1925_6, r1925_3 -# 1926| r1926_1(glval<int>) = VariableAddress[z] : -# 1926| m1926_2(int) = Uninitialized[z] : &:r1926_1 -# 1927| r1927_1(glval<unknown>) = 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<int>) = VariableAddress[z] : -# 1927| m1927_7(int) = Store[z] : &:r1927_6, r1927_3 -# 1928| v1928_1(void) = NoOp : -# 1928| r1928_2(glval<C>) = VariableAddress[c] : -# 1928| r1928_3(glval<unknown>) = 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<C>) = VariableAddress[c] : +# 1968| m1968_2(C) = Uninitialized[c] : &:r1968_1 +# 1968| r1968_3(glval<unknown>) = 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<int>) = VariableAddress[x] : +# 1969| m1969_2(int) = Uninitialized[x] : &:r1969_1 +# 1970| r1970_1(glval<C>) = VariableAddress[c] : +# 1970| r1970_2(glval<unknown>) = 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<int>) = VariableAddress[x] : +# 1970| m1970_8(int) = Store[x] : &:r1970_7, r1970_4 +# 1971| r1971_1(glval<int>) = VariableAddress[y] : +# 1971| m1971_2(int) = Uninitialized[y] : &:r1971_1 +# 1972| r1972_1(glval<unknown>) = 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<int>) = VariableAddress[y] : +# 1972| m1972_7(int) = Store[y] : &:r1972_6, r1972_3 +# 1973| r1973_1(glval<int>) = VariableAddress[z] : +# 1973| m1973_2(int) = Uninitialized[z] : &:r1973_1 +# 1974| r1974_1(glval<unknown>) = 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<int>) = VariableAddress[z] : +# 1974| m1974_7(int) = Store[z] : &:r1974_6, r1974_3 +# 1975| v1975_1(void) = NoOp : +# 1975| r1975_2(glval<C>) = VariableAddress[c] : +# 1975| r1975_3(glval<unknown>) = 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<int>) = VariableAddress[i] : -# 1931| m1931_2(int) = Uninitialized[i] : &:r1931_1 -# 1931| r1931_3(glval<int>) = VariableAddress[j] : -# 1931| m1931_4(int) = Uninitialized[j] : &:r1931_3 -# 1932| r1932_1(int) = Constant[40] : -# 1932| r1932_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[i] : +# 1978| m1978_2(int) = Uninitialized[i] : &:r1978_1 +# 1978| r1978_3(glval<int>) = VariableAddress[j] : +# 1978| m1978_4(int) = Uninitialized[j] : &:r1978_3 +# 1979| r1979_1(int) = Constant[40] : +# 1979| r1979_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[i] : -# 1936| m1936_2(int) = Uninitialized[i] : &:r1936_1 -# 1936| r1936_3(glval<int>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[i] : +# 1983| m1983_2(int) = Uninitialized[i] : &:r1983_1 +# 1983| r1983_3(glval<int>) = 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<int>) = 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<int>) = 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<D &>) = VariableAddress[#return] : -# 1945| r1945_2(glval<D>) = VariableAddress[x] : -# 1945| r1945_3(D &) = CopyValue : r1945_2 -# 1945| m1945_4(D &) = Store[#return] : &:r1945_1, r1945_3 -# 1944| r1944_5(glval<D &>) = 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<D &>) = VariableAddress[#return] : +# 1992| r1992_2(glval<D>) = VariableAddress[x] : +# 1992| r1992_3(D &) = CopyValue : r1992_2 +# 1992| m1992_4(D &) = Store[#return] : &:r1992_1, r1992_3 +# 1991| r1991_5(glval<D &>) = 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<D>) = VariableAddress[#return] : -# 1948| r1948_2(glval<D>) = 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<D>) = 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<D>) = VariableAddress[#return] : +# 1995| r1995_2(glval<D>) = 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<D>) = 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<D>) = VariableAddress[d] : -# 1953| m1953_2(D) = Uninitialized[d] : &:r1953_1 -# 1955| r1955_1(glval<D>) = VariableAddress[d] : -# 1955| r1955_2(glval<unknown>) = 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<D>) = CopyValue : r1955_3 -# 1956| r1956_1(glval<unknown>) = 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<D>) = CopyValue : r1956_2 -# 1957| r1957_1(glval<D>) = VariableAddress[d] : -# 1957| r1957_2(glval<unknown>) = 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<unknown>) = 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<D>) = VariableAddress[x] : -# 1960| m1960_2(D) = Uninitialized[x] : &:r1960_1 -# 1961| r1961_1(glval<D>) = VariableAddress[d] : -# 1961| r1961_2(glval<unknown>) = 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<D>) = VariableAddress[x] : -# 1961| m1961_8(D) = Store[x] : &:r1961_7, r1961_6 -# 1962| r1962_1(glval<D>) = VariableAddress[y] : -# 1962| m1962_2(D) = Uninitialized[y] : &:r1962_1 -# 1963| r1963_1(glval<unknown>) = 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<D>) = VariableAddress[y] : -# 1963| m1963_7(D) = Store[y] : &:r1963_6, r1963_5 -# 1964| r1964_1(glval<D>) = VariableAddress[j] : -# 1964| m1964_2(D) = Uninitialized[j] : &:r1964_1 -# 1965| r1965_1(glval<D>) = VariableAddress[d] : -# 1965| r1965_2(glval<unknown>) = 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<D>) = VariableAddress[j] : -# 1965| m1965_7(D) = Store[j] : &:r1965_6, r1965_3 -# 1966| r1966_1(glval<D>) = VariableAddress[k] : -# 1966| m1966_2(D) = Uninitialized[k] : &:r1966_1 -# 1967| r1967_1(glval<unknown>) = 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<D>) = 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<D>) = VariableAddress[d] : +# 2000| m2000_2(D) = Uninitialized[d] : &:r2000_1 +# 2002| r2002_1(glval<D>) = VariableAddress[d] : +# 2002| r2002_2(glval<unknown>) = 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<D>) = CopyValue : r2002_3 +# 2003| r2003_1(glval<unknown>) = 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<D>) = CopyValue : r2003_2 +# 2004| r2004_1(glval<D>) = VariableAddress[d] : +# 2004| r2004_2(glval<unknown>) = 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<unknown>) = 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<D>) = VariableAddress[x] : +# 2007| m2007_2(D) = Uninitialized[x] : &:r2007_1 +# 2008| r2008_1(glval<D>) = VariableAddress[d] : +# 2008| r2008_2(glval<unknown>) = 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<D>) = VariableAddress[x] : +# 2008| m2008_8(D) = Store[x] : &:r2008_7, r2008_6 +# 2009| r2009_1(glval<D>) = VariableAddress[y] : +# 2009| m2009_2(D) = Uninitialized[y] : &:r2009_1 +# 2010| r2010_1(glval<unknown>) = 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<D>) = VariableAddress[y] : +# 2010| m2010_7(D) = Store[y] : &:r2010_6, r2010_5 +# 2011| r2011_1(glval<D>) = VariableAddress[j] : +# 2011| m2011_2(D) = Uninitialized[j] : &:r2011_1 +# 2012| r2012_1(glval<D>) = VariableAddress[d] : +# 2012| r2012_2(glval<unknown>) = 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<D>) = VariableAddress[j] : +# 2012| m2012_7(D) = Store[j] : &:r2012_6, r2012_3 +# 2013| r2013_1(glval<D>) = VariableAddress[k] : +# 2013| m2013_2(D) = Uninitialized[k] : &:r2013_1 +# 2014| r2014_1(glval<unknown>) = 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<D>) = 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<int>) = VariableAddress[x] : -# 1971| m1971_2(int) = Uninitialized[x] : &:r1971_1 -# 1972| r1972_1(glval<int>) = 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<int>) = VariableAddress[x] : +# 2018| m2018_2(int) = Uninitialized[x] : &:r2018_1 +# 2019| r2019_1(glval<int>) = 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<ValCat>) = 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<ValCat>) = VariableAddress[c] : +# 2029| m2029_2(ValCat) = Uninitialized[c] : &:r2029_1 #-----| r0_1(glval<ValCat>) = 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<ValCat>) = VariableAddress[c] : -# 1984| r1984_2(glval<unknown>) = 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<ValCat>) = 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<ValCat>) = VariableAddress[c] : +# 2031| r2031_2(glval<unknown>) = 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<ValCat>) = 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<ValCat>) = 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<ValCat>) = VariableAddress[c] : -# 1985| r1985_2(glval<unknown>) = 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<ValCat>) = 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<ValCat>) = VariableAddress[c] : +# 2032| r2032_2(glval<unknown>) = 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<ValCat>) = 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<ValCat>) = 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<ValCat>) = VariableAddress[#temp1986:5] : -# 1986| r1986_2(glval<ValCat>) = VariableAddress[c] : -# 1986| r1986_3(glval<unknown>) = 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<ValCat>) = VariableAddress[#temp2033:5] : +# 2033| r2033_2(glval<ValCat>) = VariableAddress[c] : +# 2033| r2033_3(glval<unknown>) = 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<ValCat>) = 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<unknown>) = 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<ValCat>) = 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<unknown>) = 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<ValCat>) = 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<ValCat>) = 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<unknown>) = 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<ValCat>) = 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<unknown>) = 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<ValCat>) = 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<ValCat>) = 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<ValCat>) = VariableAddress[#temp1989:5] : -# 1989| r1989_2(glval<unknown>) = 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<ValCat>) = VariableAddress[#temp2036:5] : +# 2036| r2036_2(glval<unknown>) = 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<C>) = VariableAddress[c] : -# 1993| m1993_2(C) = Uninitialized[c] : &:r1993_1 -# 1993| r1993_3(glval<unknown>) = 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<C>) = 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<C>) = VariableAddress[c] : -# 1996| r1996_3(glval<unknown>) = 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<C>) = VariableAddress[c] : +# 2040| m2040_2(C) = Uninitialized[c] : &:r2040_1 +# 2040| r2040_3(glval<unknown>) = 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<C>) = 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<C>) = VariableAddress[c] : +# 2043| r2043_3(glval<unknown>) = 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<bool>) = VariableAddress[a] : -# 1998| m1998_6(bool) = InitializeParameter[a] : &:r1998_5 -# 1998| r1998_7(glval<int>) = VariableAddress[x] : -# 1998| m1998_8(int) = InitializeParameter[x] : &:r1998_7 -# 1998| r1998_9(glval<int>) = VariableAddress[y] : -# 1998| m1998_10(int) = InitializeParameter[y] : &:r1998_9 -# 1998| r1998_11(glval<int>) = VariableAddress[z] : -# 1998| m1998_12(int) = InitializeParameter[z] : &:r1998_11 -# 1999| r1999_1(glval<bool>) = 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<bool>) = VariableAddress[a] : +# 2045| m2045_6(bool) = InitializeParameter[a] : &:r2045_5 +# 2045| r2045_7(glval<int>) = VariableAddress[x] : +# 2045| m2045_8(int) = InitializeParameter[x] : &:r2045_7 +# 2045| r2045_9(glval<int>) = VariableAddress[y] : +# 2045| m2045_10(int) = InitializeParameter[y] : &:r2045_9 +# 2045| r2045_11(glval<int>) = VariableAddress[z] : +# 2045| m2045_12(int) = InitializeParameter[z] : &:r2045_11 +# 2046| r2046_1(glval<bool>) = 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<int>) = VariableAddress[#temp1999:9] : -# 1999| r1999_6(int) = Load[#temp1999:9] : &:r1999_5, m1999_4 -# 1999| r1999_7(glval<int>) = VariableAddress[z] : -# 1999| m1999_8(int) = Store[z] : &:r1999_7, r1999_6 -# 2000| r2000_1(glval<bool>) = 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<int>) = VariableAddress[#temp2046:9] : +# 2046| r2046_6(int) = Load[#temp2046:9] : &:r2046_5, m2046_4 +# 2046| r2046_7(glval<int>) = VariableAddress[z] : +# 2046| m2046_8(int) = Store[z] : &:r2046_7, r2046_6 +# 2047| r2047_1(glval<bool>) = 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<int>) = VariableAddress[x] : -# 1999| r1999_10(int) = Load[x] : &:r1999_9, m1998_8 -# 1999| r1999_11(glval<int>) = VariableAddress[#temp1999:9] : -# 1999| m1999_12(int) = Store[#temp1999:9] : &:r1999_11, r1999_10 +# 2046| Block 2 +# 2046| r2046_9(glval<int>) = VariableAddress[x] : +# 2046| r2046_10(int) = Load[x] : &:r2046_9, m2045_8 +# 2046| r2046_11(glval<int>) = VariableAddress[#temp2046:9] : +# 2046| m2046_12(int) = Store[#temp2046:9] : &:r2046_11, r2046_10 #-----| Goto -> Block 1 -# 1999| Block 3 -# 1999| r1999_13(glval<int>) = VariableAddress[y] : -# 1999| r1999_14(int) = Load[y] : &:r1999_13, m1998_10 -# 1999| r1999_15(glval<int>) = VariableAddress[#temp1999:9] : -# 1999| m1999_16(int) = Store[#temp1999:9] : &:r1999_15, r1999_14 +# 2046| Block 3 +# 2046| r2046_13(glval<int>) = VariableAddress[y] : +# 2046| r2046_14(int) = Load[y] : &:r2046_13, m2045_10 +# 2046| r2046_15(glval<int>) = 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<int>) = VariableAddress[#temp2000:9] : -# 2000| r2000_6(int) = Load[#temp2000:9] : &:r2000_5, m2000_4 -# 2000| r2000_7(glval<int>) = VariableAddress[z] : -# 2000| m2000_8(int) = Store[z] : &:r2000_7, r2000_6 -# 2001| r2001_1(glval<bool>) = 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<int>) = VariableAddress[#temp2047:9] : +# 2047| r2047_6(int) = Load[#temp2047:9] : &:r2047_5, m2047_4 +# 2047| r2047_7(glval<int>) = VariableAddress[z] : +# 2047| m2047_8(int) = Store[z] : &:r2047_7, r2047_6 +# 2048| r2048_1(glval<bool>) = 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<int>) = VariableAddress[x] : -# 2000| r2000_10(int) = Load[x] : &:r2000_9, m1998_8 -# 2000| r2000_11(glval<int>) = VariableAddress[#temp2000:9] : -# 2000| m2000_12(int) = Store[#temp2000:9] : &:r2000_11, r2000_10 +# 2047| Block 5 +# 2047| r2047_9(glval<int>) = VariableAddress[x] : +# 2047| r2047_10(int) = Load[x] : &:r2047_9, m2045_8 +# 2047| r2047_11(glval<int>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[#temp2001:9] : -# 2001| r2001_6(int) = Load[#temp2001:9] : &:r2001_5, m2001_4 -# 2001| r2001_7(glval<int>) = VariableAddress[z] : -# 2001| m2001_8(int) = Store[z] : &:r2001_7, r2001_6 -# 2002| r2002_1(int) = Constant[7] : -# 2002| r2002_2(glval<bool>) = 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<int>) = VariableAddress[#temp2048:9] : +# 2048| r2048_6(int) = Load[#temp2048:9] : &:r2048_5, m2048_4 +# 2048| r2048_7(glval<int>) = VariableAddress[z] : +# 2048| m2048_8(int) = Store[z] : &:r2048_7, r2048_6 +# 2049| r2049_1(int) = Constant[7] : +# 2049| r2049_2(glval<bool>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[#temp2048:9] : +# 2048| m2048_14(int) = Store[#temp2048:9] : &:r2048_13, r2048_12 #-----| Goto -> Block 7 -# 2002| Block 10 -# 2002| m2002_5(glval<int>) = Phi : from 11:m2002_12, from 12:m2002_15 -# 2002| r2002_6(glval<unknown>) = VariableAddress[#temp2002:6] : -# 2002| r2002_7(glval<int>) = 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<int>) = Phi : from 11:m2049_12, from 12:m2049_15 +# 2049| r2049_6(glval<unknown>) = VariableAddress[#temp2049:6] : +# 2049| r2049_7(glval<int>) = 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<int>) = VariableAddress[x] : -# 2002| r2002_11(glval<unknown>) = VariableAddress[#temp2002:6] : -# 2002| m2002_12(glval<int>) = Store[#temp2002:6] : &:r2002_11, r2002_10 +# 2049| Block 11 +# 2049| r2049_10(glval<int>) = VariableAddress[x] : +# 2049| r2049_11(glval<unknown>) = VariableAddress[#temp2049:6] : +# 2049| m2049_12(glval<int>) = Store[#temp2049:6] : &:r2049_11, r2049_10 #-----| Goto -> Block 10 -# 2002| Block 12 -# 2002| r2002_13(glval<int>) = VariableAddress[y] : -# 2002| r2002_14(glval<unknown>) = VariableAddress[#temp2002:6] : -# 2002| m2002_15(glval<int>) = Store[#temp2002:6] : &:r2002_14, r2002_13 +# 2049| Block 12 +# 2049| r2049_13(glval<int>) = VariableAddress[y] : +# 2049| r2049_14(glval<unknown>) = VariableAddress[#temp2049:6] : +# 2049| m2049_15(glval<int>) = 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<bool>) = VariableAddress[a] : -# 2008| m2008_6(bool) = InitializeParameter[a] : &:r2008_5 -# 2008| r2008_7(glval<TernaryPodObj>) = VariableAddress[x] : -# 2008| m2008_8(TernaryPodObj) = InitializeParameter[x] : &:r2008_7 -# 2008| r2008_9(glval<TernaryPodObj>) = VariableAddress[y] : -# 2008| m2008_10(TernaryPodObj) = InitializeParameter[y] : &:r2008_9 -# 2008| r2008_11(glval<TernaryPodObj>) = VariableAddress[z] : -# 2008| m2008_12(TernaryPodObj) = InitializeParameter[z] : &:r2008_11 -# 2009| r2009_1(glval<bool>) = 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<bool>) = VariableAddress[a] : +# 2055| m2055_6(bool) = InitializeParameter[a] : &:r2055_5 +# 2055| r2055_7(glval<TernaryPodObj>) = VariableAddress[x] : +# 2055| m2055_8(TernaryPodObj) = InitializeParameter[x] : &:r2055_7 +# 2055| r2055_9(glval<TernaryPodObj>) = VariableAddress[y] : +# 2055| m2055_10(TernaryPodObj) = InitializeParameter[y] : &:r2055_9 +# 2055| r2055_11(glval<TernaryPodObj>) = VariableAddress[z] : +# 2055| m2055_12(TernaryPodObj) = InitializeParameter[z] : &:r2055_11 +# 2056| r2056_1(glval<bool>) = 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<TernaryPodObj>) = VariableAddress[#temp2009:9] : -# 2009| r2009_6(TernaryPodObj) = Load[#temp2009:9] : &:r2009_5, m2009_4 -# 2009| r2009_7(glval<TernaryPodObj>) = VariableAddress[z] : -# 2009| m2009_8(TernaryPodObj) = Store[z] : &:r2009_7, r2009_6 -# 2010| r2010_1(glval<TernaryPodObj>) = VariableAddress[#temp2010:9] : -# 2010| r2010_2(glval<bool>) = 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<TernaryPodObj>) = VariableAddress[#temp2056:9] : +# 2056| r2056_6(TernaryPodObj) = Load[#temp2056:9] : &:r2056_5, m2056_4 +# 2056| r2056_7(glval<TernaryPodObj>) = VariableAddress[z] : +# 2056| m2056_8(TernaryPodObj) = Store[z] : &:r2056_7, r2056_6 +# 2057| r2057_1(glval<TernaryPodObj>) = VariableAddress[#temp2057:9] : +# 2057| r2057_2(glval<bool>) = 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<TernaryPodObj>) = VariableAddress[x] : -# 2009| r2009_10(TernaryPodObj) = Load[x] : &:r2009_9, m2008_8 -# 2009| r2009_11(glval<TernaryPodObj>) = VariableAddress[#temp2009:9] : -# 2009| m2009_12(TernaryPodObj) = Store[#temp2009:9] : &:r2009_11, r2009_10 +# 2056| Block 2 +# 2056| r2056_9(glval<TernaryPodObj>) = VariableAddress[x] : +# 2056| r2056_10(TernaryPodObj) = Load[x] : &:r2056_9, m2055_8 +# 2056| r2056_11(glval<TernaryPodObj>) = VariableAddress[#temp2056:9] : +# 2056| m2056_12(TernaryPodObj) = Store[#temp2056:9] : &:r2056_11, r2056_10 #-----| Goto -> Block 1 -# 2009| Block 3 -# 2009| r2009_13(glval<TernaryPodObj>) = VariableAddress[y] : -# 2009| r2009_14(TernaryPodObj) = Load[y] : &:r2009_13, m2008_10 -# 2009| r2009_15(glval<TernaryPodObj>) = VariableAddress[#temp2009:9] : -# 2009| m2009_16(TernaryPodObj) = Store[#temp2009:9] : &:r2009_15, r2009_14 +# 2056| Block 3 +# 2056| r2056_13(glval<TernaryPodObj>) = VariableAddress[y] : +# 2056| r2056_14(TernaryPodObj) = Load[y] : &:r2056_13, m2055_10 +# 2056| r2056_15(glval<TernaryPodObj>) = 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<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[z] : -# 2010| m2010_11(TernaryPodObj) = Store[z] : &:r2010_10, r2010_9 -# 2011| r2011_1(glval<TernaryPodObj>) = VariableAddress[#temp2011:9] : -# 2011| r2011_2(glval<bool>) = 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<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[z] : +# 2057| m2057_11(TernaryPodObj) = Store[z] : &:r2057_10, r2057_9 +# 2058| r2058_1(glval<TernaryPodObj>) = VariableAddress[#temp2058:9] : +# 2058| r2058_2(glval<bool>) = 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<TernaryPodObj>) = VariableAddress[#temp2010:13] : -# 2010| r2010_13(glval<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[#temp2010:9] : -# 2010| m2010_18(TernaryPodObj) = Store[#temp2010:9] : &:r2010_17, r2010_16 +# 2057| Block 5 +# 2057| r2057_12(glval<TernaryPodObj>) = VariableAddress[#temp2057:13] : +# 2057| r2057_13(glval<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[#temp2057:9] : +# 2057| m2057_18(TernaryPodObj) = Store[#temp2057:9] : &:r2057_17, r2057_16 #-----| Goto -> Block 4 -# 2010| Block 6 -# 2010| r2010_19(glval<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[#temp2010:9] : -# 2010| m2010_24(TernaryPodObj) = Store[#temp2010:9] : &:r2010_23, r2010_22 +# 2057| Block 6 +# 2057| r2057_19(glval<TernaryPodObj>) = 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<TernaryPodObj>) = 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<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[z] : -# 2011| m2011_11(TernaryPodObj) = Store[z] : &:r2011_10, r2011_9 -# 2012| r2012_1(glval<TernaryPodObj>) = 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<bool>) = 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<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[z] : +# 2058| m2058_11(TernaryPodObj) = Store[z] : &:r2058_10, r2058_9 +# 2059| r2059_1(glval<TernaryPodObj>) = 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<bool>) = 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<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[#temp2011:9] : -# 2011| m2011_17(TernaryPodObj) = Store[#temp2011:9] : &:r2011_16, r2011_15 +# 2058| Block 8 +# 2058| r2058_12(glval<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[#temp2058:9] : +# 2058| m2058_17(TernaryPodObj) = Store[#temp2058:9] : &:r2058_16, r2058_15 #-----| Goto -> Block 7 -# 2011| Block 9 -# 2011| r2011_18(glval<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[#temp2011:9] : -# 2011| m2011_23(TernaryPodObj) = Store[#temp2011:9] : &:r2011_22, r2011_21 +# 2058| Block 9 +# 2058| r2058_18(glval<TernaryPodObj>) = 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<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[#temp2012:10] : -# 2012| r2012_10(TernaryPodObj) = Load[#temp2012:10] : &:r2012_9, m2012_8 -# 2012| r2012_11(glval<TernaryPodObj>) = VariableAddress[z] : -# 2012| m2012_12(TernaryPodObj) = Store[z] : &:r2012_11, r2012_10 -# 2012| r2012_13(glval<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[#temp2059:10] : +# 2059| r2059_10(TernaryPodObj) = Load[#temp2059:10] : &:r2059_9, m2059_8 +# 2059| r2059_11(glval<TernaryPodObj>) = VariableAddress[z] : +# 2059| m2059_12(TernaryPodObj) = Store[z] : &:r2059_11, r2059_10 +# 2059| r2059_13(glval<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[x] : -# 2012| r2012_16(TernaryPodObj) = Load[x] : &:r2012_15, m2008_8 -# 2012| r2012_17(glval<TernaryPodObj>) = VariableAddress[#temp2012:10] : -# 2012| m2012_18(TernaryPodObj) = Store[#temp2012:10] : &:r2012_17, r2012_16 +# 2059| Block 11 +# 2059| r2059_15(glval<TernaryPodObj>) = VariableAddress[x] : +# 2059| r2059_16(TernaryPodObj) = Load[x] : &:r2059_15, m2055_8 +# 2059| r2059_17(glval<TernaryPodObj>) = VariableAddress[#temp2059:10] : +# 2059| m2059_18(TernaryPodObj) = Store[#temp2059:10] : &:r2059_17, r2059_16 #-----| Goto -> Block 10 -# 2012| Block 12 -# 2012| r2012_19(glval<TernaryPodObj>) = VariableAddress[y] : -# 2012| r2012_20(TernaryPodObj) = Load[y] : &:r2012_19, m2008_10 -# 2012| r2012_21(glval<TernaryPodObj>) = VariableAddress[#temp2012:10] : -# 2012| m2012_22(TernaryPodObj) = Store[#temp2012:10] : &:r2012_21, r2012_20 +# 2059| Block 12 +# 2059| r2059_19(glval<TernaryPodObj>) = VariableAddress[y] : +# 2059| r2059_20(TernaryPodObj) = Load[y] : &:r2059_19, m2055_10 +# 2059| r2059_21(glval<TernaryPodObj>) = 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<unknown>) = VariableAddress[#this] : -# 2015| m2015_6(glval<TernaryNonPodObj>) = InitializeParameter[#this] : &:r2015_5 -# 2015| r2015_7(glval<TernaryNonPodObj>) = 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<unknown>) = VariableAddress[#this] : +# 2062| m2062_6(glval<TernaryNonPodObj>) = InitializeParameter[#this] : &:r2062_5 +# 2062| r2062_7(glval<TernaryNonPodObj>) = Load[#this] : &:r2062_5, m2062_6 +# 2062| m2062_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2062_7 #-----| r0_1(glval<TernaryNonPodObj &>) = 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<TernaryNonPodObj &>) = VariableAddress[#return] : #-----| r0_6(glval<unknown>) = VariableAddress[#this] : -#-----| r0_7(TernaryNonPodObj *) = Load[#this] : &:r0_6, m2015_6 +#-----| r0_7(TernaryNonPodObj *) = Load[#this] : &:r0_6, m2062_6 #-----| r0_8(glval<TernaryNonPodObj>) = 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<TernaryNonPodObj &>) = 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<TernaryNonPodObj &>) = 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<unknown>) = VariableAddress[#this] : -# 2015| m2015_6(glval<TernaryNonPodObj>) = InitializeParameter[#this] : &:r2015_5 -# 2015| r2015_7(glval<TernaryNonPodObj>) = 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<unknown>) = VariableAddress[#this] : +# 2062| m2062_6(glval<TernaryNonPodObj>) = InitializeParameter[#this] : &:r2062_5 +# 2062| r2062_7(glval<TernaryNonPodObj>) = 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<unknown>) = VariableAddress[#this] : -# 2015| m2015_6(glval<TernaryNonPodObj>) = InitializeParameter[#this] : &:r2015_5 -# 2015| r2015_7(glval<TernaryNonPodObj>) = 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<unknown>) = VariableAddress[#this] : +# 2062| m2062_6(glval<TernaryNonPodObj>) = InitializeParameter[#this] : &:r2062_5 +# 2062| r2062_7(glval<TernaryNonPodObj>) = Load[#this] : &:r2062_5, m2062_6 +# 2062| m2062_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2062_7 #-----| r0_1(glval<TernaryNonPodObj &>) = 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<unknown>) = VariableAddress[#this] : -# 2016| m2016_6(glval<TernaryNonPodObj>) = InitializeParameter[#this] : &:r2016_5 -# 2016| r2016_7(glval<TernaryNonPodObj>) = 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<unknown>) = VariableAddress[#this] : +# 2063| m2063_6(glval<TernaryNonPodObj>) = InitializeParameter[#this] : &:r2063_5 +# 2063| r2063_7(glval<TernaryNonPodObj>) = 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<bool>) = VariableAddress[a] : -# 2019| m2019_6(bool) = InitializeParameter[a] : &:r2019_5 -# 2019| r2019_7(glval<TernaryNonPodObj>) = VariableAddress[x] : -# 2019| m2019_8(TernaryNonPodObj) = InitializeParameter[x] : &:r2019_7 -# 2019| r2019_9(glval<TernaryNonPodObj>) = VariableAddress[y] : -# 2019| m2019_10(TernaryNonPodObj) = InitializeParameter[y] : &:r2019_9 -# 2019| r2019_11(glval<TernaryNonPodObj>) = VariableAddress[z] : -# 2019| m2019_12(TernaryNonPodObj) = InitializeParameter[z] : &:r2019_11 -# 2020| r2020_1(glval<TernaryNonPodObj>) = VariableAddress[z] : -# 2020| r2020_2(glval<unknown>) = FunctionAddress[operator=] : -# 2020| r2020_3(glval<bool>) = 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<bool>) = VariableAddress[a] : +# 2066| m2066_6(bool) = InitializeParameter[a] : &:r2066_5 +# 2066| r2066_7(glval<TernaryNonPodObj>) = VariableAddress[x] : +# 2066| m2066_8(TernaryNonPodObj) = InitializeParameter[x] : &:r2066_7 +# 2066| r2066_9(glval<TernaryNonPodObj>) = VariableAddress[y] : +# 2066| m2066_10(TernaryNonPodObj) = InitializeParameter[y] : &:r2066_9 +# 2066| r2066_11(glval<TernaryNonPodObj>) = VariableAddress[z] : +# 2066| m2066_12(TernaryNonPodObj) = InitializeParameter[z] : &:r2066_11 +# 2067| r2067_1(glval<TernaryNonPodObj>) = VariableAddress[z] : +# 2067| r2067_2(glval<unknown>) = FunctionAddress[operator=] : +# 2067| r2067_3(glval<bool>) = 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<TernaryNonPodObj>) = Phi : from 2:m2020_21, from 3:m2020_24 -# 2020| r2020_7(glval<unknown>) = VariableAddress[#temp2020:9] : -# 2020| r2020_8(glval<TernaryNonPodObj>) = Load[#temp2020:9] : &:r2020_7, m2020_6 -# 2020| r2020_9(glval<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = CopyValue : r2020_11 -# 2021| r2021_1(glval<TernaryNonPodObj>) = VariableAddress[z] : -# 2021| r2021_2(glval<unknown>) = FunctionAddress[operator=] : -# 2021| r2021_3(glval<TernaryNonPodObj>) = VariableAddress[#temp2021:9] : -# 2021| r2021_4(glval<bool>) = 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<TernaryNonPodObj>) = Phi : from 2:m2067_21, from 3:m2067_24 +# 2067| r2067_7(glval<unknown>) = VariableAddress[#temp2067:9] : +# 2067| r2067_8(glval<TernaryNonPodObj>) = Load[#temp2067:9] : &:r2067_7, m2067_6 +# 2067| r2067_9(glval<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = CopyValue : r2067_11 +# 2068| r2068_1(glval<TernaryNonPodObj>) = VariableAddress[z] : +# 2068| r2068_2(glval<unknown>) = FunctionAddress[operator=] : +# 2068| r2068_3(glval<TernaryNonPodObj>) = VariableAddress[#temp2068:9] : +# 2068| r2068_4(glval<bool>) = 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<TernaryNonPodObj>) = VariableAddress[x] : -# 2020| r2020_20(glval<unknown>) = VariableAddress[#temp2020:9] : -# 2020| m2020_21(glval<TernaryNonPodObj>) = Store[#temp2020:9] : &:r2020_20, r2020_19 +# 2067| Block 2 +# 2067| r2067_19(glval<TernaryNonPodObj>) = VariableAddress[x] : +# 2067| r2067_20(glval<unknown>) = VariableAddress[#temp2067:9] : +# 2067| m2067_21(glval<TernaryNonPodObj>) = Store[#temp2067:9] : &:r2067_20, r2067_19 #-----| Goto -> Block 1 -# 2020| Block 3 -# 2020| r2020_22(glval<TernaryNonPodObj>) = VariableAddress[y] : -# 2020| r2020_23(glval<unknown>) = VariableAddress[#temp2020:9] : -# 2020| m2020_24(glval<TernaryNonPodObj>) = Store[#temp2020:9] : &:r2020_23, r2020_22 +# 2067| Block 3 +# 2067| r2067_22(glval<TernaryNonPodObj>) = VariableAddress[y] : +# 2067| r2067_23(glval<unknown>) = VariableAddress[#temp2067:9] : +# 2067| m2067_24(glval<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = CopyValue : r2021_14 -# 2022| r2022_1(glval<TernaryNonPodObj>) = VariableAddress[z] : -# 2022| r2022_2(glval<unknown>) = FunctionAddress[operator=] : -# 2022| r2022_3(glval<TernaryNonPodObj>) = VariableAddress[#temp2022:9] : -# 2022| r2022_4(glval<bool>) = 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<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = CopyValue : r2068_14 +# 2069| r2069_1(glval<TernaryNonPodObj>) = VariableAddress[z] : +# 2069| r2069_2(glval<unknown>) = FunctionAddress[operator=] : +# 2069| r2069_3(glval<TernaryNonPodObj>) = VariableAddress[#temp2069:9] : +# 2069| r2069_4(glval<bool>) = 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<TernaryNonPodObj>) = VariableAddress[#temp2021:13] : -# 2021| m2021_23(TernaryNonPodObj) = Uninitialized[#temp2021:13] : &:r2021_22 -# 2021| r2021_24(glval<unknown>) = FunctionAddress[TernaryNonPodObj] : -# 2021| r2021_25(glval<TernaryNonPodObj>) = VariableAddress[x] : -# 2021| r2021_26(glval<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = VariableAddress[#temp2021:9] : -# 2021| m2021_36(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_35, r2021_34 +# 2068| Block 5 +# 2068| r2068_22(glval<TernaryNonPodObj>) = VariableAddress[#temp2068:13] : +# 2068| m2068_23(TernaryNonPodObj) = Uninitialized[#temp2068:13] : &:r2068_22 +# 2068| r2068_24(glval<unknown>) = FunctionAddress[TernaryNonPodObj] : +# 2068| r2068_25(glval<TernaryNonPodObj>) = VariableAddress[x] : +# 2068| r2068_26(glval<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = VariableAddress[#temp2068:9] : +# 2068| m2068_36(TernaryNonPodObj) = Store[#temp2068:9] : &:r2068_35, r2068_34 #-----| Goto -> Block 4 -# 2021| Block 6 -# 2021| r2021_37(glval<TernaryNonPodObj>) = VariableAddress[#temp2021:17] : -# 2021| m2021_38(TernaryNonPodObj) = Uninitialized[#temp2021:17] : &:r2021_37 -# 2021| r2021_39(glval<unknown>) = 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<TernaryNonPodObj>) = VariableAddress[#temp2021:9] : -# 2021| m2021_47(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_46, r2021_45 +# 2068| Block 6 +# 2068| r2068_37(glval<TernaryNonPodObj>) = VariableAddress[#temp2068:17] : +# 2068| m2068_38(TernaryNonPodObj) = Uninitialized[#temp2068:17] : &:r2068_37 +# 2068| r2068_39(glval<unknown>) = 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<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = CopyValue : r2022_14 -# 2023| r2023_1(glval<TernaryNonPodObj>) = VariableAddress[z] : -# 2023| r2023_2(glval<unknown>) = FunctionAddress[operator=] : -# 2023| r2023_3(glval<bool>) = 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<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = CopyValue : r2069_14 +# 2070| r2070_1(glval<TernaryNonPodObj>) = VariableAddress[z] : +# 2070| r2070_2(glval<unknown>) = FunctionAddress[operator=] : +# 2070| r2070_3(glval<bool>) = 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<TernaryNonPodObj>) = VariableAddress[#temp2022:13] : -# 2022| m2022_23(TernaryNonPodObj) = Uninitialized[#temp2022:13] : &:r2022_22 -# 2022| r2022_24(glval<unknown>) = 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<TernaryNonPodObj>) = VariableAddress[#temp2022:9] : -# 2022| m2022_32(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_31, r2022_30 +# 2069| Block 8 +# 2069| r2069_22(glval<TernaryNonPodObj>) = VariableAddress[#temp2069:13] : +# 2069| m2069_23(TernaryNonPodObj) = Uninitialized[#temp2069:13] : &:r2069_22 +# 2069| r2069_24(glval<unknown>) = 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<TernaryNonPodObj>) = VariableAddress[#temp2069:9] : +# 2069| m2069_32(TernaryNonPodObj) = Store[#temp2069:9] : &:r2069_31, r2069_30 #-----| Goto -> Block 7 -# 2022| Block 9 -# 2022| r2022_33(glval<TernaryNonPodObj>) = VariableAddress[#temp2022:34] : -# 2022| m2022_34(TernaryNonPodObj) = Uninitialized[#temp2022:34] : &:r2022_33 -# 2022| r2022_35(glval<unknown>) = 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<TernaryNonPodObj>) = VariableAddress[#temp2022:9] : -# 2022| m2022_43(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_42, r2022_41 +# 2069| Block 9 +# 2069| r2069_33(glval<TernaryNonPodObj>) = VariableAddress[#temp2069:34] : +# 2069| m2069_34(TernaryNonPodObj) = Uninitialized[#temp2069:34] : &:r2069_33 +# 2069| r2069_35(glval<unknown>) = 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<TernaryNonPodObj>) = VariableAddress[#temp2069:9] : +# 2069| m2069_43(TernaryNonPodObj) = Store[#temp2069:9] : &:r2069_42, r2069_41 #-----| Goto -> Block 7 -# 2023| Block 10 -# 2023| m2023_6(glval<TernaryNonPodObj>) = Phi : from 11:m2023_40, from 12:m2023_43 -# 2023| r2023_7(glval<unknown>) = VariableAddress[#temp2023:10] : -# 2023| r2023_8(glval<TernaryNonPodObj>) = Load[#temp2023:10] : &:r2023_7, m2023_6 -# 2023| r2023_9(glval<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = CopyValue : r2023_11 -# 2023| r2023_19(glval<unknown>) = FunctionAddress[operator=] : -# 2023| r2023_20(glval<TernaryNonPodObj>) = VariableAddress[#temp2023:23] : -# 2023| m2023_21(TernaryNonPodObj) = Uninitialized[#temp2023:23] : &:r2023_20 -# 2023| r2023_22(glval<unknown>) = 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<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = Phi : from 11:m2070_40, from 12:m2070_43 +# 2070| r2070_7(glval<unknown>) = VariableAddress[#temp2070:10] : +# 2070| r2070_8(glval<TernaryNonPodObj>) = Load[#temp2070:10] : &:r2070_7, m2070_6 +# 2070| r2070_9(glval<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = CopyValue : r2070_11 +# 2070| r2070_19(glval<unknown>) = FunctionAddress[operator=] : +# 2070| r2070_20(glval<TernaryNonPodObj>) = VariableAddress[#temp2070:23] : +# 2070| m2070_21(TernaryNonPodObj) = Uninitialized[#temp2070:23] : &:r2070_20 +# 2070| r2070_22(glval<unknown>) = 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<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = VariableAddress[x] : -# 2023| r2023_39(glval<unknown>) = VariableAddress[#temp2023:10] : -# 2023| m2023_40(glval<TernaryNonPodObj>) = Store[#temp2023:10] : &:r2023_39, r2023_38 +# 2070| Block 11 +# 2070| r2070_38(glval<TernaryNonPodObj>) = VariableAddress[x] : +# 2070| r2070_39(glval<unknown>) = VariableAddress[#temp2070:10] : +# 2070| m2070_40(glval<TernaryNonPodObj>) = Store[#temp2070:10] : &:r2070_39, r2070_38 #-----| Goto -> Block 10 -# 2023| Block 12 -# 2023| r2023_41(glval<TernaryNonPodObj>) = VariableAddress[y] : -# 2023| r2023_42(glval<unknown>) = VariableAddress[#temp2023:10] : -# 2023| m2023_43(glval<TernaryNonPodObj>) = Store[#temp2023:10] : &:r2023_42, r2023_41 +# 2070| Block 12 +# 2070| r2070_41(glval<TernaryNonPodObj>) = VariableAddress[y] : +# 2070| r2070_42(glval<unknown>) = VariableAddress[#temp2070:10] : +# 2070| m2070_43(glval<TernaryNonPodObj>) = 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<unsigned int>) = VariableAddress[x] : -# 2028| m2028_6(unsigned int) = InitializeParameter[x] : &:r2028_5 -# 2029| r2029_1(glval<unsigned int>) = VariableAddress[y] : -# 2029| m2029_2(unsigned int) = Uninitialized[y] : &:r2029_1 -# 2030| r2030_1(glval<unsigned int>) = 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<unsigned int>) = VariableAddress[x] : +# 2075| m2075_6(unsigned int) = InitializeParameter[x] : &:r2075_5 +# 2076| r2076_1(glval<unsigned int>) = VariableAddress[y] : +# 2076| m2076_2(unsigned int) = Uninitialized[y] : &:r2076_1 +# 2077| r2077_1(glval<unsigned int>) = 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<unsigned int>) = VariableAddress[#temp2030:7] : -# 2030| r2030_9(unsigned int) = Load[#temp2030:7] : &:r2030_8, m2030_7 -# 2030| r2030_10(glval<unsigned int>) = VariableAddress[y] : -# 2030| m2030_11(unsigned int) = Store[y] : &:r2030_10, r2030_9 -# 2033| r2033_1(glval<unsigned int>) = VariableAddress[#return] : -# 2033| m2033_2(unsigned int) = Uninitialized[#return] : &:r2033_1 -# 2028| r2028_7(glval<unsigned int>) = 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<unsigned int>) = VariableAddress[#temp2077:7] : +# 2077| r2077_9(unsigned int) = Load[#temp2077:7] : &:r2077_8, m2077_7 +# 2077| r2077_10(glval<unsigned int>) = VariableAddress[y] : +# 2077| m2077_11(unsigned int) = Store[y] : &:r2077_10, r2077_9 +# 2080| r2080_1(glval<unsigned int>) = VariableAddress[#return] : +# 2080| m2080_2(unsigned int) = Uninitialized[#return] : &:r2080_1 +# 2075| r2075_7(glval<unsigned int>) = 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<unknown>) = FunctionAddress[CommaTestHelper] : -# 2031| r2031_2(glval<unsigned int>) = 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<unsigned int>) = 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<unsigned int>) = VariableAddress[#temp2030:7] : -# 2030| m2030_13(unsigned int) = Store[#temp2030:7] : &:r2030_12, r2031_9 +# 2078| Block 2 +# 2078| r2078_1(glval<unknown>) = FunctionAddress[CommaTestHelper] : +# 2078| r2078_2(glval<unsigned int>) = 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<unsigned int>) = 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<unsigned int>) = 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<unknown>) = FunctionAddress[CommaTestHelper] : -# 2032| r2032_2(glval<unsigned int>) = 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<unsigned int>) = VariableAddress[#temp2030:7] : -# 2030| m2030_15(unsigned int) = Store[#temp2030:7] : &:r2030_14, r2032_9 +# 2079| Block 3 +# 2079| r2079_1(glval<unknown>) = FunctionAddress[CommaTestHelper] : +# 2079| r2079_2(glval<unsigned int>) = 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<unsigned int>) = 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<int *>) = VariableAddress[x] : -# 2036| r2036_2(glval<unknown>) = 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<int *>) = VariableAddress[x] : -# 2037| r2037_3(int *) = Load[x] : &:r2037_2, m2036_9 -# 2037| r2037_4(glval<int>) = 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<unknown>) = FunctionAddress[operator delete] : -# 2038| r2038_2(glval<int *>) = 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<int *>) = VariableAddress[x] : +# 2083| r2083_2(glval<unknown>) = 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<int *>) = VariableAddress[x] : +# 2084| r2084_3(int *) = Load[x] : &:r2084_2, m2083_9 +# 2084| r2084_4(glval<int>) = 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<unknown>) = FunctionAddress[operator delete] : +# 2085| r2085_2(glval<int *>) = 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<unknown>) = VariableAddress[#this] : -# 2041| m2041_6(glval<Base2>) = InitializeParameter[#this] : &:r2041_5 -# 2041| r2041_7(glval<Base2>) = 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<unknown>) = VariableAddress[#this] : +# 2088| m2088_6(glval<Base2>) = InitializeParameter[#this] : &:r2088_5 +# 2088| r2088_7(glval<Base2>) = 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<void *>) = 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<void *>) = 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<unknown>) = VariableAddress[#this] : -# 2045| m2045_6(glval<Base2>) = InitializeParameter[#this] : &:r2045_5 -# 2045| r2045_7(glval<Base2>) = 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<unknown>) = VariableAddress[#this] : -# 2048| m2048_6(glval<Derived2>) = InitializeParameter[#this] : &:r2048_5 -# 2048| r2048_7(glval<Derived2>) = Load[#this] : &:r2048_5, m2048_6 -# 2048| m2048_8(Derived2) = InitializeIndirection[#this] : &:r2048_7 -# 2048| r2048_9(glval<Base2>) = ConvertToNonVirtualBase[Derived2 : Base2] : m2048_6 -# 2048| r2048_10(glval<unknown>) = 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<unknown>) = VariableAddress[#this] : -# 2051| m2051_6(glval<Derived2>) = InitializeParameter[#this] : &:r2051_5 -# 2051| r2051_7(glval<Derived2>) = Load[#this] : &:r2051_5, m2051_6 -# 2051| m2051_8(Derived2) = InitializeIndirection[#this] : &:r2051_7 -# 2051| v2051_9(void) = NoOp : -# 2051| r2051_10(glval<Base2>) = ConvertToNonVirtualBase[Derived2 : Base2] : m2051_6 -# 2051| r2051_11(glval<unknown>) = 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<void *>) = 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<Base2 *>) = VariableAddress[b1] : -# 2060| r2060_2(glval<unknown>) = 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<unknown>) = 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<unknown>) = VirtualDeleteFunctionAddress : -# 2061| r2061_2(glval<Base2 *>) = 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<Base2 *>) = VariableAddress[b2] : -# 2063| r2063_2(glval<unknown>) = 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<unknown>) = 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<unknown>) = VirtualDeleteFunctionAddress : -# 2064| r2064_2(glval<Base2 *>) = 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<Derived2 *>) = VariableAddress[d] : -# 2066| r2066_2(glval<unknown>) = 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<unknown>) = 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<unknown>) = VirtualDeleteFunctionAddress : -# 2067| r2067_2(glval<Derived2 *>) = 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<int>) = VariableAddress[#return] : -# 2068| m2068_2(int) = Uninitialized[#return] : &:r2068_1 -# 2058| r2058_5(glval<int>) = 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<int>) = VariableAddress[x] : -# 2073| r2073_2(int) = Constant[116] : -# 2073| m2073_3(int) = Store[x] : &:r2073_1, r2073_2 -# 2074| r2074_1(glval<unknown>) = 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<int>) = VariableAddress[x] : -# 2080| r2080_2(glval<unknown>) = 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<int>) = 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<unknown>) = 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<unknown>) = 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<int>) = VariableAddress[#return] : -# 2084| r2084_2(glval<int>) = 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<int>) = 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<unknown>) = 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<unknown>) = 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<int>) = VariableAddress[x] : -# 2093| r2093_2(glval<unknown>) = 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<int>) = 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<unknown>) = VariableAddress[#this] : +# 2092| m2092_6(glval<Base2>) = InitializeParameter[#this] : &:r2092_5 +# 2092| r2092_7(glval<Base2>) = 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<unknown>) = 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<unknown>) = VariableAddress[#this] : +# 2095| m2095_6(glval<Derived2>) = InitializeParameter[#this] : &:r2095_5 +# 2095| r2095_7(glval<Derived2>) = Load[#this] : &:r2095_5, m2095_6 +# 2095| m2095_8(Derived2) = InitializeIndirection[#this] : &:r2095_7 +# 2095| r2095_9(glval<Base2>) = ConvertToNonVirtualBase[Derived2 : Base2] : m2095_6 +# 2095| r2095_10(glval<unknown>) = 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<unknown>) = 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<int>) = VariableAddress[#return] : -# 2097| r2097_2(glval<int>) = 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<int>) = 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<unknown>) = VariableAddress[#this] : +# 2098| m2098_6(glval<Derived2>) = InitializeParameter[#this] : &:r2098_5 +# 2098| r2098_7(glval<Derived2>) = Load[#this] : &:r2098_5, m2098_6 +# 2098| m2098_8(Derived2) = InitializeIndirection[#this] : &:r2098_7 +# 2098| v2098_9(void) = NoOp : +# 2098| r2098_10(glval<Base2>) = ConvertToNonVirtualBase[Derived2 : Base2] : m2098_6 +# 2098| r2098_11(glval<unknown>) = 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<unsigned long>) = VariableAddress[n] : -# 2100| m2100_6(unsigned long) = InitializeParameter[n] : &:r2100_5 -# 2101| r2101_1(glval<unknown>) = FunctionAddress[operator new[]] : -# 2101| r2101_2(glval<unsigned long>) = 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<unknown>) = FunctionAddress[operator new[]] : -# 2102| r2102_2(glval<unsigned long>) = 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<unknown>) = FunctionAddress[operator new[]] : -# 2103| r2103_2(glval<unsigned long>) = 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<unknown>) = FunctionAddress[operator new[]] : -# 2104| r2104_2(glval<unsigned long>) = 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<unknown>) = FunctionAddress[operator new[]] : -# 2105| r2105_2(glval<unsigned long>) = 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<unknown>) = FunctionAddress[operator new[]] : -# 2106| r2106_2(glval<unsigned long>) = 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<void *>) = 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<char *>) = 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<char *>) = VariableAddress[end] : -# 2112| m2112_2(char *) = Uninitialized[end] : &:r2112_1 -# 2113| r2113_1(glval<double>) = VariableAddress[d] : -# 2113| r2113_2(glval<unknown>) = FunctionAddress[strtod] : -# 2113| r2113_3(glval<char *>) = VariableAddress[s] : -# 2113| r2113_4(char *) = Load[s] : &:r2113_3, m2111_6 -# 2113| r2113_5(char *) = Convert : r2113_4 -# 2113| r2113_6(glval<char *>) = 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<char *>) = VariableAddress[#return] : -# 2114| r2114_2(glval<char *>) = 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<char *>) = 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<Base2 *>) = VariableAddress[b1] : +# 2107| r2107_2(glval<unknown>) = 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<unknown>) = 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<unknown>) = VirtualDeleteFunctionAddress : +# 2108| r2108_2(glval<Base2 *>) = 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<Base2 *>) = VariableAddress[b2] : +# 2110| r2110_2(glval<unknown>) = 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<unknown>) = 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<unknown>) = VirtualDeleteFunctionAddress : +# 2111| r2111_2(glval<Base2 *>) = 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<Derived2 *>) = VariableAddress[d] : +# 2113| r2113_2(glval<unknown>) = 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<unknown>) = 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<unknown>) = VirtualDeleteFunctionAddress : +# 2114| r2114_2(glval<Derived2 *>) = 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<int>) = VariableAddress[#return] : +# 2115| m2115_2(int) = Uninitialized[#return] : &:r2115_1 +# 2105| r2105_5(glval<int>) = 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<HasOperatorBool>) = VariableAddress[b] : -# 2122| r2122_2(HasOperatorBool) = Constant[0] : -# 2122| m2122_3(HasOperatorBool) = Store[b] : &:r2122_1, r2122_2 -# 2122| r2122_4(glval<HasOperatorBool>) = VariableAddress[b] : -# 2122| r2122_5(glval<unknown>) = 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<int>) = VariableAddress[x] : +# 2120| r2120_2(int) = Constant[116] : +# 2120| m2120_3(int) = Store[x] : &:r2120_1, r2120_2 +# 2121| r2121_1(glval<unknown>) = 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<int>) = VariableAddress[x] : +# 2127| r2127_2(glval<unknown>) = 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<int>) = 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<unknown>) = 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<unknown>) = 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<int>) = VariableAddress[#return] : +# 2131| r2131_2(glval<int>) = 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<int>) = 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<unknown>) = 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<unknown>) = 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<int>) = VariableAddress[x] : +# 2140| r2140_2(glval<unknown>) = 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<int>) = 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<unknown>) = FunctionAddress[CallsNonExit] : +# 2142| v2142_2(void) = Call[CallsNonExit] : func:r2142_1 +# 2139| v2139_5(void) = Unreached : + +# 2143| Block 2 +# 2143| r2143_1(glval<unknown>) = 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<int>) = VariableAddress[#return] : +# 2144| r2144_2(glval<int>) = 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<int>) = 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<unsigned long>) = VariableAddress[n] : +# 2147| m2147_6(unsigned long) = InitializeParameter[n] : &:r2147_5 +# 2148| r2148_1(glval<unknown>) = FunctionAddress[operator new[]] : +# 2148| r2148_2(glval<unsigned long>) = 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<unknown>) = FunctionAddress[operator new[]] : +# 2149| r2149_2(glval<unsigned long>) = 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<unknown>) = FunctionAddress[operator new[]] : +# 2150| r2150_2(glval<unsigned long>) = 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<unknown>) = FunctionAddress[operator new[]] : +# 2151| r2151_2(glval<unsigned long>) = 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<unknown>) = FunctionAddress[operator new[]] : +# 2152| r2152_2(glval<unsigned long>) = 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<unknown>) = FunctionAddress[operator new[]] : +# 2153| r2153_2(glval<unsigned long>) = 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<char *>) = 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<char *>) = VariableAddress[end] : +# 2159| m2159_2(char *) = Uninitialized[end] : &:r2159_1 +# 2160| r2160_1(glval<double>) = VariableAddress[d] : +# 2160| r2160_2(glval<unknown>) = FunctionAddress[strtod] : +# 2160| r2160_3(glval<char *>) = VariableAddress[s] : +# 2160| r2160_4(char *) = Load[s] : &:r2160_3, m2158_6 +# 2160| r2160_5(char *) = Convert : r2160_4 +# 2160| r2160_6(glval<char *>) = 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<char *>) = VariableAddress[#return] : +# 2161| r2161_2(glval<char *>) = 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<char *>) = 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<HasOperatorBool>) = VariableAddress[b] : +# 2169| r2169_2(HasOperatorBool) = Constant[0] : +# 2169| m2169_3(HasOperatorBool) = Store[b] : &:r2169_1, r2169_2 +# 2169| r2169_4(glval<HasOperatorBool>) = VariableAddress[b] : +# 2169| r2169_5(glval<unknown>) = 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<unknown>) = VariableAddress[#this] : -# 2125| m2125_6(glval<ClassWithDestructor>) = InitializeParameter[#this] : &:r2125_5 -# 2125| r2125_7(glval<ClassWithDestructor>) = 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<unknown>) = VariableAddress[#this] : +# 2172| m2172_6(glval<ClassWithDestructor>) = InitializeParameter[#this] : &:r2172_5 +# 2172| r2172_7(glval<ClassWithDestructor>) = Load[#this] : &:r2172_5, m2172_6 +# 2172| m2172_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2172_7 #-----| r0_1(glval<ClassWithDestructor &>) = 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<char *>) = FieldAddress[x] : m2125_6 -# 2125| r2125_10(glval<ClassWithDestructor &>) = VariableAddress[(unnamed parameter 0)] : -# 2125| r2125_11(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2125_10, m0_2 -# 2125| r2125_12(glval<ClassWithDestructor>) = CopyValue : r2125_11 -# 2125| r2125_13(glval<char *>) = 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<char *>) = FieldAddress[x] : m2172_6 +# 2172| r2172_10(glval<ClassWithDestructor &>) = VariableAddress[(unnamed parameter 0)] : +# 2172| r2172_11(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2172_10, m0_2 +# 2172| r2172_12(glval<ClassWithDestructor>) = CopyValue : r2172_11 +# 2172| r2172_13(glval<char *>) = 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<unknown>) = VariableAddress[#this] : -# 2128| m2128_6(glval<ClassWithDestructor>) = InitializeParameter[#this] : &:r2128_5 -# 2128| r2128_7(glval<ClassWithDestructor>) = Load[#this] : &:r2128_5, m2128_6 -# 2128| m2128_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2128_7 -# 2128| r2128_9(glval<unknown>) = 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<unknown>) = VariableAddress[#this] : -# 2128| r2128_17(ClassWithDestructor *) = Load[#this] : &:r2128_16, m2128_6 -# 2128| r2128_18(glval<char *>) = 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<unknown>) = VariableAddress[#this] : +# 2175| m2175_6(glval<ClassWithDestructor>) = InitializeParameter[#this] : &:r2175_5 +# 2175| r2175_7(glval<ClassWithDestructor>) = Load[#this] : &:r2175_5, m2175_6 +# 2175| m2175_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2175_7 +# 2175| r2175_9(glval<unknown>) = 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<unknown>) = VariableAddress[#this] : +# 2175| r2175_17(ClassWithDestructor *) = Load[#this] : &:r2175_16, m2175_6 +# 2175| r2175_18(glval<char *>) = 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<unknown>) = VariableAddress[#this] : -# 2129| m2129_6(glval<ClassWithDestructor>) = InitializeParameter[#this] : &:r2129_5 -# 2129| r2129_7(glval<ClassWithDestructor>) = Load[#this] : &:r2129_5, m2129_6 -# 2129| m2129_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2129_7 -# 2129| r2129_9(glval<unknown>) = FunctionAddress[operator delete] : -# 2129| r2129_10(glval<unknown>) = VariableAddress[#this] : -# 2129| r2129_11(ClassWithDestructor *) = Load[#this] : &:r2129_10, m2129_6 -# 2129| r2129_12(glval<char *>) = 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<unknown>) = VariableAddress[#this] : +# 2176| m2176_6(glval<ClassWithDestructor>) = InitializeParameter[#this] : &:r2176_5 +# 2176| r2176_7(glval<ClassWithDestructor>) = Load[#this] : &:r2176_5, m2176_6 +# 2176| m2176_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2176_7 +# 2176| r2176_9(glval<unknown>) = FunctionAddress[operator delete] : +# 2176| r2176_10(glval<unknown>) = VariableAddress[#this] : +# 2176| r2176_11(ClassWithDestructor *) = Load[#this] : &:r2176_10, m2176_6 +# 2176| r2176_12(glval<char *>) = 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<unknown>) = VariableAddress[#this] : -# 2131| m2131_6(glval<ClassWithDestructor>) = InitializeParameter[#this] : &:r2131_5 -# 2131| r2131_7(glval<ClassWithDestructor>) = Load[#this] : &:r2131_5, m2131_6 -# 2131| m2131_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2131_7 -# 2131| r2131_9(glval<char>) = VariableAddress[y] : -# 2131| m2131_10(char) = InitializeParameter[y] : &:r2131_9 -# 2131| r2131_11(glval<char>) = VariableAddress[y] : -# 2131| r2131_12(char) = Load[y] : &:r2131_11, m2131_10 -# 2131| r2131_13(glval<unknown>) = VariableAddress[#this] : -# 2131| r2131_14(ClassWithDestructor *) = Load[#this] : &:r2131_13, m2131_6 -# 2131| r2131_15(glval<char *>) = FieldAddress[x] : r2131_14 -# 2131| r2131_16(char *) = Load[?] : &:r2131_15, ~m2131_8 -# 2131| r2131_17(glval<char>) = 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<unknown>) = VariableAddress[#this] : +# 2178| m2178_6(glval<ClassWithDestructor>) = InitializeParameter[#this] : &:r2178_5 +# 2178| r2178_7(glval<ClassWithDestructor>) = Load[#this] : &:r2178_5, m2178_6 +# 2178| m2178_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2178_7 +# 2178| r2178_9(glval<char>) = VariableAddress[y] : +# 2178| m2178_10(char) = InitializeParameter[y] : &:r2178_9 +# 2178| r2178_11(glval<char>) = VariableAddress[y] : +# 2178| r2178_12(char) = Load[y] : &:r2178_11, m2178_10 +# 2178| r2178_13(glval<unknown>) = VariableAddress[#this] : +# 2178| r2178_14(ClassWithDestructor *) = Load[#this] : &:r2178_13, m2178_6 +# 2178| r2178_15(glval<char *>) = FieldAddress[x] : r2178_14 +# 2178| r2178_16(char *) = Load[?] : &:r2178_15, ~m2178_8 +# 2178| r2178_17(glval<char>) = 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<unknown>) = VariableAddress[#this] : -# 2132| m2132_6(glval<ClassWithDestructor>) = InitializeParameter[#this] : &:r2132_5 -# 2132| r2132_7(glval<ClassWithDestructor>) = Load[#this] : &:r2132_5, m2132_6 -# 2132| m2132_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2132_7 -# 2132| r2132_9(glval<char>) = VariableAddress[#return] : -# 2132| r2132_10(glval<unknown>) = VariableAddress[#this] : -# 2132| r2132_11(ClassWithDestructor *) = Load[#this] : &:r2132_10, m2132_6 -# 2132| r2132_12(glval<char *>) = 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<char>) = 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<bool>) = 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<bool>) = VariableAddress[b] : -# 2137| m2137_6(bool) = InitializeParameter[b] : &:r2137_5 -# 2137| r2137_7(glval<char>) = VariableAddress[c] : -# 2137| m2137_8(char) = InitializeParameter[c] : &:r2137_7 -# 2138| r2138_1(glval<ClassWithDestructor>) = VariableAddress[x] : -# 2138| m2138_2(ClassWithDestructor) = Uninitialized[x] : &:r2138_1 -# 2138| r2138_3(glval<unknown>) = 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<bool>) = 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<ClassWithDestructor>) = VariableAddress[x] : -# 2139| r2139_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : -# 2139| r2139_11(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : -# 2141| m2141_3(ClassWithDestructor) = Uninitialized[x] : &:r2141_2 -# 2141| r2141_4(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : -# 2142| r2142_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : -# 2144| m2144_2(ClassWithDestructor) = Uninitialized[x] : &:r2144_1 -# 2144| r2144_3(glval<unknown>) = 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<char>) = 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<ClassWithDestructor>) = VariableAddress[x] : -# 2146| r2146_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : -# 2149| r2149_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : -# 2153| m2153_2(ClassWithDestructor) = Uninitialized[x] : &:r2153_1 -# 2153| r2153_3(glval<unknown>) = 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<vector<ClassWithDestructor>>) = VariableAddress[ys] : -# 2154| m2154_2(vector<ClassWithDestructor>) = Uninitialized[ys] : &:r2154_1 -# 2154| r2154_3(glval<unknown>) = FunctionAddress[vector] : -# 2154| r2154_4(glval<ClassWithDestructor>) = VariableAddress[#temp2154:40] : -# 2154| r2154_5(glval<ClassWithDestructor>) = 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<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2154_1 -# 2154| m2154_13(vector<ClassWithDestructor>) = Chi : total:m2154_2, partial:m2154_12 -# 2154| r2154_14(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2154| r2154_15(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : -# 2154| r2154_16(vector<ClassWithDestructor> &) = CopyValue : r2154_15 -# 2154| m2154_17(vector<ClassWithDestructor> &) = Store[(__range)] : &:r2154_14, r2154_16 -# 2154| r2154_18(glval<iterator>) = VariableAddress[(__begin)] : -# 2154| r2154_19(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2154| r2154_20(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2154_19, m2154_17 -#-----| r0_1(glval<vector<ClassWithDestructor>>) = CopyValue : r2154_20 -#-----| r0_2(glval<vector<ClassWithDestructor>>) = Convert : r0_1 -# 2154| r2154_21(glval<unknown>) = 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<iterator>) = VariableAddress[(__end)] : -# 2154| r2154_27(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2154| r2154_28(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2154_27, m2154_17 -#-----| r0_4(glval<vector<ClassWithDestructor>>) = CopyValue : r2154_28 -#-----| r0_5(glval<vector<ClassWithDestructor>>) = Convert : r0_4 -# 2154| r2154_29(glval<unknown>) = 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<iterator>) = VariableAddress[(__begin)] : -#-----| r0_7(glval<iterator>) = Convert : r2154_36 -# 2154| r2154_37(glval<unknown>) = FunctionAddress[operator!=] : -# 2154| r2154_38(glval<iterator>) = 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<ClassWithDestructor>) = VariableAddress[y] : -# 2154| r2154_45(glval<iterator>) = VariableAddress[(__begin)] : -#-----| r0_9(glval<iterator>) = Convert : r2154_45 -# 2154| r2154_46(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[y] : -# 2155| r2155_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[y] : -# 2154| r2154_53(glval<unknown>) = 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<iterator>) = VariableAddress[(__begin)] : -# 2154| r2154_61(glval<unknown>) = 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<iterator>) = CopyValue : r2154_62 -#-----| Goto (back edge) -> Block 8 - -# 2157| Block 10 -# 2157| r2157_1(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : -# 2157| m2157_2(vector<ClassWithDestructor>) = Uninitialized[ys] : &:r2157_1 -# 2157| r2157_3(glval<unknown>) = FunctionAddress[vector] : -# 2157| r2157_4(glval<ClassWithDestructor>) = VariableAddress[#temp2157:40] : -# 2157| r2157_5(glval<ClassWithDestructor>) = 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<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2157_1 -# 2157| m2157_13(vector<ClassWithDestructor>) = Chi : total:m2157_2, partial:m2157_12 -# 2157| r2157_14(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2157| r2157_15(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : -# 2157| r2157_16(vector<ClassWithDestructor> &) = CopyValue : r2157_15 -# 2157| m2157_17(vector<ClassWithDestructor> &) = Store[(__range)] : &:r2157_14, r2157_16 -# 2157| r2157_18(glval<iterator>) = VariableAddress[(__begin)] : -# 2157| r2157_19(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2157| r2157_20(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2157_19, m2157_17 -#-----| r0_11(glval<vector<ClassWithDestructor>>) = CopyValue : r2157_20 -#-----| r0_12(glval<vector<ClassWithDestructor>>) = Convert : r0_11 -# 2157| r2157_21(glval<unknown>) = 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<iterator>) = VariableAddress[(__end)] : -# 2157| r2157_27(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2157| r2157_28(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2157_27, m2157_17 -#-----| r0_14(glval<vector<ClassWithDestructor>>) = CopyValue : r2157_28 -#-----| r0_15(glval<vector<ClassWithDestructor>>) = Convert : r0_14 -# 2157| r2157_29(glval<unknown>) = 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<iterator>) = VariableAddress[(__begin)] : -#-----| r0_17(glval<iterator>) = Convert : r2157_36 -# 2157| r2157_37(glval<unknown>) = FunctionAddress[operator!=] : -# 2157| r2157_38(glval<iterator>) = 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<ClassWithDestructor>) = VariableAddress[y] : -# 2157| r2157_45(glval<iterator>) = VariableAddress[(__begin)] : -#-----| r0_19(glval<iterator>) = Convert : r2157_45 -# 2157| r2157_46(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[y] : -# 2158| r2158_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[y] : -# 2159| r2159_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[y] : -# 2157| r2157_53(glval<unknown>) = 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<vector<ClassWithDestructor>>) = VariableAddress[ys] : -# 2157| r2157_61(glval<unknown>) = 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<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2157_60 -# 2157| m2157_67(vector<ClassWithDestructor>) = Chi : total:m2157_13, partial:m2157_66 -# 2172| r2172_1(glval<ClassWithDestructor>) = VariableAddress[x] : -# 2172| r2172_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[y] : -# 2157| r2157_69(glval<unknown>) = 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<iterator>) = VariableAddress[(__begin)] : -# 2157| r2157_77(glval<unknown>) = 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<iterator>) = CopyValue : r2157_78 -#-----| Goto (back edge) -> Block 11 - -# 2163| Block 15 -# 2163| r2163_1(glval<vector<int>>) = VariableAddress[ys] : -# 2163| m2163_2(vector<int>) = Uninitialized[ys] : &:r2163_1 -# 2163| r2163_3(glval<unknown>) = 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<int>) = ^IndirectMayWriteSideEffect[-1] : &:r2163_1 -# 2163| m2163_9(vector<int>) = Chi : total:m2163_2, partial:m2163_8 -# 2163| r2163_10(glval<vector<int> &>) = VariableAddress[(__range)] : -# 2163| r2163_11(glval<vector<int>>) = VariableAddress[ys] : -# 2163| r2163_12(vector<int> &) = CopyValue : r2163_11 -# 2163| m2163_13(vector<int> &) = Store[(__range)] : &:r2163_10, r2163_12 -# 2163| r2163_14(glval<iterator>) = VariableAddress[(__begin)] : -# 2163| r2163_15(glval<vector<int> &>) = VariableAddress[(__range)] : -# 2163| r2163_16(vector<int> &) = Load[(__range)] : &:r2163_15, m2163_13 -#-----| r0_21(glval<vector<int>>) = CopyValue : r2163_16 -#-----| r0_22(glval<vector<int>>) = Convert : r0_21 -# 2163| r2163_17(glval<unknown>) = 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<iterator>) = VariableAddress[(__end)] : -# 2163| r2163_23(glval<vector<int> &>) = VariableAddress[(__range)] : -# 2163| r2163_24(vector<int> &) = Load[(__range)] : &:r2163_23, m2163_13 -#-----| r0_24(glval<vector<int>>) = CopyValue : r2163_24 -#-----| r0_25(glval<vector<int>>) = Convert : r0_24 -# 2163| r2163_25(glval<unknown>) = 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<iterator>) = VariableAddress[(__begin)] : -#-----| r0_27(glval<iterator>) = Convert : r2163_32 -# 2163| r2163_33(glval<unknown>) = FunctionAddress[operator!=] : -# 2163| r2163_34(glval<iterator>) = 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<iterator>) = VariableAddress[(__begin)] : -# 2163| r2163_41(glval<unknown>) = 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<iterator>) = CopyValue : r2163_42 -#-----| Goto (back edge) -> Block 16 - -# 2163| Block 18 -# 2163| r2163_49(glval<int>) = VariableAddress[y] : -# 2163| r2163_50(glval<iterator>) = VariableAddress[(__begin)] : -#-----| r0_29(glval<iterator>) = Convert : r2163_50 -# 2163| r2163_51(glval<unknown>) = 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<int>) = 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<vector<int>>) = VariableAddress[ys] : -# 2163| r2163_58(glval<unknown>) = 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<int>) = ^IndirectMayWriteSideEffect[-1] : &:r2163_57 -# 2163| m2163_64(vector<int>) = Chi : total:m2163_9, partial:m2163_63 -# 2172| r2172_9(glval<ClassWithDestructor>) = VariableAddress[x] : -# 2172| r2172_10(glval<unknown>) = 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<vector<ClassWithDestructor>>) = VariableAddress[ys] : -# 2168| m2168_2(vector<ClassWithDestructor>) = Uninitialized[ys] : &:r2168_1 -# 2168| r2168_3(glval<unknown>) = FunctionAddress[vector] : -# 2168| r2168_4(glval<ClassWithDestructor>) = VariableAddress[#temp2168:40] : -# 2168| r2168_5(glval<ClassWithDestructor>) = 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<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2168_1 -# 2168| m2168_13(vector<ClassWithDestructor>) = Chi : total:m2168_2, partial:m2168_12 -# 2168| r2168_14(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2168| r2168_15(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : -# 2168| r2168_16(vector<ClassWithDestructor> &) = CopyValue : r2168_15 -# 2168| m2168_17(vector<ClassWithDestructor> &) = Store[(__range)] : &:r2168_14, r2168_16 -# 2168| r2168_18(glval<iterator>) = VariableAddress[(__begin)] : -# 2168| r2168_19(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2168| r2168_20(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2168_19, m2168_17 -#-----| r0_31(glval<vector<ClassWithDestructor>>) = CopyValue : r2168_20 -#-----| r0_32(glval<vector<ClassWithDestructor>>) = Convert : r0_31 -# 2168| r2168_21(glval<unknown>) = 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<iterator>) = VariableAddress[(__end)] : -# 2168| r2168_27(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2168| r2168_28(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2168_27, m2168_17 -#-----| r0_34(glval<vector<ClassWithDestructor>>) = CopyValue : r2168_28 -#-----| r0_35(glval<vector<ClassWithDestructor>>) = Convert : r0_34 -# 2168| r2168_29(glval<unknown>) = 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<iterator>) = VariableAddress[(__begin)] : -#-----| r0_37(glval<iterator>) = Convert : r2168_36 -# 2168| r2168_37(glval<unknown>) = FunctionAddress[operator!=] : -# 2168| r2168_38(glval<iterator>) = 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<ClassWithDestructor>) = VariableAddress[y] : -# 2168| r2168_45(glval<iterator>) = VariableAddress[(__begin)] : -#-----| r0_39(glval<iterator>) = Convert : r2168_45 -# 2168| r2168_46(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[z1] : -# 2169| m2169_2(ClassWithDestructor) = Uninitialized[z1] : &:r2169_1 -# 2169| r2169_3(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[z2] : -# 2170| m2170_2(ClassWithDestructor) = Uninitialized[z2] : &:r2170_1 -# 2170| r2170_3(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[z2] : -# 2171| r2171_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[z1] : -# 2171| r2171_10(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[y] : -# 2168| r2168_53(glval<unknown>) = 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<iterator>) = VariableAddress[(__begin)] : -# 2168| r2168_61(glval<unknown>) = 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<iterator>) = CopyValue : r2168_62 -#-----| Goto (back edge) -> Block 21 - -# 2172| Block 23 -# 2172| v2172_17(void) = NoOp : -# 2172| r2172_18(glval<ClassWithDestructor>) = VariableAddress[x] : -# 2172| r2172_19(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[a] : -# 2175| m2175_2(ClassWithDestructor) = Uninitialized[a] : &:r2175_1 -# 2175| r2175_3(glval<unknown>) = 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<bool>) = 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<ClassWithDestructor>) = VariableAddress[b] : -#-----| r0_1(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[a] : -# 2177| r2177_4(glval<unknown>) = 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<bool>) = 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<unknown>) = VariableAddress[#this] : +# 2179| m2179_6(glval<ClassWithDestructor>) = InitializeParameter[#this] : &:r2179_5 +# 2179| r2179_7(glval<ClassWithDestructor>) = Load[#this] : &:r2179_5, m2179_6 +# 2179| m2179_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2179_7 +# 2179| r2179_9(glval<char>) = VariableAddress[#return] : +# 2179| r2179_10(glval<unknown>) = VariableAddress[#this] : +# 2179| r2179_11(ClassWithDestructor *) = Load[#this] : &:r2179_10, m2179_6 +# 2179| r2179_12(glval<char *>) = 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<char>) = 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<ClassWithDestructor>) = VariableAddress[a] : -#-----| r0_1(glval<unknown>) = 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<bool>) = 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<ClassWithDestructor>) = VariableAddress[b] : -# 2181| m2181_3(ClassWithDestructor) = Uninitialized[b] : &:r2181_2 -# 2181| r2181_4(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[b] : -# 2182| r2182_3(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[a] : -# 2185| m2185_2(ClassWithDestructor) = Uninitialized[a] : &:r2185_1 +# 2184| r2184_5(glval<bool>) = VariableAddress[b] : +# 2184| m2184_6(bool) = InitializeParameter[b] : &:r2184_5 +# 2184| r2184_7(glval<char>) = VariableAddress[c] : +# 2184| m2184_8(char) = InitializeParameter[c] : &:r2184_7 +# 2185| r2185_1(glval<ClassWithDestructor>) = VariableAddress[x] : +# 2185| m2185_2(ClassWithDestructor) = Uninitialized[x] : &:r2185_1 # 2185| r2185_3(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[b] : -# 2186| m2186_2(ClassWithDestructor) = Uninitialized[b] : &:r2186_1 -# 2186| r2186_3(glval<unknown>) = 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<bool>) = 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<bool>) = 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<ClassWithDestructor>) = VariableAddress[x] : +# 2186| r2186_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : +# 2186| r2186_11(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : +# 2188| m2188_3(ClassWithDestructor) = Uninitialized[x] : &:r2188_2 +# 2188| r2188_4(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : +# 2189| r2189_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : +# 2191| m2191_2(ClassWithDestructor) = Uninitialized[x] : &:r2191_1 +# 2191| r2191_3(glval<unknown>) = 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<char>) = 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<ClassWithDestructor>) = VariableAddress[x] : +# 2193| r2193_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : +# 2196| r2196_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : +# 2200| m2200_2(ClassWithDestructor) = Uninitialized[x] : &:r2200_1 +# 2200| r2200_3(glval<unknown>) = 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<vector<ClassWithDestructor>>) = VariableAddress[ys] : +# 2201| m2201_2(vector<ClassWithDestructor>) = Uninitialized[ys] : &:r2201_1 +# 2201| r2201_3(glval<unknown>) = FunctionAddress[vector] : +# 2201| r2201_4(glval<ClassWithDestructor>) = VariableAddress[#temp2201:45] : +# 2201| r2201_5(glval<ClassWithDestructor>) = 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<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2201_1 +# 2201| m2201_13(vector<ClassWithDestructor>) = Chi : total:m2201_2, partial:m2201_12 +# 2201| r2201_14(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2201| r2201_15(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : +# 2201| r2201_16(vector<ClassWithDestructor> &) = CopyValue : r2201_15 +# 2201| m2201_17(vector<ClassWithDestructor> &) = Store[(__range)] : &:r2201_14, r2201_16 +# 2201| r2201_18(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +# 2201| r2201_19(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2201| r2201_20(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2201_19, m2201_17 +#-----| r0_1(glval<vector<ClassWithDestructor>>) = CopyValue : r2201_20 +#-----| r0_2(glval<vector<ClassWithDestructor>>) = Convert : r0_1 +# 2201| r2201_21(glval<unknown>) = FunctionAddress[begin] : +# 2201| r2201_22(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[begin] : func:r2201_21, this:r0_2 +# 2201| m2201_23(unknown) = ^CallSideEffect : ~m2201_11 +# 2201| m2201_24(unknown) = Chi : total:m2201_11, partial:m2201_23 +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2201_13 +# 2201| m2201_25(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__begin)] : &:r2201_18, r2201_22 +# 2201| r2201_26(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +# 2201| r2201_27(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2201| r2201_28(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2201_27, m2201_17 +#-----| r0_4(glval<vector<ClassWithDestructor>>) = CopyValue : r2201_28 +#-----| r0_5(glval<vector<ClassWithDestructor>>) = Convert : r0_4 +# 2201| r2201_29(glval<unknown>) = FunctionAddress[end] : +# 2201| r2201_30(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[end] : func:r2201_29, this:r0_5 +# 2201| m2201_31(unknown) = ^CallSideEffect : ~m2201_24 +# 2201| m2201_32(unknown) = Chi : total:m2201_24, partial:m2201_31 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2201_13 +# 2201| m2201_33(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__end)] : &:r2201_26, r2201_30 +#-----| Goto -> Block 8 + +# 2201| Block 8 +# 2201| m2201_34(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Phi : from 7:m2201_25, from 9:m2201_72 +# 2201| m2201_35(unknown) = Phi : from 7:~m2201_32, from 9:~m2201_69 +# 2201| r2201_36(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_7(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2201_36 +# 2201| r2201_37(glval<unknown>) = FunctionAddress[operator!=] : +#-----| r0_8(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[#temp0:0] : +#-----| m0_9(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Uninitialized[#temp0:0] : &:r0_8 +# 2201| r2201_38(glval<unknown>) = FunctionAddress[iterator] : +# 2201| r2201_39(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +#-----| r0_10(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2201_39 +#-----| r0_11(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = CopyValue : r0_10 +# 2201| v2201_40(void) = Call[iterator] : func:r2201_38, this:r0_8, 0:r0_11 +# 2201| m2201_41(unknown) = ^CallSideEffect : ~m2201_35 +# 2201| m2201_42(unknown) = Chi : total:m2201_35, partial:m2201_41 +#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m2201_33 +# 2201| m2201_43(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +# 2201| m2201_44(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m0_9, partial:m2201_43 +#-----| r0_13(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Load[#temp0:0] : &:r0_8, m2201_44 +# 2201| r2201_45(bool) = Call[operator!=] : func:r2201_37, this:r0_7, 0:r0_13 +# 2201| m2201_46(unknown) = ^CallSideEffect : ~m2201_42 +# 2201| m2201_47(unknown) = Chi : total:m2201_42, partial:m2201_46 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2201_34 +# 2201| v2201_48(void) = ConditionalBranch : r2201_45 +#-----| False -> Block 10 +#-----| True -> Block 9 + +# 2201| Block 9 +# 2201| r2201_49(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2201| r2201_50(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_15(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2201_50 +# 2201| r2201_51(glval<unknown>) = FunctionAddress[operator*] : +# 2201| r2201_52(ClassWithDestructor &) = Call[operator*] : func:r2201_51, this:r0_15 +# 2201| m2201_53(unknown) = ^CallSideEffect : ~m2201_47 +# 2201| m2201_54(unknown) = Chi : total:m2201_47, partial:m2201_53 +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2201_34 +# 2201| r2201_55(ClassWithDestructor) = Load[?] : &:r2201_52, ~m2201_54 +# 2201| m2201_56(ClassWithDestructor) = Store[y] : &:r2201_49, r2201_55 +# 2202| r2202_1(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2202| r2202_2(glval<unknown>) = 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_54 +# 2202| m2202_6(unknown) = Chi : total:m2201_54, partial:m2202_5 +# 2202| v2202_7(void) = ^IndirectReadSideEffect[-1] : &:r2202_1, m2201_56 +# 2202| m2202_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2202_1 +# 2202| m2202_9(ClassWithDestructor) = Chi : total:m2201_56, partial:m2202_8 +# 2201| r2201_57(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2201| r2201_58(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : +# 2201| v2201_59(void) = Call[~ClassWithDestructor] : func:r2201_58, this:r2201_57 +# 2201| m2201_60(unknown) = ^CallSideEffect : ~m2202_6 +# 2201| m2201_61(unknown) = Chi : total:m2202_6, partial:m2201_60 +# 2201| v2201_62(void) = ^IndirectReadSideEffect[-1] : &:r2201_57, m2202_9 +# 2201| m2201_63(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2201_57 +# 2201| m2201_64(ClassWithDestructor) = Chi : total:m2202_9, partial:m2201_63 +# 2201| r2201_65(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +# 2201| r2201_66(glval<unknown>) = FunctionAddress[operator++] : +# 2201| r2201_67(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = Call[operator++] : func:r2201_66, this:r2201_65 +# 2201| m2201_68(unknown) = ^CallSideEffect : ~m2201_61 +# 2201| m2201_69(unknown) = Chi : total:m2201_61, partial:m2201_68 +# 2201| v2201_70(void) = ^IndirectReadSideEffect[-1] : &:r2201_65, m2201_34 +# 2201| m2201_71(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2201_65 +# 2201| m2201_72(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m2201_34, partial:m2201_71 +# 2201| r2201_73(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2201_67 +#-----| Goto (back edge) -> Block 8 + +# 2204| Block 10 +# 2204| r2204_1(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : +# 2204| m2204_2(vector<ClassWithDestructor>) = Uninitialized[ys] : &:r2204_1 +# 2204| r2204_3(glval<unknown>) = FunctionAddress[vector] : +# 2204| r2204_4(glval<ClassWithDestructor>) = VariableAddress[#temp2204:45] : +# 2204| r2204_5(glval<ClassWithDestructor>) = 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_47 +# 2204| m2204_11(unknown) = Chi : total:m2201_47, partial:m2204_10 +# 2204| m2204_12(vector<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2204_1 +# 2204| m2204_13(vector<ClassWithDestructor>) = Chi : total:m2204_2, partial:m2204_12 +# 2204| r2204_14(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2204| r2204_15(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : +# 2204| r2204_16(vector<ClassWithDestructor> &) = CopyValue : r2204_15 +# 2204| m2204_17(vector<ClassWithDestructor> &) = Store[(__range)] : &:r2204_14, r2204_16 +# 2204| r2204_18(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +# 2204| r2204_19(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2204| r2204_20(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2204_19, m2204_17 +#-----| r0_17(glval<vector<ClassWithDestructor>>) = CopyValue : r2204_20 +#-----| r0_18(glval<vector<ClassWithDestructor>>) = Convert : r0_17 +# 2204| r2204_21(glval<unknown>) = FunctionAddress[begin] : +# 2204| r2204_22(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[begin] : func:r2204_21, this:r0_18 +# 2204| m2204_23(unknown) = ^CallSideEffect : ~m2204_11 +# 2204| m2204_24(unknown) = Chi : total:m2204_11, partial:m2204_23 +#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, m2204_13 +# 2204| m2204_25(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__begin)] : &:r2204_18, r2204_22 +# 2204| r2204_26(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +# 2204| r2204_27(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2204| r2204_28(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2204_27, m2204_17 +#-----| r0_20(glval<vector<ClassWithDestructor>>) = CopyValue : r2204_28 +#-----| r0_21(glval<vector<ClassWithDestructor>>) = Convert : r0_20 +# 2204| r2204_29(glval<unknown>) = FunctionAddress[end] : +# 2204| r2204_30(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[end] : func:r2204_29, this:r0_21 +# 2204| m2204_31(unknown) = ^CallSideEffect : ~m2204_24 +# 2204| m2204_32(unknown) = Chi : total:m2204_24, partial:m2204_31 +#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_21, m2204_13 +# 2204| m2204_33(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__end)] : &:r2204_26, r2204_30 +#-----| Goto -> Block 11 + +# 2204| Block 11 +# 2204| m2204_34(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Phi : from 10:m2204_25, from 14:m2204_88 +# 2204| m2204_35(unknown) = Phi : from 10:~m2204_32, from 14:~m2204_85 +# 2204| r2204_36(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_23(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2204_36 +# 2204| r2204_37(glval<unknown>) = FunctionAddress[operator!=] : +#-----| r0_24(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[#temp0:0] : +#-----| m0_25(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Uninitialized[#temp0:0] : &:r0_24 +# 2204| r2204_38(glval<unknown>) = FunctionAddress[iterator] : +# 2204| r2204_39(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +#-----| r0_26(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2204_39 +#-----| r0_27(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = CopyValue : r0_26 +# 2204| v2204_40(void) = Call[iterator] : func:r2204_38, this:r0_24, 0:r0_27 +# 2204| m2204_41(unknown) = ^CallSideEffect : ~m2204_35 +# 2204| m2204_42(unknown) = Chi : total:m2204_35, partial:m2204_41 +#-----| v0_28(void) = ^BufferReadSideEffect[0] : &:r0_27, ~m2204_33 +# 2204| m2204_43(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_24 +# 2204| m2204_44(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m0_25, partial:m2204_43 +#-----| r0_29(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Load[#temp0:0] : &:r0_24, m2204_44 +# 2204| r2204_45(bool) = Call[operator!=] : func:r2204_37, this:r0_23, 0:r0_29 +# 2204| m2204_46(unknown) = ^CallSideEffect : ~m2204_42 +# 2204| m2204_47(unknown) = Chi : total:m2204_42, partial:m2204_46 +#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_23, m2204_34 +# 2204| v2204_48(void) = ConditionalBranch : r2204_45 +#-----| False -> Block 15 +#-----| True -> Block 12 + +# 2204| Block 12 +# 2204| r2204_49(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2204| r2204_50(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_31(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2204_50 +# 2204| r2204_51(glval<unknown>) = FunctionAddress[operator*] : +# 2204| r2204_52(ClassWithDestructor &) = Call[operator*] : func:r2204_51, this:r0_31 +# 2204| m2204_53(unknown) = ^CallSideEffect : ~m2204_47 +# 2204| m2204_54(unknown) = Chi : total:m2204_47, partial:m2204_53 +#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, m2204_34 +# 2204| r2204_55(ClassWithDestructor) = Load[?] : &:r2204_52, ~m2204_54 +# 2204| m2204_56(ClassWithDestructor) = Store[y] : &:r2204_49, r2204_55 +# 2205| r2205_1(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2205| r2205_2(glval<unknown>) = 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_54 +# 2205| m2205_6(unknown) = Chi : total:m2204_54, partial:m2205_5 +# 2205| v2205_7(void) = ^IndirectReadSideEffect[-1] : &:r2205_1, m2204_56 +# 2205| m2205_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2205_1 +# 2205| m2205_9(ClassWithDestructor) = Chi : total:m2204_56, partial:m2205_8 +# 2206| r2206_1(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2206| r2206_2(glval<unknown>) = 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_57(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2204| r2204_58(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : +# 2204| v2204_59(void) = Call[~ClassWithDestructor] : func:r2204_58, this:r2204_57 +# 2204| m2204_60(unknown) = ^CallSideEffect : ~m2206_5 +# 2204| m2204_61(unknown) = Chi : total:m2206_5, partial:m2204_60 +# 2204| v2204_62(void) = ^IndirectReadSideEffect[-1] : &:r2204_57, m2206_8 +# 2204| m2204_63(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2204_57 +# 2204| m2204_64(ClassWithDestructor) = Chi : total:m2206_8, partial:m2204_63 +# 2204| r2204_65(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : +# 2204| r2204_66(glval<unknown>) = FunctionAddress[~vector] : +# 2204| v2204_67(void) = Call[~vector] : func:r2204_66, this:r2204_65 +# 2204| m2204_68(unknown) = ^CallSideEffect : ~m2204_61 +# 2204| m2204_69(unknown) = Chi : total:m2204_61, partial:m2204_68 +# 2204| v2204_70(void) = ^IndirectReadSideEffect[-1] : &:r2204_65, m2204_13 +# 2204| m2204_71(vector<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2204_65 +# 2204| m2204_72(vector<ClassWithDestructor>) = Chi : total:m2204_13, partial:m2204_71 +# 2219| r2219_1(glval<ClassWithDestructor>) = VariableAddress[x] : +# 2219| r2219_2(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : +# 2219| v2219_3(void) = Call[~ClassWithDestructor] : func:r2219_2, this:r2219_1 +# 2219| m2219_4(unknown) = ^CallSideEffect : ~m2204_69 +# 2219| m2219_5(unknown) = Chi : total:m2204_69, 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_73(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2204| r2204_74(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : +# 2204| v2204_75(void) = Call[~ClassWithDestructor] : func:r2204_74, this:r2204_73 +# 2204| m2204_76(unknown) = ^CallSideEffect : ~m2206_5 +# 2204| m2204_77(unknown) = Chi : total:m2206_5, partial:m2204_76 +# 2204| v2204_78(void) = ^IndirectReadSideEffect[-1] : &:r2204_73, m2206_8 +# 2204| m2204_79(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2204_73 +# 2204| m2204_80(ClassWithDestructor) = Chi : total:m2206_8, partial:m2204_79 +# 2204| r2204_81(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +# 2204| r2204_82(glval<unknown>) = FunctionAddress[operator++] : +# 2204| r2204_83(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = Call[operator++] : func:r2204_82, this:r2204_81 +# 2204| m2204_84(unknown) = ^CallSideEffect : ~m2204_77 +# 2204| m2204_85(unknown) = Chi : total:m2204_77, partial:m2204_84 +# 2204| v2204_86(void) = ^IndirectReadSideEffect[-1] : &:r2204_81, m2204_34 +# 2204| m2204_87(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2204_81 +# 2204| m2204_88(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m2204_34, partial:m2204_87 +# 2204| r2204_89(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2204_83 +#-----| Goto (back edge) -> Block 11 + +# 2210| Block 15 +# 2210| r2210_1(glval<vector<int>>) = VariableAddress[ys] : +# 2210| m2210_2(vector<int>) = Uninitialized[ys] : &:r2210_1 +# 2210| r2210_3(glval<unknown>) = 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_47 +# 2210| m2210_7(unknown) = Chi : total:m2204_47, partial:m2210_6 +# 2210| m2210_8(vector<int>) = ^IndirectMayWriteSideEffect[-1] : &:r2210_1 +# 2210| m2210_9(vector<int>) = Chi : total:m2210_2, partial:m2210_8 +# 2210| r2210_10(glval<vector<int> &>) = VariableAddress[(__range)] : +# 2210| r2210_11(glval<vector<int>>) = VariableAddress[ys] : +# 2210| r2210_12(vector<int> &) = CopyValue : r2210_11 +# 2210| m2210_13(vector<int> &) = Store[(__range)] : &:r2210_10, r2210_12 +# 2210| r2210_14(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +# 2210| r2210_15(glval<vector<int> &>) = VariableAddress[(__range)] : +# 2210| r2210_16(vector<int> &) = Load[(__range)] : &:r2210_15, m2210_13 +#-----| r0_33(glval<vector<int>>) = CopyValue : r2210_16 +#-----| r0_34(glval<vector<int>>) = Convert : r0_33 +# 2210| r2210_17(glval<unknown>) = FunctionAddress[begin] : +# 2210| r2210_18(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[begin] : func:r2210_17, this:r0_34 +# 2210| m2210_19(unknown) = ^CallSideEffect : ~m2210_7 +# 2210| m2210_20(unknown) = Chi : total:m2210_7, partial:m2210_19 +#-----| v0_35(void) = ^IndirectReadSideEffect[-1] : &:r0_34, m2210_9 +# 2210| m2210_21(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__begin)] : &:r2210_14, r2210_18 +# 2210| r2210_22(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +# 2210| r2210_23(glval<vector<int> &>) = VariableAddress[(__range)] : +# 2210| r2210_24(vector<int> &) = Load[(__range)] : &:r2210_23, m2210_13 +#-----| r0_36(glval<vector<int>>) = CopyValue : r2210_24 +#-----| r0_37(glval<vector<int>>) = Convert : r0_36 +# 2210| r2210_25(glval<unknown>) = FunctionAddress[end] : +# 2210| r2210_26(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[end] : func:r2210_25, this:r0_37 +# 2210| m2210_27(unknown) = ^CallSideEffect : ~m2210_20 +# 2210| m2210_28(unknown) = Chi : total:m2210_20, partial:m2210_27 +#-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_37, m2210_9 +# 2210| m2210_29(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__end)] : &:r2210_22, r2210_26 +#-----| Goto -> Block 16 + +# 2210| Block 16 +# 2210| m2210_30(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Phi : from 15:m2210_21, from 17:m2210_52 +# 2210| m2210_31(unknown) = Phi : from 15:~m2210_28, from 17:~m2210_49 +# 2210| r2210_32(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_39(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r2210_32 +# 2210| r2210_33(glval<unknown>) = FunctionAddress[operator!=] : +#-----| r0_40(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[#temp0:0] : +#-----| m0_41(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Uninitialized[#temp0:0] : &:r0_40 +# 2210| r2210_34(glval<unknown>) = FunctionAddress[iterator] : +# 2210| r2210_35(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +#-----| r0_42(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r2210_35 +#-----| r0_43(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = CopyValue : r0_42 +# 2210| v2210_36(void) = Call[iterator] : func:r2210_34, this:r0_40, 0:r0_43 +# 2210| m2210_37(unknown) = ^CallSideEffect : ~m2210_31 +# 2210| m2210_38(unknown) = Chi : total:m2210_31, partial:m2210_37 +#-----| v0_44(void) = ^BufferReadSideEffect[0] : &:r0_43, ~m2210_29 +# 2210| m2210_39(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_40 +# 2210| m2210_40(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m0_41, partial:m2210_39 +#-----| r0_45(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Load[#temp0:0] : &:r0_40, m2210_40 +# 2210| r2210_41(bool) = Call[operator!=] : func:r2210_33, this:r0_39, 0:r0_45 +# 2210| m2210_42(unknown) = ^CallSideEffect : ~m2210_38 +# 2210| m2210_43(unknown) = Chi : total:m2210_38, partial:m2210_42 +#-----| v0_46(void) = ^IndirectReadSideEffect[-1] : &:r0_39, m2210_30 +# 2210| v2210_44(void) = ConditionalBranch : r2210_41 +#-----| False -> Block 20 +#-----| True -> Block 18 + +# 2210| Block 17 +# 2210| r2210_45(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +# 2210| r2210_46(glval<unknown>) = FunctionAddress[operator++] : +# 2210| r2210_47(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = Call[operator++] : func:r2210_46, this:r2210_45 +# 2210| m2210_48(unknown) = ^CallSideEffect : ~m2210_59 +# 2210| m2210_49(unknown) = Chi : total:m2210_59, partial:m2210_48 +# 2210| v2210_50(void) = ^IndirectReadSideEffect[-1] : &:r2210_45, m2210_30 +# 2210| m2210_51(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r2210_45 +# 2210| m2210_52(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m2210_30, partial:m2210_51 +# 2210| r2210_53(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r2210_47 +#-----| Goto (back edge) -> Block 16 + +# 2210| Block 18 +# 2210| r2210_54(glval<int>) = VariableAddress[y] : +# 2210| r2210_55(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_47(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r2210_55 +# 2210| r2210_56(glval<unknown>) = FunctionAddress[operator*] : +# 2210| r2210_57(int &) = Call[operator*] : func:r2210_56, this:r0_47 +# 2210| m2210_58(unknown) = ^CallSideEffect : ~m2210_43 +# 2210| m2210_59(unknown) = Chi : total:m2210_43, partial:m2210_58 +#-----| v0_48(void) = ^IndirectReadSideEffect[-1] : &:r0_47, m2210_30 +# 2210| r2210_60(int) = Load[?] : &:r2210_57, ~m2210_59 +# 2210| m2210_61(int) = Store[y] : &:r2210_54, r2210_60 +# 2211| r2211_1(glval<int>) = VariableAddress[y] : +# 2211| r2211_2(int) = Load[y] : &:r2211_1, m2210_61 +# 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_62(glval<vector<int>>) = VariableAddress[ys] : +# 2210| r2210_63(glval<unknown>) = FunctionAddress[~vector] : +# 2210| v2210_64(void) = Call[~vector] : func:r2210_63, this:r2210_62 +# 2210| m2210_65(unknown) = ^CallSideEffect : ~m2210_59 +# 2210| m2210_66(unknown) = Chi : total:m2210_59, partial:m2210_65 +# 2210| v2210_67(void) = ^IndirectReadSideEffect[-1] : &:r2210_62, m2210_9 +# 2210| m2210_68(vector<int>) = ^IndirectMayWriteSideEffect[-1] : &:r2210_62 +# 2210| m2210_69(vector<int>) = Chi : total:m2210_9, partial:m2210_68 +# 2219| r2219_9(glval<ClassWithDestructor>) = VariableAddress[x] : +# 2219| r2219_10(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : +# 2219| v2219_11(void) = Call[~ClassWithDestructor] : func:r2219_10, this:r2219_9 +# 2219| m2219_12(unknown) = ^CallSideEffect : ~m2210_66 +# 2219| m2219_13(unknown) = Chi : total:m2210_66, 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<vector<ClassWithDestructor>>) = VariableAddress[ys] : +# 2215| m2215_2(vector<ClassWithDestructor>) = Uninitialized[ys] : &:r2215_1 +# 2215| r2215_3(glval<unknown>) = FunctionAddress[vector] : +# 2215| r2215_4(glval<ClassWithDestructor>) = VariableAddress[#temp2215:45] : +# 2215| r2215_5(glval<ClassWithDestructor>) = 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_43 +# 2215| m2215_11(unknown) = Chi : total:m2210_43, partial:m2215_10 +# 2215| m2215_12(vector<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2215_1 +# 2215| m2215_13(vector<ClassWithDestructor>) = Chi : total:m2215_2, partial:m2215_12 +# 2215| r2215_14(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2215| r2215_15(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : +# 2215| r2215_16(vector<ClassWithDestructor> &) = CopyValue : r2215_15 +# 2215| m2215_17(vector<ClassWithDestructor> &) = Store[(__range)] : &:r2215_14, r2215_16 +# 2215| r2215_18(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +# 2215| r2215_19(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2215| r2215_20(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2215_19, m2215_17 +#-----| r0_49(glval<vector<ClassWithDestructor>>) = CopyValue : r2215_20 +#-----| r0_50(glval<vector<ClassWithDestructor>>) = Convert : r0_49 +# 2215| r2215_21(glval<unknown>) = FunctionAddress[begin] : +# 2215| r2215_22(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[begin] : func:r2215_21, this:r0_50 +# 2215| m2215_23(unknown) = ^CallSideEffect : ~m2215_11 +# 2215| m2215_24(unknown) = Chi : total:m2215_11, partial:m2215_23 +#-----| v0_51(void) = ^IndirectReadSideEffect[-1] : &:r0_50, m2215_13 +# 2215| m2215_25(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__begin)] : &:r2215_18, r2215_22 +# 2215| r2215_26(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +# 2215| r2215_27(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2215| r2215_28(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2215_27, m2215_17 +#-----| r0_52(glval<vector<ClassWithDestructor>>) = CopyValue : r2215_28 +#-----| r0_53(glval<vector<ClassWithDestructor>>) = Convert : r0_52 +# 2215| r2215_29(glval<unknown>) = FunctionAddress[end] : +# 2215| r2215_30(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[end] : func:r2215_29, this:r0_53 +# 2215| m2215_31(unknown) = ^CallSideEffect : ~m2215_24 +# 2215| m2215_32(unknown) = Chi : total:m2215_24, partial:m2215_31 +#-----| v0_54(void) = ^IndirectReadSideEffect[-1] : &:r0_53, m2215_13 +# 2215| m2215_33(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__end)] : &:r2215_26, r2215_30 +#-----| Goto -> Block 21 + +# 2215| Block 21 +# 2215| m2215_34(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Phi : from 20:m2215_25, from 22:m2215_72 +# 2215| m2215_35(unknown) = Phi : from 20:~m2215_32, from 22:~m2215_69 +# 2215| r2215_36(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_55(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2215_36 +# 2215| r2215_37(glval<unknown>) = FunctionAddress[operator!=] : +#-----| r0_56(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[#temp0:0] : +#-----| m0_57(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Uninitialized[#temp0:0] : &:r0_56 +# 2215| r2215_38(glval<unknown>) = FunctionAddress[iterator] : +# 2215| r2215_39(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +#-----| r0_58(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2215_39 +#-----| r0_59(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = CopyValue : r0_58 +# 2215| v2215_40(void) = Call[iterator] : func:r2215_38, this:r0_56, 0:r0_59 +# 2215| m2215_41(unknown) = ^CallSideEffect : ~m2215_35 +# 2215| m2215_42(unknown) = Chi : total:m2215_35, partial:m2215_41 +#-----| v0_60(void) = ^BufferReadSideEffect[0] : &:r0_59, ~m2215_33 +# 2215| m2215_43(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_56 +# 2215| m2215_44(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m0_57, partial:m2215_43 +#-----| r0_61(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Load[#temp0:0] : &:r0_56, m2215_44 +# 2215| r2215_45(bool) = Call[operator!=] : func:r2215_37, this:r0_55, 0:r0_61 +# 2215| m2215_46(unknown) = ^CallSideEffect : ~m2215_42 +# 2215| m2215_47(unknown) = Chi : total:m2215_42, partial:m2215_46 +#-----| v0_62(void) = ^IndirectReadSideEffect[-1] : &:r0_55, m2215_34 +# 2215| v2215_48(void) = ConditionalBranch : r2215_45 +#-----| False -> Block 23 +#-----| True -> Block 22 + +# 2215| Block 22 +# 2215| r2215_49(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2215| r2215_50(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_63(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2215_50 +# 2215| r2215_51(glval<unknown>) = FunctionAddress[operator*] : +# 2215| r2215_52(ClassWithDestructor &) = Call[operator*] : func:r2215_51, this:r0_63 +# 2215| m2215_53(unknown) = ^CallSideEffect : ~m2215_47 +# 2215| m2215_54(unknown) = Chi : total:m2215_47, partial:m2215_53 +#-----| v0_64(void) = ^IndirectReadSideEffect[-1] : &:r0_63, m2215_34 +# 2215| r2215_55(ClassWithDestructor) = Load[?] : &:r2215_52, ~m2215_54 +# 2215| m2215_56(ClassWithDestructor) = Store[y] : &:r2215_49, r2215_55 +# 2216| r2216_1(glval<ClassWithDestructor>) = VariableAddress[z1] : +# 2216| m2216_2(ClassWithDestructor) = Uninitialized[z1] : &:r2216_1 +# 2216| r2216_3(glval<unknown>) = FunctionAddress[ClassWithDestructor] : +# 2216| v2216_4(void) = Call[ClassWithDestructor] : func:r2216_3, this:r2216_1 +# 2216| m2216_5(unknown) = ^CallSideEffect : ~m2215_54 +# 2216| m2216_6(unknown) = Chi : total:m2215_54, 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<ClassWithDestructor>) = VariableAddress[z2] : +# 2217| m2217_2(ClassWithDestructor) = Uninitialized[z2] : &:r2217_1 +# 2217| r2217_3(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[z2] : +# 2218| r2218_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[z1] : +# 2218| r2218_10(glval<unknown>) = 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_57(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2215| r2215_58(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : +# 2215| v2215_59(void) = Call[~ClassWithDestructor] : func:r2215_58, this:r2215_57 +# 2215| m2215_60(unknown) = ^CallSideEffect : ~m2218_13 +# 2215| m2215_61(unknown) = Chi : total:m2218_13, partial:m2215_60 +# 2215| v2215_62(void) = ^IndirectReadSideEffect[-1] : &:r2215_57, m2215_56 +# 2215| m2215_63(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2215_57 +# 2215| m2215_64(ClassWithDestructor) = Chi : total:m2215_56, partial:m2215_63 +# 2215| r2215_65(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +# 2215| r2215_66(glval<unknown>) = FunctionAddress[operator++] : +# 2215| r2215_67(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = Call[operator++] : func:r2215_66, this:r2215_65 +# 2215| m2215_68(unknown) = ^CallSideEffect : ~m2215_61 +# 2215| m2215_69(unknown) = Chi : total:m2215_61, partial:m2215_68 +# 2215| v2215_70(void) = ^IndirectReadSideEffect[-1] : &:r2215_65, m2215_34 +# 2215| m2215_71(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2215_65 +# 2215| m2215_72(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m2215_34, partial:m2215_71 +# 2215| r2215_73(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2215_67 +#-----| Goto (back edge) -> Block 21 + +# 2219| Block 23 +# 2219| v2219_17(void) = NoOp : +# 2219| r2219_18(glval<ClassWithDestructor>) = VariableAddress[x] : +# 2219| r2219_19(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : +# 2219| v2219_20(void) = Call[~ClassWithDestructor] : func:r2219_19, this:r2219_18 +# 2219| m2219_21(unknown) = ^CallSideEffect : ~m2215_47 +# 2219| m2219_22(unknown) = Chi : total:m2215_47, 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<ClassWithDestructor>) = VariableAddress[a] : +# 2222| m2222_2(ClassWithDestructor) = Uninitialized[a] : &:r2222_1 +# 2222| r2222_3(glval<unknown>) = 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<bool>) = 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<ClassWithDestructor>) = VariableAddress[c] : +# 2223| Block 1 +# 2223| r2223_4(glval<ClassWithDestructor>) = VariableAddress[b] : #-----| r0_1(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[b] : -# 2188| r2188_4(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[a] : -# 2188| r2188_12(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[a] : +# 2224| r2224_4(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[global_class_with_destructor] : -# 2190| r2190_4(glval<unknown>) = 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<bool>) = 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>(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<ClassWithDestructor &>) = 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<ClassWithDestructor &>) = VariableAddress[#return] : -# 2194| r2194_10(glval<ClassWithDestructor &>) = VariableAddress[t] : -# 2194| r2194_11(ClassWithDestructor &) = Load[t] : &:r2194_10, m2194_6 -# 2194| r2194_12(glval<ClassWithDestructor>) = 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<ClassWithDestructor &>) = 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<ClassWithDestructor>) = VariableAddress[a] : +#-----| r0_1(glval<unknown>) = 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>(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<int &>) = 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<int &>) = VariableAddress[#return] : -# 2194| r2194_10(glval<int &>) = VariableAddress[t] : -# 2194| r2194_11(int &) = Load[t] : &:r2194_10, m2194_6 -# 2194| r2194_12(glval<int>) = 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<int &>) = 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<ClassWithDestructor>) = VariableAddress[b] : +# 2228| m2228_3(ClassWithDestructor) = Uninitialized[b] : &:r2228_2 +# 2228| r2228_4(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[b] : +# 2229| r2229_3(glval<unknown>) = 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>(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<ClassWithDestructor &>) = 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<unknown>) = FunctionAddress[get] : -# 2198| r2198_2(glval<ClassWithDestructor &>) = VariableAddress[t] : -# 2198| r2198_3(ClassWithDestructor &) = Load[t] : &:r2198_2, m2197_6 -# 2198| r2198_4(glval<ClassWithDestructor>) = 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<ClassWithDestructor>) = CopyValue : r2198_6 -# 2198| r2198_13(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[a] : +# 2232| m2232_2(ClassWithDestructor) = Uninitialized[a] : &:r2232_1 +# 2232| r2232_3(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[b] : +# 2233| m2233_2(ClassWithDestructor) = Uninitialized[b] : &:r2233_1 +# 2233| r2233_3(glval<unknown>) = 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<bool>) = 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>(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<int &>) = 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<unknown>) = FunctionAddress[get] : -# 2198| r2198_2(glval<int &>) = VariableAddress[t] : -# 2198| r2198_3(int &) = Load[t] : &:r2198_2, m2197_6 -# 2198| r2198_4(glval<int>) = 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<int>) = 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<ClassWithDestructor>) = VariableAddress[c] : +#-----| r0_1(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[c] : -# 2202| m2202_2(ClassWithDestructor) = Uninitialized[c] : &:r2202_1 -# 2202| r2202_3(glval<unknown>) = 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<unknown>) = FunctionAddress[call_destructor] : -# 2203| r2203_2(glval<ClassWithDestructor>) = 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<ClassWithDestructor>) = VariableAddress[c] : -# 2204| r2204_3(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[b] : +# 2235| r2235_4(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[a] : +# 2235| r2235_12(glval<unknown>) = 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<int>) = VariableAddress[i] : -# 2207| m2207_2(int) = Uninitialized[i] : &:r2207_1 -# 2208| r2208_1(glval<unknown>) = FunctionAddress[call_destructor] : -# 2208| r2208_2(glval<int>) = 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<ClassWithDestructor>) = VariableAddress[global_class_with_destructor] : +# 2237| r2237_4(glval<unknown>) = 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<bool>) = VariableAddress[b] : -# 2212| m2212_6(bool) = InitializeParameter[b] : &:r2212_5 -# 2214| r2214_1(glval<String>) = VariableAddress[s] : -# 2214| m2214_2(String) = Uninitialized[s] : &:r2214_1 -# 2214| r2214_3(glval<unknown>) = 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<bool>) = 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>(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<ClassWithDestructor &>) = 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<ClassWithDestructor &>) = VariableAddress[#return] : +# 2241| r2241_10(glval<ClassWithDestructor &>) = VariableAddress[t] : +# 2241| r2241_11(ClassWithDestructor &) = Load[t] : &:r2241_10, m2241_6 +# 2241| r2241_12(glval<ClassWithDestructor>) = 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<ClassWithDestructor &>) = 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>(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<int &>) = 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<int &>) = VariableAddress[#return] : +# 2241| r2241_10(glval<int &>) = VariableAddress[t] : +# 2241| r2241_11(int &) = Load[t] : &:r2241_10, m2241_6 +# 2241| r2241_12(glval<int>) = 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<int &>) = 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>(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<ClassWithDestructor &>) = 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<unknown>) = FunctionAddress[get] : +# 2245| r2245_2(glval<ClassWithDestructor &>) = VariableAddress[t] : +# 2245| r2245_3(ClassWithDestructor &) = Load[t] : &:r2245_2, m2244_6 +# 2245| r2245_4(glval<ClassWithDestructor>) = 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<ClassWithDestructor>) = CopyValue : r2245_6 +# 2245| r2245_13(glval<unknown>) = 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>(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<int &>) = 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<unknown>) = FunctionAddress[get] : +# 2245| r2245_2(glval<int &>) = VariableAddress[t] : +# 2245| r2245_3(int &) = Load[t] : &:r2245_2, m2244_6 +# 2245| r2245_4(glval<int>) = 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<int>) = 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<ClassWithDestructor>) = VariableAddress[c] : +# 2249| m2249_2(ClassWithDestructor) = Uninitialized[c] : &:r2249_1 +# 2249| r2249_3(glval<unknown>) = 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<unknown>) = FunctionAddress[call_destructor] : +# 2250| r2250_2(glval<ClassWithDestructor>) = 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<ClassWithDestructor>) = VariableAddress[c] : +# 2251| r2251_3(glval<unknown>) = 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<int>) = VariableAddress[i] : +# 2254| m2254_2(int) = Uninitialized[i] : &:r2254_1 +# 2255| r2255_1(glval<unknown>) = FunctionAddress[call_destructor] : +# 2255| r2255_2(glval<int>) = 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<bool>) = VariableAddress[b] : +# 2259| m2259_6(bool) = InitializeParameter[b] : &:r2259_5 +# 2261| r2261_1(glval<String>) = VariableAddress[s] : +# 2261| m2261_2(String) = Uninitialized[s] : &:r2261_1 +# 2261| r2261_3(glval<unknown>) = 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<bool>) = 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<char *>) = VariableAddress[#throw2216:7] : -# 2216| r2216_2(glval<char[15]>) = 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<char *>) = VariableAddress[#throw2263:7] : +# 2263| r2263_2(glval<char[15]>) = 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<String>) = VariableAddress[s2] : -# 2218| m2218_2(String) = Uninitialized[s2] : &:r2218_1 -# 2218| r2218_3(glval<unknown>) = 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<String>) = VariableAddress[s2] : -# 2219| r2219_2(glval<unknown>) = 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<String>) = VariableAddress[s] : -# 2219| r2219_10(glval<unknown>) = 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<String>) = VariableAddress[s2] : +# 2265| m2265_2(String) = Uninitialized[s2] : &:r2265_1 +# 2265| r2265_3(glval<unknown>) = 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<String>) = VariableAddress[s2] : +# 2266| r2266_2(glval<unknown>) = 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<String>) = VariableAddress[s] : +# 2266| r2266_10(glval<unknown>) = 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<char *>) = 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<String>) = VariableAddress[#throw2221:5] : -# 2221| m2221_2(String) = Uninitialized[#throw2221:5] : &:r2221_1 -# 2221| r2221_3(glval<unknown>) = FunctionAddress[String] : -# 2221| r2221_4(glval<char *>) = 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<char *>) = 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<String>) = VariableAddress[#throw2268:5] : +# 2268| m2268_2(String) = Uninitialized[#throw2268:5] : &:r2268_1 +# 2268| r2268_3(glval<unknown>) = FunctionAddress[String] : +# 2268| r2268_4(glval<char *>) = 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<String &>) = 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<String &>) = 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<bool>) = VariableAddress[b] : -# 2230| m2230_6(bool) = InitializeParameter[b] : &:r2230_5 -# 2231| r2231_1(glval<String>) = VariableAddress[s1] : -# 2231| m2231_2(String) = Uninitialized[s1] : &:r2231_1 -# 2231| r2231_3(glval<unknown>) = 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<bool>) = 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<bool>) = VariableAddress[b] : +# 2277| m2277_6(bool) = InitializeParameter[b] : &:r2277_5 +# 2278| r2278_1(glval<String>) = VariableAddress[s1] : +# 2278| m2278_2(String) = Uninitialized[s1] : &:r2278_1 +# 2278| r2278_3(glval<unknown>) = 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<bool>) = 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<String>) = VariableAddress[s2] : -# 2233| m2233_2(String) = Uninitialized[s2] : &:r2233_1 -# 2233| r2233_3(glval<unknown>) = 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<String>) = VariableAddress[s2] : -# 2234| r2234_2(glval<unknown>) = 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<String>) = VariableAddress[s2] : +# 2280| m2280_2(String) = Uninitialized[s2] : &:r2280_1 +# 2280| r2280_3(glval<unknown>) = 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<String>) = VariableAddress[s2] : +# 2281| r2281_2(glval<unknown>) = 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<String>) = VariableAddress[s3] : -# 2235| m2235_2(String) = Uninitialized[s3] : &:r2235_1 -# 2235| r2235_3(glval<unknown>) = 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<String>) = VariableAddress[s3] : -# 2236| r2236_2(glval<unknown>) = 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<String>) = VariableAddress[s3] : +# 2282| m2282_2(String) = Uninitialized[s3] : &:r2282_1 +# 2282| r2282_3(glval<unknown>) = 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<String>) = VariableAddress[s3] : +# 2283| r2283_2(glval<unknown>) = 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<String>) = VariableAddress[s4] : -# 2237| m2237_3(String) = Uninitialized[s4] : &:r2237_2 -# 2237| r2237_4(glval<unknown>) = 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<String>) = VariableAddress[s4] : -# 2238| r2238_3(glval<unknown>) = 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<String>) = VariableAddress[s1] : -# 2238| r2238_11(glval<unknown>) = 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<String>) = VariableAddress[s4] : +# 2284| m2284_3(String) = Uninitialized[s4] : &:r2284_2 +# 2284| r2284_4(glval<unknown>) = 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<String>) = VariableAddress[s4] : +# 2285| r2285_3(glval<unknown>) = 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<String>) = VariableAddress[s1] : +# 2285| r2285_11(glval<unknown>) = 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<char>) = VariableAddress[c] : -# 2241| r2241_2(char) = Constant[97] : -# 2241| m2241_3(char) = Store[c] : &:r2241_1, r2241_2 -# 2242| r2242_1(glval<String>) = VariableAddress[s] : -# 2242| m2242_2(String) = Uninitialized[s] : &:r2242_1 -# 2242| r2242_3(glval<unknown>) = FunctionAddress[String] : -# 2242| r2242_4(glval<char[6]>) = 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<char>) = VariableAddress[c] : +# 2288| r2288_2(char) = Constant[97] : +# 2288| m2288_3(char) = Store[c] : &:r2288_1, r2288_2 +# 2289| r2289_1(glval<String>) = VariableAddress[s] : +# 2289| m2289_2(String) = Uninitialized[s] : &:r2289_1 +# 2289| r2289_3(glval<unknown>) = FunctionAddress[String] : +# 2289| r2289_4(glval<char[6]>) = 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<char>) = 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<char>) = 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<String>) = VariableAddress[s2] : -# 2243| m2243_2(String) = Uninitialized[s2] : &:r2243_1 -# 2243| r2243_3(glval<unknown>) = 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<String>) = VariableAddress[s2] : -# 2244| r2244_2(glval<unknown>) = 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<String>) = VariableAddress[s] : -# 2242| r2242_22(glval<unknown>) = 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<char>) = VariableAddress[c] : -# 2242| m2242_30(char) = Store[c] : &:r2242_29, r2242_23 +# 2290| Block 2 +# 2290| r2290_1(glval<String>) = VariableAddress[s2] : +# 2290| m2290_2(String) = Uninitialized[s2] : &:r2290_1 +# 2290| r2290_3(glval<unknown>) = 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<String>) = VariableAddress[s2] : +# 2291| r2291_2(glval<unknown>) = 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<String>) = VariableAddress[s] : +# 2289| r2289_22(glval<unknown>) = 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<char>) = VariableAddress[c] : +# 2289| m2289_30(char) = Store[c] : &:r2289_29, r2289_23 #-----| Goto (back edge) -> Block 1 -# 2242| Block 3 -# 2242| r2242_31(glval<String>) = VariableAddress[s] : -# 2242| r2242_32(glval<unknown>) = 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<vector<String> &&>) = VariableAddress[(__range)] : -# 2246| r2246_2(glval<vector<String>>) = VariableAddress[#temp2246:20] : -# 2246| m2246_3(vector<String>) = Uninitialized[#temp2246:20] : &:r2246_2 -# 2246| r2246_4(glval<unknown>) = FunctionAddress[vector] : -# 2246| r2246_5(glval<String>) = VariableAddress[#temp2246:35] : -# 2246| m2246_6(String) = Uninitialized[#temp2246:35] : &:r2246_5 -# 2246| r2246_7(glval<unknown>) = FunctionAddress[String] : -# 2246| r2246_8(glval<char[6]>) = 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<String>) = ^IndirectMayWriteSideEffect[-1] : &:r2246_2 -# 2246| m2246_21(vector<String>) = Chi : total:m2246_3, partial:m2246_20 -# 2246| r2246_22(vector<String> &) = CopyValue : r2246_2 -# 2246| m2246_23(vector<String> &&) = Store[(__range)] : &:r2246_1, r2246_22 -# 2246| r2246_24(glval<iterator>) = VariableAddress[(__begin)] : -# 2246| r2246_25(glval<vector<String> &&>) = VariableAddress[(__range)] : -# 2246| r2246_26(vector<String> &&) = Load[(__range)] : &:r2246_25, m2246_23 -#-----| r0_1(glval<vector<String>>) = CopyValue : r2246_26 -#-----| r0_2(glval<vector<String>>) = Convert : r0_1 -# 2246| r2246_27(glval<unknown>) = 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<iterator>) = VariableAddress[(__end)] : -# 2246| r2246_33(glval<vector<String> &&>) = VariableAddress[(__range)] : -# 2246| r2246_34(vector<String> &&) = Load[(__range)] : &:r2246_33, m2246_23 -#-----| r0_4(glval<vector<String>>) = CopyValue : r2246_34 -#-----| r0_5(glval<vector<String>>) = Convert : r0_4 -# 2246| r2246_35(glval<unknown>) = 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<String>) = VariableAddress[s] : +# 2289| r2289_32(glval<unknown>) = 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<vector<String> &&>) = VariableAddress[(__range)] : +# 2293| r2293_2(glval<vector<String>>) = VariableAddress[#temp2293:20] : +# 2293| m2293_3(vector<String>) = Uninitialized[#temp2293:20] : &:r2293_2 +# 2293| r2293_4(glval<unknown>) = FunctionAddress[vector] : +# 2293| r2293_5(glval<String>) = VariableAddress[#temp2293:40] : +# 2293| m2293_6(String) = Uninitialized[#temp2293:40] : &:r2293_5 +# 2293| r2293_7(glval<unknown>) = FunctionAddress[String] : +# 2293| r2293_8(glval<char[6]>) = 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<String>) = ^IndirectMayWriteSideEffect[-1] : &:r2293_2 +# 2293| m2293_21(vector<String>) = Chi : total:m2293_3, partial:m2293_20 +# 2293| r2293_22(vector<String> &) = CopyValue : r2293_2 +# 2293| m2293_23(vector<String> &&) = Store[(__range)] : &:r2293_1, r2293_22 +# 2293| r2293_24(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] : +# 2293| r2293_25(glval<vector<String> &&>) = VariableAddress[(__range)] : +# 2293| r2293_26(vector<String> &&) = Load[(__range)] : &:r2293_25, m2293_23 +#-----| r0_1(glval<vector<String>>) = CopyValue : r2293_26 +#-----| r0_2(glval<vector<String>>) = Convert : r0_1 +# 2293| r2293_27(glval<unknown>) = FunctionAddress[begin] : +# 2293| r2293_28(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Call[begin] : func:r2293_27, this:r0_2 +# 2293| m2293_29(unknown) = ^CallSideEffect : ~m2293_19 +# 2293| m2293_30(unknown) = Chi : total:m2293_19, partial:m2293_29 +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2293_21 +# 2293| m2293_31(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Store[(__begin)] : &:r2293_24, r2293_28 +# 2293| r2293_32(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__end)] : +# 2293| r2293_33(glval<vector<String> &&>) = VariableAddress[(__range)] : +# 2293| r2293_34(vector<String> &&) = Load[(__range)] : &:r2293_33, m2293_23 +#-----| r0_4(glval<vector<String>>) = CopyValue : r2293_34 +#-----| r0_5(glval<vector<String>>) = Convert : r0_4 +# 2293| r2293_35(glval<unknown>) = FunctionAddress[end] : +# 2293| r2293_36(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Call[end] : func:r2293_35, this:r0_5 +# 2293| m2293_37(unknown) = ^CallSideEffect : ~m2293_30 +# 2293| m2293_38(unknown) = Chi : total:m2293_30, partial:m2293_37 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2293_21 +# 2293| m2293_39(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Store[(__end)] : &:r2293_32, r2293_36 #-----| 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<iterator>) = VariableAddress[(__begin)] : -#-----| r0_7(glval<iterator>) = Convert : r2246_42 -# 2246| r2246_43(glval<unknown>) = FunctionAddress[operator!=] : -# 2246| r2246_44(glval<iterator>) = 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_40(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Phi : from 3:m2293_31, from 5:m2293_87 +# 2293| m2293_41(unknown) = Phi : from 3:~m2293_38, from 5:~m2293_84 +# 2293| r2293_42(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] : +#-----| r0_7(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = Convert : r2293_42 +# 2293| r2293_43(glval<unknown>) = FunctionAddress[operator!=] : +#-----| r0_8(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[#temp0:0] : +#-----| m0_9(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Uninitialized[#temp0:0] : &:r0_8 +# 2293| r2293_44(glval<unknown>) = FunctionAddress[iterator] : +# 2293| r2293_45(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__end)] : +#-----| r0_10(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = Convert : r2293_45 +#-----| r0_11(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &> &) = CopyValue : r0_10 +# 2293| v2293_46(void) = Call[iterator] : func:r2293_44, this:r0_8, 0:r0_11 +# 2293| m2293_47(unknown) = ^CallSideEffect : ~m2293_41 +# 2293| m2293_48(unknown) = Chi : total:m2293_41, partial:m2293_47 +#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m2293_39 +# 2293| m2293_49(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +# 2293| m2293_50(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Chi : total:m0_9, partial:m2293_49 +#-----| r0_13(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Load[#temp0:0] : &:r0_8, m2293_50 +# 2293| r2293_51(bool) = Call[operator!=] : func:r2293_43, this:r0_7, 0:r0_13 +# 2293| m2293_52(unknown) = ^CallSideEffect : ~m2293_48 +# 2293| m2293_53(unknown) = Chi : total:m2293_48, partial:m2293_52 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2293_40 +# 2293| v2293_54(void) = ConditionalBranch : r2293_51 #-----| False -> Block 6 #-----| True -> Block 5 -# 2246| Block 5 -# 2246| r2246_50(glval<String>) = VariableAddress[s] : -# 2246| m2246_51(String) = Uninitialized[s] : &:r2246_50 -# 2246| r2246_52(glval<unknown>) = FunctionAddress[String] : -# 2246| r2246_53(glval<iterator>) = VariableAddress[(__begin)] : -#-----| r0_9(glval<iterator>) = Convert : r2246_53 -# 2246| r2246_54(glval<unknown>) = 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<String>) = CopyValue : r2246_55 -# 2246| r2246_59(glval<String>) = 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<String>) = VariableAddress[s2] : -# 2247| m2247_2(String) = Uninitialized[s2] : &:r2247_1 -# 2247| r2247_3(glval<unknown>) = 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<String>) = VariableAddress[s2] : -# 2248| r2248_2(glval<unknown>) = 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<String>) = VariableAddress[s] : -# 2246| r2246_68(glval<unknown>) = 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<iterator>) = VariableAddress[(__begin)] : -# 2246| r2246_76(glval<unknown>) = 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<iterator>) = CopyValue : r2246_77 +# 2293| Block 5 +# 2293| r2293_55(glval<String>) = VariableAddress[s] : +# 2293| m2293_56(String) = Uninitialized[s] : &:r2293_55 +# 2293| r2293_57(glval<unknown>) = FunctionAddress[String] : +# 2293| r2293_58(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] : +#-----| r0_15(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = Convert : r2293_58 +# 2293| r2293_59(glval<unknown>) = FunctionAddress[operator*] : +# 2293| r2293_60(String &) = Call[operator*] : func:r2293_59, this:r0_15 +# 2293| m2293_61(unknown) = ^CallSideEffect : ~m2293_53 +# 2293| m2293_62(unknown) = Chi : total:m2293_53, partial:m2293_61 +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2293_40 +# 2293| r2293_63(glval<String>) = CopyValue : r2293_60 +# 2293| r2293_64(glval<String>) = Convert : r2293_63 +# 2293| r2293_65(String &) = CopyValue : r2293_64 +# 2293| v2293_66(void) = Call[String] : func:r2293_57, this:r2293_55, 0:r2293_65 +# 2293| m2293_67(unknown) = ^CallSideEffect : ~m2293_62 +# 2293| m2293_68(unknown) = Chi : total:m2293_62, partial:m2293_67 +# 2293| v2293_69(void) = ^BufferReadSideEffect[0] : &:r2293_65, ~m2293_68 +# 2293| m2293_70(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_55 +# 2293| m2293_71(String) = Chi : total:m2293_56, partial:m2293_70 +# 2294| r2294_1(glval<String>) = VariableAddress[s2] : +# 2294| m2294_2(String) = Uninitialized[s2] : &:r2294_1 +# 2294| r2294_3(glval<unknown>) = FunctionAddress[String] : +# 2294| v2294_4(void) = Call[String] : func:r2294_3, this:r2294_1 +# 2294| m2294_5(unknown) = ^CallSideEffect : ~m2293_68 +# 2294| m2294_6(unknown) = Chi : total:m2293_68, 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<String>) = VariableAddress[s2] : +# 2295| r2295_2(glval<unknown>) = 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_72(glval<String>) = VariableAddress[s] : +# 2293| r2293_73(glval<unknown>) = FunctionAddress[~String] : +# 2293| v2293_74(void) = Call[~String] : func:r2293_73, this:r2293_72 +# 2293| m2293_75(unknown) = ^CallSideEffect : ~m2295_5 +# 2293| m2293_76(unknown) = Chi : total:m2295_5, partial:m2293_75 +# 2293| v2293_77(void) = ^IndirectReadSideEffect[-1] : &:r2293_72, m2293_71 +# 2293| m2293_78(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_72 +# 2293| m2293_79(String) = Chi : total:m2293_71, partial:m2293_78 +# 2293| r2293_80(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] : +# 2293| r2293_81(glval<unknown>) = FunctionAddress[operator++] : +# 2293| r2293_82(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &> &) = Call[operator++] : func:r2293_81, this:r2293_80 +# 2293| m2293_83(unknown) = ^CallSideEffect : ~m2293_76 +# 2293| m2293_84(unknown) = Chi : total:m2293_76, partial:m2293_83 +# 2293| v2293_85(void) = ^IndirectReadSideEffect[-1] : &:r2293_80, m2293_40 +# 2293| m2293_86(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = ^IndirectMayWriteSideEffect[-1] : &:r2293_80 +# 2293| m2293_87(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Chi : total:m2293_40, partial:m2293_86 +# 2293| r2293_88(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = CopyValue : r2293_82 #-----| Goto (back edge) -> Block 4 -# 2250| Block 6 -# 2250| r2250_1(glval<String>) = VariableAddress[s] : -# 2250| m2250_2(String) = Uninitialized[s] : &:r2250_1 -# 2250| r2250_3(glval<unknown>) = FunctionAddress[String] : -# 2250| r2250_4(glval<char[6]>) = 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<String>) = VariableAddress[s2] : -# 2250| m2250_13(String) = Uninitialized[s2] : &:r2250_12 -# 2250| r2250_14(glval<unknown>) = FunctionAddress[String] : -# 2250| r2250_15(glval<char[6]>) = 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<String>) = VariableAddress[s] : +# 2297| m2297_2(String) = Uninitialized[s] : &:r2297_1 +# 2297| r2297_3(glval<unknown>) = FunctionAddress[String] : +# 2297| r2297_4(glval<char[6]>) = 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_53 +# 2297| m2297_8(unknown) = Chi : total:m2293_53, 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<String>) = VariableAddress[s2] : +# 2297| m2297_13(String) = Uninitialized[s2] : &:r2297_12 +# 2297| r2297_14(glval<unknown>) = FunctionAddress[String] : +# 2297| r2297_15(glval<char[6]>) = 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<char>) = 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<char>) = 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<char>) = VariableAddress[c] : -# 2251| m2251_3(char) = Store[c] : &:r2251_2, r2251_1 -# 2250| r2250_32(glval<String>) = VariableAddress[s] : -# 2250| r2250_33(glval<unknown>) = 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<char>) = 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<char>) = VariableAddress[c] : +# 2298| m2298_3(char) = Store[c] : &:r2298_2, r2298_1 +# 2297| r2297_32(glval<String>) = VariableAddress[s] : +# 2297| r2297_33(glval<unknown>) = 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<char>) = VariableAddress[c] : +# 2297| m2297_41(char) = Store[c] : &:r2297_40, r2297_34 #-----| Goto (back edge) -> Block 7 -# 2250| Block 9 -# 2250| r2250_42(glval<String>) = VariableAddress[s2] : -# 2250| r2250_43(glval<unknown>) = 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<String>) = VariableAddress[s] : -# 2250| r2250_51(glval<unknown>) = 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<String>) = VariableAddress[s2] : +# 2297| r2297_43(glval<unknown>) = 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<String>) = VariableAddress[s] : +# 2297| r2297_51(glval<unknown>) = 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<bool>) = VariableAddress[b] : -# 2255| m2255_6(bool) = InitializeParameter[b] : &:r2255_5 -# 2256| r2256_1(glval<String>) = VariableAddress[s] : -# 2256| m2256_2(String) = Uninitialized[s] : &:r2256_1 -# 2256| r2256_3(glval<unknown>) = FunctionAddress[String] : -# 2256| r2256_4(glval<char[6]>) = 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<bool>) = 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<bool>) = VariableAddress[b] : +# 2302| m2302_6(bool) = InitializeParameter[b] : &:r2302_5 +# 2303| r2303_1(glval<String>) = VariableAddress[s] : +# 2303| m2303_2(String) = Uninitialized[s] : &:r2303_1 +# 2303| r2303_3(glval<unknown>) = FunctionAddress[String] : +# 2303| r2303_4(glval<char[6]>) = 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<bool>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = 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<String>) = VariableAddress[s] : -# 2260| r2260_2(glval<unknown>) = 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<String>) = VariableAddress[s] : +# 2307| r2307_2(glval<unknown>) = 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<bool>) = VariableAddress[b] : -# 2270| m2270_6(bool) = InitializeParameter[b] : &:r2270_5 -# 2271| r2271_1(glval<Bool>) = VariableAddress[B] : -# 2271| m2271_2(Bool) = Uninitialized[B] : &:r2271_1 -# 2271| r2271_3(glval<unknown>) = FunctionAddress[Bool] : -# 2271| r2271_4(glval<bool>) = 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<Bool>) = VariableAddress[B] : -# 2271| r2271_12(glval<unknown>) = 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<bool>) = VariableAddress[b] : +# 2317| m2317_6(bool) = InitializeParameter[b] : &:r2317_5 +# 2318| r2318_1(glval<Bool>) = VariableAddress[B] : +# 2318| m2318_2(Bool) = Uninitialized[B] : &:r2318_1 +# 2318| r2318_3(glval<unknown>) = FunctionAddress[Bool] : +# 2318| r2318_4(glval<bool>) = 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<Bool>) = VariableAddress[B] : +# 2318| r2318_12(glval<unknown>) = 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<String>) = VariableAddress[s1] : -# 2272| m2272_2(String) = Uninitialized[s1] : &:r2272_1 -# 2272| r2272_3(glval<unknown>) = 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<String>) = VariableAddress[s1] : -# 2273| r2273_2(glval<unknown>) = 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<String>) = VariableAddress[s1] : +# 2319| m2319_2(String) = Uninitialized[s1] : &:r2319_1 +# 2319| r2319_3(glval<unknown>) = 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<String>) = VariableAddress[s1] : +# 2320| r2320_2(glval<unknown>) = 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<String>) = VariableAddress[s2] : -# 2274| m2274_2(String) = Uninitialized[s2] : &:r2274_1 -# 2274| r2274_3(glval<unknown>) = 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<String>) = VariableAddress[s2] : -# 2275| r2275_2(glval<unknown>) = 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<String>) = VariableAddress[s2] : +# 2321| m2321_2(String) = Uninitialized[s2] : &:r2321_1 +# 2321| r2321_3(glval<unknown>) = 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<String>) = VariableAddress[s2] : +# 2322| r2322_2(glval<unknown>) = 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<Bool>) = VariableAddress[B] : -# 2275| r2275_11(glval<unknown>) = 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<Bool>) = VariableAddress[B] : +# 2322| r2322_11(glval<unknown>) = 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<bool>) = VariableAddress[b] : -# 2278| m2278_6(bool) = InitializeParameter[b] : &:r2278_5 -# 2280| r2280_1(glval<String>) = VariableAddress[s] : -# 2280| m2280_2(String) = Uninitialized[s] : &:r2280_1 -# 2280| r2280_3(glval<unknown>) = 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<bool>) = VariableAddress[b] : +# 2325| m2325_6(bool) = InitializeParameter[b] : &:r2325_5 +# 2327| r2327_1(glval<String>) = VariableAddress[s] : +# 2327| m2327_2(String) = Uninitialized[s] : &:r2327_1 +# 2327| r2327_3(glval<unknown>) = 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<bool>) = 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<bool>) = 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<bool>) = 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<bool>) = VariableAddress[b] : +# 2329| m2329_3(bool) = Store[b] : &:r2329_2, r2329_1 #-----| Goto (back edge) -> Block 1 -# 2284| Block 3 -# 2284| r2284_1(glval<String>) = VariableAddress[s] : -# 2284| r2284_2(glval<unknown>) = 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<String>) = VariableAddress[s] : +# 2331| r2331_2(glval<unknown>) = 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<Bool>) = VariableAddress[B] : -# 2287| m2287_4(Bool) = Uninitialized[B] : &:r2287_3 -# 2287| r2287_5(glval<unknown>) = FunctionAddress[Bool] : -# 2287| r2287_6(glval<bool>) = 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<Bool>) = VariableAddress[B] : -# 2287| r2287_14(glval<unknown>) = 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<Bool>) = VariableAddress[B] : +# 2334| m2334_4(Bool) = Uninitialized[B] : &:r2334_3 +# 2334| r2334_5(glval<unknown>) = FunctionAddress[Bool] : +# 2334| r2334_6(glval<bool>) = 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<Bool>) = VariableAddress[B] : +# 2334| r2334_14(glval<unknown>) = 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<bool>) = VariableAddress[b] : -# 2288| m2288_3(bool) = Store[b] : &:r2288_2, r2288_1 -# 2289| r2289_1(glval<Bool>) = VariableAddress[B] : -# 2289| r2289_2(glval<unknown>) = 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<bool>) = VariableAddress[b] : +# 2335| m2335_3(bool) = Store[b] : &:r2335_2, r2335_1 +# 2336| r2336_1(glval<Bool>) = VariableAddress[B] : +# 2336| r2336_2(glval<unknown>) = 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<Bool>) = VariableAddress[B] : -# 2289| r2289_10(glval<unknown>) = 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<Bool>) = VariableAddress[B] : +# 2336| r2336_10(glval<unknown>) = 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<bool>) = VariableAddress[b] : -# 2295| m2295_6(bool) = InitializeParameter[b] : &:r2295_5 -# 2296| r2296_1(glval<String>) = VariableAddress[s] : -# 2296| m2296_2(String) = Uninitialized[s] : &:r2296_1 -# 2296| r2296_3(glval<unknown>) = 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<bool>) = 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<bool>) = VariableAddress[b] : +# 2342| m2342_6(bool) = InitializeParameter[b] : &:r2342_5 +# 2343| r2343_1(glval<String>) = VariableAddress[s] : +# 2343| m2343_2(String) = Uninitialized[s] : &:r2343_1 +# 2343| r2343_3(glval<unknown>) = 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<bool>) = 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<String>) = VariableAddress[s] : -# 2304| r2304_2(glval<unknown>) = 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<String>) = VariableAddress[s] : +# 2351| r2351_2(glval<unknown>) = 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<bool>) = 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<bool>) = 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<unknown>) = 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<String>) = VariableAddress[s] : -# 2304| r2304_10(glval<unknown>) = 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<unknown>) = 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<String>) = VariableAddress[s] : +# 2351| r2351_10(glval<unknown>) = 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<String>) = VariableAddress[s] : -# 2304| v2304_17(void) = NoOp : -# 2304| r2304_18(glval<String>) = VariableAddress[s] : -# 2304| r2304_19(glval<unknown>) = 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<String>) = VariableAddress[s] : +# 2351| v2351_17(void) = NoOp : +# 2351| r2351_18(glval<String>) = VariableAddress[s] : +# 2351| r2351_19(glval<unknown>) = 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<bool>) = VariableAddress[b] : -# 2306| m2306_6(bool) = InitializeParameter[b] : &:r2306_5 -# 2307| r2307_1(glval<String>) = VariableAddress[s] : -# 2307| m2307_2(String) = Uninitialized[s] : &:r2307_1 -# 2307| r2307_3(glval<unknown>) = 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<bool>) = 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<bool>) = VariableAddress[b] : +# 2353| m2353_6(bool) = InitializeParameter[b] : &:r2353_5 +# 2354| r2354_1(glval<String>) = VariableAddress[s] : +# 2354| m2354_2(String) = Uninitialized[s] : &:r2354_1 +# 2354| r2354_3(glval<unknown>) = 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<bool>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[#return] : -# 2309| r2309_2(int) = Constant[1] : -# 2309| m2309_3(int) = Store[#return] : &:r2309_1, r2309_2 -# 2312| r2312_1(glval<String>) = VariableAddress[s] : -# 2312| r2312_2(glval<unknown>) = 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<int>) = VariableAddress[#return] : +# 2356| r2356_2(int) = Constant[1] : +# 2356| m2356_3(int) = Store[#return] : &:r2356_1, r2356_2 +# 2359| r2359_1(glval<String>) = VariableAddress[s] : +# 2359| r2359_2(glval<unknown>) = 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<int>) = VariableAddress[#return] : -# 2311| r2311_2(int) = Constant[0] : -# 2311| m2311_3(int) = Store[#return] : &:r2311_1, r2311_2 -# 2312| r2312_9(glval<String>) = VariableAddress[s] : -# 2312| r2312_10(glval<unknown>) = 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<int>) = VariableAddress[#return] : +# 2358| r2358_2(int) = Constant[0] : +# 2358| m2358_3(int) = Store[#return] : &:r2358_1, r2358_2 +# 2359| r2359_9(glval<String>) = VariableAddress[s] : +# 2359| r2359_10(glval<unknown>) = 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<String>) = VariableAddress[s] : -# 2315| m2315_2(String) = Uninitialized[s] : &:r2315_1 -# 2315| r2315_3(glval<unknown>) = 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<unknown>) = 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<String>) = VariableAddress[s] : -# 2317| r2317_2(glval<unknown>) = 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<String>) = VariableAddress[s] : +# 2362| m2362_2(String) = Uninitialized[s] : &:r2362_1 +# 2362| r2362_3(glval<unknown>) = 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<unknown>) = 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<String>) = VariableAddress[s] : +# 2364| r2364_2(glval<unknown>) = 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/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index b63449d96f0..01d6b268102 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<typename T> -struct vector { - struct iterator { - T* p; - iterator& operator++(); - T& operator*() const; +namespace std { + template<class T> + struct remove_const { typedef T type; }; - bool operator!=(iterator right) const; + template<class T> + struct remove_const<const T> { typedef T type; }; + + // `remove_const_t<T>` removes any `const` specifier from `T` + template<class T> + using remove_const_t = typename remove_const<T>::type; + + struct ptrdiff_t; + + template<class I> struct iterator_traits; + + template <class Category, + class value_type, + class difference_type = ptrdiff_t, + class pointer_type = value_type*, + class reference_type = value_type&> + struct iterator { + typedef Category iterator_category; + + iterator(); + iterator(iterator<Category, remove_const_t<value_type> > 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<typename T> + struct vector { + vector(T); + ~vector(); + + using iterator = std::iterator<random_access_iterator_tag, T>; + using const_iterator = std::iterator<random_access_iterator_tag, const T>; + + iterator begin() const; + iterator end() const; }; - vector(T); - ~vector(); - iterator begin() const; - iterator end() const; -}; + template<typename T> + bool operator==(typename vector<T>::iterator left, typename vector<T>::iterator right); + template<typename T> + bool operator!=(typename vector<T>::iterator left, typename vector<T>::iterator right); -template<typename T> -bool operator==(typename vector<T>::iterator left, typename vector<T>::iterator right); -template<typename T> -bool operator!=(typename vector<T>::iterator left, typename vector<T>::iterator right); +} -void RangeBasedFor(const vector<int>& v) { +void RangeBasedFor(const std::vector<int>& 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<ClassWithDestructor> ys(x); ClassWithDestructor y : ys) + for(std::vector<ClassWithDestructor> ys(x); ClassWithDestructor y : ys) y.set_x('a'); - for(vector<ClassWithDestructor> ys(x); ClassWithDestructor y : ys) { + for(std::vector<ClassWithDestructor> ys(x); ClassWithDestructor y : ys) { y.set_x('a'); if (y.get_x() == 'b') return; } - for(vector<int> ys(1); int y : ys) { + for(std::vector<int> ys(1); int y : ys) { if (y == 1) return; } - for(vector<ClassWithDestructor> ys(x); ClassWithDestructor y : ys) { + for(std::vector<ClassWithDestructor> ys(x); ClassWithDestructor y : ys) { ClassWithDestructor z1; ClassWithDestructor z2; } @@ -2243,7 +2290,7 @@ void ForDestructors() { String s2; } - for(String s : vector<String>(String("hello"))) { + for(String s : std::vector<String>(String("hello"))) { String s2; } @@ -2331,4 +2378,18 @@ namespace return_routine_type { } + +using size_t = decltype(sizeof(0)); + +template<class T> +struct remove_const { typedef T type; }; + +template<class T> +struct remove_const<const T> { typedef T type; }; + +// `remove_const_t<T>` removes any `const` specifier from `T` +template<class T> +using remove_const_t = typename remove_const<T>::type; + + // semmle-extractor-options: -std=c++20 --clang 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 7f606978b58..aa2496f19f2 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -1178,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 | @@ -1191,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 | @@ -1201,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 | @@ -1210,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 | @@ -1218,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 | @@ -1266,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 | @@ -1306,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_33 | +| file://:0:0:0:0 | Load | m1133_33 | +| 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_44 | +| file://:0:0:0:0 | Load | m2204_44 | +| file://:0:0:0:0 | Load | m2210_40 | +| file://:0:0:0:0 | Load | m2215_44 | +| file://:0:0:0:0 | Load | m2293_50 | | 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 | @@ -1339,30 +1388,30 @@ | 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_23 | +| file://:0:0:0:0 | SideEffect | m1127_23 | +| file://:0:0:0:0 | SideEffect | m1133_23 | +| file://:0:0:0:0 | SideEffect | m1133_23 | +| file://:0:0:0:0 | SideEffect | m2201_13 | +| file://:0:0:0:0 | SideEffect | m2201_13 | +| file://:0:0:0:0 | SideEffect | m2201_34 | +| file://:0:0:0:0 | SideEffect | m2201_34 | +| file://:0:0:0:0 | SideEffect | m2204_13 | +| file://:0:0:0:0 | SideEffect | m2204_13 | +| file://:0:0:0:0 | SideEffect | m2204_34 | +| file://:0:0:0:0 | SideEffect | m2204_34 | +| file://:0:0:0:0 | SideEffect | m2210_9 | +| file://:0:0:0:0 | SideEffect | m2210_9 | +| file://:0:0:0:0 | SideEffect | m2210_30 | +| file://:0:0:0:0 | SideEffect | m2210_30 | +| file://:0:0:0:0 | SideEffect | m2215_13 | +| file://:0:0:0:0 | SideEffect | m2215_13 | +| file://:0:0:0:0 | SideEffect | m2215_34 | +| file://:0:0:0:0 | SideEffect | m2215_34 | +| file://:0:0:0:0 | SideEffect | m2293_21 | +| file://:0:0:0:0 | SideEffect | m2293_21 | +| file://:0:0:0:0 | SideEffect | m2293_40 | +| file://:0:0:0:0 | SideEffect | m2293_40 | | file://:0:0:0:0 | SideEffect | ~m0_4 | | file://:0:0:0:0 | SideEffect | ~m0_4 | | file://:0:0:0:0 | SideEffect | ~m0_4 | @@ -1372,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_22 | +| file://:0:0:0:0 | SideEffect | ~m1133_22 | +| 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_33 | +| file://:0:0:0:0 | SideEffect | ~m2204_33 | +| file://:0:0:0:0 | SideEffect | ~m2210_29 | +| file://:0:0:0:0 | SideEffect | ~m2215_33 | +| 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_39 | | file://:0:0:0:0 | StoreValue | r0_1 | | file://:0:0:0:0 | StoreValue | r0_1 | | file://:0:0:0:0 | StoreValue | r0_1 | @@ -1432,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 | @@ -6147,6333 +6210,6368 @@ | 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_15 | +| ir.cpp:1127:14:1127:14 | Address | &:r1127_38 | +| 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_16 | +| ir.cpp:1127:18:1127:18 | Address | &:r1127_41 | +| ir.cpp:1127:18:1127:18 | Address | &:r1127_47 | +| ir.cpp:1127:18:1127:18 | Address | &:r1127_47 | +| 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_47 | +| ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_10 | +| ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_18 | +| ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_26 | +| ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_27 | +| ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_40 | +| ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_48 | +| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_12 | +| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_20 | +| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_30 | +| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_32 | +| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_35 | +| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_42 | +| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_50 | +| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_53 | +| ir.cpp:1127:18:1127:18 | ChiTotal | total:m0_7 | +| ir.cpp:1127:18:1127:18 | ChiTotal | total:m1126_4 | +| ir.cpp:1127:18:1127:18 | ChiTotal | total:m1127_13 | +| ir.cpp:1127:18:1127:18 | ChiTotal | total:m1127_23 | +| ir.cpp:1127:18:1127:18 | ChiTotal | total:m1127_24 | +| ir.cpp:1127:18:1127:18 | ChiTotal | total:m1127_31 | +| ir.cpp:1127:18:1127:18 | ChiTotal | total:m1127_36 | +| ir.cpp:1127:18:1127:18 | ChiTotal | total:m1127_43 | +| ir.cpp:1127:18:1127:18 | Condition | r1127_34 | +| 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_14 | +| ir.cpp:1127:18:1127:18 | Phi | from 0:~m1127_21 | +| ir.cpp:1127:18:1127:18 | Phi | from 4:m1127_54 | +| ir.cpp:1127:18:1127:18 | Phi | from 4:~m1127_51 | +| ir.cpp:1127:18:1127:18 | SideEffect | m1127_23 | +| ir.cpp:1127:18:1127:18 | SideEffect | ~m1126_4 | +| ir.cpp:1127:18:1127:18 | SideEffect | ~m1127_13 | +| ir.cpp:1127:18:1127:18 | SideEffect | ~m1127_24 | +| ir.cpp:1127:18:1127:18 | SideEffect | ~m1127_31 | +| ir.cpp:1127:18:1127:18 | SideEffect | ~m1127_36 | +| ir.cpp:1127:18:1127:18 | SideEffect | ~m1127_43 | +| 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_19 | +| 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_17 | +| ir.cpp:1127:18:1127:18 | Unary | r1127_25 | +| ir.cpp:1127:18:1127:18 | Unary | r1127_28 | +| ir.cpp:1127:18:1127:18 | Unary | r1127_39 | +| ir.cpp:1127:18:1127:18 | Unary | r1127_49 | +| ir.cpp:1127:18:1127:19 | Load | ~m1127_43 | +| ir.cpp:1127:18:1127:19 | StoreValue | r1127_44 | +| 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_45 | +| 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_15 | +| ir.cpp:1133:21:1133:21 | Address | &:r1133_47 | +| 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_16 | +| ir.cpp:1133:25:1133:25 | Address | &:r1133_38 | +| ir.cpp:1133:25:1133:25 | Address | &:r1133_38 | +| 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_38 | +| ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_10 | +| ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_18 | +| ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_26 | +| ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_27 | +| ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_39 | +| ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_49 | +| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_12 | +| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_20 | +| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_30 | +| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_32 | +| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_35 | +| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_41 | +| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_44 | +| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_51 | +| ir.cpp:1133:25:1133:25 | ChiTotal | total:m0_21 | +| ir.cpp:1133:25:1133:25 | ChiTotal | total:m1127_36 | +| ir.cpp:1133:25:1133:25 | ChiTotal | total:m1133_13 | +| ir.cpp:1133:25:1133:25 | ChiTotal | total:m1133_23 | +| ir.cpp:1133:25:1133:25 | ChiTotal | total:m1133_24 | +| ir.cpp:1133:25:1133:25 | ChiTotal | total:m1133_31 | +| ir.cpp:1133:25:1133:25 | ChiTotal | total:m1133_36 | +| ir.cpp:1133:25:1133:25 | ChiTotal | total:m1133_52 | +| ir.cpp:1133:25:1133:25 | Condition | r1133_34 | +| 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_14 | +| ir.cpp:1133:25:1133:25 | Phi | from 5:~m1133_21 | +| ir.cpp:1133:25:1133:25 | Phi | from 7:m1133_45 | +| ir.cpp:1133:25:1133:25 | Phi | from 7:~m1133_42 | +| ir.cpp:1133:25:1133:25 | SideEffect | m1133_23 | +| ir.cpp:1133:25:1133:25 | SideEffect | ~m1127_36 | +| ir.cpp:1133:25:1133:25 | SideEffect | ~m1133_13 | +| ir.cpp:1133:25:1133:25 | SideEffect | ~m1133_24 | +| ir.cpp:1133:25:1133:25 | SideEffect | ~m1133_31 | +| ir.cpp:1133:25:1133:25 | SideEffect | ~m1133_36 | +| ir.cpp:1133:25:1133:25 | SideEffect | ~m1133_52 | +| 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_19 | +| 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_17 | +| ir.cpp:1133:25:1133:25 | Unary | r1133_25 | +| ir.cpp:1133:25:1133:25 | Unary | r1133_28 | +| ir.cpp:1133:25:1133:25 | Unary | r1133_40 | +| ir.cpp:1133:25:1133:25 | Unary | r1133_48 | +| ir.cpp:1133:25:1133:25 | Unary | r1133_50 | +| ir.cpp:1133:25:1133:26 | StoreValue | r1133_55 | +| ir.cpp:1133:25:1133:26 | Unary | r1133_53 | +| ir.cpp:1133:25:1133:26 | Unary | r1133_54 | +| 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_56 | +| ir.cpp:1134:13:1134:13 | Load | ~m1133_52 | +| 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_36 | +| ir.cpp:1137:5:1137:5 | Phi | from 9:~m1133_52 | +| 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_26 | +| 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_49 | +| ir.cpp:2201:69:2201:69 | Address | &:r2201_57 | +| ir.cpp:2201:69:2201:69 | Address | &:r2201_57 | +| ir.cpp:2201:69:2201:69 | Arg(this) | this:r2201_57 | +| ir.cpp:2201:69:2201:69 | CallTarget | func:r2201_58 | +| ir.cpp:2201:69:2201:69 | ChiPartial | partial:m2201_60 | +| ir.cpp:2201:69:2201:69 | ChiPartial | partial:m2201_63 | +| 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_27 | +| ir.cpp:2201:73:2201:73 | Address | &:r2201_52 | +| ir.cpp:2201:73:2201:73 | Address | &:r2201_65 | +| ir.cpp:2201:73:2201:73 | Address | &:r2201_65 | +| 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_65 | +| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_21 | +| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_29 | +| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_37 | +| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_38 | +| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_51 | +| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_66 | +| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_23 | +| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_31 | +| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_41 | +| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_43 | +| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_46 | +| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_53 | +| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_68 | +| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_71 | +| ir.cpp:2201:73:2201:73 | ChiTotal | total:m0_9 | +| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_11 | +| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_24 | +| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_34 | +| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_35 | +| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_42 | +| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_47 | +| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_61 | +| ir.cpp:2201:73:2201:73 | Condition | r2201_45 | +| 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_25 | +| ir.cpp:2201:73:2201:73 | Phi | from 7:~m2201_32 | +| ir.cpp:2201:73:2201:73 | Phi | from 9:m2201_72 | +| ir.cpp:2201:73:2201:73 | Phi | from 9:~m2201_69 | +| ir.cpp:2201:73:2201:73 | SideEffect | m2201_34 | +| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_11 | +| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_24 | +| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_35 | +| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_42 | +| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_47 | +| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_61 | +| ir.cpp:2201:73:2201:73 | StoreValue | r2201_22 | +| ir.cpp:2201:73:2201:73 | StoreValue | r2201_30 | +| ir.cpp:2201:73:2201:73 | Unary | r2201_20 | +| ir.cpp:2201:73:2201:73 | Unary | r2201_28 | +| ir.cpp:2201:73:2201:73 | Unary | r2201_36 | +| ir.cpp:2201:73:2201:73 | Unary | r2201_39 | +| ir.cpp:2201:73:2201:73 | Unary | r2201_50 | +| ir.cpp:2201:73:2201:73 | Unary | r2201_67 | +| 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_54 | +| ir.cpp:2201:73:2201:75 | StoreValue | r2201_55 | +| 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_56 | +| ir.cpp:2202:7:2202:7 | SideEffect | m2201_56 | +| 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_54 | +| ir.cpp:2202:9:2202:13 | SideEffect | ~m2201_54 | +| 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_26 | +| 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_65 | +| ir.cpp:2204:42:2204:43 | Address | &:r2204_65 | +| ir.cpp:2204:42:2204:43 | Arg(this) | this:r2204_1 | +| ir.cpp:2204:42:2204:43 | Arg(this) | this:r2204_65 | +| ir.cpp:2204:42:2204:43 | CallTarget | func:r2204_66 | +| ir.cpp:2204:42:2204:43 | ChiPartial | partial:m2204_68 | +| ir.cpp:2204:42:2204:43 | ChiPartial | partial:m2204_71 | +| ir.cpp:2204:42:2204:43 | ChiTotal | total:m2204_13 | +| ir.cpp:2204:42:2204:43 | ChiTotal | total:m2204_61 | +| ir.cpp:2204:42:2204:43 | SideEffect | m2204_13 | +| ir.cpp:2204:42:2204:43 | SideEffect | ~m2204_61 | +| 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_47 | +| ir.cpp:2204:45:2204:46 | ChiTotal | total:m2204_2 | +| ir.cpp:2204:45:2204:46 | SideEffect | ~m2201_47 | +| ir.cpp:2204:69:2204:69 | Address | &:r2204_49 | +| ir.cpp:2204:69:2204:69 | Address | &:r2204_57 | +| ir.cpp:2204:69:2204:69 | Address | &:r2204_57 | +| ir.cpp:2204:69:2204:69 | Address | &:r2204_73 | +| ir.cpp:2204:69:2204:69 | Address | &:r2204_73 | +| ir.cpp:2204:69:2204:69 | Arg(this) | this:r2204_57 | +| ir.cpp:2204:69:2204:69 | Arg(this) | this:r2204_73 | +| ir.cpp:2204:69:2204:69 | CallTarget | func:r2204_58 | +| ir.cpp:2204:69:2204:69 | CallTarget | func:r2204_74 | +| ir.cpp:2204:69:2204:69 | ChiPartial | partial:m2204_60 | +| ir.cpp:2204:69:2204:69 | ChiPartial | partial:m2204_63 | +| ir.cpp:2204:69:2204:69 | ChiPartial | partial:m2204_76 | +| ir.cpp:2204:69:2204:69 | ChiPartial | partial:m2204_79 | +| 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_27 | +| ir.cpp:2204:73:2204:73 | Address | &:r2204_52 | +| ir.cpp:2204:73:2204:73 | Address | &:r2204_81 | +| ir.cpp:2204:73:2204:73 | Address | &:r2204_81 | +| 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_81 | +| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_21 | +| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_29 | +| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_37 | +| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_38 | +| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_51 | +| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_82 | +| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_23 | +| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_31 | +| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_41 | +| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_43 | +| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_46 | +| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_53 | +| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_84 | +| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_87 | +| ir.cpp:2204:73:2204:73 | ChiTotal | total:m0_25 | +| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_11 | +| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_24 | +| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_34 | +| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_35 | +| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_42 | +| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_47 | +| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_77 | +| ir.cpp:2204:73:2204:73 | Condition | r2204_45 | +| 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_25 | +| ir.cpp:2204:73:2204:73 | Phi | from 10:~m2204_32 | +| ir.cpp:2204:73:2204:73 | Phi | from 14:m2204_88 | +| ir.cpp:2204:73:2204:73 | Phi | from 14:~m2204_85 | +| ir.cpp:2204:73:2204:73 | SideEffect | m2204_34 | +| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_11 | +| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_24 | +| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_35 | +| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_42 | +| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_47 | +| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_77 | +| ir.cpp:2204:73:2204:73 | StoreValue | r2204_22 | +| ir.cpp:2204:73:2204:73 | StoreValue | r2204_30 | +| ir.cpp:2204:73:2204:73 | Unary | r2204_20 | +| ir.cpp:2204:73:2204:73 | Unary | r2204_28 | +| ir.cpp:2204:73:2204:73 | Unary | r2204_36 | +| ir.cpp:2204:73:2204:73 | Unary | r2204_39 | +| ir.cpp:2204:73:2204:73 | Unary | r2204_50 | +| ir.cpp:2204:73:2204:73 | Unary | r2204_83 | +| 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_54 | +| ir.cpp:2204:73:2204:75 | StoreValue | r2204_55 | +| 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_56 | +| ir.cpp:2205:7:2205:7 | SideEffect | m2204_56 | +| 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_54 | +| ir.cpp:2205:9:2205:13 | SideEffect | ~m2204_54 | +| 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_22 | +| 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_62 | +| ir.cpp:2210:26:2210:27 | Address | &:r2210_62 | +| ir.cpp:2210:26:2210:27 | Arg(this) | this:r2210_1 | +| ir.cpp:2210:26:2210:27 | Arg(this) | this:r2210_62 | +| ir.cpp:2210:26:2210:27 | CallTarget | func:r2210_63 | +| ir.cpp:2210:26:2210:27 | ChiPartial | partial:m2210_65 | +| ir.cpp:2210:26:2210:27 | ChiPartial | partial:m2210_68 | +| ir.cpp:2210:26:2210:27 | ChiTotal | total:m2210_9 | +| ir.cpp:2210:26:2210:27 | ChiTotal | total:m2210_59 | +| ir.cpp:2210:26:2210:27 | SideEffect | m2210_9 | +| ir.cpp:2210:26:2210:27 | SideEffect | ~m2210_59 | +| 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_47 | +| ir.cpp:2210:29:2210:30 | ChiTotal | total:m2210_2 | +| ir.cpp:2210:29:2210:30 | SideEffect | ~m2204_47 | +| ir.cpp:2210:37:2210:37 | Address | &:r2210_54 | +| ir.cpp:2210:41:2210:41 | Address | &:r2210_15 | +| ir.cpp:2210:41:2210:41 | Address | &:r2210_23 | +| ir.cpp:2210:41:2210:41 | Address | &:r2210_45 | +| ir.cpp:2210:41:2210:41 | Address | &:r2210_45 | +| ir.cpp:2210:41:2210:41 | Address | &:r2210_57 | +| 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_45 | +| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_17 | +| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_25 | +| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_33 | +| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_34 | +| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_46 | +| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_56 | +| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_19 | +| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_27 | +| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_37 | +| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_39 | +| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_42 | +| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_48 | +| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_51 | +| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_58 | +| ir.cpp:2210:41:2210:41 | ChiTotal | total:m0_41 | +| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_7 | +| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_20 | +| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_30 | +| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_31 | +| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_38 | +| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_43 | +| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_59 | +| ir.cpp:2210:41:2210:41 | Condition | r2210_41 | +| 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_21 | +| ir.cpp:2210:41:2210:41 | Phi | from 15:~m2210_28 | +| ir.cpp:2210:41:2210:41 | Phi | from 17:m2210_52 | +| ir.cpp:2210:41:2210:41 | Phi | from 17:~m2210_49 | +| ir.cpp:2210:41:2210:41 | SideEffect | m2210_30 | +| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_7 | +| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_20 | +| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_31 | +| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_38 | +| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_43 | +| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_59 | +| ir.cpp:2210:41:2210:41 | StoreValue | r2210_18 | +| ir.cpp:2210:41:2210:41 | StoreValue | r2210_26 | +| ir.cpp:2210:41:2210:41 | Unary | r2210_16 | +| ir.cpp:2210:41:2210:41 | Unary | r2210_24 | +| ir.cpp:2210:41:2210:41 | Unary | r2210_32 | +| ir.cpp:2210:41:2210:41 | Unary | r2210_35 | +| ir.cpp:2210:41:2210:41 | Unary | r2210_47 | +| ir.cpp:2210:41:2210:41 | Unary | r2210_55 | +| 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_59 | +| ir.cpp:2210:41:2210:43 | StoreValue | r2210_60 | +| 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_61 | +| 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_26 | +| 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_43 | +| ir.cpp:2215:45:2215:46 | ChiTotal | total:m2215_2 | +| ir.cpp:2215:45:2215:46 | SideEffect | ~m2210_43 | +| ir.cpp:2215:69:2215:69 | Address | &:r2215_49 | +| ir.cpp:2215:69:2215:69 | Address | &:r2215_57 | +| ir.cpp:2215:69:2215:69 | Address | &:r2215_57 | +| ir.cpp:2215:69:2215:69 | Arg(this) | this:r2215_57 | +| ir.cpp:2215:69:2215:69 | CallTarget | func:r2215_58 | +| ir.cpp:2215:69:2215:69 | ChiPartial | partial:m2215_60 | +| ir.cpp:2215:69:2215:69 | ChiPartial | partial:m2215_63 | +| ir.cpp:2215:69:2215:69 | ChiTotal | total:m2215_56 | +| ir.cpp:2215:69:2215:69 | ChiTotal | total:m2218_13 | +| ir.cpp:2215:69:2215:69 | SideEffect | m2215_56 | +| 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_27 | +| ir.cpp:2215:73:2215:73 | Address | &:r2215_52 | +| ir.cpp:2215:73:2215:73 | Address | &:r2215_65 | +| ir.cpp:2215:73:2215:73 | Address | &:r2215_65 | +| 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_65 | +| ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_21 | +| ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_29 | +| ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_37 | +| ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_38 | +| ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_51 | +| ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_66 | +| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_23 | +| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_31 | +| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_41 | +| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_43 | +| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_46 | +| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_53 | +| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_68 | +| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_71 | +| ir.cpp:2215:73:2215:73 | ChiTotal | total:m0_57 | +| ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_11 | +| ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_24 | +| ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_34 | +| ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_35 | +| ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_42 | +| ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_47 | +| ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_61 | +| ir.cpp:2215:73:2215:73 | Condition | r2215_45 | +| 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_25 | +| ir.cpp:2215:73:2215:73 | Phi | from 20:~m2215_32 | +| ir.cpp:2215:73:2215:73 | Phi | from 22:m2215_72 | +| ir.cpp:2215:73:2215:73 | Phi | from 22:~m2215_69 | +| ir.cpp:2215:73:2215:73 | SideEffect | m2215_34 | +| ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_11 | +| ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_24 | +| ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_35 | +| ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_42 | +| ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_47 | +| ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_61 | +| ir.cpp:2215:73:2215:73 | StoreValue | r2215_22 | +| ir.cpp:2215:73:2215:73 | StoreValue | r2215_30 | +| ir.cpp:2215:73:2215:73 | Unary | r2215_20 | +| ir.cpp:2215:73:2215:73 | Unary | r2215_28 | +| ir.cpp:2215:73:2215:73 | Unary | r2215_36 | +| ir.cpp:2215:73:2215:73 | Unary | r2215_39 | +| ir.cpp:2215:73:2215:73 | Unary | r2215_50 | +| ir.cpp:2215:73:2215:73 | Unary | r2215_67 | +| 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_54 | +| ir.cpp:2215:73:2215:75 | StoreValue | r2215_55 | +| 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_54 | +| ir.cpp:2216:27:2216:28 | ChiTotal | total:m2216_2 | +| ir.cpp:2216:27:2216:28 | SideEffect | ~m2215_54 | +| 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_69 | +| ir.cpp:2219:1:2219:1 | ChiTotal | total:m2210_66 | +| ir.cpp:2219:1:2219:1 | ChiTotal | total:m2215_47 | +| 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_69 | +| ir.cpp:2219:1:2219:1 | SideEffect | ~m2210_66 | +| ir.cpp:2219:1:2219:1 | SideEffect | ~m2215_47 | +| 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_32 | +| ir.cpp:2293:16:2293:16 | Address | &:r2293_55 | +| ir.cpp:2293:16:2293:16 | Address | &:r2293_55 | +| ir.cpp:2293:16:2293:16 | Address | &:r2293_72 | +| ir.cpp:2293:16:2293:16 | Address | &:r2293_72 | +| ir.cpp:2293:16:2293:16 | Arg(this) | this:r2293_55 | +| ir.cpp:2293:16:2293:16 | Arg(this) | this:r2293_72 | +| ir.cpp:2293:16:2293:16 | CallTarget | func:r2293_57 | +| ir.cpp:2293:16:2293:16 | CallTarget | func:r2293_73 | +| ir.cpp:2293:16:2293:16 | ChiPartial | partial:m2293_67 | +| ir.cpp:2293:16:2293:16 | ChiPartial | partial:m2293_70 | +| ir.cpp:2293:16:2293:16 | ChiPartial | partial:m2293_75 | +| ir.cpp:2293:16:2293:16 | ChiPartial | partial:m2293_78 | +| ir.cpp:2293:16:2293:16 | ChiTotal | total:m2293_56 | +| ir.cpp:2293:16:2293:16 | ChiTotal | total:m2293_62 | +| ir.cpp:2293:16:2293:16 | ChiTotal | total:m2293_71 | +| ir.cpp:2293:16:2293:16 | ChiTotal | total:m2295_5 | +| ir.cpp:2293:16:2293:16 | SideEffect | m2293_71 | +| ir.cpp:2293:16:2293:16 | SideEffect | ~m2293_62 | +| 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_33 | +| ir.cpp:2293:20:2293:20 | Address | &:r2293_80 | +| ir.cpp:2293:20:2293:20 | Address | &:r2293_80 | +| 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_80 | +| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_27 | +| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_35 | +| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_43 | +| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_44 | +| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_59 | +| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_81 | +| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_29 | +| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_37 | +| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_47 | +| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_49 | +| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_52 | +| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_61 | +| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_83 | +| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_86 | +| ir.cpp:2293:20:2293:20 | ChiTotal | total:m0_9 | +| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_19 | +| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_30 | +| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_40 | +| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_41 | +| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_48 | +| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_53 | +| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_76 | +| ir.cpp:2293:20:2293:20 | Condition | r2293_51 | +| 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_31 | +| ir.cpp:2293:20:2293:20 | Phi | from 3:~m2293_38 | +| ir.cpp:2293:20:2293:20 | Phi | from 5:m2293_87 | +| ir.cpp:2293:20:2293:20 | Phi | from 5:~m2293_84 | +| ir.cpp:2293:20:2293:20 | SideEffect | m2293_40 | +| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_19 | +| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_30 | +| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_41 | +| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_48 | +| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_53 | +| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_76 | +| ir.cpp:2293:20:2293:20 | StoreValue | r2293_28 | +| ir.cpp:2293:20:2293:20 | StoreValue | r2293_36 | +| ir.cpp:2293:20:2293:20 | Unary | r2293_26 | +| ir.cpp:2293:20:2293:20 | Unary | r2293_34 | +| ir.cpp:2293:20:2293:20 | Unary | r2293_42 | +| ir.cpp:2293:20:2293:20 | Unary | r2293_45 | +| ir.cpp:2293:20:2293:20 | Unary | r2293_58 | +| ir.cpp:2293:20:2293:20 | Unary | r2293_60 | +| ir.cpp:2293:20:2293:20 | Unary | r2293_82 | +| 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_65 | +| ir.cpp:2293:20:2293:56 | Arg(0) | 0:r2293_65 | +| ir.cpp:2293:20:2293:56 | SideEffect | ~m2293_68 | +| ir.cpp:2293:20:2293:56 | Unary | r2293_63 | +| ir.cpp:2293:20:2293:56 | Unary | r2293_64 | +| 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_68 | +| ir.cpp:2294:16:2294:17 | ChiTotal | total:m2294_2 | +| ir.cpp:2294:16:2294:17 | SideEffect | ~m2293_68 | +| 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_53 | +| ir.cpp:2297:18:2297:25 | ChiTotal | total:m2297_2 | +| ir.cpp:2297:18:2297:25 | SideEffect | ~m2293_53 | +| 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 671a9f6a0d3..1ac2a6c9f8a 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -6825,3717 +6825,3735 @@ ir.cpp: # 1054| v1054_41(void) = AliasedUse : ~m? # 1054| v1054_42(void) = ExitFunction : -# 1079| void RangeBasedFor(vector<int> const&) -# 1079| Block 0 -# 1079| v1079_1(void) = EnterFunction : -# 1079| mu1079_2(unknown) = AliasedDefinition : -# 1079| mu1079_3(unknown) = InitializeNonLocal : -# 1079| r1079_4(glval<vector<int> &>) = VariableAddress[v] : -# 1079| mu1079_5(vector<int> &) = InitializeParameter[v] : &:r1079_4 -# 1079| r1079_6(vector<int> &) = Load[v] : &:r1079_4, ~m? -# 1079| mu1079_7(unknown) = InitializeIndirection[v] : &:r1079_6 -# 1080| r1080_1(glval<vector<int> &>) = VariableAddress[(__range)] : -# 1080| r1080_2(glval<vector<int> &>) = VariableAddress[v] : -# 1080| r1080_3(vector<int> &) = Load[v] : &:r1080_2, ~m? -# 1080| r1080_4(glval<vector<int>>) = CopyValue : r1080_3 -# 1080| r1080_5(vector<int> &) = CopyValue : r1080_4 -# 1080| mu1080_6(vector<int> &) = Store[(__range)] : &:r1080_1, r1080_5 -# 1080| r1080_7(glval<iterator>) = VariableAddress[(__begin)] : -# 1080| r1080_8(glval<vector<int> &>) = VariableAddress[(__range)] : -# 1080| r1080_9(vector<int> &) = Load[(__range)] : &:r1080_8, ~m? -#-----| r0_1(glval<vector<int>>) = CopyValue : r1080_9 -# 1080| r1080_10(glval<unknown>) = 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<iterator>) = VariableAddress[(__end)] : -# 1080| r1080_15(glval<vector<int> &>) = VariableAddress[(__range)] : -# 1080| r1080_16(vector<int> &) = Load[(__range)] : &:r1080_15, ~m? -#-----| r0_3(glval<vector<int>>) = CopyValue : r1080_16 -# 1080| r1080_17(glval<unknown>) = 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<int> const&) +# 1126| Block 0 +# 1126| v1126_1(void) = EnterFunction : +# 1126| mu1126_2(unknown) = AliasedDefinition : +# 1126| mu1126_3(unknown) = InitializeNonLocal : +# 1126| r1126_4(glval<vector<int> &>) = VariableAddress[v] : +# 1126| mu1126_5(vector<int> &) = InitializeParameter[v] : &:r1126_4 +# 1126| r1126_6(vector<int> &) = Load[v] : &:r1126_4, ~m? +# 1126| mu1126_7(unknown) = InitializeIndirection[v] : &:r1126_6 +# 1127| r1127_1(glval<vector<int> &>) = VariableAddress[(__range)] : +# 1127| r1127_2(glval<vector<int> &>) = VariableAddress[v] : +# 1127| r1127_3(vector<int> &) = Load[v] : &:r1127_2, ~m? +# 1127| r1127_4(glval<vector<int>>) = CopyValue : r1127_3 +# 1127| r1127_5(vector<int> &) = CopyValue : r1127_4 +# 1127| mu1127_6(vector<int> &) = Store[(__range)] : &:r1127_1, r1127_5 +# 1127| r1127_7(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +# 1127| r1127_8(glval<vector<int> &>) = VariableAddress[(__range)] : +# 1127| r1127_9(vector<int> &) = Load[(__range)] : &:r1127_8, ~m? +#-----| r0_1(glval<vector<int>>) = CopyValue : r1127_9 +# 1127| r1127_10(glval<unknown>) = FunctionAddress[begin] : +# 1127| r1127_11(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[begin] : func:r1127_10, this:r0_1 +# 1127| mu1127_12(unknown) = ^CallSideEffect : ~m? +#-----| v0_2(void) = ^IndirectReadSideEffect[-1] : &:r0_1, ~m? +# 1127| mu1127_13(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__begin)] : &:r1127_7, r1127_11 +# 1127| r1127_14(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +# 1127| r1127_15(glval<vector<int> &>) = VariableAddress[(__range)] : +# 1127| r1127_16(vector<int> &) = Load[(__range)] : &:r1127_15, ~m? +#-----| r0_3(glval<vector<int>>) = CopyValue : r1127_16 +# 1127| r1127_17(glval<unknown>) = FunctionAddress[end] : +# 1127| r1127_18(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[end] : func:r1127_17, this:r0_3 +# 1127| mu1127_19(unknown) = ^CallSideEffect : ~m? +#-----| v0_4(void) = ^IndirectReadSideEffect[-1] : &:r0_3, ~m? +# 1127| mu1127_20(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__end)] : &:r1127_14, r1127_18 #-----| Goto -> Block 1 -# 1080| Block 1 -# 1080| r1080_21(glval<iterator>) = VariableAddress[(__begin)] : -#-----| r0_5(glval<iterator>) = Convert : r1080_21 -# 1080| r1080_22(glval<unknown>) = FunctionAddress[operator!=] : -# 1080| r1080_23(glval<iterator>) = 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_21(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_5(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1127_21 +# 1127| r1127_22(glval<unknown>) = FunctionAddress[operator!=] : +#-----| r0_6(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[#temp0:0] : +#-----| mu0_7(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Uninitialized[#temp0:0] : &:r0_6 +# 1127| r1127_23(glval<unknown>) = FunctionAddress[iterator] : +# 1127| r1127_24(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +#-----| r0_8(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1127_24 +#-----| r0_9(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = CopyValue : r0_8 +# 1127| v1127_25(void) = Call[iterator] : func:r1127_23, this:r0_6, 0:r0_9 +# 1127| mu1127_26(unknown) = ^CallSideEffect : ~m? +#-----| v0_10(void) = ^BufferReadSideEffect[0] : &:r0_9, ~m? +# 1127| mu1127_27(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_6 +#-----| r0_11(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Load[#temp0:0] : &:r0_6, ~m? +# 1127| r1127_28(bool) = Call[operator!=] : func:r1127_22, this:r0_5, 0:r0_11 +# 1127| mu1127_29(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? +# 1127| v1127_30(void) = ConditionalBranch : r1127_28 #-----| False -> Block 5 #-----| True -> Block 2 -# 1080| Block 2 -# 1080| r1080_28(glval<int>) = VariableAddress[e] : -# 1080| r1080_29(glval<iterator>) = VariableAddress[(__begin)] : -#-----| r0_7(glval<iterator>) = Convert : r1080_29 -# 1080| r1080_30(glval<unknown>) = 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<int>) = 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_31(glval<int>) = VariableAddress[e] : +# 1127| r1127_32(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_13(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1127_32 +# 1127| r1127_33(glval<unknown>) = FunctionAddress[operator*] : +# 1127| r1127_34(int &) = Call[operator*] : func:r1127_33, this:r0_13 +# 1127| mu1127_35(unknown) = ^CallSideEffect : ~m? +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, ~m? +# 1127| r1127_36(int) = Load[?] : &:r1127_34, ~m? +# 1127| mu1127_37(int) = Store[e] : &:r1127_31, r1127_36 +# 1128| r1128_1(glval<int>) = 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<iterator>) = VariableAddress[(__begin)] : -# 1080| r1080_37(glval<unknown>) = 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<iterator>) = CopyValue : r1080_38 +# 1127| Block 4 +# 1127| v1127_38(void) = NoOp : +# 1127| r1127_39(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +# 1127| r1127_40(glval<unknown>) = FunctionAddress[operator++] : +# 1127| r1127_41(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = Call[operator++] : func:r1127_40, this:r1127_39 +# 1127| mu1127_42(unknown) = ^CallSideEffect : ~m? +# 1127| v1127_43(void) = ^IndirectReadSideEffect[-1] : &:r1127_39, ~m? +# 1127| mu1127_44(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r1127_39 +# 1127| r1127_45(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r1127_41 #-----| Goto (back edge) -> Block 1 -# 1086| Block 5 -# 1086| r1086_1(glval<vector<int> &>) = VariableAddress[(__range)] : -# 1086| r1086_2(glval<vector<int> &>) = VariableAddress[v] : -# 1086| r1086_3(vector<int> &) = Load[v] : &:r1086_2, ~m? -# 1086| r1086_4(glval<vector<int>>) = CopyValue : r1086_3 -# 1086| r1086_5(vector<int> &) = CopyValue : r1086_4 -# 1086| mu1086_6(vector<int> &) = Store[(__range)] : &:r1086_1, r1086_5 -# 1086| r1086_7(glval<iterator>) = VariableAddress[(__begin)] : -# 1086| r1086_8(glval<vector<int> &>) = VariableAddress[(__range)] : -# 1086| r1086_9(vector<int> &) = Load[(__range)] : &:r1086_8, ~m? -#-----| r0_9(glval<vector<int>>) = CopyValue : r1086_9 -# 1086| r1086_10(glval<unknown>) = 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<iterator>) = VariableAddress[(__end)] : -# 1086| r1086_15(glval<vector<int> &>) = VariableAddress[(__range)] : -# 1086| r1086_16(vector<int> &) = Load[(__range)] : &:r1086_15, ~m? -#-----| r0_11(glval<vector<int>>) = CopyValue : r1086_16 -# 1086| r1086_17(glval<unknown>) = 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<vector<int> &>) = VariableAddress[(__range)] : +# 1133| r1133_2(glval<vector<int> &>) = VariableAddress[v] : +# 1133| r1133_3(vector<int> &) = Load[v] : &:r1133_2, ~m? +# 1133| r1133_4(glval<vector<int>>) = CopyValue : r1133_3 +# 1133| r1133_5(vector<int> &) = CopyValue : r1133_4 +# 1133| mu1133_6(vector<int> &) = Store[(__range)] : &:r1133_1, r1133_5 +# 1133| r1133_7(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +# 1133| r1133_8(glval<vector<int> &>) = VariableAddress[(__range)] : +# 1133| r1133_9(vector<int> &) = Load[(__range)] : &:r1133_8, ~m? +#-----| r0_15(glval<vector<int>>) = CopyValue : r1133_9 +# 1133| r1133_10(glval<unknown>) = FunctionAddress[begin] : +# 1133| r1133_11(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[begin] : func:r1133_10, this:r0_15 +# 1133| mu1133_12(unknown) = ^CallSideEffect : ~m? +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? +# 1133| mu1133_13(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__begin)] : &:r1133_7, r1133_11 +# 1133| r1133_14(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +# 1133| r1133_15(glval<vector<int> &>) = VariableAddress[(__range)] : +# 1133| r1133_16(vector<int> &) = Load[(__range)] : &:r1133_15, ~m? +#-----| r0_17(glval<vector<int>>) = CopyValue : r1133_16 +# 1133| r1133_17(glval<unknown>) = FunctionAddress[end] : +# 1133| r1133_18(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[end] : func:r1133_17, this:r0_17 +# 1133| mu1133_19(unknown) = ^CallSideEffect : ~m? +#-----| v0_18(void) = ^IndirectReadSideEffect[-1] : &:r0_17, ~m? +# 1133| mu1133_20(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__end)] : &:r1133_14, r1133_18 #-----| Goto -> Block 6 -# 1086| Block 6 -# 1086| r1086_21(glval<iterator>) = VariableAddress[(__begin)] : -#-----| r0_13(glval<iterator>) = Convert : r1086_21 -# 1086| r1086_22(glval<unknown>) = FunctionAddress[operator!=] : -# 1086| r1086_23(glval<iterator>) = 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_21(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_19(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1133_21 +# 1133| r1133_22(glval<unknown>) = FunctionAddress[operator!=] : +#-----| r0_20(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[#temp0:0] : +#-----| mu0_21(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Uninitialized[#temp0:0] : &:r0_20 +# 1133| r1133_23(glval<unknown>) = FunctionAddress[iterator] : +# 1133| r1133_24(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +#-----| r0_22(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1133_24 +#-----| r0_23(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = CopyValue : r0_22 +# 1133| v1133_25(void) = Call[iterator] : func:r1133_23, this:r0_20, 0:r0_23 +# 1133| mu1133_26(unknown) = ^CallSideEffect : ~m? +#-----| v0_24(void) = ^BufferReadSideEffect[0] : &:r0_23, ~m? +# 1133| mu1133_27(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_20 +#-----| r0_25(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Load[#temp0:0] : &:r0_20, ~m? +# 1133| r1133_28(bool) = Call[operator!=] : func:r1133_22, this:r0_19, 0:r0_25 +# 1133| mu1133_29(unknown) = ^CallSideEffect : ~m? +#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_19, ~m? +# 1133| v1133_30(void) = ConditionalBranch : r1133_28 #-----| False -> Block 10 #-----| True -> Block 8 -# 1086| Block 7 -# 1086| r1086_28(glval<iterator>) = VariableAddress[(__begin)] : -# 1086| r1086_29(glval<unknown>) = 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<iterator>) = CopyValue : r1086_30 +# 1133| Block 7 +# 1133| r1133_31(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +# 1133| r1133_32(glval<unknown>) = FunctionAddress[operator++] : +# 1133| r1133_33(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = Call[operator++] : func:r1133_32, this:r1133_31 +# 1133| mu1133_34(unknown) = ^CallSideEffect : ~m? +# 1133| v1133_35(void) = ^IndirectReadSideEffect[-1] : &:r1133_31, ~m? +# 1133| mu1133_36(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r1133_31 +# 1133| r1133_37(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r1133_33 #-----| Goto (back edge) -> Block 6 -# 1086| Block 8 -# 1086| r1086_35(glval<int &>) = VariableAddress[e] : -# 1086| r1086_36(glval<iterator>) = VariableAddress[(__begin)] : -#-----| r0_15(glval<iterator>) = Convert : r1086_36 -# 1086| r1086_37(glval<unknown>) = 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<int>) = CopyValue : r1086_38 -# 1086| r1086_41(glval<int>) = Convert : r1086_40 -# 1086| r1086_42(int &) = CopyValue : r1086_41 -# 1086| mu1086_43(int &) = Store[e] : &:r1086_35, r1086_42 -# 1087| r1087_1(glval<int &>) = 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_38(glval<int &>) = VariableAddress[e] : +# 1133| r1133_39(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_27(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1133_39 +# 1133| r1133_40(glval<unknown>) = FunctionAddress[operator*] : +# 1133| r1133_41(int &) = Call[operator*] : func:r1133_40, this:r0_27 +# 1133| mu1133_42(unknown) = ^CallSideEffect : ~m? +#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, ~m? +# 1133| r1133_43(glval<int>) = CopyValue : r1133_41 +# 1133| r1133_44(glval<int>) = Convert : r1133_43 +# 1133| r1133_45(int &) = CopyValue : r1133_44 +# 1133| mu1133_46(int &) = Store[e] : &:r1133_38, r1133_45 +# 1134| r1134_1(glval<int &>) = 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<int>) = VariableAddress[x] : -# 1110| mu1110_5(int) = InitializeParameter[x] : &:r1110_4 -# 1111| mu1111_1(unknown) = InlineAsm : ~m? -# 1112| r1112_1(glval<int>) = VariableAddress[#return] : -# 1112| r1112_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : +# 1157| mu1157_5(int) = InitializeParameter[x] : &:r1157_4 +# 1158| mu1158_1(unknown) = InlineAsm : ~m? +# 1159| r1159_1(glval<int>) = VariableAddress[#return] : +# 1159| r1159_2(glval<int>) = 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<int>) = 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<unsigned int &>) = 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<unsigned int>) = VariableAddress[b] : -# 1115| mu1115_9(unsigned int) = InitializeParameter[b] : &:r1115_8 -# 1115| r1115_10(glval<unsigned int &>) = 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<unsigned int>) = VariableAddress[d] : -# 1115| mu1115_15(unsigned int) = InitializeParameter[d] : &:r1115_14 -# 1120| r1120_1(glval<unsigned int &>) = VariableAddress[a] : -# 1120| r1120_2(unsigned int &) = Load[a] : &:r1120_1, ~m? -# 1120| r1120_3(glval<unsigned int>) = CopyValue : r1120_2 -# 1120| r1120_4(glval<unsigned int>) = VariableAddress[b] : -# 1120| r1120_5(glval<unsigned int &>) = 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<unsigned int>) = 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<unsigned int &>) = 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<unsigned int>) = VariableAddress[b] : +# 1162| mu1162_9(unsigned int) = InitializeParameter[b] : &:r1162_8 +# 1162| r1162_10(glval<unsigned int &>) = 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<unsigned int>) = VariableAddress[d] : +# 1162| mu1162_15(unsigned int) = InitializeParameter[d] : &:r1162_14 +# 1167| r1167_1(glval<unsigned int &>) = VariableAddress[a] : +# 1167| r1167_2(unsigned int &) = Load[a] : &:r1167_1, ~m? +# 1167| r1167_3(glval<unsigned int>) = CopyValue : r1167_2 +# 1167| r1167_4(glval<unsigned int>) = VariableAddress[b] : +# 1167| r1167_5(glval<unsigned int &>) = 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<unsigned int>) = 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<int>) = VariableAddress[x] : -# 1127| mu1127_2(int) = Uninitialized[x] : &:r1127_1 -# 1128| r1128_1(glval<int>) = VariableAddress[y] : -# 1128| mu1128_2(int) = Uninitialized[y] : &:r1128_1 -# 1129| r1129_1(glval<int>) = 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<int>) = VariableAddress[x] : +# 1174| mu1174_2(int) = Uninitialized[x] : &:r1174_1 +# 1175| r1175_1(glval<int>) = VariableAddress[y] : +# 1175| mu1175_2(int) = Uninitialized[y] : &:r1175_1 +# 1176| r1176_1(glval<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = 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<bool>) = VariableAddress[b] : -# 1144| mu1144_5(bool) = InitializeParameter[b] : &:r1144_4 -# 1146| r1146_1(glval<int>) = VariableAddress[x] : -# 1146| r1146_2(int) = Constant[5] : -# 1146| mu1146_3(int) = Store[x] : &:r1146_1, r1146_2 -# 1147| r1147_1(glval<bool>) = 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<bool>) = VariableAddress[b] : +# 1191| mu1191_5(bool) = InitializeParameter[b] : &:r1191_4 +# 1193| r1193_1(glval<int>) = VariableAddress[x] : +# 1193| r1193_2(int) = Constant[5] : +# 1193| mu1193_3(int) = Store[x] : &:r1193_1, r1193_2 +# 1194| r1194_1(glval<bool>) = 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<char *>) = VariableAddress[#throw1148:7] : -# 1148| r1148_2(glval<char[15]>) = 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<char *>) = VariableAddress[#throw1195:7] : +# 1195| r1195_2(glval<char[15]>) = 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<int>) = 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<int>) = 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<bool>) = 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<bool>) = 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<int>) = VariableAddress[#temp1151:11] : -# 1151| mu1151_6(int) = Store[#temp1151:11] : &:r1151_5, r1151_4 -# 1151| r1151_7(glval<int>) = VariableAddress[#temp1151:11] : -# 1151| r1151_8(int) = Load[#temp1151:11] : &:r1151_7, ~m? -# 1151| r1151_9(glval<int>) = 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<int>) = VariableAddress[#temp1198:11] : +# 1198| mu1198_6(int) = Store[#temp1198:11] : &:r1198_5, r1198_4 +# 1198| r1198_7(glval<int>) = VariableAddress[#temp1198:11] : +# 1198| r1198_8(int) = Load[#temp1198:11] : &:r1198_7, ~m? +# 1198| r1198_9(glval<int>) = VariableAddress[x] : +# 1198| mu1198_10(int) = Store[x] : &:r1198_9, r1198_8 #-----| Goto -> Block 8 -# 1151| Block 7 -# 1151| r1151_11(glval<String>) = VariableAddress[#throw1151:19] : -# 1151| mu1151_12(String) = Uninitialized[#throw1151:19] : &:r1151_11 -# 1151| r1151_13(glval<unknown>) = FunctionAddress[String] : -# 1151| r1151_14(glval<char[14]>) = 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<String>) = VariableAddress[#throw1198:19] : +# 1198| mu1198_12(String) = Uninitialized[#throw1198:19] : &:r1198_11 +# 1198| r1198_13(glval<unknown>) = FunctionAddress[String] : +# 1198| r1198_14(glval<char[14]>) = 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<int>) = 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<int>) = 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<char *>) = 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<String>) = VariableAddress[#throw1156:5] : -# 1156| mu1156_2(String) = Uninitialized[#throw1156:5] : &:r1156_1 -# 1156| r1156_3(glval<unknown>) = FunctionAddress[String] : -# 1156| r1156_4(glval<char *>) = 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<char *>) = 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<String>) = VariableAddress[#throw1203:5] : +# 1203| mu1203_2(String) = Uninitialized[#throw1203:5] : &:r1203_1 +# 1203| r1203_3(glval<unknown>) = FunctionAddress[String] : +# 1203| r1203_4(glval<char *>) = 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<String &>) = 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<String &>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1166| r1166_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1166| r1166_3(glval<int>) = VariableAddress[i] : -# 1166| r1166_4(int) = Load[i] : &:r1166_3, ~m? -# 1166| r1166_5(glval<int>) = 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<int>) = 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<int>) = VariableAddress[i] : -# 1167| r1167_5(int) = Load[i] : &:r1167_4, ~m? -# 1167| r1167_6(glval<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[x] : +# 1213| r1213_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1213| r1213_3(glval<int>) = VariableAddress[i] : +# 1213| r1213_4(int) = Load[i] : &:r1213_3, ~m? +# 1213| r1213_5(glval<int>) = 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<int>) = 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<int>) = VariableAddress[i] : +# 1214| r1214_5(int) = Load[i] : &:r1214_4, ~m? +# 1214| r1214_6(glval<int>) = 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<int>) = VariableAddress[x] : -# 1174| mu1174_5(int) = InitializeParameter[x] : &:r1174_4 -# 1175| r1175_1(glval<int>) = VariableAddress[y] : -# 1175| mu1175_2(int) = Uninitialized[y] : &:r1175_1 -# 1176| r1176_1(glval<unknown>) = FunctionAddress[memcpy] : -# 1176| r1176_2(glval<int>) = VariableAddress[y] : -# 1176| r1176_3(int *) = CopyValue : r1176_2 -# 1176| r1176_4(void *) = Convert : r1176_3 -# 1176| r1176_5(glval<int>) = 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<int>) = VariableAddress[#return] : -# 1177| r1177_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : +# 1221| mu1221_5(int) = InitializeParameter[x] : &:r1221_4 +# 1222| r1222_1(glval<int>) = VariableAddress[y] : +# 1222| mu1222_2(int) = Uninitialized[y] : &:r1222_1 +# 1223| r1223_1(glval<unknown>) = FunctionAddress[memcpy] : +# 1223| r1223_2(glval<int>) = VariableAddress[y] : +# 1223| r1223_3(int *) = CopyValue : r1223_2 +# 1223| r1223_4(void *) = Convert : r1223_3 +# 1223| r1223_5(glval<int>) = 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<int>) = VariableAddress[#return] : +# 1224| r1224_2(glval<int>) = 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<int>) = 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<String>) = VariableAddress[#return] : -# 1181| mu1181_2(String) = Uninitialized[#return] : &:r1181_1 -# 1181| r1181_3(glval<unknown>) = FunctionAddress[String] : -# 1181| r1181_4(glval<char[4]>) = 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<String>) = 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<String>) = VariableAddress[#return] : +# 1228| mu1228_2(String) = Uninitialized[#return] : &:r1228_1 +# 1228| r1228_3(glval<unknown>) = FunctionAddress[String] : +# 1228| r1228_4(glval<char[4]>) = 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<String>) = 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<int>) = VariableAddress[x] : -# 1184| mu1184_5(int) = InitializeParameter[x] : &:r1184_4 -# 1185| r1185_1(glval<int>) = VariableAddress[y] : -# 1185| r1185_2(int) = Constant[0] : -# 1185| mu1185_3(int) = Store[y] : &:r1185_1, r1185_2 -# 1186| r1186_1(glval<int>) = 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<int>) = VariableAddress[x] : +# 1231| mu1231_5(int) = InitializeParameter[x] : &:r1231_4 +# 1232| r1232_1(glval<int>) = VariableAddress[y] : +# 1232| r1232_2(int) = Constant[0] : +# 1232| mu1232_3(int) = Store[y] : &:r1232_1, r1232_2 +# 1233| r1233_1(glval<int>) = 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<int>) = 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<int>) = VariableAddress[y] : +# 1235| mu1235_3(int) = Store[y] : &:r1235_2, r1235_1 #-----| Goto -> Block 2 -# 1190| Block 2 -# 1190| r1190_1(glval<int>) = VariableAddress[z] : -# 1190| r1190_2(glval<int>) = 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<int>) = VariableAddress[z] : +# 1237| r1237_2(glval<int>) = 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<int>) = VariableAddress[x] : -# 1193| mu1193_5(int) = InitializeParameter[x] : &:r1193_4 -# 1194| r1194_1(glval<int>) = VariableAddress[y] : -# 1194| r1194_2(int) = Constant[0] : -# 1194| mu1194_3(int) = Store[y] : &:r1194_1, r1194_2 -# 1195| r1195_1(glval<int>) = 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<int>) = VariableAddress[x] : +# 1240| mu1240_5(int) = InitializeParameter[x] : &:r1240_4 +# 1241| r1241_1(glval<int>) = VariableAddress[y] : +# 1241| r1241_2(int) = Constant[0] : +# 1241| mu1241_3(int) = Store[y] : &:r1241_1, r1241_2 +# 1242| r1242_1(glval<int>) = 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<int>) = 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<int>) = VariableAddress[y] : -# 1199| mu1199_3(int) = Store[y] : &:r1199_2, r1199_1 -#-----| Goto -> Block 3 - -# 1201| Block 3 -# 1201| r1201_1(glval<int>) = VariableAddress[z] : -# 1201| r1201_2(glval<int>) = 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<int>) = VariableAddress[x] : -# 1204| mu1204_5(int) = InitializeParameter[x] : &:r1204_4 -# 1205| r1205_1(glval<int>) = VariableAddress[y] : -# 1205| r1205_2(int) = Constant[0] : -# 1205| mu1205_3(int) = Store[y] : &:r1205_1, r1205_2 -# 1206| r1206_1(glval<int>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[z] : -# 1213| r1213_2(glval<int>) = 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<int>) = VariableAddress[x] : -# 1216| mu1216_5(int) = InitializeParameter[x] : &:r1216_4 -# 1217| r1217_1(glval<int>) = VariableAddress[y] : -# 1217| r1217_2(int) = Constant[0] : -# 1217| mu1217_3(int) = Store[y] : &:r1217_1, r1217_2 -# 1218| r1218_1(glval<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[z] : -# 1230| r1230_2(glval<int>) = 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<int>) = VariableAddress[x] : -# 1233| mu1233_5(int) = InitializeParameter[x] : &:r1233_4 -# 1236| r1236_1(glval<bool>) = 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<int>) = VariableAddress[c] : -# 1236| r1236_5(glval<int>) = 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<int>) = VariableAddress[#return] : -# 1239| r1239_2(glval<int>) = VariableAddress[a] : -# 1239| r1239_3(int) = Load[a] : &:r1239_2, ~m? -# 1239| r1239_4(glval<int>) = VariableAddress[b] : -# 1239| r1239_5(int) = Load[b] : &:r1239_4, ~m? -# 1239| r1239_6(int) = Add : r1239_3, r1239_5 -# 1239| r1239_7(glval<int>) = VariableAddress[c] : -# 1239| r1239_8(int) = Load[c] : &:r1239_7, ~m? -# 1239| r1239_9(int) = Add : r1239_6, r1239_8 -# 1239| r1239_10(glval<int>) = 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<int>) = 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<int>) = 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<int>) = 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<char *>) = 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<bool>) = 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<String>) = VariableAddress[a] : -#-----| r0_1(glval<unknown>) = 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<int>) = VariableAddress[y] : +# 1244| mu1244_3(int) = Store[y] : &:r1244_2, r1244_1 #-----| Goto -> Block 2 -# 1244| Block 2 -# 1244| r1244_1(glval<bool>) = 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<int>) = VariableAddress[y] : +# 1246| mu1246_3(int) = Store[y] : &:r1246_2, r1246_1 +#-----| Goto -> Block 3 + +# 1248| Block 3 +# 1248| r1248_1(glval<int>) = VariableAddress[z] : +# 1248| r1248_2(glval<int>) = 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<int>) = VariableAddress[x] : +# 1251| mu1251_5(int) = InitializeParameter[x] : &:r1251_4 +# 1252| r1252_1(glval<int>) = VariableAddress[y] : +# 1252| r1252_2(int) = Constant[0] : +# 1252| mu1252_3(int) = Store[y] : &:r1252_1, r1252_2 +# 1253| r1253_1(glval<int>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[z] : +# 1260| r1260_2(glval<int>) = 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<int>) = VariableAddress[x] : +# 1263| mu1263_5(int) = InitializeParameter[x] : &:r1263_4 +# 1264| r1264_1(glval<int>) = VariableAddress[y] : +# 1264| r1264_2(int) = Constant[0] : +# 1264| mu1264_3(int) = Store[y] : &:r1264_1, r1264_2 +# 1265| r1265_1(glval<int>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[z] : +# 1277| r1277_2(glval<int>) = 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<int>) = VariableAddress[x] : +# 1280| mu1280_5(int) = InitializeParameter[x] : &:r1280_4 +# 1283| r1283_1(glval<bool>) = 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<int>) = VariableAddress[c] : +# 1283| r1283_5(glval<int>) = 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<int>) = VariableAddress[#return] : +# 1286| r1286_2(glval<int>) = VariableAddress[a] : +# 1286| r1286_3(int) = Load[a] : &:r1286_2, ~m? +# 1286| r1286_4(glval<int>) = VariableAddress[b] : +# 1286| r1286_5(int) = Load[b] : &:r1286_4, ~m? +# 1286| r1286_6(int) = Add : r1286_3, r1286_5 +# 1286| r1286_7(glval<int>) = VariableAddress[c] : +# 1286| r1286_8(int) = Load[c] : &:r1286_7, ~m? +# 1286| r1286_9(int) = Add : r1286_6, r1286_8 +# 1286| r1286_10(glval<int>) = 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<int>) = 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<int>) = 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<int>) = 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<char *>) = 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<bool>) = 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<String>) = VariableAddress[a] : +#-----| r0_1(glval<unknown>) = 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<bool>) = 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<String>) = VariableAddress[b] : -# 1244| r1244_5(glval<unknown>) = FunctionAddress[String] : -# 1244| r1244_6(glval<char[7]>) = 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<String>) = VariableAddress[b] : +# 1291| r1291_5(glval<unknown>) = FunctionAddress[String] : +# 1291| r1291_6(glval<char[7]>) = 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<bool>) = 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<bool>) = 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<String>) = VariableAddress[c] : -# 1245| r1245_5(glval<unknown>) = FunctionAddress[String] : -# 1245| r1245_6(glval<char *>) = 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<String>) = VariableAddress[c] : +# 1292| r1292_5(glval<unknown>) = FunctionAddress[String] : +# 1292| r1292_6(glval<char *>) = 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<char *>) = 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<char *>) = 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<char[1024]>) = VariableAddress[buffer] : -# 1254| mu1254_2(char[1024]) = Uninitialized[buffer] : &:r1254_1 -# 1254| r1254_3(int) = Constant[0] : -# 1254| r1254_4(glval<char>) = 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<char>) = 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<unknown>) = FunctionAddress[strcpy] : -# 1256| r1256_2(glval<char[1024]>) = VariableAddress[buffer] : -# 1256| r1256_3(char *) = Convert : r1256_2 -# 1256| r1256_4(glval<char *>) = 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<unknown>) = FunctionAddress[strcat] : -# 1257| r1257_2(glval<char[1024]>) = VariableAddress[buffer] : -# 1257| r1257_3(char *) = Convert : r1257_2 -# 1257| r1257_4(glval<char *>) = 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<char *>) = 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<char *>) = 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<char[1024]>) = VariableAddress[buffer] : +# 1301| mu1301_2(char[1024]) = Uninitialized[buffer] : &:r1301_1 +# 1301| r1301_3(int) = Constant[0] : +# 1301| r1301_4(glval<char>) = 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<char>) = 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<unknown>) = FunctionAddress[strcpy] : +# 1303| r1303_2(glval<char[1024]>) = VariableAddress[buffer] : +# 1303| r1303_3(char *) = Convert : r1303_2 +# 1303| r1303_4(glval<char *>) = 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<unknown>) = FunctionAddress[strcat] : +# 1304| r1304_2(glval<char[1024]>) = VariableAddress[buffer] : +# 1304| r1304_3(char *) = Convert : r1304_2 +# 1304| r1304_4(glval<char *>) = 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<A *>) = 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<int>) = VariableAddress[x] : -# 1263| mu1263_9(int) = InitializeParameter[x] : &:r1263_8 -# 1264| r1264_1(glval<int>) = VariableAddress[x] : -# 1264| r1264_2(int) = Load[x] : &:r1264_1, ~m? -# 1264| r1264_3(glval<A *>) = VariableAddress[a] : -# 1264| r1264_4(A *) = Load[a] : &:r1264_3, ~m? -# 1264| r1264_5(glval<int>) = 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<A *>) = 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<int>) = VariableAddress[x] : +# 1310| mu1310_9(int) = InitializeParameter[x] : &:r1310_8 +# 1311| r1311_1(glval<int>) = VariableAddress[x] : +# 1311| r1311_2(int) = Load[x] : &:r1311_1, ~m? +# 1311| r1311_3(glval<A *>) = VariableAddress[a] : +# 1311| r1311_4(A *) = Load[a] : &:r1311_3, ~m? +# 1311| r1311_5(glval<int>) = 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<int>) = VariableAddress[int_arg] : -# 1272| mu1272_5(int) = InitializeParameter[int_arg] : &:r1272_4 -# 1272| r1272_6(glval<A *>) = 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<C>) = VariableAddress[c] : -# 1273| mu1273_2(C) = Uninitialized[c] : &:r1273_1 -# 1273| r1273_3(glval<unknown>) = 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<C>) = VariableAddress[c] : -# 1274| r1274_2(glval<unknown>) = 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<unknown>) = 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<A>) = VariableAddress[a] : -# 1277| mu1277_2(A) = Uninitialized[a] : &:r1277_1 -# 1278| r1278_1(glval<A>) = VariableAddress[a] : -# 1278| r1278_2(glval<unknown>) = FunctionAddress[static_member] : -# 1278| r1278_3(glval<A>) = VariableAddress[a] : -# 1278| r1278_4(A *) = CopyValue : r1278_3 -# 1278| r1278_5(glval<int>) = 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<unknown>) = FunctionAddress[static_member] : -# 1279| r1279_2(glval<A>) = VariableAddress[a] : -# 1279| r1279_3(A *) = CopyValue : r1279_2 -# 1279| r1279_4(glval<int>) = 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<A>) = VariableAddress[a] : -# 1281| r1281_2(A *) = CopyValue : r1281_1 -# 1281| r1281_3(glval<unknown>) = FunctionAddress[static_member] : -# 1281| r1281_4(glval<A *>) = VariableAddress[a_arg] : -# 1281| r1281_5(A *) = Load[a_arg] : &:r1281_4, ~m? -# 1281| r1281_6(glval<int>) = 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<A *>) = VariableAddress[a_arg] : -# 1282| r1282_2(A *) = Load[a_arg] : &:r1282_1, ~m? -# 1282| r1282_3(glval<A>) = CopyValue : r1282_2 -# 1282| r1282_4(glval<unknown>) = FunctionAddress[static_member] : -# 1282| r1282_5(glval<A>) = 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<A *>) = VariableAddress[a_arg] : -# 1283| r1283_2(A *) = Load[a_arg] : &:r1283_1, ~m? -# 1283| r1283_3(glval<unknown>) = FunctionAddress[static_member] : -# 1283| r1283_4(glval<A *>) = 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<A>) = VariableAddress[a] : -# 1285| r1285_2(glval<unknown>) = 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<unknown>) = 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<unknown>) = FunctionAddress[getAnInstanceOfA] : -# 1288| r1288_2(A *) = Call[getAnInstanceOfA] : func:r1288_1 -# 1288| mu1288_3(unknown) = ^CallSideEffect : ~m? -# 1288| r1288_4(glval<unknown>) = 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<C>) = VariableAddress[c] : -# 1289| r1289_3(glval<unknown>) = 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<int>) = VariableAddress[int_arg] : +# 1319| mu1319_5(int) = InitializeParameter[int_arg] : &:r1319_4 +# 1319| r1319_6(glval<A *>) = 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<C>) = VariableAddress[c] : +# 1320| mu1320_2(C) = Uninitialized[c] : &:r1320_1 +# 1320| r1320_3(glval<unknown>) = 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<C>) = VariableAddress[c] : +# 1321| r1321_2(glval<unknown>) = 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<unknown>) = 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<A>) = VariableAddress[a] : +# 1324| mu1324_2(A) = Uninitialized[a] : &:r1324_1 +# 1325| r1325_1(glval<A>) = VariableAddress[a] : +# 1325| r1325_2(glval<unknown>) = FunctionAddress[static_member] : +# 1325| r1325_3(glval<A>) = VariableAddress[a] : +# 1325| r1325_4(A *) = CopyValue : r1325_3 +# 1325| r1325_5(glval<int>) = 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<unknown>) = FunctionAddress[static_member] : +# 1326| r1326_2(glval<A>) = VariableAddress[a] : +# 1326| r1326_3(A *) = CopyValue : r1326_2 +# 1326| r1326_4(glval<int>) = 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<A>) = VariableAddress[a] : +# 1328| r1328_2(A *) = CopyValue : r1328_1 +# 1328| r1328_3(glval<unknown>) = FunctionAddress[static_member] : +# 1328| r1328_4(glval<A *>) = VariableAddress[a_arg] : +# 1328| r1328_5(A *) = Load[a_arg] : &:r1328_4, ~m? +# 1328| r1328_6(glval<int>) = 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<A *>) = VariableAddress[a_arg] : +# 1329| r1329_2(A *) = Load[a_arg] : &:r1329_1, ~m? +# 1329| r1329_3(glval<A>) = CopyValue : r1329_2 +# 1329| r1329_4(glval<unknown>) = FunctionAddress[static_member] : +# 1329| r1329_5(glval<A>) = 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<A *>) = VariableAddress[a_arg] : +# 1330| r1330_2(A *) = Load[a_arg] : &:r1330_1, ~m? +# 1330| r1330_3(glval<unknown>) = FunctionAddress[static_member] : +# 1330| r1330_4(glval<A *>) = 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<A>) = VariableAddress[a] : +# 1332| r1332_2(glval<unknown>) = 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<unknown>) = 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<unknown>) = FunctionAddress[getAnInstanceOfA] : +# 1335| r1335_2(A *) = Call[getAnInstanceOfA] : func:r1335_1 +# 1335| mu1335_3(unknown) = ^CallSideEffect : ~m? +# 1335| r1335_4(glval<unknown>) = 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<C>) = VariableAddress[c] : +# 1336| r1336_3(glval<unknown>) = 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<bool>) = VariableAddress[b] : -# 1291| mu1291_5(bool) = InitializeParameter[b] : &:r1291_4 -# 1291| r1291_6(glval<int>) = VariableAddress[x] : -# 1291| mu1291_7(int) = InitializeParameter[x] : &:r1291_6 -# 1292| r1292_1(glval<bool>) = 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<bool>) = VariableAddress[b] : +# 1338| mu1338_5(bool) = InitializeParameter[b] : &:r1338_4 +# 1338| r1338_6(glval<int>) = VariableAddress[x] : +# 1338| mu1338_7(int) = InitializeParameter[x] : &:r1338_6 +# 1339| r1339_1(glval<bool>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[#return] : -# 1293| r1293_2(glval<int>) = 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<int>) = VariableAddress[#return] : +# 1340| r1340_2(glval<int>) = 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<int>) = VariableAddress[#return] : -# 1295| mu1295_2(int) = Uninitialized[#return] : &:r1295_1 +# 1342| Block 3 +# 1342| r1342_1(glval<int>) = 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<int>) = VariableAddress[x] : -# 1297| mu1297_5(int) = InitializeParameter[x] : &:r1297_4 -# 1297| r1297_6(glval<int>) = VariableAddress[y] : -# 1297| mu1297_7(int) = InitializeParameter[y] : &:r1297_6 -# 1298| r1298_1(glval<unknown>) = FunctionAddress[IntegerOps] : -# 1298| r1298_2(glval<int>) = VariableAddress[x] : -# 1298| r1298_3(int) = Load[x] : &:r1298_2, ~m? -# 1298| r1298_4(glval<int>) = 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<int>) = VariableAddress[x] : +# 1344| mu1344_5(int) = InitializeParameter[x] : &:r1344_4 +# 1344| r1344_6(glval<int>) = VariableAddress[y] : +# 1344| mu1344_7(int) = InitializeParameter[y] : &:r1344_6 +# 1345| r1345_1(glval<unknown>) = FunctionAddress[IntegerOps] : +# 1345| r1345_2(glval<int>) = VariableAddress[x] : +# 1345| r1345_3(int) = Load[x] : &:r1345_2, ~m? +# 1345| r1345_4(glval<int>) = 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<bool>) = VariableAddress[b] : -# 1301| mu1301_5(bool) = InitializeParameter[b] : &:r1301_4 -# 1301| r1301_6(glval<int>) = VariableAddress[x] : -# 1301| mu1301_7(int) = InitializeParameter[x] : &:r1301_6 -# 1301| r1301_8(glval<long>) = VariableAddress[y] : -# 1301| mu1301_9(long) = InitializeParameter[y] : &:r1301_8 -# 1302| r1302_1(glval<int>) = VariableAddress[z] : -# 1302| r1302_2(glval<int>) = 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<bool>) = 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<bool>) = VariableAddress[b] : +# 1348| mu1348_5(bool) = InitializeParameter[b] : &:r1348_4 +# 1348| r1348_6(glval<int>) = VariableAddress[x] : +# 1348| mu1348_7(int) = InitializeParameter[x] : &:r1348_6 +# 1348| r1348_8(glval<long>) = VariableAddress[y] : +# 1348| mu1348_9(long) = InitializeParameter[y] : &:r1348_8 +# 1349| r1349_1(glval<int>) = VariableAddress[z] : +# 1349| r1349_2(glval<int>) = 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<bool>) = 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<int>) = VariableAddress[#temp1303:9] : -# 1303| r1303_5(int) = Load[#temp1303:9] : &:r1303_4, ~m? -# 1303| r1303_6(glval<int>) = VariableAddress[z] : -# 1303| mu1303_7(int) = Store[z] : &:r1303_6, r1303_5 -# 1304| r1304_1(glval<bool>) = 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<int>) = VariableAddress[#temp1350:9] : +# 1350| r1350_5(int) = Load[#temp1350:9] : &:r1350_4, ~m? +# 1350| r1350_6(glval<int>) = VariableAddress[z] : +# 1350| mu1350_7(int) = Store[z] : &:r1350_6, r1350_5 +# 1351| r1351_1(glval<bool>) = 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<int>) = VariableAddress[#temp1303:9] : -# 1303| mu1303_9(int) = Store[#temp1303:9] : &:r1303_8, r1303_2 +# 1350| Block 2 +# 1350| r1350_8(glval<int>) = VariableAddress[#temp1350:9] : +# 1350| mu1350_9(int) = Store[#temp1350:9] : &:r1350_8, r1350_2 #-----| Goto -> Block 1 -# 1303| Block 3 -# 1303| r1303_10(glval<int>) = VariableAddress[x] : -# 1303| r1303_11(int) = Load[x] : &:r1303_10, ~m? -# 1303| r1303_12(glval<int>) = VariableAddress[#temp1303:9] : -# 1303| mu1303_13(int) = Store[#temp1303:9] : &:r1303_12, r1303_11 +# 1350| Block 3 +# 1350| r1350_10(glval<int>) = VariableAddress[x] : +# 1350| r1350_11(int) = Load[x] : &:r1350_10, ~m? +# 1350| r1350_12(glval<int>) = VariableAddress[#temp1350:9] : +# 1350| mu1350_13(int) = Store[#temp1350:9] : &:r1350_12, r1350_11 #-----| Goto -> Block 1 -# 1304| Block 4 -# 1304| r1304_4(glval<long>) = VariableAddress[#temp1304:9] : -# 1304| r1304_5(long) = Load[#temp1304:9] : &:r1304_4, ~m? -# 1304| r1304_6(int) = Convert : r1304_5 -# 1304| r1304_7(glval<int>) = VariableAddress[z] : -# 1304| mu1304_8(int) = Store[z] : &:r1304_7, r1304_6 -# 1305| r1305_1(glval<int>) = 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<long>) = VariableAddress[#temp1351:9] : +# 1351| r1351_5(long) = Load[#temp1351:9] : &:r1351_4, ~m? +# 1351| r1351_6(int) = Convert : r1351_5 +# 1351| r1351_7(glval<int>) = VariableAddress[z] : +# 1351| mu1351_8(int) = Store[z] : &:r1351_7, r1351_6 +# 1352| r1352_1(glval<int>) = 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<long>) = VariableAddress[#temp1304:9] : -# 1304| mu1304_10(long) = Store[#temp1304:9] : &:r1304_9, r1304_2 +# 1351| Block 5 +# 1351| r1351_9(glval<long>) = VariableAddress[#temp1351:9] : +# 1351| mu1351_10(long) = Store[#temp1351:9] : &:r1351_9, r1351_2 #-----| Goto -> Block 4 -# 1304| Block 6 -# 1304| r1304_11(glval<long>) = VariableAddress[y] : -# 1304| r1304_12(long) = Load[y] : &:r1304_11, ~m? -# 1304| r1304_13(glval<long>) = VariableAddress[#temp1304:9] : -# 1304| mu1304_14(long) = Store[#temp1304:9] : &:r1304_13, r1304_12 +# 1351| Block 6 +# 1351| r1351_11(glval<long>) = VariableAddress[y] : +# 1351| r1351_12(long) = Load[y] : &:r1351_11, ~m? +# 1351| r1351_13(glval<long>) = VariableAddress[#temp1351:9] : +# 1351| mu1351_14(long) = Store[#temp1351:9] : &:r1351_13, r1351_12 #-----| Goto -> Block 4 -# 1305| Block 7 -# 1305| r1305_6(glval<int>) = VariableAddress[#temp1305:9] : -# 1305| r1305_7(int) = Load[#temp1305:9] : &:r1305_6, ~m? -# 1305| r1305_8(glval<int>) = VariableAddress[z] : -# 1305| mu1305_9(int) = Store[z] : &:r1305_8, r1305_7 -# 1306| r1306_1(glval<int>) = 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<int>) = VariableAddress[#temp1352:9] : +# 1352| r1352_7(int) = Load[#temp1352:9] : &:r1352_6, ~m? +# 1352| r1352_8(glval<int>) = VariableAddress[z] : +# 1352| mu1352_9(int) = Store[z] : &:r1352_8, r1352_7 +# 1353| r1353_1(glval<int>) = 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<int>) = VariableAddress[#temp1305:9] : -# 1305| mu1305_11(int) = Store[#temp1305:9] : &:r1305_10, r1305_2 +# 1352| Block 8 +# 1352| r1352_10(glval<int>) = VariableAddress[#temp1352:9] : +# 1352| mu1352_11(int) = Store[#temp1352:9] : &:r1352_10, r1352_2 #-----| Goto -> Block 7 -# 1305| Block 9 -# 1305| r1305_12(glval<int>) = VariableAddress[x] : -# 1305| r1305_13(int) = Load[x] : &:r1305_12, ~m? -# 1305| r1305_14(glval<int>) = VariableAddress[#temp1305:9] : -# 1305| mu1305_15(int) = Store[#temp1305:9] : &:r1305_14, r1305_13 +# 1352| Block 9 +# 1352| r1352_12(glval<int>) = VariableAddress[x] : +# 1352| r1352_13(int) = Load[x] : &:r1352_12, ~m? +# 1352| r1352_14(glval<int>) = VariableAddress[#temp1352:9] : +# 1352| mu1352_15(int) = Store[#temp1352:9] : &:r1352_14, r1352_13 #-----| Goto -> Block 7 -# 1306| Block 10 -# 1306| r1306_6(glval<long>) = VariableAddress[#temp1306:9] : -# 1306| r1306_7(long) = Load[#temp1306:9] : &:r1306_6, ~m? -# 1306| r1306_8(int) = Convert : r1306_7 -# 1306| r1306_9(glval<int>) = VariableAddress[z] : -# 1306| mu1306_10(int) = Store[z] : &:r1306_9, r1306_8 -# 1307| r1307_1(glval<long>) = 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<long>) = VariableAddress[#temp1353:9] : +# 1353| r1353_7(long) = Load[#temp1353:9] : &:r1353_6, ~m? +# 1353| r1353_8(int) = Convert : r1353_7 +# 1353| r1353_9(glval<int>) = VariableAddress[z] : +# 1353| mu1353_10(int) = Store[z] : &:r1353_9, r1353_8 +# 1354| r1354_1(glval<long>) = 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<long>) = VariableAddress[#temp1306:9] : -# 1306| mu1306_12(long) = Store[#temp1306:9] : &:r1306_11, r1306_2 +# 1353| Block 11 +# 1353| r1353_11(glval<long>) = VariableAddress[#temp1353:9] : +# 1353| mu1353_12(long) = Store[#temp1353:9] : &:r1353_11, r1353_2 #-----| Goto -> Block 10 -# 1306| Block 12 -# 1306| r1306_13(glval<long>) = VariableAddress[y] : -# 1306| r1306_14(long) = Load[y] : &:r1306_13, ~m? -# 1306| r1306_15(glval<long>) = VariableAddress[#temp1306:9] : -# 1306| mu1306_16(long) = Store[#temp1306:9] : &:r1306_15, r1306_14 +# 1353| Block 12 +# 1353| r1353_13(glval<long>) = VariableAddress[y] : +# 1353| r1353_14(long) = Load[y] : &:r1353_13, ~m? +# 1353| r1353_15(glval<long>) = VariableAddress[#temp1353:9] : +# 1353| mu1353_16(long) = Store[#temp1353:9] : &:r1353_15, r1353_14 #-----| Goto -> Block 10 -# 1307| Block 13 -# 1307| r1307_6(glval<long>) = VariableAddress[#temp1307:9] : -# 1307| r1307_7(long) = Load[#temp1307:9] : &:r1307_6, ~m? -# 1307| r1307_8(int) = Convert : r1307_7 -# 1307| r1307_9(glval<int>) = VariableAddress[z] : -# 1307| mu1307_10(int) = Store[z] : &:r1307_9, r1307_8 -# 1308| r1308_1(glval<long>) = 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<long>) = VariableAddress[#temp1354:9] : +# 1354| r1354_7(long) = Load[#temp1354:9] : &:r1354_6, ~m? +# 1354| r1354_8(int) = Convert : r1354_7 +# 1354| r1354_9(glval<int>) = VariableAddress[z] : +# 1354| mu1354_10(int) = Store[z] : &:r1354_9, r1354_8 +# 1355| r1355_1(glval<long>) = 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<long>) = VariableAddress[#temp1307:9] : -# 1307| mu1307_12(long) = Store[#temp1307:9] : &:r1307_11, r1307_2 +# 1354| Block 14 +# 1354| r1354_11(glval<long>) = VariableAddress[#temp1354:9] : +# 1354| mu1354_12(long) = Store[#temp1354:9] : &:r1354_11, r1354_2 #-----| Goto -> Block 13 -# 1307| Block 15 -# 1307| r1307_13(glval<int>) = VariableAddress[x] : -# 1307| r1307_14(int) = Load[x] : &:r1307_13, ~m? -# 1307| r1307_15(long) = Convert : r1307_14 -# 1307| r1307_16(glval<long>) = VariableAddress[#temp1307:9] : -# 1307| mu1307_17(long) = Store[#temp1307:9] : &:r1307_16, r1307_15 +# 1354| Block 15 +# 1354| r1354_13(glval<int>) = VariableAddress[x] : +# 1354| r1354_14(int) = Load[x] : &:r1354_13, ~m? +# 1354| r1354_15(long) = Convert : r1354_14 +# 1354| r1354_16(glval<long>) = VariableAddress[#temp1354:9] : +# 1354| mu1354_17(long) = Store[#temp1354:9] : &:r1354_16, r1354_15 #-----| Goto -> Block 13 -# 1308| Block 16 -# 1308| r1308_6(glval<long>) = VariableAddress[#temp1308:9] : -# 1308| r1308_7(long) = Load[#temp1308:9] : &:r1308_6, ~m? -# 1308| r1308_8(int) = Convert : r1308_7 -# 1308| r1308_9(glval<int>) = VariableAddress[z] : -# 1308| mu1308_10(int) = Store[z] : &:r1308_9, r1308_8 -# 1310| r1310_1(glval<int>) = 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<long>) = VariableAddress[#temp1355:9] : +# 1355| r1355_7(long) = Load[#temp1355:9] : &:r1355_6, ~m? +# 1355| r1355_8(int) = Convert : r1355_7 +# 1355| r1355_9(glval<int>) = VariableAddress[z] : +# 1355| mu1355_10(int) = Store[z] : &:r1355_9, r1355_8 +# 1357| r1357_1(glval<int>) = 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<long>) = VariableAddress[#temp1308:9] : -# 1308| mu1308_12(long) = Store[#temp1308:9] : &:r1308_11, r1308_2 +# 1355| Block 17 +# 1355| r1355_11(glval<long>) = VariableAddress[#temp1355:9] : +# 1355| mu1355_12(long) = Store[#temp1355:9] : &:r1355_11, r1355_2 #-----| Goto -> Block 16 -# 1308| Block 18 -# 1308| r1308_13(glval<long>) = VariableAddress[y] : -# 1308| r1308_14(long) = Load[y] : &:r1308_13, ~m? -# 1308| r1308_15(glval<long>) = VariableAddress[#temp1308:9] : -# 1308| mu1308_16(long) = Store[#temp1308:9] : &:r1308_15, r1308_14 +# 1355| Block 18 +# 1355| r1355_13(glval<long>) = VariableAddress[y] : +# 1355| r1355_14(long) = Load[y] : &:r1355_13, ~m? +# 1355| r1355_15(glval<long>) = VariableAddress[#temp1355:9] : +# 1355| mu1355_16(long) = Store[#temp1355:9] : &:r1355_15, r1355_14 #-----| Goto -> Block 16 -# 1310| Block 19 -# 1310| r1310_6(glval<int>) = VariableAddress[#temp1310:9] : -# 1310| r1310_7(int) = Load[#temp1310:9] : &:r1310_6, ~m? -# 1310| r1310_8(glval<int>) = 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<int>) = VariableAddress[#temp1357:9] : +# 1357| r1357_7(int) = Load[#temp1357:9] : &:r1357_6, ~m? +# 1357| r1357_8(glval<int>) = 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<int>) = VariableAddress[#temp1310:9] : -# 1310| mu1310_11(int) = Store[#temp1310:9] : &:r1310_10, r1310_16 +# 1357| Block 20 +# 1357| r1357_10(glval<int>) = VariableAddress[#temp1357:9] : +# 1357| mu1357_11(int) = Store[#temp1357:9] : &:r1357_10, r1357_16 #-----| Goto -> Block 19 -# 1310| Block 21 -# 1310| r1310_12(glval<bool>) = 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<bool>) = 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<bool>) = 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<bool>) = 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<bool>) = 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<bool>) = 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<bool>) = 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<bool>) = 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<long>) = 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<long>) = 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<int>) = VariableAddress[x] : -# 1310| r1310_30(int) = Load[x] : &:r1310_29, ~m? -# 1310| r1310_31(glval<int>) = VariableAddress[#temp1310:9] : -# 1310| mu1310_32(int) = Store[#temp1310:9] : &:r1310_31, r1310_30 +# 1357| Block 26 +# 1357| r1357_29(glval<int>) = VariableAddress[x] : +# 1357| r1357_30(int) = Load[x] : &:r1357_29, ~m? +# 1357| r1357_31(glval<int>) = 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<int>) = VariableAddress[x] : -# 1316| mu1316_5(int) = InitializeParameter[x] : &:r1316_4 -# 1316| r1316_6(glval<int>) = VariableAddress[y] : -# 1316| mu1316_7(int) = InitializeParameter[y] : &:r1316_6 -# 1317| r1317_1(glval<int>) = VariableAddress[#return] : -# 1317| r1317_2(glval<unknown>) = 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<int>) = VariableAddress[x] : +# 1363| mu1363_5(int) = InitializeParameter[x] : &:r1363_4 +# 1363| r1363_6(glval<int>) = VariableAddress[y] : +# 1363| mu1363_7(int) = InitializeParameter[y] : &:r1363_6 +# 1364| r1364_1(glval<int>) = VariableAddress[#return] : +# 1364| r1364_2(glval<unknown>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = 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<unknown>) = 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<unknown>) = 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<int>) = VariableAddress[x] : -# 1317| r1317_14(int) = Load[x] : &:r1317_13, ~m? -# 1317| r1317_15(glval<int>) = VariableAddress[#temp1317:12] : -# 1317| mu1317_16(int) = Store[#temp1317:12] : &:r1317_15, r1317_14 +# 1364| Block 3 +# 1364| r1364_13(glval<int>) = VariableAddress[x] : +# 1364| r1364_14(int) = Load[x] : &:r1364_13, ~m? +# 1364| r1364_15(glval<int>) = VariableAddress[#temp1364:12] : +# 1364| mu1364_16(int) = Store[#temp1364:12] : &:r1364_15, r1364_14 #-----| Goto -> Block 1 -# 1317| Block 4 -# 1317| r1317_17(glval<int>) = VariableAddress[y] : -# 1317| r1317_18(int) = Load[y] : &:r1317_17, ~m? -# 1317| r1317_19(glval<int>) = VariableAddress[#temp1317:12] : -# 1317| mu1317_20(int) = Store[#temp1317:12] : &:r1317_19, r1317_18 +# 1364| Block 4 +# 1364| r1364_17(glval<int>) = VariableAddress[y] : +# 1364| r1364_18(int) = Load[y] : &:r1364_17, ~m? +# 1364| r1364_19(glval<int>) = 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<int *>) = 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<unknown>) = FunctionAddress[operator new] : -# 1324| r1324_2(unsigned long) = Constant[4] : -# 1324| r1324_3(glval<int *>) = 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<int *>) = 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<unknown>) = FunctionAddress[operator new] : +# 1371| r1371_2(unsigned long) = Constant[4] : +# 1371| r1371_3(glval<int *>) = 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<Point>() -# 1328| Block 0 -# 1328| v1328_1(void) = EnterFunction : -# 1328| mu1328_2(unknown) = AliasedDefinition : -# 1328| mu1328_3(unknown) = InitializeNonLocal : -# 1329| r1329_1(glval<Point>) = VariableAddress[#return] : -# 1329| r1329_2(Point) = Constant[0] : -# 1329| mu1329_3(Point) = Store[#return] : &:r1329_1, r1329_2 -# 1328| r1328_4(glval<Point>) = VariableAddress[#return] : -# 1328| v1328_5(void) = ReturnValue : &:r1328_4, ~m? -# 1328| v1328_6(void) = AliasedUse : ~m? -# 1328| v1328_7(void) = ExitFunction : +# 1375| Point defaultConstruct<Point>() +# 1375| Block 0 +# 1375| v1375_1(void) = EnterFunction : +# 1375| mu1375_2(unknown) = AliasedDefinition : +# 1375| mu1375_3(unknown) = InitializeNonLocal : +# 1376| r1376_1(glval<Point>) = VariableAddress[#return] : +# 1376| r1376_2(Point) = Constant[0] : +# 1376| mu1376_3(Point) = Store[#return] : &:r1376_1, r1376_2 +# 1375| r1375_4(glval<Point>) = VariableAddress[#return] : +# 1375| v1375_5(void) = ReturnValue : &:r1375_4, ~m? +# 1375| v1375_6(void) = AliasedUse : ~m? +# 1375| v1375_7(void) = ExitFunction : -# 1328| String defaultConstruct<String>() -# 1328| Block 0 -# 1328| v1328_1(void) = EnterFunction : -# 1328| mu1328_2(unknown) = AliasedDefinition : -# 1328| mu1328_3(unknown) = InitializeNonLocal : -# 1329| r1329_1(glval<String>) = VariableAddress[#return] : -# 1329| mu1329_2(String) = Uninitialized[#return] : &:r1329_1 -# 1329| r1329_3(glval<unknown>) = 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<String>) = VariableAddress[#return] : -# 1328| v1328_5(void) = ReturnValue : &:r1328_4, ~m? -# 1328| v1328_6(void) = AliasedUse : ~m? -# 1328| v1328_7(void) = ExitFunction : +# 1375| String defaultConstruct<String>() +# 1375| Block 0 +# 1375| v1375_1(void) = EnterFunction : +# 1375| mu1375_2(unknown) = AliasedDefinition : +# 1375| mu1375_3(unknown) = InitializeNonLocal : +# 1376| r1376_1(glval<String>) = VariableAddress[#return] : +# 1376| mu1376_2(String) = Uninitialized[#return] : &:r1376_1 +# 1376| r1376_3(glval<unknown>) = 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<String>) = 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<copy_constructor>() -# 1328| Block 0 -# 1328| v1328_1(void) = EnterFunction : -# 1328| mu1328_2(unknown) = AliasedDefinition : -# 1328| mu1328_3(unknown) = InitializeNonLocal : -# 1329| r1329_1(glval<copy_constructor>) = VariableAddress[#return] : -# 1329| mu1329_2(copy_constructor) = Uninitialized[#return] : &:r1329_1 -# 1329| r1329_3(glval<unknown>) = 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<copy_constructor>) = 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<copy_constructor>() +# 1375| Block 0 +# 1375| v1375_1(void) = EnterFunction : +# 1375| mu1375_2(unknown) = AliasedDefinition : +# 1375| mu1375_3(unknown) = InitializeNonLocal : +# 1376| r1376_1(glval<copy_constructor>) = VariableAddress[#return] : +# 1376| mu1376_2(copy_constructor) = Uninitialized[#return] : &:r1376_1 +# 1376| r1376_3(glval<unknown>) = 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<copy_constructor>) = 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<destructor_only>() -# 1328| Block 0 -# 1328| v1328_1(void) = EnterFunction : -# 1328| mu1328_2(unknown) = AliasedDefinition : -# 1328| mu1328_3(unknown) = InitializeNonLocal : -# 1329| r1329_1(glval<destructor_only>) = VariableAddress[#return] : -# 1329| r1329_2(destructor_only) = Constant[0] : -# 1329| mu1329_3(destructor_only) = Store[#return] : &:r1329_1, r1329_2 -# 1328| r1328_4(glval<destructor_only>) = 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<destructor_only>() +# 1375| Block 0 +# 1375| v1375_1(void) = EnterFunction : +# 1375| mu1375_2(unknown) = AliasedDefinition : +# 1375| mu1375_3(unknown) = InitializeNonLocal : +# 1376| r1376_1(glval<destructor_only>) = VariableAddress[#return] : +# 1376| r1376_2(destructor_only) = Constant[0] : +# 1376| mu1376_3(destructor_only) = Store[#return] : &:r1376_1, r1376_2 +# 1375| r1375_4(glval<destructor_only>) = 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<String>) = VariableAddress[s] : -# 1368| r1368_2(glval<unknown>) = 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<String &>) = VariableAddress[rs] : -# 1369| r1369_2(glval<String>) = VariableAddress[#temp1369:24] : -# 1369| r1369_3(glval<unknown>) = 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<String>) = Convert : r1369_2 -# 1369| r1369_8(String &) = CopyValue : r1369_7 -# 1369| mu1369_9(String &) = Store[rs] : &:r1369_1, r1369_8 -# 1371| r1371_1(glval<unknown>) = FunctionAddress[acceptRef] : -# 1371| r1371_2(glval<String>) = VariableAddress[s] : -# 1371| r1371_3(glval<String>) = 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<unknown>) = FunctionAddress[acceptRef] : -# 1372| r1372_2(glval<String>) = VariableAddress[#temp1372:23] : -# 1372| mu1372_3(String) = Uninitialized[#temp1372:23] : &:r1372_2 -# 1372| r1372_4(glval<unknown>) = FunctionAddress[String] : -# 1372| r1372_5(glval<char[4]>) = 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<unknown>) = FunctionAddress[acceptValue] : -# 1373| r1373_2(glval<String>) = VariableAddress[#temp1373:17] : -# 1373| mu1373_3(String) = Uninitialized[#temp1373:17] : &:r1373_2 -# 1373| r1373_4(glval<unknown>) = FunctionAddress[String] : -# 1373| r1373_5(glval<String>) = VariableAddress[s] : -# 1373| r1373_6(glval<String>) = 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<unknown>) = FunctionAddress[acceptValue] : -# 1374| r1374_2(glval<String>) = VariableAddress[#temp1374:25] : -# 1374| mu1374_3(String) = Uninitialized[#temp1374:25] : &:r1374_2 -# 1374| r1374_4(glval<unknown>) = FunctionAddress[String] : -# 1374| r1374_5(glval<char[4]>) = 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<String>) = VariableAddress[#temp1375:5] : -# 1375| mu1375_2(String) = Uninitialized[#temp1375:5] : &:r1375_1 -# 1375| r1375_3(glval<unknown>) = 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<String>) = Convert : r1375_1 -# 1375| r1375_8(glval<unknown>) = 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<String>) = VariableAddress[#temp1376:5] : -# 1376| r1376_2(glval<unknown>) = 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<String>) = Convert : r1376_1 -# 1376| r1376_7(glval<unknown>) = 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<String>) = VariableAddress[#temp1378:5] : -# 1378| r1378_2(glval<unknown>) = 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<String>) = VariableAddress[s] : -# 1379| r1379_3(glval<unknown>) = 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<String>) = VariableAddress[s] : +# 1415| r1415_2(glval<unknown>) = 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<String &>) = VariableAddress[rs] : +# 1416| r1416_2(glval<String>) = VariableAddress[#temp1416:24] : +# 1416| r1416_3(glval<unknown>) = 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<String>) = Convert : r1416_2 +# 1416| r1416_8(String &) = CopyValue : r1416_7 +# 1416| mu1416_9(String &) = Store[rs] : &:r1416_1, r1416_8 +# 1418| r1418_1(glval<unknown>) = FunctionAddress[acceptRef] : +# 1418| r1418_2(glval<String>) = VariableAddress[s] : +# 1418| r1418_3(glval<String>) = 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<unknown>) = FunctionAddress[acceptRef] : +# 1419| r1419_2(glval<String>) = VariableAddress[#temp1419:23] : +# 1419| mu1419_3(String) = Uninitialized[#temp1419:23] : &:r1419_2 +# 1419| r1419_4(glval<unknown>) = FunctionAddress[String] : +# 1419| r1419_5(glval<char[4]>) = 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<unknown>) = FunctionAddress[acceptValue] : +# 1420| r1420_2(glval<String>) = VariableAddress[#temp1420:17] : +# 1420| mu1420_3(String) = Uninitialized[#temp1420:17] : &:r1420_2 +# 1420| r1420_4(glval<unknown>) = FunctionAddress[String] : +# 1420| r1420_5(glval<String>) = VariableAddress[s] : +# 1420| r1420_6(glval<String>) = 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<unknown>) = FunctionAddress[acceptValue] : +# 1421| r1421_2(glval<String>) = VariableAddress[#temp1421:25] : +# 1421| mu1421_3(String) = Uninitialized[#temp1421:25] : &:r1421_2 +# 1421| r1421_4(glval<unknown>) = FunctionAddress[String] : +# 1421| r1421_5(glval<char[4]>) = 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<String>) = VariableAddress[#temp1422:5] : +# 1422| mu1422_2(String) = Uninitialized[#temp1422:5] : &:r1422_1 +# 1422| r1422_3(glval<unknown>) = 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<String>) = Convert : r1422_1 +# 1422| r1422_8(glval<unknown>) = 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<String>) = VariableAddress[#temp1423:5] : +# 1423| r1423_2(glval<unknown>) = 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<String>) = Convert : r1423_1 +# 1423| r1423_7(glval<unknown>) = 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<String>) = VariableAddress[#temp1425:5] : +# 1425| r1425_2(glval<unknown>) = 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<String>) = VariableAddress[s] : +# 1426| r1426_3(glval<unknown>) = 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<destructor_only>) = VariableAddress[d] : -# 1382| r1382_2(glval<unknown>) = 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<destructor_only &>) = VariableAddress[rd] : -# 1383| r1383_2(glval<destructor_only>) = VariableAddress[#temp1383:33] : -# 1383| r1383_3(glval<unknown>) = 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<destructor_only>) = 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<destructor_only>) = VariableAddress[d2] : -# 1384| mu1384_2(destructor_only) = Uninitialized[d2] : &:r1384_1 -# 1385| r1385_1(glval<unknown>) = FunctionAddress[acceptRef] : -# 1385| r1385_2(glval<destructor_only>) = VariableAddress[d] : -# 1385| r1385_3(glval<destructor_only>) = 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<unknown>) = FunctionAddress[acceptValue] : -# 1386| r1386_2(glval<destructor_only>) = VariableAddress[#temp1386:17] : -# 1386| r1386_3(glval<destructor_only>) = 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<destructor_only>) = 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<unknown>) = 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<destructor_only>) = VariableAddress[#temp1388:5] : -# 1388| r1388_2(glval<unknown>) = 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<unknown>) = 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<destructor_only>) = VariableAddress[#temp1390:5] : -# 1390| r1390_2(glval<unknown>) = 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<destructor_only>) = VariableAddress[d2] : -# 1391| r1391_3(glval<unknown>) = 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<destructor_only>) = VariableAddress[d] : -# 1391| r1391_9(glval<unknown>) = 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<destructor_only>) = VariableAddress[d] : +# 1429| r1429_2(glval<unknown>) = 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<destructor_only &>) = VariableAddress[rd] : +# 1430| r1430_2(glval<destructor_only>) = VariableAddress[#temp1430:33] : +# 1430| r1430_3(glval<unknown>) = 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<destructor_only>) = 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<destructor_only>) = VariableAddress[d2] : +# 1431| mu1431_2(destructor_only) = Uninitialized[d2] : &:r1431_1 +# 1432| r1432_1(glval<unknown>) = FunctionAddress[acceptRef] : +# 1432| r1432_2(glval<destructor_only>) = VariableAddress[d] : +# 1432| r1432_3(glval<destructor_only>) = 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<unknown>) = FunctionAddress[acceptValue] : +# 1433| r1433_2(glval<destructor_only>) = VariableAddress[#temp1433:17] : +# 1433| r1433_3(glval<destructor_only>) = 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<destructor_only>) = 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<unknown>) = 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<destructor_only>) = VariableAddress[#temp1435:5] : +# 1435| r1435_2(glval<unknown>) = 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<unknown>) = 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<destructor_only>) = VariableAddress[#temp1437:5] : +# 1437| r1437_2(glval<unknown>) = 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<destructor_only>) = VariableAddress[d2] : +# 1438| r1438_3(glval<unknown>) = 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<destructor_only>) = VariableAddress[d] : +# 1438| r1438_9(glval<unknown>) = 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<copy_constructor>) = VariableAddress[d] : -# 1394| r1394_2(glval<unknown>) = 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<copy_constructor &>) = VariableAddress[rd] : -# 1395| r1395_2(glval<copy_constructor>) = VariableAddress[#temp1395:34] : -# 1395| r1395_3(glval<unknown>) = 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<copy_constructor>) = 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<copy_constructor>) = VariableAddress[d2] : -# 1396| mu1396_2(copy_constructor) = Uninitialized[d2] : &:r1396_1 -# 1396| r1396_3(glval<unknown>) = 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<unknown>) = FunctionAddress[acceptRef] : -# 1397| r1397_2(glval<copy_constructor>) = VariableAddress[d] : -# 1397| r1397_3(glval<copy_constructor>) = 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<unknown>) = FunctionAddress[acceptValue] : -# 1398| r1398_2(glval<copy_constructor>) = VariableAddress[#temp1398:17] : -# 1398| mu1398_3(copy_constructor) = Uninitialized[#temp1398:17] : &:r1398_2 -# 1398| r1398_4(glval<unknown>) = FunctionAddress[copy_constructor] : -# 1398| r1398_5(glval<copy_constructor>) = VariableAddress[d] : -# 1398| r1398_6(glval<copy_constructor>) = 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<copy_constructor>) = VariableAddress[#temp1399:5] : -# 1399| mu1399_2(copy_constructor) = Uninitialized[#temp1399:5] : &:r1399_1 -# 1399| r1399_3(glval<unknown>) = 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<unknown>) = 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<copy_constructor>) = VariableAddress[#temp1400:5] : -# 1400| r1400_2(glval<unknown>) = 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<unknown>) = 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<copy_constructor>) = VariableAddress[#temp1401:5] : -# 1401| r1401_2(glval<unknown>) = 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<int>) = VariableAddress[y] : -# 1403| r1403_2(glval<copy_constructor>) = VariableAddress[#temp1403:13] : -# 1403| r1403_3(glval<unknown>) = 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<int>) = 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<copy_constructor>) = VariableAddress[d] : +# 1441| r1441_2(glval<unknown>) = 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<copy_constructor &>) = VariableAddress[rd] : +# 1442| r1442_2(glval<copy_constructor>) = VariableAddress[#temp1442:34] : +# 1442| r1442_3(glval<unknown>) = 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<copy_constructor>) = 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<copy_constructor>) = VariableAddress[d2] : +# 1443| mu1443_2(copy_constructor) = Uninitialized[d2] : &:r1443_1 +# 1443| r1443_3(glval<unknown>) = 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<unknown>) = FunctionAddress[acceptRef] : +# 1444| r1444_2(glval<copy_constructor>) = VariableAddress[d] : +# 1444| r1444_3(glval<copy_constructor>) = 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<unknown>) = FunctionAddress[acceptValue] : +# 1445| r1445_2(glval<copy_constructor>) = VariableAddress[#temp1445:17] : +# 1445| mu1445_3(copy_constructor) = Uninitialized[#temp1445:17] : &:r1445_2 +# 1445| r1445_4(glval<unknown>) = FunctionAddress[copy_constructor] : +# 1445| r1445_5(glval<copy_constructor>) = VariableAddress[d] : +# 1445| r1445_6(glval<copy_constructor>) = 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<copy_constructor>) = VariableAddress[#temp1446:5] : +# 1446| mu1446_2(copy_constructor) = Uninitialized[#temp1446:5] : &:r1446_1 +# 1446| r1446_3(glval<unknown>) = 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<unknown>) = 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<copy_constructor>) = VariableAddress[#temp1447:5] : +# 1447| r1447_2(glval<unknown>) = 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<unknown>) = 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<copy_constructor>) = VariableAddress[#temp1448:5] : +# 1448| r1448_2(glval<unknown>) = 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<int>) = VariableAddress[y] : +# 1450| r1450_2(glval<copy_constructor>) = VariableAddress[#temp1450:13] : +# 1450| r1450_3(glval<unknown>) = 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<int>) = 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<Point>) = VariableAddress[p] : -# 1407| r1407_2(glval<unknown>) = 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<Point &>) = VariableAddress[rp] : -# 1408| r1408_2(glval<Point>) = VariableAddress[#temp1408:23] : -# 1408| r1408_3(glval<unknown>) = 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<Point>) = Convert : r1408_2 -# 1408| r1408_8(Point &) = CopyValue : r1408_7 -# 1408| mu1408_9(Point &) = Store[rp] : &:r1408_1, r1408_8 -# 1410| r1410_1(glval<unknown>) = FunctionAddress[acceptRef] : -# 1410| r1410_2(glval<Point>) = VariableAddress[p] : -# 1410| r1410_3(glval<Point>) = 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<unknown>) = FunctionAddress[acceptValue] : -# 1411| r1411_2(glval<Point>) = 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<int>) = VariableAddress[y] : -# 1413| r1413_2(glval<unknown>) = FunctionAddress[returnValue] : -# 1413| r1413_3(Point) = Call[returnValue] : func:r1413_2 -# 1413| mu1413_4(unknown) = ^CallSideEffect : ~m? -# 1413| r1413_5(glval<Point>) = VariableAddress[#temp1413:13] : -# 1413| mu1413_6(Point) = Store[#temp1413:13] : &:r1413_5, r1413_3 -# 1413| r1413_7(glval<int>) = 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<unknown>) = 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<Point>) = VariableAddress[p] : +# 1454| r1454_2(glval<unknown>) = 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<Point &>) = VariableAddress[rp] : +# 1455| r1455_2(glval<Point>) = VariableAddress[#temp1455:23] : +# 1455| r1455_3(glval<unknown>) = 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<Point>) = Convert : r1455_2 +# 1455| r1455_8(Point &) = CopyValue : r1455_7 +# 1455| mu1455_9(Point &) = Store[rp] : &:r1455_1, r1455_8 +# 1457| r1457_1(glval<unknown>) = FunctionAddress[acceptRef] : +# 1457| r1457_2(glval<Point>) = VariableAddress[p] : +# 1457| r1457_3(glval<Point>) = 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<unknown>) = FunctionAddress[acceptValue] : +# 1458| r1458_2(glval<Point>) = 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<int>) = VariableAddress[y] : +# 1460| r1460_2(glval<unknown>) = FunctionAddress[returnValue] : +# 1460| r1460_3(Point) = Call[returnValue] : func:r1460_2 +# 1460| mu1460_4(unknown) = ^CallSideEffect : ~m? +# 1460| r1460_5(glval<Point>) = VariableAddress[#temp1460:13] : +# 1460| mu1460_6(Point) = Store[#temp1460:13] : &:r1460_5, r1460_3 +# 1460| r1460_7(glval<int>) = 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<unknown>) = 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<int &>) = VariableAddress[rx] : -# 1424| r1424_2(glval<unknown>) = FunctionAddress[returnValue] : -# 1424| r1424_3(UnusualFields) = Call[returnValue] : func:r1424_2 -# 1424| mu1424_4(unknown) = ^CallSideEffect : ~m? -# 1424| r1424_5(glval<UnusualFields>) = VariableAddress[#temp1424:21] : -# 1424| mu1424_6(UnusualFields) = Store[#temp1424:21] : &:r1424_5, r1424_3 -# 1424| r1424_7(glval<int &>) = FieldAddress[r] : r1424_5 -# 1424| r1424_8(int &) = Load[?] : &:r1424_7, ~m? -# 1424| r1424_9(glval<int>) = CopyValue : r1424_8 -# 1424| r1424_10(glval<int>) = Convert : r1424_9 -# 1424| r1424_11(int &) = CopyValue : r1424_10 -# 1424| mu1424_12(int &) = Store[rx] : &:r1424_1, r1424_11 -# 1425| r1425_1(glval<int>) = VariableAddress[x] : -# 1425| r1425_2(glval<unknown>) = FunctionAddress[returnValue] : -# 1425| r1425_3(UnusualFields) = Call[returnValue] : func:r1425_2 -# 1425| mu1425_4(unknown) = ^CallSideEffect : ~m? -# 1425| r1425_5(glval<UnusualFields>) = VariableAddress[#temp1425:13] : -# 1425| mu1425_6(UnusualFields) = Store[#temp1425:13] : &:r1425_5, r1425_3 -# 1425| r1425_7(glval<int &>) = 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<float &>) = VariableAddress[rf] : -# 1427| r1427_2(glval<unknown>) = FunctionAddress[returnValue] : -# 1427| r1427_3(UnusualFields) = Call[returnValue] : func:r1427_2 -# 1427| mu1427_4(unknown) = ^CallSideEffect : ~m? -# 1427| r1427_5(glval<UnusualFields>) = VariableAddress[#temp1427:23] : -# 1427| mu1427_6(UnusualFields) = Store[#temp1427:23] : &:r1427_5, r1427_3 -# 1427| r1427_7(glval<float[10]>) = FieldAddress[a] : r1427_5 -# 1427| r1427_8(float *) = Convert : r1427_7 -# 1427| r1427_9(int) = Constant[3] : -# 1427| r1427_10(glval<float>) = PointerAdd[4] : r1427_8, r1427_9 -# 1427| r1427_11(glval<float>) = Convert : r1427_10 -# 1427| r1427_12(float &) = CopyValue : r1427_11 -# 1427| mu1427_13(float &) = Store[rf] : &:r1427_1, r1427_12 -# 1428| r1428_1(glval<float>) = VariableAddress[f] : -# 1428| r1428_2(glval<unknown>) = FunctionAddress[returnValue] : -# 1428| r1428_3(UnusualFields) = Call[returnValue] : func:r1428_2 -# 1428| mu1428_4(unknown) = ^CallSideEffect : ~m? -# 1428| r1428_5(glval<UnusualFields>) = VariableAddress[#temp1428:15] : -# 1428| mu1428_6(UnusualFields) = Store[#temp1428:15] : &:r1428_5, r1428_3 -# 1428| r1428_7(glval<float[10]>) = FieldAddress[a] : r1428_5 -# 1428| r1428_8(float *) = Convert : r1428_7 -# 1428| r1428_9(int) = Constant[5] : -# 1428| r1428_10(glval<float>) = 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<int &>) = VariableAddress[rx] : +# 1471| r1471_2(glval<unknown>) = FunctionAddress[returnValue] : +# 1471| r1471_3(UnusualFields) = Call[returnValue] : func:r1471_2 +# 1471| mu1471_4(unknown) = ^CallSideEffect : ~m? +# 1471| r1471_5(glval<UnusualFields>) = VariableAddress[#temp1471:21] : +# 1471| mu1471_6(UnusualFields) = Store[#temp1471:21] : &:r1471_5, r1471_3 +# 1471| r1471_7(glval<int &>) = FieldAddress[r] : r1471_5 +# 1471| r1471_8(int &) = Load[?] : &:r1471_7, ~m? +# 1471| r1471_9(glval<int>) = CopyValue : r1471_8 +# 1471| r1471_10(glval<int>) = Convert : r1471_9 +# 1471| r1471_11(int &) = CopyValue : r1471_10 +# 1471| mu1471_12(int &) = Store[rx] : &:r1471_1, r1471_11 +# 1472| r1472_1(glval<int>) = VariableAddress[x] : +# 1472| r1472_2(glval<unknown>) = FunctionAddress[returnValue] : +# 1472| r1472_3(UnusualFields) = Call[returnValue] : func:r1472_2 +# 1472| mu1472_4(unknown) = ^CallSideEffect : ~m? +# 1472| r1472_5(glval<UnusualFields>) = VariableAddress[#temp1472:13] : +# 1472| mu1472_6(UnusualFields) = Store[#temp1472:13] : &:r1472_5, r1472_3 +# 1472| r1472_7(glval<int &>) = 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<float &>) = VariableAddress[rf] : +# 1474| r1474_2(glval<unknown>) = FunctionAddress[returnValue] : +# 1474| r1474_3(UnusualFields) = Call[returnValue] : func:r1474_2 +# 1474| mu1474_4(unknown) = ^CallSideEffect : ~m? +# 1474| r1474_5(glval<UnusualFields>) = VariableAddress[#temp1474:23] : +# 1474| mu1474_6(UnusualFields) = Store[#temp1474:23] : &:r1474_5, r1474_3 +# 1474| r1474_7(glval<float[10]>) = FieldAddress[a] : r1474_5 +# 1474| r1474_8(float *) = Convert : r1474_7 +# 1474| r1474_9(int) = Constant[3] : +# 1474| r1474_10(glval<float>) = PointerAdd[4] : r1474_8, r1474_9 +# 1474| r1474_11(glval<float>) = Convert : r1474_10 +# 1474| r1474_12(float &) = CopyValue : r1474_11 +# 1474| mu1474_13(float &) = Store[rf] : &:r1474_1, r1474_12 +# 1475| r1475_1(glval<float>) = VariableAddress[f] : +# 1475| r1475_2(glval<unknown>) = FunctionAddress[returnValue] : +# 1475| r1475_3(UnusualFields) = Call[returnValue] : func:r1475_2 +# 1475| mu1475_4(unknown) = ^CallSideEffect : ~m? +# 1475| r1475_5(glval<UnusualFields>) = VariableAddress[#temp1475:15] : +# 1475| mu1475_6(UnusualFields) = Store[#temp1475:15] : &:r1475_5, r1475_3 +# 1475| r1475_7(glval<float[10]>) = FieldAddress[a] : r1475_5 +# 1475| r1475_8(float *) = Convert : r1475_7 +# 1475| r1475_9(int) = Constant[5] : +# 1475| r1475_10(glval<float>) = 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<POD_Base>) = 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<POD_Base>) = VariableAddress[b] : #-----| r0_1(glval<POD_Middle>) = VariableAddress[#temp0:0] : -# 1446| r1446_2(glval<unknown>) = 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<unknown>) = 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<POD_Base>) = 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<POD_Derived>) = VariableAddress[#temp1447:9] : -# 1447| r1447_2(glval<unknown>) = 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<POD_Middle>) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r1447_1 -# 1447| r1447_7(glval<POD_Base>) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r1447_6 -# 1447| r1447_8(POD_Base) = Load[?] : &:r1447_7, ~m? -# 1447| r1447_9(glval<POD_Base>) = VariableAddress[b] : -# 1447| mu1447_10(POD_Base) = Store[b] : &:r1447_9, r1447_8 -# 1448| r1448_1(glval<int>) = VariableAddress[x] : +#-----| mu0_4(POD_Base) = Store[b] : &:r1493_1, r0_3 +# 1494| r1494_1(glval<POD_Derived>) = VariableAddress[#temp1494:9] : +# 1494| r1494_2(glval<unknown>) = 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<POD_Middle>) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r1494_1 +# 1494| r1494_7(glval<POD_Base>) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r1494_6 +# 1494| r1494_8(POD_Base) = Load[?] : &:r1494_7, ~m? +# 1494| r1494_9(glval<POD_Base>) = VariableAddress[b] : +# 1494| mu1494_10(POD_Base) = Store[b] : &:r1494_9, r1494_8 +# 1495| r1495_1(glval<int>) = VariableAddress[x] : #-----| r0_5(glval<POD_Derived>) = VariableAddress[#temp0:0] : -# 1448| r1448_2(glval<unknown>) = 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<unknown>) = 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<POD_Middle>) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r0_5 #-----| r0_7(glval<POD_Base>) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_6 -# 1448| r1448_6(glval<int>) = 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<float>) = VariableAddress[f] : +# 1495| r1495_6(glval<int>) = 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<float>) = VariableAddress[f] : #-----| r0_8(glval<POD_Derived>) = VariableAddress[#temp0:0] : -# 1449| r1449_2(glval<unknown>) = 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<unknown>) = 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<POD_Middle>) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r0_8 #-----| r0_10(glval<POD_Base>) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_9 #-----| r0_11(glval<POD_Base>) = Convert : r0_10 -# 1449| r1449_6(glval<unknown>) = FunctionAddress[f] : -# 1449| r1449_7(float) = Call[f] : func:r1449_6, this:r0_11 -# 1449| mu1449_8(unknown) = ^CallSideEffect : ~m? +# 1496| r1496_6(glval<unknown>) = 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<unknown>) = VariableAddress[#this] : -# 1453| mu1453_5(glval<Inheritance_Test_B>) = InitializeParameter[#this] : &:r1453_4 -# 1453| r1453_6(glval<Inheritance_Test_B>) = 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<unknown>) = VariableAddress[#this] : +# 1500| mu1500_5(glval<Inheritance_Test_B>) = InitializeParameter[#this] : &:r1500_4 +# 1500| r1500_6(glval<Inheritance_Test_B>) = 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<unknown>) = VariableAddress[#this] : -# 1459| mu1459_5(glval<Inheritance_Test_A>) = InitializeParameter[#this] : &:r1459_4 -# 1459| r1459_6(glval<Inheritance_Test_A>) = Load[#this] : &:r1459_4, ~m? -# 1459| mu1459_7(Inheritance_Test_A) = InitializeIndirection[#this] : &:r1459_6 -# 1459| r1459_8(glval<int>) = 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<unknown>) = VariableAddress[#this] : -# 1460| r1460_3(Inheritance_Test_A *) = Load[#this] : &:r1460_2, ~m? -# 1460| r1460_4(glval<int>) = 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<unknown>) = VariableAddress[#this] : +# 1506| mu1506_5(glval<Inheritance_Test_A>) = InitializeParameter[#this] : &:r1506_4 +# 1506| r1506_6(glval<Inheritance_Test_A>) = Load[#this] : &:r1506_4, ~m? +# 1506| mu1506_7(Inheritance_Test_A) = InitializeIndirection[#this] : &:r1506_6 +# 1506| r1506_8(glval<int>) = 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<unknown>) = VariableAddress[#this] : +# 1507| r1507_3(Inheritance_Test_A *) = Load[#this] : &:r1507_2, ~m? +# 1507| r1507_4(glval<int>) = 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<int[2]>) = VariableAddress[xs] : -# 1465| mu1465_2(int[2]) = Uninitialized[xs] : &:r1465_1 -# 1465| r1465_3(int) = Constant[0] : -# 1465| r1465_4(glval<int>) = 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<int>) = 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<int(&)[2]>) = VariableAddress[(unnamed local variable)] : -# 1468| r1468_2(glval<int[2]>) = 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<int &>) = 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<int[2]>) = VariableAddress[xs] : +# 1512| mu1512_2(int[2]) = Uninitialized[xs] : &:r1512_1 +# 1512| r1512_3(int) = Constant[0] : +# 1512| r1512_4(glval<int>) = 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<int>) = 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<int(&)[2]>) = VariableAddress[(unnamed local variable)] : +# 1515| r1515_2(glval<int[2]>) = 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<int &>) = VariableAddress[x0] : #-----| r0_1(glval<int(&)[2]>) = VariableAddress[(unnamed local variable)] : #-----| r0_2(int(&)[2]) = Load[(unnamed local variable)] : &:r0_1, ~m? #-----| r0_3(glval<int[2]>) = CopyValue : r0_2 #-----| r0_4(int *) = Convert : r0_3 #-----| r0_5(unsigned long) = Constant[0] : #-----| r0_6(glval<int>) = PointerAdd[4] : r0_4, r0_5 -#-----| mu0_7(int &) = Store[x0] : &:r1468_5, r0_6 -# 1468| r1468_6(glval<int &>) = VariableAddress[x1] : +#-----| mu0_7(int &) = Store[x0] : &:r1515_5, r0_6 +# 1515| r1515_6(glval<int &>) = VariableAddress[x1] : #-----| r0_8(glval<int(&)[2]>) = VariableAddress[(unnamed local variable)] : #-----| r0_9(int(&)[2]) = Load[(unnamed local variable)] : &:r0_8, ~m? #-----| r0_10(glval<int[2]>) = CopyValue : r0_9 #-----| r0_11(int *) = Convert : r0_10 #-----| r0_12(unsigned long) = Constant[1] : #-----| r0_13(glval<int>) = 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<int &>) = VariableAddress[x1] : -# 1469| r1469_3(int &) = Load[x1] : &:r1469_2, ~m? -# 1469| mu1469_4(int) = Store[?] : &:r1469_3, r1469_1 -# 1470| r1470_1(glval<int &>) = VariableAddress[rx1] : -# 1470| r1470_2(glval<int &>) = 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<int>) = VariableAddress[x] : -# 1471| r1471_2(glval<int &>) = 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<int(&)[2]>) = VariableAddress[unnamed_local_variable] : -# 1475| r1475_2(glval<int[2]>) = 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<int &>) = VariableAddress[x0] : -# 1476| r1476_2(glval<int(&)[2]>) = VariableAddress[unnamed_local_variable] : -# 1476| r1476_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1476_2, ~m? -# 1476| r1476_4(glval<int[2]>) = CopyValue : r1476_3 -# 1476| r1476_5(int *) = Convert : r1476_4 -# 1476| r1476_6(int) = Constant[0] : -# 1476| r1476_7(glval<int>) = 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<int &>) = VariableAddress[x1] : -# 1477| r1477_2(glval<int(&)[2]>) = VariableAddress[unnamed_local_variable] : -# 1477| r1477_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1477_2, ~m? -# 1477| r1477_4(glval<int[2]>) = CopyValue : r1477_3 -# 1477| r1477_5(int *) = Convert : r1477_4 -# 1477| r1477_6(int) = Constant[1] : -# 1477| r1477_7(glval<int>) = 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<int &>) = VariableAddress[x1] : -# 1478| r1478_3(int &) = Load[x1] : &:r1478_2, ~m? -# 1478| r1478_4(glval<int>) = CopyValue : r1478_3 -# 1478| mu1478_5(int) = Store[?] : &:r1478_4, r1478_1 -# 1479| r1479_1(glval<int &>) = VariableAddress[rx1] : -# 1479| r1479_2(glval<int &>) = VariableAddress[x1] : -# 1479| r1479_3(int &) = Load[x1] : &:r1479_2, ~m? -# 1479| r1479_4(glval<int>) = CopyValue : r1479_3 -# 1479| r1479_5(int &) = CopyValue : r1479_4 -# 1479| mu1479_6(int &) = Store[rx1] : &:r1479_1, r1479_5 -# 1480| r1480_1(glval<int>) = VariableAddress[x] : -# 1480| r1480_2(glval<int &>) = 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<int &>) = VariableAddress[x1] : +# 1516| r1516_3(int &) = Load[x1] : &:r1516_2, ~m? +# 1516| mu1516_4(int) = Store[?] : &:r1516_3, r1516_1 +# 1517| r1517_1(glval<int &>) = VariableAddress[rx1] : +# 1517| r1517_2(glval<int &>) = 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<int>) = VariableAddress[x] : +# 1518| r1518_2(glval<int &>) = 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<int(&)[2]>) = VariableAddress[unnamed_local_variable] : +# 1522| r1522_2(glval<int[2]>) = 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<int &>) = VariableAddress[x0] : +# 1523| r1523_2(glval<int(&)[2]>) = VariableAddress[unnamed_local_variable] : +# 1523| r1523_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1523_2, ~m? +# 1523| r1523_4(glval<int[2]>) = CopyValue : r1523_3 +# 1523| r1523_5(int *) = Convert : r1523_4 +# 1523| r1523_6(int) = Constant[0] : +# 1523| r1523_7(glval<int>) = 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<int &>) = VariableAddress[x1] : +# 1524| r1524_2(glval<int(&)[2]>) = VariableAddress[unnamed_local_variable] : +# 1524| r1524_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1524_2, ~m? +# 1524| r1524_4(glval<int[2]>) = CopyValue : r1524_3 +# 1524| r1524_5(int *) = Convert : r1524_4 +# 1524| r1524_6(int) = Constant[1] : +# 1524| r1524_7(glval<int>) = 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<int &>) = VariableAddress[x1] : +# 1525| r1525_3(int &) = Load[x1] : &:r1525_2, ~m? +# 1525| r1525_4(glval<int>) = CopyValue : r1525_3 +# 1525| mu1525_5(int) = Store[?] : &:r1525_4, r1525_1 +# 1526| r1526_1(glval<int &>) = VariableAddress[rx1] : +# 1526| r1526_2(glval<int &>) = VariableAddress[x1] : +# 1526| r1526_3(int &) = Load[x1] : &:r1526_2, ~m? +# 1526| r1526_4(glval<int>) = CopyValue : r1526_3 +# 1526| r1526_5(int &) = CopyValue : r1526_4 +# 1526| mu1526_6(int &) = Store[rx1] : &:r1526_1, r1526_5 +# 1527| r1527_1(glval<int>) = VariableAddress[x] : +# 1527| r1527_2(glval<int &>) = 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<unknown>) = VariableAddress[#this] : -# 1484| mu1484_5(glval<StructuredBindingDataMemberMemberStruct>) = InitializeParameter[#this] : &:r1484_4 -# 1484| r1484_6(glval<StructuredBindingDataMemberMemberStruct>) = 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<unknown>) = VariableAddress[#this] : +# 1531| mu1531_5(glval<StructuredBindingDataMemberMemberStruct>) = InitializeParameter[#this] : &:r1531_4 +# 1531| r1531_6(glval<StructuredBindingDataMemberMemberStruct>) = 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<unknown>) = VariableAddress[#this] : -# 1488| mu1488_5(glval<StructuredBindingDataMemberStruct>) = InitializeParameter[#this] : &:r1488_4 -# 1488| r1488_6(glval<StructuredBindingDataMemberStruct>) = 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<unknown>) = VariableAddress[#this] : +# 1535| mu1535_5(glval<StructuredBindingDataMemberStruct>) = InitializeParameter[#this] : &:r1535_4 +# 1535| r1535_6(glval<StructuredBindingDataMemberStruct>) = Load[#this] : &:r1535_4, ~m? +# 1535| mu1535_7(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1535_6 #-----| Goto -> Block 2 -# 1488| Block 1 -# 1488| r1488_8(glval<StructuredBindingDataMemberMemberStruct>) = FieldAddress[m] : mu1488_5 -# 1488| r1488_9(glval<unknown>) = 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<StructuredBindingDataMemberMemberStruct>) = FieldAddress[m] : mu1535_5 +# 1535| r1535_9(glval<unknown>) = 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<unknown>) = VariableAddress[#this] : -# 1488| mu1488_5(glval<StructuredBindingDataMemberStruct>) = InitializeParameter[#this] : &:r1488_4 -# 1488| r1488_6(glval<StructuredBindingDataMemberStruct>) = 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<unknown>) = VariableAddress[#this] : +# 1535| mu1535_5(glval<StructuredBindingDataMemberStruct>) = InitializeParameter[#this] : &:r1535_4 +# 1535| r1535_6(glval<StructuredBindingDataMemberStruct>) = Load[#this] : &:r1535_4, ~m? +# 1535| mu1535_7(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1535_6 #-----| r0_1(glval<StructuredBindingDataMemberStruct &>) = 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<int>) = FieldAddress[i] : mu1488_5 -# 1488| r1488_9(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_10(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_9, ~m? -# 1488| r1488_11(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1488_10 -# 1488| r1488_12(glval<int>) = 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<double>) = FieldAddress[d] : mu1488_5 -# 1488| r1488_16(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_17(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_16, ~m? -# 1488| r1488_18(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1488_17 -# 1488| r1488_19(glval<double>) = 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<unsigned int>) = FieldAddress[b] : mu1488_5 -# 1488| r1488_23(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_24(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_23, ~m? -# 1488| r1488_25(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1488_24 -# 1488| r1488_26(glval<unsigned int>) = 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<int &>) = FieldAddress[r] : mu1488_5 -# 1488| r1488_30(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_31(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_30, ~m? -# 1488| r1488_32(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1488_31 -# 1488| r1488_33(glval<int &>) = 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<int *>) = FieldAddress[p] : mu1488_5 -# 1488| r1488_37(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_38(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_37, ~m? -# 1488| r1488_39(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1488_38 -# 1488| r1488_40(glval<int *>) = 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<int[2]>) = FieldAddress[xs] : mu1488_5 -# 1488| r1488_44(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_45(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_44, ~m? -# 1488| r1488_46(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1488_45 -# 1488| r1488_47(glval<int[2]>) = 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<int &>) = FieldAddress[r_alt] : mu1488_5 -# 1488| r1488_51(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_52(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_51, ~m? -# 1488| r1488_53(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1488_52 -# 1488| r1488_54(glval<int &>) = 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<StructuredBindingDataMemberMemberStruct>) = FieldAddress[m] : mu1488_5 -# 1488| r1488_58(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_59(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_58, ~m? -# 1488| r1488_60(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1488_59 -# 1488| r1488_61(glval<StructuredBindingDataMemberMemberStruct>) = 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<int>) = FieldAddress[i] : mu1535_5 +# 1535| r1535_9(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_10(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_9, ~m? +# 1535| r1535_11(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1535_10 +# 1535| r1535_12(glval<int>) = 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<double>) = FieldAddress[d] : mu1535_5 +# 1535| r1535_16(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_17(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_16, ~m? +# 1535| r1535_18(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1535_17 +# 1535| r1535_19(glval<double>) = 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<unsigned int>) = FieldAddress[b] : mu1535_5 +# 1535| r1535_23(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_24(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_23, ~m? +# 1535| r1535_25(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1535_24 +# 1535| r1535_26(glval<unsigned int>) = 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<int &>) = FieldAddress[r] : mu1535_5 +# 1535| r1535_30(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_31(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_30, ~m? +# 1535| r1535_32(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1535_31 +# 1535| r1535_33(glval<int &>) = 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<int *>) = FieldAddress[p] : mu1535_5 +# 1535| r1535_37(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_38(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_37, ~m? +# 1535| r1535_39(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1535_38 +# 1535| r1535_40(glval<int *>) = 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<int[2]>) = FieldAddress[xs] : mu1535_5 +# 1535| r1535_44(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_45(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_44, ~m? +# 1535| r1535_46(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1535_45 +# 1535| r1535_47(glval<int[2]>) = 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<int &>) = FieldAddress[r_alt] : mu1535_5 +# 1535| r1535_51(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_52(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_51, ~m? +# 1535| r1535_53(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1535_52 +# 1535| r1535_54(glval<int &>) = 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<StructuredBindingDataMemberMemberStruct>) = FieldAddress[m] : mu1535_5 +# 1535| r1535_58(glval<StructuredBindingDataMemberStruct &>) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_59(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_58, ~m? +# 1535| r1535_60(glval<StructuredBindingDataMemberStruct>) = CopyValue : r1535_59 +# 1535| r1535_61(glval<StructuredBindingDataMemberMemberStruct>) = 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<StructuredBindingDataMemberStruct>) = VariableAddress[s] : -# 1502| mu1502_2(StructuredBindingDataMemberStruct) = Uninitialized[s] : &:r1502_1 -# 1502| r1502_3(glval<unknown>) = 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<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_2(glval<StructuredBindingDataMemberStruct>) = 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<int &>) = VariableAddress[i] : -# 1505| r1505_6(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_7(glval<int>) = FieldAddress[i] : r1505_6 -# 1505| mu1505_8(int &) = Store[i] : &:r1505_5, r1505_7 -# 1505| r1505_9(glval<double &>) = VariableAddress[d] : -# 1505| r1505_10(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_11(glval<double>) = FieldAddress[d] : r1505_10 -# 1505| mu1505_12(double &) = Store[d] : &:r1505_9, r1505_11 -# 1505| r1505_13(glval<unsigned int &>) = VariableAddress[b] : -# 1505| r1505_14(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_15(glval<unsigned int>) = FieldAddress[b] : r1505_14 -# 1505| mu1505_16(unsigned int &) = Store[b] : &:r1505_13, r1505_15 -# 1505| r1505_17(glval<int &>) = VariableAddress[r] : -# 1505| r1505_18(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_19(glval<int &>) = FieldAddress[r] : r1505_18 -# 1505| r1505_20(int &) = Load[?] : &:r1505_19, ~m? -# 1505| r1505_21(glval<int>) = CopyValue : r1505_20 -# 1505| mu1505_22(int &) = Store[r] : &:r1505_17, r1505_21 -# 1505| r1505_23(glval<int *&>) = VariableAddress[p] : -# 1505| r1505_24(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_25(glval<int *>) = FieldAddress[p] : r1505_24 -# 1505| mu1505_26(int *&) = Store[p] : &:r1505_23, r1505_25 -# 1505| r1505_27(glval<int(&)[2]>) = VariableAddress[xs] : -# 1505| r1505_28(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_29(glval<int[2]>) = FieldAddress[xs] : r1505_28 -# 1505| mu1505_30(int(&)[2]) = Store[xs] : &:r1505_27, r1505_29 -# 1505| r1505_31(glval<int &>) = VariableAddress[r_alt] : -# 1505| r1505_32(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_33(glval<int &>) = FieldAddress[r_alt] : r1505_32 -# 1505| r1505_34(int &) = Load[?] : &:r1505_33, ~m? -# 1505| r1505_35(glval<int>) = CopyValue : r1505_34 -# 1505| mu1505_36(int &) = Store[r_alt] : &:r1505_31, r1505_35 -# 1505| r1505_37(glval<StructuredBindingDataMemberMemberStruct &>) = VariableAddress[m] : -# 1505| r1505_38(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_39(glval<StructuredBindingDataMemberMemberStruct>) = 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<double &>) = VariableAddress[d] : -# 1506| r1506_3(double &) = Load[d] : &:r1506_2, ~m? -# 1506| mu1506_4(double) = Store[?] : &:r1506_3, r1506_1 -# 1507| r1507_1(glval<double &>) = VariableAddress[rd] : -# 1507| r1507_2(glval<double &>) = 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<int>) = VariableAddress[v] : -# 1508| r1508_2(glval<int &>) = 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<int &>) = 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<int *&>) = VariableAddress[p] : -# 1510| r1510_3(int *&) = Load[p] : &:r1510_2, ~m? -# 1510| r1510_4(int *) = Load[?] : &:r1510_3, ~m? -# 1510| r1510_5(glval<int>) = CopyValue : r1510_4 -# 1510| mu1510_6(int) = Store[?] : &:r1510_5, r1510_1 -# 1511| r1511_1(glval<int &>) = VariableAddress[rr] : -# 1511| r1511_2(glval<int &>) = 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<int *>) = VariableAddress[pr] : -# 1512| r1512_2(glval<int &>) = 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<int>) = VariableAddress[w] : -# 1513| r1513_2(glval<int &>) = 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<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] : -# 1517| r1517_2(glval<StructuredBindingDataMemberStruct>) = 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<int &>) = VariableAddress[i] : -# 1518| r1518_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] : -# 1518| r1518_3(glval<int>) = 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<double &>) = VariableAddress[d] : -# 1519| r1519_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] : -# 1519| r1519_3(glval<double>) = 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<int &>) = VariableAddress[r] : -# 1521| r1521_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] : -# 1521| r1521_3(glval<int &>) = FieldAddress[r] : r1521_2 -# 1521| r1521_4(int &) = Load[?] : &:r1521_3, ~m? -# 1521| r1521_5(glval<int>) = CopyValue : r1521_4 -# 1521| r1521_6(int &) = CopyValue : r1521_5 -# 1521| mu1521_7(int &) = Store[r] : &:r1521_1, r1521_6 -# 1522| r1522_1(glval<int *&>) = VariableAddress[p] : -# 1522| r1522_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] : -# 1522| r1522_3(glval<int *>) = 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<double &>) = VariableAddress[d] : -# 1523| r1523_3(double &) = Load[d] : &:r1523_2, ~m? -# 1523| r1523_4(glval<double>) = CopyValue : r1523_3 -# 1523| mu1523_5(double) = Store[?] : &:r1523_4, r1523_1 -# 1524| r1524_1(glval<double &>) = VariableAddress[rd] : -# 1524| r1524_2(glval<double &>) = VariableAddress[d] : -# 1524| r1524_3(double &) = Load[d] : &:r1524_2, ~m? -# 1524| r1524_4(glval<double>) = CopyValue : r1524_3 -# 1524| r1524_5(double &) = CopyValue : r1524_4 -# 1524| mu1524_6(double &) = Store[rd] : &:r1524_1, r1524_5 -# 1525| r1525_1(glval<int>) = VariableAddress[v] : -# 1525| r1525_2(glval<int &>) = 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<int &>) = VariableAddress[r] : -# 1526| r1526_3(int &) = Load[r] : &:r1526_2, ~m? -# 1526| r1526_4(glval<int>) = CopyValue : r1526_3 -# 1526| mu1526_5(int) = Store[?] : &:r1526_4, r1526_1 -# 1527| r1527_1(int) = Constant[6] : -# 1527| r1527_2(glval<int *&>) = VariableAddress[p] : -# 1527| r1527_3(int *&) = Load[p] : &:r1527_2, ~m? -# 1527| r1527_4(int *) = Load[?] : &:r1527_3, ~m? -# 1527| r1527_5(glval<int>) = CopyValue : r1527_4 -# 1527| mu1527_6(int) = Store[?] : &:r1527_5, r1527_1 -# 1528| r1528_1(glval<int &>) = VariableAddress[rr] : -# 1528| r1528_2(glval<int &>) = VariableAddress[r] : -# 1528| r1528_3(int &) = Load[r] : &:r1528_2, ~m? -# 1528| r1528_4(glval<int>) = CopyValue : r1528_3 -# 1528| r1528_5(int &) = CopyValue : r1528_4 -# 1528| mu1528_6(int &) = Store[rr] : &:r1528_1, r1528_5 -# 1529| r1529_1(glval<int *>) = VariableAddress[pr] : -# 1529| r1529_2(glval<int &>) = VariableAddress[r] : -# 1529| r1529_3(int &) = Load[r] : &:r1529_2, ~m? -# 1529| r1529_4(glval<int>) = CopyValue : r1529_3 -# 1529| r1529_5(int *) = CopyValue : r1529_4 -# 1529| mu1529_6(int *) = Store[pr] : &:r1529_1, r1529_5 -# 1530| r1530_1(glval<int>) = VariableAddress[w] : -# 1530| r1530_2(glval<int &>) = 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<StructuredBindingDataMemberStruct>) = VariableAddress[s] : +# 1549| mu1549_2(StructuredBindingDataMemberStruct) = Uninitialized[s] : &:r1549_1 +# 1549| r1549_3(glval<unknown>) = 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<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_2(glval<StructuredBindingDataMemberStruct>) = 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<int &>) = VariableAddress[i] : +# 1552| r1552_6(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_7(glval<int>) = FieldAddress[i] : r1552_6 +# 1552| mu1552_8(int &) = Store[i] : &:r1552_5, r1552_7 +# 1552| r1552_9(glval<double &>) = VariableAddress[d] : +# 1552| r1552_10(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_11(glval<double>) = FieldAddress[d] : r1552_10 +# 1552| mu1552_12(double &) = Store[d] : &:r1552_9, r1552_11 +# 1552| r1552_13(glval<unsigned int &>) = VariableAddress[b] : +# 1552| r1552_14(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_15(glval<unsigned int>) = FieldAddress[b] : r1552_14 +# 1552| mu1552_16(unsigned int &) = Store[b] : &:r1552_13, r1552_15 +# 1552| r1552_17(glval<int &>) = VariableAddress[r] : +# 1552| r1552_18(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_19(glval<int &>) = FieldAddress[r] : r1552_18 +# 1552| r1552_20(int &) = Load[?] : &:r1552_19, ~m? +# 1552| r1552_21(glval<int>) = CopyValue : r1552_20 +# 1552| mu1552_22(int &) = Store[r] : &:r1552_17, r1552_21 +# 1552| r1552_23(glval<int *&>) = VariableAddress[p] : +# 1552| r1552_24(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_25(glval<int *>) = FieldAddress[p] : r1552_24 +# 1552| mu1552_26(int *&) = Store[p] : &:r1552_23, r1552_25 +# 1552| r1552_27(glval<int(&)[2]>) = VariableAddress[xs] : +# 1552| r1552_28(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_29(glval<int[2]>) = FieldAddress[xs] : r1552_28 +# 1552| mu1552_30(int(&)[2]) = Store[xs] : &:r1552_27, r1552_29 +# 1552| r1552_31(glval<int &>) = VariableAddress[r_alt] : +# 1552| r1552_32(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_33(glval<int &>) = FieldAddress[r_alt] : r1552_32 +# 1552| r1552_34(int &) = Load[?] : &:r1552_33, ~m? +# 1552| r1552_35(glval<int>) = CopyValue : r1552_34 +# 1552| mu1552_36(int &) = Store[r_alt] : &:r1552_31, r1552_35 +# 1552| r1552_37(glval<StructuredBindingDataMemberMemberStruct &>) = VariableAddress[m] : +# 1552| r1552_38(glval<StructuredBindingDataMemberStruct>) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_39(glval<StructuredBindingDataMemberMemberStruct>) = 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<double &>) = VariableAddress[d] : +# 1553| r1553_3(double &) = Load[d] : &:r1553_2, ~m? +# 1553| mu1553_4(double) = Store[?] : &:r1553_3, r1553_1 +# 1554| r1554_1(glval<double &>) = VariableAddress[rd] : +# 1554| r1554_2(glval<double &>) = 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<int>) = VariableAddress[v] : +# 1555| r1555_2(glval<int &>) = 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<int &>) = 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<int *&>) = VariableAddress[p] : +# 1557| r1557_3(int *&) = Load[p] : &:r1557_2, ~m? +# 1557| r1557_4(int *) = Load[?] : &:r1557_3, ~m? +# 1557| r1557_5(glval<int>) = CopyValue : r1557_4 +# 1557| mu1557_6(int) = Store[?] : &:r1557_5, r1557_1 +# 1558| r1558_1(glval<int &>) = VariableAddress[rr] : +# 1558| r1558_2(glval<int &>) = 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<int *>) = VariableAddress[pr] : +# 1559| r1559_2(glval<int &>) = 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<int>) = VariableAddress[w] : +# 1560| r1560_2(glval<int &>) = 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<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] : +# 1564| r1564_2(glval<StructuredBindingDataMemberStruct>) = 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<int &>) = VariableAddress[i] : +# 1565| r1565_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] : +# 1565| r1565_3(glval<int>) = 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<double &>) = VariableAddress[d] : +# 1566| r1566_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] : +# 1566| r1566_3(glval<double>) = 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<int &>) = VariableAddress[r] : +# 1568| r1568_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] : +# 1568| r1568_3(glval<int &>) = FieldAddress[r] : r1568_2 +# 1568| r1568_4(int &) = Load[?] : &:r1568_3, ~m? +# 1568| r1568_5(glval<int>) = CopyValue : r1568_4 +# 1568| r1568_6(int &) = CopyValue : r1568_5 +# 1568| mu1568_7(int &) = Store[r] : &:r1568_1, r1568_6 +# 1569| r1569_1(glval<int *&>) = VariableAddress[p] : +# 1569| r1569_2(glval<StructuredBindingDataMemberStruct>) = VariableAddress[unnamed_local_variable] : +# 1569| r1569_3(glval<int *>) = 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<double &>) = VariableAddress[d] : +# 1570| r1570_3(double &) = Load[d] : &:r1570_2, ~m? +# 1570| r1570_4(glval<double>) = CopyValue : r1570_3 +# 1570| mu1570_5(double) = Store[?] : &:r1570_4, r1570_1 +# 1571| r1571_1(glval<double &>) = VariableAddress[rd] : +# 1571| r1571_2(glval<double &>) = VariableAddress[d] : +# 1571| r1571_3(double &) = Load[d] : &:r1571_2, ~m? +# 1571| r1571_4(glval<double>) = CopyValue : r1571_3 +# 1571| r1571_5(double &) = CopyValue : r1571_4 +# 1571| mu1571_6(double &) = Store[rd] : &:r1571_1, r1571_5 +# 1572| r1572_1(glval<int>) = VariableAddress[v] : +# 1572| r1572_2(glval<int &>) = 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<int &>) = VariableAddress[r] : +# 1573| r1573_3(int &) = Load[r] : &:r1573_2, ~m? +# 1573| r1573_4(glval<int>) = CopyValue : r1573_3 +# 1573| mu1573_5(int) = Store[?] : &:r1573_4, r1573_1 +# 1574| r1574_1(int) = Constant[6] : +# 1574| r1574_2(glval<int *&>) = VariableAddress[p] : +# 1574| r1574_3(int *&) = Load[p] : &:r1574_2, ~m? +# 1574| r1574_4(int *) = Load[?] : &:r1574_3, ~m? +# 1574| r1574_5(glval<int>) = CopyValue : r1574_4 +# 1574| mu1574_6(int) = Store[?] : &:r1574_5, r1574_1 +# 1575| r1575_1(glval<int &>) = VariableAddress[rr] : +# 1575| r1575_2(glval<int &>) = VariableAddress[r] : +# 1575| r1575_3(int &) = Load[r] : &:r1575_2, ~m? +# 1575| r1575_4(glval<int>) = CopyValue : r1575_3 +# 1575| r1575_5(int &) = CopyValue : r1575_4 +# 1575| mu1575_6(int &) = Store[rr] : &:r1575_1, r1575_5 +# 1576| r1576_1(glval<int *>) = VariableAddress[pr] : +# 1576| r1576_2(glval<int &>) = VariableAddress[r] : +# 1576| r1576_3(int &) = Load[r] : &:r1576_2, ~m? +# 1576| r1576_4(glval<int>) = CopyValue : r1576_3 +# 1576| r1576_5(int *) = CopyValue : r1576_4 +# 1576| mu1576_6(int *) = Store[pr] : &:r1576_1, r1576_5 +# 1577| r1577_1(glval<int>) = VariableAddress[w] : +# 1577| r1577_2(glval<int &>) = 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<unknown>) = VariableAddress[#this] : -# 1541| mu1541_5(glval<StructuredBindingTupleRefGet>) = InitializeParameter[#this] : &:r1541_4 -# 1541| r1541_6(glval<StructuredBindingTupleRefGet>) = 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<unknown>) = VariableAddress[#this] : +# 1588| mu1588_5(glval<StructuredBindingTupleRefGet>) = InitializeParameter[#this] : &:r1588_4 +# 1588| r1588_6(glval<StructuredBindingTupleRefGet>) = 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<unknown>) = VariableAddress[#this] : -# 1541| mu1541_5(glval<StructuredBindingTupleRefGet>) = InitializeParameter[#this] : &:r1541_4 -# 1541| r1541_6(glval<StructuredBindingTupleRefGet>) = 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<unknown>) = VariableAddress[#this] : +# 1588| mu1588_5(glval<StructuredBindingTupleRefGet>) = InitializeParameter[#this] : &:r1588_4 +# 1588| r1588_6(glval<StructuredBindingTupleRefGet>) = Load[#this] : &:r1588_4, ~m? +# 1588| mu1588_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1588_6 #-----| r0_1(glval<StructuredBindingTupleRefGet &>) = 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<int>) = FieldAddress[i] : mu1541_5 -# 1541| r1541_9(glval<StructuredBindingTupleRefGet &>) = VariableAddress[(unnamed parameter 0)] : -# 1541| r1541_10(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_9, ~m? -# 1541| r1541_11(glval<StructuredBindingTupleRefGet>) = CopyValue : r1541_10 -# 1541| r1541_12(glval<int>) = 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<double>) = FieldAddress[d] : mu1541_5 -# 1541| r1541_16(glval<StructuredBindingTupleRefGet &>) = VariableAddress[(unnamed parameter 0)] : -# 1541| r1541_17(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_16, ~m? -# 1541| r1541_18(glval<StructuredBindingTupleRefGet>) = CopyValue : r1541_17 -# 1541| r1541_19(glval<double>) = 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<int &>) = FieldAddress[r] : mu1541_5 -# 1541| r1541_23(glval<StructuredBindingTupleRefGet &>) = VariableAddress[(unnamed parameter 0)] : -# 1541| r1541_24(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_23, ~m? -# 1541| r1541_25(glval<StructuredBindingTupleRefGet>) = CopyValue : r1541_24 -# 1541| r1541_26(glval<int &>) = 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<int>) = FieldAddress[i] : mu1588_5 +# 1588| r1588_9(glval<StructuredBindingTupleRefGet &>) = VariableAddress[(unnamed parameter 0)] : +# 1588| r1588_10(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1588_9, ~m? +# 1588| r1588_11(glval<StructuredBindingTupleRefGet>) = CopyValue : r1588_10 +# 1588| r1588_12(glval<int>) = 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<double>) = FieldAddress[d] : mu1588_5 +# 1588| r1588_16(glval<StructuredBindingTupleRefGet &>) = VariableAddress[(unnamed parameter 0)] : +# 1588| r1588_17(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1588_16, ~m? +# 1588| r1588_18(glval<StructuredBindingTupleRefGet>) = CopyValue : r1588_17 +# 1588| r1588_19(glval<double>) = 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<int &>) = FieldAddress[r] : mu1588_5 +# 1588| r1588_23(glval<StructuredBindingTupleRefGet &>) = VariableAddress[(unnamed parameter 0)] : +# 1588| r1588_24(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1588_23, ~m? +# 1588| r1588_25(glval<StructuredBindingTupleRefGet>) = CopyValue : r1588_24 +# 1588| r1588_26(glval<int &>) = 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<int 0, StructuredBindingTupleRefGet>::type& StructuredBindingTupleRefGet::get<int 0>() -# 1569| Block 0 -# 1569| v1569_1(void) = EnterFunction : -# 1569| mu1569_2(unknown) = AliasedDefinition : -# 1569| mu1569_3(unknown) = InitializeNonLocal : -# 1569| r1569_4(glval<unknown>) = VariableAddress[#this] : -# 1569| mu1569_5(glval<StructuredBindingTupleRefGet>) = InitializeParameter[#this] : &:r1569_4 -# 1569| r1569_6(glval<StructuredBindingTupleRefGet>) = Load[#this] : &:r1569_4, ~m? -# 1569| mu1569_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1569_6 -# 1570| r1570_1(glval<int &>) = VariableAddress[#return] : -# 1570| r1570_2(glval<unknown>) = VariableAddress[#this] : -# 1570| r1570_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1570_2, ~m? -# 1570| r1570_4(glval<int>) = 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<int &>) = 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<int 0, StructuredBindingTupleRefGet>::type& StructuredBindingTupleRefGet::get<int 0>() +# 1616| Block 0 +# 1616| v1616_1(void) = EnterFunction : +# 1616| mu1616_2(unknown) = AliasedDefinition : +# 1616| mu1616_3(unknown) = InitializeNonLocal : +# 1616| r1616_4(glval<unknown>) = VariableAddress[#this] : +# 1616| mu1616_5(glval<StructuredBindingTupleRefGet>) = InitializeParameter[#this] : &:r1616_4 +# 1616| r1616_6(glval<StructuredBindingTupleRefGet>) = Load[#this] : &:r1616_4, ~m? +# 1616| mu1616_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1616_6 +# 1617| r1617_1(glval<int &>) = VariableAddress[#return] : +# 1617| r1617_2(glval<unknown>) = VariableAddress[#this] : +# 1617| r1617_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1617_2, ~m? +# 1617| r1617_4(glval<int>) = 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<int &>) = 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<int 1, StructuredBindingTupleRefGet>::type& StructuredBindingTupleRefGet::get<int 1>() -# 1573| Block 0 -# 1573| v1573_1(void) = EnterFunction : -# 1573| mu1573_2(unknown) = AliasedDefinition : -# 1573| mu1573_3(unknown) = InitializeNonLocal : -# 1573| r1573_4(glval<unknown>) = VariableAddress[#this] : -# 1573| mu1573_5(glval<StructuredBindingTupleRefGet>) = InitializeParameter[#this] : &:r1573_4 -# 1573| r1573_6(glval<StructuredBindingTupleRefGet>) = Load[#this] : &:r1573_4, ~m? -# 1573| mu1573_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1573_6 -# 1574| r1574_1(glval<double &>) = VariableAddress[#return] : -# 1574| r1574_2(glval<unknown>) = VariableAddress[#this] : -# 1574| r1574_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1574_2, ~m? -# 1574| r1574_4(glval<double>) = 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<double &>) = 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<int 1, StructuredBindingTupleRefGet>::type& StructuredBindingTupleRefGet::get<int 1>() +# 1620| Block 0 +# 1620| v1620_1(void) = EnterFunction : +# 1620| mu1620_2(unknown) = AliasedDefinition : +# 1620| mu1620_3(unknown) = InitializeNonLocal : +# 1620| r1620_4(glval<unknown>) = VariableAddress[#this] : +# 1620| mu1620_5(glval<StructuredBindingTupleRefGet>) = InitializeParameter[#this] : &:r1620_4 +# 1620| r1620_6(glval<StructuredBindingTupleRefGet>) = Load[#this] : &:r1620_4, ~m? +# 1620| mu1620_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1620_6 +# 1621| r1621_1(glval<double &>) = VariableAddress[#return] : +# 1621| r1621_2(glval<unknown>) = VariableAddress[#this] : +# 1621| r1621_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1621_2, ~m? +# 1621| r1621_4(glval<double>) = 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<double &>) = 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<int 2, StructuredBindingTupleRefGet>::type StructuredBindingTupleRefGet::get<int 2>() -# 1577| Block 0 -# 1577| v1577_1(void) = EnterFunction : -# 1577| mu1577_2(unknown) = AliasedDefinition : -# 1577| mu1577_3(unknown) = InitializeNonLocal : -# 1577| r1577_4(glval<unknown>) = VariableAddress[#this] : -# 1577| mu1577_5(glval<StructuredBindingTupleRefGet>) = InitializeParameter[#this] : &:r1577_4 -# 1577| r1577_6(glval<StructuredBindingTupleRefGet>) = Load[#this] : &:r1577_4, ~m? -# 1577| mu1577_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1577_6 -# 1578| r1578_1(glval<int &>) = VariableAddress[#return] : -# 1578| r1578_2(glval<unknown>) = VariableAddress[#this] : -# 1578| r1578_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1578_2, ~m? -# 1578| r1578_4(glval<int &>) = FieldAddress[r] : r1578_3 -# 1578| r1578_5(int &) = Load[?] : &:r1578_4, ~m? -# 1578| r1578_6(glval<int>) = 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<int &>) = 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<int 2, StructuredBindingTupleRefGet>::type StructuredBindingTupleRefGet::get<int 2>() +# 1624| Block 0 +# 1624| v1624_1(void) = EnterFunction : +# 1624| mu1624_2(unknown) = AliasedDefinition : +# 1624| mu1624_3(unknown) = InitializeNonLocal : +# 1624| r1624_4(glval<unknown>) = VariableAddress[#this] : +# 1624| mu1624_5(glval<StructuredBindingTupleRefGet>) = InitializeParameter[#this] : &:r1624_4 +# 1624| r1624_6(glval<StructuredBindingTupleRefGet>) = Load[#this] : &:r1624_4, ~m? +# 1624| mu1624_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1624_6 +# 1625| r1625_1(glval<int &>) = VariableAddress[#return] : +# 1625| r1625_2(glval<unknown>) = VariableAddress[#this] : +# 1625| r1625_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1625_2, ~m? +# 1625| r1625_4(glval<int &>) = FieldAddress[r] : r1625_3 +# 1625| r1625_5(int &) = Load[?] : &:r1625_4, ~m? +# 1625| r1625_6(glval<int>) = 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<int &>) = 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<StructuredBindingTupleRefGet>) = VariableAddress[t] : -# 1582| mu1582_2(StructuredBindingTupleRefGet) = Uninitialized[t] : &:r1582_1 -# 1582| r1582_3(glval<unknown>) = 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<StructuredBindingTupleRefGet>) = VariableAddress[(unnamed local variable)] : -# 1585| r1585_2(glval<StructuredBindingTupleRefGet>) = 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<int &>) = VariableAddress[i] : -# 1585| r1585_6(glval<StructuredBindingTupleRefGet>) = VariableAddress[(unnamed local variable)] : -# 1585| r1585_7(glval<unknown>) = 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<int>) = CopyValue : r1585_8 -# 1585| r1585_13(int &) = CopyValue : r1585_12 -# 1585| mu1585_14(int &) = Store[i] : &:r1585_5, r1585_13 -# 1585| r1585_15(glval<double &>) = VariableAddress[d] : -# 1585| r1585_16(glval<StructuredBindingTupleRefGet>) = VariableAddress[(unnamed local variable)] : -# 1585| r1585_17(glval<unknown>) = 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<double>) = CopyValue : r1585_18 -# 1585| r1585_23(double &) = CopyValue : r1585_22 -# 1585| mu1585_24(double &) = Store[d] : &:r1585_15, r1585_23 -# 1585| r1585_25(glval<int &>) = VariableAddress[r] : -# 1585| r1585_26(glval<StructuredBindingTupleRefGet>) = VariableAddress[(unnamed local variable)] : -# 1585| r1585_27(glval<unknown>) = 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<int>) = 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<double &>) = VariableAddress[d] : -# 1586| r1586_3(double &) = Load[d] : &:r1586_2, ~m? -# 1586| r1586_4(glval<double>) = CopyValue : r1586_3 -# 1586| mu1586_5(double) = Store[?] : &:r1586_4, r1586_1 -# 1587| r1587_1(glval<double &>) = VariableAddress[rd] : -# 1587| r1587_2(glval<double &>) = VariableAddress[d] : -# 1587| r1587_3(double &) = Load[d] : &:r1587_2, ~m? -# 1587| r1587_4(glval<double>) = CopyValue : r1587_3 -# 1587| r1587_5(double &) = CopyValue : r1587_4 -# 1587| mu1587_6(double &) = Store[rd] : &:r1587_1, r1587_5 -# 1588| r1588_1(glval<int>) = VariableAddress[v] : -# 1588| r1588_2(glval<int &>) = 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<int &>) = VariableAddress[r] : -# 1589| r1589_3(int &) = Load[r] : &:r1589_2, ~m? -# 1589| r1589_4(glval<int>) = CopyValue : r1589_3 -# 1589| mu1589_5(int) = Store[?] : &:r1589_4, r1589_1 -# 1590| r1590_1(glval<int &>) = VariableAddress[rr] : -# 1590| r1590_2(glval<int &>) = VariableAddress[r] : -# 1590| r1590_3(int &) = Load[r] : &:r1590_2, ~m? -# 1590| r1590_4(glval<int>) = CopyValue : r1590_3 -# 1590| r1590_5(int &) = CopyValue : r1590_4 -# 1590| mu1590_6(int &) = Store[rr] : &:r1590_1, r1590_5 -# 1591| r1591_1(glval<int>) = VariableAddress[w] : -# 1591| r1591_2(glval<int &>) = 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<StructuredBindingTupleRefGet>) = VariableAddress[unnamed_local_variable] : -# 1595| r1595_2(glval<StructuredBindingTupleRefGet>) = 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<int &>) = VariableAddress[i] : -# 1596| r1596_2(glval<StructuredBindingTupleRefGet>) = VariableAddress[unnamed_local_variable] : -# 1596| r1596_3(glval<unknown>) = 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<int>) = CopyValue : r1596_4 -# 1596| r1596_9(int &) = CopyValue : r1596_8 -# 1596| mu1596_10(int &) = Store[i] : &:r1596_1, r1596_9 -# 1597| r1597_1(glval<double &>) = VariableAddress[d] : -# 1597| r1597_2(glval<StructuredBindingTupleRefGet>) = VariableAddress[unnamed_local_variable] : -# 1597| r1597_3(glval<unknown>) = 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<double>) = CopyValue : r1597_4 -# 1597| r1597_9(double &) = CopyValue : r1597_8 -# 1597| mu1597_10(double &) = Store[d] : &:r1597_1, r1597_9 -# 1598| r1598_1(glval<int &>) = VariableAddress[r] : -# 1598| r1598_2(glval<StructuredBindingTupleRefGet>) = VariableAddress[unnamed_local_variable] : -# 1598| r1598_3(glval<unknown>) = 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<int>) = 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<double &>) = VariableAddress[d] : -# 1599| r1599_3(double &) = Load[d] : &:r1599_2, ~m? -# 1599| r1599_4(glval<double>) = CopyValue : r1599_3 -# 1599| mu1599_5(double) = Store[?] : &:r1599_4, r1599_1 -# 1600| r1600_1(glval<double &>) = VariableAddress[rd] : -# 1600| r1600_2(glval<double &>) = VariableAddress[d] : -# 1600| r1600_3(double &) = Load[d] : &:r1600_2, ~m? -# 1600| r1600_4(glval<double>) = CopyValue : r1600_3 -# 1600| r1600_5(double &) = CopyValue : r1600_4 -# 1600| mu1600_6(double &) = Store[rd] : &:r1600_1, r1600_5 -# 1601| r1601_1(glval<int>) = VariableAddress[v] : -# 1601| r1601_2(glval<int &>) = 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<int &>) = VariableAddress[r] : -# 1602| r1602_3(int &) = Load[r] : &:r1602_2, ~m? -# 1602| r1602_4(glval<int>) = CopyValue : r1602_3 -# 1602| mu1602_5(int) = Store[?] : &:r1602_4, r1602_1 -# 1603| r1603_1(glval<int &>) = VariableAddress[rr] : -# 1603| r1603_2(glval<int &>) = VariableAddress[r] : -# 1603| r1603_3(int &) = Load[r] : &:r1603_2, ~m? -# 1603| r1603_4(glval<int>) = CopyValue : r1603_3 -# 1603| r1603_5(int &) = CopyValue : r1603_4 -# 1603| mu1603_6(int &) = Store[rr] : &:r1603_1, r1603_5 -# 1604| r1604_1(glval<int>) = VariableAddress[w] : -# 1604| r1604_2(glval<int &>) = 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<StructuredBindingTupleRefGet>) = VariableAddress[t] : +# 1629| mu1629_2(StructuredBindingTupleRefGet) = Uninitialized[t] : &:r1629_1 +# 1629| r1629_3(glval<unknown>) = 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<StructuredBindingTupleRefGet>) = VariableAddress[(unnamed local variable)] : +# 1632| r1632_2(glval<StructuredBindingTupleRefGet>) = 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<int &>) = VariableAddress[i] : +# 1632| r1632_6(glval<StructuredBindingTupleRefGet>) = VariableAddress[(unnamed local variable)] : +# 1632| r1632_7(glval<unknown>) = 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<int>) = CopyValue : r1632_8 +# 1632| r1632_13(int &) = CopyValue : r1632_12 +# 1632| mu1632_14(int &) = Store[i] : &:r1632_5, r1632_13 +# 1632| r1632_15(glval<double &>) = VariableAddress[d] : +# 1632| r1632_16(glval<StructuredBindingTupleRefGet>) = VariableAddress[(unnamed local variable)] : +# 1632| r1632_17(glval<unknown>) = 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<double>) = CopyValue : r1632_18 +# 1632| r1632_23(double &) = CopyValue : r1632_22 +# 1632| mu1632_24(double &) = Store[d] : &:r1632_15, r1632_23 +# 1632| r1632_25(glval<int &>) = VariableAddress[r] : +# 1632| r1632_26(glval<StructuredBindingTupleRefGet>) = VariableAddress[(unnamed local variable)] : +# 1632| r1632_27(glval<unknown>) = 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<int>) = 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<double &>) = VariableAddress[d] : +# 1633| r1633_3(double &) = Load[d] : &:r1633_2, ~m? +# 1633| r1633_4(glval<double>) = CopyValue : r1633_3 +# 1633| mu1633_5(double) = Store[?] : &:r1633_4, r1633_1 +# 1634| r1634_1(glval<double &>) = VariableAddress[rd] : +# 1634| r1634_2(glval<double &>) = VariableAddress[d] : +# 1634| r1634_3(double &) = Load[d] : &:r1634_2, ~m? +# 1634| r1634_4(glval<double>) = CopyValue : r1634_3 +# 1634| r1634_5(double &) = CopyValue : r1634_4 +# 1634| mu1634_6(double &) = Store[rd] : &:r1634_1, r1634_5 +# 1635| r1635_1(glval<int>) = VariableAddress[v] : +# 1635| r1635_2(glval<int &>) = 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<int &>) = VariableAddress[r] : +# 1636| r1636_3(int &) = Load[r] : &:r1636_2, ~m? +# 1636| r1636_4(glval<int>) = CopyValue : r1636_3 +# 1636| mu1636_5(int) = Store[?] : &:r1636_4, r1636_1 +# 1637| r1637_1(glval<int &>) = VariableAddress[rr] : +# 1637| r1637_2(glval<int &>) = VariableAddress[r] : +# 1637| r1637_3(int &) = Load[r] : &:r1637_2, ~m? +# 1637| r1637_4(glval<int>) = CopyValue : r1637_3 +# 1637| r1637_5(int &) = CopyValue : r1637_4 +# 1637| mu1637_6(int &) = Store[rr] : &:r1637_1, r1637_5 +# 1638| r1638_1(glval<int>) = VariableAddress[w] : +# 1638| r1638_2(glval<int &>) = 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<StructuredBindingTupleRefGet>) = VariableAddress[unnamed_local_variable] : +# 1642| r1642_2(glval<StructuredBindingTupleRefGet>) = 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<int &>) = VariableAddress[i] : +# 1643| r1643_2(glval<StructuredBindingTupleRefGet>) = VariableAddress[unnamed_local_variable] : +# 1643| r1643_3(glval<unknown>) = 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<int>) = CopyValue : r1643_4 +# 1643| r1643_9(int &) = CopyValue : r1643_8 +# 1643| mu1643_10(int &) = Store[i] : &:r1643_1, r1643_9 +# 1644| r1644_1(glval<double &>) = VariableAddress[d] : +# 1644| r1644_2(glval<StructuredBindingTupleRefGet>) = VariableAddress[unnamed_local_variable] : +# 1644| r1644_3(glval<unknown>) = 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<double>) = CopyValue : r1644_4 +# 1644| r1644_9(double &) = CopyValue : r1644_8 +# 1644| mu1644_10(double &) = Store[d] : &:r1644_1, r1644_9 +# 1645| r1645_1(glval<int &>) = VariableAddress[r] : +# 1645| r1645_2(glval<StructuredBindingTupleRefGet>) = VariableAddress[unnamed_local_variable] : +# 1645| r1645_3(glval<unknown>) = 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<int>) = 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<double &>) = VariableAddress[d] : +# 1646| r1646_3(double &) = Load[d] : &:r1646_2, ~m? +# 1646| r1646_4(glval<double>) = CopyValue : r1646_3 +# 1646| mu1646_5(double) = Store[?] : &:r1646_4, r1646_1 +# 1647| r1647_1(glval<double &>) = VariableAddress[rd] : +# 1647| r1647_2(glval<double &>) = VariableAddress[d] : +# 1647| r1647_3(double &) = Load[d] : &:r1647_2, ~m? +# 1647| r1647_4(glval<double>) = CopyValue : r1647_3 +# 1647| r1647_5(double &) = CopyValue : r1647_4 +# 1647| mu1647_6(double &) = Store[rd] : &:r1647_1, r1647_5 +# 1648| r1648_1(glval<int>) = VariableAddress[v] : +# 1648| r1648_2(glval<int &>) = 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<int &>) = VariableAddress[r] : +# 1649| r1649_3(int &) = Load[r] : &:r1649_2, ~m? +# 1649| r1649_4(glval<int>) = CopyValue : r1649_3 +# 1649| mu1649_5(int) = Store[?] : &:r1649_4, r1649_1 +# 1650| r1650_1(glval<int &>) = VariableAddress[rr] : +# 1650| r1650_2(glval<int &>) = VariableAddress[r] : +# 1650| r1650_3(int &) = Load[r] : &:r1650_2, ~m? +# 1650| r1650_4(glval<int>) = CopyValue : r1650_3 +# 1650| r1650_5(int &) = CopyValue : r1650_4 +# 1650| mu1650_6(int &) = Store[rr] : &:r1650_1, r1650_5 +# 1651| r1651_1(glval<int>) = VariableAddress[w] : +# 1651| r1651_2(glval<int &>) = 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<unknown>) = VariableAddress[#this] : -# 1608| mu1608_5(glval<StructuredBindingTupleNoRefGet>) = InitializeParameter[#this] : &:r1608_4 -# 1608| r1608_6(glval<StructuredBindingTupleNoRefGet>) = 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<unknown>) = VariableAddress[#this] : +# 1655| mu1655_5(glval<StructuredBindingTupleNoRefGet>) = InitializeParameter[#this] : &:r1655_4 +# 1655| r1655_6(glval<StructuredBindingTupleNoRefGet>) = 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<int 0, StructuredBindingTupleNoRefGet>::type StructuredBindingTupleNoRefGet::get<int 0>() -# 1635| Block 0 -# 1635| v1635_1(void) = EnterFunction : -# 1635| mu1635_2(unknown) = AliasedDefinition : -# 1635| mu1635_3(unknown) = InitializeNonLocal : -# 1635| r1635_4(glval<unknown>) = VariableAddress[#this] : -# 1635| mu1635_5(glval<StructuredBindingTupleNoRefGet>) = InitializeParameter[#this] : &:r1635_4 -# 1635| r1635_6(glval<StructuredBindingTupleNoRefGet>) = Load[#this] : &:r1635_4, ~m? -# 1635| mu1635_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1635_6 -# 1636| r1636_1(glval<int>) = VariableAddress[#return] : -# 1636| r1636_2(glval<unknown>) = VariableAddress[#this] : -# 1636| r1636_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1636_2, ~m? -# 1636| r1636_4(glval<int>) = 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<int>) = 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<int 0, StructuredBindingTupleNoRefGet>::type StructuredBindingTupleNoRefGet::get<int 0>() +# 1682| Block 0 +# 1682| v1682_1(void) = EnterFunction : +# 1682| mu1682_2(unknown) = AliasedDefinition : +# 1682| mu1682_3(unknown) = InitializeNonLocal : +# 1682| r1682_4(glval<unknown>) = VariableAddress[#this] : +# 1682| mu1682_5(glval<StructuredBindingTupleNoRefGet>) = InitializeParameter[#this] : &:r1682_4 +# 1682| r1682_6(glval<StructuredBindingTupleNoRefGet>) = Load[#this] : &:r1682_4, ~m? +# 1682| mu1682_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1682_6 +# 1683| r1683_1(glval<int>) = VariableAddress[#return] : +# 1683| r1683_2(glval<unknown>) = VariableAddress[#this] : +# 1683| r1683_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1683_2, ~m? +# 1683| r1683_4(glval<int>) = 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<int>) = 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<int 1, StructuredBindingTupleNoRefGet>::type StructuredBindingTupleNoRefGet::get<int 1>() -# 1639| Block 0 -# 1639| v1639_1(void) = EnterFunction : -# 1639| mu1639_2(unknown) = AliasedDefinition : -# 1639| mu1639_3(unknown) = InitializeNonLocal : -# 1639| r1639_4(glval<unknown>) = VariableAddress[#this] : -# 1639| mu1639_5(glval<StructuredBindingTupleNoRefGet>) = InitializeParameter[#this] : &:r1639_4 -# 1639| r1639_6(glval<StructuredBindingTupleNoRefGet>) = Load[#this] : &:r1639_4, ~m? -# 1639| mu1639_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1639_6 -# 1640| r1640_1(glval<int &>) = VariableAddress[#return] : -# 1640| r1640_2(glval<unknown>) = VariableAddress[#this] : -# 1640| r1640_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1640_2, ~m? -# 1640| r1640_4(glval<int &>) = FieldAddress[r] : r1640_3 -# 1640| r1640_5(int &) = Load[?] : &:r1640_4, ~m? -# 1640| r1640_6(glval<int>) = 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<int &>) = 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<int 1, StructuredBindingTupleNoRefGet>::type StructuredBindingTupleNoRefGet::get<int 1>() +# 1686| Block 0 +# 1686| v1686_1(void) = EnterFunction : +# 1686| mu1686_2(unknown) = AliasedDefinition : +# 1686| mu1686_3(unknown) = InitializeNonLocal : +# 1686| r1686_4(glval<unknown>) = VariableAddress[#this] : +# 1686| mu1686_5(glval<StructuredBindingTupleNoRefGet>) = InitializeParameter[#this] : &:r1686_4 +# 1686| r1686_6(glval<StructuredBindingTupleNoRefGet>) = Load[#this] : &:r1686_4, ~m? +# 1686| mu1686_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1686_6 +# 1687| r1687_1(glval<int &>) = VariableAddress[#return] : +# 1687| r1687_2(glval<unknown>) = VariableAddress[#this] : +# 1687| r1687_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1687_2, ~m? +# 1687| r1687_4(glval<int &>) = FieldAddress[r] : r1687_3 +# 1687| r1687_5(int &) = Load[?] : &:r1687_4, ~m? +# 1687| r1687_6(glval<int>) = 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<int &>) = 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<int 2, StructuredBindingTupleNoRefGet>::type StructuredBindingTupleNoRefGet::get<int 2>() -# 1643| Block 0 -# 1643| v1643_1(void) = EnterFunction : -# 1643| mu1643_2(unknown) = AliasedDefinition : -# 1643| mu1643_3(unknown) = InitializeNonLocal : -# 1643| r1643_4(glval<unknown>) = VariableAddress[#this] : -# 1643| mu1643_5(glval<StructuredBindingTupleNoRefGet>) = InitializeParameter[#this] : &:r1643_4 -# 1643| r1643_6(glval<StructuredBindingTupleNoRefGet>) = Load[#this] : &:r1643_4, ~m? -# 1643| mu1643_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1643_6 -# 1644| r1644_1(glval<int &&>) = VariableAddress[#return] : -# 1644| r1644_2(glval<int>) = 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<int &&>) = 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<int 2, StructuredBindingTupleNoRefGet>::type StructuredBindingTupleNoRefGet::get<int 2>() +# 1690| Block 0 +# 1690| v1690_1(void) = EnterFunction : +# 1690| mu1690_2(unknown) = AliasedDefinition : +# 1690| mu1690_3(unknown) = InitializeNonLocal : +# 1690| r1690_4(glval<unknown>) = VariableAddress[#this] : +# 1690| mu1690_5(glval<StructuredBindingTupleNoRefGet>) = InitializeParameter[#this] : &:r1690_4 +# 1690| r1690_6(glval<StructuredBindingTupleNoRefGet>) = Load[#this] : &:r1690_4, ~m? +# 1690| mu1690_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1690_6 +# 1691| r1691_1(glval<int &&>) = VariableAddress[#return] : +# 1691| r1691_2(glval<int>) = 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<int &&>) = 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<StructuredBindingTupleNoRefGet>) = VariableAddress[t] : -# 1648| mu1648_2(StructuredBindingTupleNoRefGet) = Uninitialized[t] : &:r1648_1 -# 1648| r1648_3(glval<unknown>) = 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<StructuredBindingTupleNoRefGet &>) = VariableAddress[(unnamed local variable)] : -# 1651| r1651_2(glval<StructuredBindingTupleNoRefGet>) = 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<int &&>) = VariableAddress[i] : -# 1651| r1651_6(glval<int>) = VariableAddress[#temp1651:16] : -# 1651| r1651_7(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[(unnamed local variable)] : -# 1651| r1651_8(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_7, ~m? -# 1651| r1651_9(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1651_8 -# 1651| r1651_10(glval<unknown>) = 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<int &>) = VariableAddress[r] : -# 1651| r1651_19(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[(unnamed local variable)] : -# 1651| r1651_20(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_19, ~m? -# 1651| r1651_21(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1651_20 -# 1651| r1651_22(glval<unknown>) = 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<int>) = CopyValue : r1651_23 -# 1651| r1651_28(int &) = CopyValue : r1651_27 -# 1651| mu1651_29(int &) = Store[r] : &:r1651_18, r1651_28 -# 1651| r1651_30(glval<int &&>) = VariableAddress[rv] : -# 1651| r1651_31(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[(unnamed local variable)] : -# 1651| r1651_32(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_31, ~m? -# 1651| r1651_33(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1651_32 -# 1651| r1651_34(glval<unknown>) = 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<int>) = 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<int &&>) = VariableAddress[i] : -# 1652| r1652_3(int &&) = Load[i] : &:r1652_2, ~m? -# 1652| r1652_4(glval<int>) = CopyValue : r1652_3 -# 1652| mu1652_5(int) = Store[?] : &:r1652_4, r1652_1 -# 1653| r1653_1(glval<int &>) = VariableAddress[ri] : -# 1653| r1653_2(glval<int &&>) = VariableAddress[i] : -# 1653| r1653_3(int &&) = Load[i] : &:r1653_2, ~m? -# 1653| r1653_4(glval<int>) = CopyValue : r1653_3 -# 1653| r1653_5(int &) = CopyValue : r1653_4 -# 1653| mu1653_6(int &) = Store[ri] : &:r1653_1, r1653_5 -# 1654| r1654_1(glval<int>) = VariableAddress[v] : -# 1654| r1654_2(glval<int &&>) = 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<int &>) = VariableAddress[r] : -# 1655| r1655_3(int &) = Load[r] : &:r1655_2, ~m? -# 1655| r1655_4(glval<int>) = CopyValue : r1655_3 -# 1655| mu1655_5(int) = Store[?] : &:r1655_4, r1655_1 -# 1656| r1656_1(glval<int &>) = VariableAddress[rr] : -# 1656| r1656_2(glval<int &>) = VariableAddress[r] : -# 1656| r1656_3(int &) = Load[r] : &:r1656_2, ~m? -# 1656| r1656_4(glval<int>) = CopyValue : r1656_3 -# 1656| r1656_5(int &) = CopyValue : r1656_4 -# 1656| mu1656_6(int &) = Store[rr] : &:r1656_1, r1656_5 -# 1657| r1657_1(glval<int>) = VariableAddress[w] : -# 1657| r1657_2(glval<int &>) = 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<StructuredBindingTupleNoRefGet &>) = VariableAddress[unnamed_local_variable] : -# 1661| r1661_2(glval<StructuredBindingTupleNoRefGet>) = 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<int &&>) = VariableAddress[i] : -# 1662| r1662_2(glval<int>) = VariableAddress[#temp1662:20] : -# 1662| r1662_3(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[unnamed_local_variable] : -# 1662| r1662_4(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1662_3, ~m? -# 1662| r1662_5(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1662_4 -# 1662| r1662_6(glval<unknown>) = 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<int &>) = VariableAddress[r] : -# 1663| r1663_2(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[unnamed_local_variable] : -# 1663| r1663_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1663_2, ~m? -# 1663| r1663_4(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1663_3 -# 1663| r1663_5(glval<unknown>) = 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<int>) = CopyValue : r1663_6 -# 1663| r1663_11(int &) = CopyValue : r1663_10 -# 1663| mu1663_12(int &) = Store[r] : &:r1663_1, r1663_11 -# 1664| r1664_1(glval<int &&>) = VariableAddress[rv] : -# 1664| r1664_2(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[unnamed_local_variable] : -# 1664| r1664_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1664_2, ~m? -# 1664| r1664_4(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1664_3 -# 1664| r1664_5(glval<unknown>) = 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<int>) = 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<int &&>) = VariableAddress[i] : -# 1665| r1665_3(int &&) = Load[i] : &:r1665_2, ~m? -# 1665| r1665_4(glval<int>) = CopyValue : r1665_3 -# 1665| mu1665_5(int) = Store[?] : &:r1665_4, r1665_1 -# 1666| r1666_1(glval<int &>) = VariableAddress[ri] : -# 1666| r1666_2(glval<int &&>) = VariableAddress[i] : -# 1666| r1666_3(int &&) = Load[i] : &:r1666_2, ~m? -# 1666| r1666_4(glval<int>) = CopyValue : r1666_3 -# 1666| r1666_5(int &) = CopyValue : r1666_4 -# 1666| mu1666_6(int &) = Store[ri] : &:r1666_1, r1666_5 -# 1667| r1667_1(glval<int>) = VariableAddress[v] : -# 1667| r1667_2(glval<int &&>) = 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<int &>) = VariableAddress[r] : -# 1668| r1668_3(int &) = Load[r] : &:r1668_2, ~m? -# 1668| r1668_4(glval<int>) = CopyValue : r1668_3 -# 1668| mu1668_5(int) = Store[?] : &:r1668_4, r1668_1 -# 1669| r1669_1(glval<int &>) = VariableAddress[rr] : -# 1669| r1669_2(glval<int &>) = VariableAddress[r] : -# 1669| r1669_3(int &) = Load[r] : &:r1669_2, ~m? -# 1669| r1669_4(glval<int>) = CopyValue : r1669_3 -# 1669| r1669_5(int &) = CopyValue : r1669_4 -# 1669| mu1669_6(int &) = Store[rr] : &:r1669_1, r1669_5 -# 1670| r1670_1(glval<int>) = VariableAddress[w] : -# 1670| r1670_2(glval<int &>) = 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<StructuredBindingTupleNoRefGet>) = VariableAddress[t] : +# 1695| mu1695_2(StructuredBindingTupleNoRefGet) = Uninitialized[t] : &:r1695_1 +# 1695| r1695_3(glval<unknown>) = 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<StructuredBindingTupleNoRefGet &>) = VariableAddress[(unnamed local variable)] : +# 1698| r1698_2(glval<StructuredBindingTupleNoRefGet>) = 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<int &&>) = VariableAddress[i] : +# 1698| r1698_6(glval<int>) = VariableAddress[#temp1698:16] : +# 1698| r1698_7(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[(unnamed local variable)] : +# 1698| r1698_8(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1698_7, ~m? +# 1698| r1698_9(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1698_8 +# 1698| r1698_10(glval<unknown>) = 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<int &>) = VariableAddress[r] : +# 1698| r1698_19(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[(unnamed local variable)] : +# 1698| r1698_20(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1698_19, ~m? +# 1698| r1698_21(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1698_20 +# 1698| r1698_22(glval<unknown>) = 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<int>) = CopyValue : r1698_23 +# 1698| r1698_28(int &) = CopyValue : r1698_27 +# 1698| mu1698_29(int &) = Store[r] : &:r1698_18, r1698_28 +# 1698| r1698_30(glval<int &&>) = VariableAddress[rv] : +# 1698| r1698_31(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[(unnamed local variable)] : +# 1698| r1698_32(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1698_31, ~m? +# 1698| r1698_33(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1698_32 +# 1698| r1698_34(glval<unknown>) = 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<int>) = 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<int &&>) = VariableAddress[i] : +# 1699| r1699_3(int &&) = Load[i] : &:r1699_2, ~m? +# 1699| r1699_4(glval<int>) = CopyValue : r1699_3 +# 1699| mu1699_5(int) = Store[?] : &:r1699_4, r1699_1 +# 1700| r1700_1(glval<int &>) = VariableAddress[ri] : +# 1700| r1700_2(glval<int &&>) = VariableAddress[i] : +# 1700| r1700_3(int &&) = Load[i] : &:r1700_2, ~m? +# 1700| r1700_4(glval<int>) = CopyValue : r1700_3 +# 1700| r1700_5(int &) = CopyValue : r1700_4 +# 1700| mu1700_6(int &) = Store[ri] : &:r1700_1, r1700_5 +# 1701| r1701_1(glval<int>) = VariableAddress[v] : +# 1701| r1701_2(glval<int &&>) = 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<int &>) = VariableAddress[r] : +# 1702| r1702_3(int &) = Load[r] : &:r1702_2, ~m? +# 1702| r1702_4(glval<int>) = CopyValue : r1702_3 +# 1702| mu1702_5(int) = Store[?] : &:r1702_4, r1702_1 +# 1703| r1703_1(glval<int &>) = VariableAddress[rr] : +# 1703| r1703_2(glval<int &>) = VariableAddress[r] : +# 1703| r1703_3(int &) = Load[r] : &:r1703_2, ~m? +# 1703| r1703_4(glval<int>) = CopyValue : r1703_3 +# 1703| r1703_5(int &) = CopyValue : r1703_4 +# 1703| mu1703_6(int &) = Store[rr] : &:r1703_1, r1703_5 +# 1704| r1704_1(glval<int>) = VariableAddress[w] : +# 1704| r1704_2(glval<int &>) = 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<StructuredBindingTupleNoRefGet &>) = VariableAddress[unnamed_local_variable] : +# 1708| r1708_2(glval<StructuredBindingTupleNoRefGet>) = 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<int &&>) = VariableAddress[i] : +# 1709| r1709_2(glval<int>) = VariableAddress[#temp1709:20] : +# 1709| r1709_3(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[unnamed_local_variable] : +# 1709| r1709_4(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1709_3, ~m? +# 1709| r1709_5(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1709_4 +# 1709| r1709_6(glval<unknown>) = 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<int &>) = VariableAddress[r] : +# 1710| r1710_2(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[unnamed_local_variable] : +# 1710| r1710_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1710_2, ~m? +# 1710| r1710_4(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1710_3 +# 1710| r1710_5(glval<unknown>) = 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<int>) = CopyValue : r1710_6 +# 1710| r1710_11(int &) = CopyValue : r1710_10 +# 1710| mu1710_12(int &) = Store[r] : &:r1710_1, r1710_11 +# 1711| r1711_1(glval<int &&>) = VariableAddress[rv] : +# 1711| r1711_2(glval<StructuredBindingTupleNoRefGet &>) = VariableAddress[unnamed_local_variable] : +# 1711| r1711_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1711_2, ~m? +# 1711| r1711_4(glval<StructuredBindingTupleNoRefGet>) = CopyValue : r1711_3 +# 1711| r1711_5(glval<unknown>) = 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<int>) = 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<int &&>) = VariableAddress[i] : +# 1712| r1712_3(int &&) = Load[i] : &:r1712_2, ~m? +# 1712| r1712_4(glval<int>) = CopyValue : r1712_3 +# 1712| mu1712_5(int) = Store[?] : &:r1712_4, r1712_1 +# 1713| r1713_1(glval<int &>) = VariableAddress[ri] : +# 1713| r1713_2(glval<int &&>) = VariableAddress[i] : +# 1713| r1713_3(int &&) = Load[i] : &:r1713_2, ~m? +# 1713| r1713_4(glval<int>) = CopyValue : r1713_3 +# 1713| r1713_5(int &) = CopyValue : r1713_4 +# 1713| mu1713_6(int &) = Store[ri] : &:r1713_1, r1713_5 +# 1714| r1714_1(glval<int>) = VariableAddress[v] : +# 1714| r1714_2(glval<int &&>) = 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<int &>) = VariableAddress[r] : +# 1715| r1715_3(int &) = Load[r] : &:r1715_2, ~m? +# 1715| r1715_4(glval<int>) = CopyValue : r1715_3 +# 1715| mu1715_5(int) = Store[?] : &:r1715_4, r1715_1 +# 1716| r1716_1(glval<int &>) = VariableAddress[rr] : +# 1716| r1716_2(glval<int &>) = VariableAddress[r] : +# 1716| r1716_3(int &) = Load[r] : &:r1716_2, ~m? +# 1716| r1716_4(glval<int>) = CopyValue : r1716_3 +# 1716| r1716_5(int &) = CopyValue : r1716_4 +# 1716| mu1716_6(int &) = Store[rr] : &:r1716_1, r1716_5 +# 1717| r1717_1(glval<int>) = VariableAddress[w] : +# 1717| r1717_2(glval<int &>) = 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<int[2]>) = VariableAddress[xs] : -# 1675| mu1675_2(int[2]) = Uninitialized[xs] : &:r1675_1 -# 1675| r1675_3(int) = Constant[0] : -# 1675| r1675_4(glval<int>) = 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<int>) = 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<int[2]>) = VariableAddress[(unnamed local variable)] : -# 1676| r1676_2(glval<int[2]>) = 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<int &>) = 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<int[2]>) = VariableAddress[xs] : +# 1722| mu1722_2(int[2]) = Uninitialized[xs] : &:r1722_1 +# 1722| r1722_3(int) = Constant[0] : +# 1722| r1722_4(glval<int>) = 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<int>) = 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<int[2]>) = VariableAddress[(unnamed local variable)] : +# 1723| r1723_2(glval<int[2]>) = 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<int &>) = VariableAddress[x0] : #-----| r0_1(glval<int[2]>) = VariableAddress[(unnamed local variable)] : #-----| r0_2(int *) = Convert : r0_1 #-----| r0_3(unsigned long) = Constant[0] : #-----| r0_4(glval<int>) = PointerAdd[4] : r0_2, r0_3 -#-----| mu0_5(int &) = Store[x0] : &:r1676_5, r0_4 -# 1676| r1676_6(glval<int &>) = VariableAddress[x1] : +#-----| mu0_5(int &) = Store[x0] : &:r1723_5, r0_4 +# 1723| r1723_6(glval<int &>) = VariableAddress[x1] : #-----| r0_6(glval<int[2]>) = VariableAddress[(unnamed local variable)] : #-----| r0_7(int *) = Convert : r0_6 #-----| r0_8(unsigned long) = Constant[1] : #-----| r0_9(glval<int>) = 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<unknown>) = VariableAddress[#this] : -# 1682| mu1682_5(glval<CapturedLambdaMyObj>) = InitializeParameter[#this] : &:r1682_4 -# 1682| r1682_6(glval<CapturedLambdaMyObj>) = 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<unknown>) = VariableAddress[#this] : +# 1729| mu1729_5(glval<CapturedLambdaMyObj>) = InitializeParameter[#this] : &:r1729_4 +# 1729| r1729_6(glval<CapturedLambdaMyObj>) = 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<int>) = VariableAddress[x] : -# 1685| mu1685_5(int) = InitializeParameter[x] : &:r1685_4 -# 1685| r1685_6(glval<int &>) = 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<int &&>) = 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<CapturedLambdaMyObj &>) = VariableAddress[obj1] : -# 1687| r1687_2(glval<CapturedLambdaMyObj>) = VariableAddress[#temp1687:24] : -# 1687| mu1687_3(CapturedLambdaMyObj) = Uninitialized[#temp1687:24] : &:r1687_2 -# 1687| r1687_4(glval<unknown>) = 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<CapturedLambdaMyObj>) = Convert : r1687_2 -# 1687| r1687_9(CapturedLambdaMyObj &) = CopyValue : r1687_8 -# 1687| mu1687_10(CapturedLambdaMyObj &) = Store[obj1] : &:r1687_1, r1687_9 -# 1688| r1688_1(glval<CapturedLambdaMyObj>) = VariableAddress[obj2] : -# 1688| mu1688_2(CapturedLambdaMyObj) = Uninitialized[obj2] : &:r1688_1 -# 1688| r1688_3(glval<unknown>) = 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<decltype([...](...){...})>) = VariableAddress[lambda_outer] : -# 1690| r1690_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1690:24] : -# 1690| mu1690_3(decltype([...](...){...})) = Uninitialized[#temp1690:24] : &:r1690_2 -# 1690| r1690_4(glval<CapturedLambdaMyObj>) = FieldAddress[obj1] : r1690_2 -# 1690| r1690_5(glval<CapturedLambdaMyObj &>) = 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<CapturedLambdaMyObj>) = FieldAddress[obj2] : r1690_2 -# 1690| r1690_8(glval<CapturedLambdaMyObj>) = VariableAddress[obj2] : -# 1690| r1690_9(CapturedLambdaMyObj) = Load[obj2] : &:r1690_8, ~m? -# 1690| mu1690_10(CapturedLambdaMyObj) = Store[?] : &:r1690_7, r1690_9 -# 1690| r1690_11(glval<int>) = FieldAddress[x] : r1690_2 -# 1690| r1690_12(glval<int>) = VariableAddress[x] : -# 1690| r1690_13(int) = Load[x] : &:r1690_12, ~m? -# 1690| mu1690_14(int) = Store[?] : &:r1690_11, r1690_13 -# 1690| r1690_15(glval<int>) = FieldAddress[y] : r1690_2 -# 1690| r1690_16(glval<int &>) = 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<int>) = FieldAddress[z] : r1690_2 -# 1690| r1690_19(glval<int &&>) = 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<int>) = VariableAddress[x] : +# 1732| mu1732_5(int) = InitializeParameter[x] : &:r1732_4 +# 1732| r1732_6(glval<int &>) = 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<int &&>) = 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<CapturedLambdaMyObj &>) = VariableAddress[obj1] : +# 1734| r1734_2(glval<CapturedLambdaMyObj>) = VariableAddress[#temp1734:24] : +# 1734| mu1734_3(CapturedLambdaMyObj) = Uninitialized[#temp1734:24] : &:r1734_2 +# 1734| r1734_4(glval<unknown>) = 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<CapturedLambdaMyObj>) = Convert : r1734_2 +# 1734| r1734_9(CapturedLambdaMyObj &) = CopyValue : r1734_8 +# 1734| mu1734_10(CapturedLambdaMyObj &) = Store[obj1] : &:r1734_1, r1734_9 +# 1735| r1735_1(glval<CapturedLambdaMyObj>) = VariableAddress[obj2] : +# 1735| mu1735_2(CapturedLambdaMyObj) = Uninitialized[obj2] : &:r1735_1 +# 1735| r1735_3(glval<unknown>) = 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<decltype([...](...){...})>) = VariableAddress[lambda_outer] : +# 1737| r1737_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1737:24] : +# 1737| mu1737_3(decltype([...](...){...})) = Uninitialized[#temp1737:24] : &:r1737_2 +# 1737| r1737_4(glval<CapturedLambdaMyObj>) = FieldAddress[obj1] : r1737_2 +# 1737| r1737_5(glval<CapturedLambdaMyObj &>) = 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<CapturedLambdaMyObj>) = FieldAddress[obj2] : r1737_2 +# 1737| r1737_8(glval<CapturedLambdaMyObj>) = VariableAddress[obj2] : +# 1737| r1737_9(CapturedLambdaMyObj) = Load[obj2] : &:r1737_8, ~m? +# 1737| mu1737_10(CapturedLambdaMyObj) = Store[?] : &:r1737_7, r1737_9 +# 1737| r1737_11(glval<int>) = FieldAddress[x] : r1737_2 +# 1737| r1737_12(glval<int>) = VariableAddress[x] : +# 1737| r1737_13(int) = Load[x] : &:r1737_12, ~m? +# 1737| mu1737_14(int) = Store[?] : &:r1737_11, r1737_13 +# 1737| r1737_15(glval<int>) = FieldAddress[y] : r1737_2 +# 1737| r1737_16(glval<int &>) = 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<int>) = FieldAddress[z] : r1737_2 +# 1737| r1737_19(glval<int &&>) = 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<unknown>) = VariableAddress[#this] : -# 1690| mu1690_5(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1690_4 -# 1690| r1690_6(glval<decltype([...](...){...})>) = Load[#this] : &:r1690_4, ~m? -# 1690| mu1690_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1690_6 -# 1691| r1691_1(glval<decltype([...](...){...})>) = VariableAddress[lambda_inner] : -# 1691| r1691_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1691:28] : -# 1691| mu1691_3(decltype([...](...){...})) = Uninitialized[#temp1691:28] : &:r1691_2 -# 1691| r1691_4(glval<CapturedLambdaMyObj>) = FieldAddress[obj1] : r1691_2 -# 1691| r1691_5(glval<unknown>) = VariableAddress[#this] : -# 1691| r1691_6(lambda [] type at line 1691, col. 29 *) = Load[#this] : &:r1691_5, ~m? -# 1691| r1691_7(glval<CapturedLambdaMyObj>) = 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<CapturedLambdaMyObj>) = FieldAddress[obj2] : r1691_2 -# 1691| r1691_11(glval<unknown>) = VariableAddress[#this] : -# 1691| r1691_12(lambda [] type at line 1691, col. 29 *) = Load[#this] : &:r1691_11, ~m? -# 1691| r1691_13(glval<CapturedLambdaMyObj>) = 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<int>) = FieldAddress[x] : r1691_2 -# 1691| r1691_17(glval<unknown>) = VariableAddress[#this] : -# 1691| r1691_18(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_17, ~m? -# 1691| r1691_19(glval<int>) = 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<int>) = FieldAddress[y] : r1691_2 -# 1691| r1691_23(glval<unknown>) = VariableAddress[#this] : -# 1691| r1691_24(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_23, ~m? -# 1691| r1691_25(glval<int>) = 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<int>) = FieldAddress[z] : r1691_2 -# 1691| r1691_29(glval<unknown>) = VariableAddress[#this] : -# 1691| r1691_30(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_29, ~m? -# 1691| r1691_31(glval<int>) = 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<unknown>) = VariableAddress[#this] : +# 1737| mu1737_5(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1737_4 +# 1737| r1737_6(glval<decltype([...](...){...})>) = Load[#this] : &:r1737_4, ~m? +# 1737| mu1737_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1737_6 +# 1738| r1738_1(glval<decltype([...](...){...})>) = VariableAddress[lambda_inner] : +# 1738| r1738_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1738:28] : +# 1738| mu1738_3(decltype([...](...){...})) = Uninitialized[#temp1738:28] : &:r1738_2 +# 1738| r1738_4(glval<CapturedLambdaMyObj>) = FieldAddress[obj1] : r1738_2 +# 1738| r1738_5(glval<unknown>) = VariableAddress[#this] : +# 1738| r1738_6(lambda [] type at line 1738, col. 29 *) = Load[#this] : &:r1738_5, ~m? +# 1738| r1738_7(glval<CapturedLambdaMyObj>) = 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<CapturedLambdaMyObj>) = FieldAddress[obj2] : r1738_2 +# 1738| r1738_11(glval<unknown>) = VariableAddress[#this] : +# 1738| r1738_12(lambda [] type at line 1738, col. 29 *) = Load[#this] : &:r1738_11, ~m? +# 1738| r1738_13(glval<CapturedLambdaMyObj>) = 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<int>) = FieldAddress[x] : r1738_2 +# 1738| r1738_17(glval<unknown>) = VariableAddress[#this] : +# 1738| r1738_18(lambda [] type at line 1737, col. 25 *) = Load[#this] : &:r1738_17, ~m? +# 1738| r1738_19(glval<int>) = 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<int>) = FieldAddress[y] : r1738_2 +# 1738| r1738_23(glval<unknown>) = VariableAddress[#this] : +# 1738| r1738_24(lambda [] type at line 1737, col. 25 *) = Load[#this] : &:r1738_23, ~m? +# 1738| r1738_25(glval<int>) = 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<int>) = FieldAddress[z] : r1738_2 +# 1738| r1738_29(glval<unknown>) = VariableAddress[#this] : +# 1738| r1738_30(lambda [] type at line 1737, col. 25 *) = Load[#this] : &:r1738_29, ~m? +# 1738| r1738_31(glval<int>) = 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<unknown>) = VariableAddress[#this] : -# 1691| mu1691_5(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1691_4 -# 1691| r1691_6(glval<decltype([...](...){...})>) = 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<int>) = 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<int>) = VariableAddress[#return] : -# 1698| r1698_2(glval<int>) = 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<int>) = 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<unknown>) = VariableAddress[#this] : -# 1703| mu1703_5(glval<TrivialLambdaClass>) = InitializeParameter[#this] : &:r1703_4 -# 1703| r1703_6(glval<TrivialLambdaClass>) = Load[#this] : &:r1703_4, ~m? -# 1703| mu1703_7(TrivialLambdaClass) = InitializeIndirection[#this] : &:r1703_6 -# 1704| r1704_1(glval<decltype([...](...){...})>) = VariableAddress[l_m_outer] : -# 1704| r1704_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1704:25] : -# 1704| mu1704_3(decltype([...](...){...})) = Uninitialized[#temp1704:25] : &:r1704_2 -# 1704| r1704_4(glval<TrivialLambdaClass>) = FieldAddress[(captured this)] : r1704_2 -# 1704| r1704_5(glval<unknown>) = 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<unknown>) = VariableAddress[#this] : -# 1704| mu1704_5(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1704_4 -# 1704| r1704_6(glval<decltype([...](...){...})>) = Load[#this] : &:r1704_4, ~m? -# 1704| mu1704_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1704_6 -# 1705| r1705_1(glval<unknown>) = VariableAddress[#this] : -# 1705| r1705_2(lambda [] type at line 1704, col. 26 *) = Load[#this] : &:r1705_1, ~m? -# 1705| r1705_3(glval<TrivialLambdaClass>) = FieldAddress[(captured this)] : r1705_2 -# 1705| r1705_4(TrivialLambdaClass *) = CopyValue : r1705_3 -# 1705| r1705_5(glval<unknown>) = 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<decltype([...](...){...})>) = VariableAddress[l_m_inner] : -# 1707| r1707_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1707:29] : -# 1707| mu1707_3(decltype([...](...){...})) = Uninitialized[#temp1707:29] : &:r1707_2 -# 1707| r1707_4(glval<TrivialLambdaClass>) = FieldAddress[(captured this)] : r1707_2 -# 1707| r1707_5(glval<unknown>) = VariableAddress[#this] : -# 1707| r1707_6(lambda [] type at line 1707, col. 30 *) = Load[#this] : &:r1707_5, ~m? -# 1707| r1707_7(glval<TrivialLambdaClass>) = 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<unknown>) = VariableAddress[#this] : -# 1707| mu1707_5(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1707_4 -# 1707| r1707_6(glval<decltype([...](...){...})>) = Load[#this] : &:r1707_4, ~m? -# 1707| mu1707_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1707_6 -# 1708| r1708_1(glval<unknown>) = VariableAddress[#this] : -# 1708| r1708_2(lambda [] type at line 1707, col. 30 *) = Load[#this] : &:r1708_1, ~m? -# 1708| r1708_3(glval<TrivialLambdaClass>) = FieldAddress[(captured this)] : r1708_2 -# 1708| r1708_4(TrivialLambdaClass *) = CopyValue : r1708_3 -# 1708| r1708_5(glval<unknown>) = 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<TrivialLambdaClass>) = VariableAddress[p1] : -# 1714| mu1714_5(TrivialLambdaClass) = InitializeParameter[p1] : &:r1714_4 -# 1714| r1714_6(glval<TrivialLambdaClass &>) = 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<TrivialLambdaClass &&>) = 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<TrivialLambdaClass>) = VariableAddress[l1] : -# 1715| mu1715_2(TrivialLambdaClass) = Uninitialized[l1] : &:r1715_1 -# 1716| r1716_1(glval<TrivialLambdaClass &>) = VariableAddress[l2] : -# 1716| r1716_2(glval<TrivialLambdaClass>) = VariableAddress[#temp1716:36] : -# 1716| r1716_3(TrivialLambdaClass) = Constant[0] : -# 1716| mu1716_4(TrivialLambdaClass) = Store[#temp1716:36] : &:r1716_2, r1716_3 -# 1716| r1716_5(glval<TrivialLambdaClass>) = Convert : r1716_2 -# 1716| r1716_6(TrivialLambdaClass &) = CopyValue : r1716_5 -# 1716| mu1716_7(TrivialLambdaClass &) = Store[l2] : &:r1716_1, r1716_6 -# 1718| r1718_1(glval<decltype([...](...){...})>) = VariableAddress[l_outer1] : -# 1718| r1718_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1718:20] : -# 1718| mu1718_3(decltype([...](...){...})) = Uninitialized[#temp1718:20] : &:r1718_2 -# 1718| r1718_4(glval<TrivialLambdaClass>) = FieldAddress[p1] : r1718_2 -# 1718| r1718_5(glval<TrivialLambdaClass>) = VariableAddress[p1] : -# 1718| r1718_6(TrivialLambdaClass) = Load[p1] : &:r1718_5, ~m? -# 1718| mu1718_7(TrivialLambdaClass) = Store[?] : &:r1718_4, r1718_6 -# 1718| r1718_8(glval<TrivialLambdaClass>) = FieldAddress[p2] : r1718_2 -# 1718| r1718_9(glval<TrivialLambdaClass &>) = 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<TrivialLambdaClass>) = FieldAddress[p3] : r1718_2 -# 1718| r1718_12(glval<TrivialLambdaClass &&>) = 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<TrivialLambdaClass>) = FieldAddress[l1] : r1718_2 -# 1718| r1718_15(glval<TrivialLambdaClass>) = VariableAddress[l1] : -# 1718| r1718_16(TrivialLambdaClass) = Load[l1] : &:r1718_15, ~m? -# 1718| mu1718_17(TrivialLambdaClass) = Store[?] : &:r1718_14, r1718_16 -# 1718| r1718_18(glval<TrivialLambdaClass>) = FieldAddress[l2] : r1718_2 -# 1718| r1718_19(glval<TrivialLambdaClass &>) = 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<unknown>) = VariableAddress[#this] : -# 1718| mu1718_5(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1718_4 -# 1718| r1718_6(glval<decltype([...](...){...})>) = Load[#this] : &:r1718_4, ~m? -# 1718| mu1718_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1718_6 -# 1719| r1719_1(glval<decltype([...](...){...})>) = VariableAddress[l_inner1] : -# 1719| r1719_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1719:24] : -# 1719| mu1719_3(decltype([...](...){...})) = Uninitialized[#temp1719:24] : &:r1719_2 -# 1719| r1719_4(glval<TrivialLambdaClass>) = FieldAddress[p1] : r1719_2 -# 1719| r1719_5(glval<unknown>) = VariableAddress[#this] : -# 1719| r1719_6(lambda [] type at line 1719, col. 25 *) = Load[#this] : &:r1719_5, ~m? -# 1719| r1719_7(glval<TrivialLambdaClass>) = 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<unknown>) = VariableAddress[#this] : -# 1719| mu1719_5(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1719_4 -# 1719| r1719_6(glval<decltype([...](...){...})>) = 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<unknown>) = VariableAddress[#this] : -# 1726| mu1726_5(glval<CopyConstructorWithImplicitArgumentClass>) = InitializeParameter[#this] : &:r1726_4 -# 1726| r1726_6(glval<CopyConstructorWithImplicitArgumentClass>) = 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<unknown>) = VariableAddress[#this] : -# 1727| mu1727_5(glval<CopyConstructorWithImplicitArgumentClass>) = InitializeParameter[#this] : &:r1727_4 -# 1727| r1727_6(glval<CopyConstructorWithImplicitArgumentClass>) = Load[#this] : &:r1727_4, ~m? -# 1727| mu1727_7(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1727_6 -# 1727| r1727_8(glval<CopyConstructorWithImplicitArgumentClass &>) = 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<CopyConstructorWithImplicitArgumentClass &>) = VariableAddress[c] : -# 1728| r1728_2(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1728_1, ~m? -# 1728| r1728_3(glval<CopyConstructorWithImplicitArgumentClass>) = CopyValue : r1728_2 -# 1728| r1728_4(glval<int>) = FieldAddress[x] : r1728_3 -# 1728| r1728_5(int) = Load[?] : &:r1728_4, ~m? -# 1728| r1728_6(glval<unknown>) = VariableAddress[#this] : -# 1728| r1728_7(CopyConstructorWithImplicitArgumentClass *) = Load[#this] : &:r1728_6, ~m? -# 1728| r1728_8(glval<int>) = 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<unknown>) = VariableAddress[#this] : -# 1735| mu1735_5(glval<CopyConstructorWithBitwiseCopyClass>) = InitializeParameter[#this] : &:r1735_4 -# 1735| r1735_6(glval<CopyConstructorWithBitwiseCopyClass>) = 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<unknown>) = VariableAddress[#this] : -# 1738| mu1738_5(glval<CopyConstructorTestNonVirtualClass>) = InitializeParameter[#this] : &:r1738_4 -# 1738| r1738_6(glval<CopyConstructorTestNonVirtualClass>) = 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<unknown>) = VariableAddress[#this] : +# 1738| mu1738_5(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1738_4 +# 1738| r1738_6(glval<decltype([...](...){...})>) = 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<int>) = 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<int>) = VariableAddress[#return] : +# 1745| r1745_2(glval<int>) = 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<int>) = 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<unknown>) = VariableAddress[#this] : +# 1750| mu1750_5(glval<TrivialLambdaClass>) = InitializeParameter[#this] : &:r1750_4 +# 1750| r1750_6(glval<TrivialLambdaClass>) = Load[#this] : &:r1750_4, ~m? +# 1750| mu1750_7(TrivialLambdaClass) = InitializeIndirection[#this] : &:r1750_6 +# 1751| r1751_1(glval<decltype([...](...){...})>) = VariableAddress[l_m_outer] : +# 1751| r1751_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1751:25] : +# 1751| mu1751_3(decltype([...](...){...})) = Uninitialized[#temp1751:25] : &:r1751_2 +# 1751| r1751_4(glval<TrivialLambdaClass>) = FieldAddress[(captured this)] : r1751_2 +# 1751| r1751_5(glval<unknown>) = 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<unknown>) = VariableAddress[#this] : +# 1751| mu1751_5(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1751_4 +# 1751| r1751_6(glval<decltype([...](...){...})>) = Load[#this] : &:r1751_4, ~m? +# 1751| mu1751_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1751_6 +# 1752| r1752_1(glval<unknown>) = VariableAddress[#this] : +# 1752| r1752_2(lambda [] type at line 1751, col. 26 *) = Load[#this] : &:r1752_1, ~m? +# 1752| r1752_3(glval<TrivialLambdaClass>) = FieldAddress[(captured this)] : r1752_2 +# 1752| r1752_4(TrivialLambdaClass *) = CopyValue : r1752_3 +# 1752| r1752_5(glval<unknown>) = 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<decltype([...](...){...})>) = VariableAddress[l_m_inner] : +# 1754| r1754_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1754:29] : +# 1754| mu1754_3(decltype([...](...){...})) = Uninitialized[#temp1754:29] : &:r1754_2 +# 1754| r1754_4(glval<TrivialLambdaClass>) = FieldAddress[(captured this)] : r1754_2 +# 1754| r1754_5(glval<unknown>) = VariableAddress[#this] : +# 1754| r1754_6(lambda [] type at line 1754, col. 30 *) = Load[#this] : &:r1754_5, ~m? +# 1754| r1754_7(glval<TrivialLambdaClass>) = 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<unknown>) = VariableAddress[#this] : +# 1754| mu1754_5(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1754_4 +# 1754| r1754_6(glval<decltype([...](...){...})>) = Load[#this] : &:r1754_4, ~m? +# 1754| mu1754_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1754_6 +# 1755| r1755_1(glval<unknown>) = VariableAddress[#this] : +# 1755| r1755_2(lambda [] type at line 1754, col. 30 *) = Load[#this] : &:r1755_1, ~m? +# 1755| r1755_3(glval<TrivialLambdaClass>) = FieldAddress[(captured this)] : r1755_2 +# 1755| r1755_4(TrivialLambdaClass *) = CopyValue : r1755_3 +# 1755| r1755_5(glval<unknown>) = 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<TrivialLambdaClass>) = VariableAddress[p1] : +# 1761| mu1761_5(TrivialLambdaClass) = InitializeParameter[p1] : &:r1761_4 +# 1761| r1761_6(glval<TrivialLambdaClass &>) = 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<TrivialLambdaClass &&>) = 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<TrivialLambdaClass>) = VariableAddress[l1] : +# 1762| mu1762_2(TrivialLambdaClass) = Uninitialized[l1] : &:r1762_1 +# 1763| r1763_1(glval<TrivialLambdaClass &>) = VariableAddress[l2] : +# 1763| r1763_2(glval<TrivialLambdaClass>) = VariableAddress[#temp1763:36] : +# 1763| r1763_3(TrivialLambdaClass) = Constant[0] : +# 1763| mu1763_4(TrivialLambdaClass) = Store[#temp1763:36] : &:r1763_2, r1763_3 +# 1763| r1763_5(glval<TrivialLambdaClass>) = Convert : r1763_2 +# 1763| r1763_6(TrivialLambdaClass &) = CopyValue : r1763_5 +# 1763| mu1763_7(TrivialLambdaClass &) = Store[l2] : &:r1763_1, r1763_6 +# 1765| r1765_1(glval<decltype([...](...){...})>) = VariableAddress[l_outer1] : +# 1765| r1765_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1765:20] : +# 1765| mu1765_3(decltype([...](...){...})) = Uninitialized[#temp1765:20] : &:r1765_2 +# 1765| r1765_4(glval<TrivialLambdaClass>) = FieldAddress[p1] : r1765_2 +# 1765| r1765_5(glval<TrivialLambdaClass>) = VariableAddress[p1] : +# 1765| r1765_6(TrivialLambdaClass) = Load[p1] : &:r1765_5, ~m? +# 1765| mu1765_7(TrivialLambdaClass) = Store[?] : &:r1765_4, r1765_6 +# 1765| r1765_8(glval<TrivialLambdaClass>) = FieldAddress[p2] : r1765_2 +# 1765| r1765_9(glval<TrivialLambdaClass &>) = 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<TrivialLambdaClass>) = FieldAddress[p3] : r1765_2 +# 1765| r1765_12(glval<TrivialLambdaClass &&>) = 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<TrivialLambdaClass>) = FieldAddress[l1] : r1765_2 +# 1765| r1765_15(glval<TrivialLambdaClass>) = VariableAddress[l1] : +# 1765| r1765_16(TrivialLambdaClass) = Load[l1] : &:r1765_15, ~m? +# 1765| mu1765_17(TrivialLambdaClass) = Store[?] : &:r1765_14, r1765_16 +# 1765| r1765_18(glval<TrivialLambdaClass>) = FieldAddress[l2] : r1765_2 +# 1765| r1765_19(glval<TrivialLambdaClass &>) = 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<unknown>) = VariableAddress[#this] : +# 1765| mu1765_5(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1765_4 +# 1765| r1765_6(glval<decltype([...](...){...})>) = Load[#this] : &:r1765_4, ~m? +# 1765| mu1765_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1765_6 +# 1766| r1766_1(glval<decltype([...](...){...})>) = VariableAddress[l_inner1] : +# 1766| r1766_2(glval<decltype([...](...){...})>) = VariableAddress[#temp1766:24] : +# 1766| mu1766_3(decltype([...](...){...})) = Uninitialized[#temp1766:24] : &:r1766_2 +# 1766| r1766_4(glval<TrivialLambdaClass>) = FieldAddress[p1] : r1766_2 +# 1766| r1766_5(glval<unknown>) = VariableAddress[#this] : +# 1766| r1766_6(lambda [] type at line 1766, col. 25 *) = Load[#this] : &:r1766_5, ~m? +# 1766| r1766_7(glval<TrivialLambdaClass>) = 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<unknown>) = VariableAddress[#this] : +# 1766| mu1766_5(glval<decltype([...](...){...})>) = InitializeParameter[#this] : &:r1766_4 +# 1766| r1766_6(glval<decltype([...](...){...})>) = 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<unknown>) = VariableAddress[#this] : +# 1773| mu1773_5(glval<CopyConstructorWithImplicitArgumentClass>) = InitializeParameter[#this] : &:r1773_4 +# 1773| r1773_6(glval<CopyConstructorWithImplicitArgumentClass>) = 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<unknown>) = VariableAddress[#this] : +# 1774| mu1774_5(glval<CopyConstructorWithImplicitArgumentClass>) = InitializeParameter[#this] : &:r1774_4 +# 1774| r1774_6(glval<CopyConstructorWithImplicitArgumentClass>) = Load[#this] : &:r1774_4, ~m? +# 1774| mu1774_7(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1774_6 +# 1774| r1774_8(glval<CopyConstructorWithImplicitArgumentClass &>) = 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<CopyConstructorWithImplicitArgumentClass &>) = VariableAddress[c] : +# 1775| r1775_2(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1775_1, ~m? +# 1775| r1775_3(glval<CopyConstructorWithImplicitArgumentClass>) = CopyValue : r1775_2 +# 1775| r1775_4(glval<int>) = FieldAddress[x] : r1775_3 +# 1775| r1775_5(int) = Load[?] : &:r1775_4, ~m? +# 1775| r1775_6(glval<unknown>) = VariableAddress[#this] : +# 1775| r1775_7(CopyConstructorWithImplicitArgumentClass *) = Load[#this] : &:r1775_6, ~m? +# 1775| r1775_8(glval<int>) = 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<unknown>) = VariableAddress[#this] : +# 1782| mu1782_5(glval<CopyConstructorWithBitwiseCopyClass>) = InitializeParameter[#this] : &:r1782_4 +# 1782| r1782_6(glval<CopyConstructorWithBitwiseCopyClass>) = 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<unknown>) = VariableAddress[#this] : +# 1785| mu1785_5(glval<CopyConstructorTestNonVirtualClass>) = InitializeParameter[#this] : &:r1785_4 +# 1785| r1785_6(glval<CopyConstructorTestNonVirtualClass>) = Load[#this] : &:r1785_4, ~m? +# 1785| mu1785_7(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1785_6 #-----| r0_1(glval<CopyConstructorTestNonVirtualClass &>) = 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<CopyConstructorWithImplicitArgumentClass>) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1738_5 -# 1738| r1738_9(glval<unknown>) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1738| r1738_10(glval<CopyConstructorTestNonVirtualClass &>) = VariableAddress[(unnamed parameter 0)] : -# 1738| r1738_11(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r1738_10, ~m? -# 1738| r1738_12(glval<CopyConstructorTestNonVirtualClass>) = CopyValue : r1738_11 -# 1738| r1738_13(glval<CopyConstructorWithImplicitArgumentClass>) = 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<CopyConstructorWithImplicitArgumentClass>) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1785_5 +# 1785| r1785_9(glval<unknown>) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1785| r1785_10(glval<CopyConstructorTestNonVirtualClass &>) = VariableAddress[(unnamed parameter 0)] : +# 1785| r1785_11(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r1785_10, ~m? +# 1785| r1785_12(glval<CopyConstructorTestNonVirtualClass>) = CopyValue : r1785_11 +# 1785| r1785_13(glval<CopyConstructorWithImplicitArgumentClass>) = 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<unknown>) = VariableAddress[#this] : -# 1742| mu1742_5(glval<CopyConstructorTestNonVirtualClass>) = InitializeParameter[#this] : &:r1742_4 -# 1742| r1742_6(glval<CopyConstructorTestNonVirtualClass>) = Load[#this] : &:r1742_4, ~m? -# 1742| mu1742_7(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1742_6 -# 1742| r1742_8(glval<CopyConstructorWithImplicitArgumentClass>) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1742_5 -# 1742| r1742_9(glval<unknown>) = 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<CopyConstructorWithBitwiseCopyClass>) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithBitwiseCopyClass] : mu1742_5 -# 1742| r1742_14(glval<unknown>) = 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<unknown>) = VariableAddress[#this] : +# 1789| mu1789_5(glval<CopyConstructorTestNonVirtualClass>) = InitializeParameter[#this] : &:r1789_4 +# 1789| r1789_6(glval<CopyConstructorTestNonVirtualClass>) = Load[#this] : &:r1789_4, ~m? +# 1789| mu1789_7(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1789_6 +# 1789| r1789_8(glval<CopyConstructorWithImplicitArgumentClass>) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1789_5 +# 1789| r1789_9(glval<unknown>) = 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<CopyConstructorWithBitwiseCopyClass>) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithBitwiseCopyClass] : mu1789_5 +# 1789| r1789_14(glval<unknown>) = 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<unknown>) = VariableAddress[#this] : -# 1745| mu1745_5(glval<CopyConstructorTestVirtualClass>) = InitializeParameter[#this] : &:r1745_4 -# 1745| r1745_6(glval<CopyConstructorTestVirtualClass>) = 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<unknown>) = VariableAddress[#this] : +# 1792| mu1792_5(glval<CopyConstructorTestVirtualClass>) = InitializeParameter[#this] : &:r1792_4 +# 1792| r1792_6(glval<CopyConstructorTestVirtualClass>) = Load[#this] : &:r1792_4, ~m? +# 1792| mu1792_7(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1792_6 #-----| r0_1(glval<CopyConstructorTestVirtualClass &>) = 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<CopyConstructorWithImplicitArgumentClass>) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1745_5 -# 1745| r1745_9(glval<unknown>) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1745| r1745_10(glval<CopyConstructorTestVirtualClass &>) = VariableAddress[(unnamed parameter 0)] : -# 1745| r1745_11(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r1745_10, ~m? -# 1745| r1745_12(glval<CopyConstructorTestVirtualClass>) = CopyValue : r1745_11 -# 1745| r1745_13(glval<CopyConstructorWithImplicitArgumentClass>) = 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<CopyConstructorWithImplicitArgumentClass>) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1792_5 +# 1792| r1792_9(glval<unknown>) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1792| r1792_10(glval<CopyConstructorTestVirtualClass &>) = VariableAddress[(unnamed parameter 0)] : +# 1792| r1792_11(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r1792_10, ~m? +# 1792| r1792_12(glval<CopyConstructorTestVirtualClass>) = CopyValue : r1792_11 +# 1792| r1792_13(glval<CopyConstructorWithImplicitArgumentClass>) = 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<unknown>) = VariableAddress[#this] : -# 1749| mu1749_5(glval<CopyConstructorTestVirtualClass>) = InitializeParameter[#this] : &:r1749_4 -# 1749| r1749_6(glval<CopyConstructorTestVirtualClass>) = Load[#this] : &:r1749_4, ~m? -# 1749| mu1749_7(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1749_6 -# 1749| r1749_8(glval<CopyConstructorWithImplicitArgumentClass>) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1749_5 -# 1749| r1749_9(glval<unknown>) = 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<CopyConstructorWithBitwiseCopyClass>) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithBitwiseCopyClass] : mu1749_5 -# 1749| r1749_14(glval<unknown>) = 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<unknown>) = VariableAddress[#this] : +# 1796| mu1796_5(glval<CopyConstructorTestVirtualClass>) = InitializeParameter[#this] : &:r1796_4 +# 1796| r1796_6(glval<CopyConstructorTestVirtualClass>) = Load[#this] : &:r1796_4, ~m? +# 1796| mu1796_7(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1796_6 +# 1796| r1796_8(glval<CopyConstructorWithImplicitArgumentClass>) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1796_5 +# 1796| r1796_9(glval<unknown>) = 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<CopyConstructorWithBitwiseCopyClass>) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithBitwiseCopyClass] : mu1796_5 +# 1796| r1796_14(glval<unknown>) = 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<CopyConstructorTestNonVirtualClass &>) = 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<CopyConstructorTestVirtualClass &>) = 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<CopyConstructorTestNonVirtualClass>) = VariableAddress[cx] : -# 1755| mu1755_2(CopyConstructorTestNonVirtualClass) = Uninitialized[cx] : &:r1755_1 -# 1755| r1755_3(glval<unknown>) = FunctionAddress[CopyConstructorTestNonVirtualClass] : -# 1755| r1755_4(glval<CopyConstructorTestNonVirtualClass &>) = VariableAddress[x] : -# 1755| r1755_5(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1755_4, ~m? -# 1755| r1755_6(glval<CopyConstructorTestNonVirtualClass>) = 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<CopyConstructorTestVirtualClass>) = VariableAddress[cy] : -# 1756| mu1756_2(CopyConstructorTestVirtualClass) = Uninitialized[cy] : &:r1756_1 -# 1756| r1756_3(glval<unknown>) = FunctionAddress[CopyConstructorTestVirtualClass] : -# 1756| r1756_4(glval<CopyConstructorTestVirtualClass &>) = VariableAddress[y] : -# 1756| r1756_5(CopyConstructorTestVirtualClass &) = Load[y] : &:r1756_4, ~m? -# 1756| r1756_6(glval<CopyConstructorTestVirtualClass>) = 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<int>) = 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<int>) = 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<CopyConstructorTestNonVirtualClass &>) = 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<CopyConstructorTestVirtualClass &>) = 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<CopyConstructorTestNonVirtualClass>) = VariableAddress[cx] : +# 1802| mu1802_2(CopyConstructorTestNonVirtualClass) = Uninitialized[cx] : &:r1802_1 +# 1802| r1802_3(glval<unknown>) = FunctionAddress[CopyConstructorTestNonVirtualClass] : +# 1802| r1802_4(glval<CopyConstructorTestNonVirtualClass &>) = VariableAddress[x] : +# 1802| r1802_5(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1802_4, ~m? +# 1802| r1802_6(glval<CopyConstructorTestNonVirtualClass>) = 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<CopyConstructorTestVirtualClass>) = VariableAddress[cy] : +# 1803| mu1803_2(CopyConstructorTestVirtualClass) = Uninitialized[cy] : &:r1803_1 +# 1803| r1803_3(glval<unknown>) = FunctionAddress[CopyConstructorTestVirtualClass] : +# 1803| r1803_4(glval<CopyConstructorTestVirtualClass &>) = VariableAddress[y] : +# 1803| r1803_5(CopyConstructorTestVirtualClass &) = Load[y] : &:r1803_4, ~m? +# 1803| r1803_6(glval<CopyConstructorTestVirtualClass>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1759| mu1759_5(int) = InitializeParameter[x] : &:r1759_4 -# 1760| r1760_1(glval<int>) = VariableAddress[y] : -# 1760| r1760_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : +# 1806| mu1806_5(int) = InitializeParameter[x] : &:r1806_4 +# 1807| r1807_1(glval<int>) = VariableAddress[y] : +# 1807| r1807_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1761| r1761_2(int) = Load[x] : &:r1761_1, ~m? -# 1761| r1761_3(glval<int>) = VariableAddress[y] : -# 1761| r1761_4(int) = Load[y] : &:r1761_3, ~m? -# 1761| r1761_5(int) = Add : r1761_2, r1761_4 -# 1761| r1761_6(glval<int>) = VariableAddress[x] : -# 1761| mu1761_7(int) = Store[x] : &:r1761_6, r1761_5 +# 1808| Block 1 +# 1808| r1808_1(glval<int>) = VariableAddress[x] : +# 1808| r1808_2(int) = Load[x] : &:r1808_1, ~m? +# 1808| r1808_3(glval<int>) = VariableAddress[y] : +# 1808| r1808_4(int) = Load[y] : &:r1808_3, ~m? +# 1808| r1808_5(int) = Add : r1808_2, r1808_4 +# 1808| r1808_6(glval<int>) = VariableAddress[x] : +# 1808| mu1808_7(int) = Store[x] : &:r1808_6, r1808_5 #-----| Goto -> Block 2 -# 1764| Block 2 -# 1764| r1764_1(glval<int>) = VariableAddress[w] : -# 1764| mu1764_2(int) = Uninitialized[w] : &:r1764_1 -# 1765| r1765_1(glval<int>) = VariableAddress[x] : -# 1765| r1765_2(int) = Load[x] : &:r1765_1, ~m? -# 1765| r1765_3(glval<int>) = VariableAddress[w] : -# 1765| mu1765_4(int) = Store[w] : &:r1765_3, r1765_2 -# 1765| r1765_5(glval<int>) = 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<int>) = VariableAddress[w] : +# 1811| mu1811_2(int) = Uninitialized[w] : &:r1811_1 +# 1812| r1812_1(glval<int>) = VariableAddress[x] : +# 1812| r1812_2(int) = Load[x] : &:r1812_1, ~m? +# 1812| r1812_3(glval<int>) = VariableAddress[w] : +# 1812| mu1812_4(int) = Store[w] : &:r1812_3, r1812_2 +# 1812| r1812_5(glval<int>) = 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<int>) = VariableAddress[x] : -# 1766| r1766_2(int) = Load[x] : &:r1766_1, ~m? -# 1766| r1766_3(glval<int>) = VariableAddress[w] : -# 1766| r1766_4(int) = Load[w] : &:r1766_3, ~m? -# 1766| r1766_5(int) = Add : r1766_2, r1766_4 -# 1766| r1766_6(glval<int>) = VariableAddress[x] : -# 1766| mu1766_7(int) = Store[x] : &:r1766_6, r1766_5 +# 1813| Block 3 +# 1813| r1813_1(glval<int>) = VariableAddress[x] : +# 1813| r1813_2(int) = Load[x] : &:r1813_1, ~m? +# 1813| r1813_3(glval<int>) = VariableAddress[w] : +# 1813| r1813_4(int) = Load[w] : &:r1813_3, ~m? +# 1813| r1813_5(int) = Add : r1813_2, r1813_4 +# 1813| r1813_6(glval<int>) = VariableAddress[x] : +# 1813| mu1813_7(int) = Store[x] : &:r1813_6, r1813_5 #-----| Goto -> Block 4 -# 1769| Block 4 -# 1769| r1769_1(glval<int>) = VariableAddress[x] : -# 1769| r1769_2(int) = Load[x] : &:r1769_1, ~m? -# 1769| r1769_3(glval<int>) = VariableAddress[w] : -# 1769| mu1769_4(int) = Store[w] : &:r1769_3, r1769_2 -# 1769| r1769_5(glval<int>) = VariableAddress[w2] : -# 1769| r1769_6(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : +# 1816| r1816_2(int) = Load[x] : &:r1816_1, ~m? +# 1816| r1816_3(glval<int>) = VariableAddress[w] : +# 1816| mu1816_4(int) = Store[w] : &:r1816_3, r1816_2 +# 1816| r1816_5(glval<int>) = VariableAddress[w2] : +# 1816| r1816_6(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1770| r1770_2(int) = Load[x] : &:r1770_1, ~m? -# 1770| r1770_3(glval<int>) = VariableAddress[w] : -# 1770| r1770_4(int) = Load[w] : &:r1770_3, ~m? -# 1770| r1770_5(int) = Add : r1770_2, r1770_4 -# 1770| r1770_6(glval<int>) = VariableAddress[x] : -# 1770| mu1770_7(int) = Store[x] : &:r1770_6, r1770_5 +# 1817| Block 5 +# 1817| r1817_1(glval<int>) = VariableAddress[x] : +# 1817| r1817_2(int) = Load[x] : &:r1817_1, ~m? +# 1817| r1817_3(glval<int>) = VariableAddress[w] : +# 1817| r1817_4(int) = Load[w] : &:r1817_3, ~m? +# 1817| r1817_5(int) = Add : r1817_2, r1817_4 +# 1817| r1817_6(glval<int>) = VariableAddress[x] : +# 1817| mu1817_7(int) = Store[x] : &:r1817_6, r1817_5 #-----| Goto -> Block 6 -# 1773| Block 6 -# 1773| r1773_1(glval<int>) = VariableAddress[v] : -# 1773| r1773_2(glval<int>) = 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<int>) = VariableAddress[v2] : -# 1773| r1773_6(glval<int>) = 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<int>) = 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<int>) = VariableAddress[v] : +# 1820| r1820_2(glval<int>) = 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<int>) = VariableAddress[v2] : +# 1820| r1820_6(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1774| r1774_2(int) = Load[x] : &:r1774_1, ~m? -# 1774| r1774_3(glval<int>) = VariableAddress[v] : -# 1774| r1774_4(int) = Load[v] : &:r1774_3, ~m? -# 1774| r1774_5(int) = Add : r1774_2, r1774_4 -# 1774| r1774_6(glval<int>) = VariableAddress[x] : -# 1774| mu1774_7(int) = Store[x] : &:r1774_6, r1774_5 +# 1821| Block 7 +# 1821| r1821_1(glval<int>) = VariableAddress[x] : +# 1821| r1821_2(int) = Load[x] : &:r1821_1, ~m? +# 1821| r1821_3(glval<int>) = VariableAddress[v] : +# 1821| r1821_4(int) = Load[v] : &:r1821_3, ~m? +# 1821| r1821_5(int) = Add : r1821_2, r1821_4 +# 1821| r1821_6(glval<int>) = VariableAddress[x] : +# 1821| mu1821_7(int) = Store[x] : &:r1821_6, r1821_5 #-----| Goto -> Block 8 -# 1777| Block 8 -# 1777| r1777_1(glval<int>) = VariableAddress[z] : -# 1777| r1777_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[z] : +# 1824| r1824_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1779| r1779_2(int) = Load[x] : &:r1779_1, ~m? -# 1779| r1779_3(glval<int>) = VariableAddress[z] : -# 1779| r1779_4(int) = Load[z] : &:r1779_3, ~m? -# 1779| r1779_5(int) = Add : r1779_2, r1779_4 -# 1779| r1779_6(glval<int>) = VariableAddress[x] : -# 1779| mu1779_7(int) = Store[x] : &:r1779_6, r1779_5 +# 1826| Block 9 +# 1826| r1826_1(glval<int>) = VariableAddress[x] : +# 1826| r1826_2(int) = Load[x] : &:r1826_1, ~m? +# 1826| r1826_3(glval<int>) = VariableAddress[z] : +# 1826| r1826_4(int) = Load[z] : &:r1826_3, ~m? +# 1826| r1826_5(int) = Add : r1826_2, r1826_4 +# 1826| r1826_6(glval<int>) = VariableAddress[x] : +# 1826| mu1826_7(int) = Store[x] : &:r1826_6, r1826_5 #-----| Goto -> Block 10 -# 1782| Block 10 -# 1782| r1782_1(glval<int>) = VariableAddress[z2] : -# 1782| r1782_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[z2] : +# 1829| r1829_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[z2] : -# 1783| r1783_2(int) = Load[z2] : &:r1783_1, ~m? -# 1783| r1783_3(glval<int>) = 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<int>) = VariableAddress[z2] : +# 1830| r1830_2(int) = Load[z2] : &:r1830_1, ~m? +# 1830| r1830_3(glval<int>) = 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<int>) = VariableAddress[x] : -# 1787| mu1787_5(int) = InitializeParameter[x] : &:r1787_4 -# 1788| r1788_1(glval<int>) = VariableAddress[y] : -# 1788| r1788_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : +# 1834| mu1834_5(int) = InitializeParameter[x] : &:r1834_4 +# 1835| r1835_1(glval<int>) = VariableAddress[y] : +# 1835| r1835_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1790| r1790_2(int) = Load[x] : &:r1790_1, ~m? -# 1790| r1790_3(glval<int>) = VariableAddress[y] : -# 1790| r1790_4(int) = Load[y] : &:r1790_3, ~m? -# 1790| r1790_5(int) = Add : r1790_2, r1790_4 -# 1790| r1790_6(glval<int>) = VariableAddress[x] : -# 1790| mu1790_7(int) = Store[x] : &:r1790_6, r1790_5 -# 1793| r1793_1(glval<int>) = VariableAddress[w] : -# 1793| mu1793_2(int) = Uninitialized[w] : &:r1793_1 -# 1794| r1794_1(glval<int>) = VariableAddress[x] : -# 1794| r1794_2(int) = Load[x] : &:r1794_1, ~m? -# 1794| r1794_3(glval<int>) = VariableAddress[w] : -# 1794| mu1794_4(int) = Store[w] : &:r1794_3, r1794_2 -# 1794| r1794_5(glval<int>) = 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<int>) = VariableAddress[x] : +# 1837| r1837_2(int) = Load[x] : &:r1837_1, ~m? +# 1837| r1837_3(glval<int>) = VariableAddress[y] : +# 1837| r1837_4(int) = Load[y] : &:r1837_3, ~m? +# 1837| r1837_5(int) = Add : r1837_2, r1837_4 +# 1837| r1837_6(glval<int>) = VariableAddress[x] : +# 1837| mu1837_7(int) = Store[x] : &:r1837_6, r1837_5 +# 1840| r1840_1(glval<int>) = VariableAddress[w] : +# 1840| mu1840_2(int) = Uninitialized[w] : &:r1840_1 +# 1841| r1841_1(glval<int>) = VariableAddress[x] : +# 1841| r1841_2(int) = Load[x] : &:r1841_1, ~m? +# 1841| r1841_3(glval<int>) = VariableAddress[w] : +# 1841| mu1841_4(int) = Store[w] : &:r1841_3, r1841_2 +# 1841| r1841_5(glval<int>) = 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<int>) = VariableAddress[x] : -# 1796| r1796_2(int) = Load[x] : &:r1796_1, ~m? -# 1796| r1796_3(glval<int>) = VariableAddress[w] : -# 1796| r1796_4(int) = Load[w] : &:r1796_3, ~m? -# 1796| r1796_5(int) = Add : r1796_2, r1796_4 -# 1796| r1796_6(glval<int>) = VariableAddress[x] : -# 1796| mu1796_7(int) = Store[x] : &:r1796_6, r1796_5 -# 1799| r1799_1(glval<int>) = VariableAddress[x] : -# 1799| r1799_2(int) = Load[x] : &:r1799_1, ~m? -# 1799| r1799_3(glval<int>) = VariableAddress[w] : -# 1799| mu1799_4(int) = Store[w] : &:r1799_3, r1799_2 -# 1799| r1799_5(glval<int>) = VariableAddress[w2] : -# 1799| r1799_6(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : +# 1843| r1843_2(int) = Load[x] : &:r1843_1, ~m? +# 1843| r1843_3(glval<int>) = VariableAddress[w] : +# 1843| r1843_4(int) = Load[w] : &:r1843_3, ~m? +# 1843| r1843_5(int) = Add : r1843_2, r1843_4 +# 1843| r1843_6(glval<int>) = VariableAddress[x] : +# 1843| mu1843_7(int) = Store[x] : &:r1843_6, r1843_5 +# 1846| r1846_1(glval<int>) = VariableAddress[x] : +# 1846| r1846_2(int) = Load[x] : &:r1846_1, ~m? +# 1846| r1846_3(glval<int>) = VariableAddress[w] : +# 1846| mu1846_4(int) = Store[w] : &:r1846_3, r1846_2 +# 1846| r1846_5(glval<int>) = VariableAddress[w2] : +# 1846| r1846_6(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1801| r1801_2(int) = Load[x] : &:r1801_1, ~m? -# 1801| r1801_3(glval<int>) = VariableAddress[w] : -# 1801| r1801_4(int) = Load[w] : &:r1801_3, ~m? -# 1801| r1801_5(int) = Add : r1801_2, r1801_4 -# 1801| r1801_6(glval<int>) = VariableAddress[x] : -# 1801| mu1801_7(int) = Store[x] : &:r1801_6, r1801_5 -# 1804| r1804_1(glval<int>) = VariableAddress[v] : -# 1804| r1804_2(glval<int>) = 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<int>) = VariableAddress[v2] : -# 1804| r1804_6(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : +# 1848| r1848_2(int) = Load[x] : &:r1848_1, ~m? +# 1848| r1848_3(glval<int>) = VariableAddress[w] : +# 1848| r1848_4(int) = Load[w] : &:r1848_3, ~m? +# 1848| r1848_5(int) = Add : r1848_2, r1848_4 +# 1848| r1848_6(glval<int>) = VariableAddress[x] : +# 1848| mu1848_7(int) = Store[x] : &:r1848_6, r1848_5 +# 1851| r1851_1(glval<int>) = VariableAddress[v] : +# 1851| r1851_2(glval<int>) = 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<int>) = VariableAddress[v2] : +# 1851| r1851_6(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1806| r1806_2(int) = Load[x] : &:r1806_1, ~m? -# 1806| r1806_3(glval<int>) = VariableAddress[v] : -# 1806| r1806_4(int) = Load[v] : &:r1806_3, ~m? -# 1806| r1806_5(int) = Add : r1806_2, r1806_4 -# 1806| r1806_6(glval<int>) = VariableAddress[x] : -# 1806| mu1806_7(int) = Store[x] : &:r1806_6, r1806_5 -# 1809| r1809_1(glval<int>) = VariableAddress[z] : -# 1809| r1809_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : +# 1853| r1853_2(int) = Load[x] : &:r1853_1, ~m? +# 1853| r1853_3(glval<int>) = VariableAddress[v] : +# 1853| r1853_4(int) = Load[v] : &:r1853_3, ~m? +# 1853| r1853_5(int) = Add : r1853_2, r1853_4 +# 1853| r1853_6(glval<int>) = VariableAddress[x] : +# 1853| mu1853_7(int) = Store[x] : &:r1853_6, r1853_5 +# 1856| r1856_1(glval<int>) = VariableAddress[z] : +# 1856| r1856_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1812| r1812_2(int) = Load[x] : &:r1812_1, ~m? -# 1812| r1812_3(glval<int>) = VariableAddress[z] : -# 1812| r1812_4(int) = Load[z] : &:r1812_3, ~m? -# 1812| r1812_5(int) = Add : r1812_2, r1812_4 -# 1812| r1812_6(glval<int>) = VariableAddress[x] : -# 1812| mu1812_7(int) = Store[x] : &:r1812_6, r1812_5 -# 1815| r1815_1(glval<int>) = VariableAddress[z2] : -# 1815| r1815_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : +# 1859| r1859_2(int) = Load[x] : &:r1859_1, ~m? +# 1859| r1859_3(glval<int>) = VariableAddress[z] : +# 1859| r1859_4(int) = Load[z] : &:r1859_3, ~m? +# 1859| r1859_5(int) = Add : r1859_2, r1859_4 +# 1859| r1859_6(glval<int>) = VariableAddress[x] : +# 1859| mu1859_7(int) = Store[x] : &:r1859_6, r1859_5 +# 1862| r1862_1(glval<int>) = VariableAddress[z2] : +# 1862| r1862_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[z2] : -# 1817| r1817_2(int) = Load[z2] : &:r1817_1, ~m? -# 1817| r1817_3(glval<int>) = 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<int>) = VariableAddress[z2] : +# 1864| r1864_2(int) = Load[z2] : &:r1864_1, ~m? +# 1864| r1864_3(glval<int>) = 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<int>) = 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<int>) = 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<constructor_only>) = VariableAddress[global_4] : -# 1827| r1827_4(glval<unknown>) = 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<constructor_only>) = VariableAddress[global_4] : +# 1874| r1874_4(glval<unknown>) = 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<constructor_only>) = VariableAddress[global_5] : -# 1829| r1829_4(glval<unknown>) = 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<constructor_only>) = VariableAddress[global_5] : +# 1876| r1876_4(glval<unknown>) = 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<char *>) = VariableAddress[global_string] : -# 1831| r1831_4(glval<char[14]>) = 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<char *>) = VariableAddress[global_string] : +# 1878| r1878_4(glval<char[14]>) = 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<int>) = VariableAddress[global_6] : -# 1833| r1833_4(glval<int>) = 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<int>) = VariableAddress[global_6] : +# 1880| r1880_4(glval<int>) = 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<unknown>) = VariableAddress[#this] : -# 1836| mu1836_5(glval<A>) = InitializeParameter[#this] : &:r1836_4 -# 1836| r1836_6(glval<A>) = 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<unknown>) = VariableAddress[#this] : +# 1883| mu1883_5(glval<A>) = InitializeParameter[#this] : &:r1883_4 +# 1883| r1883_6(glval<A>) = Load[#this] : &:r1883_4, ~m? +# 1883| mu1883_7(A) = InitializeIndirection[#this] : &:r1883_6 #-----| r0_1(glval<A &&>) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(A &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(A &&) = Load[(unnamed parameter 0)] : &:r0_1, ~m? @@ -10555,896 +10573,896 @@ ir.cpp: #-----| r0_17(glval<A>) = 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<A &>) = 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<A &>) = 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<unknown>) = VariableAddress[#this] : -# 1841| mu1841_5(glval<B>) = InitializeParameter[#this] : &:r1841_4 -# 1841| r1841_6(glval<B>) = 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<unknown>) = VariableAddress[#this] : +# 1888| mu1888_5(glval<B>) = InitializeParameter[#this] : &:r1888_4 +# 1888| r1888_6(glval<B>) = Load[#this] : &:r1888_4, ~m? +# 1888| mu1888_7(B) = InitializeIndirection[#this] : &:r1888_6 #-----| r0_1(glval<B &&>) = 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<unknown>) = VariableAddress[#this] : -# 1841| r1841_9(B *) = Load[#this] : &:r1841_8, ~m? -#-----| r0_5(A *) = ConvertToNonVirtualBase[B : A] : r1841_9 -# 1841| r1841_10(glval<unknown>) = FunctionAddress[operator=] : -# 1841| r1841_11(glval<B &&>) = VariableAddress[(unnamed parameter 0)] : -# 1841| r1841_12(B &&) = Load[(unnamed parameter 0)] : &:r1841_11, ~m? -#-----| r0_6(glval<B>) = CopyValue : r1841_12 -# 1841| r1841_13(B *) = CopyValue : r0_6 -#-----| r0_7(A *) = ConvertToNonVirtualBase[B : A] : r1841_13 -# 1841| r1841_14(glval<A>) = 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<unknown>) = VariableAddress[#this] : +# 1888| r1888_9(B *) = Load[#this] : &:r1888_8, ~m? +#-----| r0_5(A *) = ConvertToNonVirtualBase[B : A] : r1888_9 +# 1888| r1888_10(glval<unknown>) = FunctionAddress[operator=] : +# 1888| r1888_11(glval<B &&>) = VariableAddress[(unnamed parameter 0)] : +# 1888| r1888_12(B &&) = Load[(unnamed parameter 0)] : &:r1888_11, ~m? +#-----| r0_6(glval<B>) = CopyValue : r1888_12 +# 1888| r1888_13(B *) = CopyValue : r0_6 +#-----| r0_7(A *) = ConvertToNonVirtualBase[B : A] : r1888_13 +# 1888| r1888_14(glval<A>) = 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<A>) = CopyValue : r1841_15 +#-----| r0_13(glval<A>) = CopyValue : r1888_15 #-----| r0_14(glval<B &>) = VariableAddress[#return] : #-----| r0_15(glval<unknown>) = VariableAddress[#this] : #-----| r0_16(B *) = Load[#this] : &:r0_15, ~m? #-----| r0_17(glval<B>) = 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<B &>) = 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<B &>) = 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<B>) = VariableAddress[v] : -# 1846| mu1846_2(B) = Uninitialized[v] : &:r1846_1 -# 1846| r1846_3(glval<unknown>) = 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<B>) = VariableAddress[v] : -# 1847| r1847_2(glval<unknown>) = FunctionAddress[operator=] : -# 1847| r1847_3(glval<B>) = VariableAddress[#temp1847:13] : -# 1847| mu1847_4(B) = Uninitialized[#temp1847:13] : &:r1847_3 -# 1847| r1847_5(glval<unknown>) = 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<B>) = 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<B>) = VariableAddress[v] : +# 1893| mu1893_2(B) = Uninitialized[v] : &:r1893_1 +# 1893| r1893_3(glval<unknown>) = 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<B>) = VariableAddress[v] : +# 1894| r1894_2(glval<unknown>) = FunctionAddress[operator=] : +# 1894| r1894_3(glval<B>) = VariableAddress[#temp1894:13] : +# 1894| mu1894_4(B) = Uninitialized[#temp1894:13] : &:r1894_3 +# 1894| r1894_5(glval<unknown>) = 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<B>) = 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<char *>) = VariableAddress[pf] : -# 1852| r1852_2(glval<char[17]>) = VariableAddress[__PRETTY_FUNCTION__] : -# 1852| r1852_3(char *) = Convert : r1852_2 -# 1852| mu1852_4(char *) = Store[pf] : &:r1852_1, r1852_3 -# 1853| r1853_1(glval<char *>) = VariableAddress[strfunc] : -# 1853| r1853_2(glval<char[10]>) = 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<char *>) = VariableAddress[pf] : +# 1899| r1899_2(glval<char[17]>) = VariableAddress[__PRETTY_FUNCTION__] : +# 1899| r1899_3(char *) = Convert : r1899_2 +# 1899| mu1899_4(char *) = Store[pf] : &:r1899_1, r1899_3 +# 1900| r1900_1(glval<char *>) = VariableAddress[strfunc] : +# 1900| r1900_2(glval<char[10]>) = 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<int>::missing_type_decl_entry(missing_declaration_entries::Bar1<int>::pointer) -# 1864| Block 0 -# 1864| v1864_1(void) = EnterFunction : -# 1864| mu1864_2(unknown) = AliasedDefinition : -# 1864| mu1864_3(unknown) = InitializeNonLocal : -# 1864| r1864_4(glval<unknown>) = VariableAddress[#this] : -# 1864| mu1864_5(glval<Bar1<int>>) = InitializeParameter[#this] : &:r1864_4 -# 1864| r1864_6(glval<Bar1<int>>) = Load[#this] : &:r1864_4, ~m? -# 1864| mu1864_7(Bar1<int>) = InitializeIndirection[#this] : &:r1864_6 -# 1864| r1864_8(glval<S *>) = 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<void *>) = VariableAddress[#return] : -# 1866| r1866_2(glval<S *>) = 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<void *>) = 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<int>::missing_type_decl_entry(missing_declaration_entries::Bar1<int>::pointer) +# 1911| Block 0 +# 1911| v1911_1(void) = EnterFunction : +# 1911| mu1911_2(unknown) = AliasedDefinition : +# 1911| mu1911_3(unknown) = InitializeNonLocal : +# 1911| r1911_4(glval<unknown>) = VariableAddress[#this] : +# 1911| mu1911_5(glval<Bar1<int>>) = InitializeParameter[#this] : &:r1911_4 +# 1911| r1911_6(glval<Bar1<int>>) = Load[#this] : &:r1911_4, ~m? +# 1911| mu1911_7(Bar1<int>) = InitializeIndirection[#this] : &:r1911_6 +# 1911| r1911_8(glval<S *>) = 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<void *>) = VariableAddress[#return] : +# 1913| r1913_2(glval<S *>) = 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<void *>) = 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<Bar1<int>>) = VariableAddress[b] : -# 1871| mu1871_2(Bar1<int>) = Uninitialized[b] : &:r1871_1 -# 1872| r1872_1(glval<Bar1<int>>) = VariableAddress[b] : -# 1872| r1872_2(glval<unknown>) = 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<int>) = ^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<Bar1<int>>) = VariableAddress[b] : +# 1918| mu1918_2(Bar1<int>) = Uninitialized[b] : &:r1918_1 +# 1919| r1919_1(glval<Bar1<int>>) = VariableAddress[b] : +# 1919| r1919_2(glval<unknown>) = 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<int>) = ^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<int>::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<unknown>) = VariableAddress[#this] : -# 1877| mu1877_5(glval<Bar2<int>>) = InitializeParameter[#this] : &:r1877_4 -# 1877| r1877_6(glval<Bar2<int>>) = Load[#this] : &:r1877_4, ~m? -# 1877| mu1877_7(Bar2<int>) = InitializeIndirection[#this] : &:r1877_6 -# 1878| r1878_1(glval<int[10]>) = VariableAddress[x] : -# 1878| mu1878_2(int[10]) = Uninitialized[x] : &:r1878_1 -# 1878| r1878_3(glval<int[10]>) = VariableAddress[y] : -# 1878| mu1878_4(int[10]) = Uninitialized[y] : &:r1878_3 -# 1879| r1879_1(int) = Constant[10] : -# 1879| r1879_2(glval<int[10]>) = VariableAddress[x] : -# 1879| r1879_3(int *) = Convert : r1879_2 -# 1879| r1879_4(glval<int>) = CopyValue : r1879_3 -# 1879| mu1879_5(int) = Store[?] : &:r1879_4, r1879_1 -# 1880| r1880_1(int) = Constant[10] : -# 1880| r1880_2(glval<int[10]>) = VariableAddress[y] : -# 1880| r1880_3(int *) = Convert : r1880_2 -# 1880| r1880_4(glval<int>) = CopyValue : r1880_3 -# 1880| mu1880_5(int) = Store[?] : &:r1880_4, r1880_1 -# 1881| r1881_1(glval<int>) = VariableAddress[#return] : -# 1881| r1881_2(glval<int[10]>) = VariableAddress[x] : -# 1881| r1881_3(int *) = Convert : r1881_2 -# 1881| r1881_4(int) = Load[?] : &:r1881_3, ~m? -# 1881| r1881_5(glval<int[10]>) = 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<int>) = 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<int>::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<unknown>) = VariableAddress[#this] : +# 1924| mu1924_5(glval<Bar2<int>>) = InitializeParameter[#this] : &:r1924_4 +# 1924| r1924_6(glval<Bar2<int>>) = Load[#this] : &:r1924_4, ~m? +# 1924| mu1924_7(Bar2<int>) = InitializeIndirection[#this] : &:r1924_6 +# 1925| r1925_1(glval<int[10]>) = VariableAddress[x] : +# 1925| mu1925_2(int[10]) = Uninitialized[x] : &:r1925_1 +# 1925| r1925_3(glval<int[10]>) = VariableAddress[y] : +# 1925| mu1925_4(int[10]) = Uninitialized[y] : &:r1925_3 +# 1926| r1926_1(int) = Constant[10] : +# 1926| r1926_2(glval<int[10]>) = VariableAddress[x] : +# 1926| r1926_3(int *) = Convert : r1926_2 +# 1926| r1926_4(glval<int>) = CopyValue : r1926_3 +# 1926| mu1926_5(int) = Store[?] : &:r1926_4, r1926_1 +# 1927| r1927_1(int) = Constant[10] : +# 1927| r1927_2(glval<int[10]>) = VariableAddress[y] : +# 1927| r1927_3(int *) = Convert : r1927_2 +# 1927| r1927_4(glval<int>) = CopyValue : r1927_3 +# 1927| mu1927_5(int) = Store[?] : &:r1927_4, r1927_1 +# 1928| r1928_1(glval<int>) = VariableAddress[#return] : +# 1928| r1928_2(glval<int[10]>) = VariableAddress[x] : +# 1928| r1928_3(int *) = Convert : r1928_2 +# 1928| r1928_4(int) = Load[?] : &:r1928_3, ~m? +# 1928| r1928_5(glval<int[10]>) = 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<int>) = 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<Bar2<int>>) = VariableAddress[b] : -# 1886| mu1886_2(Bar2<int>) = Uninitialized[b] : &:r1886_1 -# 1887| r1887_1(glval<Bar2<int>>) = VariableAddress[b] : -# 1887| r1887_2(glval<unknown>) = 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<int>) = ^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<Bar2<int>>) = VariableAddress[b] : +# 1933| mu1933_2(Bar2<int>) = Uninitialized[b] : &:r1933_1 +# 1934| r1934_1(glval<Bar2<int>>) = VariableAddress[b] : +# 1934| r1934_2(glval<unknown>) = 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<int>) = ^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<char> -# 1891| Block 0 -# 1891| v1891_1(void) = EnterFunction : -# 1891| mu1891_2(unknown) = AliasedDefinition : -# 1891| r1891_3(glval<char>) = 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<char> +# 1938| Block 0 +# 1938| v1938_1(void) = EnterFunction : +# 1938| mu1938_2(unknown) = AliasedDefinition : +# 1938| r1938_3(glval<char>) = 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<int> -# 1891| Block 0 -# 1891| v1891_1(void) = EnterFunction : -# 1891| mu1891_2(unknown) = AliasedDefinition : -# 1891| r1891_3(glval<int>) = 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<int> +# 1938| Block 0 +# 1938| v1938_1(void) = EnterFunction : +# 1938| mu1938_2(unknown) = AliasedDefinition : +# 1938| r1938_3(glval<int>) = 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<int>) = VariableAddress[local_int] : -# 1894| r1894_2(glval<int>) = 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<char>) = VariableAddress[local_char] : -# 1895| r1895_2(glval<char>) = 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<int>) = VariableAddress[#return] : -# 1896| r1896_2(glval<int>) = VariableAddress[local_int] : -# 1896| r1896_3(int) = Load[local_int] : &:r1896_2, ~m? -# 1896| r1896_4(glval<char>) = 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<int>) = 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<int>) = VariableAddress[local_int] : +# 1941| r1941_2(glval<int>) = 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<char>) = VariableAddress[local_char] : +# 1942| r1942_2(glval<char>) = 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<int>) = VariableAddress[#return] : +# 1943| r1943_2(glval<int>) = VariableAddress[local_int] : +# 1943| r1943_3(int) = Load[local_int] : &:r1943_2, ~m? +# 1943| r1943_4(glval<char>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1901| mu1901_5(int) = InitializeParameter[x] : &:r1901_4 -# 1902| r1902_1(glval<int>) = 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<int>) = VariableAddress[x] : +# 1948| mu1948_5(int) = InitializeParameter[x] : &:r1948_4 +# 1949| r1949_1(glval<int>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[#return] : -# 1903| r1903_2(glval<int>) = 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<int>) = VariableAddress[#return] : +# 1950| r1950_2(glval<int>) = 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<unknown>) = 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<unknown>) = 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<int>) = VariableAddress[#return] : -# 1907| mu1907_2(int) = Uninitialized[#return] : &:r1907_1 +# 1954| Block 4 +# 1954| r1954_1(glval<int>) = 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<int>) = VariableAddress[x] : -# 1909| mu1909_5(int) = InitializeParameter[x] : &:r1909_4 -# 1910| r1910_1(glval<int>) = 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<int>) = VariableAddress[x] : +# 1956| mu1956_5(int) = InitializeParameter[x] : &:r1956_4 +# 1957| r1957_1(glval<int>) = 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<unknown>) = 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<unknown>) = 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<int>) = VariableAddress[#return] : -# 1913| r1913_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[#return] : +# 1960| r1960_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : -# 1916| mu1916_5(int) = InitializeParameter[x] : &:r1916_4 -# 1917| r1917_1(glval<int>) = VariableAddress[#return] : -# 1917| r1917_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[x] : +# 1963| mu1963_5(int) = InitializeParameter[x] : &:r1963_4 +# 1964| r1964_1(glval<int>) = VariableAddress[#return] : +# 1964| r1964_2(glval<int>) = 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<int>) = 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<C>) = VariableAddress[c] : -# 1921| mu1921_2(C) = Uninitialized[c] : &:r1921_1 -# 1921| r1921_3(glval<unknown>) = 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<int>) = VariableAddress[x] : -# 1922| mu1922_2(int) = Uninitialized[x] : &:r1922_1 -# 1923| r1923_1(glval<C>) = VariableAddress[c] : -# 1923| r1923_2(glval<unknown>) = 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<int>) = VariableAddress[x] : -# 1923| mu1923_7(int) = Store[x] : &:r1923_6, r1923_4 -# 1924| r1924_1(glval<int>) = VariableAddress[y] : -# 1924| mu1924_2(int) = Uninitialized[y] : &:r1924_1 -# 1925| r1925_1(glval<unknown>) = 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<int>) = VariableAddress[y] : -# 1925| mu1925_6(int) = Store[y] : &:r1925_5, r1925_3 -# 1926| r1926_1(glval<int>) = VariableAddress[z] : -# 1926| mu1926_2(int) = Uninitialized[z] : &:r1926_1 -# 1927| r1927_1(glval<unknown>) = 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<int>) = VariableAddress[z] : -# 1927| mu1927_6(int) = Store[z] : &:r1927_5, r1927_3 -# 1928| v1928_1(void) = NoOp : -# 1928| r1928_2(glval<C>) = VariableAddress[c] : -# 1928| r1928_3(glval<unknown>) = 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<C>) = VariableAddress[c] : +# 1968| mu1968_2(C) = Uninitialized[c] : &:r1968_1 +# 1968| r1968_3(glval<unknown>) = 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<int>) = VariableAddress[x] : +# 1969| mu1969_2(int) = Uninitialized[x] : &:r1969_1 +# 1970| r1970_1(glval<C>) = VariableAddress[c] : +# 1970| r1970_2(glval<unknown>) = 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<int>) = VariableAddress[x] : +# 1970| mu1970_7(int) = Store[x] : &:r1970_6, r1970_4 +# 1971| r1971_1(glval<int>) = VariableAddress[y] : +# 1971| mu1971_2(int) = Uninitialized[y] : &:r1971_1 +# 1972| r1972_1(glval<unknown>) = 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<int>) = VariableAddress[y] : +# 1972| mu1972_6(int) = Store[y] : &:r1972_5, r1972_3 +# 1973| r1973_1(glval<int>) = VariableAddress[z] : +# 1973| mu1973_2(int) = Uninitialized[z] : &:r1973_1 +# 1974| r1974_1(glval<unknown>) = 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<int>) = VariableAddress[z] : +# 1974| mu1974_6(int) = Store[z] : &:r1974_5, r1974_3 +# 1975| v1975_1(void) = NoOp : +# 1975| r1975_2(glval<C>) = VariableAddress[c] : +# 1975| r1975_3(glval<unknown>) = 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<int>) = VariableAddress[i] : -# 1931| mu1931_2(int) = Uninitialized[i] : &:r1931_1 -# 1931| r1931_3(glval<int>) = VariableAddress[j] : -# 1931| mu1931_4(int) = Uninitialized[j] : &:r1931_3 -# 1932| r1932_1(int) = Constant[40] : -# 1932| r1932_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[i] : +# 1978| mu1978_2(int) = Uninitialized[i] : &:r1978_1 +# 1978| r1978_3(glval<int>) = VariableAddress[j] : +# 1978| mu1978_4(int) = Uninitialized[j] : &:r1978_3 +# 1979| r1979_1(int) = Constant[40] : +# 1979| r1979_2(glval<int>) = 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<int>) = 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<int>) = VariableAddress[i] : -# 1936| mu1936_2(int) = Uninitialized[i] : &:r1936_1 -# 1936| r1936_3(glval<int>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[i] : +# 1983| mu1983_2(int) = Uninitialized[i] : &:r1983_1 +# 1983| r1983_3(glval<int>) = 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<int>) = 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<int>) = 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<D &>) = VariableAddress[#return] : -# 1945| r1945_2(glval<D>) = VariableAddress[x] : -# 1945| r1945_3(D &) = CopyValue : r1945_2 -# 1945| mu1945_4(D &) = Store[#return] : &:r1945_1, r1945_3 -# 1944| r1944_4(glval<D &>) = 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<D &>) = VariableAddress[#return] : +# 1992| r1992_2(glval<D>) = VariableAddress[x] : +# 1992| r1992_3(D &) = CopyValue : r1992_2 +# 1992| mu1992_4(D &) = Store[#return] : &:r1992_1, r1992_3 +# 1991| r1991_4(glval<D &>) = 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<D>) = VariableAddress[#return] : -# 1948| r1948_2(glval<D>) = 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<D>) = 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<D>) = VariableAddress[#return] : +# 1995| r1995_2(glval<D>) = 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<D>) = 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<D>) = VariableAddress[d] : -# 1953| mu1953_2(D) = Uninitialized[d] : &:r1953_1 -# 1955| r1955_1(glval<D>) = VariableAddress[d] : -# 1955| r1955_2(glval<unknown>) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1955| r1955_3(D &) = Call[ReferenceStaticMemberFunction] : func:r1955_2 -# 1955| mu1955_4(unknown) = ^CallSideEffect : ~m? -# 1955| r1955_5(glval<D>) = CopyValue : r1955_3 -# 1956| r1956_1(glval<unknown>) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1956| r1956_2(D &) = Call[ReferenceStaticMemberFunction] : func:r1956_1 -# 1956| mu1956_3(unknown) = ^CallSideEffect : ~m? -# 1956| r1956_4(glval<D>) = CopyValue : r1956_2 -# 1957| r1957_1(glval<D>) = VariableAddress[d] : -# 1957| r1957_2(glval<unknown>) = FunctionAddress[ObjectStaticMemberFunction] : -# 1957| r1957_3(D) = Call[ObjectStaticMemberFunction] : func:r1957_2 -# 1957| mu1957_4(unknown) = ^CallSideEffect : ~m? -# 1958| r1958_1(glval<unknown>) = FunctionAddress[ObjectStaticMemberFunction] : -# 1958| r1958_2(D) = Call[ObjectStaticMemberFunction] : func:r1958_1 -# 1958| mu1958_3(unknown) = ^CallSideEffect : ~m? -# 1960| r1960_1(glval<D>) = VariableAddress[x] : -# 1960| mu1960_2(D) = Uninitialized[x] : &:r1960_1 -# 1961| r1961_1(glval<D>) = VariableAddress[d] : -# 1961| r1961_2(glval<unknown>) = 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<D>) = VariableAddress[x] : -# 1961| mu1961_7(D) = Store[x] : &:r1961_6, r1961_5 -# 1962| r1962_1(glval<D>) = VariableAddress[y] : -# 1962| mu1962_2(D) = Uninitialized[y] : &:r1962_1 -# 1963| r1963_1(glval<unknown>) = 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<D>) = VariableAddress[y] : -# 1963| mu1963_6(D) = Store[y] : &:r1963_5, r1963_4 -# 1964| r1964_1(glval<D>) = VariableAddress[j] : -# 1964| mu1964_2(D) = Uninitialized[j] : &:r1964_1 -# 1965| r1965_1(glval<D>) = VariableAddress[d] : -# 1965| r1965_2(glval<unknown>) = FunctionAddress[ObjectStaticMemberFunction] : -# 1965| r1965_3(D) = Call[ObjectStaticMemberFunction] : func:r1965_2 -# 1965| mu1965_4(unknown) = ^CallSideEffect : ~m? -# 1965| r1965_5(glval<D>) = VariableAddress[j] : -# 1965| mu1965_6(D) = Store[j] : &:r1965_5, r1965_3 -# 1966| r1966_1(glval<D>) = VariableAddress[k] : -# 1966| mu1966_2(D) = Uninitialized[k] : &:r1966_1 -# 1967| r1967_1(glval<unknown>) = FunctionAddress[ObjectStaticMemberFunction] : -# 1967| r1967_2(D) = Call[ObjectStaticMemberFunction] : func:r1967_1 -# 1967| mu1967_3(unknown) = ^CallSideEffect : ~m? -# 1967| r1967_4(glval<D>) = 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<D>) = VariableAddress[d] : +# 2000| mu2000_2(D) = Uninitialized[d] : &:r2000_1 +# 2002| r2002_1(glval<D>) = VariableAddress[d] : +# 2002| r2002_2(glval<unknown>) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2002| r2002_3(D &) = Call[ReferenceStaticMemberFunction] : func:r2002_2 +# 2002| mu2002_4(unknown) = ^CallSideEffect : ~m? +# 2002| r2002_5(glval<D>) = CopyValue : r2002_3 +# 2003| r2003_1(glval<unknown>) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2003| r2003_2(D &) = Call[ReferenceStaticMemberFunction] : func:r2003_1 +# 2003| mu2003_3(unknown) = ^CallSideEffect : ~m? +# 2003| r2003_4(glval<D>) = CopyValue : r2003_2 +# 2004| r2004_1(glval<D>) = VariableAddress[d] : +# 2004| r2004_2(glval<unknown>) = FunctionAddress[ObjectStaticMemberFunction] : +# 2004| r2004_3(D) = Call[ObjectStaticMemberFunction] : func:r2004_2 +# 2004| mu2004_4(unknown) = ^CallSideEffect : ~m? +# 2005| r2005_1(glval<unknown>) = FunctionAddress[ObjectStaticMemberFunction] : +# 2005| r2005_2(D) = Call[ObjectStaticMemberFunction] : func:r2005_1 +# 2005| mu2005_3(unknown) = ^CallSideEffect : ~m? +# 2007| r2007_1(glval<D>) = VariableAddress[x] : +# 2007| mu2007_2(D) = Uninitialized[x] : &:r2007_1 +# 2008| r2008_1(glval<D>) = VariableAddress[d] : +# 2008| r2008_2(glval<unknown>) = 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<D>) = VariableAddress[x] : +# 2008| mu2008_7(D) = Store[x] : &:r2008_6, r2008_5 +# 2009| r2009_1(glval<D>) = VariableAddress[y] : +# 2009| mu2009_2(D) = Uninitialized[y] : &:r2009_1 +# 2010| r2010_1(glval<unknown>) = 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<D>) = VariableAddress[y] : +# 2010| mu2010_6(D) = Store[y] : &:r2010_5, r2010_4 +# 2011| r2011_1(glval<D>) = VariableAddress[j] : +# 2011| mu2011_2(D) = Uninitialized[j] : &:r2011_1 +# 2012| r2012_1(glval<D>) = VariableAddress[d] : +# 2012| r2012_2(glval<unknown>) = FunctionAddress[ObjectStaticMemberFunction] : +# 2012| r2012_3(D) = Call[ObjectStaticMemberFunction] : func:r2012_2 +# 2012| mu2012_4(unknown) = ^CallSideEffect : ~m? +# 2012| r2012_5(glval<D>) = VariableAddress[j] : +# 2012| mu2012_6(D) = Store[j] : &:r2012_5, r2012_3 +# 2013| r2013_1(glval<D>) = VariableAddress[k] : +# 2013| mu2013_2(D) = Uninitialized[k] : &:r2013_1 +# 2014| r2014_1(glval<unknown>) = FunctionAddress[ObjectStaticMemberFunction] : +# 2014| r2014_2(D) = Call[ObjectStaticMemberFunction] : func:r2014_1 +# 2014| mu2014_3(unknown) = ^CallSideEffect : ~m? +# 2014| r2014_4(glval<D>) = 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<int>) = VariableAddress[x] : -# 1971| mu1971_2(int) = Uninitialized[x] : &:r1971_1 -# 1972| r1972_1(glval<int>) = 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<int>) = VariableAddress[x] : +# 2018| mu2018_2(int) = Uninitialized[x] : &:r2018_1 +# 2019| r2019_1(glval<int>) = 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<ValCat>) = 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<ValCat>) = VariableAddress[c] : +# 2029| mu2029_2(ValCat) = Uninitialized[c] : &:r2029_1 #-----| r0_1(glval<ValCat>) = VariableAddress[#temp0:0] : #-----| mu0_2(ValCat) = Uninitialized[#temp0:0] : &:r0_1 #-----| r0_3(ValCat) = Load[#temp0:0] : &:r0_1, ~m? -# 1984| r1984_1(glval<ValCat>) = VariableAddress[c] : -# 1984| r1984_2(glval<unknown>) = FunctionAddress[lvalue] : -# 1984| r1984_3(ValCat &) = Call[lvalue] : func:r1984_2 -# 1984| mu1984_4(unknown) = ^CallSideEffect : ~m? -# 1984| r1984_5(glval<ValCat>) = CopyValue : r1984_3 -# 1984| mu1984_6(ValCat) = Store[?] : &:r1984_5, r0_3 +# 2031| r2031_1(glval<ValCat>) = VariableAddress[c] : +# 2031| r2031_2(glval<unknown>) = FunctionAddress[lvalue] : +# 2031| r2031_3(ValCat &) = Call[lvalue] : func:r2031_2 +# 2031| mu2031_4(unknown) = ^CallSideEffect : ~m? +# 2031| r2031_5(glval<ValCat>) = CopyValue : r2031_3 +# 2031| mu2031_6(ValCat) = Store[?] : &:r2031_5, r0_3 #-----| r0_4(glval<ValCat>) = VariableAddress[#temp0:0] : #-----| mu0_5(ValCat) = Uninitialized[#temp0:0] : &:r0_4 #-----| r0_6(ValCat) = Load[#temp0:0] : &:r0_4, ~m? -# 1985| r1985_1(glval<ValCat>) = VariableAddress[c] : -# 1985| r1985_2(glval<unknown>) = FunctionAddress[xvalue] : -# 1985| r1985_3(ValCat &&) = Call[xvalue] : func:r1985_2 -# 1985| mu1985_4(unknown) = ^CallSideEffect : ~m? -# 1985| r1985_5(glval<ValCat>) = CopyValue : r1985_3 -# 1985| mu1985_6(ValCat) = Store[?] : &:r1985_5, r0_6 +# 2032| r2032_1(glval<ValCat>) = VariableAddress[c] : +# 2032| r2032_2(glval<unknown>) = FunctionAddress[xvalue] : +# 2032| r2032_3(ValCat &&) = Call[xvalue] : func:r2032_2 +# 2032| mu2032_4(unknown) = ^CallSideEffect : ~m? +# 2032| r2032_5(glval<ValCat>) = CopyValue : r2032_3 +# 2032| mu2032_6(ValCat) = Store[?] : &:r2032_5, r0_6 #-----| r0_7(glval<ValCat>) = VariableAddress[#temp0:0] : #-----| mu0_8(ValCat) = Uninitialized[#temp0:0] : &:r0_7 #-----| r0_9(ValCat) = Load[#temp0:0] : &:r0_7, ~m? -# 1986| r1986_1(glval<ValCat>) = VariableAddress[#temp1986:5] : -# 1986| r1986_2(glval<ValCat>) = VariableAddress[c] : -# 1986| r1986_3(glval<unknown>) = 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<ValCat>) = VariableAddress[#temp2033:5] : +# 2033| r2033_2(glval<ValCat>) = VariableAddress[c] : +# 2033| r2033_3(glval<unknown>) = 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<ValCat>) = VariableAddress[#temp0:0] : #-----| mu0_11(ValCat) = Uninitialized[#temp0:0] : &:r0_10 #-----| r0_12(ValCat) = Load[#temp0:0] : &:r0_10, ~m? -# 1987| r1987_1(glval<unknown>) = FunctionAddress[lvalue] : -# 1987| r1987_2(ValCat &) = Call[lvalue] : func:r1987_1 -# 1987| mu1987_3(unknown) = ^CallSideEffect : ~m? -# 1987| r1987_4(glval<ValCat>) = CopyValue : r1987_2 -# 1987| mu1987_5(ValCat) = Store[?] : &:r1987_4, r0_12 +# 2034| r2034_1(glval<unknown>) = FunctionAddress[lvalue] : +# 2034| r2034_2(ValCat &) = Call[lvalue] : func:r2034_1 +# 2034| mu2034_3(unknown) = ^CallSideEffect : ~m? +# 2034| r2034_4(glval<ValCat>) = CopyValue : r2034_2 +# 2034| mu2034_5(ValCat) = Store[?] : &:r2034_4, r0_12 #-----| r0_13(glval<ValCat>) = VariableAddress[#temp0:0] : #-----| mu0_14(ValCat) = Uninitialized[#temp0:0] : &:r0_13 #-----| r0_15(ValCat) = Load[#temp0:0] : &:r0_13, ~m? -# 1988| r1988_1(glval<unknown>) = FunctionAddress[xvalue] : -# 1988| r1988_2(ValCat &&) = Call[xvalue] : func:r1988_1 -# 1988| mu1988_3(unknown) = ^CallSideEffect : ~m? -# 1988| r1988_4(glval<ValCat>) = CopyValue : r1988_2 -# 1988| mu1988_5(ValCat) = Store[?] : &:r1988_4, r0_15 +# 2035| r2035_1(glval<unknown>) = FunctionAddress[xvalue] : +# 2035| r2035_2(ValCat &&) = Call[xvalue] : func:r2035_1 +# 2035| mu2035_3(unknown) = ^CallSideEffect : ~m? +# 2035| r2035_4(glval<ValCat>) = CopyValue : r2035_2 +# 2035| mu2035_5(ValCat) = Store[?] : &:r2035_4, r0_15 #-----| r0_16(glval<ValCat>) = VariableAddress[#temp0:0] : #-----| mu0_17(ValCat) = Uninitialized[#temp0:0] : &:r0_16 #-----| r0_18(ValCat) = Load[#temp0:0] : &:r0_16, ~m? -# 1989| r1989_1(glval<ValCat>) = VariableAddress[#temp1989:5] : -# 1989| r1989_2(glval<unknown>) = 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<ValCat>) = VariableAddress[#temp2036:5] : +# 2036| r2036_2(glval<unknown>) = 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<C>) = VariableAddress[c] : -# 1993| mu1993_2(C) = Uninitialized[c] : &:r1993_1 -# 1993| r1993_3(glval<unknown>) = 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<C>) = 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<C>) = VariableAddress[c] : -# 1996| r1996_3(glval<unknown>) = 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<C>) = VariableAddress[c] : +# 2040| mu2040_2(C) = Uninitialized[c] : &:r2040_1 +# 2040| r2040_3(glval<unknown>) = 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<C>) = 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<C>) = VariableAddress[c] : +# 2043| r2043_3(glval<unknown>) = 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<bool>) = VariableAddress[a] : -# 1998| mu1998_5(bool) = InitializeParameter[a] : &:r1998_4 -# 1998| r1998_6(glval<int>) = VariableAddress[x] : -# 1998| mu1998_7(int) = InitializeParameter[x] : &:r1998_6 -# 1998| r1998_8(glval<int>) = VariableAddress[y] : -# 1998| mu1998_9(int) = InitializeParameter[y] : &:r1998_8 -# 1998| r1998_10(glval<int>) = VariableAddress[z] : -# 1998| mu1998_11(int) = InitializeParameter[z] : &:r1998_10 -# 1999| r1999_1(glval<bool>) = 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<bool>) = VariableAddress[a] : +# 2045| mu2045_5(bool) = InitializeParameter[a] : &:r2045_4 +# 2045| r2045_6(glval<int>) = VariableAddress[x] : +# 2045| mu2045_7(int) = InitializeParameter[x] : &:r2045_6 +# 2045| r2045_8(glval<int>) = VariableAddress[y] : +# 2045| mu2045_9(int) = InitializeParameter[y] : &:r2045_8 +# 2045| r2045_10(glval<int>) = VariableAddress[z] : +# 2045| mu2045_11(int) = InitializeParameter[z] : &:r2045_10 +# 2046| r2046_1(glval<bool>) = 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<int>) = VariableAddress[#temp1999:9] : -# 1999| r1999_5(int) = Load[#temp1999:9] : &:r1999_4, ~m? -# 1999| r1999_6(glval<int>) = VariableAddress[z] : -# 1999| mu1999_7(int) = Store[z] : &:r1999_6, r1999_5 -# 2000| r2000_1(glval<bool>) = 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<int>) = VariableAddress[#temp2046:9] : +# 2046| r2046_5(int) = Load[#temp2046:9] : &:r2046_4, ~m? +# 2046| r2046_6(glval<int>) = VariableAddress[z] : +# 2046| mu2046_7(int) = Store[z] : &:r2046_6, r2046_5 +# 2047| r2047_1(glval<bool>) = 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<int>) = VariableAddress[x] : -# 1999| r1999_9(int) = Load[x] : &:r1999_8, ~m? -# 1999| r1999_10(glval<int>) = VariableAddress[#temp1999:9] : -# 1999| mu1999_11(int) = Store[#temp1999:9] : &:r1999_10, r1999_9 +# 2046| Block 2 +# 2046| r2046_8(glval<int>) = VariableAddress[x] : +# 2046| r2046_9(int) = Load[x] : &:r2046_8, ~m? +# 2046| r2046_10(glval<int>) = VariableAddress[#temp2046:9] : +# 2046| mu2046_11(int) = Store[#temp2046:9] : &:r2046_10, r2046_9 #-----| Goto -> Block 1 -# 1999| Block 3 -# 1999| r1999_12(glval<int>) = VariableAddress[y] : -# 1999| r1999_13(int) = Load[y] : &:r1999_12, ~m? -# 1999| r1999_14(glval<int>) = VariableAddress[#temp1999:9] : -# 1999| mu1999_15(int) = Store[#temp1999:9] : &:r1999_14, r1999_13 +# 2046| Block 3 +# 2046| r2046_12(glval<int>) = VariableAddress[y] : +# 2046| r2046_13(int) = Load[y] : &:r2046_12, ~m? +# 2046| r2046_14(glval<int>) = VariableAddress[#temp2046:9] : +# 2046| mu2046_15(int) = Store[#temp2046:9] : &:r2046_14, r2046_13 #-----| Goto -> Block 1 -# 2000| Block 4 -# 2000| r2000_4(glval<int>) = VariableAddress[#temp2000:9] : -# 2000| r2000_5(int) = Load[#temp2000:9] : &:r2000_4, ~m? -# 2000| r2000_6(glval<int>) = VariableAddress[z] : -# 2000| mu2000_7(int) = Store[z] : &:r2000_6, r2000_5 -# 2001| r2001_1(glval<bool>) = 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<int>) = VariableAddress[#temp2047:9] : +# 2047| r2047_5(int) = Load[#temp2047:9] : &:r2047_4, ~m? +# 2047| r2047_6(glval<int>) = VariableAddress[z] : +# 2047| mu2047_7(int) = Store[z] : &:r2047_6, r2047_5 +# 2048| r2048_1(glval<bool>) = 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<int>) = VariableAddress[x] : -# 2000| r2000_9(int) = Load[x] : &:r2000_8, ~m? -# 2000| r2000_10(glval<int>) = VariableAddress[#temp2000:9] : -# 2000| mu2000_11(int) = Store[#temp2000:9] : &:r2000_10, r2000_9 +# 2047| Block 5 +# 2047| r2047_8(glval<int>) = VariableAddress[x] : +# 2047| r2047_9(int) = Load[x] : &:r2047_8, ~m? +# 2047| r2047_10(glval<int>) = 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<int>) = 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<int>) = VariableAddress[#temp2047:9] : +# 2047| mu2047_14(int) = Store[#temp2047:9] : &:r2047_13, r2047_12 #-----| Goto -> Block 4 -# 2001| Block 7 -# 2001| r2001_4(glval<int>) = VariableAddress[#temp2001:9] : -# 2001| r2001_5(int) = Load[#temp2001:9] : &:r2001_4, ~m? -# 2001| r2001_6(glval<int>) = VariableAddress[z] : -# 2001| mu2001_7(int) = Store[z] : &:r2001_6, r2001_5 -# 2002| r2002_1(int) = Constant[7] : -# 2002| r2002_2(glval<bool>) = 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<int>) = VariableAddress[#temp2048:9] : +# 2048| r2048_5(int) = Load[#temp2048:9] : &:r2048_4, ~m? +# 2048| r2048_6(glval<int>) = VariableAddress[z] : +# 2048| mu2048_7(int) = Store[z] : &:r2048_6, r2048_5 +# 2049| r2049_1(int) = Constant[7] : +# 2049| r2049_2(glval<bool>) = 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<int>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[#temp2048:9] : +# 2048| mu2048_13(int) = Store[#temp2048:9] : &:r2048_12, r2048_11 #-----| Goto -> Block 7 -# 2002| Block 10 -# 2002| r2002_5(glval<unknown>) = VariableAddress[#temp2002:6] : -# 2002| r2002_6(glval<int>) = 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<unknown>) = VariableAddress[#temp2049:6] : +# 2049| r2049_6(glval<int>) = 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<int>) = VariableAddress[x] : -# 2002| r2002_9(glval<unknown>) = VariableAddress[#temp2002:6] : -# 2002| mu2002_10(glval<int>) = Store[#temp2002:6] : &:r2002_9, r2002_8 +# 2049| Block 11 +# 2049| r2049_8(glval<int>) = VariableAddress[x] : +# 2049| r2049_9(glval<unknown>) = VariableAddress[#temp2049:6] : +# 2049| mu2049_10(glval<int>) = Store[#temp2049:6] : &:r2049_9, r2049_8 #-----| Goto -> Block 10 -# 2002| Block 12 -# 2002| r2002_11(glval<int>) = VariableAddress[y] : -# 2002| r2002_12(glval<unknown>) = VariableAddress[#temp2002:6] : -# 2002| mu2002_13(glval<int>) = Store[#temp2002:6] : &:r2002_12, r2002_11 +# 2049| Block 12 +# 2049| r2049_11(glval<int>) = VariableAddress[y] : +# 2049| r2049_12(glval<unknown>) = VariableAddress[#temp2049:6] : +# 2049| mu2049_13(glval<int>) = 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<bool>) = VariableAddress[a] : -# 2008| mu2008_5(bool) = InitializeParameter[a] : &:r2008_4 -# 2008| r2008_6(glval<TernaryPodObj>) = VariableAddress[x] : -# 2008| mu2008_7(TernaryPodObj) = InitializeParameter[x] : &:r2008_6 -# 2008| r2008_8(glval<TernaryPodObj>) = VariableAddress[y] : -# 2008| mu2008_9(TernaryPodObj) = InitializeParameter[y] : &:r2008_8 -# 2008| r2008_10(glval<TernaryPodObj>) = VariableAddress[z] : -# 2008| mu2008_11(TernaryPodObj) = InitializeParameter[z] : &:r2008_10 -# 2009| r2009_1(glval<bool>) = 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<bool>) = VariableAddress[a] : +# 2055| mu2055_5(bool) = InitializeParameter[a] : &:r2055_4 +# 2055| r2055_6(glval<TernaryPodObj>) = VariableAddress[x] : +# 2055| mu2055_7(TernaryPodObj) = InitializeParameter[x] : &:r2055_6 +# 2055| r2055_8(glval<TernaryPodObj>) = VariableAddress[y] : +# 2055| mu2055_9(TernaryPodObj) = InitializeParameter[y] : &:r2055_8 +# 2055| r2055_10(glval<TernaryPodObj>) = VariableAddress[z] : +# 2055| mu2055_11(TernaryPodObj) = InitializeParameter[z] : &:r2055_10 +# 2056| r2056_1(glval<bool>) = 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<TernaryPodObj>) = VariableAddress[#temp2009:9] : -# 2009| r2009_5(TernaryPodObj) = Load[#temp2009:9] : &:r2009_4, ~m? -# 2009| r2009_6(glval<TernaryPodObj>) = VariableAddress[z] : -# 2009| mu2009_7(TernaryPodObj) = Store[z] : &:r2009_6, r2009_5 -# 2010| r2010_1(glval<TernaryPodObj>) = VariableAddress[#temp2010:9] : -# 2010| r2010_2(glval<bool>) = 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<TernaryPodObj>) = VariableAddress[#temp2056:9] : +# 2056| r2056_5(TernaryPodObj) = Load[#temp2056:9] : &:r2056_4, ~m? +# 2056| r2056_6(glval<TernaryPodObj>) = VariableAddress[z] : +# 2056| mu2056_7(TernaryPodObj) = Store[z] : &:r2056_6, r2056_5 +# 2057| r2057_1(glval<TernaryPodObj>) = VariableAddress[#temp2057:9] : +# 2057| r2057_2(glval<bool>) = 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<TernaryPodObj>) = VariableAddress[x] : -# 2009| r2009_9(TernaryPodObj) = Load[x] : &:r2009_8, ~m? -# 2009| r2009_10(glval<TernaryPodObj>) = VariableAddress[#temp2009:9] : -# 2009| mu2009_11(TernaryPodObj) = Store[#temp2009:9] : &:r2009_10, r2009_9 +# 2056| Block 2 +# 2056| r2056_8(glval<TernaryPodObj>) = VariableAddress[x] : +# 2056| r2056_9(TernaryPodObj) = Load[x] : &:r2056_8, ~m? +# 2056| r2056_10(glval<TernaryPodObj>) = VariableAddress[#temp2056:9] : +# 2056| mu2056_11(TernaryPodObj) = Store[#temp2056:9] : &:r2056_10, r2056_9 #-----| Goto -> Block 1 -# 2009| Block 3 -# 2009| r2009_12(glval<TernaryPodObj>) = VariableAddress[y] : -# 2009| r2009_13(TernaryPodObj) = Load[y] : &:r2009_12, ~m? -# 2009| r2009_14(glval<TernaryPodObj>) = VariableAddress[#temp2009:9] : -# 2009| mu2009_15(TernaryPodObj) = Store[#temp2009:9] : &:r2009_14, r2009_13 +# 2056| Block 3 +# 2056| r2056_12(glval<TernaryPodObj>) = VariableAddress[y] : +# 2056| r2056_13(TernaryPodObj) = Load[y] : &:r2056_12, ~m? +# 2056| r2056_14(glval<TernaryPodObj>) = VariableAddress[#temp2056:9] : +# 2056| mu2056_15(TernaryPodObj) = Store[#temp2056:9] : &:r2056_14, r2056_13 #-----| Goto -> Block 1 -# 2010| Block 4 -# 2010| r2010_5(glval<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[z] : -# 2010| mu2010_10(TernaryPodObj) = Store[z] : &:r2010_9, r2010_8 -# 2011| r2011_1(glval<TernaryPodObj>) = VariableAddress[#temp2011:9] : -# 2011| r2011_2(glval<bool>) = 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<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[z] : +# 2057| mu2057_10(TernaryPodObj) = Store[z] : &:r2057_9, r2057_8 +# 2058| r2058_1(glval<TernaryPodObj>) = VariableAddress[#temp2058:9] : +# 2058| r2058_2(glval<bool>) = 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<TernaryPodObj>) = VariableAddress[#temp2010:13] : -# 2010| r2010_12(glval<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[#temp2010:9] : -# 2010| mu2010_17(TernaryPodObj) = Store[#temp2010:9] : &:r2010_16, r2010_15 +# 2057| Block 5 +# 2057| r2057_11(glval<TernaryPodObj>) = VariableAddress[#temp2057:13] : +# 2057| r2057_12(glval<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[#temp2057:9] : +# 2057| mu2057_17(TernaryPodObj) = Store[#temp2057:9] : &:r2057_16, r2057_15 #-----| Goto -> Block 4 -# 2010| Block 6 -# 2010| r2010_18(glval<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[#temp2010:9] : -# 2010| mu2010_23(TernaryPodObj) = Store[#temp2010:9] : &:r2010_22, r2010_21 +# 2057| Block 6 +# 2057| r2057_18(glval<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[#temp2057:9] : +# 2057| mu2057_23(TernaryPodObj) = Store[#temp2057:9] : &:r2057_22, r2057_21 #-----| Goto -> Block 4 -# 2011| Block 7 -# 2011| r2011_5(glval<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[z] : -# 2011| mu2011_10(TernaryPodObj) = Store[z] : &:r2011_9, r2011_8 -# 2012| r2012_1(glval<TernaryPodObj>) = 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<bool>) = 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<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[z] : +# 2058| mu2058_10(TernaryPodObj) = Store[z] : &:r2058_9, r2058_8 +# 2059| r2059_1(glval<TernaryPodObj>) = 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<bool>) = 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<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[#temp2011:9] : -# 2011| mu2011_16(TernaryPodObj) = Store[#temp2011:9] : &:r2011_15, r2011_14 +# 2058| Block 8 +# 2058| r2058_11(glval<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[#temp2058:9] : +# 2058| mu2058_16(TernaryPodObj) = Store[#temp2058:9] : &:r2058_15, r2058_14 #-----| Goto -> Block 7 -# 2011| Block 9 -# 2011| r2011_17(glval<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[#temp2011:9] : -# 2011| mu2011_22(TernaryPodObj) = Store[#temp2011:9] : &:r2011_21, r2011_20 +# 2058| Block 9 +# 2058| r2058_17(glval<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[#temp2058:9] : +# 2058| mu2058_22(TernaryPodObj) = Store[#temp2058:9] : &:r2058_21, r2058_20 #-----| Goto -> Block 7 -# 2012| Block 10 -# 2012| r2012_8(glval<TernaryPodObj>) = VariableAddress[#temp2012:10] : -# 2012| r2012_9(TernaryPodObj) = Load[#temp2012:10] : &:r2012_8, ~m? -# 2012| r2012_10(glval<TernaryPodObj>) = VariableAddress[z] : -# 2012| mu2012_11(TernaryPodObj) = Store[z] : &:r2012_10, r2012_9 -# 2012| r2012_12(glval<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[#temp2059:10] : +# 2059| r2059_9(TernaryPodObj) = Load[#temp2059:10] : &:r2059_8, ~m? +# 2059| r2059_10(glval<TernaryPodObj>) = VariableAddress[z] : +# 2059| mu2059_11(TernaryPodObj) = Store[z] : &:r2059_10, r2059_9 +# 2059| r2059_12(glval<TernaryPodObj>) = 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<TernaryPodObj>) = VariableAddress[x] : -# 2012| r2012_15(TernaryPodObj) = Load[x] : &:r2012_14, ~m? -# 2012| r2012_16(glval<TernaryPodObj>) = VariableAddress[#temp2012:10] : -# 2012| mu2012_17(TernaryPodObj) = Store[#temp2012:10] : &:r2012_16, r2012_15 +# 2059| Block 11 +# 2059| r2059_14(glval<TernaryPodObj>) = VariableAddress[x] : +# 2059| r2059_15(TernaryPodObj) = Load[x] : &:r2059_14, ~m? +# 2059| r2059_16(glval<TernaryPodObj>) = VariableAddress[#temp2059:10] : +# 2059| mu2059_17(TernaryPodObj) = Store[#temp2059:10] : &:r2059_16, r2059_15 #-----| Goto -> Block 10 -# 2012| Block 12 -# 2012| r2012_18(glval<TernaryPodObj>) = VariableAddress[y] : -# 2012| r2012_19(TernaryPodObj) = Load[y] : &:r2012_18, ~m? -# 2012| r2012_20(glval<TernaryPodObj>) = VariableAddress[#temp2012:10] : -# 2012| mu2012_21(TernaryPodObj) = Store[#temp2012:10] : &:r2012_20, r2012_19 +# 2059| Block 12 +# 2059| r2059_18(glval<TernaryPodObj>) = VariableAddress[y] : +# 2059| r2059_19(TernaryPodObj) = Load[y] : &:r2059_18, ~m? +# 2059| r2059_20(glval<TernaryPodObj>) = 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<unknown>) = VariableAddress[#this] : -# 2015| mu2015_5(glval<TernaryNonPodObj>) = InitializeParameter[#this] : &:r2015_4 -# 2015| r2015_6(glval<TernaryNonPodObj>) = 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<unknown>) = VariableAddress[#this] : +# 2062| mu2062_5(glval<TernaryNonPodObj>) = InitializeParameter[#this] : &:r2062_4 +# 2062| r2062_6(glval<TernaryNonPodObj>) = Load[#this] : &:r2062_4, ~m? +# 2062| mu2062_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2062_6 #-----| r0_1(glval<TernaryNonPodObj &>) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? @@ -11455,2478 +11473,2523 @@ ir.cpp: #-----| r0_8(glval<TernaryNonPodObj>) = 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<TernaryNonPodObj &>) = 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<TernaryNonPodObj &>) = 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<unknown>) = VariableAddress[#this] : -# 2015| mu2015_5(glval<TernaryNonPodObj>) = InitializeParameter[#this] : &:r2015_4 -# 2015| r2015_6(glval<TernaryNonPodObj>) = 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<unknown>) = VariableAddress[#this] : +# 2062| mu2062_5(glval<TernaryNonPodObj>) = InitializeParameter[#this] : &:r2062_4 +# 2062| r2062_6(glval<TernaryNonPodObj>) = 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<unknown>) = VariableAddress[#this] : -# 2015| mu2015_5(glval<TernaryNonPodObj>) = InitializeParameter[#this] : &:r2015_4 -# 2015| r2015_6(glval<TernaryNonPodObj>) = 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<unknown>) = VariableAddress[#this] : +# 2062| mu2062_5(glval<TernaryNonPodObj>) = InitializeParameter[#this] : &:r2062_4 +# 2062| r2062_6(glval<TernaryNonPodObj>) = Load[#this] : &:r2062_4, ~m? +# 2062| mu2062_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2062_6 #-----| r0_1(glval<TernaryNonPodObj &>) = 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<unknown>) = VariableAddress[#this] : -# 2016| mu2016_5(glval<TernaryNonPodObj>) = InitializeParameter[#this] : &:r2016_4 -# 2016| r2016_6(glval<TernaryNonPodObj>) = 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<unknown>) = VariableAddress[#this] : +# 2063| mu2063_5(glval<TernaryNonPodObj>) = InitializeParameter[#this] : &:r2063_4 +# 2063| r2063_6(glval<TernaryNonPodObj>) = 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<bool>) = VariableAddress[a] : -# 2019| mu2019_5(bool) = InitializeParameter[a] : &:r2019_4 -# 2019| r2019_6(glval<TernaryNonPodObj>) = VariableAddress[x] : -# 2019| mu2019_7(TernaryNonPodObj) = InitializeParameter[x] : &:r2019_6 -# 2019| r2019_8(glval<TernaryNonPodObj>) = VariableAddress[y] : -# 2019| mu2019_9(TernaryNonPodObj) = InitializeParameter[y] : &:r2019_8 -# 2019| r2019_10(glval<TernaryNonPodObj>) = VariableAddress[z] : -# 2019| mu2019_11(TernaryNonPodObj) = InitializeParameter[z] : &:r2019_10 -# 2020| r2020_1(glval<TernaryNonPodObj>) = VariableAddress[z] : -# 2020| r2020_2(glval<unknown>) = FunctionAddress[operator=] : -# 2020| r2020_3(glval<bool>) = 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<bool>) = VariableAddress[a] : +# 2066| mu2066_5(bool) = InitializeParameter[a] : &:r2066_4 +# 2066| r2066_6(glval<TernaryNonPodObj>) = VariableAddress[x] : +# 2066| mu2066_7(TernaryNonPodObj) = InitializeParameter[x] : &:r2066_6 +# 2066| r2066_8(glval<TernaryNonPodObj>) = VariableAddress[y] : +# 2066| mu2066_9(TernaryNonPodObj) = InitializeParameter[y] : &:r2066_8 +# 2066| r2066_10(glval<TernaryNonPodObj>) = VariableAddress[z] : +# 2066| mu2066_11(TernaryNonPodObj) = InitializeParameter[z] : &:r2066_10 +# 2067| r2067_1(glval<TernaryNonPodObj>) = VariableAddress[z] : +# 2067| r2067_2(glval<unknown>) = FunctionAddress[operator=] : +# 2067| r2067_3(glval<bool>) = 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<unknown>) = VariableAddress[#temp2020:9] : -# 2020| r2020_7(glval<TernaryNonPodObj>) = Load[#temp2020:9] : &:r2020_6, ~m? -# 2020| r2020_8(glval<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = CopyValue : r2020_10 -# 2021| r2021_1(glval<TernaryNonPodObj>) = VariableAddress[z] : -# 2021| r2021_2(glval<unknown>) = FunctionAddress[operator=] : -# 2021| r2021_3(glval<TernaryNonPodObj>) = VariableAddress[#temp2021:9] : -# 2021| r2021_4(glval<bool>) = 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<unknown>) = VariableAddress[#temp2067:9] : +# 2067| r2067_7(glval<TernaryNonPodObj>) = Load[#temp2067:9] : &:r2067_6, ~m? +# 2067| r2067_8(glval<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = CopyValue : r2067_10 +# 2068| r2068_1(glval<TernaryNonPodObj>) = VariableAddress[z] : +# 2068| r2068_2(glval<unknown>) = FunctionAddress[operator=] : +# 2068| r2068_3(glval<TernaryNonPodObj>) = VariableAddress[#temp2068:9] : +# 2068| r2068_4(glval<bool>) = 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<TernaryNonPodObj>) = VariableAddress[x] : -# 2020| r2020_17(glval<unknown>) = VariableAddress[#temp2020:9] : -# 2020| mu2020_18(glval<TernaryNonPodObj>) = Store[#temp2020:9] : &:r2020_17, r2020_16 +# 2067| Block 2 +# 2067| r2067_16(glval<TernaryNonPodObj>) = VariableAddress[x] : +# 2067| r2067_17(glval<unknown>) = VariableAddress[#temp2067:9] : +# 2067| mu2067_18(glval<TernaryNonPodObj>) = Store[#temp2067:9] : &:r2067_17, r2067_16 #-----| Goto -> Block 1 -# 2020| Block 3 -# 2020| r2020_19(glval<TernaryNonPodObj>) = VariableAddress[y] : -# 2020| r2020_20(glval<unknown>) = VariableAddress[#temp2020:9] : -# 2020| mu2020_21(glval<TernaryNonPodObj>) = Store[#temp2020:9] : &:r2020_20, r2020_19 +# 2067| Block 3 +# 2067| r2067_19(glval<TernaryNonPodObj>) = VariableAddress[y] : +# 2067| r2067_20(glval<unknown>) = VariableAddress[#temp2067:9] : +# 2067| mu2067_21(glval<TernaryNonPodObj>) = Store[#temp2067:9] : &:r2067_20, r2067_19 #-----| Goto -> Block 1 -# 2021| Block 4 -# 2021| r2021_7(glval<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = CopyValue : r2021_12 -# 2022| r2022_1(glval<TernaryNonPodObj>) = VariableAddress[z] : -# 2022| r2022_2(glval<unknown>) = FunctionAddress[operator=] : -# 2022| r2022_3(glval<TernaryNonPodObj>) = VariableAddress[#temp2022:9] : -# 2022| r2022_4(glval<bool>) = 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<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = CopyValue : r2068_12 +# 2069| r2069_1(glval<TernaryNonPodObj>) = VariableAddress[z] : +# 2069| r2069_2(glval<unknown>) = FunctionAddress[operator=] : +# 2069| r2069_3(glval<TernaryNonPodObj>) = VariableAddress[#temp2069:9] : +# 2069| r2069_4(glval<bool>) = 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<TernaryNonPodObj>) = VariableAddress[#temp2021:13] : -# 2021| mu2021_19(TernaryNonPodObj) = Uninitialized[#temp2021:13] : &:r2021_18 -# 2021| r2021_20(glval<unknown>) = FunctionAddress[TernaryNonPodObj] : -# 2021| r2021_21(glval<TernaryNonPodObj>) = VariableAddress[x] : -# 2021| r2021_22(glval<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = VariableAddress[#temp2021:9] : -# 2021| mu2021_30(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_29, r2021_28 +# 2068| Block 5 +# 2068| r2068_18(glval<TernaryNonPodObj>) = VariableAddress[#temp2068:13] : +# 2068| mu2068_19(TernaryNonPodObj) = Uninitialized[#temp2068:13] : &:r2068_18 +# 2068| r2068_20(glval<unknown>) = FunctionAddress[TernaryNonPodObj] : +# 2068| r2068_21(glval<TernaryNonPodObj>) = VariableAddress[x] : +# 2068| r2068_22(glval<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = VariableAddress[#temp2068:9] : +# 2068| mu2068_30(TernaryNonPodObj) = Store[#temp2068:9] : &:r2068_29, r2068_28 #-----| Goto -> Block 4 -# 2021| Block 6 -# 2021| r2021_31(glval<TernaryNonPodObj>) = VariableAddress[#temp2021:17] : -# 2021| mu2021_32(TernaryNonPodObj) = Uninitialized[#temp2021:17] : &:r2021_31 -# 2021| r2021_33(glval<unknown>) = 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<TernaryNonPodObj>) = VariableAddress[#temp2021:9] : -# 2021| mu2021_39(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_38, r2021_37 +# 2068| Block 6 +# 2068| r2068_31(glval<TernaryNonPodObj>) = VariableAddress[#temp2068:17] : +# 2068| mu2068_32(TernaryNonPodObj) = Uninitialized[#temp2068:17] : &:r2068_31 +# 2068| r2068_33(glval<unknown>) = 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<TernaryNonPodObj>) = VariableAddress[#temp2068:9] : +# 2068| mu2068_39(TernaryNonPodObj) = Store[#temp2068:9] : &:r2068_38, r2068_37 #-----| Goto -> Block 4 -# 2022| Block 7 -# 2022| r2022_7(glval<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = CopyValue : r2022_12 -# 2023| r2023_1(glval<TernaryNonPodObj>) = VariableAddress[z] : -# 2023| r2023_2(glval<unknown>) = FunctionAddress[operator=] : -# 2023| r2023_3(glval<bool>) = 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<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = CopyValue : r2069_12 +# 2070| r2070_1(glval<TernaryNonPodObj>) = VariableAddress[z] : +# 2070| r2070_2(glval<unknown>) = FunctionAddress[operator=] : +# 2070| r2070_3(glval<bool>) = 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<TernaryNonPodObj>) = VariableAddress[#temp2022:13] : -# 2022| mu2022_19(TernaryNonPodObj) = Uninitialized[#temp2022:13] : &:r2022_18 -# 2022| r2022_20(glval<unknown>) = 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<TernaryNonPodObj>) = VariableAddress[#temp2022:9] : -# 2022| mu2022_26(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_25, r2022_24 +# 2069| Block 8 +# 2069| r2069_18(glval<TernaryNonPodObj>) = VariableAddress[#temp2069:13] : +# 2069| mu2069_19(TernaryNonPodObj) = Uninitialized[#temp2069:13] : &:r2069_18 +# 2069| r2069_20(glval<unknown>) = 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<TernaryNonPodObj>) = VariableAddress[#temp2069:9] : +# 2069| mu2069_26(TernaryNonPodObj) = Store[#temp2069:9] : &:r2069_25, r2069_24 #-----| Goto -> Block 7 -# 2022| Block 9 -# 2022| r2022_27(glval<TernaryNonPodObj>) = VariableAddress[#temp2022:34] : -# 2022| mu2022_28(TernaryNonPodObj) = Uninitialized[#temp2022:34] : &:r2022_27 -# 2022| r2022_29(glval<unknown>) = 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<TernaryNonPodObj>) = VariableAddress[#temp2022:9] : -# 2022| mu2022_35(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_34, r2022_33 +# 2069| Block 9 +# 2069| r2069_27(glval<TernaryNonPodObj>) = VariableAddress[#temp2069:34] : +# 2069| mu2069_28(TernaryNonPodObj) = Uninitialized[#temp2069:34] : &:r2069_27 +# 2069| r2069_29(glval<unknown>) = 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<TernaryNonPodObj>) = VariableAddress[#temp2069:9] : +# 2069| mu2069_35(TernaryNonPodObj) = Store[#temp2069:9] : &:r2069_34, r2069_33 #-----| Goto -> Block 7 -# 2023| Block 10 -# 2023| r2023_6(glval<unknown>) = VariableAddress[#temp2023:10] : -# 2023| r2023_7(glval<TernaryNonPodObj>) = Load[#temp2023:10] : &:r2023_6, ~m? -# 2023| r2023_8(glval<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = CopyValue : r2023_10 -# 2023| r2023_16(glval<unknown>) = FunctionAddress[operator=] : -# 2023| r2023_17(glval<TernaryNonPodObj>) = VariableAddress[#temp2023:23] : -# 2023| mu2023_18(TernaryNonPodObj) = Uninitialized[#temp2023:23] : &:r2023_17 -# 2023| r2023_19(glval<unknown>) = 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<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = 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<unknown>) = VariableAddress[#temp2070:10] : +# 2070| r2070_7(glval<TernaryNonPodObj>) = Load[#temp2070:10] : &:r2070_6, ~m? +# 2070| r2070_8(glval<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = CopyValue : r2070_10 +# 2070| r2070_16(glval<unknown>) = FunctionAddress[operator=] : +# 2070| r2070_17(glval<TernaryNonPodObj>) = VariableAddress[#temp2070:23] : +# 2070| mu2070_18(TernaryNonPodObj) = Uninitialized[#temp2070:23] : &:r2070_17 +# 2070| r2070_19(glval<unknown>) = 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<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = 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<TernaryNonPodObj>) = VariableAddress[x] : -# 2023| r2023_32(glval<unknown>) = VariableAddress[#temp2023:10] : -# 2023| mu2023_33(glval<TernaryNonPodObj>) = Store[#temp2023:10] : &:r2023_32, r2023_31 +# 2070| Block 11 +# 2070| r2070_31(glval<TernaryNonPodObj>) = VariableAddress[x] : +# 2070| r2070_32(glval<unknown>) = VariableAddress[#temp2070:10] : +# 2070| mu2070_33(glval<TernaryNonPodObj>) = Store[#temp2070:10] : &:r2070_32, r2070_31 #-----| Goto -> Block 10 -# 2023| Block 12 -# 2023| r2023_34(glval<TernaryNonPodObj>) = VariableAddress[y] : -# 2023| r2023_35(glval<unknown>) = VariableAddress[#temp2023:10] : -# 2023| mu2023_36(glval<TernaryNonPodObj>) = Store[#temp2023:10] : &:r2023_35, r2023_34 +# 2070| Block 12 +# 2070| r2070_34(glval<TernaryNonPodObj>) = VariableAddress[y] : +# 2070| r2070_35(glval<unknown>) = VariableAddress[#temp2070:10] : +# 2070| mu2070_36(glval<TernaryNonPodObj>) = 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<unsigned int>) = VariableAddress[x] : -# 2028| mu2028_5(unsigned int) = InitializeParameter[x] : &:r2028_4 -# 2029| r2029_1(glval<unsigned int>) = VariableAddress[y] : -# 2029| mu2029_2(unsigned int) = Uninitialized[y] : &:r2029_1 -# 2030| r2030_1(glval<unsigned int>) = 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<unsigned int>) = VariableAddress[x] : +# 2075| mu2075_5(unsigned int) = InitializeParameter[x] : &:r2075_4 +# 2076| r2076_1(glval<unsigned int>) = VariableAddress[y] : +# 2076| mu2076_2(unsigned int) = Uninitialized[y] : &:r2076_1 +# 2077| r2077_1(glval<unsigned int>) = 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<unsigned int>) = VariableAddress[#temp2030:7] : -# 2030| r2030_7(unsigned int) = Load[#temp2030:7] : &:r2030_6, ~m? -# 2030| r2030_8(glval<unsigned int>) = VariableAddress[y] : -# 2030| mu2030_9(unsigned int) = Store[y] : &:r2030_8, r2030_7 -# 2033| r2033_1(glval<unsigned int>) = VariableAddress[#return] : -# 2033| mu2033_2(unsigned int) = Uninitialized[#return] : &:r2033_1 -# 2028| r2028_6(glval<unsigned int>) = 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<unsigned int>) = VariableAddress[#temp2077:7] : +# 2077| r2077_7(unsigned int) = Load[#temp2077:7] : &:r2077_6, ~m? +# 2077| r2077_8(glval<unsigned int>) = VariableAddress[y] : +# 2077| mu2077_9(unsigned int) = Store[y] : &:r2077_8, r2077_7 +# 2080| r2080_1(glval<unsigned int>) = VariableAddress[#return] : +# 2080| mu2080_2(unsigned int) = Uninitialized[#return] : &:r2080_1 +# 2075| r2075_6(glval<unsigned int>) = 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<unknown>) = FunctionAddress[CommaTestHelper] : -# 2031| r2031_2(glval<unsigned int>) = 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<unsigned int>) = VariableAddress[x] : -# 2031| r2031_7(unsigned int) = Load[x] : &:r2031_6, ~m? -# 2031| r2031_8(unsigned int) = CopyValue : r2031_7 -# 2030| r2030_10(glval<unsigned int>) = VariableAddress[#temp2030:7] : -# 2030| mu2030_11(unsigned int) = Store[#temp2030:7] : &:r2030_10, r2031_8 +# 2078| Block 2 +# 2078| r2078_1(glval<unknown>) = FunctionAddress[CommaTestHelper] : +# 2078| r2078_2(glval<unsigned int>) = 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<unsigned int>) = VariableAddress[x] : +# 2078| r2078_7(unsigned int) = Load[x] : &:r2078_6, ~m? +# 2078| r2078_8(unsigned int) = CopyValue : r2078_7 +# 2077| r2077_10(glval<unsigned int>) = 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<unknown>) = FunctionAddress[CommaTestHelper] : -# 2032| r2032_2(glval<unsigned int>) = 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<unsigned int>) = VariableAddress[#temp2030:7] : -# 2030| mu2030_13(unsigned int) = Store[#temp2030:7] : &:r2030_12, r2032_8 +# 2079| Block 3 +# 2079| r2079_1(glval<unknown>) = FunctionAddress[CommaTestHelper] : +# 2079| r2079_2(glval<unsigned int>) = 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<unsigned int>) = 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<int *>) = VariableAddress[x] : -# 2036| r2036_2(glval<unknown>) = 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<int *>) = VariableAddress[x] : -# 2037| r2037_3(int *) = Load[x] : &:r2037_2, ~m? -# 2037| r2037_4(glval<int>) = CopyValue : r2037_3 -# 2037| mu2037_5(int) = Store[?] : &:r2037_4, r2037_1 -# 2038| r2038_1(glval<unknown>) = FunctionAddress[operator delete] : -# 2038| r2038_2(glval<int *>) = 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<int *>) = VariableAddress[x] : +# 2083| r2083_2(glval<unknown>) = 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<int *>) = VariableAddress[x] : +# 2084| r2084_3(int *) = Load[x] : &:r2084_2, ~m? +# 2084| r2084_4(glval<int>) = CopyValue : r2084_3 +# 2084| mu2084_5(int) = Store[?] : &:r2084_4, r2084_1 +# 2085| r2085_1(glval<unknown>) = FunctionAddress[operator delete] : +# 2085| r2085_2(glval<int *>) = 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<unknown>) = VariableAddress[#this] : -# 2041| mu2041_5(glval<Base2>) = InitializeParameter[#this] : &:r2041_4 -# 2041| r2041_6(glval<Base2>) = 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<unknown>) = VariableAddress[#this] : +# 2088| mu2088_5(glval<Base2>) = InitializeParameter[#this] : &:r2088_4 +# 2088| r2088_6(glval<Base2>) = 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<void *>) = 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<void *>) = 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<unknown>) = VariableAddress[#this] : -# 2045| mu2045_5(glval<Base2>) = InitializeParameter[#this] : &:r2045_4 -# 2045| r2045_6(glval<Base2>) = 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<unknown>) = VariableAddress[#this] : -# 2048| mu2048_5(glval<Derived2>) = InitializeParameter[#this] : &:r2048_4 -# 2048| r2048_6(glval<Derived2>) = Load[#this] : &:r2048_4, ~m? -# 2048| mu2048_7(Derived2) = InitializeIndirection[#this] : &:r2048_6 -# 2048| r2048_8(glval<Base2>) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2048_5 -# 2048| r2048_9(glval<unknown>) = 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<unknown>) = VariableAddress[#this] : -# 2051| mu2051_5(glval<Derived2>) = InitializeParameter[#this] : &:r2051_4 -# 2051| r2051_6(glval<Derived2>) = Load[#this] : &:r2051_4, ~m? -# 2051| mu2051_7(Derived2) = InitializeIndirection[#this] : &:r2051_6 -# 2051| v2051_8(void) = NoOp : -# 2051| r2051_9(glval<Base2>) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2051_5 -# 2051| r2051_10(glval<unknown>) = 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<void *>) = 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<Base2 *>) = VariableAddress[b1] : -# 2060| r2060_2(glval<unknown>) = 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<unknown>) = 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<unknown>) = VirtualDeleteFunctionAddress : -# 2061| r2061_2(glval<Base2 *>) = 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<Base2 *>) = VariableAddress[b2] : -# 2063| r2063_2(glval<unknown>) = 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<unknown>) = 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<unknown>) = VirtualDeleteFunctionAddress : -# 2064| r2064_2(glval<Base2 *>) = 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<Derived2 *>) = VariableAddress[d] : -# 2066| r2066_2(glval<unknown>) = 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<unknown>) = 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<unknown>) = VirtualDeleteFunctionAddress : -# 2067| r2067_2(glval<Derived2 *>) = 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<int>) = VariableAddress[#return] : -# 2068| mu2068_2(int) = Uninitialized[#return] : &:r2068_1 -# 2058| r2058_4(glval<int>) = 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<int>) = VariableAddress[x] : -# 2073| r2073_2(int) = Constant[116] : -# 2073| mu2073_3(int) = Store[x] : &:r2073_1, r2073_2 -# 2074| r2074_1(glval<unknown>) = 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<int>) = VariableAddress[x] : -# 2080| r2080_2(glval<unknown>) = 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<int>) = 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<unknown>) = 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<unknown>) = FunctionAddress[VoidFunc] : -# 2083| v2083_2(void) = Call[VoidFunc] : func:r2083_1 -# 2083| mu2083_3(unknown) = ^CallSideEffect : ~m? -# 2084| r2084_1(glval<int>) = VariableAddress[#return] : -# 2084| r2084_2(glval<int>) = 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<int>) = 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<unknown>) = FunctionAddress[VoidFunc] : -# 2088| v2088_2(void) = Call[VoidFunc] : func:r2088_1 -# 2088| mu2088_3(unknown) = ^CallSideEffect : ~m? -# 2089| r2089_1(glval<unknown>) = 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<int>) = VariableAddress[x] : -# 2093| r2093_2(glval<unknown>) = 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<int>) = 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<unknown>) = VariableAddress[#this] : +# 2092| mu2092_5(glval<Base2>) = InitializeParameter[#this] : &:r2092_4 +# 2092| r2092_6(glval<Base2>) = 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<unknown>) = 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<unknown>) = VariableAddress[#this] : +# 2095| mu2095_5(glval<Derived2>) = InitializeParameter[#this] : &:r2095_4 +# 2095| r2095_6(glval<Derived2>) = Load[#this] : &:r2095_4, ~m? +# 2095| mu2095_7(Derived2) = InitializeIndirection[#this] : &:r2095_6 +# 2095| r2095_8(glval<Base2>) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2095_5 +# 2095| r2095_9(glval<unknown>) = 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<unknown>) = FunctionAddress[VoidFunc] : -# 2096| v2096_2(void) = Call[VoidFunc] : func:r2096_1 -# 2096| mu2096_3(unknown) = ^CallSideEffect : ~m? -# 2097| r2097_1(glval<int>) = VariableAddress[#return] : -# 2097| r2097_2(glval<int>) = 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<int>) = 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<unknown>) = VariableAddress[#this] : +# 2098| mu2098_5(glval<Derived2>) = InitializeParameter[#this] : &:r2098_4 +# 2098| r2098_6(glval<Derived2>) = Load[#this] : &:r2098_4, ~m? +# 2098| mu2098_7(Derived2) = InitializeIndirection[#this] : &:r2098_6 +# 2098| v2098_8(void) = NoOp : +# 2098| r2098_9(glval<Base2>) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2098_5 +# 2098| r2098_10(glval<unknown>) = 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<unsigned long>) = VariableAddress[n] : -# 2100| mu2100_5(unsigned long) = InitializeParameter[n] : &:r2100_4 -# 2101| r2101_1(glval<unknown>) = FunctionAddress[operator new[]] : -# 2101| r2101_2(glval<unsigned long>) = 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<unknown>) = FunctionAddress[operator new[]] : -# 2102| r2102_2(glval<unsigned long>) = 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<unknown>) = FunctionAddress[operator new[]] : -# 2103| r2103_2(glval<unsigned long>) = 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<unknown>) = FunctionAddress[operator new[]] : -# 2104| r2104_2(glval<unsigned long>) = 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<unknown>) = FunctionAddress[operator new[]] : -# 2105| r2105_2(glval<unsigned long>) = 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<unknown>) = FunctionAddress[operator new[]] : -# 2106| r2106_2(glval<unsigned long>) = 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<void *>) = 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<char *>) = 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<char *>) = VariableAddress[end] : -# 2112| mu2112_2(char *) = Uninitialized[end] : &:r2112_1 -# 2113| r2113_1(glval<double>) = VariableAddress[d] : -# 2113| r2113_2(glval<unknown>) = FunctionAddress[strtod] : -# 2113| r2113_3(glval<char *>) = VariableAddress[s] : -# 2113| r2113_4(char *) = Load[s] : &:r2113_3, ~m? -# 2113| r2113_5(char *) = Convert : r2113_4 -# 2113| r2113_6(glval<char *>) = 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<char *>) = VariableAddress[#return] : -# 2114| r2114_2(glval<char *>) = 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<char *>) = 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<Base2 *>) = VariableAddress[b1] : +# 2107| r2107_2(glval<unknown>) = 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<unknown>) = 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<unknown>) = VirtualDeleteFunctionAddress : +# 2108| r2108_2(glval<Base2 *>) = 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<Base2 *>) = VariableAddress[b2] : +# 2110| r2110_2(glval<unknown>) = 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<unknown>) = 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<unknown>) = VirtualDeleteFunctionAddress : +# 2111| r2111_2(glval<Base2 *>) = 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<Derived2 *>) = VariableAddress[d] : +# 2113| r2113_2(glval<unknown>) = 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<unknown>) = 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<unknown>) = VirtualDeleteFunctionAddress : +# 2114| r2114_2(glval<Derived2 *>) = 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<int>) = VariableAddress[#return] : +# 2115| mu2115_2(int) = Uninitialized[#return] : &:r2115_1 +# 2105| r2105_4(glval<int>) = 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<HasOperatorBool>) = VariableAddress[b] : -# 2122| r2122_2(HasOperatorBool) = Constant[0] : -# 2122| mu2122_3(HasOperatorBool) = Store[b] : &:r2122_1, r2122_2 -# 2122| r2122_4(glval<HasOperatorBool>) = VariableAddress[b] : -# 2122| r2122_5(glval<unknown>) = 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<int>) = VariableAddress[x] : +# 2120| r2120_2(int) = Constant[116] : +# 2120| mu2120_3(int) = Store[x] : &:r2120_1, r2120_2 +# 2121| r2121_1(glval<unknown>) = 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<int>) = VariableAddress[x] : +# 2127| r2127_2(glval<unknown>) = 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<int>) = 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<unknown>) = 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<unknown>) = FunctionAddress[VoidFunc] : +# 2130| v2130_2(void) = Call[VoidFunc] : func:r2130_1 +# 2130| mu2130_3(unknown) = ^CallSideEffect : ~m? +# 2131| r2131_1(glval<int>) = VariableAddress[#return] : +# 2131| r2131_2(glval<int>) = 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<int>) = 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<unknown>) = FunctionAddress[VoidFunc] : +# 2135| v2135_2(void) = Call[VoidFunc] : func:r2135_1 +# 2135| mu2135_3(unknown) = ^CallSideEffect : ~m? +# 2136| r2136_1(glval<unknown>) = 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<int>) = VariableAddress[x] : +# 2140| r2140_2(glval<unknown>) = 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<int>) = 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<unknown>) = 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<unknown>) = FunctionAddress[VoidFunc] : +# 2143| v2143_2(void) = Call[VoidFunc] : func:r2143_1 +# 2143| mu2143_3(unknown) = ^CallSideEffect : ~m? +# 2144| r2144_1(glval<int>) = VariableAddress[#return] : +# 2144| r2144_2(glval<int>) = 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<int>) = 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<unknown>) = VariableAddress[#this] : -# 2125| mu2125_5(glval<ClassWithDestructor>) = InitializeParameter[#this] : &:r2125_4 -# 2125| r2125_6(glval<ClassWithDestructor>) = 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<unsigned long>) = VariableAddress[n] : +# 2147| mu2147_5(unsigned long) = InitializeParameter[n] : &:r2147_4 +# 2148| r2148_1(glval<unknown>) = FunctionAddress[operator new[]] : +# 2148| r2148_2(glval<unsigned long>) = 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<unknown>) = FunctionAddress[operator new[]] : +# 2149| r2149_2(glval<unsigned long>) = 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<unknown>) = FunctionAddress[operator new[]] : +# 2150| r2150_2(glval<unsigned long>) = 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<unknown>) = FunctionAddress[operator new[]] : +# 2151| r2151_2(glval<unsigned long>) = 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<unknown>) = FunctionAddress[operator new[]] : +# 2152| r2152_2(glval<unsigned long>) = 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<unknown>) = FunctionAddress[operator new[]] : +# 2153| r2153_2(glval<unsigned long>) = 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<char *>) = 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<char *>) = VariableAddress[end] : +# 2159| mu2159_2(char *) = Uninitialized[end] : &:r2159_1 +# 2160| r2160_1(glval<double>) = VariableAddress[d] : +# 2160| r2160_2(glval<unknown>) = FunctionAddress[strtod] : +# 2160| r2160_3(glval<char *>) = VariableAddress[s] : +# 2160| r2160_4(char *) = Load[s] : &:r2160_3, ~m? +# 2160| r2160_5(char *) = Convert : r2160_4 +# 2160| r2160_6(glval<char *>) = 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<char *>) = VariableAddress[#return] : +# 2161| r2161_2(glval<char *>) = 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<char *>) = 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<HasOperatorBool>) = VariableAddress[b] : +# 2169| r2169_2(HasOperatorBool) = Constant[0] : +# 2169| mu2169_3(HasOperatorBool) = Store[b] : &:r2169_1, r2169_2 +# 2169| r2169_4(glval<HasOperatorBool>) = VariableAddress[b] : +# 2169| r2169_5(glval<unknown>) = 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<unknown>) = VariableAddress[#this] : +# 2172| mu2172_5(glval<ClassWithDestructor>) = InitializeParameter[#this] : &:r2172_4 +# 2172| r2172_6(glval<ClassWithDestructor>) = Load[#this] : &:r2172_4, ~m? +# 2172| mu2172_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2172_6 #-----| r0_1(glval<ClassWithDestructor &>) = 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<char *>) = FieldAddress[x] : mu2125_5 -# 2125| r2125_9(glval<ClassWithDestructor &>) = VariableAddress[(unnamed parameter 0)] : -# 2125| r2125_10(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2125_9, ~m? -# 2125| r2125_11(glval<ClassWithDestructor>) = CopyValue : r2125_10 -# 2125| r2125_12(glval<char *>) = 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<char *>) = FieldAddress[x] : mu2172_5 +# 2172| r2172_9(glval<ClassWithDestructor &>) = VariableAddress[(unnamed parameter 0)] : +# 2172| r2172_10(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2172_9, ~m? +# 2172| r2172_11(glval<ClassWithDestructor>) = CopyValue : r2172_10 +# 2172| r2172_12(glval<char *>) = 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<unknown>) = VariableAddress[#this] : -# 2128| mu2128_5(glval<ClassWithDestructor>) = InitializeParameter[#this] : &:r2128_4 -# 2128| r2128_6(glval<ClassWithDestructor>) = Load[#this] : &:r2128_4, ~m? -# 2128| mu2128_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2128_6 -# 2128| r2128_8(glval<unknown>) = 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<unknown>) = VariableAddress[#this] : -# 2128| r2128_15(ClassWithDestructor *) = Load[#this] : &:r2128_14, ~m? -# 2128| r2128_16(glval<char *>) = 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<unknown>) = VariableAddress[#this] : +# 2175| mu2175_5(glval<ClassWithDestructor>) = InitializeParameter[#this] : &:r2175_4 +# 2175| r2175_6(glval<ClassWithDestructor>) = Load[#this] : &:r2175_4, ~m? +# 2175| mu2175_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2175_6 +# 2175| r2175_8(glval<unknown>) = 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<unknown>) = VariableAddress[#this] : +# 2175| r2175_15(ClassWithDestructor *) = Load[#this] : &:r2175_14, ~m? +# 2175| r2175_16(glval<char *>) = 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<unknown>) = VariableAddress[#this] : -# 2129| mu2129_5(glval<ClassWithDestructor>) = InitializeParameter[#this] : &:r2129_4 -# 2129| r2129_6(glval<ClassWithDestructor>) = Load[#this] : &:r2129_4, ~m? -# 2129| mu2129_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2129_6 -# 2129| r2129_8(glval<unknown>) = FunctionAddress[operator delete] : -# 2129| r2129_9(glval<unknown>) = VariableAddress[#this] : -# 2129| r2129_10(ClassWithDestructor *) = Load[#this] : &:r2129_9, ~m? -# 2129| r2129_11(glval<char *>) = 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<unknown>) = VariableAddress[#this] : +# 2176| mu2176_5(glval<ClassWithDestructor>) = InitializeParameter[#this] : &:r2176_4 +# 2176| r2176_6(glval<ClassWithDestructor>) = Load[#this] : &:r2176_4, ~m? +# 2176| mu2176_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2176_6 +# 2176| r2176_8(glval<unknown>) = FunctionAddress[operator delete] : +# 2176| r2176_9(glval<unknown>) = VariableAddress[#this] : +# 2176| r2176_10(ClassWithDestructor *) = Load[#this] : &:r2176_9, ~m? +# 2176| r2176_11(glval<char *>) = 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<unknown>) = VariableAddress[#this] : -# 2131| mu2131_5(glval<ClassWithDestructor>) = InitializeParameter[#this] : &:r2131_4 -# 2131| r2131_6(glval<ClassWithDestructor>) = Load[#this] : &:r2131_4, ~m? -# 2131| mu2131_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2131_6 -# 2131| r2131_8(glval<char>) = VariableAddress[y] : -# 2131| mu2131_9(char) = InitializeParameter[y] : &:r2131_8 -# 2131| r2131_10(glval<char>) = VariableAddress[y] : -# 2131| r2131_11(char) = Load[y] : &:r2131_10, ~m? -# 2131| r2131_12(glval<unknown>) = VariableAddress[#this] : -# 2131| r2131_13(ClassWithDestructor *) = Load[#this] : &:r2131_12, ~m? -# 2131| r2131_14(glval<char *>) = FieldAddress[x] : r2131_13 -# 2131| r2131_15(char *) = Load[?] : &:r2131_14, ~m? -# 2131| r2131_16(glval<char>) = 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<unknown>) = VariableAddress[#this] : +# 2178| mu2178_5(glval<ClassWithDestructor>) = InitializeParameter[#this] : &:r2178_4 +# 2178| r2178_6(glval<ClassWithDestructor>) = Load[#this] : &:r2178_4, ~m? +# 2178| mu2178_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2178_6 +# 2178| r2178_8(glval<char>) = VariableAddress[y] : +# 2178| mu2178_9(char) = InitializeParameter[y] : &:r2178_8 +# 2178| r2178_10(glval<char>) = VariableAddress[y] : +# 2178| r2178_11(char) = Load[y] : &:r2178_10, ~m? +# 2178| r2178_12(glval<unknown>) = VariableAddress[#this] : +# 2178| r2178_13(ClassWithDestructor *) = Load[#this] : &:r2178_12, ~m? +# 2178| r2178_14(glval<char *>) = FieldAddress[x] : r2178_13 +# 2178| r2178_15(char *) = Load[?] : &:r2178_14, ~m? +# 2178| r2178_16(glval<char>) = 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<unknown>) = VariableAddress[#this] : -# 2132| mu2132_5(glval<ClassWithDestructor>) = InitializeParameter[#this] : &:r2132_4 -# 2132| r2132_6(glval<ClassWithDestructor>) = Load[#this] : &:r2132_4, ~m? -# 2132| mu2132_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2132_6 -# 2132| r2132_8(glval<char>) = VariableAddress[#return] : -# 2132| r2132_9(glval<unknown>) = VariableAddress[#this] : -# 2132| r2132_10(ClassWithDestructor *) = Load[#this] : &:r2132_9, ~m? -# 2132| r2132_11(glval<char *>) = 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<char>) = 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<bool>) = 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<bool>) = VariableAddress[b] : -# 2137| mu2137_5(bool) = InitializeParameter[b] : &:r2137_4 -# 2137| r2137_6(glval<char>) = VariableAddress[c] : -# 2137| mu2137_7(char) = InitializeParameter[c] : &:r2137_6 -# 2138| r2138_1(glval<ClassWithDestructor>) = VariableAddress[x] : -# 2138| mu2138_2(ClassWithDestructor) = Uninitialized[x] : &:r2138_1 -# 2138| r2138_3(glval<unknown>) = 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<bool>) = 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<ClassWithDestructor>) = VariableAddress[x] : -# 2139| r2139_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : -# 2139| r2139_9(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : -# 2141| mu2141_2(ClassWithDestructor) = Uninitialized[x] : &:r2141_1 -# 2141| r2141_3(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : -# 2142| r2142_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : -# 2142| r2142_9(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : -# 2144| mu2144_2(ClassWithDestructor) = Uninitialized[x] : &:r2144_1 -# 2144| r2144_3(glval<unknown>) = 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<char>) = 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<ClassWithDestructor>) = VariableAddress[x] : -# 2146| r2146_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : -# 2149| r2149_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : -# 2151| r2151_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : -# 2153| mu2153_2(ClassWithDestructor) = Uninitialized[x] : &:r2153_1 -# 2153| r2153_3(glval<unknown>) = 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<vector<ClassWithDestructor>>) = VariableAddress[ys] : -# 2154| mu2154_2(vector<ClassWithDestructor>) = Uninitialized[ys] : &:r2154_1 -# 2154| r2154_3(glval<unknown>) = FunctionAddress[vector] : -# 2154| r2154_4(glval<ClassWithDestructor>) = VariableAddress[#temp2154:40] : -# 2154| r2154_5(glval<ClassWithDestructor>) = 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<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2154_1 -# 2154| r2154_12(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2154| r2154_13(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : -# 2154| r2154_14(vector<ClassWithDestructor> &) = CopyValue : r2154_13 -# 2154| mu2154_15(vector<ClassWithDestructor> &) = Store[(__range)] : &:r2154_12, r2154_14 -# 2154| r2154_16(glval<iterator>) = VariableAddress[(__begin)] : -# 2154| r2154_17(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2154| r2154_18(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2154_17, ~m? -#-----| r0_1(glval<vector<ClassWithDestructor>>) = CopyValue : r2154_18 -#-----| r0_2(glval<vector<ClassWithDestructor>>) = Convert : r0_1 -# 2154| r2154_19(glval<unknown>) = 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<iterator>) = VariableAddress[(__end)] : -# 2154| r2154_24(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2154| r2154_25(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2154_24, ~m? -#-----| r0_4(glval<vector<ClassWithDestructor>>) = CopyValue : r2154_25 -#-----| r0_5(glval<vector<ClassWithDestructor>>) = Convert : r0_4 -# 2154| r2154_26(glval<unknown>) = 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<iterator>) = VariableAddress[(__begin)] : -#-----| r0_7(glval<iterator>) = Convert : r2154_30 -# 2154| r2154_31(glval<unknown>) = FunctionAddress[operator!=] : -# 2154| r2154_32(glval<iterator>) = 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<ClassWithDestructor>) = VariableAddress[y] : -# 2154| r2154_38(glval<iterator>) = VariableAddress[(__begin)] : -#-----| r0_9(glval<iterator>) = Convert : r2154_38 -# 2154| r2154_39(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[y] : -# 2155| r2155_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[y] : -# 2154| r2154_45(glval<unknown>) = 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<iterator>) = VariableAddress[(__begin)] : -# 2154| r2154_51(glval<unknown>) = 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<iterator>) = CopyValue : r2154_52 -#-----| Goto (back edge) -> Block 11 - -# 2154| Block 13 -# 2154| r2154_57(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : -# 2154| r2154_58(glval<unknown>) = 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<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2154_57 -#-----| Goto -> Block 14 - -# 2157| Block 14 -# 2157| r2157_1(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : -# 2157| mu2157_2(vector<ClassWithDestructor>) = Uninitialized[ys] : &:r2157_1 -# 2157| r2157_3(glval<unknown>) = FunctionAddress[vector] : -# 2157| r2157_4(glval<ClassWithDestructor>) = VariableAddress[#temp2157:40] : -# 2157| r2157_5(glval<ClassWithDestructor>) = 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<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2157_1 -# 2157| r2157_12(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2157| r2157_13(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : -# 2157| r2157_14(vector<ClassWithDestructor> &) = CopyValue : r2157_13 -# 2157| mu2157_15(vector<ClassWithDestructor> &) = Store[(__range)] : &:r2157_12, r2157_14 -# 2157| r2157_16(glval<iterator>) = VariableAddress[(__begin)] : -# 2157| r2157_17(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2157| r2157_18(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2157_17, ~m? -#-----| r0_11(glval<vector<ClassWithDestructor>>) = CopyValue : r2157_18 -#-----| r0_12(glval<vector<ClassWithDestructor>>) = Convert : r0_11 -# 2157| r2157_19(glval<unknown>) = 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<iterator>) = VariableAddress[(__end)] : -# 2157| r2157_24(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2157| r2157_25(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2157_24, ~m? -#-----| r0_14(glval<vector<ClassWithDestructor>>) = CopyValue : r2157_25 -#-----| r0_15(glval<vector<ClassWithDestructor>>) = Convert : r0_14 -# 2157| r2157_26(glval<unknown>) = 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<iterator>) = VariableAddress[(__begin)] : -#-----| r0_17(glval<iterator>) = Convert : r2157_30 -# 2157| r2157_31(glval<unknown>) = FunctionAddress[operator!=] : -# 2157| r2157_32(glval<iterator>) = 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<ClassWithDestructor>) = VariableAddress[y] : -# 2157| r2157_38(glval<iterator>) = VariableAddress[(__begin)] : -#-----| r0_19(glval<iterator>) = Convert : r2157_38 -# 2157| r2157_39(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[y] : -# 2158| r2158_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[y] : -# 2159| r2159_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[y] : -# 2157| r2157_45(glval<unknown>) = 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<vector<ClassWithDestructor>>) = VariableAddress[ys] : -# 2157| r2157_51(glval<unknown>) = 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<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2157_50 -# 2172| r2172_1(glval<ClassWithDestructor>) = VariableAddress[x] : -# 2172| r2172_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[y] : -# 2157| r2157_57(glval<unknown>) = 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<iterator>) = VariableAddress[(__begin)] : -# 2157| r2157_63(glval<unknown>) = 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<iterator>) = CopyValue : r2157_64 -#-----| Goto (back edge) -> Block 15 - -# 2157| Block 19 -# 2157| r2157_69(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : -# 2157| r2157_70(glval<unknown>) = 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<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2157_69 -#-----| Goto -> Block 20 - -# 2163| Block 20 -# 2163| r2163_1(glval<vector<int>>) = VariableAddress[ys] : -# 2163| mu2163_2(vector<int>) = Uninitialized[ys] : &:r2163_1 -# 2163| r2163_3(glval<unknown>) = 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<int>) = ^IndirectMayWriteSideEffect[-1] : &:r2163_1 -# 2163| r2163_8(glval<vector<int> &>) = VariableAddress[(__range)] : -# 2163| r2163_9(glval<vector<int>>) = VariableAddress[ys] : -# 2163| r2163_10(vector<int> &) = CopyValue : r2163_9 -# 2163| mu2163_11(vector<int> &) = Store[(__range)] : &:r2163_8, r2163_10 -# 2163| r2163_12(glval<iterator>) = VariableAddress[(__begin)] : -# 2163| r2163_13(glval<vector<int> &>) = VariableAddress[(__range)] : -# 2163| r2163_14(vector<int> &) = Load[(__range)] : &:r2163_13, ~m? -#-----| r0_21(glval<vector<int>>) = CopyValue : r2163_14 -#-----| r0_22(glval<vector<int>>) = Convert : r0_21 -# 2163| r2163_15(glval<unknown>) = 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<iterator>) = VariableAddress[(__end)] : -# 2163| r2163_20(glval<vector<int> &>) = VariableAddress[(__range)] : -# 2163| r2163_21(vector<int> &) = Load[(__range)] : &:r2163_20, ~m? -#-----| r0_24(glval<vector<int>>) = CopyValue : r2163_21 -#-----| r0_25(glval<vector<int>>) = Convert : r0_24 -# 2163| r2163_22(glval<unknown>) = 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<iterator>) = VariableAddress[(__begin)] : -#-----| r0_27(glval<iterator>) = Convert : r2163_26 -# 2163| r2163_27(glval<unknown>) = FunctionAddress[operator!=] : -# 2163| r2163_28(glval<iterator>) = 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<iterator>) = VariableAddress[(__begin)] : -# 2163| r2163_34(glval<unknown>) = 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<iterator>) = CopyValue : r2163_35 -#-----| Goto (back edge) -> Block 21 - -# 2163| Block 23 -# 2163| r2163_40(glval<int>) = VariableAddress[y] : -# 2163| r2163_41(glval<iterator>) = VariableAddress[(__begin)] : -#-----| r0_29(glval<iterator>) = Convert : r2163_41 -# 2163| r2163_42(glval<unknown>) = 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<int>) = 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<vector<int>>) = VariableAddress[ys] : -# 2163| r2163_48(glval<unknown>) = 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<int>) = ^IndirectMayWriteSideEffect[-1] : &:r2163_47 -# 2172| r2172_7(glval<ClassWithDestructor>) = VariableAddress[x] : -# 2172| r2172_8(glval<unknown>) = 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<vector<int>>) = VariableAddress[ys] : -# 2163| r2163_54(glval<unknown>) = 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<int>) = ^IndirectMayWriteSideEffect[-1] : &:r2163_53 -#-----| Goto -> Block 26 - -# 2168| Block 26 -# 2168| r2168_1(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : -# 2168| mu2168_2(vector<ClassWithDestructor>) = Uninitialized[ys] : &:r2168_1 -# 2168| r2168_3(glval<unknown>) = FunctionAddress[vector] : -# 2168| r2168_4(glval<ClassWithDestructor>) = VariableAddress[#temp2168:40] : -# 2168| r2168_5(glval<ClassWithDestructor>) = 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<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2168_1 -# 2168| r2168_12(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2168| r2168_13(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : -# 2168| r2168_14(vector<ClassWithDestructor> &) = CopyValue : r2168_13 -# 2168| mu2168_15(vector<ClassWithDestructor> &) = Store[(__range)] : &:r2168_12, r2168_14 -# 2168| r2168_16(glval<iterator>) = VariableAddress[(__begin)] : -# 2168| r2168_17(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2168| r2168_18(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2168_17, ~m? -#-----| r0_31(glval<vector<ClassWithDestructor>>) = CopyValue : r2168_18 -#-----| r0_32(glval<vector<ClassWithDestructor>>) = Convert : r0_31 -# 2168| r2168_19(glval<unknown>) = 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<iterator>) = VariableAddress[(__end)] : -# 2168| r2168_24(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2168| r2168_25(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2168_24, ~m? -#-----| r0_34(glval<vector<ClassWithDestructor>>) = CopyValue : r2168_25 -#-----| r0_35(glval<vector<ClassWithDestructor>>) = Convert : r0_34 -# 2168| r2168_26(glval<unknown>) = 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<iterator>) = VariableAddress[(__begin)] : -#-----| r0_37(glval<iterator>) = Convert : r2168_30 -# 2168| r2168_31(glval<unknown>) = FunctionAddress[operator!=] : -# 2168| r2168_32(glval<iterator>) = 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<ClassWithDestructor>) = VariableAddress[y] : -# 2168| r2168_38(glval<iterator>) = VariableAddress[(__begin)] : -#-----| r0_39(glval<iterator>) = Convert : r2168_38 -# 2168| r2168_39(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[z1] : -# 2169| mu2169_2(ClassWithDestructor) = Uninitialized[z1] : &:r2169_1 -# 2169| r2169_3(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[z2] : -# 2170| mu2170_2(ClassWithDestructor) = Uninitialized[z2] : &:r2170_1 -# 2170| r2170_3(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[z2] : -# 2171| r2171_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[z1] : -# 2171| r2171_8(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[y] : -# 2168| r2168_45(glval<unknown>) = 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<iterator>) = VariableAddress[(__begin)] : -# 2168| r2168_51(glval<unknown>) = 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<iterator>) = CopyValue : r2168_52 -#-----| Goto (back edge) -> Block 27 - -# 2168| Block 29 -# 2168| r2168_57(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : -# 2168| r2168_58(glval<unknown>) = 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<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2168_57 -#-----| Goto -> Block 30 - -# 2172| Block 30 -# 2172| v2172_13(void) = NoOp : -# 2172| r2172_14(glval<ClassWithDestructor>) = VariableAddress[x] : -# 2172| r2172_15(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[a] : -# 2175| mu2175_2(ClassWithDestructor) = Uninitialized[a] : &:r2175_1 -# 2175| r2175_3(glval<unknown>) = 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<bool>) = 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<ClassWithDestructor>) = VariableAddress[b] : -#-----| r0_1(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[a] : -# 2177| r2177_3(glval<unknown>) = 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<bool>) = 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<unknown>) = VariableAddress[#this] : +# 2179| mu2179_5(glval<ClassWithDestructor>) = InitializeParameter[#this] : &:r2179_4 +# 2179| r2179_6(glval<ClassWithDestructor>) = Load[#this] : &:r2179_4, ~m? +# 2179| mu2179_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2179_6 +# 2179| r2179_8(glval<char>) = VariableAddress[#return] : +# 2179| r2179_9(glval<unknown>) = VariableAddress[#this] : +# 2179| r2179_10(ClassWithDestructor *) = Load[#this] : &:r2179_9, ~m? +# 2179| r2179_11(glval<char *>) = 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<char>) = 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<ClassWithDestructor>) = VariableAddress[a] : -#-----| r0_1(glval<unknown>) = 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<bool>) = 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<ClassWithDestructor>) = VariableAddress[b] : -# 2181| mu2181_2(ClassWithDestructor) = Uninitialized[b] : &:r2181_1 -# 2181| r2181_3(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[b] : -# 2182| r2182_3(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[a] : -# 2185| mu2185_2(ClassWithDestructor) = Uninitialized[a] : &:r2185_1 +# 2184| r2184_4(glval<bool>) = VariableAddress[b] : +# 2184| mu2184_5(bool) = InitializeParameter[b] : &:r2184_4 +# 2184| r2184_6(glval<char>) = VariableAddress[c] : +# 2184| mu2184_7(char) = InitializeParameter[c] : &:r2184_6 +# 2185| r2185_1(glval<ClassWithDestructor>) = VariableAddress[x] : +# 2185| mu2185_2(ClassWithDestructor) = Uninitialized[x] : &:r2185_1 # 2185| r2185_3(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[b] : -# 2186| mu2186_2(ClassWithDestructor) = Uninitialized[b] : &:r2186_1 -# 2186| r2186_3(glval<unknown>) = 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<bool>) = 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<ClassWithDestructor>) = VariableAddress[c] : -#-----| r0_1(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[b] : -# 2188| r2188_3(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[a] : -# 2188| r2188_9(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[global_class_with_destructor] : -# 2190| r2190_4(glval<unknown>) = 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>(ClassWithDestructor&) -# 2194| Block 0 -# 2194| v2194_1(void) = EnterFunction : -# 2194| mu2194_2(unknown) = AliasedDefinition : -# 2194| mu2194_3(unknown) = InitializeNonLocal : -# 2194| r2194_4(glval<ClassWithDestructor &>) = 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<ClassWithDestructor &>) = VariableAddress[#return] : -# 2194| r2194_9(glval<ClassWithDestructor &>) = VariableAddress[t] : -# 2194| r2194_10(ClassWithDestructor &) = Load[t] : &:r2194_9, ~m? -# 2194| r2194_11(glval<ClassWithDestructor>) = 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<ClassWithDestructor &>) = 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>(int&) -# 2194| Block 0 -# 2194| v2194_1(void) = EnterFunction : -# 2194| mu2194_2(unknown) = AliasedDefinition : -# 2194| mu2194_3(unknown) = InitializeNonLocal : -# 2194| r2194_4(glval<int &>) = 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<int &>) = VariableAddress[#return] : -# 2194| r2194_9(glval<int &>) = VariableAddress[t] : -# 2194| r2194_10(int &) = Load[t] : &:r2194_9, ~m? -# 2194| r2194_11(glval<int>) = 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<int &>) = 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>(ClassWithDestructor&) -# 2197| Block 0 -# 2197| v2197_1(void) = EnterFunction : -# 2197| mu2197_2(unknown) = AliasedDefinition : -# 2197| mu2197_3(unknown) = InitializeNonLocal : -# 2197| r2197_4(glval<ClassWithDestructor &>) = 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<unknown>) = FunctionAddress[get] : -# 2198| r2198_2(glval<ClassWithDestructor &>) = VariableAddress[t] : -# 2198| r2198_3(ClassWithDestructor &) = Load[t] : &:r2198_2, ~m? -# 2198| r2198_4(glval<ClassWithDestructor>) = 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<ClassWithDestructor>) = CopyValue : r2198_6 -# 2198| r2198_11(glval<unknown>) = 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>(int&) -# 2197| Block 0 -# 2197| v2197_1(void) = EnterFunction : -# 2197| mu2197_2(unknown) = AliasedDefinition : -# 2197| mu2197_3(unknown) = InitializeNonLocal : -# 2197| r2197_4(glval<int &>) = 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<unknown>) = FunctionAddress[get] : -# 2198| r2198_2(glval<int &>) = VariableAddress[t] : -# 2198| r2198_3(int &) = Load[t] : &:r2198_2, ~m? -# 2198| r2198_4(glval<int>) = 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<int>) = 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<ClassWithDestructor>) = VariableAddress[c] : -# 2202| mu2202_2(ClassWithDestructor) = Uninitialized[c] : &:r2202_1 -# 2202| r2202_3(glval<unknown>) = 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<unknown>) = FunctionAddress[call_destructor] : -# 2203| r2203_2(glval<ClassWithDestructor>) = 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<ClassWithDestructor>) = VariableAddress[c] : -# 2204| r2204_3(glval<unknown>) = 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<int>) = VariableAddress[i] : -# 2207| mu2207_2(int) = Uninitialized[i] : &:r2207_1 -# 2208| r2208_1(glval<unknown>) = FunctionAddress[call_destructor] : -# 2208| r2208_2(glval<int>) = 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<bool>) = VariableAddress[b] : -# 2212| mu2212_5(bool) = InitializeParameter[b] : &:r2212_4 -# 2214| r2214_1(glval<String>) = VariableAddress[s] : -# 2214| mu2214_2(String) = Uninitialized[s] : &:r2214_1 -# 2214| r2214_3(glval<unknown>) = 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<bool>) = VariableAddress[b] : -# 2215| r2215_2(bool) = Load[b] : &:r2215_1, ~m? -# 2215| v2215_3(void) = ConditionalBranch : r2215_2 -#-----| False -> Block 4 -#-----| 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<char *>) = VariableAddress[#throw2216:7] : -# 2216| r2216_2(glval<char[15]>) = 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 5 - -# 2218| Block 4 -# 2218| r2218_1(glval<String>) = VariableAddress[s2] : -# 2218| mu2218_2(String) = Uninitialized[s2] : &:r2218_1 -# 2218| r2218_3(glval<unknown>) = 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_1(glval<String>) = VariableAddress[s2] : -# 2219| r2219_2(glval<unknown>) = 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 -# 2219| r2219_7(glval<String>) = VariableAddress[s] : -# 2219| r2219_8(glval<unknown>) = 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 -#-----| Goto -> Block 10 - -# 2220| Block 5 -# 2220| v2220_1(void) = CatchByType[const char *] : -#-----| Exception -> Block 7 -#-----| Goto -> Block 6 - -# 2220| Block 6 -# 2220| r2220_2(glval<char *>) = 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<String>) = VariableAddress[#throw2221:5] : -# 2221| mu2221_2(String) = Uninitialized[#throw2221:5] : &:r2221_1 -# 2221| r2221_3(glval<unknown>) = FunctionAddress[String] : -# 2221| r2221_4(glval<char *>) = 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 7 -# 2223| v2223_1(void) = CatchByType[const String &] : -#-----| Exception -> Block 9 -#-----| Goto -> Block 8 - -# 2223| Block 8 -# 2223| r2223_2(glval<String &>) = 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 10 - -# 2225| Block 9 -# 2225| v2225_1(void) = CatchAny : -# 2226| v2226_1(void) = ReThrow : -#-----| Exception -> Block 2 - -# 2228| Block 10 -# 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<bool>) = VariableAddress[b] : -# 2230| mu2230_5(bool) = InitializeParameter[b] : &:r2230_4 -# 2231| r2231_1(glval<String>) = VariableAddress[s1] : -# 2231| mu2231_2(String) = Uninitialized[s1] : &:r2231_1 -# 2231| r2231_3(glval<unknown>) = 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<bool>) = 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<String>) = VariableAddress[s2] : -# 2233| mu2233_2(String) = Uninitialized[s2] : &:r2233_1 -# 2233| r2233_3(glval<unknown>) = 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<String>) = VariableAddress[s2] : -# 2234| r2234_2(glval<unknown>) = 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<String>) = VariableAddress[s3] : -# 2235| mu2235_2(String) = Uninitialized[s3] : &:r2235_1 -# 2235| r2235_3(glval<unknown>) = 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<String>) = VariableAddress[s3] : -# 2236| r2236_2(glval<unknown>) = 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<String>) = VariableAddress[s4] : -# 2237| mu2237_2(String) = Uninitialized[s4] : &:r2237_1 -# 2237| r2237_3(glval<unknown>) = 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<String>) = VariableAddress[s4] : -# 2238| r2238_3(glval<unknown>) = 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<String>) = VariableAddress[s1] : -# 2238| r2238_9(glval<unknown>) = 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<char>) = VariableAddress[c] : -# 2241| r2241_2(char) = Constant[97] : -# 2241| mu2241_3(char) = Store[c] : &:r2241_1, r2241_2 -# 2242| r2242_1(glval<String>) = VariableAddress[s] : -# 2242| mu2242_2(String) = Uninitialized[s] : &:r2242_1 -# 2242| r2242_3(glval<unknown>) = FunctionAddress[String] : -# 2242| r2242_4(glval<char[6]>) = 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<char>) = 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<bool>) = 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<String>) = VariableAddress[s2] : -# 2243| mu2243_2(String) = Uninitialized[s2] : &:r2243_1 -# 2243| r2243_3(glval<unknown>) = 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<String>) = VariableAddress[s2] : -# 2244| r2244_2(glval<unknown>) = 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<String>) = VariableAddress[s] : -# 2242| r2242_17(glval<unknown>) = 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<char>) = 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<String>) = VariableAddress[s] : -# 2242| r2242_25(glval<unknown>) = 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<vector<String> &&>) = VariableAddress[(__range)] : -# 2246| r2246_2(glval<vector<String>>) = VariableAddress[#temp2246:20] : -# 2246| mu2246_3(vector<String>) = Uninitialized[#temp2246:20] : &:r2246_2 -# 2246| r2246_4(glval<unknown>) = FunctionAddress[vector] : -# 2246| r2246_5(glval<String>) = VariableAddress[#temp2246:35] : -# 2246| mu2246_6(String) = Uninitialized[#temp2246:35] : &:r2246_5 -# 2246| r2246_7(glval<unknown>) = FunctionAddress[String] : -# 2246| r2246_8(glval<char[6]>) = 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<String>) = ^IndirectMayWriteSideEffect[-1] : &:r2246_2 -# 2246| r2246_18(vector<String> &) = CopyValue : r2246_2 -# 2246| mu2246_19(vector<String> &&) = Store[(__range)] : &:r2246_1, r2246_18 -# 2246| r2246_20(glval<iterator>) = VariableAddress[(__begin)] : -# 2246| r2246_21(glval<vector<String> &&>) = VariableAddress[(__range)] : -# 2246| r2246_22(vector<String> &&) = Load[(__range)] : &:r2246_21, ~m? -#-----| r0_1(glval<vector<String>>) = CopyValue : r2246_22 -#-----| r0_2(glval<vector<String>>) = Convert : r0_1 -# 2246| r2246_23(glval<unknown>) = 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<iterator>) = VariableAddress[(__end)] : -# 2246| r2246_28(glval<vector<String> &&>) = VariableAddress[(__range)] : -# 2246| r2246_29(vector<String> &&) = Load[(__range)] : &:r2246_28, ~m? -#-----| r0_4(glval<vector<String>>) = CopyValue : r2246_29 -#-----| r0_5(glval<vector<String>>) = Convert : r0_4 -# 2246| r2246_30(glval<unknown>) = 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<iterator>) = VariableAddress[(__begin)] : -#-----| r0_7(glval<iterator>) = Convert : r2246_34 -# 2246| r2246_35(glval<unknown>) = FunctionAddress[operator!=] : -# 2246| r2246_36(glval<iterator>) = 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<String>) = VariableAddress[s] : -# 2246| mu2246_42(String) = Uninitialized[s] : &:r2246_41 -# 2246| r2246_43(glval<unknown>) = FunctionAddress[String] : -# 2246| r2246_44(glval<iterator>) = VariableAddress[(__begin)] : -#-----| r0_9(glval<iterator>) = Convert : r2246_44 -# 2246| r2246_45(glval<unknown>) = 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<String>) = CopyValue : r2246_46 -# 2246| r2246_49(glval<String>) = 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<String>) = VariableAddress[s2] : -# 2247| mu2247_2(String) = Uninitialized[s2] : &:r2247_1 -# 2247| r2247_3(glval<unknown>) = 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<String>) = VariableAddress[s2] : -# 2248| r2248_2(glval<unknown>) = 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<String>) = VariableAddress[s] : -# 2246| r2246_56(glval<unknown>) = 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<iterator>) = VariableAddress[(__begin)] : -# 2246| r2246_62(glval<unknown>) = 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<iterator>) = CopyValue : r2246_63 -#-----| Goto (back edge) -> Block 4 - -# 2250| Block 6 -# 2250| r2250_1(glval<String>) = VariableAddress[s] : -# 2250| mu2250_2(String) = Uninitialized[s] : &:r2250_1 -# 2250| r2250_3(glval<unknown>) = FunctionAddress[String] : -# 2250| r2250_4(glval<char[6]>) = 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<String>) = VariableAddress[s2] : -# 2250| mu2250_11(String) = Uninitialized[s2] : &:r2250_10 -# 2250| r2250_12(glval<unknown>) = FunctionAddress[String] : -# 2250| r2250_13(glval<char[6]>) = 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<char>) = 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<char>) = VariableAddress[c] : -# 2251| mu2251_3(char) = Store[c] : &:r2251_2, r2251_1 -# 2250| r2250_25(glval<String>) = VariableAddress[s] : -# 2250| r2250_26(glval<unknown>) = 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<char>) = VariableAddress[c] : -# 2250| mu2250_32(char) = Store[c] : &:r2250_31, r2250_27 -#-----| Goto (back edge) -> Block 7 - -# 2250| Block 9 -# 2250| r2250_33(glval<String>) = VariableAddress[s2] : -# 2250| r2250_34(glval<unknown>) = 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<String>) = VariableAddress[s] : -# 2250| r2250_40(glval<unknown>) = 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<bool>) = VariableAddress[b] : -# 2255| mu2255_5(bool) = InitializeParameter[b] : &:r2255_4 -# 2256| r2256_1(glval<String>) = VariableAddress[s] : -# 2256| mu2256_2(String) = Uninitialized[s] : &:r2256_1 -# 2256| r2256_3(glval<unknown>) = FunctionAddress[String] : -# 2256| r2256_4(glval<char[6]>) = 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<bool>) = 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<int>) = 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<ClassWithDestructor>) = VariableAddress[x] : +# 2186| r2186_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : +# 2186| r2186_9(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : +# 2188| mu2188_2(ClassWithDestructor) = Uninitialized[x] : &:r2188_1 +# 2188| r2188_3(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : +# 2189| r2189_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : +# 2189| r2189_9(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : +# 2191| mu2191_2(ClassWithDestructor) = Uninitialized[x] : &:r2191_1 +# 2191| r2191_3(glval<unknown>) = 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<char>) = 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<ClassWithDestructor>) = VariableAddress[x] : +# 2193| r2193_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : +# 2196| r2196_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : +# 2198| r2198_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[x] : +# 2200| mu2200_2(ClassWithDestructor) = Uninitialized[x] : &:r2200_1 +# 2200| r2200_3(glval<unknown>) = 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<vector<ClassWithDestructor>>) = VariableAddress[ys] : +# 2201| mu2201_2(vector<ClassWithDestructor>) = Uninitialized[ys] : &:r2201_1 +# 2201| r2201_3(glval<unknown>) = FunctionAddress[vector] : +# 2201| r2201_4(glval<ClassWithDestructor>) = VariableAddress[#temp2201:45] : +# 2201| r2201_5(glval<ClassWithDestructor>) = 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<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2201_1 +# 2201| r2201_12(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2201| r2201_13(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : +# 2201| r2201_14(vector<ClassWithDestructor> &) = CopyValue : r2201_13 +# 2201| mu2201_15(vector<ClassWithDestructor> &) = Store[(__range)] : &:r2201_12, r2201_14 +# 2201| r2201_16(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +# 2201| r2201_17(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2201| r2201_18(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2201_17, ~m? +#-----| r0_1(glval<vector<ClassWithDestructor>>) = CopyValue : r2201_18 +#-----| r0_2(glval<vector<ClassWithDestructor>>) = Convert : r0_1 +# 2201| r2201_19(glval<unknown>) = FunctionAddress[begin] : +# 2201| r2201_20(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[begin] : func:r2201_19, this:r0_2 +# 2201| mu2201_21(unknown) = ^CallSideEffect : ~m? +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? +# 2201| mu2201_22(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__begin)] : &:r2201_16, r2201_20 +# 2201| r2201_23(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +# 2201| r2201_24(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2201| r2201_25(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2201_24, ~m? +#-----| r0_4(glval<vector<ClassWithDestructor>>) = CopyValue : r2201_25 +#-----| r0_5(glval<vector<ClassWithDestructor>>) = Convert : r0_4 +# 2201| r2201_26(glval<unknown>) = FunctionAddress[end] : +# 2201| r2201_27(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[end] : func:r2201_26, this:r0_5 +# 2201| mu2201_28(unknown) = ^CallSideEffect : ~m? +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? +# 2201| mu2201_29(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__end)] : &:r2201_23, r2201_27 +#-----| Goto -> Block 11 + +# 2201| Block 11 +# 2201| r2201_30(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_7(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2201_30 +# 2201| r2201_31(glval<unknown>) = FunctionAddress[operator!=] : +#-----| r0_8(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[#temp0:0] : +#-----| mu0_9(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Uninitialized[#temp0:0] : &:r0_8 +# 2201| r2201_32(glval<unknown>) = FunctionAddress[iterator] : +# 2201| r2201_33(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +#-----| r0_10(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2201_33 +#-----| r0_11(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = CopyValue : r0_10 +# 2201| v2201_34(void) = Call[iterator] : func:r2201_32, this:r0_8, 0:r0_11 +# 2201| mu2201_35(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m? +# 2201| mu2201_36(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +#-----| r0_13(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Load[#temp0:0] : &:r0_8, ~m? +# 2201| r2201_37(bool) = Call[operator!=] : func:r2201_31, this:r0_7, 0:r0_13 +# 2201| mu2201_38(unknown) = ^CallSideEffect : ~m? +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? +# 2201| v2201_39(void) = ConditionalBranch : r2201_37 +#-----| False -> Block 14 +#-----| True -> Block 12 + +# 2201| Block 12 +# 2201| r2201_40(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2201| r2201_41(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_15(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2201_41 +# 2201| r2201_42(glval<unknown>) = FunctionAddress[operator*] : +# 2201| r2201_43(ClassWithDestructor &) = Call[operator*] : func:r2201_42, this:r0_15 +# 2201| mu2201_44(unknown) = ^CallSideEffect : ~m? +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? +# 2201| r2201_45(ClassWithDestructor) = Load[?] : &:r2201_43, ~m? +# 2201| mu2201_46(ClassWithDestructor) = Store[y] : &:r2201_40, r2201_45 +# 2202| r2202_1(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2202| r2202_2(glval<unknown>) = 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_47(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2201| r2201_48(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : +# 2201| v2201_49(void) = Call[~ClassWithDestructor] : func:r2201_48, this:r2201_47 +# 2201| mu2201_50(unknown) = ^CallSideEffect : ~m? +# 2201| v2201_51(void) = ^IndirectReadSideEffect[-1] : &:r2201_47, ~m? +# 2201| mu2201_52(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2201_47 +# 2201| r2201_53(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +# 2201| r2201_54(glval<unknown>) = FunctionAddress[operator++] : +# 2201| r2201_55(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = Call[operator++] : func:r2201_54, this:r2201_53 +# 2201| mu2201_56(unknown) = ^CallSideEffect : ~m? +# 2201| v2201_57(void) = ^IndirectReadSideEffect[-1] : &:r2201_53, ~m? +# 2201| mu2201_58(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2201_53 +# 2201| r2201_59(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2201_55 +#-----| Goto (back edge) -> Block 11 + +# 2201| Block 13 +# 2201| r2201_60(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : +# 2201| r2201_61(glval<unknown>) = FunctionAddress[~vector] : +# 2201| v2201_62(void) = Call[~vector] : func:r2201_61, this:r2201_60 +# 2201| mu2201_63(unknown) = ^CallSideEffect : ~m? +# 2201| v2201_64(void) = ^IndirectReadSideEffect[-1] : &:r2201_60, ~m? +# 2201| mu2201_65(vector<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2201_60 +#-----| Goto -> Block 14 + +# 2204| Block 14 +# 2204| r2204_1(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : +# 2204| mu2204_2(vector<ClassWithDestructor>) = Uninitialized[ys] : &:r2204_1 +# 2204| r2204_3(glval<unknown>) = FunctionAddress[vector] : +# 2204| r2204_4(glval<ClassWithDestructor>) = VariableAddress[#temp2204:45] : +# 2204| r2204_5(glval<ClassWithDestructor>) = 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<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2204_1 +# 2204| r2204_12(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2204| r2204_13(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : +# 2204| r2204_14(vector<ClassWithDestructor> &) = CopyValue : r2204_13 +# 2204| mu2204_15(vector<ClassWithDestructor> &) = Store[(__range)] : &:r2204_12, r2204_14 +# 2204| r2204_16(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +# 2204| r2204_17(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2204| r2204_18(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2204_17, ~m? +#-----| r0_17(glval<vector<ClassWithDestructor>>) = CopyValue : r2204_18 +#-----| r0_18(glval<vector<ClassWithDestructor>>) = Convert : r0_17 +# 2204| r2204_19(glval<unknown>) = FunctionAddress[begin] : +# 2204| r2204_20(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[begin] : func:r2204_19, this:r0_18 +# 2204| mu2204_21(unknown) = ^CallSideEffect : ~m? +#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m? +# 2204| mu2204_22(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__begin)] : &:r2204_16, r2204_20 +# 2204| r2204_23(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +# 2204| r2204_24(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2204| r2204_25(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2204_24, ~m? +#-----| r0_20(glval<vector<ClassWithDestructor>>) = CopyValue : r2204_25 +#-----| r0_21(glval<vector<ClassWithDestructor>>) = Convert : r0_20 +# 2204| r2204_26(glval<unknown>) = FunctionAddress[end] : +# 2204| r2204_27(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[end] : func:r2204_26, this:r0_21 +# 2204| mu2204_28(unknown) = ^CallSideEffect : ~m? +#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_21, ~m? +# 2204| mu2204_29(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__end)] : &:r2204_23, r2204_27 +#-----| Goto -> Block 15 + +# 2204| Block 15 +# 2204| r2204_30(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_23(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2204_30 +# 2204| r2204_31(glval<unknown>) = FunctionAddress[operator!=] : +#-----| r0_24(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[#temp0:0] : +#-----| mu0_25(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Uninitialized[#temp0:0] : &:r0_24 +# 2204| r2204_32(glval<unknown>) = FunctionAddress[iterator] : +# 2204| r2204_33(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +#-----| r0_26(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2204_33 +#-----| r0_27(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = CopyValue : r0_26 +# 2204| v2204_34(void) = Call[iterator] : func:r2204_32, this:r0_24, 0:r0_27 +# 2204| mu2204_35(unknown) = ^CallSideEffect : ~m? +#-----| v0_28(void) = ^BufferReadSideEffect[0] : &:r0_27, ~m? +# 2204| mu2204_36(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_24 +#-----| r0_29(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Load[#temp0:0] : &:r0_24, ~m? +# 2204| r2204_37(bool) = Call[operator!=] : func:r2204_31, this:r0_23, 0:r0_29 +# 2204| mu2204_38(unknown) = ^CallSideEffect : ~m? +#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_23, ~m? +# 2204| v2204_39(void) = ConditionalBranch : r2204_37 +#-----| False -> Block 20 +#-----| True -> Block 16 + +# 2204| Block 16 +# 2204| r2204_40(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2204| r2204_41(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_31(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2204_41 +# 2204| r2204_42(glval<unknown>) = FunctionAddress[operator*] : +# 2204| r2204_43(ClassWithDestructor &) = Call[operator*] : func:r2204_42, this:r0_31 +# 2204| mu2204_44(unknown) = ^CallSideEffect : ~m? +#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, ~m? +# 2204| r2204_45(ClassWithDestructor) = Load[?] : &:r2204_43, ~m? +# 2204| mu2204_46(ClassWithDestructor) = Store[y] : &:r2204_40, r2204_45 +# 2205| r2205_1(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2205| r2205_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[y] : +# 2206| r2206_2(glval<unknown>) = 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_47(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2204| r2204_48(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : +# 2204| v2204_49(void) = Call[~ClassWithDestructor] : func:r2204_48, this:r2204_47 +# 2204| mu2204_50(unknown) = ^CallSideEffect : ~m? +# 2204| v2204_51(void) = ^IndirectReadSideEffect[-1] : &:r2204_47, ~m? +# 2204| mu2204_52(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2204_47 +# 2204| r2204_53(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : +# 2204| r2204_54(glval<unknown>) = FunctionAddress[~vector] : +# 2204| v2204_55(void) = Call[~vector] : func:r2204_54, this:r2204_53 +# 2204| mu2204_56(unknown) = ^CallSideEffect : ~m? +# 2204| v2204_57(void) = ^IndirectReadSideEffect[-1] : &:r2204_53, ~m? +# 2204| mu2204_58(vector<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2204_53 +# 2219| r2219_1(glval<ClassWithDestructor>) = VariableAddress[x] : +# 2219| r2219_2(glval<unknown>) = 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_59(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2204| r2204_60(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : +# 2204| v2204_61(void) = Call[~ClassWithDestructor] : func:r2204_60, this:r2204_59 +# 2204| mu2204_62(unknown) = ^CallSideEffect : ~m? +# 2204| v2204_63(void) = ^IndirectReadSideEffect[-1] : &:r2204_59, ~m? +# 2204| mu2204_64(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2204_59 +# 2204| r2204_65(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +# 2204| r2204_66(glval<unknown>) = FunctionAddress[operator++] : +# 2204| r2204_67(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = Call[operator++] : func:r2204_66, this:r2204_65 +# 2204| mu2204_68(unknown) = ^CallSideEffect : ~m? +# 2204| v2204_69(void) = ^IndirectReadSideEffect[-1] : &:r2204_65, ~m? +# 2204| mu2204_70(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2204_65 +# 2204| r2204_71(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2204_67 +#-----| Goto (back edge) -> Block 15 + +# 2204| Block 19 +# 2204| r2204_72(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : +# 2204| r2204_73(glval<unknown>) = FunctionAddress[~vector] : +# 2204| v2204_74(void) = Call[~vector] : func:r2204_73, this:r2204_72 +# 2204| mu2204_75(unknown) = ^CallSideEffect : ~m? +# 2204| v2204_76(void) = ^IndirectReadSideEffect[-1] : &:r2204_72, ~m? +# 2204| mu2204_77(vector<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2204_72 +#-----| Goto -> Block 20 + +# 2210| Block 20 +# 2210| r2210_1(glval<vector<int>>) = VariableAddress[ys] : +# 2210| mu2210_2(vector<int>) = Uninitialized[ys] : &:r2210_1 +# 2210| r2210_3(glval<unknown>) = 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<int>) = ^IndirectMayWriteSideEffect[-1] : &:r2210_1 +# 2210| r2210_8(glval<vector<int> &>) = VariableAddress[(__range)] : +# 2210| r2210_9(glval<vector<int>>) = VariableAddress[ys] : +# 2210| r2210_10(vector<int> &) = CopyValue : r2210_9 +# 2210| mu2210_11(vector<int> &) = Store[(__range)] : &:r2210_8, r2210_10 +# 2210| r2210_12(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +# 2210| r2210_13(glval<vector<int> &>) = VariableAddress[(__range)] : +# 2210| r2210_14(vector<int> &) = Load[(__range)] : &:r2210_13, ~m? +#-----| r0_33(glval<vector<int>>) = CopyValue : r2210_14 +#-----| r0_34(glval<vector<int>>) = Convert : r0_33 +# 2210| r2210_15(glval<unknown>) = FunctionAddress[begin] : +# 2210| r2210_16(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[begin] : func:r2210_15, this:r0_34 +# 2210| mu2210_17(unknown) = ^CallSideEffect : ~m? +#-----| v0_35(void) = ^IndirectReadSideEffect[-1] : &:r0_34, ~m? +# 2210| mu2210_18(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__begin)] : &:r2210_12, r2210_16 +# 2210| r2210_19(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +# 2210| r2210_20(glval<vector<int> &>) = VariableAddress[(__range)] : +# 2210| r2210_21(vector<int> &) = Load[(__range)] : &:r2210_20, ~m? +#-----| r0_36(glval<vector<int>>) = CopyValue : r2210_21 +#-----| r0_37(glval<vector<int>>) = Convert : r0_36 +# 2210| r2210_22(glval<unknown>) = FunctionAddress[end] : +# 2210| r2210_23(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[end] : func:r2210_22, this:r0_37 +# 2210| mu2210_24(unknown) = ^CallSideEffect : ~m? +#-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_37, ~m? +# 2210| mu2210_25(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__end)] : &:r2210_19, r2210_23 +#-----| Goto -> Block 21 + +# 2210| Block 21 +# 2210| r2210_26(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_39(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r2210_26 +# 2210| r2210_27(glval<unknown>) = FunctionAddress[operator!=] : +#-----| r0_40(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[#temp0:0] : +#-----| mu0_41(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Uninitialized[#temp0:0] : &:r0_40 +# 2210| r2210_28(glval<unknown>) = FunctionAddress[iterator] : +# 2210| r2210_29(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +#-----| r0_42(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r2210_29 +#-----| r0_43(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = CopyValue : r0_42 +# 2210| v2210_30(void) = Call[iterator] : func:r2210_28, this:r0_40, 0:r0_43 +# 2210| mu2210_31(unknown) = ^CallSideEffect : ~m? +#-----| v0_44(void) = ^BufferReadSideEffect[0] : &:r0_43, ~m? +# 2210| mu2210_32(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_40 +#-----| r0_45(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Load[#temp0:0] : &:r0_40, ~m? +# 2210| r2210_33(bool) = Call[operator!=] : func:r2210_27, this:r0_39, 0:r0_45 +# 2210| mu2210_34(unknown) = ^CallSideEffect : ~m? +#-----| v0_46(void) = ^IndirectReadSideEffect[-1] : &:r0_39, ~m? +# 2210| v2210_35(void) = ConditionalBranch : r2210_33 +#-----| False -> Block 26 +#-----| True -> Block 23 + +# 2210| Block 22 +# 2210| r2210_36(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +# 2210| r2210_37(glval<unknown>) = FunctionAddress[operator++] : +# 2210| r2210_38(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = Call[operator++] : func:r2210_37, this:r2210_36 +# 2210| mu2210_39(unknown) = ^CallSideEffect : ~m? +# 2210| v2210_40(void) = ^IndirectReadSideEffect[-1] : &:r2210_36, ~m? +# 2210| mu2210_41(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r2210_36 +# 2210| r2210_42(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r2210_38 +#-----| Goto (back edge) -> Block 21 + +# 2210| Block 23 +# 2210| r2210_43(glval<int>) = VariableAddress[y] : +# 2210| r2210_44(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_47(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r2210_44 +# 2210| r2210_45(glval<unknown>) = FunctionAddress[operator*] : +# 2210| r2210_46(int &) = Call[operator*] : func:r2210_45, this:r0_47 +# 2210| mu2210_47(unknown) = ^CallSideEffect : ~m? +#-----| v0_48(void) = ^IndirectReadSideEffect[-1] : &:r0_47, ~m? +# 2210| r2210_48(int) = Load[?] : &:r2210_46, ~m? +# 2210| mu2210_49(int) = Store[y] : &:r2210_43, r2210_48 +# 2211| r2211_1(glval<int>) = 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_50(glval<vector<int>>) = VariableAddress[ys] : +# 2210| r2210_51(glval<unknown>) = FunctionAddress[~vector] : +# 2210| v2210_52(void) = Call[~vector] : func:r2210_51, this:r2210_50 +# 2210| mu2210_53(unknown) = ^CallSideEffect : ~m? +# 2210| v2210_54(void) = ^IndirectReadSideEffect[-1] : &:r2210_50, ~m? +# 2210| mu2210_55(vector<int>) = ^IndirectMayWriteSideEffect[-1] : &:r2210_50 +# 2219| r2219_7(glval<ClassWithDestructor>) = VariableAddress[x] : +# 2219| r2219_8(glval<unknown>) = 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_56(glval<vector<int>>) = VariableAddress[ys] : +# 2210| r2210_57(glval<unknown>) = FunctionAddress[~vector] : +# 2210| v2210_58(void) = Call[~vector] : func:r2210_57, this:r2210_56 +# 2210| mu2210_59(unknown) = ^CallSideEffect : ~m? +# 2210| v2210_60(void) = ^IndirectReadSideEffect[-1] : &:r2210_56, ~m? +# 2210| mu2210_61(vector<int>) = ^IndirectMayWriteSideEffect[-1] : &:r2210_56 +#-----| Goto -> Block 26 + +# 2215| Block 26 +# 2215| r2215_1(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : +# 2215| mu2215_2(vector<ClassWithDestructor>) = Uninitialized[ys] : &:r2215_1 +# 2215| r2215_3(glval<unknown>) = FunctionAddress[vector] : +# 2215| r2215_4(glval<ClassWithDestructor>) = VariableAddress[#temp2215:45] : +# 2215| r2215_5(glval<ClassWithDestructor>) = 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<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2215_1 +# 2215| r2215_12(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2215| r2215_13(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : +# 2215| r2215_14(vector<ClassWithDestructor> &) = CopyValue : r2215_13 +# 2215| mu2215_15(vector<ClassWithDestructor> &) = Store[(__range)] : &:r2215_12, r2215_14 +# 2215| r2215_16(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +# 2215| r2215_17(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2215| r2215_18(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2215_17, ~m? +#-----| r0_49(glval<vector<ClassWithDestructor>>) = CopyValue : r2215_18 +#-----| r0_50(glval<vector<ClassWithDestructor>>) = Convert : r0_49 +# 2215| r2215_19(glval<unknown>) = FunctionAddress[begin] : +# 2215| r2215_20(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[begin] : func:r2215_19, this:r0_50 +# 2215| mu2215_21(unknown) = ^CallSideEffect : ~m? +#-----| v0_51(void) = ^IndirectReadSideEffect[-1] : &:r0_50, ~m? +# 2215| mu2215_22(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__begin)] : &:r2215_16, r2215_20 +# 2215| r2215_23(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +# 2215| r2215_24(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2215| r2215_25(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2215_24, ~m? +#-----| r0_52(glval<vector<ClassWithDestructor>>) = CopyValue : r2215_25 +#-----| r0_53(glval<vector<ClassWithDestructor>>) = Convert : r0_52 +# 2215| r2215_26(glval<unknown>) = FunctionAddress[end] : +# 2215| r2215_27(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[end] : func:r2215_26, this:r0_53 +# 2215| mu2215_28(unknown) = ^CallSideEffect : ~m? +#-----| v0_54(void) = ^IndirectReadSideEffect[-1] : &:r0_53, ~m? +# 2215| mu2215_29(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__end)] : &:r2215_23, r2215_27 +#-----| Goto -> Block 27 + +# 2215| Block 27 +# 2215| r2215_30(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_55(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2215_30 +# 2215| r2215_31(glval<unknown>) = FunctionAddress[operator!=] : +#-----| r0_56(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[#temp0:0] : +#-----| mu0_57(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Uninitialized[#temp0:0] : &:r0_56 +# 2215| r2215_32(glval<unknown>) = FunctionAddress[iterator] : +# 2215| r2215_33(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +#-----| r0_58(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2215_33 +#-----| r0_59(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = CopyValue : r0_58 +# 2215| v2215_34(void) = Call[iterator] : func:r2215_32, this:r0_56, 0:r0_59 +# 2215| mu2215_35(unknown) = ^CallSideEffect : ~m? +#-----| v0_60(void) = ^BufferReadSideEffect[0] : &:r0_59, ~m? +# 2215| mu2215_36(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_56 +#-----| r0_61(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Load[#temp0:0] : &:r0_56, ~m? +# 2215| r2215_37(bool) = Call[operator!=] : func:r2215_31, this:r0_55, 0:r0_61 +# 2215| mu2215_38(unknown) = ^CallSideEffect : ~m? +#-----| v0_62(void) = ^IndirectReadSideEffect[-1] : &:r0_55, ~m? +# 2215| v2215_39(void) = ConditionalBranch : r2215_37 +#-----| False -> Block 30 +#-----| True -> Block 28 + +# 2215| Block 28 +# 2215| r2215_40(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2215| r2215_41(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_63(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2215_41 +# 2215| r2215_42(glval<unknown>) = FunctionAddress[operator*] : +# 2215| r2215_43(ClassWithDestructor &) = Call[operator*] : func:r2215_42, this:r0_63 +# 2215| mu2215_44(unknown) = ^CallSideEffect : ~m? +#-----| v0_64(void) = ^IndirectReadSideEffect[-1] : &:r0_63, ~m? +# 2215| r2215_45(ClassWithDestructor) = Load[?] : &:r2215_43, ~m? +# 2215| mu2215_46(ClassWithDestructor) = Store[y] : &:r2215_40, r2215_45 +# 2216| r2216_1(glval<ClassWithDestructor>) = VariableAddress[z1] : +# 2216| mu2216_2(ClassWithDestructor) = Uninitialized[z1] : &:r2216_1 +# 2216| r2216_3(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[z2] : +# 2217| mu2217_2(ClassWithDestructor) = Uninitialized[z2] : &:r2217_1 +# 2217| r2217_3(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[z2] : +# 2218| r2218_2(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[z1] : +# 2218| r2218_8(glval<unknown>) = 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_47(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2215| r2215_48(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : +# 2215| v2215_49(void) = Call[~ClassWithDestructor] : func:r2215_48, this:r2215_47 +# 2215| mu2215_50(unknown) = ^CallSideEffect : ~m? +# 2215| v2215_51(void) = ^IndirectReadSideEffect[-1] : &:r2215_47, ~m? +# 2215| mu2215_52(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2215_47 +# 2215| r2215_53(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +# 2215| r2215_54(glval<unknown>) = FunctionAddress[operator++] : +# 2215| r2215_55(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = Call[operator++] : func:r2215_54, this:r2215_53 +# 2215| mu2215_56(unknown) = ^CallSideEffect : ~m? +# 2215| v2215_57(void) = ^IndirectReadSideEffect[-1] : &:r2215_53, ~m? +# 2215| mu2215_58(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2215_53 +# 2215| r2215_59(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2215_55 +#-----| Goto (back edge) -> Block 27 + +# 2215| Block 29 +# 2215| r2215_60(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : +# 2215| r2215_61(glval<unknown>) = FunctionAddress[~vector] : +# 2215| v2215_62(void) = Call[~vector] : func:r2215_61, this:r2215_60 +# 2215| mu2215_63(unknown) = ^CallSideEffect : ~m? +# 2215| v2215_64(void) = ^IndirectReadSideEffect[-1] : &:r2215_60, ~m? +# 2215| mu2215_65(vector<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2215_60 +#-----| Goto -> Block 30 + +# 2219| Block 30 +# 2219| v2219_13(void) = NoOp : +# 2219| r2219_14(glval<ClassWithDestructor>) = VariableAddress[x] : +# 2219| r2219_15(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[a] : +# 2222| mu2222_2(ClassWithDestructor) = Uninitialized[a] : &:r2222_1 +# 2222| r2222_3(glval<unknown>) = 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<bool>) = 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<ClassWithDestructor>) = VariableAddress[b] : +#-----| r0_1(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[a] : +# 2224| r2224_3(glval<unknown>) = 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<bool>) = 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<ClassWithDestructor>) = VariableAddress[a] : +#-----| r0_1(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[b] : +# 2228| mu2228_2(ClassWithDestructor) = Uninitialized[b] : &:r2228_1 +# 2228| r2228_3(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[b] : +# 2229| r2229_3(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[a] : +# 2232| mu2232_2(ClassWithDestructor) = Uninitialized[a] : &:r2232_1 +# 2232| r2232_3(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[b] : +# 2233| mu2233_2(ClassWithDestructor) = Uninitialized[b] : &:r2233_1 +# 2233| r2233_3(glval<unknown>) = 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<bool>) = 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<ClassWithDestructor>) = VariableAddress[c] : +#-----| r0_1(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[b] : +# 2235| r2235_3(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[a] : +# 2235| r2235_9(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[global_class_with_destructor] : +# 2237| r2237_4(glval<unknown>) = 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>(ClassWithDestructor&) +# 2241| Block 0 +# 2241| v2241_1(void) = EnterFunction : +# 2241| mu2241_2(unknown) = AliasedDefinition : +# 2241| mu2241_3(unknown) = InitializeNonLocal : +# 2241| r2241_4(glval<ClassWithDestructor &>) = 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<ClassWithDestructor &>) = VariableAddress[#return] : +# 2241| r2241_9(glval<ClassWithDestructor &>) = VariableAddress[t] : +# 2241| r2241_10(ClassWithDestructor &) = Load[t] : &:r2241_9, ~m? +# 2241| r2241_11(glval<ClassWithDestructor>) = 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<ClassWithDestructor &>) = 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>(int&) +# 2241| Block 0 +# 2241| v2241_1(void) = EnterFunction : +# 2241| mu2241_2(unknown) = AliasedDefinition : +# 2241| mu2241_3(unknown) = InitializeNonLocal : +# 2241| r2241_4(glval<int &>) = 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<int &>) = VariableAddress[#return] : +# 2241| r2241_9(glval<int &>) = VariableAddress[t] : +# 2241| r2241_10(int &) = Load[t] : &:r2241_9, ~m? +# 2241| r2241_11(glval<int>) = 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<int &>) = 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>(ClassWithDestructor&) +# 2244| Block 0 +# 2244| v2244_1(void) = EnterFunction : +# 2244| mu2244_2(unknown) = AliasedDefinition : +# 2244| mu2244_3(unknown) = InitializeNonLocal : +# 2244| r2244_4(glval<ClassWithDestructor &>) = 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<unknown>) = FunctionAddress[get] : +# 2245| r2245_2(glval<ClassWithDestructor &>) = VariableAddress[t] : +# 2245| r2245_3(ClassWithDestructor &) = Load[t] : &:r2245_2, ~m? +# 2245| r2245_4(glval<ClassWithDestructor>) = 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<ClassWithDestructor>) = CopyValue : r2245_6 +# 2245| r2245_11(glval<unknown>) = 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>(int&) +# 2244| Block 0 +# 2244| v2244_1(void) = EnterFunction : +# 2244| mu2244_2(unknown) = AliasedDefinition : +# 2244| mu2244_3(unknown) = InitializeNonLocal : +# 2244| r2244_4(glval<int &>) = 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<unknown>) = FunctionAddress[get] : +# 2245| r2245_2(glval<int &>) = VariableAddress[t] : +# 2245| r2245_3(int &) = Load[t] : &:r2245_2, ~m? +# 2245| r2245_4(glval<int>) = 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<int>) = 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<ClassWithDestructor>) = VariableAddress[c] : +# 2249| mu2249_2(ClassWithDestructor) = Uninitialized[c] : &:r2249_1 +# 2249| r2249_3(glval<unknown>) = 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<unknown>) = FunctionAddress[call_destructor] : +# 2250| r2250_2(glval<ClassWithDestructor>) = 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<ClassWithDestructor>) = VariableAddress[c] : +# 2251| r2251_3(glval<unknown>) = 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<int>) = VariableAddress[i] : +# 2254| mu2254_2(int) = Uninitialized[i] : &:r2254_1 +# 2255| r2255_1(glval<unknown>) = FunctionAddress[call_destructor] : +# 2255| r2255_2(glval<int>) = 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<bool>) = VariableAddress[b] : +# 2259| mu2259_5(bool) = InitializeParameter[b] : &:r2259_4 +# 2261| r2261_1(glval<String>) = VariableAddress[s] : +# 2261| mu2261_2(String) = Uninitialized[s] : &:r2261_1 +# 2261| r2261_3(glval<unknown>) = 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<bool>) = 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<int>) = 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<String>) = VariableAddress[s] : -# 2260| r2260_2(glval<unknown>) = 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<char *>) = VariableAddress[#throw2263:7] : +# 2263| r2263_2(glval<char[15]>) = 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<bool>) = VariableAddress[b] : -# 2270| mu2270_5(bool) = InitializeParameter[b] : &:r2270_4 -# 2271| r2271_1(glval<Bool>) = VariableAddress[B] : -# 2271| mu2271_2(Bool) = Uninitialized[B] : &:r2271_1 -# 2271| r2271_3(glval<unknown>) = FunctionAddress[Bool] : -# 2271| r2271_4(glval<bool>) = 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<Bool>) = VariableAddress[B] : -# 2271| r2271_10(glval<unknown>) = 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<String>) = VariableAddress[s2] : +# 2265| mu2265_2(String) = Uninitialized[s2] : &:r2265_1 +# 2265| r2265_3(glval<unknown>) = 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<String>) = VariableAddress[s2] : +# 2266| r2266_2(glval<unknown>) = 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<String>) = VariableAddress[s] : +# 2266| r2266_8(glval<unknown>) = 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<char *>) = 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<String>) = VariableAddress[#throw2268:5] : +# 2268| mu2268_2(String) = Uninitialized[#throw2268:5] : &:r2268_1 +# 2268| r2268_3(glval<unknown>) = FunctionAddress[String] : +# 2268| r2268_4(glval<char *>) = 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<String &>) = 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<bool>) = VariableAddress[b] : +# 2277| mu2277_5(bool) = InitializeParameter[b] : &:r2277_4 +# 2278| r2278_1(glval<String>) = VariableAddress[s1] : +# 2278| mu2278_2(String) = Uninitialized[s1] : &:r2278_1 +# 2278| r2278_3(glval<unknown>) = 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<bool>) = 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<String>) = VariableAddress[s1] : -# 2272| mu2272_2(String) = Uninitialized[s1] : &:r2272_1 -# 2272| r2272_3(glval<unknown>) = 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<String>) = VariableAddress[s1] : -# 2273| r2273_2(glval<unknown>) = 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<String>) = VariableAddress[s2] : -# 2274| mu2274_2(String) = Uninitialized[s2] : &:r2274_1 -# 2274| r2274_3(glval<unknown>) = 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<String>) = VariableAddress[s2] : -# 2275| r2275_2(glval<unknown>) = 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<Bool>) = VariableAddress[B] : -# 2275| r2275_8(glval<unknown>) = 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<bool>) = VariableAddress[b] : -# 2278| mu2278_5(bool) = InitializeParameter[b] : &:r2278_4 -# 2280| r2280_1(glval<String>) = VariableAddress[s] : -# 2280| mu2280_2(String) = Uninitialized[s] : &:r2280_1 +# 2280| Block 1 +# 2280| r2280_1(glval<String>) = VariableAddress[s2] : +# 2280| mu2280_2(String) = Uninitialized[s2] : &:r2280_1 # 2280| r2280_3(glval<unknown>) = 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<String>) = VariableAddress[s2] : +# 2281| r2281_2(glval<unknown>) = 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<String>) = VariableAddress[s3] : +# 2282| mu2282_2(String) = Uninitialized[s3] : &:r2282_1 +# 2282| r2282_3(glval<unknown>) = 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<String>) = VariableAddress[s3] : +# 2283| r2283_2(glval<unknown>) = 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<String>) = VariableAddress[s4] : +# 2284| mu2284_2(String) = Uninitialized[s4] : &:r2284_1 +# 2284| r2284_3(glval<unknown>) = 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<String>) = VariableAddress[s4] : +# 2285| r2285_3(glval<unknown>) = 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<String>) = VariableAddress[s1] : +# 2285| r2285_9(glval<unknown>) = 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<char>) = VariableAddress[c] : +# 2288| r2288_2(char) = Constant[97] : +# 2288| mu2288_3(char) = Store[c] : &:r2288_1, r2288_2 +# 2289| r2289_1(glval<String>) = VariableAddress[s] : +# 2289| mu2289_2(String) = Uninitialized[s] : &:r2289_1 +# 2289| r2289_3(glval<unknown>) = FunctionAddress[String] : +# 2289| r2289_4(glval<char[6]>) = 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<bool>) = 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<char>) = 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<bool>) = VariableAddress[b] : -# 2282| mu2282_3(bool) = Store[b] : &:r2282_2, r2282_1 +# 2290| Block 2 +# 2290| r2290_1(glval<String>) = VariableAddress[s2] : +# 2290| mu2290_2(String) = Uninitialized[s2] : &:r2290_1 +# 2290| r2290_3(glval<unknown>) = 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<String>) = VariableAddress[s2] : +# 2291| r2291_2(glval<unknown>) = 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<String>) = VariableAddress[s] : +# 2289| r2289_17(glval<unknown>) = 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<char>) = VariableAddress[c] : +# 2289| mu2289_23(char) = Store[c] : &:r2289_22, r2289_18 #-----| Goto (back edge) -> Block 1 -# 2284| Block 3 -# 2284| r2284_1(glval<String>) = VariableAddress[s] : -# 2284| r2284_2(glval<unknown>) = 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<String>) = VariableAddress[s] : +# 2289| r2289_25(glval<unknown>) = 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<vector<String> &&>) = VariableAddress[(__range)] : +# 2293| r2293_2(glval<vector<String>>) = VariableAddress[#temp2293:20] : +# 2293| mu2293_3(vector<String>) = Uninitialized[#temp2293:20] : &:r2293_2 +# 2293| r2293_4(glval<unknown>) = FunctionAddress[vector] : +# 2293| r2293_5(glval<String>) = VariableAddress[#temp2293:40] : +# 2293| mu2293_6(String) = Uninitialized[#temp2293:40] : &:r2293_5 +# 2293| r2293_7(glval<unknown>) = FunctionAddress[String] : +# 2293| r2293_8(glval<char[6]>) = 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<String>) = ^IndirectMayWriteSideEffect[-1] : &:r2293_2 +# 2293| r2293_18(vector<String> &) = CopyValue : r2293_2 +# 2293| mu2293_19(vector<String> &&) = Store[(__range)] : &:r2293_1, r2293_18 +# 2293| r2293_20(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] : +# 2293| r2293_21(glval<vector<String> &&>) = VariableAddress[(__range)] : +# 2293| r2293_22(vector<String> &&) = Load[(__range)] : &:r2293_21, ~m? +#-----| r0_1(glval<vector<String>>) = CopyValue : r2293_22 +#-----| r0_2(glval<vector<String>>) = Convert : r0_1 +# 2293| r2293_23(glval<unknown>) = FunctionAddress[begin] : +# 2293| r2293_24(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Call[begin] : func:r2293_23, this:r0_2 +# 2293| mu2293_25(unknown) = ^CallSideEffect : ~m? +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? +# 2293| mu2293_26(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Store[(__begin)] : &:r2293_20, r2293_24 +# 2293| r2293_27(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__end)] : +# 2293| r2293_28(glval<vector<String> &&>) = VariableAddress[(__range)] : +# 2293| r2293_29(vector<String> &&) = Load[(__range)] : &:r2293_28, ~m? +#-----| r0_4(glval<vector<String>>) = CopyValue : r2293_29 +#-----| r0_5(glval<vector<String>>) = Convert : r0_4 +# 2293| r2293_30(glval<unknown>) = FunctionAddress[end] : +# 2293| r2293_31(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Call[end] : func:r2293_30, this:r0_5 +# 2293| mu2293_32(unknown) = ^CallSideEffect : ~m? +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? +# 2293| mu2293_33(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Store[(__end)] : &:r2293_27, r2293_31 #-----| Goto -> Block 4 -# 2287| Block 4 -# 2287| r2287_1(glval<Bool>) = VariableAddress[B] : -# 2287| mu2287_2(Bool) = Uninitialized[B] : &:r2287_1 -# 2287| r2287_3(glval<unknown>) = FunctionAddress[Bool] : -# 2287| r2287_4(glval<bool>) = 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<Bool>) = VariableAddress[B] : -# 2287| r2287_10(glval<unknown>) = 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_34(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] : +#-----| r0_7(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = Convert : r2293_34 +# 2293| r2293_35(glval<unknown>) = FunctionAddress[operator!=] : +#-----| r0_8(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[#temp0:0] : +#-----| mu0_9(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Uninitialized[#temp0:0] : &:r0_8 +# 2293| r2293_36(glval<unknown>) = FunctionAddress[iterator] : +# 2293| r2293_37(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__end)] : +#-----| r0_10(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = Convert : r2293_37 +#-----| r0_11(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &> &) = CopyValue : r0_10 +# 2293| v2293_38(void) = Call[iterator] : func:r2293_36, this:r0_8, 0:r0_11 +# 2293| mu2293_39(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m? +# 2293| mu2293_40(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +#-----| r0_13(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Load[#temp0:0] : &:r0_8, ~m? +# 2293| r2293_41(bool) = Call[operator!=] : func:r2293_35, this:r0_7, 0:r0_13 +# 2293| mu2293_42(unknown) = ^CallSideEffect : ~m? +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? +# 2293| v2293_43(void) = ConditionalBranch : r2293_41 #-----| False -> Block 6 #-----| True -> Block 5 -# 2288| Block 5 -# 2288| r2288_1(bool) = Constant[0] : -# 2288| r2288_2(glval<bool>) = VariableAddress[b] : -# 2288| mu2288_3(bool) = Store[b] : &:r2288_2, r2288_1 -# 2289| r2289_1(glval<Bool>) = VariableAddress[B] : -# 2289| r2289_2(glval<unknown>) = 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_44(glval<String>) = VariableAddress[s] : +# 2293| mu2293_45(String) = Uninitialized[s] : &:r2293_44 +# 2293| r2293_46(glval<unknown>) = FunctionAddress[String] : +# 2293| r2293_47(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] : +#-----| r0_15(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = Convert : r2293_47 +# 2293| r2293_48(glval<unknown>) = FunctionAddress[operator*] : +# 2293| r2293_49(String &) = Call[operator*] : func:r2293_48, this:r0_15 +# 2293| mu2293_50(unknown) = ^CallSideEffect : ~m? +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? +# 2293| r2293_51(glval<String>) = CopyValue : r2293_49 +# 2293| r2293_52(glval<String>) = Convert : r2293_51 +# 2293| r2293_53(String &) = CopyValue : r2293_52 +# 2293| v2293_54(void) = Call[String] : func:r2293_46, this:r2293_44, 0:r2293_53 +# 2293| mu2293_55(unknown) = ^CallSideEffect : ~m? +# 2293| v2293_56(void) = ^BufferReadSideEffect[0] : &:r2293_53, ~m? +# 2293| mu2293_57(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_44 +# 2294| r2294_1(glval<String>) = VariableAddress[s2] : +# 2294| mu2294_2(String) = Uninitialized[s2] : &:r2294_1 +# 2294| r2294_3(glval<unknown>) = 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<String>) = VariableAddress[s2] : +# 2295| r2295_2(glval<unknown>) = 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_58(glval<String>) = VariableAddress[s] : +# 2293| r2293_59(glval<unknown>) = FunctionAddress[~String] : +# 2293| v2293_60(void) = Call[~String] : func:r2293_59, this:r2293_58 +# 2293| mu2293_61(unknown) = ^CallSideEffect : ~m? +# 2293| v2293_62(void) = ^IndirectReadSideEffect[-1] : &:r2293_58, ~m? +# 2293| mu2293_63(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_58 +# 2293| r2293_64(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] : +# 2293| r2293_65(glval<unknown>) = FunctionAddress[operator++] : +# 2293| r2293_66(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &> &) = Call[operator++] : func:r2293_65, this:r2293_64 +# 2293| mu2293_67(unknown) = ^CallSideEffect : ~m? +# 2293| v2293_68(void) = ^IndirectReadSideEffect[-1] : &:r2293_64, ~m? +# 2293| mu2293_69(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = ^IndirectMayWriteSideEffect[-1] : &:r2293_64 +# 2293| r2293_70(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = CopyValue : r2293_66 #-----| Goto (back edge) -> Block 4 -# 2289| Block 6 -# 2289| r2289_7(glval<Bool>) = VariableAddress[B] : -# 2289| r2289_8(glval<unknown>) = 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<String>) = VariableAddress[s] : +# 2297| mu2297_2(String) = Uninitialized[s] : &:r2297_1 +# 2297| r2297_3(glval<unknown>) = FunctionAddress[String] : +# 2297| r2297_4(glval<char[6]>) = 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<String>) = VariableAddress[s2] : +# 2297| mu2297_11(String) = Uninitialized[s2] : &:r2297_10 +# 2297| r2297_12(glval<unknown>) = FunctionAddress[String] : +# 2297| r2297_13(glval<char[6]>) = 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<char>) = 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<bool>) = VariableAddress[b] : -# 2295| mu2295_5(bool) = InitializeParameter[b] : &:r2295_4 -# 2296| r2296_1(glval<String>) = VariableAddress[s] : -# 2296| mu2296_2(String) = Uninitialized[s] : &:r2296_1 -# 2296| r2296_3(glval<unknown>) = 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<bool>) = 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<char>) = VariableAddress[c] : +# 2298| mu2298_3(char) = Store[c] : &:r2298_2, r2298_1 +# 2297| r2297_25(glval<String>) = VariableAddress[s] : +# 2297| r2297_26(glval<unknown>) = 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<char>) = VariableAddress[c] : +# 2297| mu2297_32(char) = Store[c] : &:r2297_31, r2297_27 +#-----| Goto (back edge) -> Block 7 + +# 2297| Block 9 +# 2297| r2297_33(glval<String>) = VariableAddress[s2] : +# 2297| r2297_34(glval<unknown>) = 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<String>) = VariableAddress[s] : +# 2297| r2297_40(glval<unknown>) = 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<bool>) = VariableAddress[b] : +# 2302| mu2302_5(bool) = InitializeParameter[b] : &:r2302_4 +# 2303| r2303_1(glval<String>) = VariableAddress[s] : +# 2303| mu2303_2(String) = Uninitialized[s] : &:r2303_1 +# 2303| r2303_3(glval<unknown>) = FunctionAddress[String] : +# 2303| r2303_4(glval<char[6]>) = 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<bool>) = 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<int>) = 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<int>) = 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<String>) = VariableAddress[s] : +# 2307| r2307_2(glval<unknown>) = 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<bool>) = VariableAddress[b] : +# 2317| mu2317_5(bool) = InitializeParameter[b] : &:r2317_4 +# 2318| r2318_1(glval<Bool>) = VariableAddress[B] : +# 2318| mu2318_2(Bool) = Uninitialized[B] : &:r2318_1 +# 2318| r2318_3(glval<unknown>) = FunctionAddress[Bool] : +# 2318| r2318_4(glval<bool>) = 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<Bool>) = VariableAddress[B] : +# 2318| r2318_10(glval<unknown>) = 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<String>) = VariableAddress[s1] : +# 2319| mu2319_2(String) = Uninitialized[s1] : &:r2319_1 +# 2319| r2319_3(glval<unknown>) = 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<String>) = VariableAddress[s1] : +# 2320| r2320_2(glval<unknown>) = 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<String>) = VariableAddress[s2] : +# 2321| mu2321_2(String) = Uninitialized[s2] : &:r2321_1 +# 2321| r2321_3(glval<unknown>) = 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<String>) = VariableAddress[s2] : +# 2322| r2322_2(glval<unknown>) = 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<Bool>) = VariableAddress[B] : +# 2322| r2322_8(glval<unknown>) = 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<bool>) = VariableAddress[b] : +# 2325| mu2325_5(bool) = InitializeParameter[b] : &:r2325_4 +# 2327| r2327_1(glval<String>) = VariableAddress[s] : +# 2327| mu2327_2(String) = Uninitialized[s] : &:r2327_1 +# 2327| r2327_3(glval<unknown>) = 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<bool>) = 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<bool>) = 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<String>) = VariableAddress[s] : -# 2304| r2304_2(glval<unknown>) = 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<String>) = VariableAddress[s] : +# 2331| r2331_2(glval<unknown>) = 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<Bool>) = VariableAddress[B] : +# 2334| mu2334_2(Bool) = Uninitialized[B] : &:r2334_1 +# 2334| r2334_3(glval<unknown>) = FunctionAddress[Bool] : +# 2334| r2334_4(glval<bool>) = 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<Bool>) = VariableAddress[B] : +# 2334| r2334_10(glval<unknown>) = 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<bool>) = VariableAddress[b] : +# 2335| mu2335_3(bool) = Store[b] : &:r2335_2, r2335_1 +# 2336| r2336_1(glval<Bool>) = VariableAddress[B] : +# 2336| r2336_2(glval<unknown>) = 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<Bool>) = VariableAddress[B] : +# 2336| r2336_8(glval<unknown>) = 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<bool>) = VariableAddress[b] : +# 2342| mu2342_5(bool) = InitializeParameter[b] : &:r2342_4 +# 2343| r2343_1(glval<String>) = VariableAddress[s] : +# 2343| mu2343_2(String) = Uninitialized[s] : &:r2343_1 +# 2343| r2343_3(glval<unknown>) = 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<bool>) = 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<String>) = VariableAddress[s] : +# 2351| r2351_2(glval<unknown>) = 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<bool>) = 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<bool>) = 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<unknown>) = 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<String>) = VariableAddress[s] : -# 2304| r2304_8(glval<unknown>) = 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<unknown>) = 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<String>) = VariableAddress[s] : +# 2351| r2351_8(glval<unknown>) = 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<String>) = VariableAddress[s] : -# 2304| v2304_13(void) = NoOp : -# 2304| r2304_14(glval<String>) = VariableAddress[s] : -# 2304| r2304_15(glval<unknown>) = 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<String>) = VariableAddress[s] : +# 2351| v2351_13(void) = NoOp : +# 2351| r2351_14(glval<String>) = VariableAddress[s] : +# 2351| r2351_15(glval<unknown>) = 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<bool>) = VariableAddress[b] : -# 2306| mu2306_5(bool) = InitializeParameter[b] : &:r2306_4 -# 2307| r2307_1(glval<String>) = VariableAddress[s] : -# 2307| mu2307_2(String) = Uninitialized[s] : &:r2307_1 -# 2307| r2307_3(glval<unknown>) = 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<bool>) = 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<bool>) = VariableAddress[b] : +# 2353| mu2353_5(bool) = InitializeParameter[b] : &:r2353_4 +# 2354| r2354_1(glval<String>) = VariableAddress[s] : +# 2354| mu2354_2(String) = Uninitialized[s] : &:r2354_1 +# 2354| r2354_3(glval<unknown>) = 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<bool>) = 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<int>) = 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<int>) = 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<int>) = VariableAddress[#return] : -# 2309| r2309_2(int) = Constant[1] : -# 2309| mu2309_3(int) = Store[#return] : &:r2309_1, r2309_2 -# 2312| r2312_1(glval<String>) = VariableAddress[s] : -# 2312| r2312_2(glval<unknown>) = 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<int>) = VariableAddress[#return] : +# 2356| r2356_2(int) = Constant[1] : +# 2356| mu2356_3(int) = Store[#return] : &:r2356_1, r2356_2 +# 2359| r2359_1(glval<String>) = VariableAddress[s] : +# 2359| r2359_2(glval<unknown>) = 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<int>) = VariableAddress[#return] : -# 2311| r2311_2(int) = Constant[0] : -# 2311| mu2311_3(int) = Store[#return] : &:r2311_1, r2311_2 -# 2312| r2312_7(glval<String>) = VariableAddress[s] : -# 2312| r2312_8(glval<unknown>) = 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<int>) = VariableAddress[#return] : +# 2358| r2358_2(int) = Constant[0] : +# 2358| mu2358_3(int) = Store[#return] : &:r2358_1, r2358_2 +# 2359| r2359_7(glval<String>) = VariableAddress[s] : +# 2359| r2359_8(glval<unknown>) = 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<String>) = VariableAddress[s] : -# 2315| mu2315_2(String) = Uninitialized[s] : &:r2315_1 -# 2315| r2315_3(glval<unknown>) = 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<unknown>) = 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<String>) = VariableAddress[s] : -# 2317| r2317_2(glval<unknown>) = 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<String>) = VariableAddress[s] : +# 2362| mu2362_2(String) = Uninitialized[s] : &:r2362_1 +# 2362| r2362_3(glval<unknown>) = 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<unknown>) = 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<String>) = VariableAddress[s] : +# 2364| r2364_2(glval<unknown>) = 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() From 19c9ea7e207268d7c73cbd4f577a29f4b8a0f4de Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Fri, 15 Mar 2024 12:13:43 +0000 Subject: [PATCH 351/430] C++: Implement alias and side effect models for iterators. --- .../cpp/models/implementations/Iterator.qll | 22 +- .../library-tests/ir/ir/aliased_ir.expected | 884 +++++++++--------- .../ir/ir/operand_locations.expected | 860 ++++++++--------- .../test/library-tests/ir/ir/raw_ir.expected | 656 +++++++------ 4 files changed, 1179 insertions(+), 1243 deletions(-) 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..79d36e77f3d 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,9 @@ 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 { +private class BeginOrEndFunction extends MemberFunction, TaintFunction, GetIteratorFunction, + AliasFunction, SideEffectFunction +{ BeginOrEndFunction() { this.hasName([ "begin", "cbegin", "rbegin", "crbegin", "end", "cend", "rend", "crend", "before_begin", @@ -456,6 +460,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/test/library-tests/ir/ir/aliased_ir.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected index a5c45046307..a5a09578750 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -7290,62 +7290,58 @@ ir.cpp: #-----| r0_1(glval<vector<int>>) = CopyValue : r1127_9 # 1127| r1127_10(glval<unknown>) = FunctionAddress[begin] : # 1127| r1127_11(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[begin] : func:r1127_10, this:r0_1 -# 1127| m1127_12(unknown) = ^CallSideEffect : ~m1126_4 -# 1127| m1127_13(unknown) = Chi : total:m1126_4, partial:m1127_12 #-----| v0_2(void) = ^IndirectReadSideEffect[-1] : &:r0_1, ~m1126_8 -# 1127| m1127_14(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__begin)] : &:r1127_7, r1127_11 -# 1127| r1127_15(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : -# 1127| r1127_16(glval<vector<int> &>) = VariableAddress[(__range)] : -# 1127| r1127_17(vector<int> &) = Load[(__range)] : &:r1127_16, m1127_6 -#-----| r0_3(glval<vector<int>>) = CopyValue : r1127_17 -# 1127| r1127_18(glval<unknown>) = FunctionAddress[end] : -# 1127| r1127_19(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[end] : func:r1127_18, this:r0_3 -# 1127| m1127_20(unknown) = ^CallSideEffect : ~m1127_13 -# 1127| m1127_21(unknown) = Chi : total:m1127_13, partial:m1127_20 +# 1127| m1127_12(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__begin)] : &:r1127_7, r1127_11 +# 1127| r1127_13(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +# 1127| r1127_14(glval<vector<int> &>) = VariableAddress[(__range)] : +# 1127| r1127_15(vector<int> &) = Load[(__range)] : &:r1127_14, m1127_6 +#-----| r0_3(glval<vector<int>>) = CopyValue : r1127_15 +# 1127| r1127_16(glval<unknown>) = FunctionAddress[end] : +# 1127| r1127_17(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[end] : func:r1127_16, this:r0_3 #-----| v0_4(void) = ^IndirectReadSideEffect[-1] : &:r0_3, ~m1126_8 -# 1127| m1127_22(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__end)] : &:r1127_15, r1127_19 +# 1127| m1127_18(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__end)] : &:r1127_13, r1127_17 #-----| Goto -> Block 1 # 1127| Block 1 -# 1127| m1127_23(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Phi : from 0:m1127_14, from 4:m1127_54 -# 1127| m1127_24(unknown) = Phi : from 0:~m1127_21, from 4:~m1127_51 -# 1127| r1127_25(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : -#-----| r0_5(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1127_25 -# 1127| r1127_26(glval<unknown>) = FunctionAddress[operator!=] : +# 1127| m1127_19(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = 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<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_5(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1127_21 +# 1127| r1127_22(glval<unknown>) = FunctionAddress[operator!=] : #-----| r0_6(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[#temp0:0] : #-----| m0_7(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Uninitialized[#temp0:0] : &:r0_6 -# 1127| r1127_27(glval<unknown>) = FunctionAddress[iterator] : -# 1127| r1127_28(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : -#-----| r0_8(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1127_28 +# 1127| r1127_23(glval<unknown>) = FunctionAddress[iterator] : +# 1127| r1127_24(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +#-----| r0_8(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1127_24 #-----| r0_9(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = CopyValue : r0_8 -# 1127| v1127_29(void) = Call[iterator] : func:r1127_27, this:r0_6, 0:r0_9 -# 1127| m1127_30(unknown) = ^CallSideEffect : ~m1127_24 -# 1127| m1127_31(unknown) = Chi : total:m1127_24, partial:m1127_30 -#-----| v0_10(void) = ^BufferReadSideEffect[0] : &:r0_9, ~m1127_22 -# 1127| m1127_32(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_6 -# 1127| m1127_33(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m0_7, partial:m1127_32 -#-----| r0_11(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Load[#temp0:0] : &:r0_6, m1127_33 -# 1127| r1127_34(bool) = Call[operator!=] : func:r1127_26, this:r0_5, 0:r0_11 -# 1127| m1127_35(unknown) = ^CallSideEffect : ~m1127_31 -# 1127| m1127_36(unknown) = Chi : total:m1127_31, partial:m1127_35 -#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m1127_23 -# 1127| v1127_37(void) = ConditionalBranch : r1127_34 +# 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<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_6 +# 1127| m1127_29(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m0_7, partial:m1127_28 +#-----| r0_11(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = 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 # 1127| Block 2 -# 1127| r1127_38(glval<int>) = VariableAddress[e] : -# 1127| r1127_39(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : -#-----| r0_13(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1127_39 -# 1127| r1127_40(glval<unknown>) = FunctionAddress[operator*] : -# 1127| r1127_41(int &) = Call[operator*] : func:r1127_40, this:r0_13 -# 1127| m1127_42(unknown) = ^CallSideEffect : ~m1127_36 -# 1127| m1127_43(unknown) = Chi : total:m1127_36, partial:m1127_42 -#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, m1127_23 -# 1127| r1127_44(int) = Load[?] : &:r1127_41, ~m1127_43 -# 1127| m1127_45(int) = Store[e] : &:r1127_38, r1127_44 +# 1127| r1127_34(glval<int>) = VariableAddress[e] : +# 1127| r1127_35(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_13(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1127_35 +# 1127| r1127_36(glval<unknown>) = 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<int>) = VariableAddress[e] : -# 1128| r1128_2(int) = Load[e] : &:r1128_1, m1127_45 +# 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 @@ -7357,16 +7353,16 @@ ir.cpp: #-----| Goto -> Block 4 # 1127| Block 4 -# 1127| v1127_46(void) = NoOp : -# 1127| r1127_47(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : -# 1127| r1127_48(glval<unknown>) = FunctionAddress[operator++] : -# 1127| r1127_49(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = Call[operator++] : func:r1127_48, this:r1127_47 -# 1127| m1127_50(unknown) = ^CallSideEffect : ~m1127_43 -# 1127| m1127_51(unknown) = Chi : total:m1127_43, partial:m1127_50 -# 1127| v1127_52(void) = ^IndirectReadSideEffect[-1] : &:r1127_47, m1127_23 -# 1127| m1127_53(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r1127_47 -# 1127| m1127_54(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m1127_23, partial:m1127_53 -# 1127| r1127_55(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r1127_49 +# 1127| v1127_42(void) = NoOp : +# 1127| r1127_43(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +# 1127| r1127_44(glval<unknown>) = FunctionAddress[operator++] : +# 1127| r1127_45(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = 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<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r1127_43 +# 1127| m1127_50(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m1127_19, partial:m1127_49 +# 1127| r1127_51(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r1127_45 #-----| Goto (back edge) -> Block 1 # 1133| Block 5 @@ -7382,77 +7378,73 @@ ir.cpp: #-----| r0_15(glval<vector<int>>) = CopyValue : r1133_9 # 1133| r1133_10(glval<unknown>) = FunctionAddress[begin] : # 1133| r1133_11(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[begin] : func:r1133_10, this:r0_15 -# 1133| m1133_12(unknown) = ^CallSideEffect : ~m1127_36 -# 1133| m1133_13(unknown) = Chi : total:m1127_36, partial:m1133_12 #-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m1126_8 -# 1133| m1133_14(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__begin)] : &:r1133_7, r1133_11 -# 1133| r1133_15(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : -# 1133| r1133_16(glval<vector<int> &>) = VariableAddress[(__range)] : -# 1133| r1133_17(vector<int> &) = Load[(__range)] : &:r1133_16, m1133_6 -#-----| r0_17(glval<vector<int>>) = CopyValue : r1133_17 -# 1133| r1133_18(glval<unknown>) = FunctionAddress[end] : -# 1133| r1133_19(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[end] : func:r1133_18, this:r0_17 -# 1133| m1133_20(unknown) = ^CallSideEffect : ~m1133_13 -# 1133| m1133_21(unknown) = Chi : total:m1133_13, partial:m1133_20 +# 1133| m1133_12(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__begin)] : &:r1133_7, r1133_11 +# 1133| r1133_13(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +# 1133| r1133_14(glval<vector<int> &>) = VariableAddress[(__range)] : +# 1133| r1133_15(vector<int> &) = Load[(__range)] : &:r1133_14, m1133_6 +#-----| r0_17(glval<vector<int>>) = CopyValue : r1133_15 +# 1133| r1133_16(glval<unknown>) = FunctionAddress[end] : +# 1133| r1133_17(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[end] : func:r1133_16, this:r0_17 #-----| v0_18(void) = ^IndirectReadSideEffect[-1] : &:r0_17, ~m1126_8 -# 1133| m1133_22(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__end)] : &:r1133_15, r1133_19 +# 1133| m1133_18(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__end)] : &:r1133_13, r1133_17 #-----| Goto -> Block 6 # 1133| Block 6 -# 1133| m1133_23(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Phi : from 5:m1133_14, from 7:m1133_45 -# 1133| m1133_24(unknown) = Phi : from 5:~m1133_21, from 7:~m1133_42 -# 1133| r1133_25(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : -#-----| r0_19(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1133_25 -# 1133| r1133_26(glval<unknown>) = FunctionAddress[operator!=] : +# 1133| m1133_19(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = 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<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_19(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1133_21 +# 1133| r1133_22(glval<unknown>) = FunctionAddress[operator!=] : #-----| r0_20(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[#temp0:0] : #-----| m0_21(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Uninitialized[#temp0:0] : &:r0_20 -# 1133| r1133_27(glval<unknown>) = FunctionAddress[iterator] : -# 1133| r1133_28(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : -#-----| r0_22(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1133_28 +# 1133| r1133_23(glval<unknown>) = FunctionAddress[iterator] : +# 1133| r1133_24(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +#-----| r0_22(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1133_24 #-----| r0_23(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = CopyValue : r0_22 -# 1133| v1133_29(void) = Call[iterator] : func:r1133_27, this:r0_20, 0:r0_23 -# 1133| m1133_30(unknown) = ^CallSideEffect : ~m1133_24 -# 1133| m1133_31(unknown) = Chi : total:m1133_24, partial:m1133_30 -#-----| v0_24(void) = ^BufferReadSideEffect[0] : &:r0_23, ~m1133_22 -# 1133| m1133_32(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_20 -# 1133| m1133_33(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m0_21, partial:m1133_32 -#-----| r0_25(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Load[#temp0:0] : &:r0_20, m1133_33 -# 1133| r1133_34(bool) = Call[operator!=] : func:r1133_26, this:r0_19, 0:r0_25 -# 1133| m1133_35(unknown) = ^CallSideEffect : ~m1133_31 -# 1133| m1133_36(unknown) = Chi : total:m1133_31, partial:m1133_35 -#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_19, m1133_23 -# 1133| v1133_37(void) = ConditionalBranch : r1133_34 +# 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<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_20 +# 1133| m1133_29(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m0_21, partial:m1133_28 +#-----| r0_25(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = 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 # 1133| Block 7 -# 1133| r1133_38(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : -# 1133| r1133_39(glval<unknown>) = FunctionAddress[operator++] : -# 1133| r1133_40(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = Call[operator++] : func:r1133_39, this:r1133_38 -# 1133| m1133_41(unknown) = ^CallSideEffect : ~m1133_52 -# 1133| m1133_42(unknown) = Chi : total:m1133_52, partial:m1133_41 -# 1133| v1133_43(void) = ^IndirectReadSideEffect[-1] : &:r1133_38, m1133_23 -# 1133| m1133_44(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r1133_38 -# 1133| m1133_45(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m1133_23, partial:m1133_44 -# 1133| r1133_46(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r1133_40 +# 1133| r1133_34(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +# 1133| r1133_35(glval<unknown>) = FunctionAddress[operator++] : +# 1133| r1133_36(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = 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<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r1133_34 +# 1133| m1133_41(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m1133_19, partial:m1133_40 +# 1133| r1133_42(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r1133_36 #-----| Goto (back edge) -> Block 6 # 1133| Block 8 -# 1133| r1133_47(glval<int &>) = VariableAddress[e] : -# 1133| r1133_48(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : -#-----| r0_27(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1133_48 -# 1133| r1133_49(glval<unknown>) = FunctionAddress[operator*] : -# 1133| r1133_50(int &) = Call[operator*] : func:r1133_49, this:r0_27 -# 1133| m1133_51(unknown) = ^CallSideEffect : ~m1133_36 -# 1133| m1133_52(unknown) = Chi : total:m1133_36, partial:m1133_51 -#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, m1133_23 -# 1133| r1133_53(glval<int>) = CopyValue : r1133_50 -# 1133| r1133_54(glval<int>) = Convert : r1133_53 -# 1133| r1133_55(int &) = CopyValue : r1133_54 -# 1133| m1133_56(int &) = Store[e] : &:r1133_47, r1133_55 +# 1133| r1133_43(glval<int &>) = VariableAddress[e] : +# 1133| r1133_44(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_27(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1133_44 +# 1133| r1133_45(glval<unknown>) = 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<int>) = CopyValue : r1133_46 +# 1133| r1133_50(glval<int>) = Convert : r1133_49 +# 1133| r1133_51(int &) = CopyValue : r1133_50 +# 1133| m1133_52(int &) = Store[e] : &:r1133_43, r1133_51 # 1134| r1134_1(glval<int &>) = VariableAddress[e] : -# 1134| r1134_2(int &) = Load[e] : &:r1134_1, m1133_56 -# 1134| r1134_3(int) = Load[?] : &:r1134_2, ~m1133_52 +# 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 @@ -7464,7 +7456,7 @@ ir.cpp: #-----| Goto -> Block 10 # 1137| Block 10 -# 1137| m1137_1(unknown) = Phi : from 6:~m1133_36, from 9:~m1133_52 +# 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 @@ -13420,87 +13412,83 @@ ir.cpp: #-----| r0_2(glval<vector<ClassWithDestructor>>) = Convert : r0_1 # 2201| r2201_21(glval<unknown>) = FunctionAddress[begin] : # 2201| r2201_22(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[begin] : func:r2201_21, this:r0_2 -# 2201| m2201_23(unknown) = ^CallSideEffect : ~m2201_11 -# 2201| m2201_24(unknown) = Chi : total:m2201_11, partial:m2201_23 #-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2201_13 -# 2201| m2201_25(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__begin)] : &:r2201_18, r2201_22 -# 2201| r2201_26(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : -# 2201| r2201_27(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2201| r2201_28(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2201_27, m2201_17 -#-----| r0_4(glval<vector<ClassWithDestructor>>) = CopyValue : r2201_28 +# 2201| m2201_23(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__begin)] : &:r2201_18, r2201_22 +# 2201| r2201_24(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +# 2201| r2201_25(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2201| r2201_26(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2201_25, m2201_17 +#-----| r0_4(glval<vector<ClassWithDestructor>>) = CopyValue : r2201_26 #-----| r0_5(glval<vector<ClassWithDestructor>>) = Convert : r0_4 -# 2201| r2201_29(glval<unknown>) = FunctionAddress[end] : -# 2201| r2201_30(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[end] : func:r2201_29, this:r0_5 -# 2201| m2201_31(unknown) = ^CallSideEffect : ~m2201_24 -# 2201| m2201_32(unknown) = Chi : total:m2201_24, partial:m2201_31 +# 2201| r2201_27(glval<unknown>) = FunctionAddress[end] : +# 2201| r2201_28(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[end] : func:r2201_27, this:r0_5 #-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2201_13 -# 2201| m2201_33(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__end)] : &:r2201_26, r2201_30 +# 2201| m2201_29(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__end)] : &:r2201_24, r2201_28 #-----| Goto -> Block 8 # 2201| Block 8 -# 2201| m2201_34(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Phi : from 7:m2201_25, from 9:m2201_72 -# 2201| m2201_35(unknown) = Phi : from 7:~m2201_32, from 9:~m2201_69 -# 2201| r2201_36(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : -#-----| r0_7(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2201_36 -# 2201| r2201_37(glval<unknown>) = FunctionAddress[operator!=] : +# 2201| m2201_30(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = 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<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_7(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2201_32 +# 2201| r2201_33(glval<unknown>) = FunctionAddress[operator!=] : #-----| r0_8(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[#temp0:0] : #-----| m0_9(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Uninitialized[#temp0:0] : &:r0_8 -# 2201| r2201_38(glval<unknown>) = FunctionAddress[iterator] : -# 2201| r2201_39(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : -#-----| r0_10(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2201_39 +# 2201| r2201_34(glval<unknown>) = FunctionAddress[iterator] : +# 2201| r2201_35(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +#-----| r0_10(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2201_35 #-----| r0_11(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = CopyValue : r0_10 -# 2201| v2201_40(void) = Call[iterator] : func:r2201_38, this:r0_8, 0:r0_11 -# 2201| m2201_41(unknown) = ^CallSideEffect : ~m2201_35 -# 2201| m2201_42(unknown) = Chi : total:m2201_35, partial:m2201_41 -#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m2201_33 -# 2201| m2201_43(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 -# 2201| m2201_44(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m0_9, partial:m2201_43 -#-----| r0_13(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Load[#temp0:0] : &:r0_8, m2201_44 -# 2201| r2201_45(bool) = Call[operator!=] : func:r2201_37, this:r0_7, 0:r0_13 -# 2201| m2201_46(unknown) = ^CallSideEffect : ~m2201_42 -# 2201| m2201_47(unknown) = Chi : total:m2201_42, partial:m2201_46 -#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2201_34 -# 2201| v2201_48(void) = ConditionalBranch : r2201_45 +# 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<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +# 2201| m2201_40(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m0_9, partial:m2201_39 +#-----| r0_13(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = 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_49(glval<ClassWithDestructor>) = VariableAddress[y] : -# 2201| r2201_50(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : -#-----| r0_15(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2201_50 -# 2201| r2201_51(glval<unknown>) = FunctionAddress[operator*] : -# 2201| r2201_52(ClassWithDestructor &) = Call[operator*] : func:r2201_51, this:r0_15 -# 2201| m2201_53(unknown) = ^CallSideEffect : ~m2201_47 -# 2201| m2201_54(unknown) = Chi : total:m2201_47, partial:m2201_53 -#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2201_34 -# 2201| r2201_55(ClassWithDestructor) = Load[?] : &:r2201_52, ~m2201_54 -# 2201| m2201_56(ClassWithDestructor) = Store[y] : &:r2201_49, r2201_55 +# 2201| r2201_45(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2201| r2201_46(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_15(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2201_46 +# 2201| r2201_47(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[y] : # 2202| r2202_2(glval<unknown>) = 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_54 -# 2202| m2202_6(unknown) = Chi : total:m2201_54, partial:m2202_5 -# 2202| v2202_7(void) = ^IndirectReadSideEffect[-1] : &:r2202_1, m2201_56 +# 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_56, partial:m2202_8 -# 2201| r2201_57(glval<ClassWithDestructor>) = VariableAddress[y] : -# 2201| r2201_58(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : -# 2201| v2201_59(void) = Call[~ClassWithDestructor] : func:r2201_58, this:r2201_57 -# 2201| m2201_60(unknown) = ^CallSideEffect : ~m2202_6 -# 2201| m2201_61(unknown) = Chi : total:m2202_6, partial:m2201_60 -# 2201| v2201_62(void) = ^IndirectReadSideEffect[-1] : &:r2201_57, m2202_9 -# 2201| m2201_63(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2201_57 -# 2201| m2201_64(ClassWithDestructor) = Chi : total:m2202_9, partial:m2201_63 -# 2201| r2201_65(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : -# 2201| r2201_66(glval<unknown>) = FunctionAddress[operator++] : -# 2201| r2201_67(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = Call[operator++] : func:r2201_66, this:r2201_65 -# 2201| m2201_68(unknown) = ^CallSideEffect : ~m2201_61 -# 2201| m2201_69(unknown) = Chi : total:m2201_61, partial:m2201_68 -# 2201| v2201_70(void) = ^IndirectReadSideEffect[-1] : &:r2201_65, m2201_34 -# 2201| m2201_71(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2201_65 -# 2201| m2201_72(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m2201_34, partial:m2201_71 -# 2201| r2201_73(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2201_67 +# 2202| m2202_9(ClassWithDestructor) = Chi : total:m2201_52, partial:m2202_8 +# 2201| r2201_53(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2201| r2201_54(glval<unknown>) = 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<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +# 2201| r2201_62(glval<unknown>) = FunctionAddress[operator++] : +# 2201| r2201_63(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = 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<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2201_61 +# 2201| m2201_68(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m2201_30, partial:m2201_67 +# 2201| r2201_69(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2201_63 #-----| Goto (back edge) -> Block 8 # 2204| Block 10 @@ -13513,8 +13501,8 @@ ir.cpp: # 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_47 -# 2204| m2204_11(unknown) = Chi : total:m2201_47, partial:m2204_10 +# 2204| m2204_10(unknown) = ^CallSideEffect : ~m2201_43 +# 2204| m2204_11(unknown) = Chi : total:m2201_43, partial:m2204_10 # 2204| m2204_12(vector<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2204_1 # 2204| m2204_13(vector<ClassWithDestructor>) = Chi : total:m2204_2, partial:m2204_12 # 2204| r2204_14(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : @@ -13528,70 +13516,66 @@ ir.cpp: #-----| r0_18(glval<vector<ClassWithDestructor>>) = Convert : r0_17 # 2204| r2204_21(glval<unknown>) = FunctionAddress[begin] : # 2204| r2204_22(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[begin] : func:r2204_21, this:r0_18 -# 2204| m2204_23(unknown) = ^CallSideEffect : ~m2204_11 -# 2204| m2204_24(unknown) = Chi : total:m2204_11, partial:m2204_23 #-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, m2204_13 -# 2204| m2204_25(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__begin)] : &:r2204_18, r2204_22 -# 2204| r2204_26(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : -# 2204| r2204_27(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2204| r2204_28(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2204_27, m2204_17 -#-----| r0_20(glval<vector<ClassWithDestructor>>) = CopyValue : r2204_28 +# 2204| m2204_23(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__begin)] : &:r2204_18, r2204_22 +# 2204| r2204_24(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +# 2204| r2204_25(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2204| r2204_26(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2204_25, m2204_17 +#-----| r0_20(glval<vector<ClassWithDestructor>>) = CopyValue : r2204_26 #-----| r0_21(glval<vector<ClassWithDestructor>>) = Convert : r0_20 -# 2204| r2204_29(glval<unknown>) = FunctionAddress[end] : -# 2204| r2204_30(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[end] : func:r2204_29, this:r0_21 -# 2204| m2204_31(unknown) = ^CallSideEffect : ~m2204_24 -# 2204| m2204_32(unknown) = Chi : total:m2204_24, partial:m2204_31 +# 2204| r2204_27(glval<unknown>) = FunctionAddress[end] : +# 2204| r2204_28(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[end] : func:r2204_27, this:r0_21 #-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_21, m2204_13 -# 2204| m2204_33(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__end)] : &:r2204_26, r2204_30 +# 2204| m2204_29(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__end)] : &:r2204_24, r2204_28 #-----| Goto -> Block 11 # 2204| Block 11 -# 2204| m2204_34(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Phi : from 10:m2204_25, from 14:m2204_88 -# 2204| m2204_35(unknown) = Phi : from 10:~m2204_32, from 14:~m2204_85 -# 2204| r2204_36(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : -#-----| r0_23(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2204_36 -# 2204| r2204_37(glval<unknown>) = FunctionAddress[operator!=] : +# 2204| m2204_30(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = 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<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_23(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2204_32 +# 2204| r2204_33(glval<unknown>) = FunctionAddress[operator!=] : #-----| r0_24(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[#temp0:0] : #-----| m0_25(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Uninitialized[#temp0:0] : &:r0_24 -# 2204| r2204_38(glval<unknown>) = FunctionAddress[iterator] : -# 2204| r2204_39(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : -#-----| r0_26(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2204_39 +# 2204| r2204_34(glval<unknown>) = FunctionAddress[iterator] : +# 2204| r2204_35(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +#-----| r0_26(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2204_35 #-----| r0_27(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = CopyValue : r0_26 -# 2204| v2204_40(void) = Call[iterator] : func:r2204_38, this:r0_24, 0:r0_27 -# 2204| m2204_41(unknown) = ^CallSideEffect : ~m2204_35 -# 2204| m2204_42(unknown) = Chi : total:m2204_35, partial:m2204_41 -#-----| v0_28(void) = ^BufferReadSideEffect[0] : &:r0_27, ~m2204_33 -# 2204| m2204_43(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_24 -# 2204| m2204_44(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m0_25, partial:m2204_43 -#-----| r0_29(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Load[#temp0:0] : &:r0_24, m2204_44 -# 2204| r2204_45(bool) = Call[operator!=] : func:r2204_37, this:r0_23, 0:r0_29 -# 2204| m2204_46(unknown) = ^CallSideEffect : ~m2204_42 -# 2204| m2204_47(unknown) = Chi : total:m2204_42, partial:m2204_46 -#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_23, m2204_34 -# 2204| v2204_48(void) = ConditionalBranch : r2204_45 +# 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<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_24 +# 2204| m2204_40(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m0_25, partial:m2204_39 +#-----| r0_29(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = 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_49(glval<ClassWithDestructor>) = VariableAddress[y] : -# 2204| r2204_50(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : -#-----| r0_31(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2204_50 -# 2204| r2204_51(glval<unknown>) = FunctionAddress[operator*] : -# 2204| r2204_52(ClassWithDestructor &) = Call[operator*] : func:r2204_51, this:r0_31 -# 2204| m2204_53(unknown) = ^CallSideEffect : ~m2204_47 -# 2204| m2204_54(unknown) = Chi : total:m2204_47, partial:m2204_53 -#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, m2204_34 -# 2204| r2204_55(ClassWithDestructor) = Load[?] : &:r2204_52, ~m2204_54 -# 2204| m2204_56(ClassWithDestructor) = Store[y] : &:r2204_49, r2204_55 +# 2204| r2204_45(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2204| r2204_46(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_31(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2204_46 +# 2204| r2204_47(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[y] : # 2205| r2205_2(glval<unknown>) = 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_54 -# 2205| m2205_6(unknown) = Chi : total:m2204_54, partial:m2205_5 -# 2205| v2205_7(void) = ^IndirectReadSideEffect[-1] : &:r2205_1, m2204_56 +# 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_56, partial:m2205_8 +# 2205| m2205_9(ClassWithDestructor) = Chi : total:m2204_52, partial:m2205_8 # 2206| r2206_1(glval<ClassWithDestructor>) = VariableAddress[y] : # 2206| r2206_2(glval<unknown>) = FunctionAddress[get_x] : # 2206| r2206_3(char) = Call[get_x] : func:r2206_2, this:r2206_1 @@ -13609,50 +13593,50 @@ ir.cpp: # 2207| Block 13 # 2207| v2207_1(void) = NoOp : -# 2204| r2204_57(glval<ClassWithDestructor>) = VariableAddress[y] : -# 2204| r2204_58(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : -# 2204| v2204_59(void) = Call[~ClassWithDestructor] : func:r2204_58, this:r2204_57 -# 2204| m2204_60(unknown) = ^CallSideEffect : ~m2206_5 -# 2204| m2204_61(unknown) = Chi : total:m2206_5, partial:m2204_60 -# 2204| v2204_62(void) = ^IndirectReadSideEffect[-1] : &:r2204_57, m2206_8 -# 2204| m2204_63(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2204_57 -# 2204| m2204_64(ClassWithDestructor) = Chi : total:m2206_8, partial:m2204_63 -# 2204| r2204_65(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : -# 2204| r2204_66(glval<unknown>) = FunctionAddress[~vector] : -# 2204| v2204_67(void) = Call[~vector] : func:r2204_66, this:r2204_65 -# 2204| m2204_68(unknown) = ^CallSideEffect : ~m2204_61 -# 2204| m2204_69(unknown) = Chi : total:m2204_61, partial:m2204_68 -# 2204| v2204_70(void) = ^IndirectReadSideEffect[-1] : &:r2204_65, m2204_13 -# 2204| m2204_71(vector<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2204_65 -# 2204| m2204_72(vector<ClassWithDestructor>) = Chi : total:m2204_13, partial:m2204_71 +# 2204| r2204_53(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2204| r2204_54(glval<unknown>) = 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<vector<ClassWithDestructor>>) = VariableAddress[ys] : +# 2204| r2204_62(glval<unknown>) = 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<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2204_61 +# 2204| m2204_68(vector<ClassWithDestructor>) = Chi : total:m2204_13, partial:m2204_67 # 2219| r2219_1(glval<ClassWithDestructor>) = VariableAddress[x] : # 2219| r2219_2(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : # 2219| v2219_3(void) = Call[~ClassWithDestructor] : func:r2219_2, this:r2219_1 -# 2219| m2219_4(unknown) = ^CallSideEffect : ~m2204_69 -# 2219| m2219_5(unknown) = Chi : total:m2204_69, partial:m2219_4 +# 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_73(glval<ClassWithDestructor>) = VariableAddress[y] : -# 2204| r2204_74(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : -# 2204| v2204_75(void) = Call[~ClassWithDestructor] : func:r2204_74, this:r2204_73 -# 2204| m2204_76(unknown) = ^CallSideEffect : ~m2206_5 -# 2204| m2204_77(unknown) = Chi : total:m2206_5, partial:m2204_76 -# 2204| v2204_78(void) = ^IndirectReadSideEffect[-1] : &:r2204_73, m2206_8 -# 2204| m2204_79(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2204_73 -# 2204| m2204_80(ClassWithDestructor) = Chi : total:m2206_8, partial:m2204_79 -# 2204| r2204_81(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : -# 2204| r2204_82(glval<unknown>) = FunctionAddress[operator++] : -# 2204| r2204_83(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = Call[operator++] : func:r2204_82, this:r2204_81 -# 2204| m2204_84(unknown) = ^CallSideEffect : ~m2204_77 -# 2204| m2204_85(unknown) = Chi : total:m2204_77, partial:m2204_84 -# 2204| v2204_86(void) = ^IndirectReadSideEffect[-1] : &:r2204_81, m2204_34 -# 2204| m2204_87(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2204_81 -# 2204| m2204_88(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m2204_34, partial:m2204_87 -# 2204| r2204_89(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2204_83 +# 2204| r2204_69(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2204| r2204_70(glval<unknown>) = 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<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +# 2204| r2204_78(glval<unknown>) = FunctionAddress[operator++] : +# 2204| r2204_79(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = 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<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2204_77 +# 2204| m2204_84(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m2204_30, partial:m2204_83 +# 2204| r2204_85(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2204_79 #-----| Goto (back edge) -> Block 11 # 2210| Block 15 @@ -13661,8 +13645,8 @@ ir.cpp: # 2210| r2210_3(glval<unknown>) = 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_47 -# 2210| m2210_7(unknown) = Chi : total:m2204_47, partial:m2210_6 +# 2210| m2210_6(unknown) = ^CallSideEffect : ~m2204_43 +# 2210| m2210_7(unknown) = Chi : total:m2204_43, partial:m2210_6 # 2210| m2210_8(vector<int>) = ^IndirectMayWriteSideEffect[-1] : &:r2210_1 # 2210| m2210_9(vector<int>) = Chi : total:m2210_2, partial:m2210_8 # 2210| r2210_10(glval<vector<int> &>) = VariableAddress[(__range)] : @@ -13676,75 +13660,71 @@ ir.cpp: #-----| r0_34(glval<vector<int>>) = Convert : r0_33 # 2210| r2210_17(glval<unknown>) = FunctionAddress[begin] : # 2210| r2210_18(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[begin] : func:r2210_17, this:r0_34 -# 2210| m2210_19(unknown) = ^CallSideEffect : ~m2210_7 -# 2210| m2210_20(unknown) = Chi : total:m2210_7, partial:m2210_19 #-----| v0_35(void) = ^IndirectReadSideEffect[-1] : &:r0_34, m2210_9 -# 2210| m2210_21(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__begin)] : &:r2210_14, r2210_18 -# 2210| r2210_22(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : -# 2210| r2210_23(glval<vector<int> &>) = VariableAddress[(__range)] : -# 2210| r2210_24(vector<int> &) = Load[(__range)] : &:r2210_23, m2210_13 -#-----| r0_36(glval<vector<int>>) = CopyValue : r2210_24 +# 2210| m2210_19(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__begin)] : &:r2210_14, r2210_18 +# 2210| r2210_20(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +# 2210| r2210_21(glval<vector<int> &>) = VariableAddress[(__range)] : +# 2210| r2210_22(vector<int> &) = Load[(__range)] : &:r2210_21, m2210_13 +#-----| r0_36(glval<vector<int>>) = CopyValue : r2210_22 #-----| r0_37(glval<vector<int>>) = Convert : r0_36 -# 2210| r2210_25(glval<unknown>) = FunctionAddress[end] : -# 2210| r2210_26(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[end] : func:r2210_25, this:r0_37 -# 2210| m2210_27(unknown) = ^CallSideEffect : ~m2210_20 -# 2210| m2210_28(unknown) = Chi : total:m2210_20, partial:m2210_27 +# 2210| r2210_23(glval<unknown>) = FunctionAddress[end] : +# 2210| r2210_24(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[end] : func:r2210_23, this:r0_37 #-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_37, m2210_9 -# 2210| m2210_29(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__end)] : &:r2210_22, r2210_26 +# 2210| m2210_25(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__end)] : &:r2210_20, r2210_24 #-----| Goto -> Block 16 # 2210| Block 16 -# 2210| m2210_30(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Phi : from 15:m2210_21, from 17:m2210_52 -# 2210| m2210_31(unknown) = Phi : from 15:~m2210_28, from 17:~m2210_49 -# 2210| r2210_32(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : -#-----| r0_39(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r2210_32 -# 2210| r2210_33(glval<unknown>) = FunctionAddress[operator!=] : +# 2210| m2210_26(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = 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<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_39(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r2210_28 +# 2210| r2210_29(glval<unknown>) = FunctionAddress[operator!=] : #-----| r0_40(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[#temp0:0] : #-----| m0_41(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Uninitialized[#temp0:0] : &:r0_40 -# 2210| r2210_34(glval<unknown>) = FunctionAddress[iterator] : -# 2210| r2210_35(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : -#-----| r0_42(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r2210_35 +# 2210| r2210_30(glval<unknown>) = FunctionAddress[iterator] : +# 2210| r2210_31(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +#-----| r0_42(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r2210_31 #-----| r0_43(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = CopyValue : r0_42 -# 2210| v2210_36(void) = Call[iterator] : func:r2210_34, this:r0_40, 0:r0_43 -# 2210| m2210_37(unknown) = ^CallSideEffect : ~m2210_31 -# 2210| m2210_38(unknown) = Chi : total:m2210_31, partial:m2210_37 -#-----| v0_44(void) = ^BufferReadSideEffect[0] : &:r0_43, ~m2210_29 -# 2210| m2210_39(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_40 -# 2210| m2210_40(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m0_41, partial:m2210_39 -#-----| r0_45(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Load[#temp0:0] : &:r0_40, m2210_40 -# 2210| r2210_41(bool) = Call[operator!=] : func:r2210_33, this:r0_39, 0:r0_45 -# 2210| m2210_42(unknown) = ^CallSideEffect : ~m2210_38 -# 2210| m2210_43(unknown) = Chi : total:m2210_38, partial:m2210_42 -#-----| v0_46(void) = ^IndirectReadSideEffect[-1] : &:r0_39, m2210_30 -# 2210| v2210_44(void) = ConditionalBranch : r2210_41 +# 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<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_40 +# 2210| m2210_36(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m0_41, partial:m2210_35 +#-----| r0_45(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = 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_45(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : -# 2210| r2210_46(glval<unknown>) = FunctionAddress[operator++] : -# 2210| r2210_47(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = Call[operator++] : func:r2210_46, this:r2210_45 -# 2210| m2210_48(unknown) = ^CallSideEffect : ~m2210_59 -# 2210| m2210_49(unknown) = Chi : total:m2210_59, partial:m2210_48 -# 2210| v2210_50(void) = ^IndirectReadSideEffect[-1] : &:r2210_45, m2210_30 -# 2210| m2210_51(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r2210_45 -# 2210| m2210_52(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m2210_30, partial:m2210_51 -# 2210| r2210_53(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r2210_47 +# 2210| r2210_41(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +# 2210| r2210_42(glval<unknown>) = FunctionAddress[operator++] : +# 2210| r2210_43(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = 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<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r2210_41 +# 2210| m2210_48(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Chi : total:m2210_26, partial:m2210_47 +# 2210| r2210_49(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r2210_43 #-----| Goto (back edge) -> Block 16 # 2210| Block 18 -# 2210| r2210_54(glval<int>) = VariableAddress[y] : -# 2210| r2210_55(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : -#-----| r0_47(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r2210_55 -# 2210| r2210_56(glval<unknown>) = FunctionAddress[operator*] : -# 2210| r2210_57(int &) = Call[operator*] : func:r2210_56, this:r0_47 -# 2210| m2210_58(unknown) = ^CallSideEffect : ~m2210_43 -# 2210| m2210_59(unknown) = Chi : total:m2210_43, partial:m2210_58 -#-----| v0_48(void) = ^IndirectReadSideEffect[-1] : &:r0_47, m2210_30 -# 2210| r2210_60(int) = Load[?] : &:r2210_57, ~m2210_59 -# 2210| m2210_61(int) = Store[y] : &:r2210_54, r2210_60 +# 2210| r2210_50(glval<int>) = VariableAddress[y] : +# 2210| r2210_51(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_47(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r2210_51 +# 2210| r2210_52(glval<unknown>) = 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<int>) = VariableAddress[y] : -# 2211| r2211_2(int) = Load[y] : &:r2211_1, m2210_61 +# 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 @@ -13753,19 +13733,19 @@ ir.cpp: # 2212| Block 19 # 2212| v2212_1(void) = NoOp : -# 2210| r2210_62(glval<vector<int>>) = VariableAddress[ys] : -# 2210| r2210_63(glval<unknown>) = FunctionAddress[~vector] : -# 2210| v2210_64(void) = Call[~vector] : func:r2210_63, this:r2210_62 -# 2210| m2210_65(unknown) = ^CallSideEffect : ~m2210_59 -# 2210| m2210_66(unknown) = Chi : total:m2210_59, partial:m2210_65 -# 2210| v2210_67(void) = ^IndirectReadSideEffect[-1] : &:r2210_62, m2210_9 -# 2210| m2210_68(vector<int>) = ^IndirectMayWriteSideEffect[-1] : &:r2210_62 -# 2210| m2210_69(vector<int>) = Chi : total:m2210_9, partial:m2210_68 +# 2210| r2210_58(glval<vector<int>>) = VariableAddress[ys] : +# 2210| r2210_59(glval<unknown>) = 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<int>) = ^IndirectMayWriteSideEffect[-1] : &:r2210_58 +# 2210| m2210_65(vector<int>) = Chi : total:m2210_9, partial:m2210_64 # 2219| r2219_9(glval<ClassWithDestructor>) = VariableAddress[x] : # 2219| r2219_10(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : # 2219| v2219_11(void) = Call[~ClassWithDestructor] : func:r2219_10, this:r2219_9 -# 2219| m2219_12(unknown) = ^CallSideEffect : ~m2210_66 -# 2219| m2219_13(unknown) = Chi : total:m2210_66, partial:m2219_12 +# 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 @@ -13781,8 +13761,8 @@ ir.cpp: # 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_43 -# 2215| m2215_11(unknown) = Chi : total:m2210_43, partial:m2215_10 +# 2215| m2215_10(unknown) = ^CallSideEffect : ~m2210_39 +# 2215| m2215_11(unknown) = Chi : total:m2210_39, partial:m2215_10 # 2215| m2215_12(vector<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2215_1 # 2215| m2215_13(vector<ClassWithDestructor>) = Chi : total:m2215_2, partial:m2215_12 # 2215| r2215_14(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : @@ -13796,67 +13776,63 @@ ir.cpp: #-----| r0_50(glval<vector<ClassWithDestructor>>) = Convert : r0_49 # 2215| r2215_21(glval<unknown>) = FunctionAddress[begin] : # 2215| r2215_22(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[begin] : func:r2215_21, this:r0_50 -# 2215| m2215_23(unknown) = ^CallSideEffect : ~m2215_11 -# 2215| m2215_24(unknown) = Chi : total:m2215_11, partial:m2215_23 #-----| v0_51(void) = ^IndirectReadSideEffect[-1] : &:r0_50, m2215_13 -# 2215| m2215_25(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__begin)] : &:r2215_18, r2215_22 -# 2215| r2215_26(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : -# 2215| r2215_27(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2215| r2215_28(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2215_27, m2215_17 -#-----| r0_52(glval<vector<ClassWithDestructor>>) = CopyValue : r2215_28 +# 2215| m2215_23(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__begin)] : &:r2215_18, r2215_22 +# 2215| r2215_24(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +# 2215| r2215_25(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2215| r2215_26(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2215_25, m2215_17 +#-----| r0_52(glval<vector<ClassWithDestructor>>) = CopyValue : r2215_26 #-----| r0_53(glval<vector<ClassWithDestructor>>) = Convert : r0_52 -# 2215| r2215_29(glval<unknown>) = FunctionAddress[end] : -# 2215| r2215_30(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[end] : func:r2215_29, this:r0_53 -# 2215| m2215_31(unknown) = ^CallSideEffect : ~m2215_24 -# 2215| m2215_32(unknown) = Chi : total:m2215_24, partial:m2215_31 +# 2215| r2215_27(glval<unknown>) = FunctionAddress[end] : +# 2215| r2215_28(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[end] : func:r2215_27, this:r0_53 #-----| v0_54(void) = ^IndirectReadSideEffect[-1] : &:r0_53, m2215_13 -# 2215| m2215_33(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__end)] : &:r2215_26, r2215_30 +# 2215| m2215_29(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__end)] : &:r2215_24, r2215_28 #-----| Goto -> Block 21 # 2215| Block 21 -# 2215| m2215_34(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Phi : from 20:m2215_25, from 22:m2215_72 -# 2215| m2215_35(unknown) = Phi : from 20:~m2215_32, from 22:~m2215_69 -# 2215| r2215_36(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : -#-----| r0_55(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2215_36 -# 2215| r2215_37(glval<unknown>) = FunctionAddress[operator!=] : +# 2215| m2215_30(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = 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<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_55(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2215_32 +# 2215| r2215_33(glval<unknown>) = FunctionAddress[operator!=] : #-----| r0_56(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[#temp0:0] : #-----| m0_57(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Uninitialized[#temp0:0] : &:r0_56 -# 2215| r2215_38(glval<unknown>) = FunctionAddress[iterator] : -# 2215| r2215_39(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : -#-----| r0_58(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2215_39 +# 2215| r2215_34(glval<unknown>) = FunctionAddress[iterator] : +# 2215| r2215_35(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +#-----| r0_58(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2215_35 #-----| r0_59(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = CopyValue : r0_58 -# 2215| v2215_40(void) = Call[iterator] : func:r2215_38, this:r0_56, 0:r0_59 -# 2215| m2215_41(unknown) = ^CallSideEffect : ~m2215_35 -# 2215| m2215_42(unknown) = Chi : total:m2215_35, partial:m2215_41 -#-----| v0_60(void) = ^BufferReadSideEffect[0] : &:r0_59, ~m2215_33 -# 2215| m2215_43(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_56 -# 2215| m2215_44(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m0_57, partial:m2215_43 -#-----| r0_61(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Load[#temp0:0] : &:r0_56, m2215_44 -# 2215| r2215_45(bool) = Call[operator!=] : func:r2215_37, this:r0_55, 0:r0_61 -# 2215| m2215_46(unknown) = ^CallSideEffect : ~m2215_42 -# 2215| m2215_47(unknown) = Chi : total:m2215_42, partial:m2215_46 -#-----| v0_62(void) = ^IndirectReadSideEffect[-1] : &:r0_55, m2215_34 -# 2215| v2215_48(void) = ConditionalBranch : r2215_45 +# 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<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_56 +# 2215| m2215_40(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m0_57, partial:m2215_39 +#-----| r0_61(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = 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_49(glval<ClassWithDestructor>) = VariableAddress[y] : -# 2215| r2215_50(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : -#-----| r0_63(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2215_50 -# 2215| r2215_51(glval<unknown>) = FunctionAddress[operator*] : -# 2215| r2215_52(ClassWithDestructor &) = Call[operator*] : func:r2215_51, this:r0_63 -# 2215| m2215_53(unknown) = ^CallSideEffect : ~m2215_47 -# 2215| m2215_54(unknown) = Chi : total:m2215_47, partial:m2215_53 -#-----| v0_64(void) = ^IndirectReadSideEffect[-1] : &:r0_63, m2215_34 -# 2215| r2215_55(ClassWithDestructor) = Load[?] : &:r2215_52, ~m2215_54 -# 2215| m2215_56(ClassWithDestructor) = Store[y] : &:r2215_49, r2215_55 +# 2215| r2215_45(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2215| r2215_46(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_63(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2215_46 +# 2215| r2215_47(glval<unknown>) = 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<ClassWithDestructor>) = VariableAddress[z1] : # 2216| m2216_2(ClassWithDestructor) = Uninitialized[z1] : &:r2216_1 # 2216| r2216_3(glval<unknown>) = FunctionAddress[ClassWithDestructor] : # 2216| v2216_4(void) = Call[ClassWithDestructor] : func:r2216_3, this:r2216_1 -# 2216| m2216_5(unknown) = ^CallSideEffect : ~m2215_54 -# 2216| m2216_6(unknown) = Chi : total:m2215_54, partial:m2216_5 +# 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<ClassWithDestructor>) = VariableAddress[z2] : @@ -13883,23 +13859,23 @@ ir.cpp: # 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_57(glval<ClassWithDestructor>) = VariableAddress[y] : -# 2215| r2215_58(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : -# 2215| v2215_59(void) = Call[~ClassWithDestructor] : func:r2215_58, this:r2215_57 -# 2215| m2215_60(unknown) = ^CallSideEffect : ~m2218_13 -# 2215| m2215_61(unknown) = Chi : total:m2218_13, partial:m2215_60 -# 2215| v2215_62(void) = ^IndirectReadSideEffect[-1] : &:r2215_57, m2215_56 -# 2215| m2215_63(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2215_57 -# 2215| m2215_64(ClassWithDestructor) = Chi : total:m2215_56, partial:m2215_63 -# 2215| r2215_65(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : -# 2215| r2215_66(glval<unknown>) = FunctionAddress[operator++] : -# 2215| r2215_67(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = Call[operator++] : func:r2215_66, this:r2215_65 -# 2215| m2215_68(unknown) = ^CallSideEffect : ~m2215_61 -# 2215| m2215_69(unknown) = Chi : total:m2215_61, partial:m2215_68 -# 2215| v2215_70(void) = ^IndirectReadSideEffect[-1] : &:r2215_65, m2215_34 -# 2215| m2215_71(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2215_65 -# 2215| m2215_72(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m2215_34, partial:m2215_71 -# 2215| r2215_73(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2215_67 +# 2215| r2215_53(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2215| r2215_54(glval<unknown>) = 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<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +# 2215| r2215_62(glval<unknown>) = FunctionAddress[operator++] : +# 2215| r2215_63(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = 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<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2215_61 +# 2215| m2215_68(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Chi : total:m2215_30, partial:m2215_67 +# 2215| r2215_69(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2215_63 #-----| Goto (back edge) -> Block 21 # 2219| Block 23 @@ -13907,8 +13883,8 @@ ir.cpp: # 2219| r2219_18(glval<ClassWithDestructor>) = VariableAddress[x] : # 2219| r2219_19(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : # 2219| v2219_20(void) = Call[~ClassWithDestructor] : func:r2219_19, this:r2219_18 -# 2219| m2219_21(unknown) = ^CallSideEffect : ~m2215_47 -# 2219| m2219_22(unknown) = Chi : total:m2215_47, partial:m2219_21 +# 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 @@ -14566,76 +14542,72 @@ ir.cpp: #-----| r0_2(glval<vector<String>>) = Convert : r0_1 # 2293| r2293_27(glval<unknown>) = FunctionAddress[begin] : # 2293| r2293_28(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Call[begin] : func:r2293_27, this:r0_2 -# 2293| m2293_29(unknown) = ^CallSideEffect : ~m2293_19 -# 2293| m2293_30(unknown) = Chi : total:m2293_19, partial:m2293_29 #-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2293_21 -# 2293| m2293_31(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Store[(__begin)] : &:r2293_24, r2293_28 -# 2293| r2293_32(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__end)] : -# 2293| r2293_33(glval<vector<String> &&>) = VariableAddress[(__range)] : -# 2293| r2293_34(vector<String> &&) = Load[(__range)] : &:r2293_33, m2293_23 -#-----| r0_4(glval<vector<String>>) = CopyValue : r2293_34 +# 2293| m2293_29(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Store[(__begin)] : &:r2293_24, r2293_28 +# 2293| r2293_30(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__end)] : +# 2293| r2293_31(glval<vector<String> &&>) = VariableAddress[(__range)] : +# 2293| r2293_32(vector<String> &&) = Load[(__range)] : &:r2293_31, m2293_23 +#-----| r0_4(glval<vector<String>>) = CopyValue : r2293_32 #-----| r0_5(glval<vector<String>>) = Convert : r0_4 -# 2293| r2293_35(glval<unknown>) = FunctionAddress[end] : -# 2293| r2293_36(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Call[end] : func:r2293_35, this:r0_5 -# 2293| m2293_37(unknown) = ^CallSideEffect : ~m2293_30 -# 2293| m2293_38(unknown) = Chi : total:m2293_30, partial:m2293_37 +# 2293| r2293_33(glval<unknown>) = FunctionAddress[end] : +# 2293| r2293_34(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Call[end] : func:r2293_33, this:r0_5 #-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2293_21 -# 2293| m2293_39(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Store[(__end)] : &:r2293_32, r2293_36 +# 2293| m2293_35(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Store[(__end)] : &:r2293_30, r2293_34 #-----| Goto -> Block 4 # 2293| Block 4 -# 2293| m2293_40(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Phi : from 3:m2293_31, from 5:m2293_87 -# 2293| m2293_41(unknown) = Phi : from 3:~m2293_38, from 5:~m2293_84 -# 2293| r2293_42(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] : -#-----| r0_7(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = Convert : r2293_42 -# 2293| r2293_43(glval<unknown>) = FunctionAddress[operator!=] : +# 2293| m2293_36(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = 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<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] : +#-----| r0_7(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = Convert : r2293_38 +# 2293| r2293_39(glval<unknown>) = FunctionAddress[operator!=] : #-----| r0_8(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[#temp0:0] : #-----| m0_9(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Uninitialized[#temp0:0] : &:r0_8 -# 2293| r2293_44(glval<unknown>) = FunctionAddress[iterator] : -# 2293| r2293_45(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__end)] : -#-----| r0_10(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = Convert : r2293_45 +# 2293| r2293_40(glval<unknown>) = FunctionAddress[iterator] : +# 2293| r2293_41(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__end)] : +#-----| r0_10(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = Convert : r2293_41 #-----| r0_11(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &> &) = CopyValue : r0_10 -# 2293| v2293_46(void) = Call[iterator] : func:r2293_44, this:r0_8, 0:r0_11 -# 2293| m2293_47(unknown) = ^CallSideEffect : ~m2293_41 -# 2293| m2293_48(unknown) = Chi : total:m2293_41, partial:m2293_47 -#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m2293_39 -# 2293| m2293_49(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 -# 2293| m2293_50(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Chi : total:m0_9, partial:m2293_49 -#-----| r0_13(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Load[#temp0:0] : &:r0_8, m2293_50 -# 2293| r2293_51(bool) = Call[operator!=] : func:r2293_43, this:r0_7, 0:r0_13 -# 2293| m2293_52(unknown) = ^CallSideEffect : ~m2293_48 -# 2293| m2293_53(unknown) = Chi : total:m2293_48, partial:m2293_52 -#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2293_40 -# 2293| v2293_54(void) = ConditionalBranch : r2293_51 +# 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<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +# 2293| m2293_46(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Chi : total:m0_9, partial:m2293_45 +#-----| r0_13(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = 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 # 2293| Block 5 -# 2293| r2293_55(glval<String>) = VariableAddress[s] : -# 2293| m2293_56(String) = Uninitialized[s] : &:r2293_55 -# 2293| r2293_57(glval<unknown>) = FunctionAddress[String] : -# 2293| r2293_58(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] : -#-----| r0_15(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = Convert : r2293_58 -# 2293| r2293_59(glval<unknown>) = FunctionAddress[operator*] : -# 2293| r2293_60(String &) = Call[operator*] : func:r2293_59, this:r0_15 -# 2293| m2293_61(unknown) = ^CallSideEffect : ~m2293_53 -# 2293| m2293_62(unknown) = Chi : total:m2293_53, partial:m2293_61 -#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2293_40 -# 2293| r2293_63(glval<String>) = CopyValue : r2293_60 -# 2293| r2293_64(glval<String>) = Convert : r2293_63 -# 2293| r2293_65(String &) = CopyValue : r2293_64 -# 2293| v2293_66(void) = Call[String] : func:r2293_57, this:r2293_55, 0:r2293_65 -# 2293| m2293_67(unknown) = ^CallSideEffect : ~m2293_62 -# 2293| m2293_68(unknown) = Chi : total:m2293_62, partial:m2293_67 -# 2293| v2293_69(void) = ^BufferReadSideEffect[0] : &:r2293_65, ~m2293_68 -# 2293| m2293_70(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_55 -# 2293| m2293_71(String) = Chi : total:m2293_56, partial:m2293_70 +# 2293| r2293_51(glval<String>) = VariableAddress[s] : +# 2293| m2293_52(String) = Uninitialized[s] : &:r2293_51 +# 2293| r2293_53(glval<unknown>) = FunctionAddress[String] : +# 2293| r2293_54(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] : +#-----| r0_15(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = Convert : r2293_54 +# 2293| r2293_55(glval<unknown>) = 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<String>) = CopyValue : r2293_56 +# 2293| r2293_60(glval<String>) = 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<String>) = VariableAddress[s2] : # 2294| m2294_2(String) = Uninitialized[s2] : &:r2294_1 # 2294| r2294_3(glval<unknown>) = FunctionAddress[String] : # 2294| v2294_4(void) = Call[String] : func:r2294_3, this:r2294_1 -# 2294| m2294_5(unknown) = ^CallSideEffect : ~m2293_68 -# 2294| m2294_6(unknown) = Chi : total:m2293_68, partial:m2294_5 +# 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<String>) = VariableAddress[s2] : @@ -14646,23 +14618,23 @@ ir.cpp: # 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_72(glval<String>) = VariableAddress[s] : -# 2293| r2293_73(glval<unknown>) = FunctionAddress[~String] : -# 2293| v2293_74(void) = Call[~String] : func:r2293_73, this:r2293_72 -# 2293| m2293_75(unknown) = ^CallSideEffect : ~m2295_5 -# 2293| m2293_76(unknown) = Chi : total:m2295_5, partial:m2293_75 -# 2293| v2293_77(void) = ^IndirectReadSideEffect[-1] : &:r2293_72, m2293_71 -# 2293| m2293_78(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_72 -# 2293| m2293_79(String) = Chi : total:m2293_71, partial:m2293_78 -# 2293| r2293_80(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] : -# 2293| r2293_81(glval<unknown>) = FunctionAddress[operator++] : -# 2293| r2293_82(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &> &) = Call[operator++] : func:r2293_81, this:r2293_80 -# 2293| m2293_83(unknown) = ^CallSideEffect : ~m2293_76 -# 2293| m2293_84(unknown) = Chi : total:m2293_76, partial:m2293_83 -# 2293| v2293_85(void) = ^IndirectReadSideEffect[-1] : &:r2293_80, m2293_40 -# 2293| m2293_86(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = ^IndirectMayWriteSideEffect[-1] : &:r2293_80 -# 2293| m2293_87(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Chi : total:m2293_40, partial:m2293_86 -# 2293| r2293_88(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = CopyValue : r2293_82 +# 2293| r2293_68(glval<String>) = VariableAddress[s] : +# 2293| r2293_69(glval<unknown>) = 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<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] : +# 2293| r2293_77(glval<unknown>) = FunctionAddress[operator++] : +# 2293| r2293_78(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &> &) = 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<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = ^IndirectMayWriteSideEffect[-1] : &:r2293_76 +# 2293| m2293_83(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Chi : total:m2293_36, partial:m2293_82 +# 2293| r2293_84(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = CopyValue : r2293_78 #-----| Goto (back edge) -> Block 4 # 2297| Block 6 @@ -14672,8 +14644,8 @@ ir.cpp: # 2297| r2297_4(glval<char[6]>) = 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_53 -# 2297| m2297_8(unknown) = Chi : total:m2293_53, partial:m2297_7 +# 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 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 aa2496f19f2..ad4cfdb1e7c 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -1348,8 +1348,8 @@ | 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 | m1127_33 | -| file://:0:0:0:0 | Load | m1133_33 | +| 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 | @@ -1358,11 +1358,11 @@ | 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_44 | -| file://:0:0:0:0 | Load | m2204_44 | -| file://:0:0:0:0 | Load | m2210_40 | -| file://:0:0:0:0 | Load | m2215_44 | -| file://:0:0:0:0 | Load | m2293_50 | +| 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 | ~m1493_6 | | file://:0:0:0:0 | Load | ~m1761_10 | @@ -1388,30 +1388,30 @@ | 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 | m1127_23 | -| file://:0:0:0:0 | SideEffect | m1127_23 | -| file://:0:0:0:0 | SideEffect | m1133_23 | -| file://:0:0:0:0 | SideEffect | m1133_23 | +| 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_34 | -| file://:0:0:0:0 | SideEffect | m2201_34 | +| 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_34 | -| file://:0:0:0:0 | SideEffect | m2204_34 | +| 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_30 | -| file://:0:0:0:0 | SideEffect | m2210_30 | +| 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_34 | -| file://:0:0:0:0 | SideEffect | m2215_34 | +| 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_40 | -| file://:0:0:0:0 | SideEffect | m2293_40 | +| 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 | @@ -1425,19 +1425,19 @@ | 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_22 | -| file://:0:0:0:0 | SideEffect | ~m1133_22 | +| 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_33 | -| file://:0:0:0:0 | SideEffect | ~m2204_33 | -| file://:0:0:0:0 | SideEffect | ~m2210_29 | -| file://:0:0:0:0 | SideEffect | ~m2215_33 | +| 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_39 | +| 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 | @@ -6221,151 +6221,139 @@ | 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_15 | -| ir.cpp:1127:14:1127:14 | Address | &:r1127_38 | +| 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_16 | -| ir.cpp:1127:18:1127:18 | Address | &:r1127_41 | -| ir.cpp:1127:18:1127:18 | Address | &:r1127_47 | -| ir.cpp:1127:18:1127:18 | Address | &:r1127_47 | +| 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_47 | +| 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_18 | -| ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_26 | -| ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_27 | -| ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_40 | -| ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_48 | -| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_12 | -| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_20 | -| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_30 | -| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_32 | -| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_35 | -| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_42 | -| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_50 | -| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_53 | +| 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:m1126_4 | -| ir.cpp:1127:18:1127:18 | ChiTotal | total:m1127_13 | -| ir.cpp:1127:18:1127:18 | ChiTotal | total:m1127_23 | -| ir.cpp:1127:18:1127:18 | ChiTotal | total:m1127_24 | -| ir.cpp:1127:18:1127:18 | ChiTotal | total:m1127_31 | -| ir.cpp:1127:18:1127:18 | ChiTotal | total:m1127_36 | -| ir.cpp:1127:18:1127:18 | ChiTotal | total:m1127_43 | -| ir.cpp:1127:18:1127:18 | Condition | r1127_34 | +| 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_14 | -| ir.cpp:1127:18:1127:18 | Phi | from 0:~m1127_21 | -| ir.cpp:1127:18:1127:18 | Phi | from 4:m1127_54 | -| ir.cpp:1127:18:1127:18 | Phi | from 4:~m1127_51 | -| ir.cpp:1127:18:1127:18 | SideEffect | m1127_23 | -| ir.cpp:1127:18:1127:18 | SideEffect | ~m1126_4 | -| ir.cpp:1127:18:1127:18 | SideEffect | ~m1127_13 | -| ir.cpp:1127:18:1127:18 | SideEffect | ~m1127_24 | -| ir.cpp:1127:18:1127:18 | SideEffect | ~m1127_31 | -| ir.cpp:1127:18:1127:18 | SideEffect | ~m1127_36 | -| ir.cpp:1127:18:1127:18 | SideEffect | ~m1127_43 | +| 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_19 | +| 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_17 | -| ir.cpp:1127:18:1127:18 | Unary | r1127_25 | -| ir.cpp:1127:18:1127:18 | Unary | r1127_28 | -| ir.cpp:1127:18:1127:18 | Unary | r1127_39 | -| ir.cpp:1127:18:1127:18 | Unary | r1127_49 | -| ir.cpp:1127:18:1127:19 | Load | ~m1127_43 | -| ir.cpp:1127:18:1127:19 | StoreValue | r1127_44 | +| 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_45 | +| 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_15 | -| ir.cpp:1133:21:1133:21 | Address | &:r1133_47 | +| 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_16 | -| ir.cpp:1133:25:1133:25 | Address | &:r1133_38 | -| ir.cpp:1133:25:1133:25 | Address | &:r1133_38 | +| 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_38 | +| 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_18 | -| ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_26 | -| ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_27 | -| ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_39 | -| ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_49 | -| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_12 | -| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_20 | -| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_30 | -| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_32 | -| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_35 | -| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_41 | -| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_44 | -| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_51 | +| 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:m1127_36 | -| ir.cpp:1133:25:1133:25 | ChiTotal | total:m1133_13 | -| ir.cpp:1133:25:1133:25 | ChiTotal | total:m1133_23 | -| ir.cpp:1133:25:1133:25 | ChiTotal | total:m1133_24 | -| ir.cpp:1133:25:1133:25 | ChiTotal | total:m1133_31 | -| ir.cpp:1133:25:1133:25 | ChiTotal | total:m1133_36 | -| ir.cpp:1133:25:1133:25 | ChiTotal | total:m1133_52 | -| ir.cpp:1133:25:1133:25 | Condition | r1133_34 | +| 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_14 | -| ir.cpp:1133:25:1133:25 | Phi | from 5:~m1133_21 | -| ir.cpp:1133:25:1133:25 | Phi | from 7:m1133_45 | -| ir.cpp:1133:25:1133:25 | Phi | from 7:~m1133_42 | -| ir.cpp:1133:25:1133:25 | SideEffect | m1133_23 | -| ir.cpp:1133:25:1133:25 | SideEffect | ~m1127_36 | -| ir.cpp:1133:25:1133:25 | SideEffect | ~m1133_13 | -| ir.cpp:1133:25:1133:25 | SideEffect | ~m1133_24 | -| ir.cpp:1133:25:1133:25 | SideEffect | ~m1133_31 | -| ir.cpp:1133:25:1133:25 | SideEffect | ~m1133_36 | -| ir.cpp:1133:25:1133:25 | SideEffect | ~m1133_52 | +| 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_19 | +| 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_17 | -| ir.cpp:1133:25:1133:25 | Unary | r1133_25 | -| ir.cpp:1133:25:1133:25 | Unary | r1133_28 | -| ir.cpp:1133:25:1133:25 | Unary | r1133_40 | -| ir.cpp:1133:25:1133:25 | Unary | r1133_48 | -| ir.cpp:1133:25:1133:25 | Unary | r1133_50 | -| ir.cpp:1133:25:1133:26 | StoreValue | r1133_55 | -| ir.cpp:1133:25:1133:26 | Unary | r1133_53 | -| ir.cpp:1133:25:1133:26 | Unary | r1133_54 | +| 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_56 | -| ir.cpp:1134:13:1134:13 | Load | ~m1133_52 | +| 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_36 | -| ir.cpp:1137:5:1137:5 | Phi | from 9:~m1133_52 | +| 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 | @@ -11063,7 +11051,7 @@ | 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_26 | +| 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 | @@ -11080,103 +11068,97 @@ | 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_49 | -| ir.cpp:2201:69:2201:69 | Address | &:r2201_57 | -| ir.cpp:2201:69:2201:69 | Address | &:r2201_57 | -| ir.cpp:2201:69:2201:69 | Arg(this) | this:r2201_57 | -| ir.cpp:2201:69:2201:69 | CallTarget | func:r2201_58 | -| ir.cpp:2201:69:2201:69 | ChiPartial | partial:m2201_60 | -| ir.cpp:2201:69:2201:69 | ChiPartial | partial:m2201_63 | +| 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_27 | -| ir.cpp:2201:73:2201:73 | Address | &:r2201_52 | -| ir.cpp:2201:73:2201:73 | Address | &:r2201_65 | -| ir.cpp:2201:73:2201:73 | Address | &:r2201_65 | +| 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_65 | +| 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_29 | -| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_37 | -| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_38 | -| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_51 | -| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_66 | -| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_23 | -| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_31 | -| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_41 | -| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_43 | -| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_46 | -| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_53 | -| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_68 | -| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_71 | +| 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_11 | -| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_24 | -| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_34 | -| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_35 | -| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_42 | -| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_47 | -| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_61 | -| ir.cpp:2201:73:2201:73 | Condition | r2201_45 | +| 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_25 | -| ir.cpp:2201:73:2201:73 | Phi | from 7:~m2201_32 | -| ir.cpp:2201:73:2201:73 | Phi | from 9:m2201_72 | -| ir.cpp:2201:73:2201:73 | Phi | from 9:~m2201_69 | -| ir.cpp:2201:73:2201:73 | SideEffect | m2201_34 | -| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_11 | -| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_24 | -| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_35 | -| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_42 | -| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_47 | -| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_61 | +| 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_30 | +| 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_28 | -| ir.cpp:2201:73:2201:73 | Unary | r2201_36 | -| ir.cpp:2201:73:2201:73 | Unary | r2201_39 | -| ir.cpp:2201:73:2201:73 | Unary | r2201_50 | -| ir.cpp:2201:73:2201:73 | Unary | r2201_67 | +| 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_54 | -| ir.cpp:2201:73:2201:75 | StoreValue | r2201_55 | +| 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_56 | -| ir.cpp:2202:7:2202:7 | SideEffect | m2201_56 | +| 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_54 | -| ir.cpp:2202:9:2202:13 | SideEffect | ~m2201_54 | +| 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_26 | +| 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_65 | -| ir.cpp:2204:42:2204:43 | Address | &:r2204_65 | +| 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_65 | -| ir.cpp:2204:42:2204:43 | CallTarget | func:r2204_66 | -| ir.cpp:2204:42:2204:43 | ChiPartial | partial:m2204_68 | -| ir.cpp:2204:42:2204:43 | ChiPartial | partial:m2204_71 | +| 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_61 | +| 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_61 | +| 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 | @@ -11187,22 +11169,22 @@ | 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_47 | +| 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_47 | -| ir.cpp:2204:69:2204:69 | Address | &:r2204_49 | -| ir.cpp:2204:69:2204:69 | Address | &:r2204_57 | -| ir.cpp:2204:69:2204:69 | Address | &:r2204_57 | -| ir.cpp:2204:69:2204:69 | Address | &:r2204_73 | -| ir.cpp:2204:69:2204:69 | Address | &:r2204_73 | -| ir.cpp:2204:69:2204:69 | Arg(this) | this:r2204_57 | -| ir.cpp:2204:69:2204:69 | Arg(this) | this:r2204_73 | -| ir.cpp:2204:69:2204:69 | CallTarget | func:r2204_58 | -| ir.cpp:2204:69:2204:69 | CallTarget | func:r2204_74 | -| ir.cpp:2204:69:2204:69 | ChiPartial | partial:m2204_60 | -| ir.cpp:2204:69:2204:69 | ChiPartial | partial:m2204_63 | -| ir.cpp:2204:69:2204:69 | ChiPartial | partial:m2204_76 | -| ir.cpp:2204:69:2204:69 | ChiPartial | partial:m2204_79 | +| 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 | @@ -11212,74 +11194,68 @@ | 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_27 | -| ir.cpp:2204:73:2204:73 | Address | &:r2204_52 | -| ir.cpp:2204:73:2204:73 | Address | &:r2204_81 | -| ir.cpp:2204:73:2204:73 | Address | &:r2204_81 | +| 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_81 | +| 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_29 | -| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_37 | -| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_38 | -| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_51 | -| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_82 | -| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_23 | -| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_31 | -| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_41 | -| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_43 | -| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_46 | -| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_53 | -| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_84 | -| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_87 | +| 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_11 | -| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_24 | -| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_34 | -| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_35 | -| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_42 | -| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_47 | -| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_77 | -| ir.cpp:2204:73:2204:73 | Condition | r2204_45 | +| 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_25 | -| ir.cpp:2204:73:2204:73 | Phi | from 10:~m2204_32 | -| ir.cpp:2204:73:2204:73 | Phi | from 14:m2204_88 | -| ir.cpp:2204:73:2204:73 | Phi | from 14:~m2204_85 | -| ir.cpp:2204:73:2204:73 | SideEffect | m2204_34 | -| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_11 | -| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_24 | -| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_35 | -| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_42 | -| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_47 | -| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_77 | +| 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_30 | +| 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_28 | -| ir.cpp:2204:73:2204:73 | Unary | r2204_36 | -| ir.cpp:2204:73:2204:73 | Unary | r2204_39 | -| ir.cpp:2204:73:2204:73 | Unary | r2204_50 | -| ir.cpp:2204:73:2204:73 | Unary | r2204_83 | +| 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_54 | -| ir.cpp:2204:73:2204:75 | StoreValue | r2204_55 | +| 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_56 | -| ir.cpp:2205:7:2205:7 | SideEffect | m2204_56 | +| 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_54 | -| ir.cpp:2205:9:2205:13 | SideEffect | ~m2204_54 | +| 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 | @@ -11297,95 +11273,89 @@ | 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_22 | +| 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_62 | -| ir.cpp:2210:26:2210:27 | Address | &:r2210_62 | +| 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_62 | -| ir.cpp:2210:26:2210:27 | CallTarget | func:r2210_63 | -| ir.cpp:2210:26:2210:27 | ChiPartial | partial:m2210_65 | -| ir.cpp:2210:26:2210:27 | ChiPartial | partial:m2210_68 | +| 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_59 | +| 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_59 | +| 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_47 | +| 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_47 | -| ir.cpp:2210:37:2210:37 | Address | &:r2210_54 | +| 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_23 | -| ir.cpp:2210:41:2210:41 | Address | &:r2210_45 | -| ir.cpp:2210:41:2210:41 | Address | &:r2210_45 | -| ir.cpp:2210:41:2210:41 | Address | &:r2210_57 | +| 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_45 | +| 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_25 | -| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_33 | -| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_34 | -| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_46 | -| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_56 | -| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_19 | -| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_27 | -| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_37 | -| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_39 | -| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_42 | -| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_48 | -| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_51 | -| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_58 | +| 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_7 | -| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_20 | -| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_30 | -| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_31 | -| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_38 | -| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_43 | -| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_59 | -| ir.cpp:2210:41:2210:41 | Condition | r2210_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_21 | -| ir.cpp:2210:41:2210:41 | Phi | from 15:~m2210_28 | -| ir.cpp:2210:41:2210:41 | Phi | from 17:m2210_52 | -| ir.cpp:2210:41:2210:41 | Phi | from 17:~m2210_49 | -| ir.cpp:2210:41:2210:41 | SideEffect | m2210_30 | -| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_7 | -| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_20 | -| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_31 | -| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_38 | -| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_43 | -| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_59 | +| 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_26 | +| 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_24 | -| ir.cpp:2210:41:2210:41 | Unary | r2210_32 | -| ir.cpp:2210:41:2210:41 | Unary | r2210_35 | -| ir.cpp:2210:41:2210:41 | Unary | r2210_47 | -| ir.cpp:2210:41:2210:41 | Unary | r2210_55 | +| 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_59 | -| ir.cpp:2210:41:2210:43 | StoreValue | r2210_60 | +| 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_61 | +| 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_26 | +| 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 | @@ -11399,88 +11369,82 @@ | 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_43 | +| 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_43 | -| ir.cpp:2215:69:2215:69 | Address | &:r2215_49 | -| ir.cpp:2215:69:2215:69 | Address | &:r2215_57 | -| ir.cpp:2215:69:2215:69 | Address | &:r2215_57 | -| ir.cpp:2215:69:2215:69 | Arg(this) | this:r2215_57 | -| ir.cpp:2215:69:2215:69 | CallTarget | func:r2215_58 | -| ir.cpp:2215:69:2215:69 | ChiPartial | partial:m2215_60 | -| ir.cpp:2215:69:2215:69 | ChiPartial | partial:m2215_63 | -| ir.cpp:2215:69:2215:69 | ChiTotal | total:m2215_56 | +| 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_56 | +| 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_27 | -| ir.cpp:2215:73:2215:73 | Address | &:r2215_52 | -| ir.cpp:2215:73:2215:73 | Address | &:r2215_65 | -| ir.cpp:2215:73:2215:73 | Address | &:r2215_65 | +| 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_65 | +| 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_29 | -| ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_37 | -| ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_38 | -| ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_51 | -| ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_66 | -| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_23 | -| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_31 | -| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_41 | -| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_43 | -| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_46 | -| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_53 | -| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_68 | -| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_71 | +| 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_11 | -| ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_24 | -| ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_34 | -| ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_35 | -| ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_42 | -| ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_47 | -| ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_61 | -| ir.cpp:2215:73:2215:73 | Condition | r2215_45 | +| 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_25 | -| ir.cpp:2215:73:2215:73 | Phi | from 20:~m2215_32 | -| ir.cpp:2215:73:2215:73 | Phi | from 22:m2215_72 | -| ir.cpp:2215:73:2215:73 | Phi | from 22:~m2215_69 | -| ir.cpp:2215:73:2215:73 | SideEffect | m2215_34 | -| ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_11 | -| ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_24 | -| ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_35 | -| ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_42 | -| ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_47 | -| ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_61 | +| 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_30 | +| 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_28 | -| ir.cpp:2215:73:2215:73 | Unary | r2215_36 | -| ir.cpp:2215:73:2215:73 | Unary | r2215_39 | -| ir.cpp:2215:73:2215:73 | Unary | r2215_50 | -| ir.cpp:2215:73:2215:73 | Unary | r2215_67 | +| 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_54 | -| ir.cpp:2215:73:2215:75 | StoreValue | r2215_55 | +| 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_54 | +| 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_54 | +| 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 | @@ -11531,15 +11495,15 @@ | 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_69 | -| ir.cpp:2219:1:2219:1 | ChiTotal | total:m2210_66 | -| ir.cpp:2219:1:2219:1 | ChiTotal | total:m2215_47 | +| 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_69 | -| ir.cpp:2219:1:2219:1 | SideEffect | ~m2210_66 | -| ir.cpp:2219:1:2219:1 | SideEffect | ~m2215_47 | +| 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 | @@ -12044,81 +12008,75 @@ | 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_32 | -| ir.cpp:2293:16:2293:16 | Address | &:r2293_55 | -| ir.cpp:2293:16:2293:16 | Address | &:r2293_55 | -| ir.cpp:2293:16:2293:16 | Address | &:r2293_72 | -| ir.cpp:2293:16:2293:16 | Address | &:r2293_72 | -| ir.cpp:2293:16:2293:16 | Arg(this) | this:r2293_55 | -| ir.cpp:2293:16:2293:16 | Arg(this) | this:r2293_72 | -| ir.cpp:2293:16:2293:16 | CallTarget | func:r2293_57 | -| ir.cpp:2293:16:2293:16 | CallTarget | func:r2293_73 | -| ir.cpp:2293:16:2293:16 | ChiPartial | partial:m2293_67 | -| ir.cpp:2293:16:2293:16 | ChiPartial | partial:m2293_70 | -| ir.cpp:2293:16:2293:16 | ChiPartial | partial:m2293_75 | -| ir.cpp:2293:16:2293:16 | ChiPartial | partial:m2293_78 | -| ir.cpp:2293:16:2293:16 | ChiTotal | total:m2293_56 | -| ir.cpp:2293:16:2293:16 | ChiTotal | total:m2293_62 | -| ir.cpp:2293:16:2293:16 | ChiTotal | total:m2293_71 | +| 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_71 | -| ir.cpp:2293:16:2293:16 | SideEffect | ~m2293_62 | +| 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_33 | -| ir.cpp:2293:20:2293:20 | Address | &:r2293_80 | -| ir.cpp:2293:20:2293:20 | Address | &:r2293_80 | +| 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_80 | +| 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_35 | -| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_43 | -| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_44 | -| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_59 | -| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_81 | -| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_29 | -| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_37 | -| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_47 | -| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_49 | -| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_52 | -| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_61 | -| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_83 | -| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_86 | +| 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_19 | -| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_30 | -| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_40 | -| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_41 | -| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_48 | -| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_53 | -| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_76 | -| ir.cpp:2293:20:2293:20 | Condition | r2293_51 | +| 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_31 | -| ir.cpp:2293:20:2293:20 | Phi | from 3:~m2293_38 | -| ir.cpp:2293:20:2293:20 | Phi | from 5:m2293_87 | -| ir.cpp:2293:20:2293:20 | Phi | from 5:~m2293_84 | -| ir.cpp:2293:20:2293:20 | SideEffect | m2293_40 | -| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_19 | -| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_30 | -| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_41 | -| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_48 | -| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_53 | -| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_76 | +| 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_36 | +| 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_34 | -| ir.cpp:2293:20:2293:20 | Unary | r2293_42 | -| ir.cpp:2293:20:2293:20 | Unary | r2293_45 | -| ir.cpp:2293:20:2293:20 | Unary | r2293_58 | -| ir.cpp:2293:20:2293:20 | Unary | r2293_60 | -| ir.cpp:2293:20:2293:20 | Unary | r2293_82 | +| 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 | @@ -12130,11 +12088,11 @@ | 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_65 | -| ir.cpp:2293:20:2293:56 | Arg(0) | 0:r2293_65 | -| ir.cpp:2293:20:2293:56 | SideEffect | ~m2293_68 | -| ir.cpp:2293:20:2293:56 | Unary | r2293_63 | -| ir.cpp:2293:20:2293:56 | Unary | r2293_64 | +| 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 | @@ -12157,9 +12115,9 @@ | 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_68 | +| 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_68 | +| 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 | @@ -12190,9 +12148,9 @@ | 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_53 | +| 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_53 | +| 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 | 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 1ac2a6c9f8a..0c42f3d2af6 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -6846,52 +6846,50 @@ ir.cpp: #-----| r0_1(glval<vector<int>>) = CopyValue : r1127_9 # 1127| r1127_10(glval<unknown>) = FunctionAddress[begin] : # 1127| r1127_11(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[begin] : func:r1127_10, this:r0_1 -# 1127| mu1127_12(unknown) = ^CallSideEffect : ~m? #-----| v0_2(void) = ^IndirectReadSideEffect[-1] : &:r0_1, ~m? -# 1127| mu1127_13(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__begin)] : &:r1127_7, r1127_11 -# 1127| r1127_14(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : -# 1127| r1127_15(glval<vector<int> &>) = VariableAddress[(__range)] : -# 1127| r1127_16(vector<int> &) = Load[(__range)] : &:r1127_15, ~m? -#-----| r0_3(glval<vector<int>>) = CopyValue : r1127_16 -# 1127| r1127_17(glval<unknown>) = FunctionAddress[end] : -# 1127| r1127_18(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[end] : func:r1127_17, this:r0_3 -# 1127| mu1127_19(unknown) = ^CallSideEffect : ~m? +# 1127| mu1127_12(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__begin)] : &:r1127_7, r1127_11 +# 1127| r1127_13(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +# 1127| r1127_14(glval<vector<int> &>) = VariableAddress[(__range)] : +# 1127| r1127_15(vector<int> &) = Load[(__range)] : &:r1127_14, ~m? +#-----| r0_3(glval<vector<int>>) = CopyValue : r1127_15 +# 1127| r1127_16(glval<unknown>) = FunctionAddress[end] : +# 1127| r1127_17(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[end] : func:r1127_16, this:r0_3 #-----| v0_4(void) = ^IndirectReadSideEffect[-1] : &:r0_3, ~m? -# 1127| mu1127_20(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__end)] : &:r1127_14, r1127_18 +# 1127| mu1127_18(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__end)] : &:r1127_13, r1127_17 #-----| Goto -> Block 1 # 1127| Block 1 -# 1127| r1127_21(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : -#-----| r0_5(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1127_21 -# 1127| r1127_22(glval<unknown>) = FunctionAddress[operator!=] : +# 1127| r1127_19(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_5(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1127_19 +# 1127| r1127_20(glval<unknown>) = FunctionAddress[operator!=] : #-----| r0_6(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[#temp0:0] : #-----| mu0_7(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Uninitialized[#temp0:0] : &:r0_6 -# 1127| r1127_23(glval<unknown>) = FunctionAddress[iterator] : -# 1127| r1127_24(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : -#-----| r0_8(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1127_24 +# 1127| r1127_21(glval<unknown>) = FunctionAddress[iterator] : +# 1127| r1127_22(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +#-----| r0_8(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1127_22 #-----| r0_9(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = CopyValue : r0_8 -# 1127| v1127_25(void) = Call[iterator] : func:r1127_23, this:r0_6, 0:r0_9 -# 1127| mu1127_26(unknown) = ^CallSideEffect : ~m? +# 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_27(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_6 +# 1127| mu1127_25(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_6 #-----| r0_11(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Load[#temp0:0] : &:r0_6, ~m? -# 1127| r1127_28(bool) = Call[operator!=] : func:r1127_22, this:r0_5, 0:r0_11 -# 1127| mu1127_29(unknown) = ^CallSideEffect : ~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_30(void) = ConditionalBranch : r1127_28 +# 1127| v1127_28(void) = ConditionalBranch : r1127_26 #-----| False -> Block 5 #-----| True -> Block 2 # 1127| Block 2 -# 1127| r1127_31(glval<int>) = VariableAddress[e] : -# 1127| r1127_32(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : -#-----| r0_13(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1127_32 -# 1127| r1127_33(glval<unknown>) = FunctionAddress[operator*] : -# 1127| r1127_34(int &) = Call[operator*] : func:r1127_33, this:r0_13 -# 1127| mu1127_35(unknown) = ^CallSideEffect : ~m? +# 1127| r1127_29(glval<int>) = VariableAddress[e] : +# 1127| r1127_30(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_13(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1127_30 +# 1127| r1127_31(glval<unknown>) = 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_36(int) = Load[?] : &:r1127_34, ~m? -# 1127| mu1127_37(int) = Store[e] : &:r1127_31, r1127_36 +# 1127| r1127_34(int) = Load[?] : &:r1127_32, ~m? +# 1127| mu1127_35(int) = Store[e] : &:r1127_29, r1127_34 # 1128| r1128_1(glval<int>) = VariableAddress[e] : # 1128| r1128_2(int) = Load[e] : &:r1128_1, ~m? # 1128| r1128_3(int) = Constant[0] : @@ -6905,14 +6903,14 @@ ir.cpp: #-----| Goto -> Block 4 # 1127| Block 4 -# 1127| v1127_38(void) = NoOp : -# 1127| r1127_39(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : -# 1127| r1127_40(glval<unknown>) = FunctionAddress[operator++] : -# 1127| r1127_41(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = Call[operator++] : func:r1127_40, this:r1127_39 -# 1127| mu1127_42(unknown) = ^CallSideEffect : ~m? -# 1127| v1127_43(void) = ^IndirectReadSideEffect[-1] : &:r1127_39, ~m? -# 1127| mu1127_44(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r1127_39 -# 1127| r1127_45(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r1127_41 +# 1127| v1127_36(void) = NoOp : +# 1127| r1127_37(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +# 1127| r1127_38(glval<unknown>) = FunctionAddress[operator++] : +# 1127| r1127_39(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = 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<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r1127_37 +# 1127| r1127_43(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r1127_39 #-----| Goto (back edge) -> Block 1 # 1133| Block 5 @@ -6928,64 +6926,62 @@ ir.cpp: #-----| r0_15(glval<vector<int>>) = CopyValue : r1133_9 # 1133| r1133_10(glval<unknown>) = FunctionAddress[begin] : # 1133| r1133_11(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[begin] : func:r1133_10, this:r0_15 -# 1133| mu1133_12(unknown) = ^CallSideEffect : ~m? #-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? -# 1133| mu1133_13(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__begin)] : &:r1133_7, r1133_11 -# 1133| r1133_14(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : -# 1133| r1133_15(glval<vector<int> &>) = VariableAddress[(__range)] : -# 1133| r1133_16(vector<int> &) = Load[(__range)] : &:r1133_15, ~m? -#-----| r0_17(glval<vector<int>>) = CopyValue : r1133_16 -# 1133| r1133_17(glval<unknown>) = FunctionAddress[end] : -# 1133| r1133_18(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[end] : func:r1133_17, this:r0_17 -# 1133| mu1133_19(unknown) = ^CallSideEffect : ~m? +# 1133| mu1133_12(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__begin)] : &:r1133_7, r1133_11 +# 1133| r1133_13(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +# 1133| r1133_14(glval<vector<int> &>) = VariableAddress[(__range)] : +# 1133| r1133_15(vector<int> &) = Load[(__range)] : &:r1133_14, ~m? +#-----| r0_17(glval<vector<int>>) = CopyValue : r1133_15 +# 1133| r1133_16(glval<unknown>) = FunctionAddress[end] : +# 1133| r1133_17(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[end] : func:r1133_16, this:r0_17 #-----| v0_18(void) = ^IndirectReadSideEffect[-1] : &:r0_17, ~m? -# 1133| mu1133_20(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__end)] : &:r1133_14, r1133_18 +# 1133| mu1133_18(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__end)] : &:r1133_13, r1133_17 #-----| Goto -> Block 6 # 1133| Block 6 -# 1133| r1133_21(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : -#-----| r0_19(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1133_21 -# 1133| r1133_22(glval<unknown>) = FunctionAddress[operator!=] : +# 1133| r1133_19(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_19(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1133_19 +# 1133| r1133_20(glval<unknown>) = FunctionAddress[operator!=] : #-----| r0_20(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[#temp0:0] : #-----| mu0_21(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Uninitialized[#temp0:0] : &:r0_20 -# 1133| r1133_23(glval<unknown>) = FunctionAddress[iterator] : -# 1133| r1133_24(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : -#-----| r0_22(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1133_24 +# 1133| r1133_21(glval<unknown>) = FunctionAddress[iterator] : +# 1133| r1133_22(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +#-----| r0_22(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1133_22 #-----| r0_23(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = CopyValue : r0_22 -# 1133| v1133_25(void) = Call[iterator] : func:r1133_23, this:r0_20, 0:r0_23 -# 1133| mu1133_26(unknown) = ^CallSideEffect : ~m? +# 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_27(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_20 +# 1133| mu1133_25(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_20 #-----| r0_25(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Load[#temp0:0] : &:r0_20, ~m? -# 1133| r1133_28(bool) = Call[operator!=] : func:r1133_22, this:r0_19, 0:r0_25 -# 1133| mu1133_29(unknown) = ^CallSideEffect : ~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_30(void) = ConditionalBranch : r1133_28 +# 1133| v1133_28(void) = ConditionalBranch : r1133_26 #-----| False -> Block 10 #-----| True -> Block 8 # 1133| Block 7 -# 1133| r1133_31(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : -# 1133| r1133_32(glval<unknown>) = FunctionAddress[operator++] : -# 1133| r1133_33(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = Call[operator++] : func:r1133_32, this:r1133_31 -# 1133| mu1133_34(unknown) = ^CallSideEffect : ~m? -# 1133| v1133_35(void) = ^IndirectReadSideEffect[-1] : &:r1133_31, ~m? -# 1133| mu1133_36(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r1133_31 -# 1133| r1133_37(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r1133_33 +# 1133| r1133_29(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +# 1133| r1133_30(glval<unknown>) = FunctionAddress[operator++] : +# 1133| r1133_31(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = 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<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r1133_29 +# 1133| r1133_35(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r1133_31 #-----| Goto (back edge) -> Block 6 # 1133| Block 8 -# 1133| r1133_38(glval<int &>) = VariableAddress[e] : -# 1133| r1133_39(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : -#-----| r0_27(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1133_39 -# 1133| r1133_40(glval<unknown>) = FunctionAddress[operator*] : -# 1133| r1133_41(int &) = Call[operator*] : func:r1133_40, this:r0_27 -# 1133| mu1133_42(unknown) = ^CallSideEffect : ~m? +# 1133| r1133_36(glval<int &>) = VariableAddress[e] : +# 1133| r1133_37(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_27(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r1133_37 +# 1133| r1133_38(glval<unknown>) = 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_43(glval<int>) = CopyValue : r1133_41 -# 1133| r1133_44(glval<int>) = Convert : r1133_43 -# 1133| r1133_45(int &) = CopyValue : r1133_44 -# 1133| mu1133_46(int &) = Store[e] : &:r1133_38, r1133_45 +# 1133| r1133_41(glval<int>) = CopyValue : r1133_39 +# 1133| r1133_42(glval<int>) = Convert : r1133_41 +# 1133| r1133_43(int &) = CopyValue : r1133_42 +# 1133| mu1133_44(int &) = Store[e] : &:r1133_36, r1133_43 # 1134| r1134_1(glval<int &>) = VariableAddress[e] : # 1134| r1134_2(int &) = Load[e] : &:r1134_1, ~m? # 1134| r1134_3(int) = Load[?] : &:r1134_2, ~m? @@ -12492,53 +12488,51 @@ ir.cpp: #-----| r0_2(glval<vector<ClassWithDestructor>>) = Convert : r0_1 # 2201| r2201_19(glval<unknown>) = FunctionAddress[begin] : # 2201| r2201_20(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[begin] : func:r2201_19, this:r0_2 -# 2201| mu2201_21(unknown) = ^CallSideEffect : ~m? #-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? -# 2201| mu2201_22(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__begin)] : &:r2201_16, r2201_20 -# 2201| r2201_23(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : -# 2201| r2201_24(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2201| r2201_25(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2201_24, ~m? -#-----| r0_4(glval<vector<ClassWithDestructor>>) = CopyValue : r2201_25 +# 2201| mu2201_21(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__begin)] : &:r2201_16, r2201_20 +# 2201| r2201_22(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +# 2201| r2201_23(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2201| r2201_24(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2201_23, ~m? +#-----| r0_4(glval<vector<ClassWithDestructor>>) = CopyValue : r2201_24 #-----| r0_5(glval<vector<ClassWithDestructor>>) = Convert : r0_4 -# 2201| r2201_26(glval<unknown>) = FunctionAddress[end] : -# 2201| r2201_27(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[end] : func:r2201_26, this:r0_5 -# 2201| mu2201_28(unknown) = ^CallSideEffect : ~m? +# 2201| r2201_25(glval<unknown>) = FunctionAddress[end] : +# 2201| r2201_26(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[end] : func:r2201_25, this:r0_5 #-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? -# 2201| mu2201_29(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__end)] : &:r2201_23, r2201_27 +# 2201| mu2201_27(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__end)] : &:r2201_22, r2201_26 #-----| Goto -> Block 11 # 2201| Block 11 -# 2201| r2201_30(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : -#-----| r0_7(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2201_30 -# 2201| r2201_31(glval<unknown>) = FunctionAddress[operator!=] : +# 2201| r2201_28(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_7(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2201_28 +# 2201| r2201_29(glval<unknown>) = FunctionAddress[operator!=] : #-----| r0_8(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[#temp0:0] : #-----| mu0_9(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Uninitialized[#temp0:0] : &:r0_8 -# 2201| r2201_32(glval<unknown>) = FunctionAddress[iterator] : -# 2201| r2201_33(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : -#-----| r0_10(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2201_33 +# 2201| r2201_30(glval<unknown>) = FunctionAddress[iterator] : +# 2201| r2201_31(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +#-----| r0_10(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2201_31 #-----| r0_11(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = CopyValue : r0_10 -# 2201| v2201_34(void) = Call[iterator] : func:r2201_32, this:r0_8, 0:r0_11 -# 2201| mu2201_35(unknown) = ^CallSideEffect : ~m? +# 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_36(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +# 2201| mu2201_34(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 #-----| r0_13(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Load[#temp0:0] : &:r0_8, ~m? -# 2201| r2201_37(bool) = Call[operator!=] : func:r2201_31, this:r0_7, 0:r0_13 -# 2201| mu2201_38(unknown) = ^CallSideEffect : ~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_39(void) = ConditionalBranch : r2201_37 +# 2201| v2201_37(void) = ConditionalBranch : r2201_35 #-----| False -> Block 14 #-----| True -> Block 12 # 2201| Block 12 -# 2201| r2201_40(glval<ClassWithDestructor>) = VariableAddress[y] : -# 2201| r2201_41(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : -#-----| r0_15(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2201_41 -# 2201| r2201_42(glval<unknown>) = FunctionAddress[operator*] : -# 2201| r2201_43(ClassWithDestructor &) = Call[operator*] : func:r2201_42, this:r0_15 -# 2201| mu2201_44(unknown) = ^CallSideEffect : ~m? +# 2201| r2201_38(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2201| r2201_39(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_15(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2201_39 +# 2201| r2201_40(glval<unknown>) = 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_45(ClassWithDestructor) = Load[?] : &:r2201_43, ~m? -# 2201| mu2201_46(ClassWithDestructor) = Store[y] : &:r2201_40, r2201_45 +# 2201| r2201_43(ClassWithDestructor) = Load[?] : &:r2201_41, ~m? +# 2201| mu2201_44(ClassWithDestructor) = Store[y] : &:r2201_38, r2201_43 # 2202| r2202_1(glval<ClassWithDestructor>) = VariableAddress[y] : # 2202| r2202_2(glval<unknown>) = FunctionAddress[set_x] : # 2202| r2202_3(char) = Constant[97] : @@ -12546,28 +12540,28 @@ ir.cpp: # 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_47(glval<ClassWithDestructor>) = VariableAddress[y] : -# 2201| r2201_48(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : -# 2201| v2201_49(void) = Call[~ClassWithDestructor] : func:r2201_48, this:r2201_47 -# 2201| mu2201_50(unknown) = ^CallSideEffect : ~m? -# 2201| v2201_51(void) = ^IndirectReadSideEffect[-1] : &:r2201_47, ~m? -# 2201| mu2201_52(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2201_47 -# 2201| r2201_53(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : -# 2201| r2201_54(glval<unknown>) = FunctionAddress[operator++] : -# 2201| r2201_55(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = Call[operator++] : func:r2201_54, this:r2201_53 -# 2201| mu2201_56(unknown) = ^CallSideEffect : ~m? -# 2201| v2201_57(void) = ^IndirectReadSideEffect[-1] : &:r2201_53, ~m? -# 2201| mu2201_58(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2201_53 -# 2201| r2201_59(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2201_55 +# 2201| r2201_45(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2201| r2201_46(glval<unknown>) = 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<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +# 2201| r2201_52(glval<unknown>) = FunctionAddress[operator++] : +# 2201| r2201_53(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = 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<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2201_51 +# 2201| r2201_57(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2201_53 #-----| Goto (back edge) -> Block 11 # 2201| Block 13 -# 2201| r2201_60(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : -# 2201| r2201_61(glval<unknown>) = FunctionAddress[~vector] : -# 2201| v2201_62(void) = Call[~vector] : func:r2201_61, this:r2201_60 -# 2201| mu2201_63(unknown) = ^CallSideEffect : ~m? -# 2201| v2201_64(void) = ^IndirectReadSideEffect[-1] : &:r2201_60, ~m? -# 2201| mu2201_65(vector<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2201_60 +# 2201| r2201_58(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : +# 2201| r2201_59(glval<unknown>) = 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<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2201_58 #-----| Goto -> Block 14 # 2204| Block 14 @@ -12593,53 +12587,51 @@ ir.cpp: #-----| r0_18(glval<vector<ClassWithDestructor>>) = Convert : r0_17 # 2204| r2204_19(glval<unknown>) = FunctionAddress[begin] : # 2204| r2204_20(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[begin] : func:r2204_19, this:r0_18 -# 2204| mu2204_21(unknown) = ^CallSideEffect : ~m? #-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m? -# 2204| mu2204_22(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__begin)] : &:r2204_16, r2204_20 -# 2204| r2204_23(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : -# 2204| r2204_24(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2204| r2204_25(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2204_24, ~m? -#-----| r0_20(glval<vector<ClassWithDestructor>>) = CopyValue : r2204_25 +# 2204| mu2204_21(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__begin)] : &:r2204_16, r2204_20 +# 2204| r2204_22(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +# 2204| r2204_23(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2204| r2204_24(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2204_23, ~m? +#-----| r0_20(glval<vector<ClassWithDestructor>>) = CopyValue : r2204_24 #-----| r0_21(glval<vector<ClassWithDestructor>>) = Convert : r0_20 -# 2204| r2204_26(glval<unknown>) = FunctionAddress[end] : -# 2204| r2204_27(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[end] : func:r2204_26, this:r0_21 -# 2204| mu2204_28(unknown) = ^CallSideEffect : ~m? +# 2204| r2204_25(glval<unknown>) = FunctionAddress[end] : +# 2204| r2204_26(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[end] : func:r2204_25, this:r0_21 #-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_21, ~m? -# 2204| mu2204_29(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__end)] : &:r2204_23, r2204_27 +# 2204| mu2204_27(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__end)] : &:r2204_22, r2204_26 #-----| Goto -> Block 15 # 2204| Block 15 -# 2204| r2204_30(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : -#-----| r0_23(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2204_30 -# 2204| r2204_31(glval<unknown>) = FunctionAddress[operator!=] : +# 2204| r2204_28(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_23(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2204_28 +# 2204| r2204_29(glval<unknown>) = FunctionAddress[operator!=] : #-----| r0_24(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[#temp0:0] : #-----| mu0_25(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Uninitialized[#temp0:0] : &:r0_24 -# 2204| r2204_32(glval<unknown>) = FunctionAddress[iterator] : -# 2204| r2204_33(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : -#-----| r0_26(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2204_33 +# 2204| r2204_30(glval<unknown>) = FunctionAddress[iterator] : +# 2204| r2204_31(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +#-----| r0_26(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2204_31 #-----| r0_27(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = CopyValue : r0_26 -# 2204| v2204_34(void) = Call[iterator] : func:r2204_32, this:r0_24, 0:r0_27 -# 2204| mu2204_35(unknown) = ^CallSideEffect : ~m? +# 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_36(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_24 +# 2204| mu2204_34(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_24 #-----| r0_29(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Load[#temp0:0] : &:r0_24, ~m? -# 2204| r2204_37(bool) = Call[operator!=] : func:r2204_31, this:r0_23, 0:r0_29 -# 2204| mu2204_38(unknown) = ^CallSideEffect : ~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_39(void) = ConditionalBranch : r2204_37 +# 2204| v2204_37(void) = ConditionalBranch : r2204_35 #-----| False -> Block 20 #-----| True -> Block 16 # 2204| Block 16 -# 2204| r2204_40(glval<ClassWithDestructor>) = VariableAddress[y] : -# 2204| r2204_41(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : -#-----| r0_31(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2204_41 -# 2204| r2204_42(glval<unknown>) = FunctionAddress[operator*] : -# 2204| r2204_43(ClassWithDestructor &) = Call[operator*] : func:r2204_42, this:r0_31 -# 2204| mu2204_44(unknown) = ^CallSideEffect : ~m? +# 2204| r2204_38(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2204| r2204_39(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_31(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2204_39 +# 2204| r2204_40(glval<unknown>) = 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_45(ClassWithDestructor) = Load[?] : &:r2204_43, ~m? -# 2204| mu2204_46(ClassWithDestructor) = Store[y] : &:r2204_40, r2204_45 +# 2204| r2204_43(ClassWithDestructor) = Load[?] : &:r2204_41, ~m? +# 2204| mu2204_44(ClassWithDestructor) = Store[y] : &:r2204_38, r2204_43 # 2205| r2205_1(glval<ClassWithDestructor>) = VariableAddress[y] : # 2205| r2205_2(glval<unknown>) = FunctionAddress[set_x] : # 2205| r2205_3(char) = Constant[97] : @@ -12662,18 +12654,18 @@ ir.cpp: # 2207| Block 17 # 2207| v2207_1(void) = NoOp : -# 2204| r2204_47(glval<ClassWithDestructor>) = VariableAddress[y] : -# 2204| r2204_48(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : -# 2204| v2204_49(void) = Call[~ClassWithDestructor] : func:r2204_48, this:r2204_47 -# 2204| mu2204_50(unknown) = ^CallSideEffect : ~m? -# 2204| v2204_51(void) = ^IndirectReadSideEffect[-1] : &:r2204_47, ~m? -# 2204| mu2204_52(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2204_47 -# 2204| r2204_53(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : -# 2204| r2204_54(glval<unknown>) = FunctionAddress[~vector] : -# 2204| v2204_55(void) = Call[~vector] : func:r2204_54, this:r2204_53 -# 2204| mu2204_56(unknown) = ^CallSideEffect : ~m? -# 2204| v2204_57(void) = ^IndirectReadSideEffect[-1] : &:r2204_53, ~m? -# 2204| mu2204_58(vector<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2204_53 +# 2204| r2204_45(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2204| r2204_46(glval<unknown>) = 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<vector<ClassWithDestructor>>) = VariableAddress[ys] : +# 2204| r2204_52(glval<unknown>) = 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<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2204_51 # 2219| r2219_1(glval<ClassWithDestructor>) = VariableAddress[x] : # 2219| r2219_2(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : # 2219| v2219_3(void) = Call[~ClassWithDestructor] : func:r2219_2, this:r2219_1 @@ -12683,28 +12675,28 @@ ir.cpp: #-----| Goto -> Block 1 # 2204| Block 18 -# 2204| r2204_59(glval<ClassWithDestructor>) = VariableAddress[y] : -# 2204| r2204_60(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : -# 2204| v2204_61(void) = Call[~ClassWithDestructor] : func:r2204_60, this:r2204_59 -# 2204| mu2204_62(unknown) = ^CallSideEffect : ~m? -# 2204| v2204_63(void) = ^IndirectReadSideEffect[-1] : &:r2204_59, ~m? -# 2204| mu2204_64(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2204_59 -# 2204| r2204_65(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : -# 2204| r2204_66(glval<unknown>) = FunctionAddress[operator++] : -# 2204| r2204_67(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = Call[operator++] : func:r2204_66, this:r2204_65 -# 2204| mu2204_68(unknown) = ^CallSideEffect : ~m? -# 2204| v2204_69(void) = ^IndirectReadSideEffect[-1] : &:r2204_65, ~m? -# 2204| mu2204_70(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2204_65 -# 2204| r2204_71(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2204_67 +# 2204| r2204_57(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2204| r2204_58(glval<unknown>) = 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<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +# 2204| r2204_64(glval<unknown>) = FunctionAddress[operator++] : +# 2204| r2204_65(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = 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<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2204_63 +# 2204| r2204_69(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2204_65 #-----| Goto (back edge) -> Block 15 # 2204| Block 19 -# 2204| r2204_72(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : -# 2204| r2204_73(glval<unknown>) = FunctionAddress[~vector] : -# 2204| v2204_74(void) = Call[~vector] : func:r2204_73, this:r2204_72 -# 2204| mu2204_75(unknown) = ^CallSideEffect : ~m? -# 2204| v2204_76(void) = ^IndirectReadSideEffect[-1] : &:r2204_72, ~m? -# 2204| mu2204_77(vector<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2204_72 +# 2204| r2204_70(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : +# 2204| r2204_71(glval<unknown>) = 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<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2204_70 #-----| Goto -> Block 20 # 2210| Block 20 @@ -12726,63 +12718,61 @@ ir.cpp: #-----| r0_34(glval<vector<int>>) = Convert : r0_33 # 2210| r2210_15(glval<unknown>) = FunctionAddress[begin] : # 2210| r2210_16(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[begin] : func:r2210_15, this:r0_34 -# 2210| mu2210_17(unknown) = ^CallSideEffect : ~m? #-----| v0_35(void) = ^IndirectReadSideEffect[-1] : &:r0_34, ~m? -# 2210| mu2210_18(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__begin)] : &:r2210_12, r2210_16 -# 2210| r2210_19(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : -# 2210| r2210_20(glval<vector<int> &>) = VariableAddress[(__range)] : -# 2210| r2210_21(vector<int> &) = Load[(__range)] : &:r2210_20, ~m? -#-----| r0_36(glval<vector<int>>) = CopyValue : r2210_21 +# 2210| mu2210_17(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__begin)] : &:r2210_12, r2210_16 +# 2210| r2210_18(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +# 2210| r2210_19(glval<vector<int> &>) = VariableAddress[(__range)] : +# 2210| r2210_20(vector<int> &) = Load[(__range)] : &:r2210_19, ~m? +#-----| r0_36(glval<vector<int>>) = CopyValue : r2210_20 #-----| r0_37(glval<vector<int>>) = Convert : r0_36 -# 2210| r2210_22(glval<unknown>) = FunctionAddress[end] : -# 2210| r2210_23(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[end] : func:r2210_22, this:r0_37 -# 2210| mu2210_24(unknown) = ^CallSideEffect : ~m? +# 2210| r2210_21(glval<unknown>) = FunctionAddress[end] : +# 2210| r2210_22(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Call[end] : func:r2210_21, this:r0_37 #-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_37, ~m? -# 2210| mu2210_25(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__end)] : &:r2210_19, r2210_23 +# 2210| mu2210_23(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Store[(__end)] : &:r2210_18, r2210_22 #-----| Goto -> Block 21 # 2210| Block 21 -# 2210| r2210_26(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : -#-----| r0_39(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r2210_26 -# 2210| r2210_27(glval<unknown>) = FunctionAddress[operator!=] : +# 2210| r2210_24(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_39(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r2210_24 +# 2210| r2210_25(glval<unknown>) = FunctionAddress[operator!=] : #-----| r0_40(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[#temp0:0] : #-----| mu0_41(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Uninitialized[#temp0:0] : &:r0_40 -# 2210| r2210_28(glval<unknown>) = FunctionAddress[iterator] : -# 2210| r2210_29(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : -#-----| r0_42(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r2210_29 +# 2210| r2210_26(glval<unknown>) = FunctionAddress[iterator] : +# 2210| r2210_27(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__end)] : +#-----| r0_42(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r2210_27 #-----| r0_43(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = CopyValue : r0_42 -# 2210| v2210_30(void) = Call[iterator] : func:r2210_28, this:r0_40, 0:r0_43 -# 2210| mu2210_31(unknown) = ^CallSideEffect : ~m? +# 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_32(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_40 +# 2210| mu2210_30(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_40 #-----| r0_45(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = Load[#temp0:0] : &:r0_40, ~m? -# 2210| r2210_33(bool) = Call[operator!=] : func:r2210_27, this:r0_39, 0:r0_45 -# 2210| mu2210_34(unknown) = ^CallSideEffect : ~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_35(void) = ConditionalBranch : r2210_33 +# 2210| v2210_33(void) = ConditionalBranch : r2210_31 #-----| False -> Block 26 #-----| True -> Block 23 # 2210| Block 22 -# 2210| r2210_36(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : -# 2210| r2210_37(glval<unknown>) = FunctionAddress[operator++] : -# 2210| r2210_38(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = Call[operator++] : func:r2210_37, this:r2210_36 -# 2210| mu2210_39(unknown) = ^CallSideEffect : ~m? -# 2210| v2210_40(void) = ^IndirectReadSideEffect[-1] : &:r2210_36, ~m? -# 2210| mu2210_41(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r2210_36 -# 2210| r2210_42(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r2210_38 +# 2210| r2210_34(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +# 2210| r2210_35(glval<unknown>) = FunctionAddress[operator++] : +# 2210| r2210_36(iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &> &) = 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<random_access_iterator_tag, int, ptrdiff_t, int *, int &>) = ^IndirectMayWriteSideEffect[-1] : &:r2210_34 +# 2210| r2210_40(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = CopyValue : r2210_36 #-----| Goto (back edge) -> Block 21 # 2210| Block 23 -# 2210| r2210_43(glval<int>) = VariableAddress[y] : -# 2210| r2210_44(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : -#-----| r0_47(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r2210_44 -# 2210| r2210_45(glval<unknown>) = FunctionAddress[operator*] : -# 2210| r2210_46(int &) = Call[operator*] : func:r2210_45, this:r0_47 -# 2210| mu2210_47(unknown) = ^CallSideEffect : ~m? +# 2210| r2210_41(glval<int>) = VariableAddress[y] : +# 2210| r2210_42(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = VariableAddress[(__begin)] : +#-----| r0_47(glval<iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int &>>) = Convert : r2210_42 +# 2210| r2210_43(glval<unknown>) = 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_48(int) = Load[?] : &:r2210_46, ~m? -# 2210| mu2210_49(int) = Store[y] : &:r2210_43, r2210_48 +# 2210| r2210_46(int) = Load[?] : &:r2210_44, ~m? +# 2210| mu2210_47(int) = Store[y] : &:r2210_41, r2210_46 # 2211| r2211_1(glval<int>) = VariableAddress[y] : # 2211| r2211_2(int) = Load[y] : &:r2211_1, ~m? # 2211| r2211_3(int) = Constant[1] : @@ -12793,12 +12783,12 @@ ir.cpp: # 2212| Block 24 # 2212| v2212_1(void) = NoOp : -# 2210| r2210_50(glval<vector<int>>) = VariableAddress[ys] : -# 2210| r2210_51(glval<unknown>) = FunctionAddress[~vector] : -# 2210| v2210_52(void) = Call[~vector] : func:r2210_51, this:r2210_50 -# 2210| mu2210_53(unknown) = ^CallSideEffect : ~m? -# 2210| v2210_54(void) = ^IndirectReadSideEffect[-1] : &:r2210_50, ~m? -# 2210| mu2210_55(vector<int>) = ^IndirectMayWriteSideEffect[-1] : &:r2210_50 +# 2210| r2210_48(glval<vector<int>>) = VariableAddress[ys] : +# 2210| r2210_49(glval<unknown>) = 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<int>) = ^IndirectMayWriteSideEffect[-1] : &:r2210_48 # 2219| r2219_7(glval<ClassWithDestructor>) = VariableAddress[x] : # 2219| r2219_8(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : # 2219| v2219_9(void) = Call[~ClassWithDestructor] : func:r2219_8, this:r2219_7 @@ -12808,12 +12798,12 @@ ir.cpp: #-----| Goto -> Block 1 # 2210| Block 25 -# 2210| r2210_56(glval<vector<int>>) = VariableAddress[ys] : -# 2210| r2210_57(glval<unknown>) = FunctionAddress[~vector] : -# 2210| v2210_58(void) = Call[~vector] : func:r2210_57, this:r2210_56 -# 2210| mu2210_59(unknown) = ^CallSideEffect : ~m? -# 2210| v2210_60(void) = ^IndirectReadSideEffect[-1] : &:r2210_56, ~m? -# 2210| mu2210_61(vector<int>) = ^IndirectMayWriteSideEffect[-1] : &:r2210_56 +# 2210| r2210_54(glval<vector<int>>) = VariableAddress[ys] : +# 2210| r2210_55(glval<unknown>) = 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<int>) = ^IndirectMayWriteSideEffect[-1] : &:r2210_54 #-----| Goto -> Block 26 # 2215| Block 26 @@ -12839,53 +12829,51 @@ ir.cpp: #-----| r0_50(glval<vector<ClassWithDestructor>>) = Convert : r0_49 # 2215| r2215_19(glval<unknown>) = FunctionAddress[begin] : # 2215| r2215_20(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[begin] : func:r2215_19, this:r0_50 -# 2215| mu2215_21(unknown) = ^CallSideEffect : ~m? #-----| v0_51(void) = ^IndirectReadSideEffect[-1] : &:r0_50, ~m? -# 2215| mu2215_22(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__begin)] : &:r2215_16, r2215_20 -# 2215| r2215_23(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : -# 2215| r2215_24(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : -# 2215| r2215_25(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2215_24, ~m? -#-----| r0_52(glval<vector<ClassWithDestructor>>) = CopyValue : r2215_25 +# 2215| mu2215_21(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__begin)] : &:r2215_16, r2215_20 +# 2215| r2215_22(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +# 2215| r2215_23(glval<vector<ClassWithDestructor> &>) = VariableAddress[(__range)] : +# 2215| r2215_24(vector<ClassWithDestructor> &) = Load[(__range)] : &:r2215_23, ~m? +#-----| r0_52(glval<vector<ClassWithDestructor>>) = CopyValue : r2215_24 #-----| r0_53(glval<vector<ClassWithDestructor>>) = Convert : r0_52 -# 2215| r2215_26(glval<unknown>) = FunctionAddress[end] : -# 2215| r2215_27(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[end] : func:r2215_26, this:r0_53 -# 2215| mu2215_28(unknown) = ^CallSideEffect : ~m? +# 2215| r2215_25(glval<unknown>) = FunctionAddress[end] : +# 2215| r2215_26(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Call[end] : func:r2215_25, this:r0_53 #-----| v0_54(void) = ^IndirectReadSideEffect[-1] : &:r0_53, ~m? -# 2215| mu2215_29(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__end)] : &:r2215_23, r2215_27 +# 2215| mu2215_27(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Store[(__end)] : &:r2215_22, r2215_26 #-----| Goto -> Block 27 # 2215| Block 27 -# 2215| r2215_30(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : -#-----| r0_55(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2215_30 -# 2215| r2215_31(glval<unknown>) = FunctionAddress[operator!=] : +# 2215| r2215_28(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_55(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2215_28 +# 2215| r2215_29(glval<unknown>) = FunctionAddress[operator!=] : #-----| r0_56(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[#temp0:0] : #-----| mu0_57(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Uninitialized[#temp0:0] : &:r0_56 -# 2215| r2215_32(glval<unknown>) = FunctionAddress[iterator] : -# 2215| r2215_33(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : -#-----| r0_58(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2215_33 +# 2215| r2215_30(glval<unknown>) = FunctionAddress[iterator] : +# 2215| r2215_31(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__end)] : +#-----| r0_58(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2215_31 #-----| r0_59(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = CopyValue : r0_58 -# 2215| v2215_34(void) = Call[iterator] : func:r2215_32, this:r0_56, 0:r0_59 -# 2215| mu2215_35(unknown) = ^CallSideEffect : ~m? +# 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_36(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_56 +# 2215| mu2215_34(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_56 #-----| r0_61(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = Load[#temp0:0] : &:r0_56, ~m? -# 2215| r2215_37(bool) = Call[operator!=] : func:r2215_31, this:r0_55, 0:r0_61 -# 2215| mu2215_38(unknown) = ^CallSideEffect : ~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_39(void) = ConditionalBranch : r2215_37 +# 2215| v2215_37(void) = ConditionalBranch : r2215_35 #-----| False -> Block 30 #-----| True -> Block 28 # 2215| Block 28 -# 2215| r2215_40(glval<ClassWithDestructor>) = VariableAddress[y] : -# 2215| r2215_41(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : -#-----| r0_63(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2215_41 -# 2215| r2215_42(glval<unknown>) = FunctionAddress[operator*] : -# 2215| r2215_43(ClassWithDestructor &) = Call[operator*] : func:r2215_42, this:r0_63 -# 2215| mu2215_44(unknown) = ^CallSideEffect : ~m? +# 2215| r2215_38(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2215| r2215_39(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +#-----| r0_63(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = Convert : r2215_39 +# 2215| r2215_40(glval<unknown>) = 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_45(ClassWithDestructor) = Load[?] : &:r2215_43, ~m? -# 2215| mu2215_46(ClassWithDestructor) = Store[y] : &:r2215_40, r2215_45 +# 2215| r2215_43(ClassWithDestructor) = Load[?] : &:r2215_41, ~m? +# 2215| mu2215_44(ClassWithDestructor) = Store[y] : &:r2215_38, r2215_43 # 2216| r2216_1(glval<ClassWithDestructor>) = VariableAddress[z1] : # 2216| mu2216_2(ClassWithDestructor) = Uninitialized[z1] : &:r2216_1 # 2216| r2216_3(glval<unknown>) = FunctionAddress[ClassWithDestructor] : @@ -12910,28 +12898,28 @@ ir.cpp: # 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_47(glval<ClassWithDestructor>) = VariableAddress[y] : -# 2215| r2215_48(glval<unknown>) = FunctionAddress[~ClassWithDestructor] : -# 2215| v2215_49(void) = Call[~ClassWithDestructor] : func:r2215_48, this:r2215_47 -# 2215| mu2215_50(unknown) = ^CallSideEffect : ~m? -# 2215| v2215_51(void) = ^IndirectReadSideEffect[-1] : &:r2215_47, ~m? -# 2215| mu2215_52(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2215_47 -# 2215| r2215_53(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : -# 2215| r2215_54(glval<unknown>) = FunctionAddress[operator++] : -# 2215| r2215_55(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = Call[operator++] : func:r2215_54, this:r2215_53 -# 2215| mu2215_56(unknown) = ^CallSideEffect : ~m? -# 2215| v2215_57(void) = ^IndirectReadSideEffect[-1] : &:r2215_53, ~m? -# 2215| mu2215_58(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2215_53 -# 2215| r2215_59(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2215_55 +# 2215| r2215_45(glval<ClassWithDestructor>) = VariableAddress[y] : +# 2215| r2215_46(glval<unknown>) = 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<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = VariableAddress[(__begin)] : +# 2215| r2215_52(glval<unknown>) = FunctionAddress[operator++] : +# 2215| r2215_53(iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &> &) = 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<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>) = ^IndirectMayWriteSideEffect[-1] : &:r2215_51 +# 2215| r2215_57(glval<iterator<random_access_iterator_tag, ClassWithDestructor, ptrdiff_t, ClassWithDestructor *, ClassWithDestructor &>>) = CopyValue : r2215_53 #-----| Goto (back edge) -> Block 27 # 2215| Block 29 -# 2215| r2215_60(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : -# 2215| r2215_61(glval<unknown>) = FunctionAddress[~vector] : -# 2215| v2215_62(void) = Call[~vector] : func:r2215_61, this:r2215_60 -# 2215| mu2215_63(unknown) = ^CallSideEffect : ~m? -# 2215| v2215_64(void) = ^IndirectReadSideEffect[-1] : &:r2215_60, ~m? -# 2215| mu2215_65(vector<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2215_60 +# 2215| r2215_58(glval<vector<ClassWithDestructor>>) = VariableAddress[ys] : +# 2215| r2215_59(glval<unknown>) = 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<ClassWithDestructor>) = ^IndirectMayWriteSideEffect[-1] : &:r2215_58 #-----| Goto -> Block 30 # 2219| Block 30 @@ -13490,60 +13478,58 @@ ir.cpp: #-----| r0_2(glval<vector<String>>) = Convert : r0_1 # 2293| r2293_23(glval<unknown>) = FunctionAddress[begin] : # 2293| r2293_24(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Call[begin] : func:r2293_23, this:r0_2 -# 2293| mu2293_25(unknown) = ^CallSideEffect : ~m? #-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? -# 2293| mu2293_26(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Store[(__begin)] : &:r2293_20, r2293_24 -# 2293| r2293_27(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__end)] : -# 2293| r2293_28(glval<vector<String> &&>) = VariableAddress[(__range)] : -# 2293| r2293_29(vector<String> &&) = Load[(__range)] : &:r2293_28, ~m? -#-----| r0_4(glval<vector<String>>) = CopyValue : r2293_29 +# 2293| mu2293_25(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Store[(__begin)] : &:r2293_20, r2293_24 +# 2293| r2293_26(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__end)] : +# 2293| r2293_27(glval<vector<String> &&>) = VariableAddress[(__range)] : +# 2293| r2293_28(vector<String> &&) = Load[(__range)] : &:r2293_27, ~m? +#-----| r0_4(glval<vector<String>>) = CopyValue : r2293_28 #-----| r0_5(glval<vector<String>>) = Convert : r0_4 -# 2293| r2293_30(glval<unknown>) = FunctionAddress[end] : -# 2293| r2293_31(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Call[end] : func:r2293_30, this:r0_5 -# 2293| mu2293_32(unknown) = ^CallSideEffect : ~m? +# 2293| r2293_29(glval<unknown>) = FunctionAddress[end] : +# 2293| r2293_30(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Call[end] : func:r2293_29, this:r0_5 #-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? -# 2293| mu2293_33(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Store[(__end)] : &:r2293_27, r2293_31 +# 2293| mu2293_31(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Store[(__end)] : &:r2293_26, r2293_30 #-----| Goto -> Block 4 # 2293| Block 4 -# 2293| r2293_34(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] : -#-----| r0_7(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = Convert : r2293_34 -# 2293| r2293_35(glval<unknown>) = FunctionAddress[operator!=] : +# 2293| r2293_32(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] : +#-----| r0_7(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = Convert : r2293_32 +# 2293| r2293_33(glval<unknown>) = FunctionAddress[operator!=] : #-----| r0_8(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[#temp0:0] : #-----| mu0_9(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Uninitialized[#temp0:0] : &:r0_8 -# 2293| r2293_36(glval<unknown>) = FunctionAddress[iterator] : -# 2293| r2293_37(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__end)] : -#-----| r0_10(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = Convert : r2293_37 +# 2293| r2293_34(glval<unknown>) = FunctionAddress[iterator] : +# 2293| r2293_35(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__end)] : +#-----| r0_10(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = Convert : r2293_35 #-----| r0_11(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &> &) = CopyValue : r0_10 -# 2293| v2293_38(void) = Call[iterator] : func:r2293_36, this:r0_8, 0:r0_11 -# 2293| mu2293_39(unknown) = ^CallSideEffect : ~m? +# 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_40(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +# 2293| mu2293_38(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 #-----| r0_13(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = Load[#temp0:0] : &:r0_8, ~m? -# 2293| r2293_41(bool) = Call[operator!=] : func:r2293_35, this:r0_7, 0:r0_13 -# 2293| mu2293_42(unknown) = ^CallSideEffect : ~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_43(void) = ConditionalBranch : r2293_41 +# 2293| v2293_41(void) = ConditionalBranch : r2293_39 #-----| False -> Block 6 #-----| True -> Block 5 # 2293| Block 5 -# 2293| r2293_44(glval<String>) = VariableAddress[s] : -# 2293| mu2293_45(String) = Uninitialized[s] : &:r2293_44 -# 2293| r2293_46(glval<unknown>) = FunctionAddress[String] : -# 2293| r2293_47(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] : -#-----| r0_15(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = Convert : r2293_47 -# 2293| r2293_48(glval<unknown>) = FunctionAddress[operator*] : -# 2293| r2293_49(String &) = Call[operator*] : func:r2293_48, this:r0_15 -# 2293| mu2293_50(unknown) = ^CallSideEffect : ~m? +# 2293| r2293_42(glval<String>) = VariableAddress[s] : +# 2293| mu2293_43(String) = Uninitialized[s] : &:r2293_42 +# 2293| r2293_44(glval<unknown>) = FunctionAddress[String] : +# 2293| r2293_45(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] : +#-----| r0_15(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = Convert : r2293_45 +# 2293| r2293_46(glval<unknown>) = 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_51(glval<String>) = CopyValue : r2293_49 -# 2293| r2293_52(glval<String>) = Convert : r2293_51 -# 2293| r2293_53(String &) = CopyValue : r2293_52 -# 2293| v2293_54(void) = Call[String] : func:r2293_46, this:r2293_44, 0:r2293_53 -# 2293| mu2293_55(unknown) = ^CallSideEffect : ~m? -# 2293| v2293_56(void) = ^BufferReadSideEffect[0] : &:r2293_53, ~m? -# 2293| mu2293_57(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_44 +# 2293| r2293_49(glval<String>) = CopyValue : r2293_47 +# 2293| r2293_50(glval<String>) = 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<String>) = VariableAddress[s2] : # 2294| mu2294_2(String) = Uninitialized[s2] : &:r2294_1 # 2294| r2294_3(glval<unknown>) = FunctionAddress[String] : @@ -13556,19 +13542,19 @@ ir.cpp: # 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_58(glval<String>) = VariableAddress[s] : -# 2293| r2293_59(glval<unknown>) = FunctionAddress[~String] : -# 2293| v2293_60(void) = Call[~String] : func:r2293_59, this:r2293_58 -# 2293| mu2293_61(unknown) = ^CallSideEffect : ~m? -# 2293| v2293_62(void) = ^IndirectReadSideEffect[-1] : &:r2293_58, ~m? -# 2293| mu2293_63(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_58 -# 2293| r2293_64(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] : -# 2293| r2293_65(glval<unknown>) = FunctionAddress[operator++] : -# 2293| r2293_66(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &> &) = Call[operator++] : func:r2293_65, this:r2293_64 -# 2293| mu2293_67(unknown) = ^CallSideEffect : ~m? -# 2293| v2293_68(void) = ^IndirectReadSideEffect[-1] : &:r2293_64, ~m? -# 2293| mu2293_69(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = ^IndirectMayWriteSideEffect[-1] : &:r2293_64 -# 2293| r2293_70(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = CopyValue : r2293_66 +# 2293| r2293_56(glval<String>) = VariableAddress[s] : +# 2293| r2293_57(glval<unknown>) = 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<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = VariableAddress[(__begin)] : +# 2293| r2293_63(glval<unknown>) = FunctionAddress[operator++] : +# 2293| r2293_64(iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &> &) = 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<random_access_iterator_tag, String, ptrdiff_t, String *, String &>) = ^IndirectMayWriteSideEffect[-1] : &:r2293_62 +# 2293| r2293_68(glval<iterator<random_access_iterator_tag, String, ptrdiff_t, String *, String &>>) = CopyValue : r2293_64 #-----| Goto (back edge) -> Block 4 # 2297| Block 6 From 342465057c34e44f0e825d9604338de393a6ef3a Mon Sep 17 00:00:00 2001 From: Sim4n6 <sim4n6@gmail.com> Date: Sat, 13 Jan 2024 10:29:32 +0100 Subject: [PATCH 352/430] Add Unicode DoS (CWE-770) --- .../Security/CWE-770/UnicodeDoS.qhelp | 38 +++++++ .../Security/CWE-770/UnicodeDoS.ql | 104 ++++++++++++++++++ .../src/experimental/Security/CWE-770/bad.py | 17 +++ .../src/experimental/Security/CWE-770/good.py | 16 +++ .../Security/CWE-770/UnicodeDoS.expected | 55 +++++++++ .../Security/CWE-770/UnicodeDoS.qlref | 1 + .../query-tests/Security/CWE-770/tests.py | 80 ++++++++++++++ 7 files changed, 311 insertions(+) create mode 100644 python/ql/src/experimental/Security/CWE-770/UnicodeDoS.qhelp create mode 100644 python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql create mode 100644 python/ql/src/experimental/Security/CWE-770/bad.py create mode 100644 python/ql/src/experimental/Security/CWE-770/good.py create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-770/UnicodeDoS.expected create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-770/UnicodeDoS.qlref create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-770/tests.py 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..53a19e9bca3 --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.qhelp @@ -0,0 +1,38 @@ +<!DOCTYPE qhelp PUBLIC + "-//Semmle//qhelp//EN" + "qhelp.dtd"> +<qhelp> + +<overview> +<p>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.</p> + +<p>And, with the use of special Unicode characters, like U+2100 (â„€) or U+2105 (â„…), the payload size could be tripled after the compatibility normalization. + +</overview> +<recommendation> + +<p>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.</p> + +</recommendation> + +<example> +<p> +In this example a simple user-controlled data reaches a Unicode normalization with the form "NFKC". +</p> + +<sample src="bad.py" /> + +<p>To fix this vulnerability, we need restrain the size of the user input.</p> + +<p>For example, we can use the <code>len()</code> builtin function to limit the size of the user input.</p> + +<sample src="good.py" /> + +</example> +<references> + +<li> + <a href="https://hackerone.com/reports/2258758">CVE-2023-46695: Potential denial of service vulnerability in Django UsernameField on Windows.</a> + </li> +</references> +</qhelp> 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..644f8c024df --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql @@ -0,0 +1,104 @@ +/** + * @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 + +class UnicodeCompatibilityNormalize extends API::CallNode { + int argIdx; + + UnicodeCompatibilityNormalize() { + exists(API::CallNode cn, DataFlow::Node form | + cn = API::moduleImport("unicodedata").getMember("normalize").getACall() and + form.asExpr().(StrConst).getS() in ["NFKC", "NFKD"] and + TaintTracking::localTaint(form, cn.getArg(0)) and + this = cn and + argIdx = 1 + ) + or + exists(API::CallNode cn | + cn = API::moduleImport("unidecode").getMember("unidecode").getACall() and + this = cn and + argIdx = 0 + ) + or + exists(API::CallNode cn | + cn = API::moduleImport("pyunormalize").getMember(["NFKC", "NFKD"]).getACall() and + this = cn and + argIdx = 0 + ) + or + exists(API::CallNode cn, DataFlow::Node form | + cn = API::moduleImport("pyunormalize").getMember("normalize").getACall() and + form.asExpr().(StrConst).getS() in ["NFKC", "NFKD"] and + TaintTracking::localTaint(form, cn.getArg(0)) and + this = cn and + argIdx = 1 + ) + or + exists(API::CallNode cn, DataFlow::Node form | + cn = API::moduleImport("textnorm").getMember("normalize_unicode").getACall() and + form.asExpr().(StrConst).getS() in ["NFKC", "NFKD"] and + TaintTracking::localTaint(form, cn.getArg(1)) and + this = cn 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_gt, Cmpop op_lt, Node n | + lenCall = n.getALocalSource() and + ( + (op_lt = any(LtE lte) or op_lt = any(Lt lt)) and + branch = true and + cn.operands(n.asCfgNode(), op_lt, _) + or + (op_gt = any(GtE gte) or op_gt = any(Gt gt)) and + branch = true and + cn.operands(_, op_gt, n.asCfgNode()) + ) + | + lenCall = API::builtin("len").getACall() and + node = lenCall.getArg(0).asCfgNode() + ) //and + //not cn.getLocation().getFile().inStdlib() + ) +} + +class Configuration extends TaintTracking::Configuration { + Configuration() { this = "RemoteSourcesReachUnicodeCharacters" } + + override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } + + override predicate isSanitizer(DataFlow::Node sanitizer) { + sanitizer = DataFlow::BarrierGuard<underAValue/3>::getABarrierNode() + } + + override predicate isSink(DataFlow::Node sink) { + sink = any(UnicodeCompatibilityNormalize ucn).getPathArg() + } +} + +import DataFlow::PathGraph + +from Configuration config, DataFlow::PathNode source, DataFlow::PathNode sink +where config.hasFlowPath(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..ce171a16015 --- /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("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 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..f05da000657 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-770/UnicodeDoS.expected @@ -0,0 +1,55 @@ +WARNING: Module PathGraph has been deprecated and may be removed in future (C:/Users/ab/Desktop/GhSec/Pull-Requests/codeql-PUN/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql:99,8-27) +WARNING: Type Configuration has been deprecated and may be removed in future (C:/Users/ab/Desktop/GhSec/Pull-Requests/codeql-PUN/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql:85,29-57) +WARNING: Type PathNode has been deprecated and may be removed in future (C:/Users/ab/Desktop/GhSec/Pull-Requests/codeql-PUN/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql:101,28-46) +WARNING: Type PathNode has been deprecated and may be removed in future (C:/Users/ab/Desktop/GhSec/Pull-Requests/codeql-PUN/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql:101,55-73) +edges +| tests.py:1:35:1:41 | ControlFlowNode for ImportMember | tests.py:1:35:1:41 | ControlFlowNode for request | +| tests.py:1:35:1:41 | ControlFlowNode for request | tests.py:12:17:12:23 | ControlFlowNode for request | +| tests.py:1:35:1:41 | ControlFlowNode for request | tests.py:24:9:24:15 | ControlFlowNode for request | +| tests.py:1:35:1:41 | ControlFlowNode for request | tests.py:36:9:36:15 | ControlFlowNode for request | +| tests.py:1:35:1:41 | ControlFlowNode for request | tests.py:48:9:48:15 | ControlFlowNode for request | +| tests.py:12:5:12:13 | ControlFlowNode for file_path | tests.py:16:39:16:47 | ControlFlowNode for file_path | +| tests.py:12:17:12:23 | ControlFlowNode for request | tests.py:12:17:12:28 | ControlFlowNode for Attribute | +| tests.py:12:17:12:28 | ControlFlowNode for Attribute | tests.py:12:17:12:49 | ControlFlowNode for Attribute() | +| tests.py:12:17:12:49 | ControlFlowNode for Attribute() | tests.py:12:5:12:13 | ControlFlowNode for file_path | +| tests.py:24:5:24:5 | ControlFlowNode for r | tests.py:28:43:28:43 | ControlFlowNode for r | +| tests.py:24:9:24:15 | ControlFlowNode for request | tests.py:24:9:24:20 | ControlFlowNode for Attribute | +| tests.py:24:9:24:20 | ControlFlowNode for Attribute | tests.py:24:9:24:33 | ControlFlowNode for Attribute() | +| tests.py:24:9:24:33 | ControlFlowNode for Attribute() | tests.py:24:5:24:5 | ControlFlowNode for r | +| tests.py:36:5:36:5 | ControlFlowNode for r | tests.py:40:43:40:43 | ControlFlowNode for r | +| tests.py:36:9:36:15 | ControlFlowNode for request | tests.py:36:9:36:20 | ControlFlowNode for Attribute | +| tests.py:36:9:36:20 | ControlFlowNode for Attribute | tests.py:36:9:36:33 | ControlFlowNode for Attribute() | +| tests.py:36:9:36:33 | ControlFlowNode for Attribute() | tests.py:36:5:36:5 | ControlFlowNode for r | +| tests.py:48:5:48:5 | ControlFlowNode for r | tests.py:52:43:52:43 | ControlFlowNode for r | +| tests.py:48:9:48:15 | ControlFlowNode for request | tests.py:48:9:48:20 | ControlFlowNode for Attribute | +| tests.py:48:9:48:20 | ControlFlowNode for Attribute | tests.py:48:9:48:33 | ControlFlowNode for Attribute() | +| tests.py:48:9:48:33 | ControlFlowNode for Attribute() | tests.py:48:5:48:5 | ControlFlowNode for r | +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 | +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 | 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..e941f91fc01 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-770/tests.py @@ -0,0 +1,80 @@ +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("/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 From 5cc9170249772870834580fa3e90bf5703156342 Mon Sep 17 00:00:00 2001 From: Sim4n6 <sim4n6@gmail.com> Date: Tue, 13 Feb 2024 04:21:52 +0100 Subject: [PATCH 353/430] Add UnicodeDoS sink for werkzeug secure_filename --- .../ql/src/experimental/Security/CWE-770/UnicodeDoS.ql | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql b/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql index 644f8c024df..bd203877e5a 100644 --- a/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql +++ b/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql @@ -93,6 +93,16 @@ class Configuration extends TaintTracking::Configuration { override predicate isSink(DataFlow::Node sink) { sink = any(UnicodeCompatibilityNormalize ucn).getPathArg() + or + sink = API::moduleImport("werkzeug").getMember("secure_filename").getACall().getArg(_) + or + sink = + API::moduleImport("werkzeug") + .getMember("utils") + .getMember("secure_filename") + .getACall() + .getArg(_) + } } From 1f767b887eefda279e048f9ae0dd50c1c3e92b81 Mon Sep 17 00:00:00 2001 From: Sim4n6 <sim4n6@gmail.com> Date: Tue, 13 Feb 2024 04:31:07 +0100 Subject: [PATCH 354/430] Add some comments and docs --- .../ql/src/experimental/Security/CWE-770/UnicodeDoS.ql | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql b/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql index bd203877e5a..d1f565ab11f 100644 --- a/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql +++ b/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql @@ -17,6 +17,8 @@ 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; @@ -66,10 +68,12 @@ predicate underAValue(DataFlow::GuardNode g, ControlFlowNode node, boolean branc exists(API::CallNode lenCall, Cmpop op_gt, Cmpop op_lt, Node n | lenCall = n.getALocalSource() and ( + // arg <= LIMIT OR arg < LIMIT (op_lt = any(LtE lte) or op_lt = any(Lt lt)) and branch = true and cn.operands(n.asCfgNode(), op_lt, _) or + // LIMIT >= arg OR LIMIT > arg (op_gt = any(GtE gte) or op_gt = any(Gt gt)) and branch = true and cn.operands(_, op_gt, n.asCfgNode()) @@ -88,12 +92,16 @@ class Configuration extends TaintTracking::Configuration { override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } override predicate isSanitizer(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<underAValue/3>::getABarrierNode() } override 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 = @@ -102,7 +110,6 @@ class Configuration extends TaintTracking::Configuration { .getMember("secure_filename") .getACall() .getArg(_) - } } From 658b88e62f129eaf15f075c58b5b517f83f0e3ea Mon Sep 17 00:00:00 2001 From: Sim4n6${{7*'7'}} <sim4n6@gmail.com> Date: Tue, 12 Mar 2024 19:57:46 +0000 Subject: [PATCH 355/430] Update python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql update the Config API Co-authored-by: yoff <lerchedahl@gmail.com> --- .../Security/CWE-770/UnicodeDoS.ql | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql b/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql index d1f565ab11f..ea06def1b32 100644 --- a/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql +++ b/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql @@ -86,17 +86,15 @@ predicate underAValue(DataFlow::GuardNode g, ControlFlowNode node, boolean branc ) } -class Configuration extends TaintTracking::Configuration { - Configuration() { this = "RemoteSourcesReachUnicodeCharacters" } +private module UnicodeDoSConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } - - override predicate isSanitizer(DataFlow::Node sanitizer) { + 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<underAValue/3>::getABarrierNode() } - override predicate isSink(DataFlow::Node sink) { + predicate isSink(DataFlow::Node sink) { // Any call to the Unicode compatibility normalization is a costly operation sink = any(UnicodeCompatibilityNormalize ucn).getPathArg() or @@ -113,9 +111,11 @@ class Configuration extends TaintTracking::Configuration { } } -import DataFlow::PathGraph +module UnicodeDoSFlow = TaintTracking::Global<UnicodeDoSConfig>; -from Configuration config, DataFlow::PathNode source, DataFlow::PathNode sink -where config.hasFlowPath(source, sink) +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" From 3d8868a6c33cf877d4865c6a45dcfb1612db7674 Mon Sep 17 00:00:00 2001 From: Sim4n6 <sim4n6@gmail.com> Date: Tue, 12 Mar 2024 20:03:16 +0000 Subject: [PATCH 356/430] Add routes for bad_5 and bad_6, and fix routes for good_3 and good_4 --- .../query-tests/Security/CWE-770/tests.py | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) 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 index e941f91fc01..1007bcc8985 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-770/tests.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-770/tests.py @@ -55,6 +55,30 @@ def bad_4(): 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", "") @@ -78,3 +102,28 @@ def good_2(): 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 From 70ebc58b4ce310c7982669418a66d37e88a71979 Mon Sep 17 00:00:00 2001 From: Sim4n6 <sim4n6@gmail.com> Date: Tue, 12 Mar 2024 20:15:07 +0000 Subject: [PATCH 357/430] Refactor Unicode normalization code --- .../Security/CWE-770/UnicodeDoS.ql | 53 +++++++------------ 1 file changed, 18 insertions(+), 35 deletions(-) diff --git a/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql b/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql index ea06def1b32..0a8241b1f0b 100644 --- a/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql +++ b/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql @@ -23,41 +23,24 @@ class UnicodeCompatibilityNormalize extends API::CallNode { int argIdx; UnicodeCompatibilityNormalize() { - exists(API::CallNode cn, DataFlow::Node form | - cn = API::moduleImport("unicodedata").getMember("normalize").getACall() and - form.asExpr().(StrConst).getS() in ["NFKC", "NFKD"] and - TaintTracking::localTaint(form, cn.getArg(0)) and - this = cn and - argIdx = 1 - ) + ( + 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 - exists(API::CallNode cn | - cn = API::moduleImport("unidecode").getMember("unidecode").getACall() and - this = cn and - argIdx = 0 - ) - or - exists(API::CallNode cn | - cn = API::moduleImport("pyunormalize").getMember(["NFKC", "NFKD"]).getACall() and - this = cn and - argIdx = 0 - ) - or - exists(API::CallNode cn, DataFlow::Node form | - cn = API::moduleImport("pyunormalize").getMember("normalize").getACall() and - form.asExpr().(StrConst).getS() in ["NFKC", "NFKD"] and - TaintTracking::localTaint(form, cn.getArg(0)) and - this = cn and - argIdx = 1 - ) - or - exists(API::CallNode cn, DataFlow::Node form | - cn = API::moduleImport("textnorm").getMember("normalize_unicode").getACall() and - form.asExpr().(StrConst).getS() in ["NFKC", "NFKD"] and - TaintTracking::localTaint(form, cn.getArg(1)) and - this = cn and - argIdx = 0 - ) + ( + 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) } @@ -73,7 +56,7 @@ predicate underAValue(DataFlow::GuardNode g, ControlFlowNode node, boolean branc branch = true and cn.operands(n.asCfgNode(), op_lt, _) or - // LIMIT >= arg OR LIMIT > arg + // LIMIT >= arg OR LIMIT > arg (op_gt = any(GtE gte) or op_gt = any(Gt gt)) and branch = true and cn.operands(_, op_gt, n.asCfgNode()) From 31dc542111bc508c926312206275b8a42535d8db Mon Sep 17 00:00:00 2001 From: Sim4n6 <sim4n6@gmail.com> Date: Tue, 12 Mar 2024 20:18:18 +0000 Subject: [PATCH 358/430] Update request parameter name in good_1() function --- python/ql/src/experimental/Security/CWE-770/good.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/src/experimental/Security/CWE-770/good.py b/python/ql/src/experimental/Security/CWE-770/good.py index ce171a16015..4d1ebc31507 100644 --- a/python/ql/src/experimental/Security/CWE-770/good.py +++ b/python/ql/src/experimental/Security/CWE-770/good.py @@ -6,7 +6,7 @@ app = Flask(__name__) @app.route("/good_1") def good_1(): - r = request.args.get("r", "") + r = request.args.get("file_path", "") if len(r) <= 1_000: # Normalize the r using NFKD Unicode normalization From 085d803b14fa87ded56c8f8766053794b614360f Mon Sep 17 00:00:00 2001 From: Sim4n6 <sim4n6@gmail.com> Date: Tue, 12 Mar 2024 20:21:38 +0000 Subject: [PATCH 359/430] Fix UnicodeDoS vulnerability in CWE-770 --- .../ql/src/experimental/Security/CWE-770/UnicodeDoS.ql | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql b/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql index 0a8241b1f0b..aaab637ec45 100644 --- a/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql +++ b/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql @@ -60,6 +60,16 @@ predicate underAValue(DataFlow::GuardNode g, ControlFlowNode node, boolean branc (op_gt = any(GtE gte) or op_gt = any(Gt gt)) and branch = true and cn.operands(_, op_gt, n.asCfgNode()) + or + // not arg <= LIMIT OR not arg < LIMIT + (op_lt = any(LtE lte) or op_lt = any(Lt lt)) and + branch = false and + cn.operands(n.asCfgNode(), op_lt, _) + or + // not LIMIT >= arg OR not LIMIT > arg + (op_gt = any(GtE gte) or op_gt = any(Gt gt)) and + branch = false and + cn.operands(_, op_gt, n.asCfgNode()) ) | lenCall = API::builtin("len").getACall() and From af19a0342e33dbccb0a2fad50126b1fab49ff153 Mon Sep 17 00:00:00 2001 From: Sim4n6 <sim4n6@gmail.com> Date: Tue, 12 Mar 2024 21:09:10 +0000 Subject: [PATCH 360/430] Fix UnicodeDoS vulnerability in CWE-770 code --- .../experimental/Security/CWE-770/UnicodeDoS.ql | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql b/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql index aaab637ec45..01e2fe8741d 100644 --- a/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql +++ b/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql @@ -61,15 +61,15 @@ predicate underAValue(DataFlow::GuardNode g, ControlFlowNode node, boolean branc branch = true and cn.operands(_, op_gt, n.asCfgNode()) or - // not arg <= LIMIT OR not arg < LIMIT - (op_lt = any(LtE lte) or op_lt = any(Lt lt)) and - branch = false and - cn.operands(n.asCfgNode(), op_lt, _) - or - // not LIMIT >= arg OR not LIMIT > arg + // not arg >= LIMIT OR not arg > LIMIT (op_gt = any(GtE gte) or op_gt = any(Gt gt)) and branch = false and - cn.operands(_, op_gt, n.asCfgNode()) + cn.operands(n.asCfgNode(), op_gt, _) + or + // not LIMIT <= arg OR not LIMIT < arg + (op_lt = any(LtE lte) or op_lt = any(Lt lt)) and + branch = false and + cn.operands(_, op_lt, n.asCfgNode()) ) | lenCall = API::builtin("len").getACall() and From a717bf1b9ded12c9804b463160c601afda830ece Mon Sep 17 00:00:00 2001 From: Sim4n6 <sim4n6@gmail.com> Date: Wed, 13 Mar 2024 11:04:15 +0000 Subject: [PATCH 361/430] Fix p tag in UnicodeDoS.qhelp --- python/ql/src/experimental/Security/CWE-770/UnicodeDoS.qhelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.qhelp b/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.qhelp index 53a19e9bca3..9b8fea3cad1 100644 --- a/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.qhelp +++ b/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.qhelp @@ -6,7 +6,7 @@ <overview> <p>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.</p> -<p>And, with the use of special Unicode characters, like U+2100 (â„€) or U+2105 (â„…), the payload size could be tripled after the compatibility normalization. +<p>And, with the use of special Unicode characters, like U+2100 (â„€) or U+2105 (â„…), the payload size could be tripled after the compatibility normalization.</p> </overview> <recommendation> From 26a16b7857f6e8bb81e52fb9e4628fbec0a63a36 Mon Sep 17 00:00:00 2001 From: Sim4n6 <sim4n6@gmail.com> Date: Wed, 13 Mar 2024 11:07:40 +0000 Subject: [PATCH 362/430] use of a single var "op" of type Cmpop --- .../Security/CWE-770/UnicodeDoS.ql | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql b/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql index 01e2fe8741d..9e0a3a3018a 100644 --- a/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql +++ b/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql @@ -48,28 +48,28 @@ class UnicodeCompatibilityNormalize extends API::CallNode { predicate underAValue(DataFlow::GuardNode g, ControlFlowNode node, boolean branch) { exists(CompareNode cn | cn = g | - exists(API::CallNode lenCall, Cmpop op_gt, Cmpop op_lt, Node n | + exists(API::CallNode lenCall, Cmpop op, Node n | lenCall = n.getALocalSource() and ( // arg <= LIMIT OR arg < LIMIT - (op_lt = any(LtE lte) or op_lt = any(Lt lt)) and + (op instanceof LtE or op instanceof Lt) and branch = true and - cn.operands(n.asCfgNode(), op_lt, _) + cn.operands(n.asCfgNode(), op, _) or // LIMIT >= arg OR LIMIT > arg - (op_gt = any(GtE gte) or op_gt = any(Gt gt)) and + (op instanceof GtE or op instanceof Gt) and branch = true and - cn.operands(_, op_gt, n.asCfgNode()) + cn.operands(_, op, n.asCfgNode()) or // not arg >= LIMIT OR not arg > LIMIT - (op_gt = any(GtE gte) or op_gt = any(Gt gt)) and + (op instanceof GtE or op instanceof Gt) and branch = false and - cn.operands(n.asCfgNode(), op_gt, _) + cn.operands(n.asCfgNode(), op, _) or // not LIMIT <= arg OR not LIMIT < arg - (op_lt = any(LtE lte) or op_lt = any(Lt lt)) and + (op instanceof LtE or op instanceof Lt) and branch = false and - cn.operands(_, op_lt, n.asCfgNode()) + cn.operands(_, op, n.asCfgNode()) ) | lenCall = API::builtin("len").getACall() and From 3acdd3382c85ad63c578d9afe41049a6882d3013 Mon Sep 17 00:00:00 2001 From: Sim4n6 <sim4n6@gmail.com> Date: Wed, 13 Mar 2024 15:49:58 +0000 Subject: [PATCH 363/430] Update the expected file --- .../Security/CWE-770/UnicodeDoS.expected | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) 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 index f05da000657..415b94973a5 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-770/UnicodeDoS.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-770/UnicodeDoS.expected @@ -1,13 +1,11 @@ -WARNING: Module PathGraph has been deprecated and may be removed in future (C:/Users/ab/Desktop/GhSec/Pull-Requests/codeql-PUN/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql:99,8-27) -WARNING: Type Configuration has been deprecated and may be removed in future (C:/Users/ab/Desktop/GhSec/Pull-Requests/codeql-PUN/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql:85,29-57) -WARNING: Type PathNode has been deprecated and may be removed in future (C:/Users/ab/Desktop/GhSec/Pull-Requests/codeql-PUN/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql:101,28-46) -WARNING: Type PathNode has been deprecated and may be removed in future (C:/Users/ab/Desktop/GhSec/Pull-Requests/codeql-PUN/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql:101,55-73) edges | tests.py:1:35:1:41 | ControlFlowNode for ImportMember | tests.py:1:35:1:41 | ControlFlowNode for request | | tests.py:1:35:1:41 | ControlFlowNode for request | tests.py:12:17:12:23 | ControlFlowNode for request | | tests.py:1:35:1:41 | ControlFlowNode for request | tests.py:24:9:24:15 | ControlFlowNode for request | | tests.py:1:35:1:41 | ControlFlowNode for request | tests.py:36:9:36:15 | ControlFlowNode for request | | tests.py:1:35:1:41 | ControlFlowNode for request | tests.py:48:9:48:15 | ControlFlowNode for request | +| tests.py:1:35:1:41 | ControlFlowNode for request | tests.py:60:9:60:15 | ControlFlowNode for request | +| tests.py:1:35:1:41 | ControlFlowNode for request | tests.py:72:9:72:15 | ControlFlowNode for request | | tests.py:12:5:12:13 | ControlFlowNode for file_path | tests.py:16:39:16:47 | ControlFlowNode for file_path | | tests.py:12:17:12:23 | ControlFlowNode for request | tests.py:12:17:12:28 | ControlFlowNode for Attribute | | tests.py:12:17:12:28 | ControlFlowNode for Attribute | tests.py:12:17:12:49 | ControlFlowNode for Attribute() | @@ -24,6 +22,14 @@ edges | tests.py:48:9:48:15 | ControlFlowNode for request | tests.py:48:9:48:20 | ControlFlowNode for Attribute | | tests.py:48:9:48:20 | ControlFlowNode for Attribute | tests.py:48:9:48:33 | ControlFlowNode for Attribute() | | tests.py:48:9:48:33 | ControlFlowNode for Attribute() | tests.py:48:5:48:5 | ControlFlowNode for r | +| tests.py:60:5:60:5 | ControlFlowNode for r | tests.py:64:43:64:43 | ControlFlowNode for r | +| tests.py:60:9:60:15 | ControlFlowNode for request | tests.py:60:9:60:20 | ControlFlowNode for Attribute | +| tests.py:60:9:60:20 | ControlFlowNode for Attribute | tests.py:60:9:60:33 | ControlFlowNode for Attribute() | +| tests.py:60:9:60:33 | ControlFlowNode for Attribute() | tests.py:60:5:60:5 | ControlFlowNode for r | +| tests.py:72:5:72:5 | ControlFlowNode for r | tests.py:76:43:76:43 | ControlFlowNode for r | +| tests.py:72:9:72:15 | ControlFlowNode for request | tests.py:72:9:72:20 | ControlFlowNode for Attribute | +| tests.py:72:9:72:20 | ControlFlowNode for Attribute | tests.py:72:9:72:33 | ControlFlowNode for Attribute() | +| tests.py:72:9:72:33 | ControlFlowNode for Attribute() | tests.py:72:5:72:5 | ControlFlowNode for r | 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 | @@ -47,9 +53,21 @@ nodes | 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 | From f7c29e6bfbc3be47b2afdaf1f1c14158ffb0a19f Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Fri, 15 Mar 2024 14:21:39 +0000 Subject: [PATCH 364/430] C++: Expose some previously private classes from our models so they can be used in queries. --- .../lib/semmle/code/cpp/models/implementations/Iterator.qll | 6 +++++- .../semmle/code/cpp/models/implementations/StdContainer.qll | 4 +++- .../lib/semmle/code/cpp/models/implementations/StdMap.qll | 4 +++- 3 files changed, 11 insertions(+), 3 deletions(-) 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..2c65ac57aeb 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Iterator.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Iterator.qll @@ -438,7 +438,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 +446,11 @@ private class BeginOrEndFunction extends MemberFunction, TaintFunction, GetItera ]) and this.getType().getUnspecifiedType() instanceof Iterator } +} +private class BeginOrEndFunctionModels extends BeginOrEndFunction, TaintFunction, + GetIteratorFunction +{ override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) { input.isQualifierObject() and output.isReturnValue() 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 From 23cf99734af6ad72a0aa9f1bb83c61bdd3c3d379 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Fri, 15 Mar 2024 14:29:29 +0000 Subject: [PATCH 365/430] C++: Add a new experimental query ' cpp/iterator-to-expired-container'. --- .../CWE/CWE-416/IteratorToExpiredContainer.ql | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.ql 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..4c165d197eb --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.ql @@ -0,0 +1,89 @@ +/** + * @name Iterator to expired container + * @description Using an iterator owned by a container whose lifetimes 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<TempToDestructorConfig>; + +/** + * 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<std::vector<int>> 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<std::vector<int>>::~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` call + */ +module DestroyedToBeginConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source = getADestroyedNode() } + + predicate isSink(DataFlow::Node sink) { isSinkImpl(sink, _) } +} + +module DestroyedToBeginFlow = DataFlow::Global<DestroyedToBeginConfig>; + +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() From 8c5fff2d110a08257e03a0176b0dd4f9b75d7e40 Mon Sep 17 00:00:00 2001 From: Joe Farebrother <joefarebrother@github.com> Date: Fri, 15 Mar 2024 14:43:29 +0000 Subject: [PATCH 366/430] Update names and qldoc for params taint predicates --- .../ruby/frameworks/ActionController.qll | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll index 19dcb82cfd6..3fcb3eda5f8 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll @@ -506,8 +506,8 @@ private module ParamsSummaries { ] } - /** Gets a field of an instance of `ActionController::Parameters` */ - private DataFlow::LocalSourceNode paramsField() { + /** 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(), @@ -515,16 +515,16 @@ private module ParamsSummaries { ] } - private DataFlow::LocalSourceNode paramsFieldType(TypeTracker t) { + private DataFlow::LocalSourceNode taintFromParamsType(TypeTracker t) { t.start() and - result = paramsField() + result = taintFromParamsBase() or - exists(TypeTracker t2 | result = paramsFieldType(t2).track(t2, t)) + exists(TypeTracker t2 | result = taintFromParamsType(t2).track(t2, t)) } - /** Gets a node with a type that can be a field of `ActionController::Parameters` */ - private DataFlow::LocalSourceNode paramsFieldType() { - paramsFieldType(TypeTracker::end()).flowsTo(result) + /** Gets a node with a type that may be tainted from an `ActionController::Parameters` instance. */ + private DataFlow::LocalSourceNode taintFromParamsType() { + taintFromParamsType(TypeTracker::end()).flowsTo(result) } /** @@ -602,7 +602,7 @@ private module ParamsSummaries { override MethodCall getACall() { result = - paramsFieldType() + taintFromParamsType() .getAMethodCall(["original_filename", "content_type", "headers"]) .asExpr() .getExpr() and @@ -622,7 +622,7 @@ private module ParamsSummaries { UploadedFileReadSummary() { this = "ActionDispatch::Http::UploadedFile#read" } override MethodCall getACall() { - result = paramsFieldType().getAMethodCall("read").asExpr().getExpr() and + result = taintFromParamsType().getAMethodCall("read").asExpr().getExpr() and result.getNumberOfArguments() in [0 .. 2] } From 704f1fad462a5f672eccd9cd784cca8543b4ff19 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Fri, 15 Mar 2024 17:02:12 +0000 Subject: [PATCH 367/430] C++: Add switches as testcases for guard conditions. --- .../library-tests/controlflow/guards/test.cpp | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) 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 From 2af68d37d02d4ca391b42dfe618b569bb395ae1a Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Fri, 15 Mar 2024 15:08:39 +0000 Subject: [PATCH 368/430] C++: Include 'SwitchInstruction's as 'IRGuardCondition's. --- .../semmle/code/cpp/controlflow/IRGuards.qll | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index 0adba6c1e71..4598fb0aa3b 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -249,10 +249,10 @@ 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 @@ -302,7 +302,7 @@ class IRGuardCondition extends Instruction { this.controls(pred, testIsTrue) or succ = this.getBranchSuccessor(testIsTrue) and - branch.getCondition() = this and + branch.(ConditionalBranchInstruction).getCondition() = this and branch.getBlock() = pred } @@ -322,13 +322,13 @@ class IRGuardCondition extends Instruction { * ``` */ private IRBlock getBranchSuccessor(boolean testIsTrue) { - branch.getCondition() = this and + branch.(ConditionalBranchInstruction).getCondition() = this and ( testIsTrue = true and - result.getFirstInstruction() = branch.getTrueSuccessor() + result.getFirstInstruction() = branch.(ConditionalBranchInstruction).getTrueSuccessor() or testIsTrue = false and - result.getFirstInstruction() = branch.getFalseSuccessor() + result.getFirstInstruction() = branch.(ConditionalBranchInstruction).getFalseSuccessor() ) } @@ -476,12 +476,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 } /** From b7292fbc67e3037732f9b26ef1e87c716e71d023 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Fri, 15 Mar 2024 16:49:39 +0000 Subject: [PATCH 369/430] C++: Introduce 'AbstractValue' similar to what C# has. --- .../semmle/code/cpp/controlflow/IRGuards.qll | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index 4598fb0aa3b..83d45840e91 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. From f4eb5f5a2df063c94f08fd4e6983892dd9e2a5c2 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Fri, 15 Mar 2024 16:51:15 +0000 Subject: [PATCH 370/430] C++: Convert 'getBranchSuccessor' to use abstract values. --- .../lib/semmle/code/cpp/controlflow/IRGuards.qll | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index 83d45840e91..3566cfa58f3 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -359,15 +359,21 @@ class IRGuardCondition extends Instruction { * return x; * ``` */ - private IRBlock getBranchSuccessor(boolean testIsTrue) { + private IRBlock getBranchSuccessor(AbstractValue v) { branch.(ConditionalBranchInstruction).getCondition() = this and - ( - testIsTrue = true and + exists(BooleanValue bv | bv = v | + bv.getValue() = true and result.getFirstInstruction() = branch.(ConditionalBranchInstruction).getTrueSuccessor() or - testIsTrue = false and + 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() + ) } /** Holds if (determined by this guard) `left < right + k` evaluates to `isLessThan` if this expression evaluates to `testIsTrue`. */ From 34decd3cf17be9722fc66236c1e3da0efd093653 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Fri, 15 Mar 2024 16:53:11 +0000 Subject: [PATCH 371/430] C++: Add more general public predicates to work with abstract values. --- .../semmle/code/cpp/controlflow/IRGuards.qll | 72 +++++++++++++------ 1 file changed, 51 insertions(+), 21 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index 3566cfa58f3..2d37525de0d 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -72,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`. @@ -99,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 @@ -136,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) ) } @@ -184,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`. */ @@ -240,9 +251,9 @@ private class GuardConditionFromIR extends GuardCondition { * 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) ) @@ -319,14 +330,38 @@ class IRGuardCondition extends Instruction { * true (for `&&`) or false (for `||`) branch. */ cached - predicate controls(IRBlock controlled, boolean testIsTrue) { + 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, testIsTrue) + this.controlsBlock(controlled, v) or exists(IRGuardCondition ne | this = ne.(LogicalNotInstruction).getUnary() and - ne.controls(controlled, testIsTrue.booleanNot()) + ne.valueControls(controlled, v.getDualValue()) + ) + } + + cached + predicate controls(IRBlock controlled, boolean 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 + succ = this.getBranchSuccessor(v) and + ( + branch.(ConditionalBranchInstruction).getCondition() = this and + branch.getBlock() = pred + or + branch.(SwitchInstruction).getExpression() = this and + branch.getBlock() = pred ) } @@ -335,13 +370,8 @@ 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.(ConditionalBranchInstruction).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)) } /** @@ -440,11 +470,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 @@ -485,7 +515,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) ) From 07ebbb0591ce27eead96b4d43197db0c42a06fca Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Fri, 15 Mar 2024 17:04:27 +0000 Subject: [PATCH 372/430] C++: Accept test changes. --- cpp/ql/test/library-tests/controlflow/guards/Guards.expected | 3 +++ 1 file changed, 3 insertions(+) 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 | From fb218150e1c6e7fa2984350cbe55de5efcaa0375 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Fri, 15 Mar 2024 17:05:42 +0000 Subject: [PATCH 373/430] C++: Change the testcase so that it outputs the controlling values for switch statements as well. --- .../library-tests/controlflow/guards/GuardsControl.expected | 4 ++++ .../test/library-tests/controlflow/guards/GuardsControl.ql | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) 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 From b5e59492bfeeffbb7d22ea812776abc9b5da6af5 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Fri, 15 Mar 2024 17:17:05 +0000 Subject: [PATCH 374/430] C++: Add change note. --- .../change-notes/2024-03-15-switches-in-guard-conditions.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2024-03-15-switches-in-guard-conditions.md 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 From f4f417c3f969e1981976c6b32175019e88d8b934 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Fri, 15 Mar 2024 17:19:36 +0000 Subject: [PATCH 375/430] C++: Fix QLoc. --- .../semmle/code/cpp/controlflow/IRGuards.qll | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index 2d37525de0d..e7762fc9fa8 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -247,7 +247,7 @@ 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`. */ @@ -303,6 +303,24 @@ class IRGuardCondition extends Instruction { cached 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 * entered if the value of this condition is `testIsTrue`. @@ -329,18 +347,6 @@ class IRGuardCondition extends Instruction { * being short-circuited) then it will only control blocks dominated by the * true (for `&&`) or false (for `||`) branch. */ - 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()) - ) - } - cached predicate controls(IRBlock controlled, boolean testIsTrue) { this.valueControls(controlled, any(BooleanValue bv | bv.getValue() = testIsTrue)) @@ -375,7 +381,7 @@ class IRGuardCondition extends Instruction { } /** - * 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 From 3a8db49573f6ff79bbb55bc98aafab7b5bd68ef1 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Fri, 15 Mar 2024 14:29:47 +0000 Subject: [PATCH 376/430] C++: Add tests for 'cpp/iterator-to-expired-container'. NOTE: This is with the yet-to-be-merged changes to the extractor and IR generation. --- .../IteratorToExpiredContainer.expected | 10 + .../CWE-416/IteratorToExpiredContainer.qlref | 1 + .../query-tests/Security/CWE/CWE-416/test.cpp | 719 ++++++++++++++++++ 3 files changed, 730 insertions(+) create mode 100644 cpp/ql/test/experimental/query-tests/Security/CWE/CWE-416/IteratorToExpiredContainer.expected create mode 100644 cpp/ql/test/experimental/query-tests/Security/CWE/CWE-416/IteratorToExpiredContainer.qlref create mode 100644 cpp/ql/test/experimental/query-tests/Security/CWE/CWE-416/test.cpp 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..39588f865be --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-416/IteratorToExpiredContainer.expected @@ -0,0 +1,10 @@ +| test.cpp:680:30:680:30 | call to operator[] | This object is destroyed before $@ is called. | test.cpp:680:17:680:17 | call to begin | call to begin | +| test.cpp:680:30:680:30 | call to operator[] | This object is destroyed before $@ is called. | test.cpp:680:17:680:17 | call to end | call to end | +| test.cpp:683:31:683:32 | call to at | This object is destroyed before $@ is called. | test.cpp:683:17:683:17 | call to begin | call to begin | +| test.cpp:683:31:683:32 | call to at | This object is destroyed before $@ is called. | test.cpp:683:17:683:17 | call to end | call to end | +| test.cpp:689:16:689:28 | temporary object | This object is destroyed before $@ is called. | test.cpp:689:30:689:34 | call to begin | call to begin | +| test.cpp:689:45:689:57 | temporary object | This object is destroyed before $@ is called. | test.cpp:689:59:689:61 | call to end | call to end | +| test.cpp:702:26:702:26 | call to operator[] | This object is destroyed before $@ is called. | test.cpp:703:18:703:22 | call to begin | call to begin | +| test.cpp:702:26:702:26 | call to operator[] | This object is destroyed before $@ is called. | test.cpp:703:35:703:37 | call to end | call to end | +| test.cpp:716:35:716:47 | temporary object | This object is destroyed before $@ is called. | test.cpp:716:16:716:16 | call to begin | call to begin | +| test.cpp:716:35:716:47 | temporary object | This object is destroyed before $@ is called. | test.cpp:716:16:716:16 | call to end | call to end | 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..c035fe203a8 --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-416/test.cpp @@ -0,0 +1,719 @@ + +typedef unsigned long size_t; + +template<class T> +struct remove_const { typedef T type; }; + +template<class T> +struct remove_const<const T> { typedef T type; }; + +// `remove_const_t<T>` removes any `const` specifier from `T` +template<class T> +using remove_const_t = typename remove_const<T>::type; + +template<class T> +struct remove_reference { typedef T type; }; + +template<class T> +struct remove_reference<T &> { typedef T type; }; + +template<class T> +struct remove_reference<T &&> { typedef T type; }; + +// `remove_reference_t<T>` removes any `&` from `T` +template<class T> +using remove_reference_t = typename remove_reference<T>::type; + +template<class T> +struct decay_impl { + typedef T type; +}; + +template<class T, size_t t_size> +struct decay_impl<T[t_size]> { + typedef T* type; +}; + +template<class T> +using decay_t = typename decay_impl<remove_reference_t<T>>::type; + + +namespace std +{ + template<class T> constexpr T&& forward(remove_reference_t<T>& t) noexcept; + template<class T> constexpr T&& forward(remove_reference_t<T>&& t) noexcept; +} + +// --- iterator --- + +namespace std { + struct ptrdiff_t; + + template<class I> struct iterator_traits; + + template <class Category, + class value_type, + class difference_type = ptrdiff_t, + class pointer_type = value_type*, + class reference_type = value_type&> + struct iterator { + typedef Category iterator_category; + + iterator(); + iterator(iterator<Category, remove_const_t<value_type> > 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 Container> + 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<class Container> + constexpr back_insert_iterator<Container> back_inserter(Container& x) { + return back_insert_iterator<Container>(x); + } + + template<class Container> + 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<class Container> + constexpr front_insert_iterator<Container> front_inserter(Container& x) { + return front_insert_iterator<Container>(x); + } +} + +// --- string --- + +namespace std +{ + template<class charT> struct char_traits; + + typedef size_t streamsize; + + template <class T> class allocator { + public: + allocator() throw(); + typedef size_t size_type; + }; + + template<class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> > + 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<class InputIterator> 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<random_access_iterator_tag, charT> iterator; + typedef std::iterator<random_access_iterator_tag, const charT> 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<class T> 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<class InputIterator> basic_string& append(InputIterator first, InputIterator last); + basic_string& assign(const basic_string& str); + basic_string& assign(size_type n, charT c); + template<class InputIterator> 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<class InputIterator> 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<Allocator>::propagate_on_container_swap::value || allocator_traits<Allocator>::is_always_equal::value)*/; + }; + + template<class charT, class traits, class Allocator> basic_string<charT, traits, Allocator> operator+(const basic_string<charT, traits, Allocator>& lhs, const basic_string<charT, traits, Allocator>& rhs); + template<class charT, class traits, class Allocator> basic_string<charT, traits, Allocator> operator+(const basic_string<charT, traits, Allocator>& lhs, const charT* rhs); + + typedef basic_string<char> string; +} + +// --- istring / ostream / stringstream --- + +namespace std +{ + template <class charT, class traits = char_traits<charT> > + class basic_istream /*: virtual public basic_ios<charT,traits> - not needed for this test */ { + public: + using char_type = charT; + using int_type = int; //typename traits::int_type; + + basic_istream<charT, traits>& operator>>(int& n); + + int_type get(); + basic_istream<charT, traits>& get(char_type& c); + basic_istream<charT, traits>& get(char_type* s, streamsize n); + int_type peek(); + basic_istream<charT, traits>& read (char_type* s, streamsize n); + streamsize readsome(char_type* s, streamsize n); + basic_istream<charT, traits>& putback(char_type c); + basic_istream<charT,traits>& unget(); + + basic_istream<charT,traits>& getline(char_type* s, streamsize n); + basic_istream<charT,traits>& getline(char_type* s, streamsize n, char_type delim); + }; + + template<class charT, class traits> basic_istream<charT, traits>& operator>>(basic_istream<charT, traits>&, charT*); + template<class charT, class traits, class Allocator> basic_istream<charT, traits>& operator>>(basic_istream<charT, traits>& is, basic_string<charT, traits, Allocator>& str); + + template<class charT, class traits, class Allocator> basic_istream<charT,traits>& getline(basic_istream<charT,traits>& is, basic_string<charT,traits,Allocator>& str, charT delim); + template<class charT, class traits, class Allocator> basic_istream<charT,traits>& getline(basic_istream<charT,traits>& is, basic_string<charT,traits,Allocator>& str); + + template <class charT, class traits = char_traits<charT> > + class basic_ostream /*: virtual public basic_ios<charT,traits> - not needed for this test */ { + public: + typedef charT char_type; + + basic_ostream<charT, traits>& operator<<(int n); + + basic_ostream<charT, traits>& put(char_type c); + basic_ostream<charT, traits>& write(const char_type* s, streamsize n); + basic_ostream<charT,traits>& flush(); + }; + + template<class charT, class traits> basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, const charT*); + template<class charT, class traits, class Allocator> basic_ostream<charT, traits>& operator<<(basic_ostream<charT, traits>& os, const basic_string<charT, traits, Allocator>& str); + + template<class charT, class traits = char_traits<charT>> + class basic_iostream : public basic_istream<charT, traits>, public basic_ostream<charT, traits> { + public: + }; + + template<class charT, class traits = char_traits<charT>, class Allocator = allocator<charT>> + class basic_stringstream : public basic_iostream<charT, traits> { + 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<charT, traits, Allocator>& 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<charT, traits, Allocator> str() const; + void str(const basic_string<charT, traits, Allocator>& str); + }; + + typedef basic_istream<char> istream; + typedef basic_ostream<char> ostream; + extern istream cin; + extern ostream cout; + + using stringstream = basic_stringstream<char>; +} + +// --- vector --- + +namespace std { + template<class T, class Allocator = allocator<T>> + 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<random_access_iterator_tag, T>; + using const_iterator = std::iterator<random_access_iterator_tag, const T>; + + vector() noexcept(noexcept(Allocator())); + vector(const std::vector<T, Allocator>&); + explicit vector(const Allocator&) noexcept; + explicit vector(size_type n, const Allocator& = Allocator()); + vector(size_type n, const T& value, const Allocator& = Allocator()); + template<class InputIterator, class IteratorCategory = typename InputIterator::iterator_category> 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<Allocator>::propagate_on_container_move_assignment::value || allocator_traits<Allocator>::is_always_equal::value)*/; + template<class InputIterator, class IteratorCategory = typename InputIterator::iterator_category> 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<class InputIterator> iterator insert(const_iterator position, InputIterator first, InputIterator last); + + template <class... Args> iterator emplace (const_iterator position, Args&&... args); + template <class... Args> void emplace_back (Args&&... args); + + void swap(vector&) noexcept/*(allocator_traits<Allocator>::propagate_on_container_swap::value || allocator_traits<Allocator>::is_always_equal::value)*/; + + void clear() noexcept; + }; +} + +// --- make_shared / make_unique --- + +namespace std { + template<typename T> + class shared_ptr { + public: + shared_ptr() noexcept; + explicit shared_ptr(T*); + shared_ptr(const shared_ptr&) noexcept; + template<class U> shared_ptr(const shared_ptr<U>&) noexcept; + template<class U> shared_ptr(shared_ptr<U>&&) noexcept; + + shared_ptr<T>& operator=(const shared_ptr<T>&) noexcept; + shared_ptr<T>& operator=(shared_ptr<T>&&) noexcept; + + T& operator*() const noexcept; + T* operator->() const noexcept; + + T* get() const noexcept; + }; + + template<typename T> + class unique_ptr { + public: + constexpr unique_ptr() noexcept; + explicit unique_ptr(T*) noexcept; + unique_ptr(unique_ptr<T>&&) noexcept; + + unique_ptr<T>& operator=(unique_ptr<T>&&) noexcept; + + T& operator*() const; + T* operator->() const noexcept; + + T* get() const noexcept; + }; + + template<typename T, class... Args> unique_ptr<T> make_unique(Args&&...); + + template<typename T, class... Args> shared_ptr<T> make_shared(Args&&...); +} + +// --- pair --- + +namespace std { + template <class T1, class T2> + struct pair { + typedef T1 first_type; + typedef T2 second_type; + + T1 first; + T2 second; + pair(); + pair(const T1& x, const T2& y); + template<class U, class V> pair(const pair<U, V> &p); + + void swap(pair& p) /*noexcept(...)*/; + }; + + template<class T1, class T2> constexpr pair<decay_t<T1>, decay_t<T2>> make_pair(T1&& x, T2&& y) { + return pair<decay_t<T1>, decay_t<T2>>(std::forward<T1>(x), std::forward<T2>(y)); + } +} + +// --- map --- + +namespace std { + template<class T = void> struct less; + + template<class Key, class T, class Compare = less<Key>, class Allocator = allocator<pair<const Key, T>>> + class map { + public: + using key_type = Key; + using mapped_type = T; + using value_type = pair<const Key, T>; + using iterator = std::iterator<random_access_iterator_tag, value_type >; + using const_iterator = std::iterator<random_access_iterator_tag, const value_type >; + + map(); + map(const map& x); + map(map&& x); + ~map(); + + map& operator=(const map& x); + map& operator=(map&& x) /*noexcept(allocator_traits<Allocator>::is_always_equal::value && is_nothrow_move_assignable_v<Compare>)*/; + + 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<class... Args> pair<iterator, bool> emplace(Args&&... args); + template<class... Args> iterator emplace_hint(const_iterator position, Args&&... args); + + pair<iterator, bool> insert(const value_type& x); + pair<iterator, bool> insert(value_type&& x); + iterator insert(const_iterator position, const value_type& x); + iterator insert(const_iterator position, value_type&& x); + + template<class... Args> pair<iterator, bool> try_emplace(const key_type& k, Args&&... args); + template<class... Args> pair<iterator, bool> try_emplace(key_type&& k, Args&&... args); + template<class... Args> iterator try_emplace(const_iterator hint, const key_type& k, Args&&... args); + template<class... Args> iterator try_emplace(const_iterator hint, key_type&& k, Args&&... args); + template<class M> pair<iterator, bool> insert_or_assign(const key_type& k, M&& obj); + template<class M> pair<iterator, bool> insert_or_assign(key_type&& k, M&& obj); + template<class M> iterator insert_or_assign(const_iterator hint, const key_type& k, M&& obj); + template<class M> 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<Allocator>::is_always_equal::value && is_nothrow_swappable_v<Compare>)*/; + void clear() noexcept; + + template<class C2> void merge(map<Key, T, C2, Allocator>& source); + template<class C2> void merge(map<Key, T, C2, Allocator>&& 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<iterator, iterator> equal_range(const key_type& x); + pair<const_iterator, const_iterator> equal_range(const key_type& x) const; + }; + + template<class T> struct hash; + template<class T = void> struct equal_to; + + template<class Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>, class Allocator = allocator<pair<const Key, T>>> + class unordered_map { + public: + using key_type = Key; + using mapped_type = T; + using value_type = pair<const Key, T>; + using iterator = std::iterator<random_access_iterator_tag, value_type >; + using const_iterator = std::iterator<random_access_iterator_tag, const value_type >; + + 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<Allocator>::is_always_equal::value && is_nothrow_move_assignable_v<Hash> && is_nothrow_move_assignable_v<Pred>)*/; + + 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<class... Args> pair<iterator, bool> emplace(Args&&... args); + template<class... Args> iterator emplace_hint(const_iterator position, Args&&... args); + + pair<iterator, bool> insert(const value_type& obj); + pair<iterator, bool> insert(value_type&& obj); + iterator insert(const_iterator hint, const value_type& obj); + iterator insert(const_iterator hint, value_type&& obj); + + template<class... Args> pair<iterator, bool> try_emplace(const key_type& k, Args&&... args); + template<class... Args> pair<iterator, bool> try_emplace(key_type&& k, Args&&... args); + template<class... Args> iterator try_emplace(const_iterator hint, const key_type& k, Args&&... args); + template<class... Args> iterator try_emplace(const_iterator hint, key_type&& k, Args&&... args); + template<class M> pair<iterator, bool> insert_or_assign(const key_type& k, M&& obj); + template<class M> pair<iterator, bool> insert_or_assign(key_type&& k, M&& obj); + template<class M> iterator insert_or_assign(const_iterator hint, const key_type& k, M&& obj); + template<class M> 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<Allocator>::is_always_equal::value && is_nothrow_swappable_v<Hash> && is_nothrow_swappable_v<Pred>)*/; + void clear() noexcept; + + template<class H2, class P2> void merge(unordered_map<Key, T, H2, P2, Allocator>& source); + template<class H2, class P2> void merge(unordered_map<Key, T, H2, P2, Allocator>&& source); + + iterator find(const key_type& k); + const_iterator find(const key_type& k) const; + + pair<iterator, iterator> equal_range(const key_type& k); + pair<const_iterator, const_iterator> equal_range(const key_type& k) const; + }; +}; + +// --- set --- + +namespace std { + template<class Key, class Compare = less<Key>, class Allocator = allocator<Key>> + class set { + public: + using key_type = Key; + using value_type = Key; + using size_type = size_t; + using allocator_type = Allocator; + using iterator = std::iterator<random_access_iterator_tag, value_type >; + using const_iterator = std::iterator<random_access_iterator_tag, const value_type >; + + set(); + set(const set& x); + set(set&& x); + template<class InputIterator> 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<Allocator>::is_always_equal::value && is_nothrow_move_assignable_v<Compare>)*/; + + iterator begin() noexcept; + const_iterator begin() const noexcept; + iterator end() noexcept; + const_iterator end() const noexcept; + + template<class... Args> pair<iterator, bool> emplace(Args&&... args); + template<class... Args> iterator emplace_hint(const_iterator position, Args&&... args); + pair<iterator,bool> insert(const value_type& x); + pair<iterator,bool> insert(value_type&& x); + iterator insert(const_iterator position, const value_type& x); + iterator insert(const_iterator position, value_type&& x); + template<class InputIterator> 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<Allocator>::is_always_equal::value && is_nothrow_swappable_v<Compare>)*/; + void clear() noexcept; + + template<class C2> void merge(set<Key, C2, Allocator>& source); + template<class C2> void merge(set<Key, C2, Allocator>&& 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<iterator, iterator> equal_range(const key_type& x); + pair<const_iterator, const_iterator> equal_range(const key_type& x) const; + }; + + template<class Key, class Hash = hash<Key>, class Pred = equal_to<Key>, class Allocator = allocator<Key>> + 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<random_access_iterator_tag, value_type >; + using const_iterator = std::iterator<random_access_iterator_tag, const value_type >; + + unordered_set(); + unordered_set(const unordered_set&); + unordered_set(unordered_set&&); + template<class InputIterator> 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<Allocator>::is_always_equal::value && is_nothrow_move_assignable_v<Hash> && is_nothrow_move_assignable_v<Pred>)*/; + + iterator begin() noexcept; + const_iterator begin() const noexcept; + iterator end() noexcept; + const_iterator end() const noexcept; + + template<class... Args> pair<iterator, bool> emplace(Args&&... args); + template<class... Args> iterator emplace_hint(const_iterator position, Args&&... args); + pair<iterator, bool> insert(const value_type& obj); + pair<iterator, bool> insert(value_type&& obj); + iterator insert(const_iterator hint, const value_type& obj); + iterator insert(const_iterator hint, value_type&& obj); + template<class InputIterator> 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<Allocator>::is_always_equal::value && is_nothrow_swappable_v<Hash> && is_nothrow_swappable_v<Pred>)*/; + void clear() noexcept; + + template<class H2, class P2> void merge(unordered_set<Key, H2, P2, Allocator>& source); + template<class H2, class P2> void merge(unordered_set<Key, H2, P2, Allocator>&& source); + + iterator find(const key_type& k); + const_iterator find(const key_type& k) const; + pair<iterator, iterator> equal_range(const key_type& k); + pair<const_iterator, const_iterator> equal_range(const key_type& k) const; + }; +} + +std::vector<std::vector<int>> returnValue(); +std::vector<std::vector<int>>& returnRef(); + +std::vector<std::vector<int>> external_by_value(std::vector<std::vector<int>>); + +std::vector<std::vector<int>> external_by_const_ref(const std::vector<std::vector<int>>&); + +// *: Will be detected once extract destruction of unnamed temporaries and generate IR for them + +const std::vector<std::vector<int>>& return_self_by_ref(const std::vector<std::vector<int>>& v) { + return v; +} + +std::vector<std::vector<int>> return_self_by_value(const std::vector<std::vector<int>>& 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 +} From a8718f99a1965fdadbc093088aa08428168cb17e Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Fri, 15 Mar 2024 14:32:20 +0000 Subject: [PATCH 377/430] C++: Add qhelp for 'cpp/iterator-to-expired-container'. --- .../CWE-416/IteratorToExpiredContainer.qhelp | 53 +++++++++++++++++++ ...atorToExpiredContainerExtendedLifetime.cpp | 20 +++++++ 2 files changed, 73 insertions(+) create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.qhelp create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainerExtendedLifetime.cpp 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 @@ +<!DOCTYPE qhelp PUBLIC + "-//Semmle//qhelp//EN" + "qhelp.dtd"> +<qhelp> +<overview> +<p> +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. +</p> + +</overview> +<recommendation> + +<p> +Never create an iterator to a temporary container when the iterator is expected to be used after the container's lifetime has expired. +</p> + +</recommendation> +<example> +<p> + +</p> + +<p> +The rules for lifetime extension ensures that the code in <code>lifetime_of_temp_extended</code> is well-defined. This is because the +lifetime of the temporary container returned by <code>get_vector</code> 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 <code>get_vector</code> is extended in <code>lifetime_of_temp_not_extended</code>. +This is because the temporary container is not bound to a rvalue reference. +</p> +<sample src="IteratorToExpiredContainerExtendedLifetime.cpp" /> + +</example> +<references> + +<li>CERT C Coding Standard: +<a href="https://wiki.sei.cmu.edu/confluence/display/c/MEM30-C.+Do+not+access+freed+memory">MEM30-C. Do not access freed memory</a>.</li> +<li> +OWASP: +<a href="https://owasp.org/www-community/vulnerabilities/Using_freed_memory">Using freed memory</a>. +</li> +<li> +<a href="https://github.com/isocpp/CppCoreGuidelines/blob/master/docs/Lifetime.pdf">Lifetime safety: Preventing common dangling</a> +</li> +<li> +<a href="https://en.cppreference.com/w/cpp/container">Containers library</a> +</li> +<li> +<a href="https://en.cppreference.com/w/cpp/language/range-for">Range-based for loop (since C++11)</a> +</li> + +</references> +</qhelp> 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 <vector> + +std::vector<int> 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<int>& log_and_return_argument(const std::vector<int>& 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. + } +} From e23e3d7fb43192e3e24fd4cf36fc4fd8c141de57 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Fri, 15 Mar 2024 17:35:01 +0000 Subject: [PATCH 378/430] C++: Run tests without the extractor and analysis changes. --- .../CWE/CWE-416/IteratorToExpiredContainer.expected | 10 ---------- 1 file changed, 10 deletions(-) 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 index 39588f865be..e69de29bb2d 100644 --- 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 @@ -1,10 +0,0 @@ -| test.cpp:680:30:680:30 | call to operator[] | This object is destroyed before $@ is called. | test.cpp:680:17:680:17 | call to begin | call to begin | -| test.cpp:680:30:680:30 | call to operator[] | This object is destroyed before $@ is called. | test.cpp:680:17:680:17 | call to end | call to end | -| test.cpp:683:31:683:32 | call to at | This object is destroyed before $@ is called. | test.cpp:683:17:683:17 | call to begin | call to begin | -| test.cpp:683:31:683:32 | call to at | This object is destroyed before $@ is called. | test.cpp:683:17:683:17 | call to end | call to end | -| test.cpp:689:16:689:28 | temporary object | This object is destroyed before $@ is called. | test.cpp:689:30:689:34 | call to begin | call to begin | -| test.cpp:689:45:689:57 | temporary object | This object is destroyed before $@ is called. | test.cpp:689:59:689:61 | call to end | call to end | -| test.cpp:702:26:702:26 | call to operator[] | This object is destroyed before $@ is called. | test.cpp:703:18:703:22 | call to begin | call to begin | -| test.cpp:702:26:702:26 | call to operator[] | This object is destroyed before $@ is called. | test.cpp:703:35:703:37 | call to end | call to end | -| test.cpp:716:35:716:47 | temporary object | This object is destroyed before $@ is called. | test.cpp:716:16:716:16 | call to begin | call to begin | -| test.cpp:716:35:716:47 | temporary object | This object is destroyed before $@ is called. | test.cpp:716:16:716:16 | call to end | call to end | From f4542f6160acc8880b8658e6ba5c20d965741844 Mon Sep 17 00:00:00 2001 From: Ian Lynagh <igfoo@github.com> Date: Fri, 15 Mar 2024 18:02:54 +0000 Subject: [PATCH 379/430] Kotlin2 : Accept some more location changes --- .../library-tests/exprs/exprs.expected | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index aa19916593a..68410f57ce4 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -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 | @@ -68,41 +68,41 @@ | 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 | From 354cdf44aa3d3dc5f141fb7042685edd7bc2b947 Mon Sep 17 00:00:00 2001 From: Ian Lynagh <igfoo@github.com> Date: Fri, 15 Mar 2024 18:03:55 +0000 Subject: [PATCH 380/430] Kotlin 2: Accept more location changes --- .../library-tests/exprs/exprs.expected | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 68410f57ce4..399591bce60 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -112,21 +112,21 @@ | 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 | From 28f98d0344a8ba59827bcf09ca21369bdc9f594e Mon Sep 17 00:00:00 2001 From: Ian Lynagh <igfoo@github.com> Date: Fri, 15 Mar 2024 18:04:28 +0000 Subject: [PATCH 381/430] Kotlin 2: Accept more location changes --- .../library-tests/exprs/exprs.expected | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 399591bce60..ed344e03504 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -161,18 +161,18 @@ | 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 | From 5552fe3c34e76de666f1d8eb08c0ea591b8e413f Mon Sep 17 00:00:00 2001 From: Ian Lynagh <igfoo@github.com> Date: Fri, 15 Mar 2024 18:05:09 +0000 Subject: [PATCH 382/430] Kotlin 2: Accept more loc changes --- .../library-tests/exprs/exprs.expected | 66 +++++++++---------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index ed344e03504..43a21a55a8b 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -176,42 +176,42 @@ | 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 | From 1d2b31f0be3c1c35ec8a50321c6b131ea893ac7d Mon Sep 17 00:00:00 2001 From: Ian Lynagh <igfoo@github.com> Date: Fri, 15 Mar 2024 18:05:46 +0000 Subject: [PATCH 383/430] Kotlin 2: Accept more loc changes --- .../library-tests/exprs/exprs.expected | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 43a21a55a8b..48d886b6253 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -219,27 +219,27 @@ | 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 | From 5580daf60e13244248465d23b9f53d7e425de204 Mon Sep 17 00:00:00 2001 From: Ian Lynagh <igfoo@github.com> Date: Fri, 15 Mar 2024 18:06:13 +0000 Subject: [PATCH 384/430] Kotlin 2: Accept more loc changes --- .../library-tests/exprs/exprs.expected | 78 +++++++++---------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 48d886b6253..791879f23cc 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -9,8 +9,8 @@ | 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: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: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 | @@ -242,43 +242,43 @@ | 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 | From 6c0885c24d3575cce5ebc9be38787366f1a37dd5 Mon Sep 17 00:00:00 2001 From: Ian Lynagh <igfoo@github.com> Date: Fri, 15 Mar 2024 18:06:45 +0000 Subject: [PATCH 385/430] Kotlin 2: Accept more loc changes --- .../library-tests/exprs/exprs.expected | 88 +++++++++---------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 791879f23cc..b9be9434b75 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -11,8 +11,8 @@ | 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: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: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: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: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 | @@ -350,53 +350,53 @@ | 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:14:65:78 | 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:14:65:78 | 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:14:65:78 | 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: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 | <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 | From 57d17d85f2cb8799d4440337cac9268fef9f4391 Mon Sep 17 00:00:00 2001 From: Ian Lynagh <igfoo@github.com> Date: Fri, 15 Mar 2024 18:07:12 +0000 Subject: [PATCH 386/430] Kotlin 2: Accept more loc changes --- .../library-tests/exprs/exprs.expected | 94 +++++++++---------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index b9be9434b75..dd21cf994a4 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -13,8 +13,8 @@ | 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: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: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: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 | @@ -411,52 +411,52 @@ | 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:14:65:78 | 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:14:65:78 | 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: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:33:67:53 | setDelegatedToMember2 | VarAccess | +| 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 | From c4c843968e4565d8fa2898c654bc6dd78b3c8972 Mon Sep 17 00:00:00 2001 From: Ian Lynagh <igfoo@github.com> Date: Fri, 15 Mar 2024 18:07:39 +0000 Subject: [PATCH 387/430] Kotlin 2: Accept more loc changes --- .../library-tests/exprs/exprs.expected | 88 +++++++++---------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index dd21cf994a4..edfa0c3df9b 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -15,8 +15,8 @@ | 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: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: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: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:72:36:72:56 | getDelegatedToBaseClass1 | ThisAccess | @@ -468,53 +468,53 @@ | 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:14:65:78 | 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:14:65:78 | 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: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:14:65:78 | MyClass | TypeAccess | From a53d5d832d4b52142a1fd57fdd2091ad1bcf54e0 Mon Sep 17 00:00:00 2001 From: Ian Lynagh <igfoo@github.com> Date: Fri, 15 Mar 2024 18:08:53 +0000 Subject: [PATCH 388/430] Kotlin 2: Accept more loc changes --- .../library-tests/exprs/exprs.expected | 138 +++++++++--------- 1 file changed, 69 insertions(+), 69 deletions(-) diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index edfa0c3df9b..13dfc71b6c3 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -17,10 +17,10 @@ | 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: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: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 | @@ -531,52 +531,52 @@ | 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:14:65:78 | 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:14:65:78 | 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: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:36:70:59 | setDelegatedToExtMember2 | VarAccess | +| 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:14:65:78 | MyClass | TypeAccess | @@ -624,27 +624,27 @@ | 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:14:65:78 | 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:14:65:78 | 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: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 | From 754d4cd95905f3e0f0cb548ca12091ec5b0f51dd Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan <owen-mc@github.com> Date: Sun, 17 Mar 2024 14:36:47 +0000 Subject: [PATCH 389/430] Fix model provenance to df-manual --- java/ql/lib/ext/java.lang.model.yml | 16 +++++++------- java/ql/lib/ext/javax.crypto.model.yml | 30 +++++++++++++------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/java/ql/lib/ext/java.lang.model.yml b/java/ql/lib/ext/java.lang.model.yml index 0569b4c209c..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: diff --git a/java/ql/lib/ext/javax.crypto.model.yml b/java/ql/lib/ext/javax.crypto.model.yml index 53b54f1a22d..ecd44af5b56 100644 --- a/java/ql/lib/ext/javax.crypto.model.yml +++ b/java/ql/lib/ext/javax.crypto.model.yml @@ -11,18 +11,18 @@ extensions: pack: codeql/java-all extensible: neutralModel data: - - ["javax.crypto", "Cipher", "doFinal", "", "summary", "manual"] - - ["javax.crypto", "Cipher", "getAlgorithm", "", "summary", "manual"] - - ["javax.crypto", "Cipher", "getExemptionMechanism", "", "summary", "manual"] - - ["javax.crypto", "Cipher", "getInstance", "", "summary", "manual"] - - ["javax.crypto", "Cipher", "getIV", "", "summary", "manual"] - - ["javax.crypto", "Cipher", "getParameters", "", "summary", "manual"] - - ["javax.crypto", "Cipher", "getProvider", "", "summary", "manual"] - - ["javax.crypto", "Cipher", "init", "", "summary", "manual"] - - ["javax.crypto", "Cipher", "toString", "", "summary", "manual"] - - ["javax.crypto", "Cipher", "unwrap", "", "summary", "manual"] - - ["javax.crypto", "Cipher", "update", "", "summary", "manual"] - - ["javax.crypto", "Cipher", "updateAAD", "", "summary", "manual"] - - ["javax.crypto", "Cipher", "wrap", "", "summary", "manual"] - - ["javax.crypto", "Mac", "init", "(Key)", "summary", "df-manual"] - - ["javax.crypto", "Mac", "doFinal", "()", "summary", "df-manual"] + - ["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-df-manual"] + - ["javax.crypto", "Mac", "doFinal", "()", "summary", "df-df-manual"] From a810165e3576de8e3937db24c7de6173d4a3561e Mon Sep 17 00:00:00 2001 From: Arthur Baars <aibaars@github.com> Date: Mon, 18 Mar 2024 10:55:18 +0100 Subject: [PATCH 390/430] Fix minor formatting issues in changenotes --- .../src/change-notes/2024-03-11-remove-stored-query-variants.md | 2 +- ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md | 2 +- ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) 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 index f86836b1219..3ca0b14f7b2 100644 --- 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 @@ -1,5 +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. +* 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/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-29-i18n-translate.md b/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md index f08bd54efa2..42275fcee7d 100644 --- a/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md +++ b/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md @@ -1,4 +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. \ No newline at end of file +* 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. From 3a8d4689838bf2acb031a7056ab4c221c50834b0 Mon Sep 17 00:00:00 2001 From: Tamas Vajk <tamasvajk@github.com> Date: Mon, 18 Mar 2024 11:02:29 +0100 Subject: [PATCH 391/430] C#: Add logging for source file parsing --- .../Semmle.Extraction.CSharp/Extractor/Extractor.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs index 68d077b15e6..22a55849a02 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs @@ -284,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) { From 881c42663150ae4b2598a063b916f71d114e8c45 Mon Sep 17 00:00:00 2001 From: Tamas Vajk <tamasvajk@github.com> Date: Mon, 18 Mar 2024 11:03:12 +0100 Subject: [PATCH 392/430] C#: Iterate text files only once --- .../DependencyManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index f4ae77c3d33..c4c901a3cc4 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -65,7 +65,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching var allFiles = GetAllFiles().ToList(); var binaryFileExtensions = new HashSet<string>(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(); From 51db2b0bc4a6f6fbe25cc2f75a1a529a389462ac Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Mon, 18 Mar 2024 10:11:37 +0000 Subject: [PATCH 393/430] C++: Convert tabs to spaces in ir.cpp. --- cpp/ql/test/library-tests/ir/ir/ir.cpp | 74 +++++++++++++------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index 01d6b268102..eb31d8cc070 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -1057,52 +1057,52 @@ void Lambda(int x, const String& s) { namespace std { template<class T> - struct remove_const { typedef T type; }; + struct remove_const { typedef T type; }; - template<class T> - struct remove_const<const T> { typedef T type; }; + template<class T> + struct remove_const<const T> { typedef T type; }; - // `remove_const_t<T>` removes any `const` specifier from `T` - template<class T> - using remove_const_t = typename remove_const<T>::type; + // `remove_const_t<T>` removes any `const` specifier from `T` + template<class T> + using remove_const_t = typename remove_const<T>::type; struct ptrdiff_t; - template<class I> struct iterator_traits; + template<class I> struct iterator_traits; - template <class Category, - class value_type, - class difference_type = ptrdiff_t, - class pointer_type = value_type*, - class reference_type = value_type&> - struct iterator { - typedef Category iterator_category; + template <class Category, + class value_type, + class difference_type = ptrdiff_t, + class pointer_type = value_type*, + class reference_type = value_type&> + struct iterator { + typedef Category iterator_category; - iterator(); - iterator(iterator<Category, remove_const_t<value_type> > const &other); // non-const -> const conversion constructor + iterator(); + iterator(iterator<Category, remove_const_t<value_type> > 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); - }; + 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 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 {}; + struct output_iterator_tag {}; template<typename T> struct vector { @@ -1110,7 +1110,7 @@ namespace std { ~vector(); using iterator = std::iterator<random_access_iterator_tag, T>; - using const_iterator = std::iterator<random_access_iterator_tag, const T>; + using const_iterator = std::iterator<random_access_iterator_tag, const T>; iterator begin() const; iterator end() const; From 0be329dbdccc742fbd40317c4cf20c612faa37c6 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Mon, 18 Mar 2024 10:33:40 +0000 Subject: [PATCH 394/430] C++: Delete duplicated code. --- cpp/ql/test/library-tests/ir/ir/ir.cpp | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index eb31d8cc070..492f8c71c11 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -2378,18 +2378,4 @@ namespace return_routine_type { } - -using size_t = decltype(sizeof(0)); - -template<class T> -struct remove_const { typedef T type; }; - -template<class T> -struct remove_const<const T> { typedef T type; }; - -// `remove_const_t<T>` removes any `const` specifier from `T` -template<class T> -using remove_const_t = typename remove_const<T>::type; - - // semmle-extractor-options: -std=c++20 --clang From 7fb05f4a762e2d1d2844096fc90911a376f9ee6e Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan <owen-mc@github.com> Date: Mon, 18 Mar 2024 11:17:55 +0000 Subject: [PATCH 395/430] Fix duplicate "df-" in "df-df-manual" --- java/ql/lib/ext/javax.crypto.model.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/ext/javax.crypto.model.yml b/java/ql/lib/ext/javax.crypto.model.yml index ecd44af5b56..2b3bfc1abe8 100644 --- a/java/ql/lib/ext/javax.crypto.model.yml +++ b/java/ql/lib/ext/javax.crypto.model.yml @@ -24,5 +24,5 @@ extensions: - ["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-df-manual"] - - ["javax.crypto", "Mac", "doFinal", "()", "summary", "df-df-manual"] + - ["javax.crypto", "Mac", "init", "(Key)", "summary", "df-manual"] + - ["javax.crypto", "Mac", "doFinal", "()", "summary", "df-manual"] From 457d71d7bce302ae546a2d3465601f0c92c544c0 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Mon, 18 Mar 2024 12:01:44 +0000 Subject: [PATCH 396/430] Update cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.ql Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- .../Security/CWE/CWE-416/IteratorToExpiredContainer.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.ql b/cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.ql index 4c165d197eb..ee4c1584e5c 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.ql @@ -74,7 +74,7 @@ predicate isSinkImpl(DataFlow::Node sink, FunctionCall fc) { } /** - * Flow from any destroyed object to the qualifier of a `begin` call + * 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() } From 7b6accd33ab65117ae877cbf425d2c441e6ca15c Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Mon, 18 Mar 2024 12:01:51 +0000 Subject: [PATCH 397/430] Update cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.ql Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- .../Security/CWE/CWE-416/IteratorToExpiredContainer.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.ql b/cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.ql index ee4c1584e5c..cf3a22792fe 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.ql @@ -1,6 +1,6 @@ /** * @name Iterator to expired container - * @description Using an iterator owned by a container whose lifetimes has expired may lead to unexpected behavior. + * @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 From f9309cec0b015ea25f5e118904934a7af07f4e1e Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen <rasmuswl@github.com> Date: Tue, 12 Mar 2024 13:29:34 +0100 Subject: [PATCH 398/430] JS: Add tests before #15823 changes --- .../classes/VerifyAssertions.expected | 4 +++ .../ql/test/ApiGraphs/classes/classes.js | 21 +++++++++++++++ .../TypeTracking/TypeTracking.expected | 3 +++ .../TypeTracking/implicit-receiver.js | 27 +++++++++++++++++++ 4 files changed, 55 insertions(+) create mode 100644 javascript/ql/test/library-tests/TypeTracking/implicit-receiver.js diff --git a/javascript/ql/test/ApiGraphs/classes/VerifyAssertions.expected b/javascript/ql/test/ApiGraphs/classes/VerifyAssertions.expected index e69de29bb2d..03f159832fb 100644 --- a/javascript/ql/test/ApiGraphs/classes/VerifyAssertions.expected +++ b/javascript/ql/test/ApiGraphs/classes/VerifyAssertions.expected @@ -0,0 +1,4 @@ +| classes.js:31:28:31:122 | /* use= ... ce() */ | def moduleImport("classes").getMember("exports").getMember("MyThirdStream") has no outgoing edge labelled getInstance(); it does have outgoing edges labelled getReceiver(). | +| classes.js:33:37:33:131 | /* use= ... ce() */ | def moduleImport("classes").getMember("exports").getMember("MyThirdStream") has no outgoing edge labelled getInstance(); it does have outgoing edges labelled getReceiver(). | +| classes.js:40:28:40:112 | /* use= ... ce() */ | def moduleImport("classes").getMember("exports").getMember("bar") has no outgoing edge labelled getInstance(); it does have outgoing edges labelled getReceiver(). | +| classes.js:45:26:45:110 | /* use= ... ce() */ | def moduleImport("classes").getMember("exports").getMember("bar") has no outgoing edge labelled getInstance(); it does have outgoing edges labelled getReceiver(). | 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/TypeTracking/TypeTracking.expected b/javascript/ql/test/library-tests/TypeTracking/TypeTracking.expected index e69de29bb2d..4ae2de157b3 100644 --- a/javascript/ql/test/library-tests/TypeTracking/TypeTracking.expected +++ b/javascript/ql/test/library-tests/TypeTracking/TypeTracking.expected @@ -0,0 +1,3 @@ +| implicit-receiver.js:8:22:8:52 | // trac ... ver-obj | Failed to track implicit-receiver-obj here. | +| implicit-receiver.js:9:24:9:84 | // trac ... er-prop | Failed to track implicit-receiver-obj here. | +| implicit-receiver.js:9:24:9:84 | // trac ... er-prop | Failed to track implicit-receiver-prop here. | 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; From c82f5dad567e2bb5cb10e7ed784bb690fe3b96d6 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen <rasmuswl@github.com> Date: Tue, 12 Mar 2024 13:36:44 +0100 Subject: [PATCH 399/430] JS: show test changes after #15823 --- .../ql/test/ApiGraphs/classes/VerifyAssertions.expected | 4 ---- .../ql/test/library-tests/TypeTracking/TypeTracking.expected | 4 +--- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/javascript/ql/test/ApiGraphs/classes/VerifyAssertions.expected b/javascript/ql/test/ApiGraphs/classes/VerifyAssertions.expected index 03f159832fb..e69de29bb2d 100644 --- a/javascript/ql/test/ApiGraphs/classes/VerifyAssertions.expected +++ b/javascript/ql/test/ApiGraphs/classes/VerifyAssertions.expected @@ -1,4 +0,0 @@ -| classes.js:31:28:31:122 | /* use= ... ce() */ | def moduleImport("classes").getMember("exports").getMember("MyThirdStream") has no outgoing edge labelled getInstance(); it does have outgoing edges labelled getReceiver(). | -| classes.js:33:37:33:131 | /* use= ... ce() */ | def moduleImport("classes").getMember("exports").getMember("MyThirdStream") has no outgoing edge labelled getInstance(); it does have outgoing edges labelled getReceiver(). | -| classes.js:40:28:40:112 | /* use= ... ce() */ | def moduleImport("classes").getMember("exports").getMember("bar") has no outgoing edge labelled getInstance(); it does have outgoing edges labelled getReceiver(). | -| classes.js:45:26:45:110 | /* use= ... ce() */ | def moduleImport("classes").getMember("exports").getMember("bar") has no outgoing edge labelled getInstance(); it does have outgoing edges labelled getReceiver(). | diff --git a/javascript/ql/test/library-tests/TypeTracking/TypeTracking.expected b/javascript/ql/test/library-tests/TypeTracking/TypeTracking.expected index 4ae2de157b3..8b137891791 100644 --- a/javascript/ql/test/library-tests/TypeTracking/TypeTracking.expected +++ b/javascript/ql/test/library-tests/TypeTracking/TypeTracking.expected @@ -1,3 +1 @@ -| implicit-receiver.js:8:22:8:52 | // trac ... ver-obj | Failed to track implicit-receiver-obj here. | -| implicit-receiver.js:9:24:9:84 | // trac ... er-prop | Failed to track implicit-receiver-obj here. | -| implicit-receiver.js:9:24:9:84 | // trac ... er-prop | Failed to track implicit-receiver-prop here. | + From d83500de5d1d6af3b731e3516bd30247310944d4 Mon Sep 17 00:00:00 2001 From: Tom Hvitved <hvitved@github.com> Date: Mon, 18 Mar 2024 14:24:07 +0100 Subject: [PATCH 400/430] Address review comments --- .../dataflow/codeql/dataflow/internal/DataFlowImpl.qll | 4 ++++ .../codeql/dataflow/internal/DataFlowImplCommon.qll | 10 ---------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 1db7a258181..86546375798 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -3932,6 +3932,8 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> { override predicate isSource() { none() } override string toString() { result = sourceGroup } + + override Location getLocation() { result.hasLocationInfo("", 0, 0, 0, 0) } } private class PathNodeSinkGroup extends PathNodeImpl, TPathNodeSinkGroup { @@ -3948,6 +3950,8 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> { override predicate isSource() { none() } override string toString() { result = sinkGroup } + + override Location getLocation() { result.hasLocationInfo("", 0, 0, 0, 0) } } private predicate pathNode( diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll index 1caf76de7bc..e83752fcced 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll @@ -1650,8 +1650,6 @@ module MakeImplCommon<LocationSig Location, InputSig<Location> Lang> { */ class CastingNode extends NodeFinal { CastingNode() { castingNode(this) } - - string toString() { result = super.toString() } } private predicate readStepWithTypes( @@ -1800,8 +1798,6 @@ module MakeImplCommon<LocationSig Location, InputSig<Location> Lang> { class ParamNode extends NodeFinal { ParamNode() { parameterNode(this, _, _) } - string toString() { result = super.toString() } - /** * Holds if this node is the parameter of callable `c` at the specified * position. @@ -1815,8 +1811,6 @@ module MakeImplCommon<LocationSig Location, InputSig<Location> Lang> { class ArgNode extends NodeFinal { ArgNode() { argumentNode(this, _, _) } - string toString() { result = super.toString() } - /** Holds if this argument occurs at the given position in the given call. */ final predicate argumentOf(DataFlowCall call, ArgumentPosition pos) { argumentNode(this, call, pos) @@ -1830,8 +1824,6 @@ module MakeImplCommon<LocationSig Location, InputSig<Location> Lang> { class ReturnNodeExt extends NodeFinal { ReturnNodeExt() { returnNodeExt(this, _) } - string toString() { result = super.toString() } - /** Gets the kind of this returned value. */ ReturnKindExt getKind() { returnNodeExt(this, result) } } @@ -1842,8 +1834,6 @@ module MakeImplCommon<LocationSig Location, InputSig<Location> Lang> { */ class OutNodeExt extends NodeFinal { OutNodeExt() { outNodeExt(this) } - - string toString() { result = super.toString() } } /** From 1af81673543e87b2ce7492d776fd0b0f40d9ded8 Mon Sep 17 00:00:00 2001 From: Sim4n6 <sim4n6@gmail.com> Date: Mon, 18 Mar 2024 13:26:20 +0000 Subject: [PATCH 401/430] updated the .expected file --- .../Security/CWE-770/UnicodeDoS.expected | 62 +++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) 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 index 415b94973a5..f98487ba7da 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-770/UnicodeDoS.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-770/UnicodeDoS.expected @@ -1,35 +1,35 @@ edges -| tests.py:1:35:1:41 | ControlFlowNode for ImportMember | tests.py:1:35:1:41 | ControlFlowNode for request | -| tests.py:1:35:1:41 | ControlFlowNode for request | tests.py:12:17:12:23 | ControlFlowNode for request | -| tests.py:1:35:1:41 | ControlFlowNode for request | tests.py:24:9:24:15 | ControlFlowNode for request | -| tests.py:1:35:1:41 | ControlFlowNode for request | tests.py:36:9:36:15 | ControlFlowNode for request | -| tests.py:1:35:1:41 | ControlFlowNode for request | tests.py:48:9:48:15 | ControlFlowNode for request | -| tests.py:1:35:1:41 | ControlFlowNode for request | tests.py:60:9:60:15 | ControlFlowNode for request | -| tests.py:1:35:1:41 | ControlFlowNode for request | tests.py:72:9:72:15 | ControlFlowNode for request | -| tests.py:12:5:12:13 | ControlFlowNode for file_path | tests.py:16:39:16:47 | ControlFlowNode for file_path | -| tests.py:12:17:12:23 | ControlFlowNode for request | tests.py:12:17:12:28 | ControlFlowNode for Attribute | -| tests.py:12:17:12:28 | ControlFlowNode for Attribute | tests.py:12:17:12:49 | ControlFlowNode for Attribute() | -| tests.py:12:17:12:49 | ControlFlowNode for Attribute() | tests.py:12:5:12:13 | ControlFlowNode for file_path | -| tests.py:24:5:24:5 | ControlFlowNode for r | tests.py:28:43:28:43 | ControlFlowNode for r | -| tests.py:24:9:24:15 | ControlFlowNode for request | tests.py:24:9:24:20 | ControlFlowNode for Attribute | -| tests.py:24:9:24:20 | ControlFlowNode for Attribute | tests.py:24:9:24:33 | ControlFlowNode for Attribute() | -| tests.py:24:9:24:33 | ControlFlowNode for Attribute() | tests.py:24:5:24:5 | ControlFlowNode for r | -| tests.py:36:5:36:5 | ControlFlowNode for r | tests.py:40:43:40:43 | ControlFlowNode for r | -| tests.py:36:9:36:15 | ControlFlowNode for request | tests.py:36:9:36:20 | ControlFlowNode for Attribute | -| tests.py:36:9:36:20 | ControlFlowNode for Attribute | tests.py:36:9:36:33 | ControlFlowNode for Attribute() | -| tests.py:36:9:36:33 | ControlFlowNode for Attribute() | tests.py:36:5:36:5 | ControlFlowNode for r | -| tests.py:48:5:48:5 | ControlFlowNode for r | tests.py:52:43:52:43 | ControlFlowNode for r | -| tests.py:48:9:48:15 | ControlFlowNode for request | tests.py:48:9:48:20 | ControlFlowNode for Attribute | -| tests.py:48:9:48:20 | ControlFlowNode for Attribute | tests.py:48:9:48:33 | ControlFlowNode for Attribute() | -| tests.py:48:9:48:33 | ControlFlowNode for Attribute() | tests.py:48:5:48:5 | ControlFlowNode for r | -| tests.py:60:5:60:5 | ControlFlowNode for r | tests.py:64:43:64:43 | ControlFlowNode for r | -| tests.py:60:9:60:15 | ControlFlowNode for request | tests.py:60:9:60:20 | ControlFlowNode for Attribute | -| tests.py:60:9:60:20 | ControlFlowNode for Attribute | tests.py:60:9:60:33 | ControlFlowNode for Attribute() | -| tests.py:60:9:60:33 | ControlFlowNode for Attribute() | tests.py:60:5:60:5 | ControlFlowNode for r | -| tests.py:72:5:72:5 | ControlFlowNode for r | tests.py:76:43:76:43 | ControlFlowNode for r | -| tests.py:72:9:72:15 | ControlFlowNode for request | tests.py:72:9:72:20 | ControlFlowNode for Attribute | -| tests.py:72:9:72:20 | ControlFlowNode for Attribute | tests.py:72:9:72:33 | ControlFlowNode for Attribute() | -| tests.py:72:9:72:33 | ControlFlowNode for Attribute() | tests.py:72:5:72:5 | ControlFlowNode for r | +| 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 | From d7c9bfa08b45841758f428fd11a5ad4e6bc2baac Mon Sep 17 00:00:00 2001 From: Tom Hvitved <hvitved@github.com> Date: Tue, 27 Feb 2024 14:47:16 +0100 Subject: [PATCH 402/430] Data flow: Account for hidden `subpath` wrappers --- .../codeql/dataflow/internal/DataFlowImpl.qll | 89 +++++++++++++++---- 1 file changed, 72 insertions(+), 17 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index e075af108d1..93b4a344b69 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -4308,8 +4308,7 @@ module MakeImpl<InputSig Lang> { 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), _) } /** @@ -4340,9 +4339,8 @@ module MakeImpl<InputSig Lang> { ) } - 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 @@ -4350,30 +4348,87 @@ module MakeImpl<InputSig Lang> { ) } + 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 PathNodeImpl localStepToHidden(PathNodeImpl n) { + result = localStep(n) and + result.isHidden() + } + + private PathNodeImpl localStepFromHidden(PathNodeImpl n) { + n = localStep(result) and + result.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, localStepFromHidden*(par), localStepToHidden*(ret), 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(localStepToHidden*(par0), par, ret, localStepFromHidden*(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(localStepToHidden*(arg), par, ret, localStepFromHidden*(out)) and + not arg.isHidden() and + not out.isHidden() } /** From e53357d376d8b7fa1a6cc776f73dc383ecd99d1d Mon Sep 17 00:00:00 2001 From: Tom Hvitved <hvitved@github.com> Date: Tue, 27 Feb 2024 14:48:15 +0100 Subject: [PATCH 403/430] Update expected test output --- .../external-models/ExternalFlow.expected | 5 +++ .../dataflow/global/DataFlowPath.expected | 45 +++++++++++++++++++ .../global/TaintTrackingPath.expected | 45 +++++++++++++++++++ .../dataflow/summaries/summaries.expected | 15 +++++++ .../dataflow/array-flow/array-flow.expected | 18 ++++++++ .../dataflow/global/Flow.expected | 3 ++ .../dataflow/summaries/Summaries.expected | 12 +++++ 7 files changed, 143 insertions(+) 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/global/DataFlowPath.expected b/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected index 7ebc9193829..67c1d0553b6 100644 --- a/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected +++ b/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected @@ -34,12 +34,18 @@ edges | 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: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: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: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 : 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: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 | | @@ -47,6 +53,7 @@ edges | 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: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 | | @@ -242,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 | | @@ -287,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 | | @@ -332,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 | | @@ -500,15 +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: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: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: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 : 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: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 | @@ -519,6 +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: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 | @@ -658,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 | @@ -665,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 | @@ -709,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 | @@ -765,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 | @@ -903,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 | @@ -912,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 | diff --git a/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected b/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected index a5ceb692695..de58feb3221 100644 --- a/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected +++ b/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected @@ -34,12 +34,18 @@ edges | 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: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: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: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 : 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: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 | | @@ -47,6 +53,7 @@ edges | 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: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 | | @@ -244,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 | | @@ -306,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 | | @@ -351,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 | | @@ -550,15 +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: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: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: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 : 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: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 | @@ -569,6 +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: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 | @@ -708,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 | @@ -715,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 | @@ -778,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 | @@ -834,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 | @@ -1006,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 | @@ -1015,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 | 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/ruby/ql/test/library-tests/dataflow/array-flow/array-flow.expected b/ruby/ql/test/library-tests/dataflow/array-flow/array-flow.expected index 94906c18fb5..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 @@ -298,7 +298,9 @@ edges | 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: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 | | @@ -631,6 +633,7 @@ edges | 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 | | @@ -718,7 +721,9 @@ edges | 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: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 | | @@ -2337,7 +2342,9 @@ edges | 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 | | @@ -2674,7 +2681,9 @@ nodes | 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 | ...[...] | @@ -3041,6 +3050,7 @@ nodes | 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] | @@ -3132,7 +3142,9 @@ nodes | 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 | ...[...] | @@ -4821,6 +4833,8 @@ nodes | 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] | @@ -4836,6 +4850,10 @@ nodes | 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 [] | diff --git a/ruby/ql/test/library-tests/dataflow/global/Flow.expected b/ruby/ql/test/library-tests/dataflow/global/Flow.expected index 94589e1aafb..22d5fd7d18b 100644 --- a/ruby/ql/test/library-tests/dataflow/global/Flow.expected +++ b/ruby/ql/test/library-tests/dataflow/global/Flow.expected @@ -100,6 +100,7 @@ edges | 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:226:5:226: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 | | @@ -347,6 +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: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 | @@ -470,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/summaries/Summaries.expected b/ruby/ql/test/library-tests/dataflow/summaries/Summaries.expected index 09c9d040e55..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 | | @@ -275,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 | @@ -514,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 | From 40089e80881996f0132255818bee7a817ea5e4f8 Mon Sep 17 00:00:00 2001 From: Tom Hvitved <hvitved@github.com> Date: Wed, 28 Feb 2024 08:58:12 +0100 Subject: [PATCH 404/430] Add change note --- shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md 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..2d5890aee35 --- /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 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 og going directly from `xs` to `result`. Note that this change does not affect actual query results, but only how path explanations are computed. From 7a3b8ebb3a9528c9602d1adeb51a2137a73d31b7 Mon Sep 17 00:00:00 2001 From: Tom Hvitved <hvitved@github.com> Date: Mon, 18 Mar 2024 14:41:09 +0100 Subject: [PATCH 405/430] Address review comments --- .../2024-02-28-hidden-subpaths.md | 2 +- .../codeql/dataflow/internal/DataFlowImpl.qll | 21 +++++++++++-------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md b/shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md index 2d5890aee35..7e8c8b9d85b 100644 --- a/shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md +++ b/shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -* Path explanations now include flow that goes through callbacks passed into library functions. For example, if `map` is 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 og going directly from `xs` to `result`. Note that this change does not affect actual query results, but only how path explanations are computed. +* 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 og 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/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 93b4a344b69..49478d35ad4 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -4356,14 +4356,14 @@ module MakeImpl<InputSig Lang> { ) } - private PathNodeImpl localStepToHidden(PathNodeImpl n) { - result = localStep(n) and - result.isHidden() + private predicate localStepToHidden(PathNodeImpl n1, PathNodeImpl n2) { + n2 = localStep(n1) and + n2.isHidden() } - private PathNodeImpl localStepFromHidden(PathNodeImpl n) { - n = localStep(result) and - result.isHidden() + private predicate localStepFromHidden(PathNodeImpl n1, PathNodeImpl n2) { + n2 = localStep(n1) and + n1.isHidden() } pragma[nomagic] @@ -4404,7 +4404,8 @@ module MakeImpl<InputSig Lang> { PathNodeImpl arg, PathNodeImpl par, PathNodeImpl ret, PathNodeImpl out ) { // direct subpath - subpaths04(arg, localStepFromHidden*(par), localStepToHidden*(ret), out) and + 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) @@ -4412,7 +4413,8 @@ module MakeImpl<InputSig Lang> { // wrapped subpath using hidden nodes, e.g. flow through a callback inside // a summarized callable exists(PathNodeImpl par0, PathNodeImpl ret0 | - subpaths05(localStepToHidden*(par0), par, ret, localStepFromHidden*(ret0)) and + subpaths05(any(PathNodeImpl n | localStepToHidden*(par0, n)), par, ret, + any(PathNodeImpl n | localStepFromHidden*(n, ret0))) and subpaths04(arg, par0, ret0, out) ) } @@ -4426,7 +4428,8 @@ module MakeImpl<InputSig Lang> { */ pragma[nomagic] predicate subpaths(PathNodeImpl arg, PathNodeImpl par, PathNodeImpl ret, PathNodeImpl out) { - subpaths05(localStepToHidden*(arg), par, ret, localStepFromHidden*(out)) and + subpaths05(any(PathNodeImpl n | localStepToHidden*(arg, n)), par, ret, + any(PathNodeImpl n | localStepFromHidden*(n, out))) and not arg.isHidden() and not out.isHidden() } From 0cecbf52399e824ee12b8aedc817bdc8accc5600 Mon Sep 17 00:00:00 2001 From: Tom Hvitved <hvitved@github.com> Date: Mon, 18 Mar 2024 15:36:01 +0100 Subject: [PATCH 406/430] Update 2024-02-28-hidden-subpaths.md Co-authored-by: Anders Schack-Mulligen <aschackmull@users.noreply.github.com> --- shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md b/shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md index 7e8c8b9d85b..05a48eb8050 100644 --- a/shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md +++ b/shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md @@ -1,4 +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 og going directly from `xs` to `result`. Note that this change does not affect actual query results, but only how path explanations are computed. +* 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. From 80ae017aa1767bc84d1a5ae2282fb546437ff530 Mon Sep 17 00:00:00 2001 From: Harry Maclean <hmac@github.com> Date: Tue, 10 Oct 2023 15:21:15 +0100 Subject: [PATCH 407/430] Ruby: Track flow into ActiveRecord scopes --- .../dataflow/internal/DataFlowDispatch.qll | 15 ++++++++++- .../codeql/ruby/frameworks/ActiveRecord.qll | 27 +++++++++++++++++++ .../security/cwe-089/ActiveRecordInjection.rb | 11 ++++++++ .../security/cwe-089/SqlInjection.expected | 8 ++++++ 4 files changed, 60 insertions(+), 1 deletion(-) diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll index e7898a1ec4f..4ac9031f05c 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll @@ -429,7 +429,20 @@ private Callable viableSourceCallableInit(RelevantCall call) { result = getIniti /** Holds if `call` may resolve to the returned source-code method. */ private DataFlowCallable viableSourceCallable(DataFlowCall call) { result = viableSourceCallableNonInit(call) or - result.asCfgScope() = viableSourceCallableInit(call.asCall()) + result.asCfgScope() = viableSourceCallableInit(call.asCall()) or + result = any(AdditionalCallTarget t).viableTarget(call.asCall()) +} + +/** + * A unit class for adding additional call steps. + * + * Extend this class to add additional call steps to the data flow graph. + */ +class AdditionalCallTarget extends Unit { + /** + * Gets a viable target for `call`. + */ + abstract DataFlowCallable viableTarget(CfgNodes::ExprNodes::CallCfgNode call); } /** Holds if `call` may resolve to the returned summarized library method. */ diff --git a/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll b/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll index 7573e099c19..0f30f2146df 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll @@ -765,3 +765,30 @@ private class ActiveRecordCollectionProxyModelInstantiation extends ActiveRecord result = this.(ActiveRecordCollectionProxyMethodCall).getAssociation().getTargetClass() } } + +/** + * An additional call step for calls to ActiveRecord scopes. For example, in the following code: + * + * ```rb + * class User < ActiveRecord::Base + * scope :with_role, ->(role) { where(role: role) } + * end + * + * User.with_role(r) + * ``` + * + * the call to `with_role` targets the lambda, and argument `r` flows to the parameter `role`. + */ +class ActiveRecordScopeCallTarget extends AdditionalCallTarget { + override DataFlowCallable viableTarget(ExprNodes::CallCfgNode scopeCall) { + exists(DataFlow::ModuleNode model, string scopeName | + model = activeRecordBaseClass().getADescendentModule() and + exists(DataFlow::CallNode scope | + scope = model.getAModuleLevelCall("scope") and + scope.getArgument(0).getConstantValue().isStringlikeValue(scopeName) and + scope.getArgument(1).asCallable().asCallableAstNode() = result.asCfgScope() + ) and + scopeCall = model.getAnImmediateReference().getAMethodCall(scopeName).asExpr() + ) + } +} 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 ad074de5e98..f1f8d680b75 100644 --- a/ruby/ql/test/query-tests/security/cwe-089/ActiveRecordInjection.rb +++ b/ruby/ql/test/query-tests/security/cwe-089/ActiveRecordInjection.rb @@ -204,3 +204,14 @@ class RegressionController < ActionController::Base Regression.connection.execute("SELECT * FROM users WHERE id = #{permitted_params[:user_id]}") end end + +class User + scope :with_role, ->(role) { where("role = #{role}") } +end + +class UsersController < ActionController::Base + def index + # BAD: user input passed to scope which uses it without sanitization. + @users = User.with_role(params[:role]) + 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 8b6c5bf4d16..6593e7606da 100644 --- a/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected @@ -76,6 +76,9 @@ edges | 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 | | +| ActiveRecordInjection.rb:209:24:209:27 | role | ActiveRecordInjection.rb:209:38:209:53 | "role = #{...}" | provenance | | +| ActiveRecordInjection.rb:215:29:215:34 | call to params | ActiveRecordInjection.rb:215:29:215:41 | ...[...] | provenance | | +| ActiveRecordInjection.rb:215:29:215:41 | ...[...] | ActiveRecordInjection.rb:209:24:209:27 | role | 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 | | @@ -201,6 +204,10 @@ nodes | 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 | ...[...] | +| ActiveRecordInjection.rb:209:24:209:27 | role | semmle.label | role | +| ActiveRecordInjection.rb:209:38:209:53 | "role = #{...}" | semmle.label | "role = #{...}" | +| ActiveRecordInjection.rb:215:29:215:34 | call to params | semmle.label | call to params | +| ActiveRecordInjection.rb:215:29:215:41 | ...[...] | 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 | ...[...] | @@ -257,6 +264,7 @@ subpaths | 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 | +| ActiveRecordInjection.rb:209:38:209:53 | "role = #{...}" | ActiveRecordInjection.rb:215:29:215:34 | call to params | ActiveRecordInjection.rb:209:38:209:53 | "role = #{...}" | This SQL query depends on a $@. | ActiveRecordInjection.rb:215:29:215:34 | 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 | From 4a55b6fbdfcc5c08135c47d945eb43768b8c77f3 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Mon, 18 Mar 2024 15:02:33 +0000 Subject: [PATCH 408/430] C++: Make 'cpp/uninitialized-local' a path-problem query. --- .../Memory Management/UninitializedLocal.ql | 5 ++- .../semmle/tests/UninitializedLocal.expected | 42 +++++++++++++------ 2 files changed, 32 insertions(+), 15 deletions(-) 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/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 | From bd0969b87b05918dbd2f9883a46daa98bd8cab04 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Mon, 18 Mar 2024 15:04:19 +0000 Subject: [PATCH 409/430] C++: Add change note. --- .../2024-03-18-uninitialized-local-path-problem.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/src/change-notes/2024-03-18-uninitialized-local-path-problem.md 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 From 668239f355ea11d21e05fbe272675baca35fb547 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Mon, 18 Mar 2024 15:16:10 +0000 Subject: [PATCH 410/430] C++: Convert tabs to spaces. --- .../query-tests/Security/CWE/CWE-416/test.cpp | 1006 ++++++++--------- 1 file changed, 503 insertions(+), 503 deletions(-) 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 index c035fe203a8..3e2d7482975 100644 --- 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 @@ -40,622 +40,622 @@ using decay_t = typename decay_impl<remove_reference_t<T>>::type; namespace std { - template<class T> constexpr T&& forward(remove_reference_t<T>& t) noexcept; - template<class T> constexpr T&& forward(remove_reference_t<T>&& t) noexcept; + template<class T> constexpr T&& forward(remove_reference_t<T>& t) noexcept; + template<class T> constexpr T&& forward(remove_reference_t<T>&& t) noexcept; } // --- iterator --- namespace std { - struct ptrdiff_t; + struct ptrdiff_t; - template<class I> struct iterator_traits; + template<class I> struct iterator_traits; - template <class Category, - class value_type, - class difference_type = ptrdiff_t, - class pointer_type = value_type*, - class reference_type = value_type&> - struct iterator { - typedef Category iterator_category; + template <class Category, + class value_type, + class difference_type = ptrdiff_t, + class pointer_type = value_type*, + class reference_type = value_type&> + struct iterator { + typedef Category iterator_category; - iterator(); - iterator(iterator<Category, remove_const_t<value_type> > const &other); // non-const -> const conversion constructor + iterator(); + iterator(iterator<Category, remove_const_t<value_type> > 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); - }; + 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 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 {}; + struct output_iterator_tag {}; - template<class Container> - 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<class Container> + 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<class Container> - constexpr back_insert_iterator<Container> back_inserter(Container& x) { - return back_insert_iterator<Container>(x); - } + template<class Container> + constexpr back_insert_iterator<Container> back_inserter(Container& x) { + return back_insert_iterator<Container>(x); + } - template<class Container> - 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<class Container> - constexpr front_insert_iterator<Container> front_inserter(Container& x) { - return front_insert_iterator<Container>(x); - } + template<class Container> + 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<class Container> + constexpr front_insert_iterator<Container> front_inserter(Container& x) { + return front_insert_iterator<Container>(x); + } } // --- string --- namespace std { - template<class charT> struct char_traits; + template<class charT> struct char_traits; - typedef size_t streamsize; + typedef size_t streamsize; - template <class T> class allocator { - public: - allocator() throw(); - typedef size_t size_type; - }; + template <class T> class allocator { + public: + allocator() throw(); + typedef size_t size_type; + }; - template<class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> > - 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; + template<class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> > + 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<class InputIterator> basic_string(InputIterator begin, InputIterator end, const Allocator& a = Allocator()); + explicit basic_string(const Allocator& a = Allocator()); + basic_string(const charT* s, const Allocator& a = Allocator()); + template<class InputIterator> basic_string(InputIterator begin, InputIterator end, const Allocator& a = Allocator()); - const charT* c_str() const; - charT* data() noexcept; - size_t length() const; + const charT* c_str() const; + charT* data() noexcept; + size_t length() const; - typedef std::iterator<random_access_iterator_tag, charT> iterator; - typedef std::iterator<random_access_iterator_tag, const charT> const_iterator; + typedef std::iterator<random_access_iterator_tag, charT> iterator; + typedef std::iterator<random_access_iterator_tag, const charT> const_iterator; - iterator begin(); - iterator end(); - const_iterator begin() const; - const_iterator end() const; - const_iterator cbegin() const; - const_iterator cend() const; + 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); + void push_back(charT c); - const charT& front() const; - charT& front(); - const charT& back() const; - charT& back(); + 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<class T> 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<class InputIterator> basic_string& append(InputIterator first, InputIterator last); - basic_string& assign(const basic_string& str); - basic_string& assign(size_type n, charT c); - template<class InputIterator> 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<class InputIterator> 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<Allocator>::propagate_on_container_swap::value || allocator_traits<Allocator>::is_always_equal::value)*/; - }; + 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<class T> 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<class InputIterator> basic_string& append(InputIterator first, InputIterator last); + basic_string& assign(const basic_string& str); + basic_string& assign(size_type n, charT c); + template<class InputIterator> 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<class InputIterator> 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<Allocator>::propagate_on_container_swap::value || allocator_traits<Allocator>::is_always_equal::value)*/; + }; - template<class charT, class traits, class Allocator> basic_string<charT, traits, Allocator> operator+(const basic_string<charT, traits, Allocator>& lhs, const basic_string<charT, traits, Allocator>& rhs); - template<class charT, class traits, class Allocator> basic_string<charT, traits, Allocator> operator+(const basic_string<charT, traits, Allocator>& lhs, const charT* rhs); + template<class charT, class traits, class Allocator> basic_string<charT, traits, Allocator> operator+(const basic_string<charT, traits, Allocator>& lhs, const basic_string<charT, traits, Allocator>& rhs); + template<class charT, class traits, class Allocator> basic_string<charT, traits, Allocator> operator+(const basic_string<charT, traits, Allocator>& lhs, const charT* rhs); - typedef basic_string<char> string; + typedef basic_string<char> string; } // --- istring / ostream / stringstream --- namespace std { - template <class charT, class traits = char_traits<charT> > - class basic_istream /*: virtual public basic_ios<charT,traits> - not needed for this test */ { - public: - using char_type = charT; - using int_type = int; //typename traits::int_type; + template <class charT, class traits = char_traits<charT> > + class basic_istream /*: virtual public basic_ios<charT,traits> - not needed for this test */ { + public: + using char_type = charT; + using int_type = int; //typename traits::int_type; - basic_istream<charT, traits>& operator>>(int& n); + basic_istream<charT, traits>& operator>>(int& n); - int_type get(); - basic_istream<charT, traits>& get(char_type& c); - basic_istream<charT, traits>& get(char_type* s, streamsize n); - int_type peek(); - basic_istream<charT, traits>& read (char_type* s, streamsize n); - streamsize readsome(char_type* s, streamsize n); - basic_istream<charT, traits>& putback(char_type c); - basic_istream<charT,traits>& unget(); + int_type get(); + basic_istream<charT, traits>& get(char_type& c); + basic_istream<charT, traits>& get(char_type* s, streamsize n); + int_type peek(); + basic_istream<charT, traits>& read (char_type* s, streamsize n); + streamsize readsome(char_type* s, streamsize n); + basic_istream<charT, traits>& putback(char_type c); + basic_istream<charT,traits>& unget(); - basic_istream<charT,traits>& getline(char_type* s, streamsize n); - basic_istream<charT,traits>& getline(char_type* s, streamsize n, char_type delim); - }; + basic_istream<charT,traits>& getline(char_type* s, streamsize n); + basic_istream<charT,traits>& getline(char_type* s, streamsize n, char_type delim); + }; - template<class charT, class traits> basic_istream<charT, traits>& operator>>(basic_istream<charT, traits>&, charT*); - template<class charT, class traits, class Allocator> basic_istream<charT, traits>& operator>>(basic_istream<charT, traits>& is, basic_string<charT, traits, Allocator>& str); + template<class charT, class traits> basic_istream<charT, traits>& operator>>(basic_istream<charT, traits>&, charT*); + template<class charT, class traits, class Allocator> basic_istream<charT, traits>& operator>>(basic_istream<charT, traits>& is, basic_string<charT, traits, Allocator>& str); - template<class charT, class traits, class Allocator> basic_istream<charT,traits>& getline(basic_istream<charT,traits>& is, basic_string<charT,traits,Allocator>& str, charT delim); - template<class charT, class traits, class Allocator> basic_istream<charT,traits>& getline(basic_istream<charT,traits>& is, basic_string<charT,traits,Allocator>& str); + template<class charT, class traits, class Allocator> basic_istream<charT,traits>& getline(basic_istream<charT,traits>& is, basic_string<charT,traits,Allocator>& str, charT delim); + template<class charT, class traits, class Allocator> basic_istream<charT,traits>& getline(basic_istream<charT,traits>& is, basic_string<charT,traits,Allocator>& str); - template <class charT, class traits = char_traits<charT> > - class basic_ostream /*: virtual public basic_ios<charT,traits> - not needed for this test */ { - public: - typedef charT char_type; + template <class charT, class traits = char_traits<charT> > + class basic_ostream /*: virtual public basic_ios<charT,traits> - not needed for this test */ { + public: + typedef charT char_type; - basic_ostream<charT, traits>& operator<<(int n); + basic_ostream<charT, traits>& operator<<(int n); - basic_ostream<charT, traits>& put(char_type c); - basic_ostream<charT, traits>& write(const char_type* s, streamsize n); - basic_ostream<charT,traits>& flush(); - }; + basic_ostream<charT, traits>& put(char_type c); + basic_ostream<charT, traits>& write(const char_type* s, streamsize n); + basic_ostream<charT,traits>& flush(); + }; - template<class charT, class traits> basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, const charT*); - template<class charT, class traits, class Allocator> basic_ostream<charT, traits>& operator<<(basic_ostream<charT, traits>& os, const basic_string<charT, traits, Allocator>& str); + template<class charT, class traits> basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, const charT*); + template<class charT, class traits, class Allocator> basic_ostream<charT, traits>& operator<<(basic_ostream<charT, traits>& os, const basic_string<charT, traits, Allocator>& str); - template<class charT, class traits = char_traits<charT>> - class basic_iostream : public basic_istream<charT, traits>, public basic_ostream<charT, traits> { - public: - }; + template<class charT, class traits = char_traits<charT>> + class basic_iostream : public basic_istream<charT, traits>, public basic_ostream<charT, traits> { + public: + }; - template<class charT, class traits = char_traits<charT>, class Allocator = allocator<charT>> - class basic_stringstream : public basic_iostream<charT, traits> { - 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<charT, traits, Allocator>& 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); + template<class charT, class traits = char_traits<charT>, class Allocator = allocator<charT>> + class basic_stringstream : public basic_iostream<charT, traits> { + 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<charT, traits, Allocator>& 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); + void swap(basic_stringstream& rhs); - basic_string<charT, traits, Allocator> str() const; - void str(const basic_string<charT, traits, Allocator>& str); - }; + basic_string<charT, traits, Allocator> str() const; + void str(const basic_string<charT, traits, Allocator>& str); + }; - typedef basic_istream<char> istream; - typedef basic_ostream<char> ostream; - extern istream cin; - extern ostream cout; + typedef basic_istream<char> istream; + typedef basic_ostream<char> ostream; + extern istream cin; + extern ostream cout; - using stringstream = basic_stringstream<char>; + using stringstream = basic_stringstream<char>; } // --- vector --- namespace std { - template<class T, class Allocator = allocator<T>> - 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<random_access_iterator_tag, T>; - using const_iterator = std::iterator<random_access_iterator_tag, const T>; + template<class T, class Allocator = allocator<T>> + 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<random_access_iterator_tag, T>; + using const_iterator = std::iterator<random_access_iterator_tag, const T>; - vector() noexcept(noexcept(Allocator())); + vector() noexcept(noexcept(Allocator())); vector(const std::vector<T, Allocator>&); - explicit vector(const Allocator&) noexcept; - explicit vector(size_type n, const Allocator& = Allocator()); - vector(size_type n, const T& value, const Allocator& = Allocator()); - template<class InputIterator, class IteratorCategory = typename InputIterator::iterator_category> 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(); + explicit vector(const Allocator&) noexcept; + explicit vector(size_type n, const Allocator& = Allocator()); + vector(size_type n, const T& value, const Allocator& = Allocator()); + template<class InputIterator, class IteratorCategory = typename InputIterator::iterator_category> 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<Allocator>::propagate_on_container_move_assignment::value || allocator_traits<Allocator>::is_always_equal::value)*/; - template<class InputIterator, class IteratorCategory = typename InputIterator::iterator_category> 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); + vector& operator=(const vector& x); + vector& operator=(vector&& x) noexcept/*(allocator_traits<Allocator>::propagate_on_container_move_assignment::value || allocator_traits<Allocator>::is_always_equal::value)*/; + template<class InputIterator, class IteratorCategory = typename InputIterator::iterator_category> 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; + iterator begin() noexcept; + const_iterator begin() const noexcept; + iterator end() noexcept; + const_iterator end() const noexcept; - size_type size() 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; + 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; + T* data() noexcept; + const T* data() const noexcept; - void push_back(const T& x); - void push_back(T&& x); + 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<class InputIterator> iterator insert(const_iterator position, InputIterator first, InputIterator last); + 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<class InputIterator> iterator insert(const_iterator position, InputIterator first, InputIterator last); - template <class... Args> iterator emplace (const_iterator position, Args&&... args); - template <class... Args> void emplace_back (Args&&... args); + template <class... Args> iterator emplace (const_iterator position, Args&&... args); + template <class... Args> void emplace_back (Args&&... args); - void swap(vector&) noexcept/*(allocator_traits<Allocator>::propagate_on_container_swap::value || allocator_traits<Allocator>::is_always_equal::value)*/; + void swap(vector&) noexcept/*(allocator_traits<Allocator>::propagate_on_container_swap::value || allocator_traits<Allocator>::is_always_equal::value)*/; - void clear() noexcept; - }; + void clear() noexcept; + }; } // --- make_shared / make_unique --- namespace std { - template<typename T> - class shared_ptr { - public: - shared_ptr() noexcept; - explicit shared_ptr(T*); - shared_ptr(const shared_ptr&) noexcept; - template<class U> shared_ptr(const shared_ptr<U>&) noexcept; - template<class U> shared_ptr(shared_ptr<U>&&) noexcept; + template<typename T> + class shared_ptr { + public: + shared_ptr() noexcept; + explicit shared_ptr(T*); + shared_ptr(const shared_ptr&) noexcept; + template<class U> shared_ptr(const shared_ptr<U>&) noexcept; + template<class U> shared_ptr(shared_ptr<U>&&) noexcept; - shared_ptr<T>& operator=(const shared_ptr<T>&) noexcept; - shared_ptr<T>& operator=(shared_ptr<T>&&) noexcept; + shared_ptr<T>& operator=(const shared_ptr<T>&) noexcept; + shared_ptr<T>& operator=(shared_ptr<T>&&) noexcept; - T& operator*() const noexcept; - T* operator->() const noexcept; + T& operator*() const noexcept; + T* operator->() const noexcept; - T* get() const noexcept; - }; + T* get() const noexcept; + }; - template<typename T> - class unique_ptr { - public: - constexpr unique_ptr() noexcept; - explicit unique_ptr(T*) noexcept; - unique_ptr(unique_ptr<T>&&) noexcept; + template<typename T> + class unique_ptr { + public: + constexpr unique_ptr() noexcept; + explicit unique_ptr(T*) noexcept; + unique_ptr(unique_ptr<T>&&) noexcept; - unique_ptr<T>& operator=(unique_ptr<T>&&) noexcept; + unique_ptr<T>& operator=(unique_ptr<T>&&) noexcept; - T& operator*() const; - T* operator->() const noexcept; + T& operator*() const; + T* operator->() const noexcept; - T* get() const noexcept; - }; + T* get() const noexcept; + }; - template<typename T, class... Args> unique_ptr<T> make_unique(Args&&...); + template<typename T, class... Args> unique_ptr<T> make_unique(Args&&...); - template<typename T, class... Args> shared_ptr<T> make_shared(Args&&...); + template<typename T, class... Args> shared_ptr<T> make_shared(Args&&...); } // --- pair --- namespace std { - template <class T1, class T2> - struct pair { - typedef T1 first_type; - typedef T2 second_type; + template <class T1, class T2> + struct pair { + typedef T1 first_type; + typedef T2 second_type; - T1 first; - T2 second; - pair(); - pair(const T1& x, const T2& y); - template<class U, class V> pair(const pair<U, V> &p); + T1 first; + T2 second; + pair(); + pair(const T1& x, const T2& y); + template<class U, class V> pair(const pair<U, V> &p); - void swap(pair& p) /*noexcept(...)*/; - }; + void swap(pair& p) /*noexcept(...)*/; + }; - template<class T1, class T2> constexpr pair<decay_t<T1>, decay_t<T2>> make_pair(T1&& x, T2&& y) { - return pair<decay_t<T1>, decay_t<T2>>(std::forward<T1>(x), std::forward<T2>(y)); - } + template<class T1, class T2> constexpr pair<decay_t<T1>, decay_t<T2>> make_pair(T1&& x, T2&& y) { + return pair<decay_t<T1>, decay_t<T2>>(std::forward<T1>(x), std::forward<T2>(y)); + } } // --- map --- namespace std { - template<class T = void> struct less; + template<class T = void> struct less; - template<class Key, class T, class Compare = less<Key>, class Allocator = allocator<pair<const Key, T>>> - class map { - public: - using key_type = Key; - using mapped_type = T; - using value_type = pair<const Key, T>; - using iterator = std::iterator<random_access_iterator_tag, value_type >; - using const_iterator = std::iterator<random_access_iterator_tag, const value_type >; + template<class Key, class T, class Compare = less<Key>, class Allocator = allocator<pair<const Key, T>>> + class map { + public: + using key_type = Key; + using mapped_type = T; + using value_type = pair<const Key, T>; + using iterator = std::iterator<random_access_iterator_tag, value_type >; + using const_iterator = std::iterator<random_access_iterator_tag, const value_type >; - map(); - map(const map& x); - map(map&& x); - ~map(); + map(); + map(const map& x); + map(map&& x); + ~map(); - map& operator=(const map& x); - map& operator=(map&& x) /*noexcept(allocator_traits<Allocator>::is_always_equal::value && is_nothrow_move_assignable_v<Compare>)*/; + map& operator=(const map& x); + map& operator=(map&& x) /*noexcept(allocator_traits<Allocator>::is_always_equal::value && is_nothrow_move_assignable_v<Compare>)*/; - iterator begin() noexcept; - const_iterator begin() const noexcept; - iterator end() noexcept; - const_iterator end() const noexcept; + 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; + 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<class... Args> pair<iterator, bool> emplace(Args&&... args); - template<class... Args> iterator emplace_hint(const_iterator position, Args&&... args); + template<class... Args> pair<iterator, bool> emplace(Args&&... args); + template<class... Args> iterator emplace_hint(const_iterator position, Args&&... args); - pair<iterator, bool> insert(const value_type& x); - pair<iterator, bool> insert(value_type&& x); - iterator insert(const_iterator position, const value_type& x); - iterator insert(const_iterator position, value_type&& x); + pair<iterator, bool> insert(const value_type& x); + pair<iterator, bool> insert(value_type&& x); + iterator insert(const_iterator position, const value_type& x); + iterator insert(const_iterator position, value_type&& x); - template<class... Args> pair<iterator, bool> try_emplace(const key_type& k, Args&&... args); - template<class... Args> pair<iterator, bool> try_emplace(key_type&& k, Args&&... args); - template<class... Args> iterator try_emplace(const_iterator hint, const key_type& k, Args&&... args); - template<class... Args> iterator try_emplace(const_iterator hint, key_type&& k, Args&&... args); - template<class M> pair<iterator, bool> insert_or_assign(const key_type& k, M&& obj); - template<class M> pair<iterator, bool> insert_or_assign(key_type&& k, M&& obj); - template<class M> iterator insert_or_assign(const_iterator hint, const key_type& k, M&& obj); - template<class M> iterator insert_or_assign(const_iterator hint, key_type&& k, M&& obj); + template<class... Args> pair<iterator, bool> try_emplace(const key_type& k, Args&&... args); + template<class... Args> pair<iterator, bool> try_emplace(key_type&& k, Args&&... args); + template<class... Args> iterator try_emplace(const_iterator hint, const key_type& k, Args&&... args); + template<class... Args> iterator try_emplace(const_iterator hint, key_type&& k, Args&&... args); + template<class M> pair<iterator, bool> insert_or_assign(const key_type& k, M&& obj); + template<class M> pair<iterator, bool> insert_or_assign(key_type&& k, M&& obj); + template<class M> iterator insert_or_assign(const_iterator hint, const key_type& k, M&& obj); + template<class M> 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<Allocator>::is_always_equal::value && is_nothrow_swappable_v<Compare>)*/; - void clear() noexcept; + iterator erase(iterator position); + iterator erase(const_iterator position); + iterator erase(const_iterator first, const_iterator last); + void swap(map&) /*noexcept(/*==allocator_traits<Allocator>::is_always_equal::value && is_nothrow_swappable_v<Compare>)*/; + void clear() noexcept; - template<class C2> void merge(map<Key, T, C2, Allocator>& source); - template<class C2> void merge(map<Key, T, C2, Allocator>&& source); + template<class C2> void merge(map<Key, T, C2, Allocator>& source); + template<class C2> void merge(map<Key, T, C2, Allocator>&& source); - iterator find(const key_type& x); - const_iterator find(const key_type& x) const; + 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; + 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<iterator, iterator> equal_range(const key_type& x); - pair<const_iterator, const_iterator> equal_range(const key_type& x) const; - }; + pair<iterator, iterator> equal_range(const key_type& x); + pair<const_iterator, const_iterator> equal_range(const key_type& x) const; + }; - template<class T> struct hash; - template<class T = void> struct equal_to; + template<class T> struct hash; + template<class T = void> struct equal_to; - template<class Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>, class Allocator = allocator<pair<const Key, T>>> - class unordered_map { - public: - using key_type = Key; - using mapped_type = T; - using value_type = pair<const Key, T>; - using iterator = std::iterator<random_access_iterator_tag, value_type >; - using const_iterator = std::iterator<random_access_iterator_tag, const value_type >; + template<class Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>, class Allocator = allocator<pair<const Key, T>>> + class unordered_map { + public: + using key_type = Key; + using mapped_type = T; + using value_type = pair<const Key, T>; + using iterator = std::iterator<random_access_iterator_tag, value_type >; + using const_iterator = std::iterator<random_access_iterator_tag, const value_type >; - unordered_map(); - unordered_map(const unordered_map&); - unordered_map(unordered_map&&); - ~unordered_map(); + 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<Allocator>::is_always_equal::value && is_nothrow_move_assignable_v<Hash> && is_nothrow_move_assignable_v<Pred>)*/; + unordered_map& operator=(const unordered_map&); + unordered_map& operator=(unordered_map&&) /*noexcept(allocator_traits<Allocator>::is_always_equal::value && is_nothrow_move_assignable_v<Hash> && is_nothrow_move_assignable_v<Pred>)*/; - iterator begin() noexcept; - const_iterator begin() const noexcept; - iterator end() noexcept; - const_iterator end() const noexcept; + 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<class... Args> pair<iterator, bool> emplace(Args&&... args); - template<class... Args> iterator emplace_hint(const_iterator position, Args&&... args); + 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<class... Args> pair<iterator, bool> emplace(Args&&... args); + template<class... Args> iterator emplace_hint(const_iterator position, Args&&... args); - pair<iterator, bool> insert(const value_type& obj); - pair<iterator, bool> insert(value_type&& obj); - iterator insert(const_iterator hint, const value_type& obj); - iterator insert(const_iterator hint, value_type&& obj); + pair<iterator, bool> insert(const value_type& obj); + pair<iterator, bool> insert(value_type&& obj); + iterator insert(const_iterator hint, const value_type& obj); + iterator insert(const_iterator hint, value_type&& obj); - template<class... Args> pair<iterator, bool> try_emplace(const key_type& k, Args&&... args); - template<class... Args> pair<iterator, bool> try_emplace(key_type&& k, Args&&... args); - template<class... Args> iterator try_emplace(const_iterator hint, const key_type& k, Args&&... args); - template<class... Args> iterator try_emplace(const_iterator hint, key_type&& k, Args&&... args); - template<class M> pair<iterator, bool> insert_or_assign(const key_type& k, M&& obj); - template<class M> pair<iterator, bool> insert_or_assign(key_type&& k, M&& obj); - template<class M> iterator insert_or_assign(const_iterator hint, const key_type& k, M&& obj); - template<class M> iterator insert_or_assign(const_iterator hint, key_type&& k, M&& obj); + template<class... Args> pair<iterator, bool> try_emplace(const key_type& k, Args&&... args); + template<class... Args> pair<iterator, bool> try_emplace(key_type&& k, Args&&... args); + template<class... Args> iterator try_emplace(const_iterator hint, const key_type& k, Args&&... args); + template<class... Args> iterator try_emplace(const_iterator hint, key_type&& k, Args&&... args); + template<class M> pair<iterator, bool> insert_or_assign(const key_type& k, M&& obj); + template<class M> pair<iterator, bool> insert_or_assign(key_type&& k, M&& obj); + template<class M> iterator insert_or_assign(const_iterator hint, const key_type& k, M&& obj); + template<class M> 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<Allocator>::is_always_equal::value && is_nothrow_swappable_v<Hash> && is_nothrow_swappable_v<Pred>)*/; - void clear() noexcept; + iterator erase(iterator position); + iterator erase(const_iterator position); + iterator erase(const_iterator first, const_iterator last); + void swap(unordered_map&) /*noexcept(allocator_traits<Allocator>::is_always_equal::value && is_nothrow_swappable_v<Hash> && is_nothrow_swappable_v<Pred>)*/; + void clear() noexcept; - template<class H2, class P2> void merge(unordered_map<Key, T, H2, P2, Allocator>& source); - template<class H2, class P2> void merge(unordered_map<Key, T, H2, P2, Allocator>&& source); + template<class H2, class P2> void merge(unordered_map<Key, T, H2, P2, Allocator>& source); + template<class H2, class P2> void merge(unordered_map<Key, T, H2, P2, Allocator>&& source); - iterator find(const key_type& k); - const_iterator find(const key_type& k) const; + iterator find(const key_type& k); + const_iterator find(const key_type& k) const; - pair<iterator, iterator> equal_range(const key_type& k); - pair<const_iterator, const_iterator> equal_range(const key_type& k) const; - }; + pair<iterator, iterator> equal_range(const key_type& k); + pair<const_iterator, const_iterator> equal_range(const key_type& k) const; + }; }; // --- set --- namespace std { - template<class Key, class Compare = less<Key>, class Allocator = allocator<Key>> - class set { - public: - using key_type = Key; - using value_type = Key; - using size_type = size_t; - using allocator_type = Allocator; - using iterator = std::iterator<random_access_iterator_tag, value_type >; - using const_iterator = std::iterator<random_access_iterator_tag, const value_type >; + template<class Key, class Compare = less<Key>, class Allocator = allocator<Key>> + class set { + public: + using key_type = Key; + using value_type = Key; + using size_type = size_t; + using allocator_type = Allocator; + using iterator = std::iterator<random_access_iterator_tag, value_type >; + using const_iterator = std::iterator<random_access_iterator_tag, const value_type >; - set(); - set(const set& x); - set(set&& x); - template<class InputIterator> 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<Allocator>::is_always_equal::value && is_nothrow_move_assignable_v<Compare>)*/; + set(); + set(const set& x); + set(set&& x); + template<class InputIterator> 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<Allocator>::is_always_equal::value && is_nothrow_move_assignable_v<Compare>)*/; - iterator begin() noexcept; - const_iterator begin() const noexcept; - iterator end() noexcept; - const_iterator end() const noexcept; + iterator begin() noexcept; + const_iterator begin() const noexcept; + iterator end() noexcept; + const_iterator end() const noexcept; - template<class... Args> pair<iterator, bool> emplace(Args&&... args); - template<class... Args> iterator emplace_hint(const_iterator position, Args&&... args); - pair<iterator,bool> insert(const value_type& x); - pair<iterator,bool> insert(value_type&& x); - iterator insert(const_iterator position, const value_type& x); - iterator insert(const_iterator position, value_type&& x); - template<class InputIterator> 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<Allocator>::is_always_equal::value && is_nothrow_swappable_v<Compare>)*/; - void clear() noexcept; + template<class... Args> pair<iterator, bool> emplace(Args&&... args); + template<class... Args> iterator emplace_hint(const_iterator position, Args&&... args); + pair<iterator,bool> insert(const value_type& x); + pair<iterator,bool> insert(value_type&& x); + iterator insert(const_iterator position, const value_type& x); + iterator insert(const_iterator position, value_type&& x); + template<class InputIterator> 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<Allocator>::is_always_equal::value && is_nothrow_swappable_v<Compare>)*/; + void clear() noexcept; - template<class C2> void merge(set<Key, C2, Allocator>& source); - template<class C2> void merge(set<Key, C2, Allocator>&& source); + template<class C2> void merge(set<Key, C2, Allocator>& source); + template<class C2> void merge(set<Key, C2, Allocator>&& 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<iterator, iterator> equal_range(const key_type& x); - pair<const_iterator, const_iterator> equal_range(const key_type& x) const; - }; + 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<iterator, iterator> equal_range(const key_type& x); + pair<const_iterator, const_iterator> equal_range(const key_type& x) const; + }; - template<class Key, class Hash = hash<Key>, class Pred = equal_to<Key>, class Allocator = allocator<Key>> - 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<random_access_iterator_tag, value_type >; - using const_iterator = std::iterator<random_access_iterator_tag, const value_type >; + template<class Key, class Hash = hash<Key>, class Pred = equal_to<Key>, class Allocator = allocator<Key>> + 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<random_access_iterator_tag, value_type >; + using const_iterator = std::iterator<random_access_iterator_tag, const value_type >; - unordered_set(); - unordered_set(const unordered_set&); - unordered_set(unordered_set&&); - template<class InputIterator> 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(); + unordered_set(const unordered_set&); + unordered_set(unordered_set&&); + template<class InputIterator> 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<Allocator>::is_always_equal::value && is_nothrow_move_assignable_v<Hash> && is_nothrow_move_assignable_v<Pred>)*/; - - iterator begin() noexcept; - const_iterator begin() const noexcept; - iterator end() noexcept; - const_iterator end() const noexcept; + unordered_set& operator=(const unordered_set&); + unordered_set& operator=(unordered_set&&) noexcept/*(allocator_traits<Allocator>::is_always_equal::value && is_nothrow_move_assignable_v<Hash> && is_nothrow_move_assignable_v<Pred>)*/; + + iterator begin() noexcept; + const_iterator begin() const noexcept; + iterator end() noexcept; + const_iterator end() const noexcept; - template<class... Args> pair<iterator, bool> emplace(Args&&... args); - template<class... Args> iterator emplace_hint(const_iterator position, Args&&... args); - pair<iterator, bool> insert(const value_type& obj); - pair<iterator, bool> insert(value_type&& obj); - iterator insert(const_iterator hint, const value_type& obj); - iterator insert(const_iterator hint, value_type&& obj); - template<class InputIterator> void insert(InputIterator first, InputIterator last); + template<class... Args> pair<iterator, bool> emplace(Args&&... args); + template<class... Args> iterator emplace_hint(const_iterator position, Args&&... args); + pair<iterator, bool> insert(const value_type& obj); + pair<iterator, bool> insert(value_type&& obj); + iterator insert(const_iterator hint, const value_type& obj); + iterator insert(const_iterator hint, value_type&& obj); + template<class InputIterator> 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<Allocator>::is_always_equal::value && is_nothrow_swappable_v<Hash> && is_nothrow_swappable_v<Pred>)*/; - void clear() noexcept; + iterator erase(iterator position); + iterator erase(const_iterator position); + iterator erase(const_iterator first, const_iterator last); + void swap(unordered_set&) noexcept/*(allocator_traits<Allocator>::is_always_equal::value && is_nothrow_swappable_v<Hash> && is_nothrow_swappable_v<Pred>)*/; + void clear() noexcept; - template<class H2, class P2> void merge(unordered_set<Key, H2, P2, Allocator>& source); - template<class H2, class P2> void merge(unordered_set<Key, H2, P2, Allocator>&& source); + template<class H2, class P2> void merge(unordered_set<Key, H2, P2, Allocator>& source); + template<class H2, class P2> void merge(unordered_set<Key, H2, P2, Allocator>&& source); - iterator find(const key_type& k); - const_iterator find(const key_type& k) const; - pair<iterator, iterator> equal_range(const key_type& k); - pair<const_iterator, const_iterator> equal_range(const key_type& k) const; - }; + iterator find(const key_type& k); + const_iterator find(const key_type& k) const; + pair<iterator, iterator> equal_range(const key_type& k); + pair<const_iterator, const_iterator> equal_range(const key_type& k) const; + }; } std::vector<std::vector<int>> returnValue(); @@ -668,11 +668,11 @@ std::vector<std::vector<int>> external_by_const_ref(const std::vector<std::vecto // *: Will be detected once extract destruction of unnamed temporaries and generate IR for them const std::vector<std::vector<int>>& return_self_by_ref(const std::vector<std::vector<int>>& v) { - return v; + return v; } std::vector<std::vector<int>> return_self_by_value(const std::vector<std::vector<int>>& v) { - return v; + return v; } void test() { @@ -686,34 +686,34 @@ void test() { for (auto x : returnRef()[0]) {} // GOOD for (auto x : returnRef().at(0)) {} // GOOD - for(auto it = returnValue().begin(); it != returnValue().end(); ++it) {} // BAD + 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(); - 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 = 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 - } + { + 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_ref(returnValue())) {} // BAD [NOT DETECTED] (see *) - for (auto x : return_self_by_value(returnValue())) {} // GOOD + for (auto x : return_self_by_value(returnValue())) {} // GOOD } From af7b1bc425ae521df6fda104a693372931d0f357 Mon Sep 17 00:00:00 2001 From: Chris Smowton <smowton@github.com> Date: Wed, 13 Mar 2024 10:10:23 +0000 Subject: [PATCH 411/430] Java: add test for partial gradle wrapper without gradle on the path Note I had to mimic the actual absence of Gradle by testing the case where it fails, but have manually verified a missing binary works too. --- .../.gitattributes | 6 + .../.gitignore | 5 + .../build.gradle | 30 +++ .../force_sequential_test_execution | 3 + .../gradle/verification-metadata.xml | 7 + .../gradle/wrapper/gradle-wrapper.properties | 5 + .../gradlew | 185 ++++++++++++++++++ .../gradlew.bat | 89 +++++++++ .../settings.gradle | 19 ++ .../src/main/java/com/example/App.java | 14 ++ .../src/test/java/com/example/AppTest.java | 14 ++ .../test.expected | 5 + .../test.py | 31 +++ .../test.ql | 7 + 14 files changed, 420 insertions(+) create mode 100644 java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/.gitattributes create mode 100644 java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/.gitignore create mode 100644 java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/build.gradle create mode 100644 java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/force_sequential_test_execution create mode 100644 java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradle/verification-metadata.xml create mode 100644 java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradle/wrapper/gradle-wrapper.properties create mode 100755 java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradlew create mode 100644 java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradlew.bat create mode 100644 java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/settings.gradle create mode 100644 java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/src/main/java/com/example/App.java create mode 100644 java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/src/test/java/com/example/AppTest.java create mode 100644 java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.expected create mode 100644 java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.py create mode 100644 java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.ql 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() } From e373341f62a133b45a1f86cdc8f730d81d4c468f Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Mon, 18 Mar 2024 15:47:38 +0000 Subject: [PATCH 412/430] C++: Add more tests. --- .../query-tests/Security/CWE/CWE-416/test.cpp | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) 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 index 3e2d7482975..506096ae144 100644 --- 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 @@ -717,3 +717,52 @@ void test() { for (auto x : return_self_by_value(returnValue())) {} // GOOD } + +template<typename T> +void iterate(const std::vector<T>& v) { + for (auto x : v) {} +} + +std::vector<int>& ref_to_first_in_returnValue_1() { + return returnValue()[0]; // BAD [NOT DETECTED] (see *) +} + +std::vector<int>& ref_to_first_in_returnValue_2() { + return returnValue()[0]; // BAD [NOT DETECTED] +} + +std::vector<int>& ref_to_first_in_returnValue_3() { + return returnValue()[0]; // BAD [NOT DETECTED] (see *) +} + +std::vector<int> first_in_returnValue_1() { + return returnValue()[0]; // GOOD +} + +std::vector<int> first_in_returnValue_2() { + return returnValue()[0]; // GOOD +} + +void test2() { + iterate(returnValue()); // GOOD [FALSE POSITIVE] (see *) + iterate(returnValue()[0]); // GOOD [FALSE POSITIVE] (see *) + + 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) {} + } +} From b944f3b411f31c704db467696ac8c494bf2ab714 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Mon, 18 Mar 2024 15:54:53 +0000 Subject: [PATCH 413/430] C++: Fix FP. --- .../CWE/CWE-416/IteratorToExpiredContainer.ql | 14 ++++++++++++++ .../query-tests/Security/CWE/CWE-416/test.cpp | 4 ++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.ql b/cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.ql index cf3a22792fe..15f34aa8d15 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.ql @@ -80,6 +80,20 @@ 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<int>& v) { + // for(auto x : v) { ... } // this is fine since v outlives the loop + // } + // ... + // foo(create_temporary()) + // ``` + result instanceof DataFlow::FeatureHasSinkCallContext + } } module DestroyedToBeginFlow = DataFlow::Global<DestroyedToBeginConfig>; 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 index 506096ae144..4e5fcbd2149 100644 --- 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 @@ -744,8 +744,8 @@ std::vector<int> first_in_returnValue_2() { } void test2() { - iterate(returnValue()); // GOOD [FALSE POSITIVE] (see *) - iterate(returnValue()[0]); // GOOD [FALSE POSITIVE] (see *) + iterate(returnValue()); // GOOD + iterate(returnValue()[0]); // GOOD for (auto x : ref_to_first_in_returnValue_1()) {} From a21eea4ee07134616ede87612c3a4b196ec404fa Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Mon, 18 Mar 2024 11:46:55 +0000 Subject: [PATCH 414/430] C++: Generalize more predicates from booleans to abstract values. --- .../semmle/code/cpp/controlflow/IRGuards.qll | 63 ++++++++++--------- .../code/cpp/ir/implementation/EdgeKind.qll | 9 +++ 2 files changed, 42 insertions(+), 30 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index e7762fc9fa8..d714c1ecf30 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -446,7 +446,10 @@ class IRGuardCondition extends Instruction { /** 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) + exists(BooleanValue value | + compares_eq(this, left, right, k, areEqual, value) and + value.getValue() = testIsTrue + ) } /** @@ -455,8 +458,8 @@ class IRGuardCondition extends Instruction { */ 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) + exists(AbstractValue value | + compares_eq(this, left, right, k, areEqual, value) and this.valueControls(block, value) ) } @@ -468,9 +471,9 @@ class IRGuardCondition extends Instruction { 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) + exists(AbstractValue value | + compares_eq(this, left, right, k, areEqual, value) and + this.valueControlsEdge(pred, succ, value) ) } @@ -572,52 +575,52 @@ private Instruction getBranchForCondition(Instruction guard) { * 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 + Instruction test, Operand left, Operand right, int k, boolean areEqual, AbstractValue value ) { /* 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 + exists(AbstractValue v | simple_comparison_eq(test, left, right, k, v) | + areEqual = true and value = v or - areEqual = false and testIsTrue = eq.booleanNot() + areEqual = false and value = v.getDualValue() ) 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)) + exists(int mk | k = -mk | compares_eq(test, right, left, mk, areEqual, value)) or - complex_eq(test, left, right, k, areEqual, testIsTrue) + complex_eq(test, left, right, k, areEqual, value) 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) + exists(AbstractValue dual | value = dual.getDualValue() | + compares_eq(test.(LogicalNotInstruction).getUnary(), left, right, k, areEqual, dual) ) } /** Rearrange various simple comparisons into `left == right + k` form. */ private predicate simple_comparison_eq( - CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual + CompareInstruction cmp, Operand left, Operand right, int k, AbstractValue value ) { left = cmp.getLeftOperand() and cmp instanceof CompareEQInstruction and right = cmp.getRightOperand() and k = 0 and - areEqual = true + value.(BooleanValue).getValue() = true or left = cmp.getLeftOperand() and cmp instanceof CompareNEInstruction and right = cmp.getRightOperand() and k = 0 and - areEqual = false + value.(BooleanValue).getValue() = false } private predicate complex_eq( - CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, boolean testIsTrue + CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, AbstractValue value ) { - sub_eq(cmp, left, right, k, areEqual, testIsTrue) + sub_eq(cmp, left, right, k, areEqual, value) or - add_eq(cmp, left, right, k, areEqual, testIsTrue) + add_eq(cmp, left, right, k, areEqual, value) } /* @@ -768,31 +771,31 @@ private predicate add_lt( // 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 + CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, AbstractValue value ) { exists(SubInstruction lhs, int c, int x | - compares_eq(cmp, lhs.getAUse(), right, c, areEqual, testIsTrue) and + compares_eq(cmp, lhs.getAUse(), right, c, areEqual, value) 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 + compares_eq(cmp, left, rhs.getAUse(), c, areEqual, value) and right = rhs.getLeftOperand() and x = int_value(rhs.getRight()) and k = c - x ) or exists(PointerSubInstruction lhs, int c, int x | - compares_eq(cmp, lhs.getAUse(), right, c, areEqual, testIsTrue) and + compares_eq(cmp, lhs.getAUse(), right, c, areEqual, value) and left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) and k = c + x ) or exists(PointerSubInstruction rhs, int c, int x | - compares_eq(cmp, left, rhs.getAUse(), c, areEqual, testIsTrue) and + compares_eq(cmp, left, rhs.getAUse(), c, areEqual, value) and right = rhs.getLeftOperand() and x = int_value(rhs.getRight()) and k = c - x @@ -802,10 +805,10 @@ private predicate sub_eq( // 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 + CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, AbstractValue value ) { exists(AddInstruction lhs, int c, int x | - compares_eq(cmp, lhs.getAUse(), right, c, areEqual, testIsTrue) and + compares_eq(cmp, lhs.getAUse(), right, c, areEqual, value) and ( left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) or @@ -815,7 +818,7 @@ private predicate add_eq( ) or exists(AddInstruction rhs, int c, int x | - compares_eq(cmp, left, rhs.getAUse(), c, areEqual, testIsTrue) and + compares_eq(cmp, left, rhs.getAUse(), c, areEqual, value) and ( right = rhs.getLeftOperand() and x = int_value(rhs.getRight()) or @@ -825,7 +828,7 @@ private predicate add_eq( ) or exists(PointerAddInstruction lhs, int c, int x | - compares_eq(cmp, lhs.getAUse(), right, c, areEqual, testIsTrue) and + compares_eq(cmp, lhs.getAUse(), right, c, areEqual, value) and ( left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) or @@ -835,7 +838,7 @@ private predicate add_eq( ) or exists(PointerAddInstruction rhs, int c, int x | - compares_eq(cmp, left, rhs.getAUse(), c, areEqual, testIsTrue) and + compares_eq(cmp, left, rhs.getAUse(), c, areEqual, value) and ( right = rhs.getLeftOperand() and x = int_value(rhs.getRight()) or diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll index 91e1fe03e23..81db183fa63 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll @@ -90,6 +90,15 @@ class CaseEdge extends EdgeKind, TCaseEdge { * Gets the largest value of the switch expression for which control will flow along this edge. */ final string getMaxValue() { result = maxValue } + + /** + * Gets the unique value of the switch expression for which control will + * flow along this edge, if any. + */ + final string getValue() { + minValue = maxValue and + result = minValue + } } /** From 44045d3eed8403aea446f15e25bbfd451fe715e3 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Mon, 18 Mar 2024 12:26:15 +0000 Subject: [PATCH 415/430] C++: Add guards logic for constant comparisons. --- .../semmle/code/cpp/controlflow/IRGuards.qll | 124 ++++++++++++++++++ 1 file changed, 124 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index d714c1ecf30..60de332f847 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -452,6 +452,21 @@ class IRGuardCondition extends Instruction { ) } + /** Holds if (determined by this guard) `op == k` evaluates to `areEqual` if this expression evaluates to `testIsTrue`. */ + cached + predicate comparesEq(Operand op, int k, boolean areEqual, boolean testIsTrue) { + exists(MatchValue mv | + compares_eq(this, op, k, areEqual, mv) and + // A match value cannot be dualized, so `testIsTrue` is always true + testIsTrue = true + ) + or + exists(BooleanValue bv | + compares_eq(this, op, k, areEqual, bv) and + bv.getValue() = testIsTrue + ) + } + /** * Holds if (determined by this guard) `left == right + k` must be `areEqual` in `block`. * If `areEqual = false` then this implies `left != right + k`. @@ -463,6 +478,17 @@ class IRGuardCondition extends Instruction { ) } + /** + * Holds if (determined by this guard) `op == k` must be `areEqual` in `block`. + * If `areEqual = false` then this implies `op != k`. + */ + cached + predicate ensuresEq(Operand op, int k, IRBlock block, boolean areEqual) { + exists(AbstractValue value | + compares_eq(this, op, k, areEqual, value) and this.valueControls(block, value) + ) + } + /** * 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`. @@ -477,6 +503,18 @@ class IRGuardCondition extends Instruction { ) } + /** + * Holds if (determined by this guard) `op == k` must be `areEqual` on the edge from + * `pred` to `succ`. If `areEqual = false` then this implies `op != k`. + */ + cached + predicate ensuresEqEdge(Operand op, int k, IRBlock pred, IRBlock succ, boolean areEqual) { + exists(AbstractValue value | + compares_eq(this, op, k, areEqual, value) and + this.valueControlsEdge(pred, succ, value) + ) + } + /** * Holds if this condition controls `block`, meaning that `block` is only * entered if the value of this condition is `v`. This helper @@ -598,6 +636,33 @@ private predicate compares_eq( ) } +/** Holds if `op == k` is `areEqual` given that `test` is equal to `value`. */ +private predicate compares_eq( + Instruction test, Operand op, int k, boolean areEqual, AbstractValue value +) { + /* The simple case where the test *is* the comparison so areEqual = testIsTrue xor eq. */ + exists(AbstractValue v | simple_comparison_eq(test, op, k, v) | + areEqual = true and value = v + or + areEqual = false and value = v.getDualValue() + ) + or + complex_eq(test, op, k, areEqual, value) + or + /* (x is true => (op == k)) => (!x is false => (op == k)) */ + exists(AbstractValue dual | value = dual.getDualValue() | + compares_eq(test.(LogicalNotInstruction).getUnary(), op, k, areEqual, dual) + ) + or + // ((test is `areEqual` => op == const + k2) and const == `k1`) => + // test is `areEqual` => op == k1 + k2 + exists(int k1, int k2, ConstantInstruction const | + compares_eq(test, op, const.getAUse(), k2, areEqual, value) and + int_value(const) = k1 and + k = k1 + k2 + ) +} + /** Rearrange various simple comparisons into `left == right + k` form. */ private predicate simple_comparison_eq( CompareInstruction cmp, Operand left, Operand right, int k, AbstractValue value @@ -615,6 +680,15 @@ private predicate simple_comparison_eq( value.(BooleanValue).getValue() = false } +/** Rearrange various simple comparisons into `op == k` form. */ +private predicate simple_comparison_eq(Instruction test, Operand op, int k, AbstractValue value) { + exists(SwitchInstruction switch | + test = switch.getExpression() and + op.getDef() = test and + value.(MatchValue).getCase().getValue().toInt() = k + ) +} + private predicate complex_eq( CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, AbstractValue value ) { @@ -623,6 +697,14 @@ private predicate complex_eq( add_eq(cmp, left, right, k, areEqual, value) } +private predicate complex_eq( + Instruction test, Operand op, int k, boolean areEqual, AbstractValue value +) { + sub_eq(test, op, k, areEqual, value) + or + add_eq(test, op, k, areEqual, value) +} + /* * Simplification of inequality expressions * Simplify conditions in the source to the canonical form l < r + k. @@ -802,6 +884,23 @@ private predicate sub_eq( ) } +// op - x == c => op == (c+x) +private predicate sub_eq(Instruction test, Operand op, int k, boolean areEqual, AbstractValue value) { + exists(SubInstruction sub, int c, int x | + compares_eq(test, sub.getAUse(), c, areEqual, value) and + op = sub.getLeftOperand() and + x = int_value(sub.getRight()) and + k = c + x + ) + or + exists(PointerSubInstruction sub, int c, int x | + compares_eq(test, sub.getAUse(), c, areEqual, value) and + op = sub.getLeftOperand() and + x = int_value(sub.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( @@ -848,5 +947,30 @@ private predicate add_eq( ) } +// left + x == right + c => left == right + (c-x) +private predicate add_eq( + Instruction test, Operand left, int k, boolean areEqual, AbstractValue value +) { + exists(AddInstruction lhs, int c, int x | + compares_eq(test, lhs.getAUse(), c, areEqual, value) 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(PointerAddInstruction lhs, int c, int x | + compares_eq(test, lhs.getAUse(), c, areEqual, value) and + ( + left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) + or + left = lhs.getRightOperand() and x = int_value(lhs.getLeft()) + ) and + k = c - x + ) +} + /** The int value of integer constant expression. */ private int int_value(Instruction i) { result = i.(IntegerConstantInstruction).getValue().toInt() } From decede51dc1ee2db399631bd80f25aa650213071 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Mon, 18 Mar 2024 13:54:30 +0000 Subject: [PATCH 416/430] C++: Use the new predicate in 'ScanfChecks.qll'. --- cpp/ql/src/Critical/ScanfChecks.qll | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/cpp/ql/src/Critical/ScanfChecks.qll b/cpp/ql/src/Critical/ScanfChecks.qll index b2464ecc9f4..403df4715f3 100644 --- a/cpp/ql/src/Critical/ScanfChecks.qll +++ b/cpp/ql/src/Critical/ScanfChecks.qll @@ -11,7 +11,7 @@ private predicate exprInBooleanContext(Expr e) { exists(IRGuardCondition gc | exists(Instruction i | i.getUnconvertedResultExpression() = e and - gc.comparesEq(valueNumber(i).getAUse(), zero(), 0, _, _) + gc.comparesEq(valueNumber(i).getAUse(), 0, _, _) ) or gc.getUnconvertedResultExpression() = e @@ -36,10 +36,6 @@ private string getEofValue() { ) } -private ConstantInstruction getEofInstruction() { result.getValue() = getEofValue() } - -private Operand eof() { result.getDef() = getEofInstruction() } - /** * Holds if the value of `call` has been checked to not equal `EOF`. */ @@ -47,7 +43,7 @@ private predicate checkedForEof(ScanfFunctionCall call) { exists(IRGuardCondition gc | exists(Instruction i | i.getUnconvertedResultExpression() = call | // call == EOF - gc.comparesEq(valueNumber(i).getAUse(), eof(), 0, _, _) + gc.comparesEq(valueNumber(i).getAUse(), getEofValue().toInt(), _, _) or // call < 0 (EOF is guaranteed to be negative) gc.comparesLt(valueNumber(i).getAUse(), zero(), 0, true, _) From dbd47b387afb25bce808877198cb5a2bfb0714de Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Mon, 18 Mar 2024 16:26:36 +0000 Subject: [PATCH 417/430] C++: Add AST wrappers for the new predicates. --- .../semmle/code/cpp/controlflow/IRGuards.qll | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index 60de332f847..ddc380c304f 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -137,6 +137,17 @@ class GuardCondition extends Expr { */ cached predicate ensuresEq(Expr left, Expr right, int k, BasicBlock block, boolean areEqual) { none() } + + /** Holds if (determined by this guard) `e == k` evaluates to `areEqual` if this expression evaluates to `testIsTrue`. */ + cached + predicate comparesEq(Expr e, int k, boolean areEqual, boolean testIsTrue) { none() } + + /** + * Holds if (determined by this guard) `e == k` must be `areEqual` in `block`. + * If `areEqual = false` then this implies `e != k`. + */ + cached + predicate ensuresEq(Expr e, int k, BasicBlock block, boolean areEqual) { none() } } /** @@ -184,6 +195,20 @@ private class GuardConditionFromBinaryLogicalOperator extends GuardCondition { this.comparesEq(left, right, k, areEqual, testIsTrue) and this.controls(block, testIsTrue) ) } + + override predicate comparesEq(Expr e, int k, boolean areEqual, boolean testIsTrue) { + exists(boolean partIsTrue, GuardCondition part | + this.(BinaryLogicalOperation).impliesValue(part, partIsTrue, testIsTrue) + | + part.comparesEq(e, k, areEqual, partIsTrue) + ) + } + + override predicate ensuresEq(Expr e, int k, BasicBlock block, boolean areEqual) { + exists(boolean testIsTrue | + this.comparesEq(e, k, areEqual, testIsTrue) and this.controls(block, testIsTrue) + ) + } } /** @@ -245,6 +270,21 @@ private class GuardConditionFromIR extends GuardCondition { ) } + override predicate comparesEq(Expr e, int k, boolean areEqual, boolean testIsTrue) { + exists(Instruction i | + i.getUnconvertedResultExpression() = e and + ir.comparesEq(i.getAUse(), k, areEqual, testIsTrue) + ) + } + + override predicate ensuresEq(Expr e, int k, BasicBlock block, boolean areEqual) { + exists(Instruction i, boolean testIsTrue | + i.getUnconvertedResultExpression() = e and + ir.comparesEq(i.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 `v`. This helper From 032678a367bc849f55dfa90baba9f2548436212d Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Mon, 18 Mar 2024 16:27:10 +0000 Subject: [PATCH 418/430] C++: Extend tests to also test the new predicates. --- .../controlflow/guards-ir/tests.ql | 89 ++++++++++++++----- .../controlflow/guards/GuardsCompare.ql | 28 ++++-- 2 files changed, 87 insertions(+), 30 deletions(-) diff --git a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql index fe3d92d2c2b..263c30c2fec 100644 --- a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql +++ b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql @@ -4,22 +4,32 @@ import semmle.code.cpp.controlflow.IRGuards query predicate astGuards(GuardCondition guard) { any() } query predicate astGuardsCompare(int startLine, string msg) { - exists(GuardCondition guard, Expr left, Expr right, int k, string which, string op | + exists(GuardCondition guard, Expr left, int k, string which, string op | exists(boolean sense | sense = true and which = "true" or sense = false and which = "false" | - guard.comparesLt(left, right, k, true, sense) and op = " < " + exists(Expr right | + guard.comparesLt(left, right, k, true, sense) and op = " < " + or + guard.comparesLt(left, right, k, false, sense) and op = " >= " + or + guard.comparesEq(left, right, k, true, sense) and op = " == " + or + guard.comparesEq(left, right, k, false, sense) and op = " != " + | + msg = left + op + right + "+" + k + " when " + guard + " is " + which + ) or - guard.comparesLt(left, right, k, false, sense) and op = " >= " - or - guard.comparesEq(left, right, k, true, sense) and op = " == " - or - guard.comparesEq(left, right, k, false, sense) and op = " != " + ( + guard.comparesEq(left, k, true, sense) and op = " == " + or + guard.comparesEq(left, k, false, sense) and op = " != " + ) and + msg = left + op + k + " when " + guard + " is " + which ) and - startLine = guard.getLocation().getStartLine() and - msg = left + op + right + "+" + k + " when " + guard + " is " + which + startLine = guard.getLocation().getStartLine() ) } @@ -46,28 +56,52 @@ query predicate astGuardsEnsure( ) } +query predicate astGuardsEnsure_const( + GuardCondition guard, Expr left, string op, int k, int start, int end +) { + exists(BasicBlock block | + guard.ensuresEq(left, k, block, true) and op = "==" + or + guard.ensuresEq(left, k, block, false) and op = "!=" + | + block.hasLocationInfo(_, start, _, end, _) + ) +} + query predicate irGuards(IRGuardCondition guard) { any() } query predicate irGuardsCompare(int startLine, string msg) { - exists(IRGuardCondition guard, Operand left, Operand right, int k, string which, string op | + exists(IRGuardCondition guard, Operand left, int k, string which, string op | exists(boolean sense | sense = true and which = "true" or sense = false and which = "false" | - guard.comparesLt(left, right, k, true, sense) and op = " < " + exists(Operand right | + guard.comparesLt(left, right, k, true, sense) and op = " < " + or + guard.comparesLt(left, right, k, false, sense) and op = " >= " + or + guard.comparesEq(left, right, k, true, sense) and op = " == " + or + guard.comparesEq(left, right, k, false, sense) and op = " != " + | + msg = + left.getAnyDef().getUnconvertedResultExpression() + op + + right.getAnyDef().getUnconvertedResultExpression() + "+" + k + " when " + guard + " is " + + which + ) or - guard.comparesLt(left, right, k, false, sense) and op = " >= " - or - guard.comparesEq(left, right, k, true, sense) and op = " == " - or - guard.comparesEq(left, right, k, false, sense) and op = " != " + ( + guard.comparesEq(left, k, true, sense) and op = " == " + or + guard.comparesEq(left, k, false, sense) and op = " != " + ) and + msg = + left.getAnyDef().getUnconvertedResultExpression() + op + k + " when " + guard + " is " + + which ) and - startLine = guard.getLocation().getStartLine() and - msg = - left.getAnyDef().getUnconvertedResultExpression() + op + - right.getAnyDef().getUnconvertedResultExpression() + "+" + k + " when " + guard + " is " + - which + startLine = guard.getLocation().getStartLine() ) } @@ -95,3 +129,16 @@ query predicate irGuardsEnsure( block.getLocation().hasLocationInfo(_, start, _, end, _) ) } + +query predicate irGuardsEnsure_const( + IRGuardCondition guard, Instruction left, string op, int k, int start, int end +) { + exists(IRBlock block, Operand leftOp | + guard.ensuresEq(leftOp, k, block, true) and op = "==" + or + guard.ensuresEq(leftOp, k, block, false) and op = "!=" + | + leftOp = left.getAUse() and + block.getLocation().hasLocationInfo(_, start, _, end, _) + ) +} diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql index a1373b2923b..17d4fcaae94 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql @@ -7,20 +7,30 @@ import cpp import semmle.code.cpp.controlflow.Guards -from GuardCondition guard, Expr left, Expr right, int k, string which, string op, string msg +from GuardCondition guard, Expr left, int k, string which, string op, string msg where exists(boolean sense | sense = true and which = "true" or sense = false and which = "false" | - guard.comparesLt(left, right, k, true, sense) and op = " < " + exists(Expr right | + guard.comparesLt(left, right, k, true, sense) and op = " < " + or + guard.comparesLt(left, right, k, false, sense) and op = " >= " + or + guard.comparesEq(left, right, k, true, sense) and op = " == " + or + guard.comparesEq(left, right, k, false, sense) and op = " != " + | + msg = left + op + right + "+" + k + " when " + guard + " is " + which + ) or - guard.comparesLt(left, right, k, false, sense) and op = " >= " - or - guard.comparesEq(left, right, k, true, sense) and op = " == " - or - guard.comparesEq(left, right, k, false, sense) and op = " != " - ) and - msg = left + op + right + "+" + k + " when " + guard + " is " + which + ( + guard.comparesEq(left, k, true, sense) and op = " == " + or + guard.comparesEq(left, k, false, sense) and op = " != " + ) and + msg = left + op + k + " when " + guard + " is " + which + ) select guard.getLocation().getStartLine(), msg From 40dbc6fdd9e50c7b8d5cfc49fd741510e9b001e3 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Mon, 18 Mar 2024 16:27:18 +0000 Subject: [PATCH 419/430] C++: Accept test changes. --- .../controlflow/guards-ir/tests.expected | 88 +++++++++++++++++++ .../controlflow/guards/GuardsCompare.expected | 27 ++++++ 2 files changed, 115 insertions(+) diff --git a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected index ac8068e768d..2eb749580b4 100644 --- a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected +++ b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected @@ -62,7 +62,9 @@ astGuardsCompare | 26 | x >= 0+1 when ... > ... is true | | 31 | - ... != x+0 when ... == ... is false | | 31 | - ... == x+0 when ... == ... is true | +| 31 | x != -1 when ... == ... is false | | 31 | x != - ...+0 when ... == ... is false | +| 31 | x == -1 when ... == ... is true | | 31 | x == - ...+0 when ... == ... is true | | 34 | 10 < j+1 when ... < ... is false | | 34 | 10 >= j+1 when ... < ... is true | @@ -86,15 +88,20 @@ astGuardsCompare | 58 | 0 < y+1 when ... \|\| ... is false | | 58 | 0 == x+0 when ... == ... is true | | 58 | 0 >= y+1 when ... < ... is true | +| 58 | x != 0 when ... == ... is false | +| 58 | x != 0 when ... \|\| ... is false | | 58 | x != 0+0 when ... == ... is false | | 58 | x != 0+0 when ... \|\| ... is false | +| 58 | x == 0 when ... == ... is true | | 58 | x == 0+0 when ... == ... is true | | 58 | y < 0+0 when ... < ... is true | | 58 | y >= 0+0 when ... < ... is false | | 58 | y >= 0+0 when ... \|\| ... is false | | 75 | 0 != x+0 when ... == ... is false | | 75 | 0 == x+0 when ... == ... is true | +| 75 | x != 0 when ... == ... is false | | 75 | x != 0+0 when ... == ... is false | +| 75 | x == 0 when ... == ... is true | | 75 | x == 0+0 when ... == ... is true | | 85 | 0 != x+0 when ... == ... is false | | 85 | 0 != y+0 when ... != ... is true | @@ -102,15 +109,23 @@ astGuardsCompare | 85 | 0 == x+0 when ... && ... is true | | 85 | 0 == x+0 when ... == ... is true | | 85 | 0 == y+0 when ... != ... is false | +| 85 | x != 0 when ... == ... is false | | 85 | x != 0+0 when ... == ... is false | +| 85 | x == 0 when ... && ... is true | +| 85 | x == 0 when ... == ... is true | | 85 | x == 0+0 when ... && ... is true | | 85 | x == 0+0 when ... == ... is true | +| 85 | y != 0 when ... != ... is true | +| 85 | y != 0 when ... && ... is true | | 85 | y != 0+0 when ... != ... is true | | 85 | y != 0+0 when ... && ... is true | +| 85 | y == 0 when ... != ... is false | | 85 | y == 0+0 when ... != ... is false | | 94 | 0 != x+0 when ... != ... is true | | 94 | 0 == x+0 when ... != ... is false | +| 94 | x != 0 when ... != ... is true | | 94 | x != 0+0 when ... != ... is true | +| 94 | x == 0 when ... != ... is false | | 94 | x == 0+0 when ... != ... is false | | 102 | 10 < j+1 when ... < ... is false | | 102 | 10 >= j+1 when ... < ... is true | @@ -122,8 +137,11 @@ astGuardsCompare | 109 | 0 < y+1 when ... \|\| ... is false | | 109 | 0 == x+0 when ... == ... is true | | 109 | 0 >= y+1 when ... < ... is true | +| 109 | x != 0 when ... == ... is false | +| 109 | x != 0 when ... \|\| ... is false | | 109 | x != 0+0 when ... == ... is false | | 109 | x != 0+0 when ... \|\| ... is false | +| 109 | x == 0 when ... == ... is true | | 109 | x == 0+0 when ... == ... is true | | 109 | y < 0+0 when ... < ... is true | | 109 | y >= 0+0 when ... < ... is false | @@ -162,7 +180,9 @@ astGuardsCompare | 165 | y >= x+43 when ... < ... is true | | 175 | 0 != call to foo+0 when ... == ... is false | | 175 | 0 == call to foo+0 when ... == ... is true | +| 175 | call to foo != 0 when ... == ... is false | | 175 | call to foo != 0+0 when ... == ... is false | +| 175 | call to foo == 0 when ... == ... is true | | 175 | call to foo == 0+0 when ... == ... is true | astGuardsControl | test.c:7:9:7:13 | ... > ... | false | 10 | 11 | @@ -443,6 +463,34 @@ astGuardsEnsure | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | != | test.cpp:31:7:31:7 | x | 0 | 34 | 34 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | == | test.cpp:31:7:31:7 | x | 0 | 30 | 30 | | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | == | test.cpp:31:7:31:7 | x | 0 | 31 | 32 | +astGuardsEnsure_const +| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | 0 | 58 | 58 | +| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | 0 | 62 | 62 | +| test.c:58:9:58:23 | ... \|\| ... | test.c:58:9:58:9 | x | != | 0 | 62 | 62 | +| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:9 | x | != | 0 | 78 | 79 | +| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:9 | x | == | 0 | 75 | 77 | +| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:8 | x | == | 0 | 85 | 85 | +| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:8 | x | == | 0 | 86 | 86 | +| test.c:85:8:85:23 | ... && ... | test.c:85:8:85:8 | x | == | 0 | 86 | 86 | +| test.c:85:8:85:23 | ... && ... | test.c:85:18:85:18 | y | != | 0 | 86 | 86 | +| test.c:85:18:85:23 | ... != ... | test.c:85:18:85:18 | y | != | 0 | 86 | 86 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | != | 0 | 94 | 96 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 70 | 70 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 99 | 102 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 102 | 102 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 107 | 109 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 109 | 109 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 109 | 117 | +| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 113 | 113 | +| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:9 | x | != | 0 | 109 | 109 | +| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:9 | x | != | 0 | 113 | 113 | +| test.c:109:9:109:23 | ... \|\| ... | test.c:109:9:109:9 | x | != | 0 | 113 | 113 | +| test.c:175:13:175:32 | ... == ... | test.c:175:13:175:15 | call to foo | != | 0 | 175 | 175 | +| test.c:175:13:175:32 | ... == ... | test.c:175:13:175:15 | call to foo | == | 0 | 175 | 175 | +| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | 30 | 30 | +| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | 34 | 34 | +| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | -1 | 30 | 30 | +| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | -1 | 31 | 32 | irGuards | test.c:7:9:7:13 | CompareGT: ... > ... | | test.c:17:8:17:12 | CompareLT: ... < ... | @@ -497,7 +545,9 @@ irGuardsCompare | 26 | x >= 0+1 when CompareGT: ... > ... is true | | 31 | - ... != x+0 when CompareEQ: ... == ... is false | | 31 | - ... == x+0 when CompareEQ: ... == ... is true | +| 31 | x != -1 when CompareEQ: ... == ... is false | | 31 | x != - ...+0 when CompareEQ: ... == ... is false | +| 31 | x == -1 when CompareEQ: ... == ... is true | | 31 | x == - ...+0 when CompareEQ: ... == ... is true | | 34 | 10 < j+1 when CompareLT: ... < ... is false | | 34 | 10 >= j+1 when CompareLT: ... < ... is true | @@ -519,25 +569,35 @@ irGuardsCompare | 58 | 0 < y+1 when CompareLT: ... < ... is false | | 58 | 0 == x+0 when CompareEQ: ... == ... is true | | 58 | 0 >= y+1 when CompareLT: ... < ... is true | +| 58 | x != 0 when CompareEQ: ... == ... is false | | 58 | x != 0+0 when CompareEQ: ... == ... is false | +| 58 | x == 0 when CompareEQ: ... == ... is true | | 58 | x == 0+0 when CompareEQ: ... == ... is true | | 58 | y < 0+0 when CompareLT: ... < ... is true | | 58 | y >= 0+0 when CompareLT: ... < ... is false | | 75 | 0 != x+0 when CompareEQ: ... == ... is false | | 75 | 0 == x+0 when CompareEQ: ... == ... is true | +| 75 | x != 0 when CompareEQ: ... == ... is false | | 75 | x != 0+0 when CompareEQ: ... == ... is false | +| 75 | x == 0 when CompareEQ: ... == ... is true | | 75 | x == 0+0 when CompareEQ: ... == ... is true | | 85 | 0 != x+0 when CompareEQ: ... == ... is false | | 85 | 0 != y+0 when CompareNE: ... != ... is true | | 85 | 0 == x+0 when CompareEQ: ... == ... is true | | 85 | 0 == y+0 when CompareNE: ... != ... is false | +| 85 | x != 0 when CompareEQ: ... == ... is false | | 85 | x != 0+0 when CompareEQ: ... == ... is false | +| 85 | x == 0 when CompareEQ: ... == ... is true | | 85 | x == 0+0 when CompareEQ: ... == ... is true | +| 85 | y != 0 when CompareNE: ... != ... is true | | 85 | y != 0+0 when CompareNE: ... != ... is true | +| 85 | y == 0 when CompareNE: ... != ... is false | | 85 | y == 0+0 when CompareNE: ... != ... is false | | 94 | 0 != x+0 when CompareNE: ... != ... is true | | 94 | 0 == x+0 when CompareNE: ... != ... is false | +| 94 | x != 0 when CompareNE: ... != ... is true | | 94 | x != 0+0 when CompareNE: ... != ... is true | +| 94 | x == 0 when CompareNE: ... != ... is false | | 94 | x == 0+0 when CompareNE: ... != ... is false | | 102 | 10 < j+1 when CompareLT: ... < ... is false | | 102 | 10 >= j+1 when CompareLT: ... < ... is true | @@ -547,7 +607,9 @@ irGuardsCompare | 109 | 0 < y+1 when CompareLT: ... < ... is false | | 109 | 0 == x+0 when CompareEQ: ... == ... is true | | 109 | 0 >= y+1 when CompareLT: ... < ... is true | +| 109 | x != 0 when CompareEQ: ... == ... is false | | 109 | x != 0+0 when CompareEQ: ... == ... is false | +| 109 | x == 0 when CompareEQ: ... == ... is true | | 109 | x == 0+0 when CompareEQ: ... == ... is true | | 109 | y < 0+0 when CompareLT: ... < ... is true | | 109 | y >= 0+0 when CompareLT: ... < ... is false | @@ -585,7 +647,9 @@ irGuardsCompare | 165 | y >= x+43 when CompareLT: ... < ... is true | | 175 | 0 != call to foo+0 when CompareEQ: ... == ... is false | | 175 | 0 == call to foo+0 when CompareEQ: ... == ... is true | +| 175 | call to foo != 0 when CompareEQ: ... == ... is false | | 175 | call to foo != 0+0 when CompareEQ: ... == ... is false | +| 175 | call to foo == 0 when CompareEQ: ... == ... is true | | 175 | call to foo == 0+0 when CompareEQ: ... == ... is true | irGuardsControl | test.c:7:9:7:13 | CompareGT: ... > ... | false | 11 | 11 | @@ -841,3 +905,27 @@ irGuardsEnsure | test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:12:31:13 | Constant: - ... | != | test.cpp:31:7:31:7 | Load: x | 0 | 34 | 34 | | test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:12:31:13 | Constant: - ... | == | test.cpp:31:7:31:7 | Load: x | 0 | 30 | 30 | | test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:12:31:13 | Constant: - ... | == | test.cpp:31:7:31:7 | Load: x | 0 | 32 | 32 | +irGuardsEnsure_const +| test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:9:58:9 | Load: x | != | 0 | 58 | 58 | +| test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:9:58:9 | Load: x | != | 0 | 62 | 62 | +| test.c:75:9:75:14 | CompareEQ: ... == ... | test.c:75:9:75:9 | Load: x | != | 0 | 79 | 79 | +| test.c:75:9:75:14 | CompareEQ: ... == ... | test.c:75:9:75:9 | Load: x | == | 0 | 76 | 76 | +| test.c:85:8:85:13 | CompareEQ: ... == ... | test.c:85:8:85:8 | Load: x | == | 0 | 85 | 85 | +| test.c:85:8:85:13 | CompareEQ: ... == ... | test.c:85:8:85:8 | Load: x | == | 0 | 86 | 86 | +| test.c:85:18:85:23 | CompareNE: ... != ... | test.c:85:18:85:18 | Load: y | != | 0 | 86 | 86 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | != | 0 | 95 | 95 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 70 | 70 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 99 | 99 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 102 | 102 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 103 | 103 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 107 | 107 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 109 | 109 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 110 | 110 | +| test.c:94:11:94:16 | CompareNE: ... != ... | test.c:94:11:94:11 | Load: x | == | 0 | 113 | 113 | +| test.c:109:9:109:14 | CompareEQ: ... == ... | test.c:109:9:109:9 | Load: x | != | 0 | 109 | 109 | +| test.c:109:9:109:14 | CompareEQ: ... == ... | test.c:109:9:109:9 | Load: x | != | 0 | 113 | 113 | +| test.c:175:13:175:32 | CompareEQ: ... == ... | test.c:175:13:175:15 | Call: call to foo | != | 0 | 175 | 175 | +| test.c:175:13:175:32 | CompareEQ: ... == ... | test.c:175:13:175:15 | Call: call to foo | == | 0 | 175 | 175 | +| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | != | -1 | 34 | 34 | +| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | == | -1 | 30 | 30 | +| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | == | -1 | 32 | 32 | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected index 58068f3991d..5f714676b5c 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected @@ -20,7 +20,9 @@ | 26 | x >= 0+1 when ... > ... is true | | 31 | - ... != x+0 when ... == ... is false | | 31 | - ... == x+0 when ... == ... is true | +| 31 | x != -1 when ... == ... is false | | 31 | x != - ...+0 when ... == ... is false | +| 31 | x == -1 when ... == ... is true | | 31 | x == - ...+0 when ... == ... is true | | 34 | 10 < j+1 when ... < ... is false | | 34 | 10 >= j+1 when ... < ... is true | @@ -44,31 +46,53 @@ | 58 | 0 < y+1 when ... \|\| ... is false | | 58 | 0 == x+0 when ... == ... is true | | 58 | 0 >= y+1 when ... < ... is true | +| 58 | x != 0 when ... == ... is false | +| 58 | x != 0 when ... \|\| ... is false | | 58 | x != 0+0 when ... == ... is false | | 58 | x != 0+0 when ... \|\| ... is false | +| 58 | x == 0 when ... == ... is true | | 58 | x == 0+0 when ... == ... is true | | 58 | y < 0+0 when ... < ... is true | | 58 | y >= 0+0 when ... < ... is false | | 58 | y >= 0+0 when ... \|\| ... is false | +| 61 | i == 0 when i is true | +| 61 | i == 1 when i is true | +| 61 | i == 2 when i is true | +| 74 | i == 0 when i is true | +| 74 | i == 1 when i is true | +| 74 | i == 2 when i is true | | 75 | 0 != x+0 when ... == ... is false | | 75 | 0 == x+0 when ... == ... is true | +| 75 | x != 0 when ... == ... is false | | 75 | x != 0+0 when ... == ... is false | +| 75 | x == 0 when ... == ... is true | | 75 | x == 0+0 when ... == ... is true | +| 84 | i == 0 when i is true | +| 84 | i == 1 when i is true | +| 84 | i == 2 when i is true | | 85 | 0 != x+0 when ... == ... is false | | 85 | 0 != y+0 when ... != ... is true | | 85 | 0 != y+0 when ... && ... is true | | 85 | 0 == x+0 when ... && ... is true | | 85 | 0 == x+0 when ... == ... is true | | 85 | 0 == y+0 when ... != ... is false | +| 85 | x != 0 when ... == ... is false | | 85 | x != 0+0 when ... == ... is false | +| 85 | x == 0 when ... && ... is true | +| 85 | x == 0 when ... == ... is true | | 85 | x == 0+0 when ... && ... is true | | 85 | x == 0+0 when ... == ... is true | +| 85 | y != 0 when ... != ... is true | +| 85 | y != 0 when ... && ... is true | | 85 | y != 0+0 when ... != ... is true | | 85 | y != 0+0 when ... && ... is true | +| 85 | y == 0 when ... != ... is false | | 85 | y == 0+0 when ... != ... is false | | 94 | 0 != x+0 when ... != ... is true | | 94 | 0 == x+0 when ... != ... is false | +| 94 | x != 0 when ... != ... is true | | 94 | x != 0+0 when ... != ... is true | +| 94 | x == 0 when ... != ... is false | | 94 | x == 0+0 when ... != ... is false | | 102 | 10 < j+1 when ... < ... is false | | 102 | 10 >= j+1 when ... < ... is true | @@ -80,8 +104,11 @@ | 109 | 0 < y+1 when ... \|\| ... is false | | 109 | 0 == x+0 when ... == ... is true | | 109 | 0 >= y+1 when ... < ... is true | +| 109 | x != 0 when ... == ... is false | +| 109 | x != 0 when ... \|\| ... is false | | 109 | x != 0+0 when ... == ... is false | | 109 | x != 0+0 when ... \|\| ... is false | +| 109 | x == 0 when ... == ... is true | | 109 | x == 0+0 when ... == ... is true | | 109 | y < 0+0 when ... < ... is true | | 109 | y >= 0+0 when ... < ... is false | From e895f96a3a50b740da387fe77e8d8dd6159cc15c Mon Sep 17 00:00:00 2001 From: Harry Maclean <hmac@github.com> Date: Mon, 18 Mar 2024 17:55:02 +0000 Subject: [PATCH 420/430] Ruby: Taint flow to second block param in map When `map` is called on a hash, the values in the hash are passed to the second parameter of the block. --- ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll index b2a30beafc3..d2e51624b4e 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll @@ -1855,7 +1855,7 @@ module Enumerable { override predicate propagatesFlow(string input, string output, boolean preservesValue) { input = "Argument[self].Element[any]" and - output = "Argument[block].Parameter[0]" and + output = "Argument[block].Parameter[0, 1]" and preservesValue = true or input = "Argument[block].ReturnValue" and From 187a68bf766bf713b5ef93946bc4a1797598f621 Mon Sep 17 00:00:00 2001 From: Harry Maclean <hmac@github.com> Date: Mon, 18 Mar 2024 17:56:10 +0000 Subject: [PATCH 421/430] Ruby: Add flow summary for `Hash#keys` --- ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll index 4871d8d9924..ee90c3ee6e4 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll @@ -523,3 +523,13 @@ private class ValuesSummary extends SimpleSummarizedCallable { preservesValue = true } } + +private class KeysSummary extends SimpleSummarizedCallable { + KeysSummary() { this = "keys" } + + override predicate propagatesFlow(string input, string output, boolean preservesValue) { + input = "Argument[self].Element[any]" and + output = "ReturnValue.Element[?]" and + preservesValue = true + } +} From 9a8ec36a4f0e30b6c5b6553180327adaefbb6483 Mon Sep 17 00:00:00 2001 From: Chris Smowton <smowton@github.com> Date: Fri, 8 Mar 2024 14:47:32 +0000 Subject: [PATCH 422/430] Accept test changes --- .../test.expected | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) 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 9ad4eeeadc8..7768a1d28bd 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 @@ -32,6 +32,14 @@ methodWithDuplicate | AbstractCollection<String> | removeAll | Collection<?> | | AbstractCollection<String> | retainAll | Collection<?> | | AbstractCollection<String> | toArray | T[] | +| AbstractCollection<T> | add | T | +| AbstractCollection<T> | addAll | Collection<? extends T> | +| AbstractCollection<T> | contains | Object | +| AbstractCollection<T> | containsAll | Collection<?> | +| AbstractCollection<T> | remove | Object | +| AbstractCollection<T> | removeAll | Collection<?> | +| AbstractCollection<T> | retainAll | Collection<?> | +| AbstractCollection<T> | toArray | T[] | | AbstractList | add | E | | AbstractList | add | int | | AbstractList | addAll | Collection<? extends E> | @@ -169,6 +177,17 @@ methodWithDuplicate | Collection<String> | retainAll | Collection<?> | | Collection<String> | toArray | IntFunction<T[]> | | Collection<String> | toArray | T[] | +| Collection<T> | add | T | +| Collection<T> | addAll | Collection<? extends T> | +| Collection<T> | contains | Object | +| Collection<T> | containsAll | Collection<?> | +| Collection<T> | equals | Object | +| Collection<T> | remove | Object | +| Collection<T> | removeAll | Collection<?> | +| Collection<T> | removeIf | Predicate<? super T> | +| Collection<T> | retainAll | Collection<?> | +| Collection<T> | toArray | IntFunction<T[]> | +| Collection<T> | toArray | T[] | | Collection<V> | add | V | | Collection<V> | addAll | Collection<? extends V> | | Collection<V> | contains | Object | From 32b80f8cb182163f22370fb6cd3a79619ce37b2b Mon Sep 17 00:00:00 2001 From: Harry Maclean <hmac@github.com> Date: Tue, 19 Mar 2024 08:38:14 +0000 Subject: [PATCH 423/430] Ruby: Add tests for hash flow --- .../lib/codeql/ruby/frameworks/core/Array.qll | 1 + .../lib/codeql/ruby/frameworks/core/Hash.qll | 2 ++ .../dataflow/hash-flow/hash-flow.expected | 33 +++++++++++++++++++ .../dataflow/hash-flow/hash_flow.rb | 15 +++++++++ 4 files changed, 51 insertions(+) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll index d2e51624b4e..2da521e54a1 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll @@ -1855,6 +1855,7 @@ module Enumerable { override predicate propagatesFlow(string input, string output, boolean preservesValue) { input = "Argument[self].Element[any]" and + // For `Hash#map`, the value flows to parameter 1 output = "Argument[block].Parameter[0, 1]" and preservesValue = true or diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll index ee90c3ee6e4..7583498ed08 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll @@ -524,6 +524,8 @@ private class ValuesSummary extends SimpleSummarizedCallable { } } +// We don't (yet) track data flow through hash keys, but this is still useful in cases where a +// whole hash(like) object is tainted, such as `ActionController#params`. private class KeysSummary extends SimpleSummarizedCallable { KeysSummary() { this = "keys" } 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 d2da8837a56..23027a7d73f 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 @@ -1089,6 +1089,19 @@ edges | hash_flow.rb:994:30:994:40 | call to taint | hash_flow.rb:994:14:994:47 | ...[...] [element :b] | provenance | | | hash_flow.rb:996:14:996:15 | h2 [element :b] | hash_flow.rb:996:14:996:19 | ...[...] | provenance | | | hash_flow.rb:998:14:998:15 | h2 [element :b] | hash_flow.rb:998:14:998:18 | ...[...] | provenance | | +| hash_flow.rb:1006:5:1006:5 | [post] h [element] | hash_flow.rb:1007:12:1007:12 | h [element] | provenance | | +| hash_flow.rb:1006:14:1006:24 | call to taint | hash_flow.rb:1006:5:1006:5 | [post] h [element] | provenance | | +| hash_flow.rb:1007:5:1007:8 | keys [element] | hash_flow.rb:1008:10:1008:13 | keys [element] | provenance | | +| hash_flow.rb:1007:12:1007:12 | h [element] | hash_flow.rb:1007:12:1007:17 | call to keys [element] | provenance | | +| hash_flow.rb:1007:12:1007:17 | call to keys [element] | hash_flow.rb:1007:5:1007:8 | keys [element] | provenance | | +| hash_flow.rb:1008:10:1008:13 | keys [element] | hash_flow.rb:1008:10:1008:17 | ...[...] | provenance | | +| hash_flow.rb:1012:5:1012:5 | h [element :a] | hash_flow.rb:1013:5:1013:5 | h [element :a] | provenance | | +| hash_flow.rb:1012:9:1012:45 | call to [] [element :a] | hash_flow.rb:1012:5:1012:5 | h [element :a] | provenance | | +| hash_flow.rb:1012:14:1012:24 | call to taint | hash_flow.rb:1012:9:1012:45 | call to [] [element :a] | provenance | | +| hash_flow.rb:1013:5:1013:5 | h [element :a] | hash_flow.rb:1013:15:1013:15 | k | provenance | | +| hash_flow.rb:1013:5:1013:5 | h [element :a] | hash_flow.rb:1013:18:1013:18 | v | provenance | | +| hash_flow.rb:1013:15:1013:15 | k | hash_flow.rb:1015:14:1015:14 | k | provenance | | +| hash_flow.rb:1013:18:1013:18 | v | hash_flow.rb:1014:14:1014:14 | v | provenance | | nodes | hash_flow.rb:10:5:10:8 | hash [element 0] | semmle.label | hash [element 0] | | hash_flow.rb:10:5:10:8 | hash [element :a] | semmle.label | hash [element :a] | @@ -2251,6 +2264,21 @@ nodes | hash_flow.rb:996:14:996:19 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:998:14:998:15 | h2 [element :b] | semmle.label | h2 [element :b] | | hash_flow.rb:998:14:998:18 | ...[...] | semmle.label | ...[...] | +| hash_flow.rb:1006:5:1006:5 | [post] h [element] | semmle.label | [post] h [element] | +| hash_flow.rb:1006:14:1006:24 | call to taint | semmle.label | call to taint | +| hash_flow.rb:1007:5:1007:8 | keys [element] | semmle.label | keys [element] | +| hash_flow.rb:1007:12:1007:12 | h [element] | semmle.label | h [element] | +| hash_flow.rb:1007:12:1007:17 | call to keys [element] | semmle.label | call to keys [element] | +| hash_flow.rb:1008:10:1008:13 | keys [element] | semmle.label | keys [element] | +| hash_flow.rb:1008:10:1008:17 | ...[...] | semmle.label | ...[...] | +| hash_flow.rb:1012:5:1012:5 | h [element :a] | semmle.label | h [element :a] | +| hash_flow.rb:1012:9:1012:45 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:1012:14:1012:24 | call to taint | semmle.label | call to taint | +| hash_flow.rb:1013:5:1013:5 | h [element :a] | semmle.label | h [element :a] | +| hash_flow.rb:1013:15:1013:15 | k | semmle.label | k | +| hash_flow.rb:1013:18:1013:18 | v | semmle.label | v | +| hash_flow.rb:1014:14:1014:14 | v | semmle.label | v | +| hash_flow.rb:1015:14:1015:14 | k | semmle.label | k | subpaths hashLiteral | hash_flow.rb:10:12:21:5 | call to [] | @@ -2324,6 +2352,8 @@ hashLiteral | hash_flow.rb:946:13:950:5 | call to [] | | hash_flow.rb:971:9:971:38 | ...[...] | | hash_flow.rb:994:14:994:47 | ...[...] | +| hash_flow.rb:1005:9:1005:10 | call to [] | +| hash_flow.rb:1012:9:1012:45 | call to [] | #select | hash_flow.rb:22:10:22:17 | ...[...] | hash_flow.rb:11:15:11:24 | call to taint | hash_flow.rb:22:10:22:17 | ...[...] | $@ | hash_flow.rb:11:15:11:24 | call to taint | call to taint | | hash_flow.rb:24:10:24:17 | ...[...] | hash_flow.rb:13:12:13:21 | call to taint | hash_flow.rb:24:10:24:17 | ...[...] | $@ | hash_flow.rb:13:12:13:21 | call to taint | call to taint | @@ -2569,3 +2599,6 @@ hashLiteral | hash_flow.rb:975:10:975:13 | ...[...] | hash_flow.rb:971:23:971:31 | call to taint | hash_flow.rb:975:10:975:13 | ...[...] | $@ | hash_flow.rb:971:23:971:31 | call to taint | call to taint | | hash_flow.rb:996:14:996:19 | ...[...] | hash_flow.rb:994:30:994:40 | call to taint | hash_flow.rb:996:14:996:19 | ...[...] | $@ | hash_flow.rb:994:30:994:40 | call to taint | call to taint | | hash_flow.rb:998:14:998:18 | ...[...] | hash_flow.rb:994:30:994:40 | call to taint | hash_flow.rb:998:14:998:18 | ...[...] | $@ | hash_flow.rb:994:30:994:40 | call to taint | call to taint | +| hash_flow.rb:1008:10:1008:17 | ...[...] | hash_flow.rb:1006:14:1006:24 | call to taint | hash_flow.rb:1008:10:1008:17 | ...[...] | $@ | hash_flow.rb:1006:14:1006:24 | call to taint | call to taint | +| hash_flow.rb:1014:14:1014:14 | v | hash_flow.rb:1012:14:1012:24 | call to taint | hash_flow.rb:1014:14:1014:14 | v | $@ | hash_flow.rb:1012:14:1012:24 | call to taint | call to taint | +| hash_flow.rb:1015:14:1015:14 | k | hash_flow.rb:1012:14:1012:24 | call to taint | hash_flow.rb:1015:14:1015:14 | k | $@ | hash_flow.rb:1012:14:1012:24 | call to taint | call to taint | diff --git a/ruby/ql/test/library-tests/dataflow/hash-flow/hash_flow.rb b/ruby/ql/test/library-tests/dataflow/hash-flow/hash_flow.rb index 14c2504f959..b88f8c3a4d4 100644 --- a/ruby/ql/test/library-tests/dataflow/hash-flow/hash_flow.rb +++ b/ruby/ql/test/library-tests/dataflow/hash-flow/hash_flow.rb @@ -1000,3 +1000,18 @@ class M54 end M54.new.m54(:b) + +def m55 + h = {} + h[f()] = taint(55.1) + keys = h.keys + sink(keys[:a]) # $ hasValueFlow=55.1 +end + +def m56 + h = { a: taint(56.1), taint(56.2) => :b } + h.map do |k, v| + sink(v) # $ hasValueFlow=56.1 + sink(k) # $ MISSING: hasValueFlow=56.2 SPURIOUS: hasValueFlow=56.1 + end +end From dde148ee7ef4571b3b28b583d3cc76cea8dd377b Mon Sep 17 00:00:00 2001 From: Harry Maclean <hmac@github.com> Date: Tue, 19 Mar 2024 08:40:30 +0000 Subject: [PATCH 424/430] Ruby: add changenote --- ruby/ql/lib/change-notes/2024-03-19-activerecord-scopes.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 ruby/ql/lib/change-notes/2024-03-19-activerecord-scopes.md diff --git a/ruby/ql/lib/change-notes/2024-03-19-activerecord-scopes.md b/ruby/ql/lib/change-notes/2024-03-19-activerecord-scopes.md new file mode 100644 index 00000000000..963479568a0 --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-03-19-activerecord-scopes.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Data flow is now tracked through `ActiveRecord` scopes. From 0c3d9f75f4a48308ee2b40043d541ceee8ce9227 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Tue, 19 Mar 2024 09:41:58 +0000 Subject: [PATCH 425/430] C++: Add change note. --- .../2024-03-19-predicates-for-switches-as-guards.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards.md diff --git a/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards.md b/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards.md new file mode 100644 index 00000000000..3dde8805599 --- /dev/null +++ b/cpp/ql/lib/change-notes/2024-03-19-predicates-for-switches-as-guards.md @@ -0,0 +1,5 @@ +--- +category: feature +--- +* Added a predicate `GuardCondition.comparesEq/4` to query whether an expression is compared to a constant. +* Added a predicate `GuardCondition.ensuresEq/4` to query whether a basic block is guarded by an expression being equal to a constant. \ No newline at end of file From fd49871b9a69a08ca35dd6da1d0fc0235c971b73 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema <jketema@github.com> Date: Fri, 15 Mar 2024 15:13:34 +0100 Subject: [PATCH 426/430] C++: Handle destructors of temporaries with extended lifetimes --- .../library-tests/ir/ir/PrintAST.expected | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 3b369651304..87179ad8bf8 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -1883,6 +1883,12 @@ destructors_for_temps.cpp: # 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| <params>: # 33| getEntryPoint(): [BlockStmt] { ... } @@ -1914,6 +1920,12 @@ destructors_for_temps.cpp: # 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 @@ -11743,6 +11755,12 @@ ir.cpp: # 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 @@ -11838,6 +11856,12 @@ ir.cpp: # 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 From 350b239ed62d5747195bb68c73239f36acbcbfd0 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Tue, 19 Mar 2024 10:29:43 +0000 Subject: [PATCH 427/430] C++: Fix cartesian product in 'simple_comparison_eq'. --- cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index ddc380c304f..ab67d77f5cd 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -722,10 +722,12 @@ private predicate simple_comparison_eq( /** Rearrange various simple comparisons into `op == k` form. */ private predicate simple_comparison_eq(Instruction test, Operand op, int k, AbstractValue value) { - exists(SwitchInstruction switch | + exists(SwitchInstruction switch, CaseEdge case | test = switch.getExpression() and op.getDef() = test and - value.(MatchValue).getCase().getValue().toInt() = k + case = value.(MatchValue).getCase() and + exists(switch.getSuccessor(case)) and + case.getValue().toInt() = k ) } From d7afd7b2e1d2797528aaf9322cc997b76cb61d23 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen <mathiasvp@github.com> Date: Tue, 19 Mar 2024 10:54:35 +0000 Subject: [PATCH 428/430] C++: Accept test changes. --- .../library-tests/controlflow/guards/GuardsCompare.expected | 6 ------ 1 file changed, 6 deletions(-) diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected index 5f714676b5c..1057e8e1046 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected @@ -58,18 +58,12 @@ | 61 | i == 0 when i is true | | 61 | i == 1 when i is true | | 61 | i == 2 when i is true | -| 74 | i == 0 when i is true | -| 74 | i == 1 when i is true | -| 74 | i == 2 when i is true | | 75 | 0 != x+0 when ... == ... is false | | 75 | 0 == x+0 when ... == ... is true | | 75 | x != 0 when ... == ... is false | | 75 | x != 0+0 when ... == ... is false | | 75 | x == 0 when ... == ... is true | | 75 | x == 0+0 when ... == ... is true | -| 84 | i == 0 when i is true | -| 84 | i == 1 when i is true | -| 84 | i == 2 when i is true | | 85 | 0 != x+0 when ... == ... is false | | 85 | 0 != y+0 when ... != ... is true | | 85 | 0 != y+0 when ... && ... is true | From 22ddf2129b8f40a21332c67e3aa4132f27c5f47f Mon Sep 17 00:00:00 2001 From: Harry Maclean <hmac@github.com> Date: Tue, 19 Mar 2024 08:46:07 +0000 Subject: [PATCH 429/430] Ruby: remove isString from TSymbol --- ruby/ql/lib/codeql/ruby/ast/internal/Constant.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 7e479e3c8ee7a0246c50a63b3a069259ec08448f Mon Sep 17 00:00:00 2001 From: Harry Maclean <hmac@github.com> Date: Tue, 19 Mar 2024 13:47:45 +0000 Subject: [PATCH 430/430] Ruby: Fix Hash#keys flow summary --- .../lib/codeql/ruby/frameworks/core/Hash.qll | 4 +- .../dataflow/hash-flow/hash-flow.expected | 49 +++++++------------ .../dataflow/hash-flow/hash-flow.ql | 2 +- .../dataflow/hash-flow/hash_flow.rb | 9 ++-- 4 files changed, 24 insertions(+), 40 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll index 7583498ed08..38a9a70f0d3 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll @@ -530,8 +530,8 @@ private class KeysSummary extends SimpleSummarizedCallable { KeysSummary() { this = "keys" } override predicate propagatesFlow(string input, string output, boolean preservesValue) { - input = "Argument[self].Element[any]" and + input = "Argument[self]" and output = "ReturnValue.Element[?]" and - preservesValue = true + preservesValue = false } } 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 23027a7d73f..68cb5a53dc2 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 @@ -1089,19 +1089,13 @@ edges | hash_flow.rb:994:30:994:40 | call to taint | hash_flow.rb:994:14:994:47 | ...[...] [element :b] | provenance | | | hash_flow.rb:996:14:996:15 | h2 [element :b] | hash_flow.rb:996:14:996:19 | ...[...] | provenance | | | hash_flow.rb:998:14:998:15 | h2 [element :b] | hash_flow.rb:998:14:998:18 | ...[...] | provenance | | -| hash_flow.rb:1006:5:1006:5 | [post] h [element] | hash_flow.rb:1007:12:1007:12 | h [element] | provenance | | -| hash_flow.rb:1006:14:1006:24 | call to taint | hash_flow.rb:1006:5:1006:5 | [post] h [element] | provenance | | -| hash_flow.rb:1007:5:1007:8 | keys [element] | hash_flow.rb:1008:10:1008:13 | keys [element] | provenance | | -| hash_flow.rb:1007:12:1007:12 | h [element] | hash_flow.rb:1007:12:1007:17 | call to keys [element] | provenance | | -| hash_flow.rb:1007:12:1007:17 | call to keys [element] | hash_flow.rb:1007:5:1007:8 | keys [element] | provenance | | -| hash_flow.rb:1008:10:1008:13 | keys [element] | hash_flow.rb:1008:10:1008:17 | ...[...] | provenance | | -| hash_flow.rb:1012:5:1012:5 | h [element :a] | hash_flow.rb:1013:5:1013:5 | h [element :a] | provenance | | -| hash_flow.rb:1012:9:1012:45 | call to [] [element :a] | hash_flow.rb:1012:5:1012:5 | h [element :a] | provenance | | -| hash_flow.rb:1012:14:1012:24 | call to taint | hash_flow.rb:1012:9:1012:45 | call to [] [element :a] | provenance | | -| hash_flow.rb:1013:5:1013:5 | h [element :a] | hash_flow.rb:1013:15:1013:15 | k | provenance | | -| hash_flow.rb:1013:5:1013:5 | h [element :a] | hash_flow.rb:1013:18:1013:18 | v | provenance | | -| hash_flow.rb:1013:15:1013:15 | k | hash_flow.rb:1015:14:1015:14 | k | provenance | | -| hash_flow.rb:1013:18:1013:18 | v | hash_flow.rb:1014:14:1014:14 | v | provenance | | +| hash_flow.rb:1011:5:1011:5 | h [element :a] | hash_flow.rb:1012:5:1012:5 | h [element :a] | provenance | | +| hash_flow.rb:1011:9:1011:45 | call to [] [element :a] | hash_flow.rb:1011:5:1011:5 | h [element :a] | provenance | | +| hash_flow.rb:1011:14:1011:24 | call to taint | hash_flow.rb:1011:9:1011:45 | call to [] [element :a] | provenance | | +| hash_flow.rb:1012:5:1012:5 | h [element :a] | hash_flow.rb:1012:15:1012:15 | k | provenance | | +| hash_flow.rb:1012:5:1012:5 | h [element :a] | hash_flow.rb:1012:18:1012:18 | v | provenance | | +| hash_flow.rb:1012:15:1012:15 | k | hash_flow.rb:1014:14:1014:14 | k | provenance | | +| hash_flow.rb:1012:18:1012:18 | v | hash_flow.rb:1013:14:1013:14 | v | provenance | | nodes | hash_flow.rb:10:5:10:8 | hash [element 0] | semmle.label | hash [element 0] | | hash_flow.rb:10:5:10:8 | hash [element :a] | semmle.label | hash [element :a] | @@ -2264,21 +2258,14 @@ nodes | hash_flow.rb:996:14:996:19 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:998:14:998:15 | h2 [element :b] | semmle.label | h2 [element :b] | | hash_flow.rb:998:14:998:18 | ...[...] | semmle.label | ...[...] | -| hash_flow.rb:1006:5:1006:5 | [post] h [element] | semmle.label | [post] h [element] | -| hash_flow.rb:1006:14:1006:24 | call to taint | semmle.label | call to taint | -| hash_flow.rb:1007:5:1007:8 | keys [element] | semmle.label | keys [element] | -| hash_flow.rb:1007:12:1007:12 | h [element] | semmle.label | h [element] | -| hash_flow.rb:1007:12:1007:17 | call to keys [element] | semmle.label | call to keys [element] | -| hash_flow.rb:1008:10:1008:13 | keys [element] | semmle.label | keys [element] | -| hash_flow.rb:1008:10:1008:17 | ...[...] | semmle.label | ...[...] | +| hash_flow.rb:1011:5:1011:5 | h [element :a] | semmle.label | h [element :a] | +| hash_flow.rb:1011:9:1011:45 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:1011:14:1011:24 | call to taint | semmle.label | call to taint | | hash_flow.rb:1012:5:1012:5 | h [element :a] | semmle.label | h [element :a] | -| hash_flow.rb:1012:9:1012:45 | call to [] [element :a] | semmle.label | call to [] [element :a] | -| hash_flow.rb:1012:14:1012:24 | call to taint | semmle.label | call to taint | -| hash_flow.rb:1013:5:1013:5 | h [element :a] | semmle.label | h [element :a] | -| hash_flow.rb:1013:15:1013:15 | k | semmle.label | k | -| hash_flow.rb:1013:18:1013:18 | v | semmle.label | v | -| hash_flow.rb:1014:14:1014:14 | v | semmle.label | v | -| hash_flow.rb:1015:14:1015:14 | k | semmle.label | k | +| hash_flow.rb:1012:15:1012:15 | k | semmle.label | k | +| hash_flow.rb:1012:18:1012:18 | v | semmle.label | v | +| hash_flow.rb:1013:14:1013:14 | v | semmle.label | v | +| hash_flow.rb:1014:14:1014:14 | k | semmle.label | k | subpaths hashLiteral | hash_flow.rb:10:12:21:5 | call to [] | @@ -2352,8 +2339,7 @@ hashLiteral | hash_flow.rb:946:13:950:5 | call to [] | | hash_flow.rb:971:9:971:38 | ...[...] | | hash_flow.rb:994:14:994:47 | ...[...] | -| hash_flow.rb:1005:9:1005:10 | call to [] | -| hash_flow.rb:1012:9:1012:45 | call to [] | +| hash_flow.rb:1011:9:1011:45 | call to [] | #select | hash_flow.rb:22:10:22:17 | ...[...] | hash_flow.rb:11:15:11:24 | call to taint | hash_flow.rb:22:10:22:17 | ...[...] | $@ | hash_flow.rb:11:15:11:24 | call to taint | call to taint | | hash_flow.rb:24:10:24:17 | ...[...] | hash_flow.rb:13:12:13:21 | call to taint | hash_flow.rb:24:10:24:17 | ...[...] | $@ | hash_flow.rb:13:12:13:21 | call to taint | call to taint | @@ -2599,6 +2585,5 @@ hashLiteral | hash_flow.rb:975:10:975:13 | ...[...] | hash_flow.rb:971:23:971:31 | call to taint | hash_flow.rb:975:10:975:13 | ...[...] | $@ | hash_flow.rb:971:23:971:31 | call to taint | call to taint | | hash_flow.rb:996:14:996:19 | ...[...] | hash_flow.rb:994:30:994:40 | call to taint | hash_flow.rb:996:14:996:19 | ...[...] | $@ | hash_flow.rb:994:30:994:40 | call to taint | call to taint | | hash_flow.rb:998:14:998:18 | ...[...] | hash_flow.rb:994:30:994:40 | call to taint | hash_flow.rb:998:14:998:18 | ...[...] | $@ | hash_flow.rb:994:30:994:40 | call to taint | call to taint | -| hash_flow.rb:1008:10:1008:17 | ...[...] | hash_flow.rb:1006:14:1006:24 | call to taint | hash_flow.rb:1008:10:1008:17 | ...[...] | $@ | hash_flow.rb:1006:14:1006:24 | call to taint | call to taint | -| hash_flow.rb:1014:14:1014:14 | v | hash_flow.rb:1012:14:1012:24 | call to taint | hash_flow.rb:1014:14:1014:14 | v | $@ | hash_flow.rb:1012:14:1012:24 | call to taint | call to taint | -| hash_flow.rb:1015:14:1015:14 | k | hash_flow.rb:1012:14:1012:24 | call to taint | hash_flow.rb:1015:14:1015:14 | k | $@ | hash_flow.rb:1012:14:1012:24 | call to taint | call to taint | +| hash_flow.rb:1013:14:1013:14 | v | hash_flow.rb:1011:14:1011:24 | call to taint | hash_flow.rb:1013:14:1013:14 | v | $@ | hash_flow.rb:1011:14:1011:24 | call to taint | call to taint | +| hash_flow.rb:1014:14:1014:14 | k | hash_flow.rb:1011:14:1011:24 | call to taint | hash_flow.rb:1014:14:1014:14 | k | $@ | hash_flow.rb:1011:14:1011:24 | call to taint | call to taint | diff --git a/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.ql b/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.ql index e3b694d3e75..5ec8ec0a0d6 100644 --- a/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.ql +++ b/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.ql @@ -5,7 +5,7 @@ import codeql.ruby.AST import codeql.ruby.CFG import TestUtilities.InlineFlowTest -import ValueFlowTest<DefaultFlowConfig> +import DefaultFlowTest import ValueFlow::PathGraph query predicate hashLiteral(CfgNodes::ExprNodes::HashLiteralCfgNode n) { any() } diff --git a/ruby/ql/test/library-tests/dataflow/hash-flow/hash_flow.rb b/ruby/ql/test/library-tests/dataflow/hash-flow/hash_flow.rb index b88f8c3a4d4..edc1e325b09 100644 --- a/ruby/ql/test/library-tests/dataflow/hash-flow/hash_flow.rb +++ b/ruby/ql/test/library-tests/dataflow/hash-flow/hash_flow.rb @@ -59,7 +59,7 @@ def m3() x = {a: taint(3.2), b: 1} hash2 = Hash[x] sink(hash2[:a]) # $ hasValueFlow=3.2 - sink(hash2[:b]) + sink(hash2[:b]) # $ hasTaintFlow=3.2 hash3 = Hash[[[:a, taint(3.3)], [:b, 1]]] sink(hash3[:a]) # $ hasValueFlow=3.3 @@ -75,7 +75,7 @@ def m3() hash6 = Hash[{"a" => taint(3.6), "b" => 1}] sink(hash6["a"]) # $ hasValueFlow=3.6 - sink(hash6["b"]) + sink(hash6["b"]) # $ hasTaintFlow=3.6 end m3() @@ -1002,10 +1002,9 @@ end M54.new.m54(:b) def m55 - h = {} - h[f()] = taint(55.1) + h = taint(55.1) keys = h.keys - sink(keys[:a]) # $ hasValueFlow=55.1 + sink(keys[f()]) # $ hasTaintFlow=55.1 end def m56

    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 MxWkdUXYiOj!D6PKuzO7ZGFQ*kJvOJsWQWu1 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 MxWkdUXYiOj!D6PKuzO7ZGFQ*kJvOJsWQWu1 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