diff --git a/extractor/dbscheme/tables.go b/extractor/dbscheme/tables.go
index 0a968fd8ecd..8da7312dfb8 100644
--- a/extractor/dbscheme/tables.go
+++ b/extractor/dbscheme/tables.go
@@ -896,16 +896,12 @@ var NumlinesTable = NewTable("numlines",
var FilesTable = NewTable("files",
EntityColumn(FileType, "id").Key(),
StringColumn("name"),
- StringColumn("simple"),
- StringColumn("ext"),
- IntColumn("fromSource"),
)
// FoldersTable is the table defining folder entities
var FoldersTable = NewTable("folders",
EntityColumn(FolderType, "id").Key(),
StringColumn("name"),
- StringColumn("simple"),
)
// ContainerParentTable is the table defining the parent-child relation among container entities
diff --git a/extractor/extractor.go b/extractor/extractor.go
index 2c625ef00a0..4208a788d02 100644
--- a/extractor/extractor.go
+++ b/extractor/extractor.go
@@ -590,15 +590,6 @@ func (extraction *Extraction) extractFile(ast *ast.File, pkg *packages.Package)
return nil
}
-// stemAndExt splits a given file name into its stem (the part before the last '.')
-// and extension (the part after the last '.')
-func stemAndExt(base string) (string, string) {
- if i := strings.LastIndexByte(base, '.'); i >= 0 {
- return base[:i], base[i+1:]
- }
- return base, ""
-}
-
// extractFileInfo extracts file-system level information for the given file, populating
// the `files` and `containerparent` tables
func (extraction *Extraction) extractFileInfo(tw *trap.Writer, file string) {
@@ -627,9 +618,8 @@ func (extraction *Extraction) extractFileInfo(tw *trap.Writer, file string) {
path = parentPath + "/" + component
}
if i == len(components)-1 {
- stem, ext := stemAndExt(component)
lbl := tw.Labeler.FileLabelFor(file)
- dbscheme.FilesTable.Emit(tw, lbl, path, stem, ext, 0)
+ dbscheme.FilesTable.Emit(tw, lbl, path)
dbscheme.ContainerParentTable.Emit(tw, parentLbl, lbl)
dbscheme.HasLocationTable.Emit(tw, lbl, emitLocation(tw, lbl, 0, 0, 0, 0))
extraction.Lock.Lock()
@@ -639,7 +629,7 @@ func (extraction *Extraction) extractFileInfo(tw *trap.Writer, file string) {
break
}
lbl := tw.Labeler.GlobalID(util.EscapeTrapSpecialChars(path) + ";folder")
- dbscheme.FoldersTable.Emit(tw, lbl, path, component)
+ dbscheme.FoldersTable.Emit(tw, lbl, path)
if i > 0 {
dbscheme.ContainerParentTable.Emit(tw, parentLbl, lbl)
}
diff --git a/ql/lib/go.dbscheme b/ql/lib/go.dbscheme
index b37faf5d62c..2842941c6f9 100644
--- a/ql/lib/go.dbscheme
+++ b/ql/lib/go.dbscheme
@@ -133,9 +133,9 @@ locations_default(unique int id: @location_default, int file: @file ref, int beg
numlines(int element_id: @sourceline ref, int num_lines: int ref, int num_code: int ref, int num_comment: int ref);
-files(unique int id: @file, string name: string ref, string simple: string ref, string ext: string ref, int fromSource: int ref);
+files(unique int id: @file, string name: string ref);
-folders(unique int id: @folder, string name: string ref, string simple: string ref);
+folders(unique int id: @folder, string name: string ref);
containerparent(int parent: @container ref, unique int child: @container ref);
diff --git a/ql/lib/go.dbscheme.stats b/ql/lib/go.dbscheme.stats
index 4a1886f84c2..b18e8556fb2 100644
--- a/ql/lib/go.dbscheme.stats
+++ b/ql/lib/go.dbscheme.stats
@@ -8175,18 +8175,6 @@
name
529
-
- simple
- 373
-
-
- ext
- 3
-
-
- fromSource
- 1
-
@@ -8205,54 +8193,6 @@
-
- id
- simple
-
-
- 12
-
-
- 1
- 2
- 529
-
-
-
-
-
-
- id
- ext
-
-
- 12
-
-
- 1
- 2
- 529
-
-
-
-
-
-
- id
- fromSource
-
-
- 12
-
-
- 1
- 2
- 529
-
-
-
-
-
name
id
@@ -8269,301 +8209,6 @@
-
- name
- simple
-
-
- 12
-
-
- 1
- 2
- 529
-
-
-
-
-
-
- name
- ext
-
-
- 12
-
-
- 1
- 2
- 529
-
-
-
-
-
-
- name
- fromSource
-
-
- 12
-
-
- 1
- 2
- 529
-
-
-
-
-
-
- simple
- id
-
-
- 12
-
-
- 1
- 2
- 301
-
-
- 2
- 3
- 47
-
-
- 3
- 22
- 25
-
-
-
-
-
-
- simple
- name
-
-
- 12
-
-
- 1
- 2
- 301
-
-
- 2
- 3
- 47
-
-
- 3
- 22
- 25
-
-
-
-
-
-
- simple
- ext
-
-
- 12
-
-
- 1
- 2
- 368
-
-
- 2
- 3
- 5
-
-
-
-
-
-
- simple
- fromSource
-
-
- 12
-
-
- 1
- 2
- 373
-
-
-
-
-
-
- ext
- id
-
-
- 12
-
-
- 1
- 2
- 1
-
-
- 14
- 15
- 1
-
-
- 514
- 515
- 1
-
-
-
-
-
-
- ext
- name
-
-
- 12
-
-
- 1
- 2
- 1
-
-
- 14
- 15
- 1
-
-
- 514
- 515
- 1
-
-
-
-
-
-
- ext
- simple
-
-
- 12
-
-
- 1
- 2
- 1
-
-
- 14
- 15
- 1
-
-
- 363
- 364
- 1
-
-
-
-
-
-
- ext
- fromSource
-
-
- 12
-
-
- 1
- 2
- 3
-
-
-
-
-
-
- fromSource
- id
-
-
- 12
-
-
- 529
- 530
- 1
-
-
-
-
-
-
- fromSource
- name
-
-
- 12
-
-
- 529
- 530
- 1
-
-
-
-
-
-
- fromSource
- simple
-
-
- 12
-
-
- 373
- 374
- 1
-
-
-
-
-
-
- fromSource
- ext
-
-
- 12
-
-
- 3
- 4
- 1
-
-
-
-
-
@@ -8578,10 +8223,6 @@
name
210
-
- simple
- 178
-
@@ -8600,22 +8241,6 @@
-
- id
- simple
-
-
- 12
-
-
- 1
- 2
- 210
-
-
-
-
-
name
id
@@ -8632,74 +8257,6 @@
-
- name
- simple
-
-
- 12
-
-
- 1
- 2
- 210
-
-
-
-
-
-
- simple
- id
-
-
- 12
-
-
- 1
- 2
- 157
-
-
- 2
- 3
- 18
-
-
- 3
- 10
- 3
-
-
-
-
-
-
- simple
- name
-
-
- 12
-
-
- 1
- 2
- 157
-
-
- 2
- 3
- 18
-
-
- 3
- 10
- 3
-
-
-
-
-
diff --git a/ql/lib/semmle/go/Files.qll b/ql/lib/semmle/go/Files.qll
index 92981b74711..28cb395beb3 100644
--- a/ql/lib/semmle/go/Files.qll
+++ b/ql/lib/semmle/go/Files.qll
@@ -155,7 +155,7 @@ abstract class Container extends @container {
/** A folder. */
class Folder extends Container, @folder {
- override string getAbsolutePath() { folders(this, result, _) }
+ override string getAbsolutePath() { folders(this, result) }
/** Gets the file or subfolder in this folder that has the given `name`, if any. */
Container getChildContainer(string name) {
@@ -182,7 +182,7 @@ class ExtractedOrExternalFile extends Container, @file, Documentable, ExprParent
DeclParent, ScopeNode {
override Location getLocation() { has_location(this, result) }
- override string getAbsolutePath() { files(this, result, _, _, _) }
+ override string getAbsolutePath() { files(this, result) }
/** Gets the number of lines in this file. */
int getNumberOfLines() { numlines(this, result, _, _) }
diff --git a/ql/lib/semmle/go/StringOps.qll b/ql/lib/semmle/go/StringOps.qll
index f844d945072..296263b1d44 100644
--- a/ql/lib/semmle/go/StringOps.qll
+++ b/ql/lib/semmle/go/StringOps.qll
@@ -432,7 +432,7 @@ module StringOps {
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
- * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html).
+ * [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
diff --git a/ql/lib/semmle/go/VariableWithFields.qll b/ql/lib/semmle/go/VariableWithFields.qll
index c0df810d057..adb5e2b308a 100644
--- a/ql/lib/semmle/go/VariableWithFields.qll
+++ b/ql/lib/semmle/go/VariableWithFields.qll
@@ -188,7 +188,7 @@ class VariableWithFields extends TVariableWithFields {
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
- * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html).
+ * [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
diff --git a/ql/lib/semmle/go/controlflow/BasicBlocks.qll b/ql/lib/semmle/go/controlflow/BasicBlocks.qll
index 2fb6b602440..39b7590d8a3 100644
--- a/ql/lib/semmle/go/controlflow/BasicBlocks.qll
+++ b/ql/lib/semmle/go/controlflow/BasicBlocks.qll
@@ -119,7 +119,7 @@ class BasicBlock extends TControlFlowNode {
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
- * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html).
+ * [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
diff --git a/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll b/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll
index 71bd7f1c74f..4bb09adfbad 100644
--- a/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll
+++ b/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll
@@ -89,7 +89,7 @@ module ControlFlow {
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
- * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html).
+ * [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
diff --git a/ql/lib/semmle/go/controlflow/IR.qll b/ql/lib/semmle/go/controlflow/IR.qll
index c85d69ee45c..552425f7edb 100644
--- a/ql/lib/semmle/go/controlflow/IR.qll
+++ b/ql/lib/semmle/go/controlflow/IR.qll
@@ -1400,7 +1400,7 @@ module IR {
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
- * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html).
+ * [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
diff --git a/ql/lib/semmle/go/dataflow/GlobalValueNumbering.qll b/ql/lib/semmle/go/dataflow/GlobalValueNumbering.qll
index 29ea9bdc4e1..c9c0c58b33e 100644
--- a/ql/lib/semmle/go/dataflow/GlobalValueNumbering.qll
+++ b/ql/lib/semmle/go/dataflow/GlobalValueNumbering.qll
@@ -314,7 +314,7 @@ class GVN extends GVNBase {
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
- * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html).
+ * [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
diff --git a/ql/lib/semmle/go/dataflow/SSA.qll b/ql/lib/semmle/go/dataflow/SSA.qll
index e847d86c72a..e9e9ce84b2a 100644
--- a/ql/lib/semmle/go/dataflow/SSA.qll
+++ b/ql/lib/semmle/go/dataflow/SSA.qll
@@ -90,7 +90,7 @@ class SsaVariable extends TSsaDefinition {
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
- * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html).
+ * [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
@@ -149,7 +149,7 @@ class SsaDefinition extends TSsaDefinition {
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
- * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html).
+ * [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
@@ -388,7 +388,7 @@ class SsaWithFields extends TSsaWithFields {
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
- * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html).
+ * [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
diff --git a/ql/lib/semmle/go/dataflow/internal/DataFlowImpl.qll b/ql/lib/semmle/go/dataflow/internal/DataFlowImpl.qll
index 058d66b1496..7693fc72848 100644
--- a/ql/lib/semmle/go/dataflow/internal/DataFlowImpl.qll
+++ b/ql/lib/semmle/go/dataflow/internal/DataFlowImpl.qll
@@ -2955,7 +2955,7 @@ class PathNode extends TPathNode {
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
- * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html).
+ * [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
@@ -3641,7 +3641,7 @@ private module FlowExploration {
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
- * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html).
+ * [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
diff --git a/ql/lib/semmle/go/dataflow/internal/DataFlowImpl2.qll b/ql/lib/semmle/go/dataflow/internal/DataFlowImpl2.qll
index 058d66b1496..7693fc72848 100644
--- a/ql/lib/semmle/go/dataflow/internal/DataFlowImpl2.qll
+++ b/ql/lib/semmle/go/dataflow/internal/DataFlowImpl2.qll
@@ -2955,7 +2955,7 @@ class PathNode extends TPathNode {
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
- * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html).
+ * [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
@@ -3641,7 +3641,7 @@ private module FlowExploration {
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
- * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html).
+ * [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
diff --git a/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll b/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll
index eab96dac19e..0f764173167 100644
--- a/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll
+++ b/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll
@@ -52,7 +52,7 @@ class Node extends TNode {
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
- * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html).
+ * [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
@@ -1219,7 +1219,7 @@ abstract class BarrierGuard extends Node {
// Case: a function like "return someBarrierGuard(arg)"
// or "return !someBarrierGuard(arg) && otherCond(...)"
exists(boolean outcome |
- not exists(DataFlow::Node otherRet | otherRet = outp.getEntryNode(fd) | otherRet != ret) and
+ ret = getUniqueOutputNode(fd, outp) and
this.checks(arg.asExpr(), outcome) and
// This predicate's contract is (p holds of ret ==> arg is checked),
// (and we have (this has outcome ==> arg is checked))
@@ -1234,7 +1234,7 @@ abstract class BarrierGuard extends Node {
Function f2, FunctionInput inp2, FunctionOutput outp2, CallNode c,
DataFlow::Property outpProp
|
- not exists(DataFlow::Node otherRet | otherRet = outp.getEntryNode(fd) | otherRet != ret) and
+ ret = getUniqueOutputNode(fd, outp) and
this.guardingFunction(f2, inp2, outp2, outpProp) and
c = f2.getACall() and
arg = inp2.getNode(c) and
@@ -1252,6 +1252,10 @@ abstract class BarrierGuard extends Node {
}
}
+DataFlow::Node getUniqueOutputNode(FuncDecl fd, FunctionOutput outp) {
+ result = unique(DataFlow::Node n | n = outp.getEntryNode(fd) | n)
+}
+
/**
* Holds if `ret` is a data-flow node whose value contributes to the output `res` of `fd`,
* and that node may have Boolean value `b`.
diff --git a/ql/lib/semmle/go/frameworks/stdlib/HtmlTemplate.qll b/ql/lib/semmle/go/frameworks/stdlib/HtmlTemplate.qll
index 54f3b959593..abc8413563d 100644
--- a/ql/lib/semmle/go/frameworks/stdlib/HtmlTemplate.qll
+++ b/ql/lib/semmle/go/frameworks/stdlib/HtmlTemplate.qll
@@ -113,7 +113,7 @@ module HtmlTemplate {
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
- * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html).
+ * [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
@@ -161,7 +161,7 @@ module HtmlTemplate {
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
- * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html).
+ * [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
diff --git a/ql/src/AlertSuppression.ql b/ql/src/AlertSuppression.ql
index 12ce2ad1e4d..f0a3b5df730 100644
--- a/ql/src/AlertSuppression.ql
+++ b/ql/src/AlertSuppression.ql
@@ -60,7 +60,7 @@ class SuppressionScope extends @locatable {
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
- * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html).
+ * [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
diff --git a/ql/src/Diagnostics/DiagnosticsReporting.qll b/ql/src/Diagnostics/DiagnosticsReporting.qll
index 3a6f1f18224..2b18ffa214c 100644
--- a/ql/src/Diagnostics/DiagnosticsReporting.qll
+++ b/ql/src/Diagnostics/DiagnosticsReporting.qll
@@ -24,7 +24,7 @@ private class Diagnostic extends @diagnostic {
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
- * [Locations](https://help.semmle.com/QL/learn-ql/ql/locations.html).
+ * [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))
diff --git a/ql/src/experimental/CWE-942/CorsMisconfiguration.ql b/ql/src/experimental/CWE-942/CorsMisconfiguration.ql
index fa07af5914f..50283c73165 100644
--- a/ql/src/experimental/CWE-942/CorsMisconfiguration.ql
+++ b/ql/src/experimental/CWE-942/CorsMisconfiguration.ql
@@ -1,7 +1,7 @@
/**
* @name CORS misconfiguration
* @description If a CORS policy is configured to accept an origin value obtained from the request data,
- * or is set to `*` or `null`, and it allows credential sharing, then the users of the
+ * or is set to `null`, and it allows credential sharing, then the users of the
* application are vulnerable to the same range of attacks as in XSS (credential stealing, etc.).
* @kind problem
* @problem.severity warning
diff --git a/ql/test/library-tests/semmle/go/controlflow/ControlFlowGraph/CFG.expected b/ql/test/library-tests/semmle/go/controlflow/ControlFlowGraph/CFG.expected
index 615418114ba..4e62ba42deb 100644
--- a/ql/test/library-tests/semmle/go/controlflow/ControlFlowGraph/CFG.expected
+++ b/ql/test/library-tests/semmle/go/controlflow/ControlFlowGraph/CFG.expected
@@ -1,4 +1,1410 @@
-nodes
edges
+| DuplicateSwitchCase.go:0:0:0:0 | entry | DuplicateSwitchCase.go:3:6:3:15 | skip |
+| DuplicateSwitchCase.go:3:1:3:1 | entry | DuplicateSwitchCase.go:3:17:3:19 | argument corresponding to msg |
+| DuplicateSwitchCase.go:3:1:12:1 | function declaration | DuplicateSwitchCase.go:14:6:14:10 | skip |
+| DuplicateSwitchCase.go:3:6:3:15 | skip | DuplicateSwitchCase.go:3:1:12:1 | function declaration |
+| DuplicateSwitchCase.go:3:17:3:19 | argument corresponding to msg | DuplicateSwitchCase.go:3:17:3:19 | initialization of msg |
+| DuplicateSwitchCase.go:3:17:3:19 | initialization of msg | DuplicateSwitchCase.go:4:2:4:2 | true |
+| DuplicateSwitchCase.go:4:2:4:2 | true | DuplicateSwitchCase.go:5:7:5:9 | msg |
+| DuplicateSwitchCase.go:5:7:5:9 | msg | DuplicateSwitchCase.go:5:14:5:20 | "start" |
+| DuplicateSwitchCase.go:5:7:5:20 | ...==... | DuplicateSwitchCase.go:5:7:5:20 | case ...==... |
+| DuplicateSwitchCase.go:5:7:5:20 | case ...==... | DuplicateSwitchCase.go:5:20:5:20 | ...==... is false |
+| DuplicateSwitchCase.go:5:7:5:20 | case ...==... | DuplicateSwitchCase.go:5:20:5:20 | ...==... is true |
+| DuplicateSwitchCase.go:5:14:5:20 | "start" | DuplicateSwitchCase.go:5:7:5:20 | ...==... |
+| DuplicateSwitchCase.go:5:20:5:20 | ...==... is false | DuplicateSwitchCase.go:7:7:7:9 | msg |
+| DuplicateSwitchCase.go:5:20:5:20 | ...==... is true | DuplicateSwitchCase.go:6:3:6:7 | start |
+| DuplicateSwitchCase.go:6:3:6:7 | start | DuplicateSwitchCase.go:6:3:6:9 | call to start |
+| DuplicateSwitchCase.go:6:3:6:9 | call to start | DuplicateSwitchCase.go:12:1:12:1 | exit |
+| DuplicateSwitchCase.go:7:7:7:9 | msg | DuplicateSwitchCase.go:7:14:7:20 | "start" |
+| DuplicateSwitchCase.go:7:7:7:20 | ...==... | DuplicateSwitchCase.go:7:7:7:20 | case ...==... |
+| DuplicateSwitchCase.go:7:7:7:20 | case ...==... | DuplicateSwitchCase.go:7:20:7:20 | ...==... is false |
+| DuplicateSwitchCase.go:7:7:7:20 | case ...==... | DuplicateSwitchCase.go:7:20:7:20 | ...==... is true |
+| DuplicateSwitchCase.go:7:14:7:20 | "start" | DuplicateSwitchCase.go:7:7:7:20 | ...==... |
+| DuplicateSwitchCase.go:7:20:7:20 | ...==... is false | DuplicateSwitchCase.go:10:3:10:7 | panic |
+| DuplicateSwitchCase.go:7:20:7:20 | ...==... is true | DuplicateSwitchCase.go:8:3:8:6 | stop |
+| DuplicateSwitchCase.go:8:3:8:6 | stop | DuplicateSwitchCase.go:8:3:8:8 | call to stop |
+| DuplicateSwitchCase.go:8:3:8:8 | call to stop | DuplicateSwitchCase.go:12:1:12:1 | exit |
+| DuplicateSwitchCase.go:10:3:10:7 | panic | DuplicateSwitchCase.go:10:9:10:33 | "Message not understood." |
+| DuplicateSwitchCase.go:10:3:10:34 | call to panic | DuplicateSwitchCase.go:12:1:12:1 | exit |
+| DuplicateSwitchCase.go:10:9:10:33 | "Message not understood." | DuplicateSwitchCase.go:10:3:10:34 | call to panic |
+| DuplicateSwitchCase.go:14:1:14:1 | entry | DuplicateSwitchCase.go:14:14:14:15 | skip |
+| DuplicateSwitchCase.go:14:1:14:15 | function declaration | DuplicateSwitchCase.go:16:6:16:9 | skip |
+| DuplicateSwitchCase.go:14:6:14:10 | skip | DuplicateSwitchCase.go:14:1:14:15 | function declaration |
+| DuplicateSwitchCase.go:14:14:14:15 | skip | DuplicateSwitchCase.go:14:15:14:15 | exit |
+| DuplicateSwitchCase.go:16:1:16:1 | entry | DuplicateSwitchCase.go:16:13:16:14 | skip |
+| DuplicateSwitchCase.go:16:1:16:14 | function declaration | DuplicateSwitchCase.go:0:0:0:0 | exit |
+| DuplicateSwitchCase.go:16:6:16:9 | skip | DuplicateSwitchCase.go:16:1:16:14 | function declaration |
+| DuplicateSwitchCase.go:16:13:16:14 | skip | DuplicateSwitchCase.go:16:14:16:14 | exit |
+| equalitytests.go:0:0:0:0 | entry | equalitytests.go:3:1:5:1 | skip |
+| equalitytests.go:3:1:5:1 | skip | equalitytests.go:7:1:9:1 | skip |
+| equalitytests.go:7:1:9:1 | skip | equalitytests.go:11:6:11:18 | skip |
+| equalitytests.go:11:1:11:1 | entry | equalitytests.go:11:20:11:21 | argument corresponding to i1 |
+| equalitytests.go:11:1:13:1 | function declaration | equalitytests.go:0:0:0:0 | exit |
+| equalitytests.go:11:6:11:18 | skip | equalitytests.go:11:1:13:1 | function declaration |
+| equalitytests.go:11:20:11:21 | argument corresponding to i1 | equalitytests.go:11:20:11:21 | initialization of i1 |
+| equalitytests.go:11:20:11:21 | initialization of i1 | equalitytests.go:11:28:11:29 | argument corresponding to i2 |
+| equalitytests.go:11:28:11:29 | argument corresponding to i2 | equalitytests.go:11:28:11:29 | initialization of i2 |
+| equalitytests.go:11:28:11:29 | initialization of i2 | equalitytests.go:11:36:11:37 | argument corresponding to e1 |
+| equalitytests.go:11:36:11:37 | argument corresponding to e1 | equalitytests.go:11:36:11:37 | initialization of e1 |
+| equalitytests.go:11:36:11:37 | initialization of e1 | equalitytests.go:11:46:11:47 | argument corresponding to e2 |
+| equalitytests.go:11:46:11:47 | argument corresponding to e2 | equalitytests.go:11:46:11:47 | initialization of e2 |
+| equalitytests.go:11:46:11:47 | initialization of e2 | equalitytests.go:11:56:11:57 | argument corresponding to s1 |
+| equalitytests.go:11:56:11:57 | argument corresponding to s1 | equalitytests.go:11:56:11:57 | initialization of s1 |
+| equalitytests.go:11:56:11:57 | initialization of s1 | equalitytests.go:11:83:11:84 | argument corresponding to s2 |
+| equalitytests.go:11:83:11:84 | argument corresponding to s2 | equalitytests.go:11:83:11:84 | initialization of s2 |
+| equalitytests.go:11:83:11:84 | initialization of s2 | equalitytests.go:11:110:11:111 | argument corresponding to s3 |
+| equalitytests.go:11:110:11:111 | argument corresponding to s3 | equalitytests.go:11:110:11:111 | initialization of s3 |
+| equalitytests.go:11:110:11:111 | initialization of s3 | equalitytests.go:11:134:11:135 | argument corresponding to s4 |
+| equalitytests.go:11:134:11:135 | argument corresponding to s4 | equalitytests.go:11:134:11:135 | initialization of s4 |
+| equalitytests.go:11:134:11:135 | initialization of s4 | equalitytests.go:11:158:11:159 | argument corresponding to a1 |
+| equalitytests.go:11:158:11:159 | argument corresponding to a1 | equalitytests.go:11:158:11:159 | initialization of a1 |
+| equalitytests.go:11:158:11:159 | initialization of a1 | equalitytests.go:11:171:11:172 | argument corresponding to a2 |
+| equalitytests.go:11:171:11:172 | argument corresponding to a2 | equalitytests.go:11:171:11:172 | initialization of a2 |
+| equalitytests.go:11:171:11:172 | initialization of a2 | equalitytests.go:11:184:11:185 | argument corresponding to a3 |
+| equalitytests.go:11:184:11:185 | argument corresponding to a3 | equalitytests.go:11:184:11:185 | initialization of a3 |
+| equalitytests.go:11:184:11:185 | initialization of a3 | equalitytests.go:11:195:11:196 | argument corresponding to a4 |
+| equalitytests.go:11:195:11:196 | argument corresponding to a4 | equalitytests.go:11:195:11:196 | initialization of a4 |
+| equalitytests.go:11:195:11:196 | initialization of a4 | equalitytests.go:12:9:12:10 | i1 |
+| equalitytests.go:12:2:12:76 | return statement | equalitytests.go:13:1:13:1 | exit |
+| equalitytests.go:12:9:12:10 | i1 | equalitytests.go:12:15:12:16 | i2 |
+| equalitytests.go:12:9:12:16 | ...==... | equalitytests.go:12:16:12:16 | ...==... is false |
+| equalitytests.go:12:9:12:16 | ...==... | equalitytests.go:12:16:12:16 | ...==... is true |
+| equalitytests.go:12:9:12:76 | ...&&... | equalitytests.go:12:2:12:76 | return statement |
+| equalitytests.go:12:15:12:16 | i2 | equalitytests.go:12:9:12:16 | ...==... |
+| equalitytests.go:12:16:12:16 | ...==... is false | equalitytests.go:12:28:12:28 | ...&&... is false |
+| equalitytests.go:12:16:12:16 | ...==... is true | equalitytests.go:12:21:12:22 | e1 |
+| equalitytests.go:12:21:12:22 | e1 | equalitytests.go:12:27:12:28 | e2 |
+| equalitytests.go:12:21:12:28 | ...==... | equalitytests.go:12:28:12:28 | ...&&... is false |
+| equalitytests.go:12:21:12:28 | ...==... | equalitytests.go:12:28:12:28 | ...&&... is true |
+| equalitytests.go:12:21:12:28 | ...==... | equalitytests.go:13:1:13:1 | exit |
+| equalitytests.go:12:27:12:28 | e2 | equalitytests.go:12:21:12:28 | ...==... |
+| equalitytests.go:12:28:12:28 | ...&&... is false | equalitytests.go:12:40:12:40 | ...&&... is false |
+| equalitytests.go:12:28:12:28 | ...&&... is true | equalitytests.go:12:33:12:34 | s1 |
+| equalitytests.go:12:33:12:34 | s1 | equalitytests.go:12:39:12:40 | s2 |
+| equalitytests.go:12:33:12:40 | ...==... | equalitytests.go:12:40:12:40 | ...&&... is false |
+| equalitytests.go:12:33:12:40 | ...==... | equalitytests.go:12:40:12:40 | ...&&... is true |
+| equalitytests.go:12:33:12:40 | ...==... | equalitytests.go:13:1:13:1 | exit |
+| equalitytests.go:12:39:12:40 | s2 | equalitytests.go:12:33:12:40 | ...==... |
+| equalitytests.go:12:40:12:40 | ...&&... is false | equalitytests.go:12:52:12:52 | ...&&... is false |
+| equalitytests.go:12:40:12:40 | ...&&... is true | equalitytests.go:12:45:12:46 | s3 |
+| equalitytests.go:12:45:12:46 | s3 | equalitytests.go:12:51:12:52 | s4 |
+| equalitytests.go:12:45:12:52 | ...==... | equalitytests.go:12:52:12:52 | ...&&... is false |
+| equalitytests.go:12:45:12:52 | ...==... | equalitytests.go:12:52:12:52 | ...&&... is true |
+| equalitytests.go:12:45:12:52 | ...==... | equalitytests.go:13:1:13:1 | exit |
+| equalitytests.go:12:51:12:52 | s4 | equalitytests.go:12:45:12:52 | ...==... |
+| equalitytests.go:12:52:12:52 | ...&&... is false | equalitytests.go:12:64:12:64 | ...&&... is false |
+| equalitytests.go:12:52:12:52 | ...&&... is true | equalitytests.go:12:57:12:58 | a1 |
+| equalitytests.go:12:57:12:58 | a1 | equalitytests.go:12:63:12:64 | a2 |
+| equalitytests.go:12:57:12:64 | ...==... | equalitytests.go:12:64:12:64 | ...&&... is false |
+| equalitytests.go:12:57:12:64 | ...==... | equalitytests.go:12:64:12:64 | ...&&... is true |
+| equalitytests.go:12:57:12:64 | ...==... | equalitytests.go:13:1:13:1 | exit |
+| equalitytests.go:12:63:12:64 | a2 | equalitytests.go:12:57:12:64 | ...==... |
+| equalitytests.go:12:64:12:64 | ...&&... is false | equalitytests.go:12:9:12:76 | ...&&... |
+| equalitytests.go:12:64:12:64 | ...&&... is true | equalitytests.go:12:69:12:70 | a3 |
+| equalitytests.go:12:69:12:70 | a3 | equalitytests.go:12:75:12:76 | a4 |
+| equalitytests.go:12:69:12:76 | ...==... | equalitytests.go:12:9:12:76 | ...&&... |
+| equalitytests.go:12:69:12:76 | ...==... | equalitytests.go:13:1:13:1 | exit |
+| equalitytests.go:12:75:12:76 | a4 | equalitytests.go:12:69:12:76 | ...==... |
+| exprs.go:0:0:0:0 | entry | exprs.go:3:1:3:29 | skip |
+| exprs.go:3:1:3:29 | skip | exprs.go:5:6:5:9 | skip |
+| exprs.go:5:1:5:1 | entry | exprs.go:6:6:6:6 | skip |
+| exprs.go:5:1:26:1 | function declaration | exprs.go:28:6:28:10 | skip |
+| exprs.go:5:6:5:9 | skip | exprs.go:5:1:26:1 | function declaration |
+| exprs.go:6:6:6:6 | assignment to i | exprs.go:6:9:6:9 | assignment to j |
+| exprs.go:6:6:6:6 | skip | exprs.go:6:9:6:9 | skip |
+| exprs.go:6:9:6:9 | assignment to j | exprs.go:7:6:7:6 | skip |
+| exprs.go:6:9:6:9 | skip | exprs.go:6:13:6:13 | 0 |
+| exprs.go:6:13:6:13 | 0 | exprs.go:6:16:6:26 | ...+... |
+| exprs.go:6:16:6:26 | ...+... | exprs.go:6:6:6:6 | assignment to i |
+| exprs.go:7:6:7:6 | assignment to k | exprs.go:8:2:8:2 | skip |
+| exprs.go:7:6:7:6 | skip | exprs.go:7:10:7:10 | i |
+| exprs.go:7:10:7:10 | i | exprs.go:7:14:7:14 | 2 |
+| exprs.go:7:10:7:16 | ...+... | exprs.go:7:6:7:6 | assignment to k |
+| exprs.go:7:14:7:14 | 2 | exprs.go:7:16:7:16 | j |
+| exprs.go:7:14:7:16 | ...*... | exprs.go:7:10:7:16 | ...+... |
+| exprs.go:7:16:7:16 | j | exprs.go:7:14:7:16 | ...*... |
+| exprs.go:8:2:8:2 | assignment to s | exprs.go:9:2:9:3 | skip |
+| exprs.go:8:2:8:2 | skip | exprs.go:8:7:8:12 | "k = " |
+| exprs.go:8:7:8:12 | "k = " | exprs.go:8:23:8:23 | k |
+| exprs.go:8:7:8:24 | ...+... | exprs.go:8:2:8:2 | assignment to s |
+| exprs.go:8:16:8:24 | type conversion | exprs.go:8:7:8:24 | ...+... |
+| exprs.go:8:23:8:23 | k | exprs.go:8:16:8:24 | type conversion |
+| exprs.go:9:2:9:3 | assignment to fn | exprs.go:10:2:10:8 | skip |
+| exprs.go:9:2:9:3 | skip | exprs.go:9:8:9:61 | function literal |
+| exprs.go:9:8:9:8 | entry | exprs.go:9:13:9:13 | argument corresponding to a |
+| exprs.go:9:8:9:61 | function literal | exprs.go:9:2:9:3 | assignment to fn |
+| exprs.go:9:13:9:13 | argument corresponding to a | exprs.go:9:13:9:13 | initialization of a |
+| exprs.go:9:13:9:13 | initialization of a | exprs.go:9:16:9:16 | argument corresponding to b |
+| exprs.go:9:16:9:16 | argument corresponding to b | exprs.go:9:16:9:16 | initialization of b |
+| exprs.go:9:16:9:16 | initialization of b | exprs.go:9:23:9:23 | argument corresponding to z |
+| exprs.go:9:23:9:23 | argument corresponding to z | exprs.go:9:23:9:23 | initialization of z |
+| exprs.go:9:23:9:23 | initialization of z | exprs.go:9:48:9:48 | a |
+| exprs.go:9:41:9:59 | return statement | exprs.go:9:61:9:61 | exit |
+| exprs.go:9:48:9:48 | a | exprs.go:9:50:9:50 | b |
+| exprs.go:9:48:9:50 | ...*... | exprs.go:9:58:9:58 | z |
+| exprs.go:9:48:9:59 | ...<... | exprs.go:9:41:9:59 | return statement |
+| exprs.go:9:50:9:50 | b | exprs.go:9:48:9:50 | ...*... |
+| exprs.go:9:54:9:59 | type conversion | exprs.go:9:48:9:59 | ...<... |
+| exprs.go:9:58:9:58 | z | exprs.go:9:54:9:59 | type conversion |
+| exprs.go:10:2:10:8 | assignment to struct1 | exprs.go:11:2:11:8 | skip |
+| exprs.go:10:2:10:8 | skip | exprs.go:10:13:10:32 | struct literal |
+| exprs.go:10:13:10:32 | struct literal | exprs.go:10:2:10:8 | assignment to struct1 |
+| exprs.go:11:2:11:8 | assignment to struct2 | exprs.go:15:2:15:8 | skip |
+| exprs.go:11:2:11:8 | skip | exprs.go:11:13:14:21 | struct literal |
+| exprs.go:11:13:14:21 | struct literal | exprs.go:14:4:14:4 | k |
+| exprs.go:14:4:14:4 | init of k | exprs.go:14:7:14:8 | fn |
+| exprs.go:14:4:14:4 | k | exprs.go:14:4:14:4 | init of k |
+| exprs.go:14:7:14:8 | fn | exprs.go:14:10:14:10 | i |
+| exprs.go:14:7:14:20 | call to fn | exprs.go:14:7:14:20 | init of call to fn |
+| exprs.go:14:7:14:20 | call to fn | exprs.go:26:1:26:1 | exit |
+| exprs.go:14:7:14:20 | init of call to fn | exprs.go:11:2:11:8 | assignment to struct2 |
+| exprs.go:14:10:14:10 | i | exprs.go:14:13:14:13 | j |
+| exprs.go:14:13:14:13 | j | exprs.go:14:16:14:19 | .../... |
+| exprs.go:14:16:14:19 | .../... | exprs.go:14:7:14:20 | call to fn |
+| exprs.go:15:2:15:8 | assignment to struct3 | exprs.go:16:2:16:5 | skip |
+| exprs.go:15:2:15:8 | skip | exprs.go:15:13:15:58 | struct literal |
+| exprs.go:15:13:15:58 | struct literal | exprs.go:15:35:15:41 | struct1 |
+| exprs.go:15:32:15:43 | init of key-value pair | exprs.go:15:49:15:55 | struct2 |
+| exprs.go:15:35:15:41 | struct1 | exprs.go:15:35:15:43 | selection of x |
+| exprs.go:15:35:15:43 | selection of x | exprs.go:15:32:15:43 | init of key-value pair |
+| exprs.go:15:46:15:57 | init of key-value pair | exprs.go:15:2:15:8 | assignment to struct3 |
+| exprs.go:15:49:15:55 | struct2 | exprs.go:15:49:15:57 | selection of x |
+| exprs.go:15:49:15:57 | selection of x | exprs.go:15:46:15:57 | init of key-value pair |
+| exprs.go:16:2:16:5 | assignment to arr1 | exprs.go:17:2:17:5 | skip |
+| exprs.go:16:2:16:5 | skip | exprs.go:16:10:16:26 | array literal |
+| exprs.go:16:10:16:26 | array literal | exprs.go:16:17:16:17 | element index |
+| exprs.go:16:17:16:17 | element index | exprs.go:16:17:16:23 | struct3 |
+| exprs.go:16:17:16:23 | struct3 | exprs.go:16:17:16:25 | selection of x |
+| exprs.go:16:17:16:25 | init of selection of x | exprs.go:16:2:16:5 | assignment to arr1 |
+| exprs.go:16:17:16:25 | selection of x | exprs.go:16:17:16:25 | init of selection of x |
+| exprs.go:17:2:17:5 | assignment to arr2 | exprs.go:18:2:18:4 | skip |
+| exprs.go:17:2:17:5 | skip | exprs.go:17:10:17:40 | array literal |
+| exprs.go:17:10:17:40 | array literal | exprs.go:17:19:17:19 | element index |
+| exprs.go:17:19:17:19 | element index | exprs.go:17:19:17:25 | struct3 |
+| exprs.go:17:19:17:25 | struct3 | exprs.go:17:19:17:27 | selection of x |
+| exprs.go:17:19:17:27 | init of selection of x | exprs.go:17:30:17:30 | 2 |
+| exprs.go:17:19:17:27 | selection of x | exprs.go:17:19:17:27 | init of selection of x |
+| exprs.go:17:30:17:30 | 2 | exprs.go:17:33:17:36 | arr1 |
+| exprs.go:17:30:17:39 | init of key-value pair | exprs.go:17:2:17:5 | assignment to arr2 |
+| exprs.go:17:33:17:36 | arr1 | exprs.go:17:38:17:38 | 0 |
+| exprs.go:17:33:17:39 | index expression | exprs.go:17:30:17:39 | init of key-value pair |
+| exprs.go:17:33:17:39 | index expression | exprs.go:26:1:26:1 | exit |
+| exprs.go:17:38:17:38 | 0 | exprs.go:17:33:17:39 | index expression |
+| exprs.go:18:2:18:4 | assignment to slc | exprs.go:19:2:19:3 | skip |
+| exprs.go:18:2:18:4 | skip | exprs.go:18:9:18:22 | slice literal |
+| exprs.go:18:9:18:22 | slice literal | exprs.go:18:18:18:18 | element index |
+| exprs.go:18:18:18:18 | element index | exprs.go:18:18:18:18 | s |
+| exprs.go:18:18:18:18 | init of s | exprs.go:18:21:18:21 | element index |
+| exprs.go:18:18:18:18 | s | exprs.go:18:18:18:18 | init of s |
+| exprs.go:18:21:18:21 | element index | exprs.go:18:21:18:21 | s |
+| exprs.go:18:21:18:21 | init of s | exprs.go:18:2:18:4 | assignment to slc |
+| exprs.go:18:21:18:21 | s | exprs.go:18:21:18:21 | init of s |
+| exprs.go:19:2:19:3 | assignment to mp | exprs.go:20:2:20:5 | skip |
+| exprs.go:19:2:19:3 | skip | exprs.go:19:8:19:38 | map literal |
+| exprs.go:19:8:19:38 | map literal | exprs.go:19:23:19:25 | slc |
+| exprs.go:19:23:19:25 | slc | exprs.go:19:27:19:27 | 0 |
+| exprs.go:19:23:19:28 | index expression | exprs.go:19:31:19:34 | arr2 |
+| exprs.go:19:23:19:28 | index expression | exprs.go:26:1:26:1 | exit |
+| exprs.go:19:23:19:37 | init of key-value pair | exprs.go:19:2:19:3 | assignment to mp |
+| exprs.go:19:27:19:27 | 0 | exprs.go:19:23:19:28 | index expression |
+| exprs.go:19:31:19:34 | arr2 | exprs.go:19:36:19:36 | 1 |
+| exprs.go:19:31:19:37 | index expression | exprs.go:19:23:19:37 | init of key-value pair |
+| exprs.go:19:31:19:37 | index expression | exprs.go:26:1:26:1 | exit |
+| exprs.go:19:36:19:36 | 1 | exprs.go:19:31:19:37 | index expression |
+| exprs.go:20:2:20:5 | assignment to slc2 | exprs.go:21:2:21:5 | skip |
+| exprs.go:20:2:20:5 | skip | exprs.go:20:10:20:12 | slc |
+| exprs.go:20:10:20:12 | slc | exprs.go:20:14:20:14 | 1 |
+| exprs.go:20:10:20:19 | slice expression | exprs.go:20:2:20:5 | assignment to slc2 |
+| exprs.go:20:10:20:19 | slice expression | exprs.go:26:1:26:1 | exit |
+| exprs.go:20:14:20:14 | 1 | exprs.go:20:16:20:16 | 2 |
+| exprs.go:20:16:20:16 | 2 | exprs.go:20:18:20:18 | 3 |
+| exprs.go:20:18:20:18 | 3 | exprs.go:20:10:20:19 | slice expression |
+| exprs.go:21:2:21:5 | assignment to slc3 | exprs.go:22:2:22:5 | skip |
+| exprs.go:21:2:21:5 | skip | exprs.go:21:10:21:13 | slc2 |
+| exprs.go:21:10:21:13 | slc2 | exprs.go:21:10:21:19 | 0 |
+| exprs.go:21:10:21:19 | 0 | exprs.go:21:16:21:16 | 2 |
+| exprs.go:21:10:21:19 | slice expression | exprs.go:21:2:21:5 | assignment to slc3 |
+| exprs.go:21:10:21:19 | slice expression | exprs.go:26:1:26:1 | exit |
+| exprs.go:21:16:21:16 | 2 | exprs.go:21:18:21:18 | 3 |
+| exprs.go:21:18:21:18 | 3 | exprs.go:21:10:21:19 | slice expression |
+| exprs.go:22:2:22:5 | assignment to slc4 | exprs.go:23:2:23:5 | skip |
+| exprs.go:22:2:22:5 | skip | exprs.go:22:10:22:13 | slc3 |
+| exprs.go:22:10:22:13 | slc3 | exprs.go:22:15:22:15 | 0 |
+| exprs.go:22:10:22:18 | cap | exprs.go:22:10:22:18 | slice expression |
+| exprs.go:22:10:22:18 | slice expression | exprs.go:22:2:22:5 | assignment to slc4 |
+| exprs.go:22:10:22:18 | slice expression | exprs.go:26:1:26:1 | exit |
+| exprs.go:22:15:22:15 | 0 | exprs.go:22:17:22:17 | 2 |
+| exprs.go:22:17:22:17 | 2 | exprs.go:22:10:22:18 | cap |
+| exprs.go:23:2:23:5 | assignment to slc5 | exprs.go:24:2:24:5 | skip |
+| exprs.go:23:2:23:5 | skip | exprs.go:23:10:23:13 | slc4 |
+| exprs.go:23:10:23:13 | slc4 | exprs.go:23:15:23:15 | 0 |
+| exprs.go:23:10:23:17 | cap | exprs.go:23:10:23:17 | slice expression |
+| exprs.go:23:10:23:17 | len | exprs.go:23:10:23:17 | cap |
+| exprs.go:23:10:23:17 | slice expression | exprs.go:23:2:23:5 | assignment to slc5 |
+| exprs.go:23:10:23:17 | slice expression | exprs.go:26:1:26:1 | exit |
+| exprs.go:23:15:23:15 | 0 | exprs.go:23:10:23:17 | len |
+| exprs.go:24:2:24:5 | assignment to slc6 | exprs.go:25:9:25:34 | struct literal |
+| exprs.go:24:2:24:5 | skip | exprs.go:24:10:24:13 | slc5 |
+| exprs.go:24:10:24:13 | slc5 | exprs.go:24:10:24:17 | 0 |
+| exprs.go:24:10:24:17 | 0 | exprs.go:24:16:24:16 | 2 |
+| exprs.go:24:10:24:17 | cap | exprs.go:24:10:24:17 | slice expression |
+| exprs.go:24:10:24:17 | slice expression | exprs.go:24:2:24:5 | assignment to slc6 |
+| exprs.go:24:10:24:17 | slice expression | exprs.go:26:1:26:1 | exit |
+| exprs.go:24:16:24:16 | 2 | exprs.go:24:10:24:17 | cap |
+| exprs.go:25:2:25:34 | return statement | exprs.go:26:1:26:1 | exit |
+| exprs.go:25:9:25:34 | struct literal | exprs.go:25:15:25:16 | mp |
+| exprs.go:25:15:25:16 | mp | exprs.go:25:18:25:18 | s |
+| exprs.go:25:15:25:19 | index expression | exprs.go:25:15:25:19 | init of index expression |
+| exprs.go:25:15:25:19 | index expression | exprs.go:26:1:26:1 | exit |
+| exprs.go:25:15:25:19 | init of index expression | exprs.go:25:22:25:24 | len |
+| exprs.go:25:18:25:18 | s | exprs.go:25:15:25:19 | index expression |
+| exprs.go:25:22:25:24 | len | exprs.go:25:26:25:29 | slc6 |
+| exprs.go:25:22:25:33 | call to len | exprs.go:25:22:25:33 | init of call to len |
+| exprs.go:25:22:25:33 | init of call to len | exprs.go:25:2:25:34 | return statement |
+| exprs.go:25:26:25:29 | slc6 | exprs.go:25:31:25:31 | 0 |
+| exprs.go:25:26:25:32 | index expression | exprs.go:25:22:25:33 | call to len |
+| exprs.go:25:26:25:32 | index expression | exprs.go:26:1:26:1 | exit |
+| exprs.go:25:31:25:31 | 0 | exprs.go:25:26:25:32 | index expression |
+| exprs.go:28:1:28:1 | entry | exprs.go:28:12:28:14 | argument corresponding to arg |
+| exprs.go:28:1:30:1 | function declaration | exprs.go:32:6:32:10 | skip |
+| exprs.go:28:6:28:10 | skip | exprs.go:28:1:30:1 | function declaration |
+| exprs.go:28:12:28:14 | argument corresponding to arg | exprs.go:28:12:28:14 | initialization of arg |
+| exprs.go:28:12:28:14 | initialization of arg | exprs.go:29:9:29:11 | arg |
+| exprs.go:29:2:29:21 | return statement | exprs.go:30:1:30:1 | exit |
+| exprs.go:29:9:29:11 | arg | exprs.go:29:9:29:19 | type assertion |
+| exprs.go:29:9:29:19 | type assertion | exprs.go:29:9:29:21 | selection of x |
+| exprs.go:29:9:29:19 | type assertion | exprs.go:30:1:30:1 | exit |
+| exprs.go:29:9:29:21 | selection of x | exprs.go:29:2:29:21 | return statement |
+| exprs.go:32:1:32:1 | entry | exprs.go:32:12:32:14 | argument corresponding to arg |
+| exprs.go:32:1:37:1 | function declaration | exprs.go:39:6:39:10 | skip |
+| exprs.go:32:6:32:10 | skip | exprs.go:32:1:37:1 | function declaration |
+| exprs.go:32:12:32:14 | argument corresponding to arg | exprs.go:32:12:32:14 | initialization of arg |
+| exprs.go:32:12:32:14 | initialization of arg | exprs.go:33:5:33:5 | skip |
+| exprs.go:33:5:33:5 | assignment to p | exprs.go:33:5:33:24 | ... := ...[1] |
+| exprs.go:33:5:33:5 | skip | exprs.go:33:8:33:9 | skip |
+| exprs.go:33:5:33:24 | ... := ...[0] | exprs.go:33:5:33:5 | assignment to p |
+| exprs.go:33:5:33:24 | ... := ...[1] | exprs.go:33:8:33:9 | assignment to ok |
+| exprs.go:33:8:33:9 | assignment to ok | exprs.go:33:27:33:28 | ok |
+| exprs.go:33:8:33:9 | skip | exprs.go:33:14:33:16 | arg |
+| exprs.go:33:14:33:16 | arg | exprs.go:33:14:33:24 | type assertion |
+| exprs.go:33:14:33:24 | type assertion | exprs.go:33:5:33:24 | ... := ...[0] |
+| exprs.go:33:27:33:28 | ok | exprs.go:33:28:33:28 | ok is false |
+| exprs.go:33:27:33:28 | ok | exprs.go:33:28:33:28 | ok is true |
+| exprs.go:33:28:33:28 | ok is false | exprs.go:36:9:36:10 | -... |
+| exprs.go:33:28:33:28 | ok is true | exprs.go:34:10:34:10 | p |
+| exprs.go:34:3:34:12 | return statement | exprs.go:37:1:37:1 | exit |
+| exprs.go:34:10:34:10 | p | exprs.go:34:10:34:12 | selection of x |
+| exprs.go:34:10:34:12 | selection of x | exprs.go:34:3:34:12 | return statement |
+| exprs.go:36:2:36:10 | return statement | exprs.go:37:1:37:1 | exit |
+| exprs.go:36:9:36:10 | -... | exprs.go:36:2:36:10 | return statement |
+| exprs.go:39:1:39:1 | entry | exprs.go:39:12:39:14 | argument corresponding to arg |
+| exprs.go:39:1:47:1 | function declaration | exprs.go:49:6:49:8 | skip |
+| exprs.go:39:6:39:10 | skip | exprs.go:39:1:47:1 | function declaration |
+| exprs.go:39:12:39:14 | argument corresponding to arg | exprs.go:39:12:39:14 | initialization of arg |
+| exprs.go:39:12:39:14 | initialization of arg | exprs.go:40:6:40:6 | skip |
+| exprs.go:40:6:40:6 | assignment to p | exprs.go:41:6:41:7 | skip |
+| exprs.go:40:6:40:6 | skip | exprs.go:40:6:40:6 | zero value for p |
+| exprs.go:40:6:40:6 | zero value for p | exprs.go:40:6:40:6 | assignment to p |
+| exprs.go:41:6:41:7 | assignment to ok | exprs.go:42:2:42:2 | skip |
+| exprs.go:41:6:41:7 | skip | exprs.go:41:6:41:7 | zero value for ok |
+| exprs.go:41:6:41:7 | zero value for ok | exprs.go:41:6:41:7 | assignment to ok |
+| exprs.go:42:2:42:2 | assignment to p | exprs.go:42:2:42:20 | ... = ...[1] |
+| exprs.go:42:2:42:2 | skip | exprs.go:42:5:42:6 | skip |
+| exprs.go:42:2:42:20 | ... = ...[0] | exprs.go:42:2:42:2 | assignment to p |
+| exprs.go:42:2:42:20 | ... = ...[1] | exprs.go:42:5:42:6 | assignment to ok |
+| exprs.go:42:5:42:6 | assignment to ok | exprs.go:43:5:43:6 | ok |
+| exprs.go:42:5:42:6 | skip | exprs.go:42:10:42:12 | arg |
+| exprs.go:42:10:42:12 | arg | exprs.go:42:10:42:20 | type assertion |
+| exprs.go:42:10:42:20 | type assertion | exprs.go:42:2:42:20 | ... = ...[0] |
+| exprs.go:43:5:43:6 | ok | exprs.go:43:6:43:6 | ok is false |
+| exprs.go:43:5:43:6 | ok | exprs.go:43:6:43:6 | ok is true |
+| exprs.go:43:6:43:6 | ok is false | exprs.go:46:9:46:10 | -... |
+| exprs.go:43:6:43:6 | ok is true | exprs.go:44:10:44:10 | p |
+| exprs.go:44:3:44:12 | return statement | exprs.go:47:1:47:1 | exit |
+| exprs.go:44:10:44:10 | p | exprs.go:44:10:44:12 | selection of x |
+| exprs.go:44:10:44:12 | selection of x | exprs.go:44:3:44:12 | return statement |
+| exprs.go:46:2:46:10 | return statement | exprs.go:47:1:47:1 | exit |
+| exprs.go:46:9:46:10 | -... | exprs.go:46:2:46:10 | return statement |
+| exprs.go:49:1:49:1 | entry | exprs.go:49:10:49:11 | argument corresponding to xs |
+| exprs.go:49:1:54:1 | function declaration | exprs.go:56:6:56:9 | skip |
+| exprs.go:49:6:49:8 | skip | exprs.go:49:1:54:1 | function declaration |
+| exprs.go:49:10:49:11 | argument corresponding to xs | exprs.go:49:10:49:11 | initialization of xs |
+| exprs.go:49:10:49:11 | initialization of xs | exprs.go:49:21:49:23 | zero value for res |
+| exprs.go:49:21:49:23 | implicit read of res | exprs.go:54:1:54:1 | exit |
+| exprs.go:49:21:49:23 | initialization of res | exprs.go:50:6:50:6 | skip |
+| exprs.go:49:21:49:23 | zero value for res | exprs.go:49:21:49:23 | initialization of res |
+| exprs.go:50:6:50:6 | assignment to i | exprs.go:50:14:50:14 | i |
+| exprs.go:50:6:50:6 | skip | exprs.go:50:11:50:11 | 0 |
+| exprs.go:50:11:50:11 | 0 | exprs.go:50:6:50:6 | assignment to i |
+| exprs.go:50:14:50:14 | i | exprs.go:50:18:50:20 | len |
+| exprs.go:50:14:50:24 | ...<... | exprs.go:50:24:50:24 | ...<... is false |
+| exprs.go:50:14:50:24 | ...<... | exprs.go:50:24:50:24 | ...<... is true |
+| exprs.go:50:18:50:20 | len | exprs.go:50:22:50:23 | xs |
+| exprs.go:50:18:50:24 | call to len | exprs.go:50:14:50:24 | ...<... |
+| exprs.go:50:22:50:23 | xs | exprs.go:50:18:50:24 | call to len |
+| exprs.go:50:24:50:24 | ...<... is false | exprs.go:53:2:53:7 | return statement |
+| exprs.go:50:24:50:24 | ...<... is true | exprs.go:51:3:51:5 | res |
+| exprs.go:50:27:50:27 | i | exprs.go:50:27:50:29 | 1 |
+| exprs.go:50:27:50:29 | 1 | exprs.go:50:27:50:29 | rhs of increment statement |
+| exprs.go:50:27:50:29 | increment statement | exprs.go:50:14:50:14 | i |
+| exprs.go:50:27:50:29 | rhs of increment statement | exprs.go:50:27:50:29 | increment statement |
+| exprs.go:51:3:51:5 | assignment to res | exprs.go:50:27:50:27 | i |
+| exprs.go:51:3:51:5 | res | exprs.go:51:10:51:11 | xs |
+| exprs.go:51:3:51:14 | ... += ... | exprs.go:51:3:51:5 | assignment to res |
+| exprs.go:51:10:51:11 | xs | exprs.go:51:13:51:13 | i |
+| exprs.go:51:10:51:14 | index expression | exprs.go:51:3:51:14 | ... += ... |
+| exprs.go:51:10:51:14 | index expression | exprs.go:54:1:54:1 | exit |
+| exprs.go:51:13:51:13 | i | exprs.go:51:10:51:14 | index expression |
+| exprs.go:53:2:53:7 | return statement | exprs.go:49:21:49:23 | implicit read of res |
+| exprs.go:56:1:56:1 | entry | exprs.go:56:11:56:12 | argument corresponding to xs |
+| exprs.go:56:1:58:1 | function declaration | exprs.go:60:6:60:9 | skip |
+| exprs.go:56:6:56:9 | skip | exprs.go:56:1:58:1 | function declaration |
+| exprs.go:56:11:56:12 | argument corresponding to xs | exprs.go:56:11:56:12 | initialization of xs |
+| exprs.go:56:11:56:12 | initialization of xs | exprs.go:57:9:57:11 | sum |
+| exprs.go:57:2:57:15 | return statement | exprs.go:58:1:58:1 | exit |
+| exprs.go:57:9:57:11 | sum | exprs.go:57:13:57:14 | xs |
+| exprs.go:57:9:57:15 | call to sum | exprs.go:57:2:57:15 | return statement |
+| exprs.go:57:9:57:15 | call to sum | exprs.go:58:1:58:1 | exit |
+| exprs.go:57:13:57:14 | xs | exprs.go:57:9:57:15 | call to sum |
+| exprs.go:60:1:60:1 | entry | exprs.go:61:9:61:22 | slice literal |
+| exprs.go:60:1:62:1 | function declaration | exprs.go:64:5:64:5 | skip |
+| exprs.go:60:6:60:9 | skip | exprs.go:60:1:62:1 | function declaration |
+| exprs.go:61:2:61:22 | return statement | exprs.go:62:1:62:1 | exit |
+| exprs.go:61:9:61:22 | slice literal | exprs.go:61:15:61:15 | element index |
+| exprs.go:61:15:61:15 | 1 | exprs.go:61:15:61:15 | init of 1 |
+| exprs.go:61:15:61:15 | element index | exprs.go:61:15:61:15 | 1 |
+| exprs.go:61:15:61:15 | init of 1 | exprs.go:61:18:61:18 | element index |
+| exprs.go:61:18:61:18 | 2 | exprs.go:61:18:61:18 | init of 2 |
+| exprs.go:61:18:61:18 | element index | exprs.go:61:18:61:18 | 2 |
+| exprs.go:61:18:61:18 | init of 2 | exprs.go:61:21:61:21 | element index |
+| exprs.go:61:21:61:21 | 3 | exprs.go:61:21:61:21 | init of 3 |
+| exprs.go:61:21:61:21 | element index | exprs.go:61:21:61:21 | 3 |
+| exprs.go:61:21:61:21 | init of 3 | exprs.go:61:2:61:22 | return statement |
+| exprs.go:64:5:64:5 | assignment to s | exprs.go:65:5:65:6 | skip |
+| exprs.go:64:5:64:5 | skip | exprs.go:64:9:64:11 | sum |
+| exprs.go:64:9:64:11 | sum | exprs.go:64:13:64:16 | ints |
+| exprs.go:64:9:64:19 | call to sum | exprs.go:0:0:0:0 | exit |
+| exprs.go:64:9:64:19 | call to sum | exprs.go:64:5:64:5 | assignment to s |
+| exprs.go:64:13:64:16 | ints | exprs.go:64:13:64:18 | call to ints |
+| exprs.go:64:13:64:18 | call to ints | exprs.go:0:0:0:0 | exit |
+| exprs.go:64:13:64:18 | call to ints | exprs.go:64:9:64:19 | call to sum |
+| exprs.go:65:5:65:6 | assignment to s2 | exprs.go:67:6:67:8 | skip |
+| exprs.go:65:5:65:6 | skip | exprs.go:65:10:65:13 | sum2 |
+| exprs.go:65:10:65:13 | sum2 | exprs.go:65:15:65:18 | ints |
+| exprs.go:65:10:65:24 | call to sum2 | exprs.go:0:0:0:0 | exit |
+| exprs.go:65:10:65:24 | call to sum2 | exprs.go:65:5:65:6 | assignment to s2 |
+| exprs.go:65:15:65:18 | ints | exprs.go:65:15:65:20 | call to ints |
+| exprs.go:65:15:65:20 | call to ints | exprs.go:0:0:0:0 | exit |
+| exprs.go:65:15:65:20 | call to ints | exprs.go:65:10:65:24 | call to sum2 |
+| exprs.go:67:1:67:1 | entry | exprs.go:67:10:67:10 | argument corresponding to x |
+| exprs.go:67:1:69:1 | function declaration | exprs.go:71:6:71:8 | skip |
+| exprs.go:67:6:67:8 | skip | exprs.go:67:1:69:1 | function declaration |
+| exprs.go:67:10:67:10 | argument corresponding to x | exprs.go:67:10:67:10 | initialization of x |
+| exprs.go:67:10:67:10 | initialization of x | exprs.go:67:13:67:13 | argument corresponding to y |
+| exprs.go:67:13:67:13 | argument corresponding to y | exprs.go:67:13:67:13 | initialization of y |
+| exprs.go:67:13:67:13 | initialization of y | exprs.go:68:9:68:9 | x |
+| exprs.go:68:2:68:13 | return statement | exprs.go:69:1:69:1 | exit |
+| exprs.go:68:9:68:9 | x | exprs.go:68:13:68:13 | y |
+| exprs.go:68:9:68:13 | ...+... | exprs.go:68:2:68:13 | return statement |
+| exprs.go:68:13:68:13 | y | exprs.go:68:9:68:13 | ...+... |
+| exprs.go:71:1:71:1 | entry | exprs.go:72:9:72:9 | 1 |
+| exprs.go:71:1:73:1 | function declaration | exprs.go:75:5:75:6 | skip |
+| exprs.go:71:6:71:8 | skip | exprs.go:71:1:73:1 | function declaration |
+| exprs.go:72:2:72:12 | return statement | exprs.go:73:1:73:1 | exit |
+| exprs.go:72:9:72:9 | 1 | exprs.go:72:12:72:12 | 2 |
+| exprs.go:72:12:72:12 | 2 | exprs.go:72:2:72:12 | return statement |
+| exprs.go:75:5:75:6 | assignment to s3 | exprs.go:77:6:77:10 | skip |
+| exprs.go:75:5:75:6 | skip | exprs.go:75:10:75:12 | add |
+| exprs.go:75:10:75:12 | add | exprs.go:75:14:75:16 | gen |
+| exprs.go:75:10:75:19 | call to add | exprs.go:0:0:0:0 | exit |
+| exprs.go:75:10:75:19 | call to add | exprs.go:75:5:75:6 | assignment to s3 |
+| exprs.go:75:10:75:19 | call to add[0] | exprs.go:75:10:75:19 | call to add[1] |
+| exprs.go:75:10:75:19 | call to add[1] | exprs.go:75:10:75:19 | call to add |
+| exprs.go:75:14:75:16 | gen | exprs.go:75:14:75:18 | call to gen |
+| exprs.go:75:14:75:18 | call to gen | exprs.go:0:0:0:0 | exit |
+| exprs.go:75:14:75:18 | call to gen | exprs.go:75:10:75:19 | call to add[0] |
+| exprs.go:77:1:77:1 | entry | exprs.go:77:12:77:12 | argument corresponding to x |
+| exprs.go:77:1:79:1 | function declaration | exprs.go:81:6:81:16 | skip |
+| exprs.go:77:6:77:10 | skip | exprs.go:77:1:79:1 | function declaration |
+| exprs.go:77:12:77:12 | argument corresponding to x | exprs.go:77:12:77:12 | initialization of x |
+| exprs.go:77:12:77:12 | initialization of x | exprs.go:77:15:77:15 | argument corresponding to y |
+| exprs.go:77:15:77:15 | argument corresponding to y | exprs.go:77:15:77:15 | initialization of y |
+| exprs.go:77:15:77:15 | initialization of y | exprs.go:77:18:77:18 | argument corresponding to z |
+| exprs.go:77:18:77:18 | argument corresponding to z | exprs.go:77:18:77:18 | initialization of z |
+| exprs.go:77:18:77:18 | initialization of z | exprs.go:78:11:78:11 | x |
+| exprs.go:78:2:78:22 | return statement | exprs.go:79:1:79:1 | exit |
+| exprs.go:78:9:78:17 | !... | exprs.go:78:17:78:17 | !... is false |
+| exprs.go:78:9:78:17 | !... | exprs.go:78:17:78:17 | !... is true |
+| exprs.go:78:9:78:22 | ...\|\|... | exprs.go:78:2:78:22 | return statement |
+| exprs.go:78:11:78:11 | x | exprs.go:78:11:78:11 | x is false |
+| exprs.go:78:11:78:11 | x | exprs.go:78:11:78:11 | x is true |
+| exprs.go:78:11:78:11 | x is false | exprs.go:78:11:78:16 | ...&&... |
+| exprs.go:78:11:78:11 | x is true | exprs.go:78:16:78:16 | y |
+| exprs.go:78:11:78:16 | ...&&... | exprs.go:78:9:78:17 | !... |
+| exprs.go:78:16:78:16 | y | exprs.go:78:11:78:16 | ...&&... |
+| exprs.go:78:17:78:17 | !... is false | exprs.go:78:22:78:22 | z |
+| exprs.go:78:17:78:17 | !... is true | exprs.go:78:9:78:22 | ...\|\|... |
+| exprs.go:78:22:78:22 | z | exprs.go:78:9:78:22 | ...\|\|... |
+| exprs.go:81:1:81:1 | entry | exprs.go:81:18:81:19 | argument corresponding to ch |
+| exprs.go:81:1:87:1 | function declaration | exprs.go:89:7:89:9 | skip |
+| exprs.go:81:6:81:16 | skip | exprs.go:81:1:87:1 | function declaration |
+| exprs.go:81:18:81:19 | argument corresponding to ch | exprs.go:81:18:81:19 | initialization of ch |
+| exprs.go:81:18:81:19 | initialization of ch | exprs.go:82:2:82:4 | skip |
+| exprs.go:82:2:82:4 | assignment to val | exprs.go:82:2:82:16 | ... := ...[1] |
+| exprs.go:82:2:82:4 | skip | exprs.go:82:7:82:8 | skip |
+| exprs.go:82:2:82:16 | ... := ...[0] | exprs.go:82:2:82:4 | assignment to val |
+| exprs.go:82:2:82:16 | ... := ...[1] | exprs.go:82:7:82:8 | assignment to ok |
+| exprs.go:82:7:82:8 | assignment to ok | exprs.go:83:5:83:6 | ok |
+| exprs.go:82:7:82:8 | skip | exprs.go:82:15:82:16 | ch |
+| exprs.go:82:13:82:16 | <-... | exprs.go:82:2:82:16 | ... := ...[0] |
+| exprs.go:82:15:82:16 | ch | exprs.go:82:13:82:16 | <-... |
+| exprs.go:83:5:83:6 | ok | exprs.go:83:6:83:6 | ok is false |
+| exprs.go:83:5:83:6 | ok | exprs.go:83:6:83:6 | ok is true |
+| exprs.go:83:6:83:6 | ok is false | exprs.go:86:2:86:6 | panic |
+| exprs.go:83:6:83:6 | ok is true | exprs.go:84:10:84:12 | val |
+| exprs.go:84:3:84:12 | return statement | exprs.go:87:1:87:1 | exit |
+| exprs.go:84:10:84:12 | val | exprs.go:84:3:84:12 | return statement |
+| exprs.go:86:2:86:6 | panic | exprs.go:86:8:86:17 | "No value" |
+| exprs.go:86:2:86:18 | call to panic | exprs.go:87:1:87:1 | exit |
+| exprs.go:86:8:86:17 | "No value" | exprs.go:86:2:86:18 | call to panic |
+| exprs.go:89:7:89:9 | assignment to one | exprs.go:91:5:91:5 | skip |
+| exprs.go:89:7:89:9 | skip | exprs.go:89:13:89:13 | 1 |
+| exprs.go:89:13:89:13 | 1 | exprs.go:89:7:89:9 | assignment to one |
+| exprs.go:91:5:91:5 | assignment to a | exprs.go:93:6:93:11 | skip |
+| exprs.go:91:5:91:5 | skip | exprs.go:91:9:91:25 | slice literal |
+| exprs.go:91:9:91:25 | slice literal | exprs.go:91:15:91:21 | ...+... |
+| exprs.go:91:15:91:21 | ...+... | exprs.go:91:24:91:24 | 2 |
+| exprs.go:91:15:91:24 | init of key-value pair | exprs.go:91:5:91:5 | assignment to a |
+| exprs.go:91:24:91:24 | 2 | exprs.go:91:15:91:24 | init of key-value pair |
+| exprs.go:93:1:93:1 | entry | exprs.go:93:13:93:13 | argument corresponding to x |
+| exprs.go:93:1:95:1 | function declaration | exprs.go:0:0:0:0 | exit |
+| exprs.go:93:6:93:11 | skip | exprs.go:93:1:95:1 | function declaration |
+| exprs.go:93:13:93:13 | argument corresponding to x | exprs.go:93:13:93:13 | initialization of x |
+| exprs.go:93:13:93:13 | initialization of x | exprs.go:93:16:93:16 | argument corresponding to y |
+| exprs.go:93:16:93:16 | argument corresponding to y | exprs.go:93:16:93:16 | initialization of y |
+| exprs.go:93:16:93:16 | initialization of y | exprs.go:93:19:93:19 | argument corresponding to z |
+| exprs.go:93:19:93:19 | argument corresponding to z | exprs.go:93:19:93:19 | initialization of z |
+| exprs.go:93:19:93:19 | initialization of z | exprs.go:94:10:94:10 | x |
+| exprs.go:94:2:94:21 | return statement | exprs.go:95:1:95:1 | exit |
+| exprs.go:94:9:94:21 | ...\|\|... | exprs.go:94:2:94:21 | return statement |
+| exprs.go:94:10:94:10 | x | exprs.go:94:10:94:10 | x is false |
+| exprs.go:94:10:94:10 | x | exprs.go:94:10:94:10 | x is true |
+| exprs.go:94:10:94:10 | x is false | exprs.go:94:16:94:16 | (...) is false |
+| exprs.go:94:10:94:10 | x is true | exprs.go:94:15:94:15 | y |
+| exprs.go:94:15:94:15 | y | exprs.go:94:16:94:16 | (...) is false |
+| exprs.go:94:15:94:15 | y | exprs.go:94:16:94:16 | (...) is true |
+| exprs.go:94:16:94:16 | (...) is false | exprs.go:94:21:94:21 | z |
+| exprs.go:94:16:94:16 | (...) is true | exprs.go:94:9:94:21 | ...\|\|... |
+| exprs.go:94:21:94:21 | z | exprs.go:94:9:94:21 | ...\|\|... |
+| hello.go:0:0:0:0 | entry | hello.go:3:1:3:12 | skip |
+| hello.go:3:1:3:12 | skip | hello.go:5:7:5:13 | skip |
+| hello.go:5:7:5:13 | assignment to message | hello.go:7:6:7:13 | skip |
+| hello.go:5:7:5:13 | skip | hello.go:5:17:5:31 | "Hello, world!" |
+| hello.go:5:17:5:31 | "Hello, world!" | hello.go:5:7:5:13 | assignment to message |
+| hello.go:7:1:7:1 | entry | hello.go:8:2:8:12 | selection of Println |
+| hello.go:7:1:9:1 | function declaration | hello.go:0:0:0:0 | exit |
+| hello.go:7:6:7:13 | skip | hello.go:7:1:9:1 | function declaration |
+| hello.go:8:2:8:12 | selection of Println | hello.go:8:14:8:20 | message |
+| hello.go:8:2:8:21 | call to Println | hello.go:9:1:9:1 | exit |
+| hello.go:8:14:8:20 | message | hello.go:8:2:8:21 | call to Println |
+| main.go:0:0:0:0 | entry | main.go:3:1:6:1 | skip |
+| main.go:3:1:6:1 | skip | main.go:8:6:8:9 | skip |
+| main.go:8:1:8:1 | entry | main.go:9:9:9:20 | selection of Float64 |
+| main.go:8:1:10:1 | function declaration | main.go:12:6:12:9 | skip |
+| main.go:8:6:8:9 | skip | main.go:8:1:10:1 | function declaration |
+| main.go:9:2:9:29 | return statement | main.go:10:1:10:1 | exit |
+| main.go:9:9:9:20 | selection of Float64 | main.go:9:9:9:22 | call to Float64 |
+| main.go:9:9:9:22 | call to Float64 | main.go:9:27:9:29 | 0.5 |
+| main.go:9:9:9:22 | call to Float64 | main.go:10:1:10:1 | exit |
+| main.go:9:9:9:29 | ...>=... | main.go:9:2:9:29 | return statement |
+| main.go:9:27:9:29 | 0.5 | main.go:9:9:9:29 | ...>=... |
+| main.go:12:1:12:1 | entry | main.go:13:6:13:6 | skip |
+| main.go:12:1:24:1 | function declaration | main.go:26:6:26:8 | skip |
+| main.go:12:6:12:9 | skip | main.go:12:1:24:1 | function declaration |
+| main.go:13:6:13:6 | assignment to x | main.go:14:2:14:2 | skip |
+| main.go:13:6:13:6 | skip | main.go:13:6:13:6 | zero value for x |
+| main.go:13:6:13:6 | zero value for x | main.go:13:6:13:6 | assignment to x |
+| main.go:14:2:14:2 | assignment to y | main.go:15:2:15:10 | selection of Print |
+| main.go:14:2:14:2 | skip | main.go:14:7:14:8 | 23 |
+| main.go:14:7:14:8 | 23 | main.go:14:2:14:2 | assignment to y |
+| main.go:15:2:15:10 | selection of Print | main.go:15:12:15:12 | x |
+| main.go:15:2:15:16 | call to Print | main.go:16:5:16:8 | cond |
+| main.go:15:2:15:16 | call to Print | main.go:24:1:24:1 | exit |
+| main.go:15:12:15:12 | x | main.go:15:15:15:15 | y |
+| main.go:15:15:15:15 | y | main.go:15:2:15:16 | call to Print |
+| main.go:16:5:16:8 | cond | main.go:16:5:16:10 | call to cond |
+| main.go:16:5:16:10 | call to cond | main.go:16:10:16:10 | call to cond is false |
+| main.go:16:5:16:10 | call to cond | main.go:16:10:16:10 | call to cond is true |
+| main.go:16:5:16:10 | call to cond | main.go:24:1:24:1 | exit |
+| main.go:16:10:16:10 | call to cond is false | main.go:19:2:19:10 | selection of Print |
+| main.go:16:10:16:10 | call to cond is true | main.go:17:3:17:3 | y |
+| main.go:17:3:17:3 | assignment to y | main.go:19:2:19:10 | selection of Print |
+| main.go:17:3:17:3 | y | main.go:17:8:17:9 | 19 |
+| main.go:17:3:17:9 | ... += ... | main.go:17:3:17:3 | assignment to y |
+| main.go:17:8:17:9 | 19 | main.go:17:3:17:9 | ... += ... |
+| main.go:19:2:19:10 | selection of Print | main.go:19:12:19:12 | x |
+| main.go:19:2:19:16 | call to Print | main.go:20:5:20:8 | cond |
+| main.go:19:2:19:16 | call to Print | main.go:24:1:24:1 | exit |
+| main.go:19:12:19:12 | x | main.go:19:15:19:15 | y |
+| main.go:19:15:19:15 | y | main.go:19:2:19:16 | call to Print |
+| main.go:20:5:20:8 | cond | main.go:20:5:20:10 | call to cond |
+| main.go:20:5:20:10 | call to cond | main.go:20:10:20:10 | call to cond is false |
+| main.go:20:5:20:10 | call to cond | main.go:20:10:20:10 | call to cond is true |
+| main.go:20:5:20:10 | call to cond | main.go:24:1:24:1 | exit |
+| main.go:20:10:20:10 | call to cond is false | main.go:23:2:23:10 | selection of Print |
+| main.go:20:10:20:10 | call to cond is true | main.go:21:3:21:3 | skip |
+| main.go:21:3:21:3 | assignment to x | main.go:23:2:23:10 | selection of Print |
+| main.go:21:3:21:3 | skip | main.go:21:7:21:7 | y |
+| main.go:21:7:21:7 | y | main.go:21:3:21:3 | assignment to x |
+| main.go:23:2:23:10 | selection of Print | main.go:23:12:23:12 | x |
+| main.go:23:2:23:16 | call to Print | main.go:24:1:24:1 | exit |
+| main.go:23:12:23:12 | x | main.go:23:15:23:15 | y |
+| main.go:23:15:23:15 | y | main.go:23:2:23:16 | call to Print |
+| main.go:26:1:26:1 | entry | main.go:26:10:26:10 | argument corresponding to x |
+| main.go:26:1:32:1 | function declaration | main.go:34:6:34:9 | skip |
+| main.go:26:6:26:8 | skip | main.go:26:1:32:1 | function declaration |
+| main.go:26:10:26:10 | argument corresponding to x | main.go:26:10:26:10 | initialization of x |
+| main.go:26:10:26:10 | initialization of x | main.go:27:2:27:2 | skip |
+| main.go:27:2:27:2 | assignment to a | main.go:27:5:27:5 | assignment to b |
+| main.go:27:2:27:2 | skip | main.go:27:5:27:5 | skip |
+| main.go:27:5:27:5 | assignment to b | main.go:28:5:28:8 | cond |
+| main.go:27:5:27:5 | skip | main.go:27:10:27:10 | x |
+| main.go:27:10:27:10 | x | main.go:27:13:27:13 | 0 |
+| main.go:27:13:27:13 | 0 | main.go:27:2:27:2 | assignment to a |
+| main.go:28:5:28:8 | cond | main.go:28:5:28:10 | call to cond |
+| main.go:28:5:28:10 | call to cond | main.go:28:10:28:10 | call to cond is false |
+| main.go:28:5:28:10 | call to cond | main.go:28:10:28:10 | call to cond is true |
+| main.go:28:5:28:10 | call to cond | main.go:32:1:32:1 | exit |
+| main.go:28:10:28:10 | call to cond is false | main.go:31:9:31:9 | a |
+| main.go:28:10:28:10 | call to cond is true | main.go:29:3:29:3 | skip |
+| main.go:29:3:29:3 | assignment to a | main.go:29:6:29:6 | assignment to b |
+| main.go:29:3:29:3 | skip | main.go:29:6:29:6 | skip |
+| main.go:29:6:29:6 | assignment to b | main.go:31:9:31:9 | a |
+| main.go:29:6:29:6 | skip | main.go:29:10:29:10 | b |
+| main.go:29:10:29:10 | b | main.go:29:13:29:13 | a |
+| main.go:29:13:29:13 | a | main.go:29:3:29:3 | assignment to a |
+| main.go:31:2:31:12 | return statement | main.go:32:1:32:1 | exit |
+| main.go:31:9:31:9 | a | main.go:31:12:31:12 | b |
+| main.go:31:12:31:12 | b | main.go:31:2:31:12 | return statement |
+| main.go:34:1:34:1 | entry | main.go:34:11:34:11 | argument corresponding to x |
+| main.go:34:1:36:1 | function declaration | main.go:38:6:38:8 | skip |
+| main.go:34:6:34:9 | skip | main.go:34:1:36:1 | function declaration |
+| main.go:34:11:34:11 | argument corresponding to x | main.go:34:11:34:11 | initialization of x |
+| main.go:34:11:34:11 | initialization of x | main.go:35:3:35:3 | x |
+| main.go:35:2:35:3 | assignment to star expression | main.go:36:1:36:1 | exit |
+| main.go:35:2:35:3 | star expression | main.go:35:8:35:9 | 19 |
+| main.go:35:2:35:3 | star expression | main.go:36:1:36:1 | exit |
+| main.go:35:2:35:9 | ... += ... | main.go:35:2:35:3 | assignment to star expression |
+| main.go:35:3:35:3 | x | main.go:35:2:35:3 | star expression |
+| main.go:35:8:35:9 | 19 | main.go:35:2:35:9 | ... += ... |
+| main.go:38:1:38:1 | entry | main.go:39:2:39:2 | skip |
+| main.go:38:1:45:1 | function declaration | main.go:47:6:47:8 | skip |
+| main.go:38:6:38:8 | skip | main.go:38:1:45:1 | function declaration |
+| main.go:39:2:39:2 | assignment to x | main.go:40:2:40:4 | skip |
+| main.go:39:2:39:2 | skip | main.go:39:7:39:8 | 23 |
+| main.go:39:7:39:8 | 23 | main.go:39:2:39:2 | assignment to x |
+| main.go:40:2:40:4 | assignment to ptr | main.go:41:5:41:8 | cond |
+| main.go:40:2:40:4 | skip | main.go:40:10:40:10 | x |
+| main.go:40:9:40:10 | &... | main.go:40:2:40:4 | assignment to ptr |
+| main.go:40:10:40:10 | x | main.go:40:9:40:10 | &... |
+| main.go:41:5:41:8 | cond | main.go:41:5:41:10 | call to cond |
+| main.go:41:5:41:10 | call to cond | main.go:41:10:41:10 | call to cond is false |
+| main.go:41:5:41:10 | call to cond | main.go:41:10:41:10 | call to cond is true |
+| main.go:41:5:41:10 | call to cond | main.go:45:1:45:1 | exit |
+| main.go:41:10:41:10 | call to cond is false | main.go:44:2:44:10 | selection of Print |
+| main.go:41:10:41:10 | call to cond is true | main.go:42:3:42:6 | bump |
+| main.go:42:3:42:6 | bump | main.go:42:8:42:10 | ptr |
+| main.go:42:3:42:11 | call to bump | main.go:44:2:44:10 | selection of Print |
+| main.go:42:3:42:11 | call to bump | main.go:45:1:45:1 | exit |
+| main.go:42:8:42:10 | ptr | main.go:42:3:42:11 | call to bump |
+| main.go:44:2:44:10 | selection of Print | main.go:44:12:44:12 | x |
+| main.go:44:2:44:13 | call to Print | main.go:45:1:45:1 | exit |
+| main.go:44:12:44:12 | x | main.go:44:2:44:13 | call to Print |
+| main.go:47:1:47:1 | entry | main.go:47:13:47:18 | zero value for result |
+| main.go:47:1:50:1 | function declaration | main.go:52:6:52:9 | skip |
+| main.go:47:6:47:8 | skip | main.go:47:1:50:1 | function declaration |
+| main.go:47:13:47:18 | implicit read of result | main.go:50:1:50:1 | exit |
+| main.go:47:13:47:18 | initialization of result | main.go:48:2:48:7 | skip |
+| main.go:47:13:47:18 | zero value for result | main.go:47:13:47:18 | initialization of result |
+| main.go:48:2:48:7 | assignment to result | main.go:49:2:49:7 | return statement |
+| main.go:48:2:48:7 | skip | main.go:48:11:48:12 | 42 |
+| main.go:48:11:48:12 | 42 | main.go:48:2:48:7 | assignment to result |
+| main.go:49:2:49:7 | return statement | main.go:47:13:47:18 | implicit read of result |
+| main.go:52:1:52:1 | entry | main.go:52:14:52:19 | zero value for result |
+| main.go:52:1:54:1 | function declaration | main.go:56:6:56:10 | skip |
+| main.go:52:6:52:9 | skip | main.go:52:1:54:1 | function declaration |
+| main.go:52:14:52:19 | implicit read of result | main.go:54:1:54:1 | exit |
+| main.go:52:14:52:19 | initialization of result | main.go:53:2:53:7 | return statement |
+| main.go:52:14:52:19 | zero value for result | main.go:52:14:52:19 | initialization of result |
+| main.go:53:2:53:7 | return statement | main.go:52:14:52:19 | implicit read of result |
+| main.go:56:1:56:1 | entry | main.go:57:6:57:6 | skip |
+| main.go:56:1:80:1 | function declaration | main.go:82:6:82:13 | skip |
+| main.go:56:6:56:10 | skip | main.go:56:1:80:1 | function declaration |
+| main.go:57:6:57:6 | assignment to x | main.go:58:6:58:9 | cond |
+| main.go:57:6:57:6 | skip | main.go:57:6:57:6 | zero value for x |
+| main.go:57:6:57:6 | zero value for x | main.go:57:6:57:6 | assignment to x |
+| main.go:58:6:58:9 | cond | main.go:58:6:58:11 | call to cond |
+| main.go:58:6:58:11 | call to cond | main.go:58:11:58:11 | call to cond is false |
+| main.go:58:6:58:11 | call to cond | main.go:58:11:58:11 | call to cond is true |
+| main.go:58:6:58:11 | call to cond | main.go:80:1:80:1 | exit |
+| main.go:58:11:58:11 | call to cond is false | main.go:61:2:61:10 | selection of Print |
+| main.go:58:11:58:11 | call to cond is true | main.go:59:3:59:3 | skip |
+| main.go:59:3:59:3 | assignment to x | main.go:58:6:58:9 | cond |
+| main.go:59:3:59:3 | skip | main.go:59:7:59:7 | 2 |
+| main.go:59:7:59:7 | 2 | main.go:59:3:59:3 | assignment to x |
+| main.go:61:2:61:10 | selection of Print | main.go:61:12:61:12 | x |
+| main.go:61:2:61:13 | call to Print | main.go:63:2:63:2 | skip |
+| main.go:61:2:61:13 | call to Print | main.go:80:1:80:1 | exit |
+| main.go:61:12:61:12 | x | main.go:61:2:61:13 | call to Print |
+| main.go:63:2:63:2 | assignment to y | main.go:64:6:64:6 | skip |
+| main.go:63:2:63:2 | skip | main.go:63:7:63:7 | 1 |
+| main.go:63:7:63:7 | 1 | main.go:63:2:63:2 | assignment to y |
+| main.go:64:6:64:6 | assignment to i | main.go:65:6:65:9 | cond |
+| main.go:64:6:64:6 | skip | main.go:64:11:64:11 | 0 |
+| main.go:64:11:64:11 | 0 | main.go:64:6:64:6 | assignment to i |
+| main.go:64:16:64:16 | i | main.go:64:16:64:18 | 1 |
+| main.go:64:16:64:18 | 1 | main.go:64:16:64:18 | rhs of increment statement |
+| main.go:64:16:64:18 | increment statement | main.go:65:6:65:9 | cond |
+| main.go:64:16:64:18 | rhs of increment statement | main.go:64:16:64:18 | increment statement |
+| main.go:65:6:65:9 | cond | main.go:65:6:65:11 | call to cond |
+| main.go:65:6:65:11 | call to cond | main.go:65:11:65:11 | call to cond is false |
+| main.go:65:6:65:11 | call to cond | main.go:65:11:65:11 | call to cond is true |
+| main.go:65:6:65:11 | call to cond | main.go:80:1:80:1 | exit |
+| main.go:65:11:65:11 | call to cond is false | main.go:68:3:68:3 | skip |
+| main.go:65:11:65:11 | call to cond is true | main.go:66:4:66:8 | skip |
+| main.go:66:4:66:8 | skip | main.go:70:2:70:10 | selection of Print |
+| main.go:68:3:68:3 | assignment to y | main.go:64:16:64:16 | i |
+| main.go:68:3:68:3 | skip | main.go:68:7:68:7 | 2 |
+| main.go:68:7:68:7 | 2 | main.go:68:3:68:3 | assignment to y |
+| main.go:70:2:70:10 | selection of Print | main.go:70:12:70:12 | y |
+| main.go:70:2:70:13 | call to Print | main.go:72:2:72:2 | skip |
+| main.go:70:2:70:13 | call to Print | main.go:80:1:80:1 | exit |
+| main.go:70:12:70:12 | y | main.go:70:2:70:13 | call to Print |
+| main.go:72:2:72:2 | assignment to z | main.go:73:6:73:6 | skip |
+| main.go:72:2:72:2 | skip | main.go:72:7:72:7 | 1 |
+| main.go:72:7:72:7 | 1 | main.go:72:2:72:2 | assignment to z |
+| main.go:73:6:73:6 | assignment to i | main.go:74:3:74:3 | skip |
+| main.go:73:6:73:6 | skip | main.go:73:11:73:11 | 0 |
+| main.go:73:11:73:11 | 0 | main.go:73:6:73:6 | assignment to i |
+| main.go:73:16:73:16 | i | main.go:73:16:73:18 | 1 |
+| main.go:73:16:73:18 | 1 | main.go:73:16:73:18 | rhs of increment statement |
+| main.go:73:16:73:18 | increment statement | main.go:74:3:74:3 | skip |
+| main.go:73:16:73:18 | rhs of increment statement | main.go:73:16:73:18 | increment statement |
+| main.go:74:3:74:3 | assignment to z | main.go:75:6:75:9 | cond |
+| main.go:74:3:74:3 | skip | main.go:74:7:74:7 | 2 |
+| main.go:74:7:74:7 | 2 | main.go:74:3:74:3 | assignment to z |
+| main.go:75:6:75:9 | cond | main.go:75:6:75:11 | call to cond |
+| main.go:75:6:75:11 | call to cond | main.go:75:11:75:11 | call to cond is false |
+| main.go:75:6:75:11 | call to cond | main.go:75:11:75:11 | call to cond is true |
+| main.go:75:6:75:11 | call to cond | main.go:80:1:80:1 | exit |
+| main.go:75:11:75:11 | call to cond is false | main.go:73:16:73:16 | i |
+| main.go:75:11:75:11 | call to cond is true | main.go:76:4:76:8 | skip |
+| main.go:76:4:76:8 | skip | main.go:79:2:79:10 | selection of Print |
+| main.go:79:2:79:10 | selection of Print | main.go:79:12:79:12 | z |
+| main.go:79:2:79:13 | call to Print | main.go:80:1:80:1 | exit |
+| main.go:79:12:79:12 | z | main.go:79:2:79:13 | call to Print |
+| main.go:82:1:82:1 | entry | main.go:82:18:82:18 | zero value for a |
+| main.go:82:1:86:1 | function declaration | main.go:88:6:88:23 | skip |
+| main.go:82:6:82:13 | skip | main.go:82:1:86:1 | function declaration |
+| main.go:82:18:82:18 | implicit read of a | main.go:82:25:82:25 | implicit read of b |
+| main.go:82:18:82:18 | initialization of a | main.go:82:25:82:25 | zero value for b |
+| main.go:82:18:82:18 | zero value for a | main.go:82:18:82:18 | initialization of a |
+| main.go:82:25:82:25 | implicit read of b | main.go:86:1:86:1 | exit |
+| main.go:82:25:82:25 | initialization of b | main.go:83:2:83:2 | skip |
+| main.go:82:25:82:25 | zero value for b | main.go:82:25:82:25 | initialization of b |
+| main.go:83:2:83:2 | assignment to x | main.go:84:2:84:2 | skip |
+| main.go:83:2:83:2 | skip | main.go:83:7:83:8 | 23 |
+| main.go:83:7:83:8 | 23 | main.go:83:2:83:2 | assignment to x |
+| main.go:84:2:84:2 | assignment to x | main.go:84:5:84:5 | assignment to a |
+| main.go:84:2:84:2 | skip | main.go:84:5:84:5 | skip |
+| main.go:84:5:84:5 | assignment to a | main.go:85:2:85:7 | return statement |
+| main.go:84:5:84:5 | skip | main.go:84:9:84:9 | x |
+| main.go:84:9:84:9 | x | main.go:84:11:84:12 | 19 |
+| main.go:84:9:84:12 | ...+... | main.go:84:15:84:15 | x |
+| main.go:84:11:84:12 | 19 | main.go:84:9:84:12 | ...+... |
+| main.go:84:15:84:15 | x | main.go:84:2:84:2 | assignment to x |
+| main.go:85:2:85:7 | return statement | main.go:82:18:82:18 | implicit read of a |
+| main.go:88:1:88:1 | entry | main.go:88:25:88:25 | argument corresponding to x |
+| main.go:88:1:96:1 | function declaration | main.go:0:0:0:0 | exit |
+| main.go:88:6:88:23 | skip | main.go:88:1:96:1 | function declaration |
+| main.go:88:25:88:25 | argument corresponding to x | main.go:88:25:88:25 | initialization of x |
+| main.go:88:25:88:25 | initialization of x | main.go:89:2:89:2 | skip |
+| main.go:89:2:89:2 | assignment to a | main.go:89:5:89:5 | assignment to b |
+| main.go:89:2:89:2 | skip | main.go:89:5:89:5 | skip |
+| main.go:89:5:89:5 | assignment to b | main.go:90:5:90:8 | cond |
+| main.go:89:5:89:5 | skip | main.go:89:10:89:10 | x |
+| main.go:89:10:89:10 | x | main.go:89:13:89:13 | 0 |
+| main.go:89:13:89:13 | 0 | main.go:89:2:89:2 | assignment to a |
+| main.go:90:5:90:8 | cond | main.go:90:5:90:10 | call to cond |
+| main.go:90:5:90:10 | call to cond | main.go:90:10:90:10 | call to cond is false |
+| main.go:90:5:90:10 | call to cond | main.go:90:10:90:10 | call to cond is true |
+| main.go:90:5:90:10 | call to cond | main.go:96:1:96:1 | exit |
+| main.go:90:10:90:10 | call to cond is false | main.go:93:3:93:3 | skip |
+| main.go:90:10:90:10 | call to cond is true | main.go:91:3:91:3 | skip |
+| main.go:91:3:91:3 | assignment to a | main.go:95:9:95:9 | a |
+| main.go:91:3:91:3 | skip | main.go:91:6:91:6 | skip |
+| main.go:91:6:91:6 | skip | main.go:91:10:91:10 | b |
+| main.go:91:10:91:10 | b | main.go:91:13:91:13 | a |
+| main.go:91:13:91:13 | a | main.go:91:3:91:3 | assignment to a |
+| main.go:93:3:93:3 | skip | main.go:93:6:93:6 | skip |
+| main.go:93:6:93:6 | assignment to b | main.go:95:9:95:9 | a |
+| main.go:93:6:93:6 | skip | main.go:93:10:93:10 | b |
+| main.go:93:10:93:10 | b | main.go:93:13:93:13 | a |
+| main.go:93:13:93:13 | a | main.go:93:6:93:6 | assignment to b |
+| main.go:95:2:95:12 | return statement | main.go:96:1:96:1 | exit |
+| main.go:95:9:95:9 | a | main.go:95:12:95:12 | b |
+| main.go:95:12:95:12 | b | main.go:95:2:95:12 | return statement |
+| noretfunctions.go:0:0:0:0 | entry | noretfunctions.go:3:1:6:1 | skip |
+| noretfunctions.go:3:1:6:1 | skip | noretfunctions.go:8:6:8:12 | skip |
+| noretfunctions.go:8:1:8:1 | entry | noretfunctions.go:9:2:9:8 | selection of Exit |
+| noretfunctions.go:8:1:10:1 | function declaration | noretfunctions.go:12:6:12:11 | skip |
+| noretfunctions.go:8:6:8:12 | skip | noretfunctions.go:8:1:10:1 | function declaration |
+| noretfunctions.go:9:2:9:8 | selection of Exit | noretfunctions.go:9:10:9:10 | 1 |
+| noretfunctions.go:9:2:9:11 | call to Exit | noretfunctions.go:10:1:10:1 | exit |
+| noretfunctions.go:9:10:9:10 | 1 | noretfunctions.go:9:2:9:11 | call to Exit |
+| noretfunctions.go:12:1:12:1 | entry | noretfunctions.go:12:13:12:13 | argument corresponding to x |
+| noretfunctions.go:12:1:16:1 | function declaration | noretfunctions.go:18:6:18:12 | skip |
+| noretfunctions.go:12:6:12:11 | skip | noretfunctions.go:12:1:16:1 | function declaration |
+| noretfunctions.go:12:13:12:13 | argument corresponding to x | noretfunctions.go:12:13:12:13 | initialization of x |
+| noretfunctions.go:12:13:12:13 | initialization of x | noretfunctions.go:13:5:13:5 | x |
+| noretfunctions.go:13:5:13:5 | x | noretfunctions.go:13:10:13:10 | 0 |
+| noretfunctions.go:13:5:13:10 | ...!=... | noretfunctions.go:13:10:13:10 | ...!=... is false |
+| noretfunctions.go:13:5:13:10 | ...!=... | noretfunctions.go:13:10:13:10 | ...!=... is true |
+| noretfunctions.go:13:10:13:10 | 0 | noretfunctions.go:13:5:13:10 | ...!=... |
+| noretfunctions.go:13:10:13:10 | ...!=... is false | noretfunctions.go:16:1:16:1 | exit |
+| noretfunctions.go:13:10:13:10 | ...!=... is true | noretfunctions.go:14:3:14:9 | selection of Exit |
+| noretfunctions.go:14:3:14:9 | selection of Exit | noretfunctions.go:14:11:14:11 | x |
+| noretfunctions.go:14:3:14:12 | call to Exit | noretfunctions.go:16:1:16:1 | exit |
+| noretfunctions.go:14:11:14:11 | x | noretfunctions.go:14:3:14:12 | call to Exit |
+| noretfunctions.go:18:1:18:1 | entry | noretfunctions.go:18:16:18:17 | skip |
+| noretfunctions.go:18:1:18:17 | function declaration | noretfunctions.go:20:6:20:22 | skip |
+| noretfunctions.go:18:6:18:12 | skip | noretfunctions.go:18:1:18:17 | function declaration |
+| noretfunctions.go:18:16:18:17 | skip | noretfunctions.go:18:17:18:17 | exit |
+| noretfunctions.go:20:1:20:1 | entry | noretfunctions.go:21:2:21:10 | selection of Fatal |
+| noretfunctions.go:20:1:22:1 | function declaration | noretfunctions.go:24:6:24:23 | skip |
+| noretfunctions.go:20:6:20:22 | skip | noretfunctions.go:20:1:22:1 | function declaration |
+| noretfunctions.go:21:2:21:10 | selection of Fatal | noretfunctions.go:21:12:21:18 | "Oh no" |
+| noretfunctions.go:21:2:21:19 | call to Fatal | noretfunctions.go:22:1:22:1 | exit |
+| noretfunctions.go:21:12:21:18 | "Oh no" | noretfunctions.go:21:2:21:19 | call to Fatal |
+| noretfunctions.go:24:1:24:1 | entry | noretfunctions.go:25:2:25:11 | selection of Fatalf |
+| noretfunctions.go:24:1:26:1 | function declaration | noretfunctions.go:0:0:0:0 | exit |
+| noretfunctions.go:24:6:24:23 | skip | noretfunctions.go:24:1:26:1 | function declaration |
+| noretfunctions.go:25:2:25:11 | selection of Fatalf | noretfunctions.go:25:13:25:30 | "It's as I feared" |
+| noretfunctions.go:25:2:25:31 | call to Fatalf | noretfunctions.go:26:1:26:1 | exit |
+| noretfunctions.go:25:13:25:30 | "It's as I feared" | noretfunctions.go:25:2:25:31 | call to Fatalf |
+| stmts2.go:0:0:0:0 | entry | stmts2.go:3:6:3:11 | skip |
+| stmts2.go:3:1:3:1 | entry | stmts2.go:4:2:4:2 | skip |
+| stmts2.go:3:1:7:1 | function declaration | stmts2.go:9:6:9:11 | skip |
+| stmts2.go:3:6:3:11 | skip | stmts2.go:3:1:7:1 | function declaration |
+| stmts2.go:4:2:4:2 | skip | stmts2.go:4:6:4:10 | test7 |
+| stmts2.go:4:6:4:10 | test7 | stmts2.go:4:12:4:12 | 0 |
+| stmts2.go:4:6:4:13 | call to test7 | stmts2.go:5:6:5:6 | skip |
+| stmts2.go:4:6:4:13 | call to test7 | stmts2.go:7:1:7:1 | exit |
+| stmts2.go:4:12:4:12 | 0 | stmts2.go:4:6:4:13 | call to test7 |
+| stmts2.go:5:6:5:6 | skip | stmts2.go:5:10:5:14 | test7 |
+| stmts2.go:5:10:5:14 | test7 | stmts2.go:5:16:5:16 | 1 |
+| stmts2.go:5:10:5:17 | call to test7 | stmts2.go:6:9:6:9 | 2 |
+| stmts2.go:5:10:5:17 | call to test7 | stmts2.go:7:1:7:1 | exit |
+| stmts2.go:5:16:5:16 | 1 | stmts2.go:5:10:5:17 | call to test7 |
+| stmts2.go:6:2:6:9 | return statement | stmts2.go:7:1:7:1 | exit |
+| stmts2.go:6:9:6:9 | 2 | stmts2.go:6:2:6:9 | return statement |
+| stmts2.go:9:1:9:1 | entry | stmts2.go:10:2:10:2 | skip |
+| stmts2.go:9:1:13:1 | function declaration | stmts2.go:15:6:15:11 | skip |
+| stmts2.go:9:6:9:11 | skip | stmts2.go:9:1:13:1 | function declaration |
+| stmts2.go:10:2:10:2 | skip | stmts2.go:10:5:10:5 | skip |
+| stmts2.go:10:2:10:14 | ... := ...[0] | stmts2.go:10:2:10:14 | ... := ...[1] |
+| stmts2.go:10:2:10:14 | ... := ...[1] | stmts2.go:10:5:10:5 | assignment to x |
+| stmts2.go:10:5:10:5 | assignment to x | stmts2.go:11:6:11:6 | skip |
+| stmts2.go:10:5:10:5 | skip | stmts2.go:10:10:10:12 | gen |
+| stmts2.go:10:10:10:12 | gen | stmts2.go:10:10:10:14 | call to gen |
+| stmts2.go:10:10:10:14 | call to gen | stmts2.go:10:2:10:14 | ... := ...[0] |
+| stmts2.go:10:10:10:14 | call to gen | stmts2.go:13:1:13:1 | exit |
+| stmts2.go:11:6:11:6 | skip | stmts2.go:11:9:11:9 | skip |
+| stmts2.go:11:6:11:17 | value declaration specifier[0] | stmts2.go:11:6:11:17 | value declaration specifier[1] |
+| stmts2.go:11:6:11:17 | value declaration specifier[1] | stmts2.go:11:9:11:9 | assignment to y |
+| stmts2.go:11:9:11:9 | assignment to y | stmts2.go:12:9:12:9 | x |
+| stmts2.go:11:9:11:9 | skip | stmts2.go:11:13:11:15 | gen |
+| stmts2.go:11:13:11:15 | gen | stmts2.go:11:13:11:17 | call to gen |
+| stmts2.go:11:13:11:17 | call to gen | stmts2.go:11:6:11:17 | value declaration specifier[0] |
+| stmts2.go:11:13:11:17 | call to gen | stmts2.go:13:1:13:1 | exit |
+| stmts2.go:12:2:12:13 | return statement | stmts2.go:13:1:13:1 | exit |
+| stmts2.go:12:9:12:9 | x | stmts2.go:12:13:12:13 | y |
+| stmts2.go:12:9:12:13 | ...+... | stmts2.go:12:2:12:13 | return statement |
+| stmts2.go:12:13:12:13 | y | stmts2.go:12:9:12:13 | ...+... |
+| stmts2.go:15:1:15:1 | entry | stmts2.go:15:13:15:14 | argument corresponding to ch |
+| stmts2.go:15:1:28:1 | function declaration | stmts2.go:30:6:30:12 | skip |
+| stmts2.go:15:6:15:11 | skip | stmts2.go:15:1:28:1 | function declaration |
+| stmts2.go:15:13:15:14 | argument corresponding to ch | stmts2.go:15:13:15:14 | initialization of ch |
+| stmts2.go:15:13:15:14 | initialization of ch | stmts2.go:17:13:17:14 | ch |
+| stmts2.go:16:2:26:2 | select statement | stmts2.go:17:11:17:14 | <-... |
+| stmts2.go:16:2:26:2 | select statement | stmts2.go:18:15:18:18 | <-... |
+| stmts2.go:16:2:26:2 | select statement | stmts2.go:20:15:20:18 | <-... |
+| stmts2.go:16:2:26:2 | select statement | stmts2.go:25:14:25:17 | <-... |
+| stmts2.go:17:2:17:15 | skip | stmts2.go:27:9:27:9 | 1 |
+| stmts2.go:17:7:17:7 | skip | stmts2.go:17:2:17:15 | skip |
+| stmts2.go:17:11:17:14 | <-... | stmts2.go:17:7:17:7 | skip |
+| stmts2.go:17:13:17:14 | ch | stmts2.go:18:17:18:18 | ch |
+| stmts2.go:18:7:18:7 | assignment to x | stmts2.go:18:7:18:18 | ... := ...[1] |
+| stmts2.go:18:7:18:7 | skip | stmts2.go:18:10:18:10 | skip |
+| stmts2.go:18:7:18:18 | ... := ...[0] | stmts2.go:18:7:18:7 | assignment to x |
+| stmts2.go:18:7:18:18 | ... := ...[1] | stmts2.go:19:10:19:10 | x |
+| stmts2.go:18:10:18:10 | skip | stmts2.go:18:7:18:18 | ... := ...[0] |
+| stmts2.go:18:15:18:18 | <-... | stmts2.go:18:7:18:7 | skip |
+| stmts2.go:18:17:18:18 | ch | stmts2.go:20:17:20:18 | ch |
+| stmts2.go:19:3:19:10 | return statement | stmts2.go:28:1:28:1 | exit |
+| stmts2.go:19:10:19:10 | x | stmts2.go:19:3:19:10 | return statement |
+| stmts2.go:20:7:20:7 | skip | stmts2.go:20:10:20:10 | skip |
+| stmts2.go:20:7:20:18 | ... := ...[0] | stmts2.go:20:7:20:18 | ... := ...[1] |
+| stmts2.go:20:7:20:18 | ... := ...[1] | stmts2.go:20:10:20:10 | assignment to y |
+| stmts2.go:20:10:20:10 | assignment to y | stmts2.go:21:6:21:6 | y |
+| stmts2.go:20:10:20:10 | skip | stmts2.go:20:7:20:18 | ... := ...[0] |
+| stmts2.go:20:15:20:18 | <-... | stmts2.go:20:7:20:7 | skip |
+| stmts2.go:20:17:20:18 | ch | stmts2.go:25:16:25:17 | ch |
+| stmts2.go:21:6:21:6 | y | stmts2.go:21:6:21:6 | y is false |
+| stmts2.go:21:6:21:6 | y | stmts2.go:21:6:21:6 | y is true |
+| stmts2.go:21:6:21:6 | y is false | stmts2.go:24:10:24:10 | 0 |
+| stmts2.go:21:6:21:6 | y is true | stmts2.go:22:4:22:8 | skip |
+| stmts2.go:22:4:22:8 | skip | stmts2.go:27:9:27:9 | 1 |
+| stmts2.go:24:3:24:10 | return statement | stmts2.go:28:1:28:1 | exit |
+| stmts2.go:24:10:24:10 | 0 | stmts2.go:24:3:24:10 | return statement |
+| stmts2.go:25:2:25:18 | skip | stmts2.go:27:9:27:9 | 1 |
+| stmts2.go:25:7:25:7 | skip | stmts2.go:25:10:25:10 | skip |
+| stmts2.go:25:7:25:17 | ... = ...[0] | stmts2.go:25:7:25:17 | ... = ...[1] |
+| stmts2.go:25:7:25:17 | ... = ...[1] | stmts2.go:25:2:25:18 | skip |
+| stmts2.go:25:10:25:10 | skip | stmts2.go:25:7:25:17 | ... = ...[0] |
+| stmts2.go:25:14:25:17 | <-... | stmts2.go:25:7:25:7 | skip |
+| stmts2.go:25:16:25:17 | ch | stmts2.go:16:2:26:2 | select statement |
+| stmts2.go:27:2:27:9 | return statement | stmts2.go:28:1:28:1 | exit |
+| stmts2.go:27:9:27:9 | 1 | stmts2.go:27:2:27:9 | return statement |
+| stmts2.go:30:1:30:1 | entry | stmts2.go:31:2:31:2 | skip |
+| stmts2.go:30:1:34:1 | function declaration | stmts2.go:0:0:0:0 | exit |
+| stmts2.go:30:6:30:12 | skip | stmts2.go:30:1:34:1 | function declaration |
+| stmts2.go:31:2:31:2 | assignment to x | stmts2.go:31:2:31:14 | ... := ...[1] |
+| stmts2.go:31:2:31:2 | skip | stmts2.go:31:5:31:5 | skip |
+| stmts2.go:31:2:31:14 | ... := ...[0] | stmts2.go:31:2:31:2 | assignment to x |
+| stmts2.go:31:2:31:14 | ... := ...[1] | stmts2.go:32:6:32:6 | skip |
+| stmts2.go:31:5:31:5 | skip | stmts2.go:31:10:31:12 | gen |
+| stmts2.go:31:10:31:12 | gen | stmts2.go:31:10:31:14 | call to gen |
+| stmts2.go:31:10:31:14 | call to gen | stmts2.go:31:2:31:14 | ... := ...[0] |
+| stmts2.go:31:10:31:14 | call to gen | stmts2.go:34:1:34:1 | exit |
+| stmts2.go:32:6:32:6 | assignment to y | stmts2.go:32:6:32:17 | value declaration specifier[1] |
+| stmts2.go:32:6:32:6 | skip | stmts2.go:32:9:32:9 | skip |
+| stmts2.go:32:6:32:17 | value declaration specifier[0] | stmts2.go:32:6:32:6 | assignment to y |
+| stmts2.go:32:6:32:17 | value declaration specifier[1] | stmts2.go:33:9:33:9 | x |
+| stmts2.go:32:9:32:9 | skip | stmts2.go:32:13:32:15 | gen |
+| stmts2.go:32:13:32:15 | gen | stmts2.go:32:13:32:17 | call to gen |
+| stmts2.go:32:13:32:17 | call to gen | stmts2.go:32:6:32:17 | value declaration specifier[0] |
+| stmts2.go:32:13:32:17 | call to gen | stmts2.go:34:1:34:1 | exit |
+| stmts2.go:33:2:33:13 | return statement | stmts2.go:34:1:34:1 | exit |
+| stmts2.go:33:9:33:9 | x | stmts2.go:33:13:33:13 | y |
+| stmts2.go:33:9:33:13 | ...+... | stmts2.go:33:2:33:13 | return statement |
+| stmts2.go:33:13:33:13 | y | stmts2.go:33:9:33:13 | ...+... |
+| stmts3.go:0:0:0:0 | entry | stmts3.go:3:1:3:13 | skip |
+| stmts3.go:3:1:3:13 | skip | stmts3.go:5:6:5:11 | skip |
+| stmts3.go:5:1:5:1 | entry | stmts3.go:7:3:7:5 | skip |
+| stmts3.go:5:1:12:1 | function declaration | stmts3.go:14:6:14:11 | skip |
+| stmts3.go:5:6:5:11 | skip | stmts3.go:5:1:12:1 | function declaration |
+| stmts3.go:7:3:7:5 | assignment to red | stmts3.go:8:3:8:7 | skip |
+| stmts3.go:7:3:7:5 | skip | stmts3.go:7:9:7:12 | iota |
+| stmts3.go:7:9:7:12 | iota | stmts3.go:7:3:7:5 | assignment to red |
+| stmts3.go:8:3:8:7 | assignment to green | stmts3.go:9:3:9:6 | skip |
+| stmts3.go:8:3:8:7 | skip | stmts3.go:8:3:8:7 | zero value for green |
+| stmts3.go:8:3:8:7 | zero value for green | stmts3.go:8:3:8:7 | assignment to green |
+| stmts3.go:9:3:9:6 | assignment to blue | stmts3.go:11:9:11:26 | ...-... |
+| stmts3.go:9:3:9:6 | skip | stmts3.go:9:3:9:6 | zero value for blue |
+| stmts3.go:9:3:9:6 | zero value for blue | stmts3.go:9:3:9:6 | assignment to blue |
+| stmts3.go:11:2:11:26 | return statement | stmts3.go:12:1:12:1 | exit |
+| stmts3.go:11:9:11:26 | ...-... | stmts3.go:11:2:11:26 | return statement |
+| stmts3.go:14:1:14:1 | entry | stmts3.go:14:13:14:13 | argument corresponding to x |
+| stmts3.go:14:1:16:1 | function declaration | stmts3.go:18:6:18:11 | skip |
+| stmts3.go:14:6:14:11 | skip | stmts3.go:14:1:16:1 | function declaration |
+| stmts3.go:14:13:14:13 | argument corresponding to x | stmts3.go:14:13:14:13 | initialization of x |
+| stmts3.go:14:13:14:13 | initialization of x | stmts3.go:15:3:15:3 | x |
+| stmts3.go:15:2:15:3 | assignment to star expression | stmts3.go:16:1:16:1 | exit |
+| stmts3.go:15:2:15:3 | skip | stmts3.go:15:7:15:8 | 42 |
+| stmts3.go:15:2:15:3 | skip | stmts3.go:16:1:16:1 | exit |
+| stmts3.go:15:3:15:3 | x | stmts3.go:15:2:15:3 | skip |
+| stmts3.go:15:7:15:8 | 42 | stmts3.go:15:2:15:3 | assignment to star expression |
+| stmts3.go:18:1:18:1 | entry | stmts3.go:19:2:19:11 | skip |
+| stmts3.go:18:1:20:1 | function declaration | stmts3.go:0:0:0:0 | exit |
+| stmts3.go:18:6:18:11 | skip | stmts3.go:18:1:20:1 | function declaration |
+| stmts3.go:19:2:19:11 | assignment to Usage | stmts3.go:20:1:20:1 | exit |
+| stmts3.go:19:2:19:11 | skip | stmts3.go:19:15:19:23 | function literal |
+| stmts3.go:19:15:19:15 | entry | stmts3.go:19:22:19:23 | skip |
+| stmts3.go:19:15:19:23 | function literal | stmts3.go:19:2:19:11 | assignment to Usage |
+| stmts3.go:19:22:19:23 | skip | stmts3.go:19:23:19:23 | exit |
+| stmts4.go:0:0:0:0 | entry | stmts4.go:3:5:3:5 | skip |
+| stmts4.go:3:5:3:5 | skip | stmts4.go:3:5:3:5 | zero value for _ |
+| stmts4.go:3:5:3:5 | zero value for _ | stmts4.go:5:6:5:11 | skip |
+| stmts4.go:5:1:5:26 | function declaration | stmts4.go:0:0:0:0 | exit |
+| stmts4.go:5:6:5:11 | skip | stmts4.go:5:1:5:26 | function declaration |
+| stmts5.go:0:0:0:0 | entry | stmts5.go:3:1:5:1 | skip |
+| stmts5.go:3:1:5:1 | skip | stmts5.go:7:17:7:20 | skip |
+| stmts5.go:7:1:7:1 | entry | stmts5.go:7:7:7:8 | argument corresponding to me |
+| stmts5.go:7:1:9:1 | function declaration | stmts5.go:11:14:11:16 | skip |
+| stmts5.go:7:7:7:8 | argument corresponding to me | stmts5.go:7:7:7:8 | initialization of me |
+| stmts5.go:7:7:7:8 | initialization of me | stmts5.go:7:22:7:26 | argument corresponding to other |
+| stmts5.go:7:17:7:20 | skip | stmts5.go:7:1:9:1 | function declaration |
+| stmts5.go:7:22:7:26 | argument corresponding to other | stmts5.go:7:22:7:26 | initialization of other |
+| stmts5.go:7:22:7:26 | initialization of other | stmts5.go:8:2:8:3 | me |
+| stmts5.go:8:2:8:3 | me | stmts5.go:8:2:8:7 | selection of val |
+| stmts5.go:8:2:8:7 | assignment to field val | stmts5.go:9:1:9:1 | exit |
+| stmts5.go:8:2:8:7 | selection of val | stmts5.go:8:12:8:16 | other |
+| stmts5.go:8:2:8:16 | ... += ... | stmts5.go:8:2:8:7 | assignment to field val |
+| stmts5.go:8:12:8:16 | other | stmts5.go:8:2:8:16 | ... += ... |
+| stmts5.go:11:1:11:1 | entry | stmts5.go:11:20:12:1 | skip |
+| stmts5.go:11:1:12:1 | function declaration | stmts5.go:0:0:0:0 | exit |
+| stmts5.go:11:14:11:16 | skip | stmts5.go:11:1:12:1 | function declaration |
+| stmts5.go:11:20:12:1 | skip | stmts5.go:12:1:12:1 | exit |
+| stmts6.go:0:0:0:0 | entry | stmts6.go:3:6:3:11 | skip |
+| stmts6.go:3:1:3:1 | entry | stmts6.go:4:5:4:8 | true |
+| stmts6.go:3:1:8:1 | function declaration | stmts6.go:0:0:0:0 | exit |
+| stmts6.go:3:6:3:11 | skip | stmts6.go:3:1:8:1 | function declaration |
+| stmts6.go:4:5:4:8 | true | stmts6.go:4:8:4:8 | true is true |
+| stmts6.go:4:8:4:8 | true is false | stmts6.go:7:9:7:10 | 23 |
+| stmts6.go:4:8:4:8 | true is true | stmts6.go:5:10:5:11 | 42 |
+| stmts6.go:5:3:5:11 | return statement | stmts6.go:8:1:8:1 | exit |
+| stmts6.go:5:10:5:11 | 42 | stmts6.go:5:3:5:11 | return statement |
+| stmts6.go:7:9:7:10 | 23 | stmts6.go:7:2:7:10 | return statement |
+| stmts7.go:0:0:0:0 | entry | stmts7.go:3:1:3:12 | skip |
+| stmts7.go:3:1:3:12 | skip | stmts7.go:5:6:5:17 | skip |
+| stmts7.go:5:1:5:1 | entry | stmts7.go:6:2:6:5 | skip |
+| stmts7.go:5:1:8:1 | function declaration | stmts7.go:10:6:10:15 | skip |
+| stmts7.go:5:6:5:17 | skip | stmts7.go:5:1:8:1 | function declaration |
+| stmts7.go:6:2:6:5 | assignment to blah | stmts7.go:7:2:7:12 | selection of Println |
+| stmts7.go:6:2:6:5 | skip | stmts7.go:6:10:6:16 | recover |
+| stmts7.go:6:10:6:16 | recover | stmts7.go:6:10:6:18 | call to recover |
+| stmts7.go:6:10:6:18 | call to recover | stmts7.go:6:2:6:5 | assignment to blah |
+| stmts7.go:7:2:7:12 | selection of Println | stmts7.go:7:14:7:26 | "recovered: " |
+| stmts7.go:7:2:7:33 | call to Println | stmts7.go:8:1:8:1 | exit |
+| stmts7.go:7:14:7:26 | "recovered: " | stmts7.go:7:29:7:32 | blah |
+| stmts7.go:7:29:7:32 | blah | stmts7.go:7:2:7:33 | call to Println |
+| stmts7.go:10:1:10:1 | entry | stmts7.go:11:8:11:19 | recoverPanic |
+| stmts7.go:10:1:13:1 | function declaration | stmts7.go:15:1:17:1 | skip |
+| stmts7.go:10:6:10:15 | skip | stmts7.go:10:1:13:1 | function declaration |
+| stmts7.go:11:2:11:21 | defer statement | stmts7.go:12:2:12:6 | panic |
+| stmts7.go:11:8:11:19 | recoverPanic | stmts7.go:11:2:11:21 | defer statement |
+| stmts7.go:11:8:11:21 | call to recoverPanic | stmts7.go:13:1:13:1 | exit |
+| stmts7.go:12:2:12:6 | panic | stmts7.go:12:8:12:9 | "" |
+| stmts7.go:12:2:12:10 | call to panic | stmts7.go:11:8:11:21 | call to recoverPanic |
+| stmts7.go:12:8:12:9 | "" | stmts7.go:12:2:12:10 | call to panic |
+| stmts7.go:15:1:17:1 | skip | stmts7.go:19:26:19:28 | skip |
+| stmts7.go:19:1:19:1 | entry | stmts7.go:19:7:19:13 | argument corresponding to methods |
+| stmts7.go:19:1:21:1 | function declaration | stmts7.go:23:6:23:14 | skip |
+| stmts7.go:19:7:19:13 | argument corresponding to methods | stmts7.go:19:7:19:13 | initialization of methods |
+| stmts7.go:19:7:19:13 | initialization of methods | stmts7.go:20:2:20:8 | methods |
+| stmts7.go:19:26:19:28 | skip | stmts7.go:19:1:21:1 | function declaration |
+| stmts7.go:20:2:20:8 | implicit dereference | stmts7.go:20:2:20:11 | selection of fn |
+| stmts7.go:20:2:20:8 | implicit dereference | stmts7.go:21:1:21:1 | exit |
+| stmts7.go:20:2:20:8 | methods | stmts7.go:20:2:20:8 | implicit dereference |
+| stmts7.go:20:2:20:11 | selection of fn | stmts7.go:20:2:20:13 | call to fn |
+| stmts7.go:20:2:20:13 | call to fn | stmts7.go:21:1:21:1 | exit |
+| stmts7.go:23:1:23:1 | entry | stmts7.go:23:16:23:23 | argument corresponding to callback |
+| stmts7.go:23:1:28:1 | function declaration | stmts7.go:0:0:0:0 | exit |
+| stmts7.go:23:6:23:14 | skip | stmts7.go:23:1:28:1 | function declaration |
+| stmts7.go:23:16:23:23 | argument corresponding to callback | stmts7.go:23:16:23:23 | initialization of callback |
+| stmts7.go:23:16:23:23 | initialization of callback | stmts7.go:24:8:24:15 | callback |
+| stmts7.go:24:2:24:20 | defer statement | stmts7.go:25:10:25:17 | callback |
+| stmts7.go:24:8:24:15 | callback | stmts7.go:24:8:24:18 | selection of fn |
+| stmts7.go:24:8:24:18 | selection of fn | stmts7.go:24:2:24:20 | defer statement |
+| stmts7.go:24:8:24:20 | call to fn | stmts7.go:28:1:28:1 | exit |
+| stmts7.go:25:2:25:23 | defer statement | stmts7.go:26:2:26:12 | selection of Println |
+| stmts7.go:25:8:25:18 | implicit dereference | stmts7.go:24:8:24:20 | call to fn |
+| stmts7.go:25:8:25:18 | implicit dereference | stmts7.go:25:8:25:21 | selection of fn |
+| stmts7.go:25:8:25:21 | selection of fn | stmts7.go:25:2:25:23 | defer statement |
+| stmts7.go:25:8:25:23 | call to fn | stmts7.go:24:8:24:20 | call to fn |
+| stmts7.go:25:9:25:17 | &... | stmts7.go:25:8:25:18 | implicit dereference |
+| stmts7.go:25:10:25:17 | callback | stmts7.go:25:9:25:17 | &... |
+| stmts7.go:26:2:26:12 | selection of Println | stmts7.go:26:14:26:30 | "print something" |
+| stmts7.go:26:2:26:31 | call to Println | stmts7.go:25:8:25:23 | call to fn |
+| stmts7.go:26:2:26:31 | call to Println | stmts7.go:27:9:27:13 | false |
+| stmts7.go:26:14:26:30 | "print something" | stmts7.go:26:2:26:31 | call to Println |
+| stmts7.go:27:2:27:13 | return statement | stmts7.go:25:8:25:23 | call to fn |
+| stmts7.go:27:9:27:13 | false | stmts7.go:27:2:27:13 | return statement |
+| stmts8.go:0:0:0:0 | entry | stmts8.go:3:6:3:11 | skip |
+| stmts8.go:3:1:3:1 | entry | stmts8.go:3:13:3:13 | argument corresponding to x |
+| stmts8.go:3:1:7:1 | function declaration | stmts8.go:9:6:9:12 | skip |
+| stmts8.go:3:6:3:11 | skip | stmts8.go:3:1:7:1 | function declaration |
+| stmts8.go:3:13:3:13 | argument corresponding to x | stmts8.go:3:13:3:13 | initialization of x |
+| stmts8.go:3:13:3:13 | initialization of x | stmts8.go:4:2:4:2 | skip |
+| stmts8.go:4:2:4:2 | assignment to y | stmts8.go:5:2:5:2 | skip |
+| stmts8.go:4:2:4:2 | skip | stmts8.go:4:7:4:7 | x |
+| stmts8.go:4:7:4:7 | x | stmts8.go:4:12:4:12 | 5 |
+| stmts8.go:4:7:4:12 | ...>>... | stmts8.go:4:2:4:2 | assignment to y |
+| stmts8.go:4:12:4:12 | 5 | stmts8.go:4:7:4:12 | ...>>... |
+| stmts8.go:5:2:5:2 | assignment to z | stmts8.go:6:9:6:9 | z |
+| stmts8.go:5:2:5:2 | skip | stmts8.go:5:7:5:7 | x |
+| stmts8.go:5:7:5:7 | x | stmts8.go:5:12:5:12 | 1 |
+| stmts8.go:5:7:5:13 | ...%... | stmts8.go:5:2:5:2 | assignment to z |
+| stmts8.go:5:12:5:12 | 1 | stmts8.go:5:7:5:13 | ...%... |
+| stmts8.go:6:2:6:17 | return statement | stmts8.go:7:1:7:1 | exit |
+| stmts8.go:6:9:6:9 | z | stmts8.go:6:12:6:12 | y |
+| stmts8.go:6:12:6:12 | y | stmts8.go:6:16:6:17 | 13 |
+| stmts8.go:6:12:6:17 | ...%... | stmts8.go:6:2:6:17 | return statement |
+| stmts8.go:6:16:6:17 | 13 | stmts8.go:6:12:6:17 | ...%... |
+| stmts8.go:9:1:9:1 | entry | stmts8.go:10:5:10:9 | linux |
+| stmts8.go:9:1:14:1 | function declaration | stmts8.go:0:0:0:0 | exit |
+| stmts8.go:9:6:9:12 | skip | stmts8.go:9:1:14:1 | function declaration |
+| stmts8.go:10:5:10:9 | linux | stmts8.go:10:9:10:9 | linux is false |
+| stmts8.go:10:5:10:9 | linux | stmts8.go:10:9:10:9 | linux is true |
+| stmts8.go:10:9:10:9 | linux is false | stmts8.go:13:9:13:13 | false |
+| stmts8.go:10:9:10:9 | linux is true | stmts8.go:11:10:11:13 | true |
+| stmts8.go:11:3:11:13 | return statement | stmts8.go:14:1:14:1 | exit |
+| stmts8.go:11:10:11:13 | true | stmts8.go:11:3:11:13 | return statement |
+| stmts8.go:13:2:13:13 | return statement | stmts8.go:14:1:14:1 | exit |
+| stmts8.go:13:9:13:13 | false | stmts8.go:13:2:13:13 | return statement |
+| stmts.go:0:0:0:0 | entry | stmts.go:3:1:3:12 | skip |
+| stmts.go:3:1:3:12 | skip | stmts.go:10:6:10:10 | skip |
+| stmts.go:10:1:10:1 | entry | stmts.go:10:12:10:12 | argument corresponding to b |
+| stmts.go:10:1:43:1 | function declaration | stmts.go:46:6:46:10 | skip |
+| stmts.go:10:6:10:10 | skip | stmts.go:10:1:43:1 | function declaration |
+| stmts.go:10:12:10:12 | argument corresponding to b | stmts.go:10:12:10:12 | initialization of b |
+| stmts.go:10:12:10:12 | initialization of b | stmts.go:12:7:12:7 | b |
+| stmts.go:12:6:12:7 | !... | stmts.go:12:7:12:7 | !... is false |
+| stmts.go:12:6:12:7 | !... | stmts.go:12:7:12:7 | !... is true |
+| stmts.go:12:7:12:7 | !... is false | stmts.go:15:3:16:3 | skip |
+| stmts.go:12:7:12:7 | !... is true | stmts.go:13:4:13:13 | skip |
+| stmts.go:12:7:12:7 | b | stmts.go:12:6:12:7 | !... |
+| stmts.go:13:4:13:13 | skip | stmts.go:23:6:23:9 | true |
+| stmts.go:15:3:16:3 | skip | stmts.go:17:3:17:3 | skip |
+| stmts.go:17:3:17:3 | skip | stmts.go:20:2:20:12 | selection of Println |
+| stmts.go:20:2:20:12 | selection of Println | stmts.go:20:14:20:17 | "Hi" |
+| stmts.go:20:2:20:18 | call to Println | stmts.go:23:6:23:9 | true |
+| stmts.go:20:2:20:18 | call to Println | stmts.go:43:1:43:1 | exit |
+| stmts.go:20:14:20:17 | "Hi" | stmts.go:20:2:20:18 | call to Println |
+| stmts.go:23:6:23:9 | true | stmts.go:23:9:23:9 | true is true |
+| stmts.go:23:9:23:9 | true is false | stmts.go:39:2:39:2 | skip |
+| stmts.go:23:9:23:9 | true is true | stmts.go:24:7:24:7 | skip |
+| stmts.go:24:7:24:7 | assignment to i | stmts.go:24:15:24:15 | i |
+| stmts.go:24:7:24:7 | skip | stmts.go:24:12:24:12 | 0 |
+| stmts.go:24:12:24:12 | 0 | stmts.go:24:7:24:7 | assignment to i |
+| stmts.go:24:15:24:15 | i | stmts.go:24:19:24:20 | 10 |
+| stmts.go:24:15:24:20 | ...<... | stmts.go:24:20:24:20 | ...<... is false |
+| stmts.go:24:15:24:20 | ...<... | stmts.go:24:20:24:20 | ...<... is true |
+| stmts.go:24:19:24:20 | 10 | stmts.go:24:15:24:20 | ...<... |
+| stmts.go:24:20:24:20 | ...<... is false | stmts.go:23:6:23:9 | true |
+| stmts.go:24:20:24:20 | ...<... is true | stmts.go:25:7:25:7 | skip |
+| stmts.go:24:23:24:23 | i | stmts.go:24:23:24:25 | 1 |
+| stmts.go:24:23:24:25 | 1 | stmts.go:24:23:24:25 | rhs of increment statement |
+| stmts.go:24:23:24:25 | increment statement | stmts.go:24:15:24:15 | i |
+| stmts.go:24:23:24:25 | rhs of increment statement | stmts.go:24:23:24:25 | increment statement |
+| stmts.go:25:7:25:7 | assignment to j | stmts.go:25:19:25:19 | j |
+| stmts.go:25:7:25:7 | skip | stmts.go:25:12:25:12 | i |
+| stmts.go:25:12:25:12 | i | stmts.go:25:16:25:16 | 1 |
+| stmts.go:25:12:25:16 | ...-... | stmts.go:25:7:25:7 | assignment to j |
+| stmts.go:25:16:25:16 | 1 | stmts.go:25:12:25:16 | ...-... |
+| stmts.go:25:19:25:19 | j | stmts.go:25:23:25:23 | 5 |
+| stmts.go:25:19:25:23 | ...>... | stmts.go:25:23:25:23 | ...>... is false |
+| stmts.go:25:19:25:23 | ...>... | stmts.go:25:23:25:23 | ...>... is true |
+| stmts.go:25:23:25:23 | 5 | stmts.go:25:19:25:23 | ...>... |
+| stmts.go:25:23:25:23 | ...>... is false | stmts.go:27:14:27:14 | i |
+| stmts.go:25:23:25:23 | ...>... is true | stmts.go:26:5:26:15 | skip |
+| stmts.go:26:5:26:15 | skip | stmts.go:39:2:39:2 | skip |
+| stmts.go:27:14:27:14 | i | stmts.go:27:18:27:18 | 3 |
+| stmts.go:27:14:27:18 | ...<... | stmts.go:27:18:27:18 | ...<... is false |
+| stmts.go:27:14:27:18 | ...<... | stmts.go:27:18:27:18 | ...<... is true |
+| stmts.go:27:18:27:18 | 3 | stmts.go:27:14:27:18 | ...<... |
+| stmts.go:27:18:27:18 | ...<... is false | stmts.go:29:14:29:14 | i |
+| stmts.go:27:18:27:18 | ...<... is true | stmts.go:28:5:28:9 | skip |
+| stmts.go:28:5:28:9 | skip | stmts.go:23:6:23:9 | true |
+| stmts.go:29:14:29:14 | i | stmts.go:29:19:29:19 | 9 |
+| stmts.go:29:14:29:19 | ...!=... | stmts.go:29:19:29:19 | ...!=... is false |
+| stmts.go:29:14:29:19 | ...!=... | stmts.go:29:19:29:19 | ...!=... is true |
+| stmts.go:29:19:29:19 | 9 | stmts.go:29:14:29:19 | ...!=... |
+| stmts.go:29:19:29:19 | ...!=... is false | stmts.go:31:14:31:14 | i |
+| stmts.go:29:19:29:19 | ...!=... is true | stmts.go:30:5:30:18 | skip |
+| stmts.go:30:5:30:18 | skip | stmts.go:23:6:23:9 | true |
+| stmts.go:31:14:31:14 | i | stmts.go:31:19:31:19 | 4 |
+| stmts.go:31:14:31:19 | ...>=... | stmts.go:31:19:31:19 | ...>=... is false |
+| stmts.go:31:14:31:19 | ...>=... | stmts.go:31:19:31:19 | ...>=... is true |
+| stmts.go:31:19:31:19 | 4 | stmts.go:31:14:31:19 | ...>=... |
+| stmts.go:31:19:31:19 | ...>=... is false | stmts.go:34:5:34:12 | skip |
+| stmts.go:31:19:31:19 | ...>=... is true | stmts.go:32:5:32:14 | skip |
+| stmts.go:32:5:32:14 | skip | stmts.go:23:6:23:9 | true |
+| stmts.go:34:5:34:12 | skip | stmts.go:24:23:24:23 | i |
+| stmts.go:39:2:39:2 | assignment to k | stmts.go:41:3:41:12 | skip |
+| stmts.go:39:2:39:2 | skip | stmts.go:39:7:39:7 | 9 |
+| stmts.go:39:7:39:7 | 9 | stmts.go:39:2:39:2 | assignment to k |
+| stmts.go:40:10:40:10 | k | stmts.go:40:10:40:12 | 1 |
+| stmts.go:40:10:40:12 | 1 | stmts.go:40:10:40:12 | rhs of increment statement |
+| stmts.go:40:10:40:12 | increment statement | stmts.go:41:3:41:12 | skip |
+| stmts.go:40:10:40:12 | rhs of increment statement | stmts.go:40:10:40:12 | increment statement |
+| stmts.go:41:3:41:12 | skip | stmts.go:23:6:23:9 | true |
+| stmts.go:46:1:46:1 | entry | stmts.go:46:12:46:14 | argument corresponding to ch1 |
+| stmts.go:46:1:62:1 | function declaration | stmts.go:65:6:65:10 | skip |
+| stmts.go:46:6:46:10 | skip | stmts.go:46:1:62:1 | function declaration |
+| stmts.go:46:12:46:14 | argument corresponding to ch1 | stmts.go:46:12:46:14 | initialization of ch1 |
+| stmts.go:46:12:46:14 | initialization of ch1 | stmts.go:46:26:46:28 | argument corresponding to ch2 |
+| stmts.go:46:26:46:28 | argument corresponding to ch2 | stmts.go:46:26:46:28 | initialization of ch2 |
+| stmts.go:46:26:46:28 | initialization of ch2 | stmts.go:47:6:47:6 | skip |
+| stmts.go:47:6:47:6 | assignment to a | stmts.go:48:6:48:6 | skip |
+| stmts.go:47:6:47:6 | skip | stmts.go:47:6:47:6 | zero value for a |
+| stmts.go:47:6:47:6 | zero value for a | stmts.go:47:6:47:6 | assignment to a |
+| stmts.go:48:6:48:6 | assignment to w | stmts.go:51:9:51:11 | ch1 |
+| stmts.go:48:6:48:6 | skip | stmts.go:48:6:48:6 | zero value for w |
+| stmts.go:48:6:48:6 | zero value for w | stmts.go:48:6:48:6 | assignment to w |
+| stmts.go:50:2:59:2 | select statement | stmts.go:51:7:51:11 | <-... |
+| stmts.go:50:2:59:2 | select statement | stmts.go:53:17:53:21 | <-... |
+| stmts.go:50:2:59:2 | select statement | stmts.go:57:3:57:13 | selection of Println |
+| stmts.go:50:2:59:2 | select statement | stmts.go:58:7:58:15 | send statement |
+| stmts.go:51:7:51:11 | <-... | stmts.go:52:3:52:13 | selection of Println |
+| stmts.go:51:9:51:11 | ch1 | stmts.go:53:19:53:21 | ch2 |
+| stmts.go:52:3:52:13 | selection of Println | stmts.go:52:15:52:30 | "Heard from ch1" |
+| stmts.go:52:3:52:31 | call to Println | stmts.go:61:2:61:10 | select statement |
+| stmts.go:52:3:52:31 | call to Println | stmts.go:62:1:62:1 | exit |
+| stmts.go:52:15:52:30 | "Heard from ch1" | stmts.go:52:3:52:31 | call to Println |
+| stmts.go:53:7:53:7 | a | stmts.go:53:9:53:9 | 0 |
+| stmts.go:53:7:53:10 | assignment to element | stmts.go:53:7:53:21 | ... = ...[1] |
+| stmts.go:53:7:53:10 | skip | stmts.go:53:13:53:13 | skip |
+| stmts.go:53:7:53:10 | skip | stmts.go:62:1:62:1 | exit |
+| stmts.go:53:7:53:21 | ... = ...[0] | stmts.go:53:7:53:10 | assignment to element |
+| stmts.go:53:7:53:21 | ... = ...[1] | stmts.go:53:13:53:13 | assignment to w |
+| stmts.go:53:9:53:9 | 0 | stmts.go:53:7:53:10 | skip |
+| stmts.go:53:13:53:13 | assignment to w | stmts.go:54:3:54:13 | selection of Println |
+| stmts.go:53:13:53:13 | skip | stmts.go:53:7:53:21 | ... = ...[0] |
+| stmts.go:53:17:53:21 | <-... | stmts.go:53:7:53:7 | a |
+| stmts.go:53:19:53:21 | ch2 | stmts.go:58:7:58:9 | ch1 |
+| stmts.go:54:3:54:13 | selection of Println | stmts.go:54:15:54:15 | a |
+| stmts.go:54:3:54:16 | call to Println | stmts.go:55:3:55:13 | selection of Println |
+| stmts.go:54:3:54:16 | call to Println | stmts.go:62:1:62:1 | exit |
+| stmts.go:54:15:54:15 | a | stmts.go:54:3:54:16 | call to Println |
+| stmts.go:55:3:55:13 | selection of Println | stmts.go:55:15:55:15 | w |
+| stmts.go:55:3:55:16 | call to Println | stmts.go:61:2:61:10 | select statement |
+| stmts.go:55:3:55:16 | call to Println | stmts.go:62:1:62:1 | exit |
+| stmts.go:55:15:55:15 | w | stmts.go:55:3:55:16 | call to Println |
+| stmts.go:57:3:57:13 | selection of Println | stmts.go:57:3:57:15 | call to Println |
+| stmts.go:57:3:57:15 | call to Println | stmts.go:61:2:61:10 | select statement |
+| stmts.go:57:3:57:15 | call to Println | stmts.go:62:1:62:1 | exit |
+| stmts.go:58:2:58:16 | skip | stmts.go:61:2:61:10 | select statement |
+| stmts.go:58:7:58:9 | ch1 | stmts.go:58:14:58:15 | 42 |
+| stmts.go:58:7:58:15 | send statement | stmts.go:58:2:58:16 | skip |
+| stmts.go:58:7:58:15 | send statement | stmts.go:62:1:62:1 | exit |
+| stmts.go:58:14:58:15 | 42 | stmts.go:50:2:59:2 | select statement |
+| stmts.go:65:1:65:1 | entry | stmts.go:65:12:65:12 | argument corresponding to x |
+| stmts.go:65:1:72:1 | function declaration | stmts.go:75:6:75:10 | skip |
+| stmts.go:65:6:65:10 | skip | stmts.go:65:1:72:1 | function declaration |
+| stmts.go:65:12:65:12 | argument corresponding to x | stmts.go:65:12:65:12 | initialization of x |
+| stmts.go:65:12:65:12 | initialization of x | stmts.go:66:5:66:5 | x |
+| stmts.go:66:5:66:5 | x | stmts.go:66:9:66:9 | 0 |
+| stmts.go:66:5:66:9 | ...>... | stmts.go:66:9:66:9 | ...>... is false |
+| stmts.go:66:5:66:9 | ...>... | stmts.go:66:9:66:9 | ...>... is true |
+| stmts.go:66:9:66:9 | 0 | stmts.go:66:5:66:9 | ...>... |
+| stmts.go:66:9:66:9 | ...>... is false | stmts.go:69:9:69:34 | function literal |
+| stmts.go:66:9:66:9 | ...>... is true | stmts.go:67:9:67:33 | function literal |
+| stmts.go:67:3:67:35 | defer statement | stmts.go:71:9:71:10 | 42 |
+| stmts.go:67:9:67:9 | entry | stmts.go:67:18:67:28 | selection of Println |
+| stmts.go:67:9:67:33 | function literal | stmts.go:67:3:67:35 | defer statement |
+| stmts.go:67:9:67:35 | function call | stmts.go:72:1:72:1 | exit |
+| stmts.go:67:18:67:28 | selection of Println | stmts.go:67:30:67:30 | x |
+| stmts.go:67:18:67:31 | call to Println | stmts.go:67:33:67:33 | exit |
+| stmts.go:67:30:67:30 | x | stmts.go:67:18:67:31 | call to Println |
+| stmts.go:69:3:69:36 | defer statement | stmts.go:71:9:71:10 | 42 |
+| stmts.go:69:9:69:9 | entry | stmts.go:69:18:69:28 | selection of Println |
+| stmts.go:69:9:69:34 | function literal | stmts.go:69:3:69:36 | defer statement |
+| stmts.go:69:9:69:36 | function call | stmts.go:72:1:72:1 | exit |
+| stmts.go:69:18:69:28 | selection of Println | stmts.go:69:31:69:31 | x |
+| stmts.go:69:18:69:32 | call to Println | stmts.go:69:34:69:34 | exit |
+| stmts.go:69:30:69:31 | -... | stmts.go:69:18:69:32 | call to Println |
+| stmts.go:69:31:69:31 | x | stmts.go:69:30:69:31 | -... |
+| stmts.go:71:2:71:10 | return statement | stmts.go:67:9:67:35 | function call |
+| stmts.go:71:2:71:10 | return statement | stmts.go:69:9:69:36 | function call |
+| stmts.go:71:9:71:10 | 42 | stmts.go:71:2:71:10 | return statement |
+| stmts.go:75:1:75:1 | entry | stmts.go:75:12:75:12 | argument corresponding to x |
+| stmts.go:75:1:109:1 | function declaration | stmts.go:112:6:112:10 | skip |
+| stmts.go:75:6:75:10 | skip | stmts.go:75:1:109:1 | function declaration |
+| stmts.go:75:12:75:12 | argument corresponding to x | stmts.go:75:12:75:12 | initialization of x |
+| stmts.go:75:12:75:12 | initialization of x | stmts.go:76:9:76:9 | x |
+| stmts.go:76:9:76:9 | x | stmts.go:79:9:79:9 | skip |
+| stmts.go:79:9:79:9 | assignment to y | stmts.go:79:17:79:17 | y |
+| stmts.go:79:9:79:9 | skip | stmts.go:79:14:79:14 | x |
+| stmts.go:79:14:79:14 | x | stmts.go:79:9:79:9 | assignment to y |
+| stmts.go:79:17:79:17 | y | stmts.go:79:21:79:22 | 19 |
+| stmts.go:79:17:79:22 | ...-... | stmts.go:81:3:81:7 | test5 |
+| stmts.go:79:21:79:22 | 19 | stmts.go:79:17:79:22 | ...-... |
+| stmts.go:81:3:81:7 | test5 | stmts.go:81:9:81:13 | false |
+| stmts.go:81:3:81:14 | call to test5 | stmts.go:109:1:109:1 | exit |
+| stmts.go:81:9:81:13 | false | stmts.go:81:3:81:14 | call to test5 |
+| stmts.go:84:9:84:9 | x | stmts.go:85:7:85:7 | 1 |
+| stmts.go:84:9:84:9 | x | stmts.go:90:9:90:9 | x |
+| stmts.go:85:2:85:8 | skip | stmts.go:90:9:90:9 | x |
+| stmts.go:85:7:85:7 | 1 | stmts.go:85:7:85:7 | case 1 |
+| stmts.go:85:7:85:7 | case 1 | stmts.go:85:2:85:8 | skip |
+| stmts.go:85:7:85:7 | case 1 | stmts.go:86:7:86:7 | 2 |
+| stmts.go:86:7:86:7 | 2 | stmts.go:86:7:86:7 | case 2 |
+| stmts.go:86:7:86:7 | case 2 | stmts.go:86:10:86:10 | 3 |
+| stmts.go:86:7:86:7 | case 2 | stmts.go:87:3:87:7 | test5 |
+| stmts.go:86:10:86:10 | 3 | stmts.go:86:10:86:10 | case 3 |
+| stmts.go:86:10:86:10 | case 3 | stmts.go:87:3:87:7 | test5 |
+| stmts.go:86:10:86:10 | case 3 | stmts.go:90:9:90:9 | x |
+| stmts.go:87:3:87:7 | test5 | stmts.go:87:9:87:12 | true |
+| stmts.go:87:9:87:12 | true | stmts.go:87:3:87:13 | call to test5 |
+| stmts.go:90:9:90:9 | x | stmts.go:91:7:91:7 | 1 |
+| stmts.go:90:9:90:9 | x | stmts.go:98:9:98:9 | x |
+| stmts.go:91:7:91:7 | 1 | stmts.go:91:7:91:7 | case 1 |
+| stmts.go:91:7:91:7 | case 1 | stmts.go:92:3:92:7 | test5 |
+| stmts.go:91:7:91:7 | case 1 | stmts.go:94:7:94:11 | ...-... |
+| stmts.go:92:3:92:7 | test5 | stmts.go:92:9:92:13 | false |
+| stmts.go:92:9:92:13 | false | stmts.go:92:3:92:14 | call to test5 |
+| stmts.go:93:3:93:13 | skip | stmts.go:95:3:95:7 | test5 |
+| stmts.go:94:7:94:11 | ...-... | stmts.go:94:7:94:11 | case ...-... |
+| stmts.go:94:7:94:11 | case ...-... | stmts.go:95:3:95:7 | test5 |
+| stmts.go:94:7:94:11 | case ...-... | stmts.go:98:9:98:9 | x |
+| stmts.go:95:3:95:7 | test5 | stmts.go:95:9:95:12 | true |
+| stmts.go:95:9:95:12 | true | stmts.go:95:3:95:13 | call to test5 |
+| stmts.go:98:9:98:9 | x | stmts.go:100:7:100:7 | 2 |
+| stmts.go:99:2:99:9 | skip | stmts.go:104:2:104:2 | true |
+| stmts.go:100:7:100:7 | 2 | stmts.go:100:7:100:7 | case 2 |
+| stmts.go:100:7:100:7 | case 2 | stmts.go:99:2:99:9 | skip |
+| stmts.go:100:7:100:7 | case 2 | stmts.go:101:3:101:7 | test5 |
+| stmts.go:101:3:101:7 | test5 | stmts.go:101:9:101:12 | true |
+| stmts.go:101:9:101:12 | true | stmts.go:101:3:101:13 | call to test5 |
+| stmts.go:104:2:104:2 | true | stmts.go:107:7:107:10 | true |
+| stmts.go:107:7:107:10 | case true | stmts.go:107:10:107:10 | true is false |
+| stmts.go:107:7:107:10 | case true | stmts.go:107:10:107:10 | true is true |
+| stmts.go:107:7:107:10 | true | stmts.go:107:7:107:10 | case true |
+| stmts.go:107:10:107:10 | true is false | stmts.go:106:3:106:7 | skip |
+| stmts.go:107:10:107:10 | true is true | stmts.go:107:2:107:11 | skip |
+| stmts.go:112:1:112:1 | entry | stmts.go:112:12:112:12 | argument corresponding to x |
+| stmts.go:112:1:125:1 | function declaration | stmts.go:128:6:128:11 | skip |
+| stmts.go:112:6:112:10 | skip | stmts.go:112:1:125:1 | function declaration |
+| stmts.go:112:12:112:12 | argument corresponding to x | stmts.go:112:12:112:12 | initialization of x |
+| stmts.go:112:12:112:12 | initialization of x | stmts.go:113:9:113:9 | skip |
+| stmts.go:113:9:113:9 | assignment to y | stmts.go:114:7:114:11 | case error |
+| stmts.go:113:9:113:9 | assignment to y | stmts.go:121:9:121:9 | skip |
+| stmts.go:113:9:113:9 | skip | stmts.go:113:14:113:14 | x |
+| stmts.go:113:14:113:14 | x | stmts.go:113:14:113:21 | type assertion |
+| stmts.go:113:14:113:21 | type assertion | stmts.go:113:9:113:9 | assignment to y |
+| stmts.go:114:7:114:11 | case error | stmts.go:114:14:114:19 | case string |
+| stmts.go:114:7:114:11 | case error | stmts.go:115:3:115:13 | selection of Println |
+| stmts.go:114:14:114:19 | case string | stmts.go:115:3:115:13 | selection of Println |
+| stmts.go:114:14:114:19 | case string | stmts.go:116:7:116:13 | case float32 |
+| stmts.go:115:3:115:13 | selection of Println | stmts.go:115:15:115:15 | y |
+| stmts.go:115:3:115:16 | call to Println | stmts.go:121:9:121:9 | skip |
+| stmts.go:115:3:115:16 | call to Println | stmts.go:125:1:125:1 | exit |
+| stmts.go:115:15:115:15 | y | stmts.go:115:3:115:16 | call to Println |
+| stmts.go:116:7:116:13 | case float32 | stmts.go:117:3:117:7 | test5 |
+| stmts.go:116:7:116:13 | case float32 | stmts.go:121:9:121:9 | skip |
+| stmts.go:117:3:117:7 | test5 | stmts.go:117:9:117:12 | true |
+| stmts.go:117:3:117:13 | call to test5 | stmts.go:125:1:125:1 | exit |
+| stmts.go:117:9:117:12 | true | stmts.go:117:3:117:13 | call to test5 |
+| stmts.go:118:3:118:7 | test5 | stmts.go:118:9:118:13 | false |
+| stmts.go:118:9:118:13 | false | stmts.go:118:3:118:14 | call to test5 |
+| stmts.go:121:9:121:9 | assignment to y | stmts.go:121:17:121:17 | y |
+| stmts.go:121:9:121:9 | skip | stmts.go:121:14:121:14 | x |
+| stmts.go:121:14:121:14 | x | stmts.go:121:9:121:9 | assignment to y |
+| stmts.go:121:17:121:17 | y | stmts.go:121:17:121:24 | type assertion |
+| stmts.go:121:17:121:24 | type assertion | stmts.go:123:3:123:7 | test5 |
+| stmts.go:123:3:123:7 | test5 | stmts.go:123:9:123:13 | false |
+| stmts.go:123:3:123:14 | call to test5 | stmts.go:125:1:125:1 | exit |
+| stmts.go:123:9:123:13 | false | stmts.go:123:3:123:14 | call to test5 |
+| stmts.go:128:1:128:1 | entry | stmts.go:128:13:128:13 | argument corresponding to f |
+| stmts.go:128:1:130:1 | function declaration | stmts.go:133:6:133:11 | skip |
+| stmts.go:128:6:128:11 | skip | stmts.go:128:1:130:1 | function declaration |
+| stmts.go:128:13:128:13 | argument corresponding to f | stmts.go:128:13:128:13 | initialization of f |
+| stmts.go:128:13:128:13 | initialization of f | stmts.go:129:5:129:5 | f |
+| stmts.go:129:2:129:7 | go statement | stmts.go:130:1:130:1 | exit |
+| stmts.go:129:5:129:5 | f | stmts.go:129:2:129:7 | go statement |
+| stmts.go:133:1:133:1 | entry | stmts.go:133:13:133:14 | argument corresponding to xs |
+| stmts.go:133:1:147:1 | function declaration | stmts.go:0:0:0:0 | exit |
+| stmts.go:133:6:133:11 | skip | stmts.go:133:1:147:1 | function declaration |
+| stmts.go:133:13:133:14 | argument corresponding to xs | stmts.go:133:13:133:14 | initialization of xs |
+| stmts.go:133:13:133:14 | initialization of xs | stmts.go:134:17:134:18 | xs |
+| stmts.go:134:2:139:2 | range statement[0] | stmts.go:134:6:134:6 | assignment to x |
+| stmts.go:134:6:134:6 | assignment to x | stmts.go:135:6:135:6 | x |
+| stmts.go:134:6:134:6 | skip | stmts.go:134:2:139:2 | range statement[0] |
+| stmts.go:134:17:134:18 | next key-value pair in range | stmts.go:134:6:134:6 | skip |
+| stmts.go:134:17:134:18 | next key-value pair in range | stmts.go:141:20:141:21 | xs |
+| stmts.go:134:17:134:18 | xs | stmts.go:134:17:134:18 | next key-value pair in range |
+| stmts.go:135:6:135:6 | x | stmts.go:135:10:135:10 | 5 |
+| stmts.go:135:6:135:10 | ...>... | stmts.go:135:10:135:10 | ...>... is false |
+| stmts.go:135:6:135:10 | ...>... | stmts.go:135:10:135:10 | ...>... is true |
+| stmts.go:135:10:135:10 | 5 | stmts.go:135:6:135:10 | ...>... |
+| stmts.go:135:10:135:10 | ...>... is false | stmts.go:138:3:138:11 | selection of Print |
+| stmts.go:135:10:135:10 | ...>... is true | stmts.go:136:4:136:11 | skip |
+| stmts.go:136:4:136:11 | skip | stmts.go:134:17:134:18 | next key-value pair in range |
+| stmts.go:138:3:138:11 | selection of Print | stmts.go:138:13:138:13 | x |
+| stmts.go:138:3:138:14 | call to Print | stmts.go:134:17:134:18 | next key-value pair in range |
+| stmts.go:138:3:138:14 | call to Print | stmts.go:147:1:147:1 | exit |
+| stmts.go:138:13:138:13 | x | stmts.go:138:3:138:14 | call to Print |
+| stmts.go:141:2:143:2 | range statement[0] | stmts.go:141:2:143:2 | range statement[1] |
+| stmts.go:141:2:143:2 | range statement[1] | stmts.go:141:6:141:6 | assignment to i |
+| stmts.go:141:6:141:6 | assignment to i | stmts.go:141:9:141:9 | assignment to v |
+| stmts.go:141:6:141:6 | skip | stmts.go:141:9:141:9 | skip |
+| stmts.go:141:9:141:9 | assignment to v | stmts.go:142:3:142:11 | selection of Print |
+| stmts.go:141:9:141:9 | skip | stmts.go:141:2:143:2 | range statement[0] |
+| stmts.go:141:20:141:21 | next key-value pair in range | stmts.go:141:6:141:6 | skip |
+| stmts.go:141:20:141:21 | next key-value pair in range | stmts.go:145:12:145:13 | xs |
+| stmts.go:141:20:141:21 | xs | stmts.go:141:20:141:21 | next key-value pair in range |
+| stmts.go:142:3:142:11 | selection of Print | stmts.go:142:13:142:13 | i |
+| stmts.go:142:3:142:17 | call to Print | stmts.go:141:20:141:21 | next key-value pair in range |
+| stmts.go:142:3:142:17 | call to Print | stmts.go:147:1:147:1 | exit |
+| stmts.go:142:13:142:13 | i | stmts.go:142:16:142:16 | v |
+| stmts.go:142:16:142:16 | v | stmts.go:142:3:142:17 | call to Print |
+| stmts.go:145:12:145:13 | next key-value pair in range | stmts.go:145:15:146:2 | skip |
+| stmts.go:145:12:145:13 | next key-value pair in range | stmts.go:147:1:147:1 | exit |
+| stmts.go:145:12:145:13 | xs | stmts.go:145:12:145:13 | next key-value pair in range |
+| stmts.go:145:15:146:2 | skip | stmts.go:145:12:145:13 | next key-value pair in range |
+| tst.go:0:0:0:0 | entry | tst.go:3:6:3:10 | skip |
+| tst.go:3:1:3:1 | entry | tst.go:3:12:3:12 | argument corresponding to x |
+| tst.go:3:1:12:1 | function declaration | tst.go:14:6:14:11 | skip |
+| tst.go:3:6:3:10 | skip | tst.go:3:1:12:1 | function declaration |
+| tst.go:3:12:3:12 | argument corresponding to x | tst.go:3:12:3:12 | initialization of x |
+| tst.go:3:12:3:12 | initialization of x | tst.go:4:2:4:2 | true |
+| tst.go:4:2:4:2 | true | tst.go:5:7:5:7 | x |
+| tst.go:5:2:5:13 | skip | tst.go:12:1:12:1 | exit |
+| tst.go:5:7:5:7 | x | tst.go:5:11:5:12 | 23 |
+| tst.go:5:7:5:12 | ...<... | tst.go:5:7:5:12 | case ...<... |
+| tst.go:5:7:5:12 | case ...<... | tst.go:5:12:5:12 | ...<... is false |
+| tst.go:5:7:5:12 | case ...<... | tst.go:5:12:5:12 | ...<... is true |
+| tst.go:5:11:5:12 | 23 | tst.go:5:7:5:12 | ...<... |
+| tst.go:5:12:5:12 | ...<... is false | tst.go:7:7:7:7 | x |
+| tst.go:5:12:5:12 | ...<... is true | tst.go:5:2:5:13 | skip |
+| tst.go:7:2:7:13 | skip | tst.go:12:1:12:1 | exit |
+| tst.go:7:7:7:7 | x | tst.go:7:11:7:12 | 42 |
+| tst.go:7:7:7:12 | ...<... | tst.go:7:7:7:12 | case ...<... |
+| tst.go:7:7:7:12 | case ...<... | tst.go:7:12:7:12 | ...<... is false |
+| tst.go:7:7:7:12 | case ...<... | tst.go:7:12:7:12 | ...<... is true |
+| tst.go:7:11:7:12 | 42 | tst.go:7:7:7:12 | ...<... |
+| tst.go:7:12:7:12 | ...<... is false | tst.go:9:7:9:7 | x |
+| tst.go:7:12:7:12 | ...<... is true | tst.go:7:2:7:13 | skip |
+| tst.go:9:2:9:13 | skip | tst.go:12:1:12:1 | exit |
+| tst.go:9:7:9:7 | x | tst.go:9:11:9:12 | 23 |
+| tst.go:9:7:9:12 | ...<... | tst.go:9:7:9:12 | case ...<... |
+| tst.go:9:7:9:12 | case ...<... | tst.go:9:12:9:12 | ...<... is false |
+| tst.go:9:7:9:12 | case ...<... | tst.go:9:12:9:12 | ...<... is true |
+| tst.go:9:11:9:12 | 23 | tst.go:9:7:9:12 | ...<... |
+| tst.go:9:12:9:12 | ...<... is false | tst.go:12:1:12:1 | exit |
+| tst.go:9:12:9:12 | ...<... is true | tst.go:9:2:9:13 | skip |
+| tst.go:14:1:14:1 | entry | tst.go:14:13:14:17 | argument corresponding to value |
+| tst.go:14:1:21:1 | function declaration | tst.go:23:6:23:11 | skip |
+| tst.go:14:6:14:11 | skip | tst.go:14:1:21:1 | function declaration |
+| tst.go:14:13:14:17 | argument corresponding to value | tst.go:14:13:14:17 | initialization of value |
+| tst.go:14:13:14:17 | initialization of value | tst.go:15:2:15:2 | true |
+| tst.go:15:2:15:2 | true | tst.go:16:7:16:11 | value |
+| tst.go:16:2:16:34 | skip | tst.go:21:1:21:1 | exit |
+| tst.go:16:7:16:11 | value | tst.go:16:15:16:33 | ...*... |
+| tst.go:16:7:16:33 | ...<... | tst.go:16:7:16:33 | case ...<... |
+| tst.go:16:7:16:33 | case ...<... | tst.go:16:33:16:33 | ...<... is false |
+| tst.go:16:7:16:33 | case ...<... | tst.go:16:33:16:33 | ...<... is true |
+| tst.go:16:15:16:33 | ...*... | tst.go:16:7:16:33 | ...<... |
+| tst.go:16:33:16:33 | ...<... is false | tst.go:18:7:18:11 | value |
+| tst.go:16:33:16:33 | ...<... is true | tst.go:16:2:16:34 | skip |
+| tst.go:18:2:18:39 | skip | tst.go:21:1:21:1 | exit |
+| tst.go:18:7:18:11 | value | tst.go:18:15:18:38 | ...*... |
+| tst.go:18:7:18:38 | ...<... | tst.go:18:7:18:38 | case ...<... |
+| tst.go:18:7:18:38 | case ...<... | tst.go:18:38:18:38 | ...<... is false |
+| tst.go:18:7:18:38 | case ...<... | tst.go:18:38:18:38 | ...<... is true |
+| tst.go:18:15:18:38 | ...*... | tst.go:18:7:18:38 | ...<... |
+| tst.go:18:38:18:38 | ...<... is false | tst.go:21:1:21:1 | exit |
+| tst.go:18:38:18:38 | ...<... is true | tst.go:18:2:18:39 | skip |
+| tst.go:23:1:23:1 | entry | tst.go:24:2:24:2 | true |
+| tst.go:23:1:26:1 | function declaration | tst.go:28:6:28:11 | skip |
+| tst.go:23:6:23:11 | skip | tst.go:23:1:26:1 | function declaration |
+| tst.go:24:2:24:2 | true | tst.go:26:1:26:1 | exit |
+| tst.go:28:1:28:1 | entry | tst.go:29:2:29:2 | true |
+| tst.go:28:1:32:1 | function declaration | tst.go:0:0:0:0 | exit |
+| tst.go:28:6:28:11 | skip | tst.go:28:1:32:1 | function declaration |
+| tst.go:29:2:29:2 | true | tst.go:30:2:30:9 | skip |
+| tst.go:30:2:30:9 | skip | tst.go:32:1:32:1 | exit |
#select
| |
diff --git a/ql/test/library-tests/semmle/go/controlflow/ControlFlowGraph/CFG.ql b/ql/test/library-tests/semmle/go/controlflow/ControlFlowGraph/CFG.ql
index 144a01f2aa5..3f0afd67cae 100644
--- a/ql/test/library-tests/semmle/go/controlflow/ControlFlowGraph/CFG.ql
+++ b/ql/test/library-tests/semmle/go/controlflow/ControlFlowGraph/CFG.ql
@@ -1,10 +1,9 @@
import go
-query predicate nodes(ControlFlow::Node nd) { none() }
-
query predicate edges(ControlFlow::Node pred, ControlFlow::Node succ) {
- none()
- // succ = pred.getASuccessor()
+ not succ.getFile().hasBuildConstraints() and
+ not pred.getFile().hasBuildConstraints() and
+ succ = pred.getASuccessor()
}
select ""
diff --git a/upgrades/b37faf5d62cccefad9fcfd8f5c026620097b2355/go.dbscheme b/upgrades/b37faf5d62cccefad9fcfd8f5c026620097b2355/go.dbscheme
new file mode 100644
index 00000000000..2842941c6f9
--- /dev/null
+++ b/upgrades/b37faf5d62cccefad9fcfd8f5c026620097b2355/go.dbscheme
@@ -0,0 +1,528 @@
+/** Auto-generated dbscheme; do not edit. */
+
+
+/** Duplicate code **/
+
+duplicateCode(
+ unique int id : @duplication,
+ varchar(900) relativePath : string ref,
+ int equivClass : int ref);
+
+similarCode(
+ unique int id : @similarity,
+ varchar(900) 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);
+
+/** External data **/
+
+externalData(
+ int id : @externalDataElement,
+ varchar(900) path : string ref,
+ int column: int ref,
+ varchar(900) value : string ref
+);
+
+snapshotDate(unique date snapshotDate : date ref);
+
+sourceLocationPrefix(varchar(900) prefix : string 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;
+
+compilations(unique int id: @compilation, string cwd: string ref);
+
+#keyset[id, num]
+compilation_args(int id: @compilation ref, int num: int ref, string arg: string ref);
+
+#keyset[id, num, kind]
+compilation_time(int id: @compilation ref, int num: int ref, int kind: int ref, float secs: float ref);
+
+diagnostic_for(unique int diagnostic: @diagnostic ref, int compilation: @compilation ref, int file_number: int ref, int file_number_diagnostic_number: int ref);
+
+compilation_finished(unique int id: @compilation ref, float cpu_seconds: float ref, float elapsed_seconds: float ref);
+
+#keyset[id, num]
+compilation_compiling_files(int id: @compilation ref, int num: int ref, int file: @file ref);
+
+diagnostics(unique int id: @diagnostic, int severity: int ref, string error_tag: string ref, string error_message: string ref,
+ string full_error_message: string ref, int location: @location ref);
+
+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);
+
+numlines(int element_id: @sourceline ref, int num_lines: int ref, int num_code: int ref, int num_comment: int ref);
+
+files(unique int id: @file, string name: string ref);
+
+folders(unique int id: @folder, string name: string ref);
+
+containerparent(int parent: @container ref, unique int child: @container ref);
+
+has_location(unique int locatable: @locatable ref, int location: @location ref);
+
+#keyset[parent, idx]
+comment_groups(unique int id: @comment_group, int parent: @file ref, int idx: int ref);
+
+comments(unique int id: @comment, int kind: int ref, int parent: @comment_group ref, int idx: int ref, string text: string ref);
+
+doc_comments(unique int node: @documentable ref, int comment: @comment_group ref);
+
+#keyset[parent, idx]
+exprs(unique int id: @expr, int kind: int ref, int parent: @exprparent ref, int idx: int ref);
+
+literals(unique int expr: @expr ref, string value: string ref, string raw: string ref);
+
+constvalues(unique int expr: @expr ref, string value: string ref, string exact: string ref);
+
+fields(unique int id: @field, int parent: @fieldparent ref, int idx: int ref);
+
+#keyset[parent, idx]
+stmts(unique int id: @stmt, int kind: int ref, int parent: @stmtparent ref, int idx: int ref);
+
+#keyset[parent, idx]
+decls(unique int id: @decl, int kind: int ref, int parent: @declparent ref, int idx: int ref);
+
+#keyset[parent, idx]
+specs(unique int id: @spec, int kind: int ref, int parent: @gendecl ref, int idx: int ref);
+
+scopes(unique int id: @scope, int kind: int ref);
+
+scopenesting(unique int inner: @scope ref, int outer: @scope ref);
+
+scopenodes(unique int node: @scopenode ref, int scope: @localscope ref);
+
+objects(unique int id: @object, int kind: int ref, string name: string ref);
+
+objectscopes(unique int object: @object ref, int scope: @scope ref);
+
+objecttypes(unique int object: @object ref, int tp: @type ref);
+
+methodreceivers(unique int method: @object ref, int receiver: @object ref);
+
+fieldstructs(unique int field: @object ref, int struct: @structtype ref);
+
+methodhosts(int method: @object ref, int host: @namedtype ref);
+
+defs(int ident: @ident ref, int object: @object ref);
+
+uses(int ident: @ident ref, int object: @object ref);
+
+types(unique int id: @type, int kind: int ref);
+
+type_of(unique int expr: @expr ref, int tp: @type ref);
+
+typename(unique int tp: @type ref, string name: string ref);
+
+key_type(unique int map: @maptype ref, int tp: @type ref);
+
+element_type(unique int container: @containertype ref, int tp: @type ref);
+
+base_type(unique int ptr: @pointertype ref, int tp: @type ref);
+
+underlying_type(unique int named: @namedtype ref, int tp: @type ref);
+
+#keyset[parent, index]
+component_types(int parent: @compositetype ref, int index: int ref, string name: string ref, int tp: @type ref);
+
+array_length(unique int tp: @arraytype ref, string len: string ref);
+
+type_objects(unique int tp: @type ref, int object: @object ref);
+
+packages(unique int id: @package, string name: string ref, string path: string ref, int scope: @packagescope ref);
+
+#keyset[parent, idx]
+modexprs(unique int id: @modexpr, int kind: int ref, int parent: @modexprparent ref, int idx: int ref);
+
+#keyset[parent, idx]
+modtokens(string token: string ref, int parent: @modexpr ref, int idx: int ref);
+
+#keyset[package, idx]
+errors(unique int id: @error, int kind: int ref, string msg: string ref, string rawpos: string ref,
+ string file: string ref, int line: int ref, int col: int ref, int package: @package ref, int idx: int ref);
+
+has_ellipsis(int id: @callorconversionexpr ref);
+
+@container = @file | @folder;
+
+@locatable = @xmllocatable | @node | @localscope;
+
+@node = @documentable | @exprparent | @modexprparent | @fieldparent | @stmtparent | @declparent | @scopenode
+ | @comment_group | @comment;
+
+@documentable = @file | @field | @spec | @gendecl | @funcdecl | @modexpr;
+
+@exprparent = @funcdef | @file | @expr | @field | @stmt | @decl | @spec;
+
+@modexprparent = @file | @modexpr;
+
+@fieldparent = @decl | @structtypeexpr | @functypeexpr | @interfacetypeexpr;
+
+@stmtparent = @funcdef | @stmt | @decl;
+
+@declparent = @file | @declstmt;
+
+@funcdef = @funclit | @funcdecl;
+
+@scopenode = @file | @functypeexpr | @blockstmt | @ifstmt | @caseclause | @switchstmt | @commclause | @loopstmt;
+
+@location = @location_default;
+
+@sourceline = @locatable;
+
+case @comment.kind of
+ 0 = @slashslashcomment
+| 1 = @slashstarcomment;
+
+case @expr.kind of
+ 0 = @badexpr
+| 1 = @ident
+| 2 = @ellipsis
+| 3 = @intlit
+| 4 = @floatlit
+| 5 = @imaglit
+| 6 = @charlit
+| 7 = @stringlit
+| 8 = @funclit
+| 9 = @compositelit
+| 10 = @parenexpr
+| 11 = @selectorexpr
+| 12 = @indexexpr
+| 13 = @sliceexpr
+| 14 = @typeassertexpr
+| 15 = @callorconversionexpr
+| 16 = @starexpr
+| 17 = @keyvalueexpr
+| 18 = @arraytypeexpr
+| 19 = @structtypeexpr
+| 20 = @functypeexpr
+| 21 = @interfacetypeexpr
+| 22 = @maptypeexpr
+| 23 = @plusexpr
+| 24 = @minusexpr
+| 25 = @notexpr
+| 26 = @complementexpr
+| 27 = @derefexpr
+| 28 = @addressexpr
+| 29 = @arrowexpr
+| 30 = @lorexpr
+| 31 = @landexpr
+| 32 = @eqlexpr
+| 33 = @neqexpr
+| 34 = @lssexpr
+| 35 = @leqexpr
+| 36 = @gtrexpr
+| 37 = @geqexpr
+| 38 = @addexpr
+| 39 = @subexpr
+| 40 = @orexpr
+| 41 = @xorexpr
+| 42 = @mulexpr
+| 43 = @quoexpr
+| 44 = @remexpr
+| 45 = @shlexpr
+| 46 = @shrexpr
+| 47 = @andexpr
+| 48 = @andnotexpr
+| 49 = @sendchantypeexpr
+| 50 = @recvchantypeexpr
+| 51 = @sendrcvchantypeexpr;
+
+@basiclit = @intlit | @floatlit | @imaglit | @charlit | @stringlit;
+
+@operatorexpr = @logicalexpr | @arithmeticexpr | @bitwiseexpr | @unaryexpr | @binaryexpr;
+
+@logicalexpr = @logicalunaryexpr | @logicalbinaryexpr;
+
+@arithmeticexpr = @arithmeticunaryexpr | @arithmeticbinaryexpr;
+
+@bitwiseexpr = @bitwiseunaryexpr | @bitwisebinaryexpr;
+
+@unaryexpr = @logicalunaryexpr | @bitwiseunaryexpr | @arithmeticunaryexpr | @derefexpr | @addressexpr | @arrowexpr;
+
+@logicalunaryexpr = @notexpr;
+
+@bitwiseunaryexpr = @complementexpr;
+
+@arithmeticunaryexpr = @plusexpr | @minusexpr;
+
+@binaryexpr = @logicalbinaryexpr | @bitwisebinaryexpr | @arithmeticbinaryexpr | @comparison;
+
+@logicalbinaryexpr = @lorexpr | @landexpr;
+
+@bitwisebinaryexpr = @shiftexpr | @orexpr | @xorexpr | @andexpr | @andnotexpr;
+
+@arithmeticbinaryexpr = @addexpr | @subexpr | @mulexpr | @quoexpr | @remexpr;
+
+@shiftexpr = @shlexpr | @shrexpr;
+
+@comparison = @equalitytest | @relationalcomparison;
+
+@equalitytest = @eqlexpr | @neqexpr;
+
+@relationalcomparison = @lssexpr | @leqexpr | @gtrexpr | @geqexpr;
+
+@chantypeexpr = @sendchantypeexpr | @recvchantypeexpr | @sendrcvchantypeexpr;
+
+case @stmt.kind of
+ 0 = @badstmt
+| 1 = @declstmt
+| 2 = @emptystmt
+| 3 = @labeledstmt
+| 4 = @exprstmt
+| 5 = @sendstmt
+| 6 = @incstmt
+| 7 = @decstmt
+| 8 = @gostmt
+| 9 = @deferstmt
+| 10 = @returnstmt
+| 11 = @breakstmt
+| 12 = @continuestmt
+| 13 = @gotostmt
+| 14 = @fallthroughstmt
+| 15 = @blockstmt
+| 16 = @ifstmt
+| 17 = @caseclause
+| 18 = @exprswitchstmt
+| 19 = @typeswitchstmt
+| 20 = @commclause
+| 21 = @selectstmt
+| 22 = @forstmt
+| 23 = @rangestmt
+| 24 = @assignstmt
+| 25 = @definestmt
+| 26 = @addassignstmt
+| 27 = @subassignstmt
+| 28 = @mulassignstmt
+| 29 = @quoassignstmt
+| 30 = @remassignstmt
+| 31 = @andassignstmt
+| 32 = @orassignstmt
+| 33 = @xorassignstmt
+| 34 = @shlassignstmt
+| 35 = @shrassignstmt
+| 36 = @andnotassignstmt;
+
+@incdecstmt = @incstmt | @decstmt;
+
+@assignment = @simpleassignstmt | @compoundassignstmt;
+
+@simpleassignstmt = @assignstmt | @definestmt;
+
+@compoundassignstmt = @addassignstmt | @subassignstmt | @mulassignstmt | @quoassignstmt | @remassignstmt
+ | @andassignstmt | @orassignstmt | @xorassignstmt | @shlassignstmt | @shrassignstmt | @andnotassignstmt;
+
+@branchstmt = @breakstmt | @continuestmt | @gotostmt | @fallthroughstmt;
+
+@switchstmt = @exprswitchstmt | @typeswitchstmt;
+
+@loopstmt = @forstmt | @rangestmt;
+
+case @decl.kind of
+ 0 = @baddecl
+| 1 = @importdecl
+| 2 = @constdecl
+| 3 = @typedecl
+| 4 = @vardecl
+| 5 = @funcdecl;
+
+@gendecl = @importdecl | @constdecl | @typedecl | @vardecl;
+
+case @spec.kind of
+ 0 = @importspec
+| 1 = @valuespec
+| 2 = @typedefspec
+| 3 = @aliasspec;
+
+@typespec = @typedefspec | @aliasspec;
+
+case @object.kind of
+ 0 = @pkgobject
+| 1 = @decltypeobject
+| 2 = @builtintypeobject
+| 3 = @declconstobject
+| 4 = @builtinconstobject
+| 5 = @declvarobject
+| 6 = @declfunctionobject
+| 7 = @builtinfunctionobject
+| 8 = @labelobject;
+
+@declobject = @decltypeobject | @declconstobject | @declvarobject | @declfunctionobject;
+
+@builtinobject = @builtintypeobject | @builtinconstobject | @builtinfunctionobject;
+
+@typeobject = @decltypeobject | @builtintypeobject;
+
+@valueobject = @constobject | @varobject | @functionobject;
+
+@constobject = @declconstobject | @builtinconstobject;
+
+@varobject = @declvarobject;
+
+@functionobject = @declfunctionobject | @builtinfunctionobject;
+
+case @scope.kind of
+ 0 = @universescope
+| 1 = @packagescope
+| 2 = @localscope;
+
+case @type.kind of
+ 0 = @invalidtype
+| 1 = @boolexprtype
+| 2 = @inttype
+| 3 = @int8type
+| 4 = @int16type
+| 5 = @int32type
+| 6 = @int64type
+| 7 = @uinttype
+| 8 = @uint8type
+| 9 = @uint16type
+| 10 = @uint32type
+| 11 = @uint64type
+| 12 = @uintptrtype
+| 13 = @float32type
+| 14 = @float64type
+| 15 = @complex64type
+| 16 = @complex128type
+| 17 = @stringexprtype
+| 18 = @unsafepointertype
+| 19 = @boolliteraltype
+| 20 = @intliteraltype
+| 21 = @runeliteraltype
+| 22 = @floatliteraltype
+| 23 = @complexliteraltype
+| 24 = @stringliteraltype
+| 25 = @nilliteraltype
+| 26 = @arraytype
+| 27 = @slicetype
+| 28 = @structtype
+| 29 = @pointertype
+| 30 = @interfacetype
+| 31 = @tupletype
+| 32 = @signaturetype
+| 33 = @maptype
+| 34 = @sendchantype
+| 35 = @recvchantype
+| 36 = @sendrcvchantype
+| 37 = @namedtype;
+
+@basictype = @booltype | @numerictype | @stringtype | @literaltype | @invalidtype | @unsafepointertype;
+
+@booltype = @boolexprtype | @boolliteraltype;
+
+@numerictype = @integertype | @floattype | @complextype;
+
+@integertype = @signedintegertype | @unsignedintegertype;
+
+@signedintegertype = @inttype | @int8type | @int16type | @int32type | @int64type | @intliteraltype | @runeliteraltype;
+
+@unsignedintegertype = @uinttype | @uint8type | @uint16type | @uint32type | @uint64type | @uintptrtype;
+
+@floattype = @float32type | @float64type | @floatliteraltype;
+
+@complextype = @complex64type | @complex128type | @complexliteraltype;
+
+@stringtype = @stringexprtype | @stringliteraltype;
+
+@literaltype = @boolliteraltype | @intliteraltype | @runeliteraltype | @floatliteraltype | @complexliteraltype
+ | @stringliteraltype | @nilliteraltype;
+
+@compositetype = @containertype | @structtype | @pointertype | @interfacetype | @tupletype | @signaturetype | @namedtype;
+
+@containertype = @arraytype | @slicetype | @maptype | @chantype;
+
+@chantype = @sendchantype | @recvchantype | @sendrcvchantype;
+
+case @modexpr.kind of
+ 0 = @modcommentblock
+| 1 = @modline
+| 2 = @modlineblock
+| 3 = @modlparen
+| 4 = @modrparen;
+
+case @error.kind of
+ 0 = @unknownerror
+| 1 = @listerror
+| 2 = @parseerror
+| 3 = @typeerror;
+
diff --git a/upgrades/b37faf5d62cccefad9fcfd8f5c026620097b2355/old.dbscheme b/upgrades/b37faf5d62cccefad9fcfd8f5c026620097b2355/old.dbscheme
new file mode 100644
index 00000000000..b37faf5d62c
--- /dev/null
+++ b/upgrades/b37faf5d62cccefad9fcfd8f5c026620097b2355/old.dbscheme
@@ -0,0 +1,528 @@
+/** Auto-generated dbscheme; do not edit. */
+
+
+/** Duplicate code **/
+
+duplicateCode(
+ unique int id : @duplication,
+ varchar(900) relativePath : string ref,
+ int equivClass : int ref);
+
+similarCode(
+ unique int id : @similarity,
+ varchar(900) 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);
+
+/** External data **/
+
+externalData(
+ int id : @externalDataElement,
+ varchar(900) path : string ref,
+ int column: int ref,
+ varchar(900) value : string ref
+);
+
+snapshotDate(unique date snapshotDate : date ref);
+
+sourceLocationPrefix(varchar(900) prefix : string 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;
+
+compilations(unique int id: @compilation, string cwd: string ref);
+
+#keyset[id, num]
+compilation_args(int id: @compilation ref, int num: int ref, string arg: string ref);
+
+#keyset[id, num, kind]
+compilation_time(int id: @compilation ref, int num: int ref, int kind: int ref, float secs: float ref);
+
+diagnostic_for(unique int diagnostic: @diagnostic ref, int compilation: @compilation ref, int file_number: int ref, int file_number_diagnostic_number: int ref);
+
+compilation_finished(unique int id: @compilation ref, float cpu_seconds: float ref, float elapsed_seconds: float ref);
+
+#keyset[id, num]
+compilation_compiling_files(int id: @compilation ref, int num: int ref, int file: @file ref);
+
+diagnostics(unique int id: @diagnostic, int severity: int ref, string error_tag: string ref, string error_message: string ref,
+ string full_error_message: string ref, int location: @location ref);
+
+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);
+
+numlines(int element_id: @sourceline ref, int num_lines: int ref, int num_code: int ref, int num_comment: int ref);
+
+files(unique int id: @file, string name: string ref, string simple: string ref, string ext: string ref, int fromSource: int ref);
+
+folders(unique int id: @folder, string name: string ref, string simple: string ref);
+
+containerparent(int parent: @container ref, unique int child: @container ref);
+
+has_location(unique int locatable: @locatable ref, int location: @location ref);
+
+#keyset[parent, idx]
+comment_groups(unique int id: @comment_group, int parent: @file ref, int idx: int ref);
+
+comments(unique int id: @comment, int kind: int ref, int parent: @comment_group ref, int idx: int ref, string text: string ref);
+
+doc_comments(unique int node: @documentable ref, int comment: @comment_group ref);
+
+#keyset[parent, idx]
+exprs(unique int id: @expr, int kind: int ref, int parent: @exprparent ref, int idx: int ref);
+
+literals(unique int expr: @expr ref, string value: string ref, string raw: string ref);
+
+constvalues(unique int expr: @expr ref, string value: string ref, string exact: string ref);
+
+fields(unique int id: @field, int parent: @fieldparent ref, int idx: int ref);
+
+#keyset[parent, idx]
+stmts(unique int id: @stmt, int kind: int ref, int parent: @stmtparent ref, int idx: int ref);
+
+#keyset[parent, idx]
+decls(unique int id: @decl, int kind: int ref, int parent: @declparent ref, int idx: int ref);
+
+#keyset[parent, idx]
+specs(unique int id: @spec, int kind: int ref, int parent: @gendecl ref, int idx: int ref);
+
+scopes(unique int id: @scope, int kind: int ref);
+
+scopenesting(unique int inner: @scope ref, int outer: @scope ref);
+
+scopenodes(unique int node: @scopenode ref, int scope: @localscope ref);
+
+objects(unique int id: @object, int kind: int ref, string name: string ref);
+
+objectscopes(unique int object: @object ref, int scope: @scope ref);
+
+objecttypes(unique int object: @object ref, int tp: @type ref);
+
+methodreceivers(unique int method: @object ref, int receiver: @object ref);
+
+fieldstructs(unique int field: @object ref, int struct: @structtype ref);
+
+methodhosts(int method: @object ref, int host: @namedtype ref);
+
+defs(int ident: @ident ref, int object: @object ref);
+
+uses(int ident: @ident ref, int object: @object ref);
+
+types(unique int id: @type, int kind: int ref);
+
+type_of(unique int expr: @expr ref, int tp: @type ref);
+
+typename(unique int tp: @type ref, string name: string ref);
+
+key_type(unique int map: @maptype ref, int tp: @type ref);
+
+element_type(unique int container: @containertype ref, int tp: @type ref);
+
+base_type(unique int ptr: @pointertype ref, int tp: @type ref);
+
+underlying_type(unique int named: @namedtype ref, int tp: @type ref);
+
+#keyset[parent, index]
+component_types(int parent: @compositetype ref, int index: int ref, string name: string ref, int tp: @type ref);
+
+array_length(unique int tp: @arraytype ref, string len: string ref);
+
+type_objects(unique int tp: @type ref, int object: @object ref);
+
+packages(unique int id: @package, string name: string ref, string path: string ref, int scope: @packagescope ref);
+
+#keyset[parent, idx]
+modexprs(unique int id: @modexpr, int kind: int ref, int parent: @modexprparent ref, int idx: int ref);
+
+#keyset[parent, idx]
+modtokens(string token: string ref, int parent: @modexpr ref, int idx: int ref);
+
+#keyset[package, idx]
+errors(unique int id: @error, int kind: int ref, string msg: string ref, string rawpos: string ref,
+ string file: string ref, int line: int ref, int col: int ref, int package: @package ref, int idx: int ref);
+
+has_ellipsis(int id: @callorconversionexpr ref);
+
+@container = @file | @folder;
+
+@locatable = @xmllocatable | @node | @localscope;
+
+@node = @documentable | @exprparent | @modexprparent | @fieldparent | @stmtparent | @declparent | @scopenode
+ | @comment_group | @comment;
+
+@documentable = @file | @field | @spec | @gendecl | @funcdecl | @modexpr;
+
+@exprparent = @funcdef | @file | @expr | @field | @stmt | @decl | @spec;
+
+@modexprparent = @file | @modexpr;
+
+@fieldparent = @decl | @structtypeexpr | @functypeexpr | @interfacetypeexpr;
+
+@stmtparent = @funcdef | @stmt | @decl;
+
+@declparent = @file | @declstmt;
+
+@funcdef = @funclit | @funcdecl;
+
+@scopenode = @file | @functypeexpr | @blockstmt | @ifstmt | @caseclause | @switchstmt | @commclause | @loopstmt;
+
+@location = @location_default;
+
+@sourceline = @locatable;
+
+case @comment.kind of
+ 0 = @slashslashcomment
+| 1 = @slashstarcomment;
+
+case @expr.kind of
+ 0 = @badexpr
+| 1 = @ident
+| 2 = @ellipsis
+| 3 = @intlit
+| 4 = @floatlit
+| 5 = @imaglit
+| 6 = @charlit
+| 7 = @stringlit
+| 8 = @funclit
+| 9 = @compositelit
+| 10 = @parenexpr
+| 11 = @selectorexpr
+| 12 = @indexexpr
+| 13 = @sliceexpr
+| 14 = @typeassertexpr
+| 15 = @callorconversionexpr
+| 16 = @starexpr
+| 17 = @keyvalueexpr
+| 18 = @arraytypeexpr
+| 19 = @structtypeexpr
+| 20 = @functypeexpr
+| 21 = @interfacetypeexpr
+| 22 = @maptypeexpr
+| 23 = @plusexpr
+| 24 = @minusexpr
+| 25 = @notexpr
+| 26 = @complementexpr
+| 27 = @derefexpr
+| 28 = @addressexpr
+| 29 = @arrowexpr
+| 30 = @lorexpr
+| 31 = @landexpr
+| 32 = @eqlexpr
+| 33 = @neqexpr
+| 34 = @lssexpr
+| 35 = @leqexpr
+| 36 = @gtrexpr
+| 37 = @geqexpr
+| 38 = @addexpr
+| 39 = @subexpr
+| 40 = @orexpr
+| 41 = @xorexpr
+| 42 = @mulexpr
+| 43 = @quoexpr
+| 44 = @remexpr
+| 45 = @shlexpr
+| 46 = @shrexpr
+| 47 = @andexpr
+| 48 = @andnotexpr
+| 49 = @sendchantypeexpr
+| 50 = @recvchantypeexpr
+| 51 = @sendrcvchantypeexpr;
+
+@basiclit = @intlit | @floatlit | @imaglit | @charlit | @stringlit;
+
+@operatorexpr = @logicalexpr | @arithmeticexpr | @bitwiseexpr | @unaryexpr | @binaryexpr;
+
+@logicalexpr = @logicalunaryexpr | @logicalbinaryexpr;
+
+@arithmeticexpr = @arithmeticunaryexpr | @arithmeticbinaryexpr;
+
+@bitwiseexpr = @bitwiseunaryexpr | @bitwisebinaryexpr;
+
+@unaryexpr = @logicalunaryexpr | @bitwiseunaryexpr | @arithmeticunaryexpr | @derefexpr | @addressexpr | @arrowexpr;
+
+@logicalunaryexpr = @notexpr;
+
+@bitwiseunaryexpr = @complementexpr;
+
+@arithmeticunaryexpr = @plusexpr | @minusexpr;
+
+@binaryexpr = @logicalbinaryexpr | @bitwisebinaryexpr | @arithmeticbinaryexpr | @comparison;
+
+@logicalbinaryexpr = @lorexpr | @landexpr;
+
+@bitwisebinaryexpr = @shiftexpr | @orexpr | @xorexpr | @andexpr | @andnotexpr;
+
+@arithmeticbinaryexpr = @addexpr | @subexpr | @mulexpr | @quoexpr | @remexpr;
+
+@shiftexpr = @shlexpr | @shrexpr;
+
+@comparison = @equalitytest | @relationalcomparison;
+
+@equalitytest = @eqlexpr | @neqexpr;
+
+@relationalcomparison = @lssexpr | @leqexpr | @gtrexpr | @geqexpr;
+
+@chantypeexpr = @sendchantypeexpr | @recvchantypeexpr | @sendrcvchantypeexpr;
+
+case @stmt.kind of
+ 0 = @badstmt
+| 1 = @declstmt
+| 2 = @emptystmt
+| 3 = @labeledstmt
+| 4 = @exprstmt
+| 5 = @sendstmt
+| 6 = @incstmt
+| 7 = @decstmt
+| 8 = @gostmt
+| 9 = @deferstmt
+| 10 = @returnstmt
+| 11 = @breakstmt
+| 12 = @continuestmt
+| 13 = @gotostmt
+| 14 = @fallthroughstmt
+| 15 = @blockstmt
+| 16 = @ifstmt
+| 17 = @caseclause
+| 18 = @exprswitchstmt
+| 19 = @typeswitchstmt
+| 20 = @commclause
+| 21 = @selectstmt
+| 22 = @forstmt
+| 23 = @rangestmt
+| 24 = @assignstmt
+| 25 = @definestmt
+| 26 = @addassignstmt
+| 27 = @subassignstmt
+| 28 = @mulassignstmt
+| 29 = @quoassignstmt
+| 30 = @remassignstmt
+| 31 = @andassignstmt
+| 32 = @orassignstmt
+| 33 = @xorassignstmt
+| 34 = @shlassignstmt
+| 35 = @shrassignstmt
+| 36 = @andnotassignstmt;
+
+@incdecstmt = @incstmt | @decstmt;
+
+@assignment = @simpleassignstmt | @compoundassignstmt;
+
+@simpleassignstmt = @assignstmt | @definestmt;
+
+@compoundassignstmt = @addassignstmt | @subassignstmt | @mulassignstmt | @quoassignstmt | @remassignstmt
+ | @andassignstmt | @orassignstmt | @xorassignstmt | @shlassignstmt | @shrassignstmt | @andnotassignstmt;
+
+@branchstmt = @breakstmt | @continuestmt | @gotostmt | @fallthroughstmt;
+
+@switchstmt = @exprswitchstmt | @typeswitchstmt;
+
+@loopstmt = @forstmt | @rangestmt;
+
+case @decl.kind of
+ 0 = @baddecl
+| 1 = @importdecl
+| 2 = @constdecl
+| 3 = @typedecl
+| 4 = @vardecl
+| 5 = @funcdecl;
+
+@gendecl = @importdecl | @constdecl | @typedecl | @vardecl;
+
+case @spec.kind of
+ 0 = @importspec
+| 1 = @valuespec
+| 2 = @typedefspec
+| 3 = @aliasspec;
+
+@typespec = @typedefspec | @aliasspec;
+
+case @object.kind of
+ 0 = @pkgobject
+| 1 = @decltypeobject
+| 2 = @builtintypeobject
+| 3 = @declconstobject
+| 4 = @builtinconstobject
+| 5 = @declvarobject
+| 6 = @declfunctionobject
+| 7 = @builtinfunctionobject
+| 8 = @labelobject;
+
+@declobject = @decltypeobject | @declconstobject | @declvarobject | @declfunctionobject;
+
+@builtinobject = @builtintypeobject | @builtinconstobject | @builtinfunctionobject;
+
+@typeobject = @decltypeobject | @builtintypeobject;
+
+@valueobject = @constobject | @varobject | @functionobject;
+
+@constobject = @declconstobject | @builtinconstobject;
+
+@varobject = @declvarobject;
+
+@functionobject = @declfunctionobject | @builtinfunctionobject;
+
+case @scope.kind of
+ 0 = @universescope
+| 1 = @packagescope
+| 2 = @localscope;
+
+case @type.kind of
+ 0 = @invalidtype
+| 1 = @boolexprtype
+| 2 = @inttype
+| 3 = @int8type
+| 4 = @int16type
+| 5 = @int32type
+| 6 = @int64type
+| 7 = @uinttype
+| 8 = @uint8type
+| 9 = @uint16type
+| 10 = @uint32type
+| 11 = @uint64type
+| 12 = @uintptrtype
+| 13 = @float32type
+| 14 = @float64type
+| 15 = @complex64type
+| 16 = @complex128type
+| 17 = @stringexprtype
+| 18 = @unsafepointertype
+| 19 = @boolliteraltype
+| 20 = @intliteraltype
+| 21 = @runeliteraltype
+| 22 = @floatliteraltype
+| 23 = @complexliteraltype
+| 24 = @stringliteraltype
+| 25 = @nilliteraltype
+| 26 = @arraytype
+| 27 = @slicetype
+| 28 = @structtype
+| 29 = @pointertype
+| 30 = @interfacetype
+| 31 = @tupletype
+| 32 = @signaturetype
+| 33 = @maptype
+| 34 = @sendchantype
+| 35 = @recvchantype
+| 36 = @sendrcvchantype
+| 37 = @namedtype;
+
+@basictype = @booltype | @numerictype | @stringtype | @literaltype | @invalidtype | @unsafepointertype;
+
+@booltype = @boolexprtype | @boolliteraltype;
+
+@numerictype = @integertype | @floattype | @complextype;
+
+@integertype = @signedintegertype | @unsignedintegertype;
+
+@signedintegertype = @inttype | @int8type | @int16type | @int32type | @int64type | @intliteraltype | @runeliteraltype;
+
+@unsignedintegertype = @uinttype | @uint8type | @uint16type | @uint32type | @uint64type | @uintptrtype;
+
+@floattype = @float32type | @float64type | @floatliteraltype;
+
+@complextype = @complex64type | @complex128type | @complexliteraltype;
+
+@stringtype = @stringexprtype | @stringliteraltype;
+
+@literaltype = @boolliteraltype | @intliteraltype | @runeliteraltype | @floatliteraltype | @complexliteraltype
+ | @stringliteraltype | @nilliteraltype;
+
+@compositetype = @containertype | @structtype | @pointertype | @interfacetype | @tupletype | @signaturetype | @namedtype;
+
+@containertype = @arraytype | @slicetype | @maptype | @chantype;
+
+@chantype = @sendchantype | @recvchantype | @sendrcvchantype;
+
+case @modexpr.kind of
+ 0 = @modcommentblock
+| 1 = @modline
+| 2 = @modlineblock
+| 3 = @modlparen
+| 4 = @modrparen;
+
+case @error.kind of
+ 0 = @unknownerror
+| 1 = @listerror
+| 2 = @parseerror
+| 3 = @typeerror;
+
diff --git a/upgrades/b37faf5d62cccefad9fcfd8f5c026620097b2355/upgrade.properties b/upgrades/b37faf5d62cccefad9fcfd8f5c026620097b2355/upgrade.properties
new file mode 100644
index 00000000000..71f3ee178e5
--- /dev/null
+++ b/upgrades/b37faf5d62cccefad9fcfd8f5c026620097b2355/upgrade.properties
@@ -0,0 +1,4 @@
+description: Removed unused column from the `folders` and `files` relations
+compatibility: full
+files.rel: reorder files.rel (int id, string name, string simple, string ext, int fromSource) id name
+folders.rel: reorder folders.rel (int id, string name, string simple) id name