There are one (or more) legal parameters for an overridden method that are
-not legal for an overriding method. This will cause an error when the overriding
-method is called with a number of parameters that is legal for the overridden method.
-This violates the Liskov substitution principle.
+
When the signature of a method of a base class and a method of a subclass that overrides it don't match, a call to the base class method
+may not be a valid call to the subclass method, and thus raise an exception if an instance of the subclass is passed instead.
+If following the Liskov Substitution Principle, in which an instance of a subclass should be usable in every context as though it were an
+instance of the base class, this behavior breaks the principle.
-
Ensure that the overriding method accepts all the parameters that are legal for
-overridden method.
+
Ensure that the overriding method in the subclass accepts the same parameters as the base method.
-
In this example there is a mismatch between the legal parameters for the base
-class method (self, source, filename, symbol) and the extension method
-(self, source). The extension method can be used to override the base
-method as long as values are not specified for the filename and
-symbol parameters. If the extension method was passed the additional
-parameters accepted by the base method then an error would occur.
+
In the following example, Base.runsource takes an optional filename argument. However, the overriding method
+Sub.runsource does not. This means the run function will fail if passed an instance of Sub.
+
-
The extension method should be updated to support the filename and
-symbol parameters supported by the overridden method.
-
diff --git a/python/ql/src/Functions/SignatureOverriddenMethod.ql b/python/ql/src/Functions/SignatureOverriddenMethod.ql
index 3e3877bc139..15b3fa70640 100644
--- a/python/ql/src/Functions/SignatureOverriddenMethod.ql
+++ b/python/ql/src/Functions/SignatureOverriddenMethod.ql
@@ -13,23 +13,254 @@
*/
import python
-import Expressions.CallArgs
+import semmle.python.dataflow.new.DataFlow
+import semmle.python.dataflow.new.internal.DataFlowDispatch
+import codeql.util.Option
-from FunctionValue base, PythonFunctionValue derived
-where
- not exists(base.getACall()) and
- not exists(FunctionValue a_derived |
- a_derived.overrides(base) and
- exists(a_derived.getACall())
- ) and
- not derived.getScope().isSpecialMethod() and
- derived.getName() != "__init__" and
- derived.isNormalMethod() and
- // call to overrides distributed for efficiency
- (
- derived.overrides(base) and derived.minParameters() > base.maxParameters()
- or
- derived.overrides(base) and derived.maxParameters() < base.minParameters()
+/** Holds if `base` is overridden by `sub` */
+predicate overrides(Function base, Function sub) {
+ base.getName() = sub.getName() and
+ base.getScope() = getADirectSuperclass+(sub.getScope())
+}
+
+/** Constructs a string to pluralize `str` depending on `num`. */
+bindingset[num, str]
+string plural(int num, string str) {
+ num = 1 and result = "1 " + str
+ or
+ num != 1 and result = num.toString() + " " + str + "s"
+}
+
+/** Describes the minimum number of arguments `func` can accept, using "at least" if it may accept more. */
+string describeMin(Function func) {
+ exists(string descr | descr = plural(func.getMinPositionalArguments(), "positional argument") |
+ if func.getMinPositionalArguments() = func.getMaxPositionalArguments()
+ then result = descr
+ else result = "at least " + descr
)
-select derived, "Overriding method '" + derived.getName() + "' has signature mismatch with $@.",
- base, "overridden method"
+}
+
+/** Described the maximum number of arguments `func` can accept, using "at most" if it may accept fewer, and "arbitrarily many" if it has a vararg. */
+string describeMax(Function func) {
+ if func.hasVarArg()
+ then result = "arbitrarily many positional arguments"
+ else
+ exists(string descr | descr = plural(func.getMaxPositionalArguments(), "positional argument") |
+ if func.getMinPositionalArguments() = func.getMaxPositionalArguments()
+ then result = descr
+ else result = "at most " + descr
+ )
+}
+
+/** Describes the minimum number of arguments `func` can accept, without repeating "positional arguments". */
+string describeMinShort(Function func) {
+ exists(string descr | descr = func.getMinPositionalArguments().toString() |
+ if func.getMinPositionalArguments() = func.getMaxPositionalArguments()
+ then result = descr
+ else result = "at least " + descr
+ )
+}
+
+/** Describes the maximum number of arguments `func` can accept, without repeating "positional arguments". */
+string describeMaxShort(Function func) {
+ if func.hasVarArg()
+ then result = "arbitrarily many"
+ else
+ exists(string descr | descr = func.getMaxPositionalArguments().toString() |
+ if func.getMinPositionalArguments() = func.getMaxPositionalArguments()
+ then result = descr
+ else result = "at most " + descr
+ )
+}
+
+/** Describe an upper bound on the number of arguments `func` may accept, without specifying "at most". */
+string describeMaxBound(Function func) {
+ if func.hasVarArg()
+ then result = "arbitrarily many"
+ else result = func.getMaxPositionalArguments().toString()
+}
+
+/** Holds if no way to call `base` would be valid for `sub`. The `msg` applies to the `sub method. */
+predicate strongSignatureMismatch(Function base, Function sub, string msg) {
+ overrides(base, sub) and
+ (
+ sub.getMinPositionalArguments() > base.getMaxPositionalArguments() and
+ msg =
+ "requires " + describeMin(sub) + ", whereas overridden $@ requires " + describeMaxShort(base) +
+ "."
+ or
+ sub.getMaxPositionalArguments() < base.getMinPositionalArguments() and
+ msg =
+ "requires " + describeMax(sub) + ", whereas overridden $@ requires " + describeMinShort(base) +
+ "."
+ )
+}
+
+/** Holds if there may be some ways to call `base` that would not be valid for `sub`. The `msg` applies to the `sub` method. */
+predicate weakSignatureMismatch(Function base, Function sub, string msg) {
+ overrides(base, sub) and
+ (
+ sub.getMinPositionalArguments() > base.getMinPositionalArguments() and
+ msg =
+ "requires " + describeMin(sub) + ", whereas overridden $@ may be called with " +
+ base.getMinPositionalArguments().toString() + "."
+ or
+ sub.getMaxPositionalArguments() < base.getMaxPositionalArguments() and
+ msg =
+ "requires " + describeMax(sub) + ", whereas overridden $@ may be called with " +
+ describeMaxBound(base) + "."
+ or
+ sub.getMinPositionalArguments() <= base.getMinPositionalArguments() and
+ sub.getMaxPositionalArguments() >= base.getMaxPositionalArguments() and
+ exists(string arg |
+ // TODO: positional-only args not considered
+ // e.g. `def foo(x, y, /, z):` has x,y as positional only args, should not be considered as possible kw args
+ // However, this likely does not create FPs, as we require a 'witness' call to generate an alert.
+ arg = base.getAnArg().getName() and
+ not arg = sub.getAnArg().getName() and
+ not exists(sub.getKwarg()) and
+ msg = "does not accept keyword argument `" + arg + "`, which overridden $@ does."
+ )
+ or
+ exists(base.getKwarg()) and
+ not exists(sub.getKwarg()) and
+ msg = "does not accept arbitrary keyword arguments, which overridden $@ does."
+ )
+}
+
+/** Holds if `f` should be ignored for considering signature mismatches. */
+predicate ignore(Function f) {
+ isClassmethod(f)
+ or
+ exists(
+ Function g // other functions with the same name, e.g. @property getters/setters.
+ |
+ g.getScope() = f.getScope() and
+ g.getName() = f.getName() and
+ g != f
+ )
+}
+
+/** Gets a function that `call` may resolve to. */
+Function resolveCall(Call call) {
+ exists(DataFlowCall dfc | call = dfc.getNode().(CallNode).getNode() |
+ result = viableCallable(dfc).(DataFlowFunction).getScope()
+ )
+}
+
+/** Holds if `call` may resolve to either `base` or `sub`, and `base` is overridden by `sub`. */
+predicate callViableForEitherOverride(Function base, Function sub, Call call) {
+ overrides(base, sub) and
+ base = resolveCall(call) and
+ sub = resolveCall(call)
+}
+
+/** Holds if either both `base` and `sub` are static methods, or both are not static methods, and `base` is overridden by `sub`. */
+predicate matchingStatic(Function base, Function sub) {
+ overrides(base, sub) and
+ (
+ isStaticmethod(base) and
+ isStaticmethod(sub)
+ or
+ not isStaticmethod(base) and
+ not isStaticmethod(sub)
+ )
+}
+
+int extraSelfArg(Function func) { if isStaticmethod(func) then result = 0 else result = 1 }
+
+/** Holds if the call `call` matches the signature for `func`. */
+predicate callMatchesSignature(Function func, Call call) {
+ func = resolveCall(call) and
+ (
+ // Each parameter of the function is accounted for in the call
+ forall(Parameter param, int i | param = func.getArg(i) |
+ // self arg
+ i = 0 and not isStaticmethod(func)
+ or
+ // positional arg
+ i - extraSelfArg(func) < call.getPositionalArgumentCount()
+ or
+ // has default
+ exists(param.getDefault())
+ or
+ // keyword arg
+ call.getANamedArgumentName() = param.getName()
+ )
+ or
+ // arbitrary varargs or kwargs
+ exists(call.getStarArg())
+ or
+ exists(call.getKwargs())
+ ) and
+ // No excess parameters
+ call.getPositionalArgumentCount() + extraSelfArg(func) <= func.getMaxPositionalArguments() and
+ (
+ exists(func.getKwarg())
+ or
+ forall(string name | name = call.getANamedArgumentName() | exists(func.getArgByName(name)))
+ )
+}
+
+pragma[nomagic]
+private File getFunctionFile(Function f) { result = f.getLocation().getFile() }
+
+/** Gets a call which matches the signature of `base`, but not of overridden `sub`. */
+Call getASignatureMismatchWitness(Function base, Function sub) {
+ callViableForEitherOverride(base, sub, result) and
+ callMatchesSignature(base, result) and
+ not callMatchesSignature(sub, result)
+}
+
+pragma[inline]
+string preferredFile(File callFile, Function base, Function sub) {
+ if callFile = getFunctionFile(base)
+ then result = " A"
+ else
+ if callFile = getFunctionFile(sub)
+ then result = " B"
+ else result = callFile.getAbsolutePath()
+}
+
+/** Choose a 'witnessing' call that matches the signature of `base` but not of overridden `sub`. */
+Call chooseASignatureMismatchWitness(Function base, Function sub) {
+ exists(getASignatureMismatchWitness(base, sub)) and
+ result =
+ min(Call c |
+ c = getASignatureMismatchWitness(base, sub)
+ |
+ c
+ order by
+ preferredFile(c.getLocation().getFile(), base, sub), c.getLocation().getStartLine(),
+ c.getLocation().getStartColumn()
+ )
+}
+
+module CallOption = LocatableOption;
+
+from Function base, Function sub, string msg, string extraMsg, CallOption::Option call
+where
+ not sub.isSpecialMethod() and
+ sub.getName() != "__init__" and
+ not ignore(sub) and
+ not ignore(base) and
+ matchingStatic(base, sub) and
+ (
+ // If we have a witness, alert for a 'weak' mismatch, but prefer the message for a 'strong' mismatch if that holds.
+ call.asSome() = chooseASignatureMismatchWitness(base, sub) and
+ extraMsg =
+ " $@ correctly calls the base method, but does not match the signature of the overriding method." and
+ (
+ strongSignatureMismatch(base, sub, msg)
+ or
+ not strongSignatureMismatch(base, sub, _) and
+ weakSignatureMismatch(base, sub, msg)
+ )
+ or
+ // With no witness, only alert for 'strong' mismatches.
+ not exists(getASignatureMismatchWitness(base, sub)) and
+ call.isNone() and
+ strongSignatureMismatch(base, sub, msg) and
+ extraMsg = ""
+ )
+select sub, "This method " + msg + extraMsg, base, base.getQualifiedName(), call, "This call"
diff --git a/python/ql/src/Imports/FromImportOfMutableAttribute.ql b/python/ql/src/Imports/FromImportOfMutableAttribute.ql
index cbb74977a03..c66a7578de6 100644
--- a/python/ql/src/Imports/FromImportOfMutableAttribute.ql
+++ b/python/ql/src/Imports/FromImportOfMutableAttribute.ql
@@ -2,9 +2,9 @@
* @name Importing value of mutable attribute
* @description Importing the value of a mutable attribute directly means that changes in global state will not be observed locally.
* @kind problem
- * @tags reliability
- * maintainability
- * modularity
+ * @tags quality
+ * reliability
+ * correctness
* @problem.severity warning
* @sub-severity high
* @precision medium
diff --git a/python/ql/src/Statements/AssertLiteralConstant.ql b/python/ql/src/Statements/AssertLiteralConstant.ql
index 73bd1645858..60c09951c06 100644
--- a/python/ql/src/Statements/AssertLiteralConstant.ql
+++ b/python/ql/src/Statements/AssertLiteralConstant.ql
@@ -3,7 +3,8 @@
* @description An assert statement testing a literal constant value may exhibit
* different behavior when optimizations are enabled.
* @kind problem
- * @tags reliability
+ * @tags quality
+ * reliability
* correctness
* @problem.severity recommendation
* @sub-severity low
diff --git a/python/ql/src/Statements/BreakOrReturnInFinally.ql b/python/ql/src/Statements/BreakOrReturnInFinally.ql
index 02f501e0bfd..dc9800eba8a 100644
--- a/python/ql/src/Statements/BreakOrReturnInFinally.ql
+++ b/python/ql/src/Statements/BreakOrReturnInFinally.ql
@@ -3,8 +3,10 @@
* @description Using a Break or Return statement in a finally block causes the
* Try-finally block to exit, discarding the exception.
* @kind problem
- * @tags reliability
- * maintainability
+ * @tags quality
+ * reliability
+ * error-handling
+ * correctness
* external/cwe/cwe-584
* @problem.severity warning
* @sub-severity low
diff --git a/python/ql/src/Statements/DocStrings.ql b/python/ql/src/Statements/DocStrings.ql
index 355aff93f17..903207f7ccb 100644
--- a/python/ql/src/Statements/DocStrings.ql
+++ b/python/ql/src/Statements/DocStrings.ql
@@ -4,6 +4,7 @@
* makes it more difficult for other developers to maintain the code.
* @kind problem
* @tags maintainability
+ * readability
* @problem.severity recommendation
* @sub-severity low
* @precision medium
diff --git a/python/ql/src/Statements/ReturnOrYieldOutsideFunction.ql b/python/ql/src/Statements/ReturnOrYieldOutsideFunction.ql
index a940dc60123..7bb0161f130 100644
--- a/python/ql/src/Statements/ReturnOrYieldOutsideFunction.ql
+++ b/python/ql/src/Statements/ReturnOrYieldOutsideFunction.ql
@@ -2,7 +2,8 @@
* @name Use of 'return' or 'yield' outside a function
* @description Using 'return' or 'yield' outside a function causes a 'SyntaxError' at runtime.
* @kind problem
- * @tags reliability
+ * @tags quality
+ * reliability
* correctness
* @problem.severity error
* @sub-severity low
diff --git a/python/ql/src/Variables/ShadowBuiltin.ql b/python/ql/src/Variables/ShadowBuiltin.ql
index 7e4a8580a93..51b74b7109c 100644
--- a/python/ql/src/Variables/ShadowBuiltin.ql
+++ b/python/ql/src/Variables/ShadowBuiltin.ql
@@ -4,8 +4,10 @@
* makes the built-in object unusable within the current scope and makes the code
* more difficult to read.
* @kind problem
- * @tags maintainability
+ * @tags quality
+ * maintainability
* readability
+ * correctness
* @problem.severity recommendation
* @sub-severity low
* @precision medium
diff --git a/python/ql/src/Variables/ShadowGlobal.ql b/python/ql/src/Variables/ShadowGlobal.ql
index 79d74d272ae..2f06e4fe57d 100644
--- a/python/ql/src/Variables/ShadowGlobal.ql
+++ b/python/ql/src/Variables/ShadowGlobal.ql
@@ -4,8 +4,10 @@
* makes the global variable unusable within the current scope and makes the code
* more difficult to read.
* @kind problem
- * @tags maintainability
+ * @tags quality
+ * maintainability
* readability
+ * correctness
* @problem.severity recommendation
* @sub-severity low
* @precision medium
diff --git a/python/ql/src/Variables/UndefinedPlaceHolder.ql b/python/ql/src/Variables/UndefinedPlaceHolder.ql
index 7f7794e60a1..b0eeeda871a 100644
--- a/python/ql/src/Variables/UndefinedPlaceHolder.ql
+++ b/python/ql/src/Variables/UndefinedPlaceHolder.ql
@@ -2,7 +2,8 @@
* @name Use of an undefined placeholder variable
* @description Using a variable before it is initialized causes an exception.
* @kind problem
- * @tags reliability
+ * @tags quality
+ * reliability
* correctness
* @problem.severity error
* @sub-severity low
diff --git a/python/ql/src/Variables/UninitializedLocal.ql b/python/ql/src/Variables/UninitializedLocal.ql
index 3a2461ee3e7..a6ac7d490ce 100644
--- a/python/ql/src/Variables/UninitializedLocal.ql
+++ b/python/ql/src/Variables/UninitializedLocal.ql
@@ -2,7 +2,8 @@
* @name Potentially uninitialized local variable
* @description Using a local variable before it is initialized causes an UnboundLocalError.
* @kind problem
- * @tags reliability
+ * @tags quality
+ * reliability
* correctness
* @problem.severity error
* @sub-severity low
diff --git a/python/ql/src/Variables/UnusedParameter.ql b/python/ql/src/Variables/UnusedParameter.ql
index 74e1c2ac536..7228974b7c7 100644
--- a/python/ql/src/Variables/UnusedParameter.ql
+++ b/python/ql/src/Variables/UnusedParameter.ql
@@ -2,7 +2,10 @@
* @name Unused parameter
* @description Parameter is defined but not used
* @kind problem
- * @tags maintainability
+ * @tags quality
+ * reliability
+ * correctness
+ * readability
* @problem.severity recommendation
* @sub-severity high
* @precision medium
diff --git a/python/ql/src/change-notes/2025-08-19-signature-mismatch.md b/python/ql/src/change-notes/2025-08-19-signature-mismatch.md
new file mode 100644
index 00000000000..60c3efa32eb
--- /dev/null
+++ b/python/ql/src/change-notes/2025-08-19-signature-mismatch.md
@@ -0,0 +1,5 @@
+---
+category: minorAnalysis
+---
+* The `py/inheritance/signature-mismatch` query has been modernized. It produces more precise results and more descriptive alert messages.
+* The `py/inheritance/incorrect-overriding-signature` query has been deprecated. Its results have been consolidated into the `py/inheritance/signature-mismatch` query.
\ No newline at end of file
diff --git a/python/ql/src/change-notes/2025-06-04-missing-multiple-calls-to-init-del.md b/python/ql/src/change-notes/released/1.6.5.md
similarity index 75%
rename from python/ql/src/change-notes/2025-06-04-missing-multiple-calls-to-init-del.md
rename to python/ql/src/change-notes/released/1.6.5.md
index 5dfe5c2b841..e9e53221424 100644
--- a/python/ql/src/change-notes/2025-06-04-missing-multiple-calls-to-init-del.md
+++ b/python/ql/src/change-notes/released/1.6.5.md
@@ -1,4 +1,5 @@
----
-category: minorAnalysis
----
-* The queries `py/missing-call-to-init`, `py/missing-calls-to-del`, `py/multiple-calls-to-init`, and `py/multiple-calls-to-del` queries have been modernized; no longer relying on outdated libraries, producing more precise results with more descriptive alert messages, and improved documentation.
\ No newline at end of file
+## 1.6.5
+
+### Minor Analysis Improvements
+
+* The queries `py/missing-call-to-init`, `py/missing-calls-to-del`, `py/multiple-calls-to-init`, and `py/multiple-calls-to-del` queries have been modernized; no longer relying on outdated libraries, producing more precise results with more descriptive alert messages, and improved documentation.
diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml
index 1910e09d6a6..03153270557 100644
--- a/python/ql/src/codeql-pack.release.yml
+++ b/python/ql/src/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 1.6.4
+lastReleaseVersion: 1.6.5
diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml
index 3cc58c14faf..edf6366c64b 100644
--- a/python/ql/src/qlpack.yml
+++ b/python/ql/src/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/python-queries
-version: 1.6.5-dev
+version: 1.6.6-dev
groups:
- python
- queries
diff --git a/python/ql/test/library-tests/dataflow/fieldflow/test.py b/python/ql/test/library-tests/dataflow/fieldflow/test.py
index 1ce049917f0..f0152ad38a8 100644
--- a/python/ql/test/library-tests/dataflow/fieldflow/test.py
+++ b/python/ql/test/library-tests/dataflow/fieldflow/test.py
@@ -301,12 +301,12 @@ def set_to_source():
@expects(4) # $ unresolved_call=expects(..) unresolved_call=expects(..)(..)
def test_global_flow_to_class_attribute():
inst = WithTuple2()
- SINK_F(WithTuple2.my_tuple[0])
+ SINK_F(WithTuple2.my_tuple[0]) # $ SPURIOUS: flow="SOURCE, l:-5 -> WithTuple2.my_tuple[0]"
SINK_F(inst.my_tuple[0])
set_to_source()
- SINK(WithTuple2.my_tuple[0]) # $ MISSING: flow="SOURCE, l:-10 -> WithTuple2.my_tuple[0]"
+ SINK(WithTuple2.my_tuple[0]) # $ flow="SOURCE, l:-10 -> WithTuple2.my_tuple[0]"
SINK(inst.my_tuple[0]) # $ MISSING: flow="SOURCE, l:-11 -> inst.my_tuple[0]"
diff --git a/python/ql/test/library-tests/dataflow/fieldflow/test_global.py b/python/ql/test/library-tests/dataflow/fieldflow/test_global.py
index 0e96b37dc33..9970c47c962 100644
--- a/python/ql/test/library-tests/dataflow/fieldflow/test_global.py
+++ b/python/ql/test/library-tests/dataflow/fieldflow/test_global.py
@@ -146,6 +146,7 @@ SINK(fields_with_local_flow(SOURCE)) # $ flow="SOURCE -> fields_with_local_flow(
class NestedObj(object):
def __init__(self):
self.obj = MyObj("OK")
+ self.obj.foo = "default"
def getObj(self):
return self.obj
@@ -163,17 +164,31 @@ x2 = SOURCE
a2 = NestedObj()
a2.getObj().foo = x2
SINK(a2.obj.foo) # $ flow="SOURCE, l:-3 -> a2.obj.foo"
+
+# Global variable
+app = NestedObj()
+
+def init_global():
+ app.obj.foo = SOURCE
+
+def read_global():
+ return app.obj.foo
+
+def test_global_nested_attributes():
+ init_global()
+ result = read_global()
+ SINK(result) # $ flow="SOURCE, l:-8 -> result"
# ------------------------------------------------------------------------------
# Global scope interaction
# ------------------------------------------------------------------------------
def func_defined_before():
- SINK(global_obj.foo) # $ MISSING: flow="SOURCE, l:+3 -> global_obj.foo"
+ SINK(global_obj.foo) # $ flow="SOURCE, l:+3 -> global_obj.foo"
global_obj = MyObj(NONSOURCE)
global_obj.foo = SOURCE
SINK(global_obj.foo) # $ flow="SOURCE, l:-1 -> global_obj.foo"
def func_defined_after():
- SINK(global_obj.foo) # $ MISSING: flow="SOURCE, l:-4 -> global_obj.foo"
+ SINK(global_obj.foo) # $ flow="SOURCE, l:-4 -> global_obj.foo"
diff --git a/python/ql/test/query-tests/Functions/general/SignatureOverriddenMethod.expected b/python/ql/test/query-tests/Functions/general/SignatureOverriddenMethod.expected
index 81c45ab8abe..21b11212075 100644
--- a/python/ql/test/query-tests/Functions/general/SignatureOverriddenMethod.expected
+++ b/python/ql/test/query-tests/Functions/general/SignatureOverriddenMethod.expected
@@ -1,2 +1,2 @@
-| om_test.py:32:5:32:35 | Function Derived.grossly_wrong1 | Overriding method 'grossly_wrong1' has signature mismatch with $@. | om_test.py:12:5:12:41 | Function Base.grossly_wrong1 | overridden method |
-| om_test.py:35:5:35:47 | Function Derived.grossly_wrong2 | Overriding method 'grossly_wrong2' has signature mismatch with $@. | om_test.py:15:5:15:41 | Function Base.grossly_wrong2 | overridden method |
+| om_test.py:32:5:32:35 | Function grossly_wrong1 | This method requires 2 positional arguments, whereas overridden $@ requires 3. | om_test.py:12:5:12:41 | Function grossly_wrong1 | Base.grossly_wrong1 | file://:0:0:0:0 | (none) | This call |
+| om_test.py:35:5:35:47 | Function grossly_wrong2 | This method requires 4 positional arguments, whereas overridden $@ requires 3. | om_test.py:15:5:15:41 | Function grossly_wrong2 | Base.grossly_wrong2 | file://:0:0:0:0 | (none) | This call |
diff --git a/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.expected b/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.expected
index bcb9363a55a..07756ee4600 100644
--- a/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.expected
+++ b/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.expected
@@ -1 +1,13 @@
-| test.py:30:5:30:26 | Function Derived.meth3 | Overriding method 'meth3' has signature mismatch with $@. | test.py:11:5:11:20 | Function Base.meth3 | overridden method |
+| test.py:24:5:24:26 | Function meth1 | This method requires 2 positional arguments, whereas overridden $@ requires 1. $@ correctly calls the base method, but does not match the signature of the overriding method. | test.py:5:5:5:20 | Function meth1 | Base.meth1 | test.py:15:9:15:20 | Attribute() | This call |
+| test.py:27:5:27:20 | Function meth2 | This method requires 1 positional argument, whereas overridden $@ requires 2. $@ correctly calls the base method, but does not match the signature of the overriding method. | test.py:8:5:8:26 | Function meth2 | Base.meth2 | test.py:18:9:18:21 | Attribute() | This call |
+| test.py:30:5:30:26 | Function meth3 | This method requires 2 positional arguments, whereas overridden $@ requires 1. | test.py:11:5:11:20 | Function meth3 | Base.meth3 | file://:0:0:0:0 | (none) | This call |
+| test.py:69:5:69:24 | Function meth | This method requires 2 positional arguments, whereas overridden $@ requires 1. | test.py:64:5:64:19 | Function meth | BlameBase.meth | file://:0:0:0:0 | (none) | This call |
+| test.py:74:5:74:24 | Function meth | This method requires 2 positional arguments, whereas overridden $@ requires 1. | test.py:64:5:64:19 | Function meth | BlameBase.meth | file://:0:0:0:0 | (none) | This call |
+| test.py:125:5:125:20 | Function meth1 | This method requires 1 positional argument, whereas overridden $@ may be called with 2. $@ correctly calls the base method, but does not match the signature of the overriding method. | test.py:82:5:82:25 | Function meth1 | Base2.meth1 | test.py:110:9:110:23 | Attribute() | This call |
+| test.py:131:5:131:31 | Function meth4 | This method requires at least 3 positional arguments, whereas overridden $@ requires at most 2. | test.py:88:5:88:25 | Function meth4 | Base2.meth4 | file://:0:0:0:0 | (none) | This call |
+| test.py:133:5:133:28 | Function meth5 | This method requires at most 3 positional arguments, whereas overridden $@ requires at least 4. | test.py:90:5:90:34 | Function meth5 | Base2.meth5 | file://:0:0:0:0 | (none) | This call |
+| test.py:135:5:135:23 | Function meth6 | This method requires 2 positional arguments, whereas overridden $@ may be called with arbitrarily many. $@ correctly calls the base method, but does not match the signature of the overriding method. | test.py:92:5:92:28 | Function meth6 | Base2.meth6 | test.py:113:9:113:27 | Attribute() | This call |
+| test.py:137:5:137:28 | Function meth7 | This method requires at least 2 positional arguments, whereas overridden $@ may be called with 1. $@ correctly calls the base method, but does not match the signature of the overriding method. | test.py:94:5:94:25 | Function meth7 | Base2.meth7 | test.py:114:9:114:20 | Attribute() | This call |
+| test.py:139:5:139:26 | Function meth8 | This method does not accept keyword argument `y`, which overridden $@ does. $@ correctly calls the base method, but does not match the signature of the overriding method. | test.py:96:5:96:26 | Function meth8 | Base2.meth8 | test.py:115:9:115:25 | Attribute() | This call |
+| test.py:147:5:147:21 | Function meth12 | This method does not accept arbitrary keyword arguments, which overridden $@ does. $@ correctly calls the base method, but does not match the signature of the overriding method. | test.py:104:5:104:31 | Function meth12 | Base2.meth12 | test.py:119:9:119:24 | Attribute() | This call |
+| test.py:149:5:149:27 | Function meth13 | This method does not accept keyword argument `x`, which overridden $@ does. $@ correctly calls the base method, but does not match the signature of the overriding method. | test.py:106:5:106:27 | Function meth13 | Base2.meth13 | test.py:120:9:120:24 | Attribute() | This call |
diff --git a/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.qlref b/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.qlref
index a306477b3b4..5470a05e0e4 100644
--- a/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.qlref
+++ b/python/ql/test/query-tests/Functions/overriding/SignatureOverriddenMethod.qlref
@@ -1 +1,2 @@
-Functions/SignatureOverriddenMethod.ql
+query: Functions/SignatureOverriddenMethod.ql
+postprocess: utils/test/InlineExpectationsTestQuery.ql
diff --git a/python/ql/test/query-tests/Functions/overriding/WrongNameForArgumentInCall.expected b/python/ql/test/query-tests/Functions/overriding/WrongNameForArgumentInCall.expected
index d2fc2ef6784..0cadf5e5fbf 100644
--- a/python/ql/test/query-tests/Functions/overriding/WrongNameForArgumentInCall.expected
+++ b/python/ql/test/query-tests/Functions/overriding/WrongNameForArgumentInCall.expected
@@ -1 +1,2 @@
| test.py:19:9:19:31 | Attribute() | Keyword argument 'spam' is not a supported parameter name of $@. | test.py:5:5:5:20 | Function meth1 | method Base.meth1 |
+| test.py:112:9:112:23 | Attribute() | Keyword argument 'x' is not a supported parameter name of $@. | test.py:86:5:86:20 | Function meth3 | method Base2.meth3 |
diff --git a/python/ql/test/query-tests/Functions/overriding/test.py b/python/ql/test/query-tests/Functions/overriding/test.py
index c4c7caaa1aa..63ee50e820c 100644
--- a/python/ql/test/query-tests/Functions/overriding/test.py
+++ b/python/ql/test/query-tests/Functions/overriding/test.py
@@ -21,13 +21,13 @@ class Base(object):
class Derived(Base):
- def meth1(self, spam):
+ def meth1(self, spam): # $Alert[py/inheritance/signature-mismatch] # Has 1 more arg, base called in Base.foo
pass
- def meth2(self):
+ def meth2(self): # $Alert[py/inheritance/signature-mismatch] # Has 1 fewer arg, base called in Base.foo
pass
- def meth3(self, eggs): #Incorrectly overridden and not called.
+ def meth3(self, eggs): # $Alert[py/inheritance/signature-mismatch] # Has 1 more arg. Method is not called.
pass
def bar(self):
@@ -66,13 +66,84 @@ class BlameBase(object):
class Correct1(BlameBase):
- def meth(self, arg):
+ def meth(self, arg): # $Alert[py/inheritance/signature-mismatch] # Has 1 more arg. The incorrect-overridden-method query would alert for the base method in this case.
pass
class Correct2(BlameBase):
- def meth(self, arg):
+ def meth(self, arg): # $Alert[py/inheritance/signature-mismatch] # Has 1 more arg
pass
c = Correct2()
c.meth("hi")
+
+class Base2:
+
+ def meth1(self, x=1): pass
+
+ def meth2(self, x=1): pass
+
+ def meth3(self): pass
+
+ def meth4(self, x=1): pass
+
+ def meth5(self, x, y, z, w=1): pass
+
+ def meth6(self, x, *ys): pass
+
+ def meth7(self, *ys): pass
+
+ def meth8(self, x, y): pass
+
+ def meth9(self, x, y): pass
+
+ def meth10(self, x, *, y=3): pass
+
+ def meth11(self, x, y): pass
+
+ def meth12(self, **kwargs): pass
+
+ def meth13(self, /, x): pass
+
+ def call_some(self):
+ self.meth1()
+ self.meth1(x=2)
+ self.meth3()
+ self.meth3(x=2)
+ self.meth6(2, 3, 4)
+ self.meth7()
+ self.meth8(1,y=3)
+ self.meth9(1,2)
+ self.meth10(1,y=3)
+ self.meth11(1,y=3)
+ self.meth12(x=2)
+ self.meth13(x=2)
+
+
+class Derrived2(Base2):
+
+ def meth1(self): pass # $Alert[py/inheritance/signature-mismatch] # Weak mismatch (base may be called with 2 args. only alert if mismatching call exists)
+
+ def meth2(self): pass # No alert (weak mismatch, but not called)
+
+ def meth3(self, x=1): pass # No alert (no mismatch - all base calls are valid for sub)
+
+ def meth4(self, x, y, z=1): pass # $Alert[py/inheritance/signature-mismatch] # sub min > base max (strong mismatch)
+
+ def meth5(self, x, y=1): pass # $Alert[py/inheritance/signature-mismatch]
+
+ def meth6(self, x): pass # $Alert[py/inheritance/signature-mismatch] # weak mismatch (base may be called with 3+ args)
+
+ def meth7(self, x, *ys): pass # $Alert[py/inheritance/signature-mismatch] # weak mismatch (base may be called with 1 arg only)
+
+ def meth8(self, x, z): pass # $Alert[py/inheritance/signature-mismatch] # weak mismatch (base may be called with arg named y)
+
+ def meth9(self, x, z): pass # No alert (never called with wrong keyword arg)
+
+ def meth10(self, x, **kwargs): pass # No alert (y is kw-only arg in base, calls that use it are valid for sub)
+
+ def meth11(self, x, z, **kwargs): pass # $MISSING:Alert[py/inheritance/signature-mismatch] # call using y kw-arg is invalid due to not specifying z, but this is not detected. Likely a fairly niche situation.
+
+ def meth12(self): pass # $Alert[py/inheritance/signature-mismatch] # call including extra kwarg invalid
+
+ def meth13(self, /, y): pass # $Alert[py/inheritance/signature-mismatch] # weak mismatch (base may be called with arg named x), however meth13 is incorrectly detected as having 2 minimum positional arguments, whereas x is kw-only; resulting in the witness call not being detected as a valid call to Base2.meth13.
diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/DataflowQueryTest.expected b/python/ql/test/query-tests/Security/CWE-022-PathInjection/DataflowQueryTest.expected
deleted file mode 100644
index 2fad7bb9a84..00000000000
--- a/python/ql/test/query-tests/Security/CWE-022-PathInjection/DataflowQueryTest.expected
+++ /dev/null
@@ -1,2 +0,0 @@
-missingAnnotationOnSink
-testFailures
diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/DataflowQueryTest.ql b/python/ql/test/query-tests/Security/CWE-022-PathInjection/DataflowQueryTest.ql
deleted file mode 100644
index e4720596a37..00000000000
--- a/python/ql/test/query-tests/Security/CWE-022-PathInjection/DataflowQueryTest.ql
+++ /dev/null
@@ -1,4 +0,0 @@
-import python
-import utils.test.dataflow.DataflowQueryTest
-import semmle.python.security.dataflow.PathInjectionQuery
-import FromTaintTrackingStateConfig
diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected b/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected
index 37e4dd927d8..79b36070c01 100644
--- a/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected
+++ b/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected
@@ -1,4 +1,38 @@
+#select
+| fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | fastapi_path_injection.py:17:21:17:24 | ControlFlowNode for path | fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | This path depends on a $@. | fastapi_path_injection.py:17:21:17:24 | ControlFlowNode for path | user-provided value |
+| fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | fastapi_path_injection.py:26:21:26:24 | ControlFlowNode for path | fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | This path depends on a $@. | fastapi_path_injection.py:26:21:26:24 | ControlFlowNode for path | user-provided value |
+| fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | fastapi_path_injection.py:31:21:31:24 | ControlFlowNode for path | fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | This path depends on a $@. | fastapi_path_injection.py:31:21:31:24 | ControlFlowNode for path | user-provided value |
+| fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | fastapi_path_injection.py:48:21:48:24 | ControlFlowNode for path | fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | This path depends on a $@. | fastapi_path_injection.py:48:21:48:24 | ControlFlowNode for path | user-provided value |
+| flask_path_injection.py:21:32:21:38 | ControlFlowNode for dirname | flask_path_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | flask_path_injection.py:21:32:21:38 | ControlFlowNode for dirname | This path depends on a $@. | flask_path_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value |
+| path_injection.py:13:14:13:47 | ControlFlowNode for Attribute() | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:13:14:13:47 | ControlFlowNode for Attribute() | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
+| path_injection.py:21:14:21:18 | ControlFlowNode for npath | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:21:14:21:18 | ControlFlowNode for npath | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
+| path_injection.py:31:14:31:18 | ControlFlowNode for npath | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:31:14:31:18 | ControlFlowNode for npath | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
+| path_injection.py:48:14:48:18 | ControlFlowNode for npath | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:48:14:48:18 | ControlFlowNode for npath | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
+| path_injection.py:65:14:65:18 | ControlFlowNode for npath | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:65:14:65:18 | ControlFlowNode for npath | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
+| path_injection.py:87:18:87:37 | ControlFlowNode for possibly_unsafe_path | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:87:18:87:37 | ControlFlowNode for possibly_unsafe_path | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
+| path_injection.py:94:14:94:17 | ControlFlowNode for path | path_injection.py:91:20:91:25 | ControlFlowNode for foo_id | path_injection.py:94:14:94:17 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:91:20:91:25 | ControlFlowNode for foo_id | user-provided value |
+| path_injection.py:102:14:102:17 | ControlFlowNode for path | path_injection.py:98:20:98:22 | ControlFlowNode for foo | path_injection.py:102:14:102:17 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:98:20:98:22 | ControlFlowNode for foo | user-provided value |
+| path_injection.py:113:14:113:17 | ControlFlowNode for path | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:113:14:113:17 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
+| path_injection.py:124:14:124:17 | ControlFlowNode for path | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:124:14:124:17 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
+| path_injection.py:132:14:132:22 | ControlFlowNode for sanitized | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:132:14:132:22 | ControlFlowNode for sanitized | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
+| path_injection.py:142:14:142:17 | ControlFlowNode for path | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:142:14:142:17 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
+| path_injection.py:152:18:152:21 | ControlFlowNode for path | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:152:18:152:21 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
+| pathlib_use.py:14:5:14:5 | ControlFlowNode for p | pathlib_use.py:3:26:3:32 | ControlFlowNode for ImportMember | pathlib_use.py:14:5:14:5 | ControlFlowNode for p | This path depends on a $@. | pathlib_use.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
+| pathlib_use.py:17:5:17:6 | ControlFlowNode for p2 | pathlib_use.py:3:26:3:32 | ControlFlowNode for ImportMember | pathlib_use.py:17:5:17:6 | ControlFlowNode for p2 | This path depends on a $@. | pathlib_use.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
+| test.py:19:10:19:10 | ControlFlowNode for x | test.py:3:26:3:32 | ControlFlowNode for ImportMember | test.py:19:10:19:10 | ControlFlowNode for x | This path depends on a $@. | test.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
+| test.py:26:10:26:10 | ControlFlowNode for y | test.py:3:26:3:32 | ControlFlowNode for ImportMember | test.py:26:10:26:10 | ControlFlowNode for y | This path depends on a $@. | test.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
+| test.py:33:14:33:14 | ControlFlowNode for x | test.py:3:26:3:32 | ControlFlowNode for ImportMember | test.py:33:14:33:14 | ControlFlowNode for x | This path depends on a $@. | test.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
+| test.py:49:14:49:14 | ControlFlowNode for y | test.py:3:26:3:32 | ControlFlowNode for ImportMember | test.py:49:14:49:14 | ControlFlowNode for y | This path depends on a $@. | test.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
edges
+| fastapi_path_injection.py:6:24:6:31 | ControlFlowNode for filepath | fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | provenance | |
+| fastapi_path_injection.py:17:21:17:24 | ControlFlowNode for path | fastapi_path_injection.py:20:34:20:37 | ControlFlowNode for path | provenance | |
+| fastapi_path_injection.py:20:34:20:37 | ControlFlowNode for path | fastapi_path_injection.py:6:24:6:31 | ControlFlowNode for filepath | provenance | |
+| fastapi_path_injection.py:26:21:26:24 | ControlFlowNode for path | fastapi_path_injection.py:27:34:27:37 | ControlFlowNode for path | provenance | |
+| fastapi_path_injection.py:27:34:27:37 | ControlFlowNode for path | fastapi_path_injection.py:6:24:6:31 | ControlFlowNode for filepath | provenance | |
+| fastapi_path_injection.py:31:21:31:24 | ControlFlowNode for path | fastapi_path_injection.py:32:34:32:37 | ControlFlowNode for path | provenance | |
+| fastapi_path_injection.py:32:34:32:37 | ControlFlowNode for path | fastapi_path_injection.py:6:24:6:31 | ControlFlowNode for filepath | provenance | |
+| fastapi_path_injection.py:48:21:48:24 | ControlFlowNode for path | fastapi_path_injection.py:49:45:49:48 | ControlFlowNode for path | provenance | |
+| fastapi_path_injection.py:49:45:49:48 | ControlFlowNode for path | fastapi_path_injection.py:6:24:6:31 | ControlFlowNode for filepath | provenance | |
| flask_path_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | flask_path_injection.py:1:26:1:32 | ControlFlowNode for request | provenance | |
| flask_path_injection.py:1:26:1:32 | ControlFlowNode for request | flask_path_injection.py:19:15:19:21 | ControlFlowNode for request | provenance | |
| flask_path_injection.py:19:5:19:11 | ControlFlowNode for dirname | flask_path_injection.py:21:32:21:38 | ControlFlowNode for dirname | provenance | |
@@ -122,6 +156,16 @@ edges
| test.py:48:23:48:23 | ControlFlowNode for x | test.py:12:15:12:15 | ControlFlowNode for x | provenance | |
| test.py:48:23:48:23 | ControlFlowNode for x | test.py:48:13:48:24 | ControlFlowNode for normalize() | provenance | Config |
nodes
+| fastapi_path_injection.py:6:24:6:31 | ControlFlowNode for filepath | semmle.label | ControlFlowNode for filepath |
+| fastapi_path_injection.py:7:19:7:26 | ControlFlowNode for filepath | semmle.label | ControlFlowNode for filepath |
+| fastapi_path_injection.py:17:21:17:24 | ControlFlowNode for path | semmle.label | ControlFlowNode for path |
+| fastapi_path_injection.py:20:34:20:37 | ControlFlowNode for path | semmle.label | ControlFlowNode for path |
+| fastapi_path_injection.py:26:21:26:24 | ControlFlowNode for path | semmle.label | ControlFlowNode for path |
+| fastapi_path_injection.py:27:34:27:37 | ControlFlowNode for path | semmle.label | ControlFlowNode for path |
+| fastapi_path_injection.py:31:21:31:24 | ControlFlowNode for path | semmle.label | ControlFlowNode for path |
+| fastapi_path_injection.py:32:34:32:37 | ControlFlowNode for path | semmle.label | ControlFlowNode for path |
+| fastapi_path_injection.py:48:21:48:24 | ControlFlowNode for path | semmle.label | ControlFlowNode for path |
+| fastapi_path_injection.py:49:45:49:48 | ControlFlowNode for path | semmle.label | ControlFlowNode for path |
| flask_path_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember |
| flask_path_injection.py:1:26:1:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request |
| flask_path_injection.py:19:5:19:11 | ControlFlowNode for dirname | semmle.label | ControlFlowNode for dirname |
@@ -252,24 +296,3 @@ nodes
subpaths
| test.py:25:19:25:19 | ControlFlowNode for x | test.py:12:15:12:15 | ControlFlowNode for x | test.py:13:12:13:30 | ControlFlowNode for Attribute() | test.py:25:9:25:20 | ControlFlowNode for normalize() |
| test.py:48:23:48:23 | ControlFlowNode for x | test.py:12:15:12:15 | ControlFlowNode for x | test.py:13:12:13:30 | ControlFlowNode for Attribute() | test.py:48:13:48:24 | ControlFlowNode for normalize() |
-#select
-| flask_path_injection.py:21:32:21:38 | ControlFlowNode for dirname | flask_path_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | flask_path_injection.py:21:32:21:38 | ControlFlowNode for dirname | This path depends on a $@. | flask_path_injection.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value |
-| path_injection.py:13:14:13:47 | ControlFlowNode for Attribute() | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:13:14:13:47 | ControlFlowNode for Attribute() | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
-| path_injection.py:21:14:21:18 | ControlFlowNode for npath | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:21:14:21:18 | ControlFlowNode for npath | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
-| path_injection.py:31:14:31:18 | ControlFlowNode for npath | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:31:14:31:18 | ControlFlowNode for npath | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
-| path_injection.py:48:14:48:18 | ControlFlowNode for npath | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:48:14:48:18 | ControlFlowNode for npath | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
-| path_injection.py:65:14:65:18 | ControlFlowNode for npath | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:65:14:65:18 | ControlFlowNode for npath | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
-| path_injection.py:87:18:87:37 | ControlFlowNode for possibly_unsafe_path | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:87:18:87:37 | ControlFlowNode for possibly_unsafe_path | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
-| path_injection.py:94:14:94:17 | ControlFlowNode for path | path_injection.py:91:20:91:25 | ControlFlowNode for foo_id | path_injection.py:94:14:94:17 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:91:20:91:25 | ControlFlowNode for foo_id | user-provided value |
-| path_injection.py:102:14:102:17 | ControlFlowNode for path | path_injection.py:98:20:98:22 | ControlFlowNode for foo | path_injection.py:102:14:102:17 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:98:20:98:22 | ControlFlowNode for foo | user-provided value |
-| path_injection.py:113:14:113:17 | ControlFlowNode for path | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:113:14:113:17 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
-| path_injection.py:124:14:124:17 | ControlFlowNode for path | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:124:14:124:17 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
-| path_injection.py:132:14:132:22 | ControlFlowNode for sanitized | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:132:14:132:22 | ControlFlowNode for sanitized | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
-| path_injection.py:142:14:142:17 | ControlFlowNode for path | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:142:14:142:17 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
-| path_injection.py:152:18:152:21 | ControlFlowNode for path | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | path_injection.py:152:18:152:21 | ControlFlowNode for path | This path depends on a $@. | path_injection.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
-| pathlib_use.py:14:5:14:5 | ControlFlowNode for p | pathlib_use.py:3:26:3:32 | ControlFlowNode for ImportMember | pathlib_use.py:14:5:14:5 | ControlFlowNode for p | This path depends on a $@. | pathlib_use.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
-| pathlib_use.py:17:5:17:6 | ControlFlowNode for p2 | pathlib_use.py:3:26:3:32 | ControlFlowNode for ImportMember | pathlib_use.py:17:5:17:6 | ControlFlowNode for p2 | This path depends on a $@. | pathlib_use.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
-| test.py:19:10:19:10 | ControlFlowNode for x | test.py:3:26:3:32 | ControlFlowNode for ImportMember | test.py:19:10:19:10 | ControlFlowNode for x | This path depends on a $@. | test.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
-| test.py:26:10:26:10 | ControlFlowNode for y | test.py:3:26:3:32 | ControlFlowNode for ImportMember | test.py:26:10:26:10 | ControlFlowNode for y | This path depends on a $@. | test.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
-| test.py:33:14:33:14 | ControlFlowNode for x | test.py:3:26:3:32 | ControlFlowNode for ImportMember | test.py:33:14:33:14 | ControlFlowNode for x | This path depends on a $@. | test.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
-| test.py:49:14:49:14 | ControlFlowNode for y | test.py:3:26:3:32 | ControlFlowNode for ImportMember | test.py:49:14:49:14 | ControlFlowNode for y | This path depends on a $@. | test.py:3:26:3:32 | ControlFlowNode for ImportMember | user-provided value |
diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.qlref b/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.qlref
index d43482cc509..6a680f6d5ff 100644
--- a/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.qlref
+++ b/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.qlref
@@ -1 +1,2 @@
-Security/CWE-022/PathInjection.ql
+query: Security/CWE-022/PathInjection.ql
+postprocess: utils/test/InlineExpectationsTestQuery.ql
diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/fastapi_path_injection.py b/python/ql/test/query-tests/Security/CWE-022-PathInjection/fastapi_path_injection.py
new file mode 100644
index 00000000000..e5d7cae762c
--- /dev/null
+++ b/python/ql/test/query-tests/Security/CWE-022-PathInjection/fastapi_path_injection.py
@@ -0,0 +1,49 @@
+from fastapi import FastAPI, Depends
+
+app = FastAPI()
+
+class FileHandler:
+ def get_data(self, filepath: str):
+ with open(filepath, "r") as f: # $ Alert
+ return f.readline()
+
+file_handler = None
+
+def init_file_handler():
+ global file_handler
+ file_handler = FileHandler()
+
+@app.get("/file/")
+async def read_item(path: str): # $ Source
+ if file_handler is None:
+ init_file_handler()
+ return file_handler.get_data(path)
+
+def init_file_handler():
+ return FileHandler()
+
+@app.get("/file2/", dependencies=[Depends(init_file_handler)])
+async def read_item(path: str, file_handler: FileHandler = Depends()): # $ Source
+ return file_handler.get_data(path)
+
+
+@app.get("/file3/", dependencies=[Depends(init_file_handler)])
+async def read_item(path: str): # $ Source
+ return file_handler.get_data(path)
+
+
+@app.on_event("startup")
+def init_file_handler():
+ app.state.file_handler1 = FileHandler()
+ app.state.file_handler2 = FileHandler()
+
+def get_data_source():
+ return app.state.file_handler1
+
+@app.get("/file4/")
+async def read_item(path: str, data_source=Depends(get_data_source)): # $ MISSING: Source
+ return data_source.get_data(path)
+
+@app.get("/file5/", dependencies=[Depends(init_file_handler)])
+async def read_item(path: str): # $ Source
+ return app.state.file_handler2.get_data(path)
diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/flask_path_injection.py b/python/ql/test/query-tests/Security/CWE-022-PathInjection/flask_path_injection.py
index f64d76a3b4d..f289bcc94ec 100644
--- a/python/ql/test/query-tests/Security/CWE-022-PathInjection/flask_path_injection.py
+++ b/python/ql/test/query-tests/Security/CWE-022-PathInjection/flask_path_injection.py
@@ -1,4 +1,4 @@
-from flask import Flask, request, send_from_directory
+from flask import Flask, request, send_from_directory # $Source
app = Flask(__name__)
@@ -18,4 +18,4 @@ def download_file():
def download_file():
dirname = request.args.get('dirname', '')
filename = request.args.get('filename', '')
- return send_from_directory(dirname, filename) # $result=BAD result=OK(filename)
+ return send_from_directory(dirname, filename) # $ Alert
diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/path_injection.py b/python/ql/test/query-tests/Security/CWE-022-PathInjection/path_injection.py
index 39c17037480..37ff20b7de1 100644
--- a/python/ql/test/query-tests/Security/CWE-022-PathInjection/path_injection.py
+++ b/python/ql/test/query-tests/Security/CWE-022-PathInjection/path_injection.py
@@ -1,6 +1,6 @@
import os
-from flask import Flask, request
+from flask import Flask, request # $ Source
app = Flask(__name__)
@@ -10,7 +10,7 @@ STATIC_DIR = "/server/static/"
@app.route("/path1")
def path_injection():
filename = request.args.get('filename', '')
- f = open(os.path.join(STATIC_DIR, filename)) # $result=BAD
+ f = open(os.path.join(STATIC_DIR, filename)) # $ Alert
@app.route("/path2")
@@ -18,7 +18,7 @@ def path_injection():
# Normalized, but not checked
filename = request.args.get('filename', '')
npath = os.path.normpath(os.path.join(STATIC_DIR, filename))
- f = open(npath) # $result=BAD
+ f = open(npath) # $ Alert
@app.route("/path3")
@@ -28,7 +28,7 @@ def unsafe_path_normpath():
npath = os.path.normpath(os.path.join(STATIC_DIR, filename))
if npath.startswith(STATIC_DIR):
pass
- f = open(npath) # $result=BAD
+ f = open(npath) # $ Alert
@app.route("/path4")
@@ -45,7 +45,7 @@ def unsafe_path_realpath():
# Normalized (by `realpath` that also follows symlinks), but not checked properly
filename = request.args.get('filename', '')
npath = os.path.realpath(os.path.join(STATIC_DIR, filename))
- f = open(npath) # $result=BAD
+ f = open(npath) # $ Alert
@app.route("/path6")
@@ -62,7 +62,7 @@ def unsafe_path_abspath():
# Normalized (by `abspath`), but not checked properly
filename = request.args.get('filename', '')
npath = os.path.abspath(os.path.join(STATIC_DIR, filename))
- f = open(npath) # $result=BAD
+ f = open(npath) # $ Alert
@app.route("/path7")
@@ -84,22 +84,22 @@ def safe_path_abspath_tricky():
filename = request.args.get('filename', '')
possibly_unsafe_path = os.path.join(STATIC_DIR, filename)
if os.path.abspath(possibly_unsafe_path).startswith(STATIC_DIR):
- f = open(possibly_unsafe_path) # $SPURIOUS: result=BAD
+ f = open(possibly_unsafe_path) # $ SPURIOUS: Alert
@app.route("/int-only/")
-def flask_int_only(foo_id):
+def flask_int_only(foo_id): # $ SPURIOUS: Source
# This is OK, since the flask routing ensures that `foo_id` MUST be an integer.
path = os.path.join(STATIC_DIR, foo_id)
- f = open(path) # $spurious: result=BAD
+ f = open(path) # $ SPURIOUS: Alert
@app.route("/not-path/")
-def flask_not_path(foo):
+def flask_not_path(foo): # $ Source
# On UNIX systems, this is OK, since without being marked as ``, flask
# routing ensures that `foo` cannot contain forward slashes (not by using %2F either).
path = os.path.join(STATIC_DIR, foo)
- f = open(path) # $result=BAD // OK if only running on UNIX systems, NOT OK if could be running on windows
+ f = open(path) # $ Alert // OK if only running on UNIX systems, NOT OK if could be running on windows
@app.route("/no-dot-dot")
@@ -110,7 +110,7 @@ def no_dot_dot():
# handle if `filename` is an absolute path
if '../' in path:
return "not this time"
- f = open(path) # $result=BAD
+ f = open(path) # $ Alert
@app.route("/no-dot-dot-with-prefix")
@@ -121,7 +121,7 @@ def no_dot_dot_with_prefix():
# Therefore, for UNIX-only programs, the `../` check is enough to stop path injections.
if '../' in path:
return "not this time"
- f = open(path) # $result=BAD // OK if only running on UNIX systems, NOT OK if could be running on windows
+ f = open(path) # $ Alert // OK if only running on UNIX systems, NOT OK if could be running on windows
@app.route("/replace-slash")
@@ -129,7 +129,7 @@ def replace_slash():
filename = request.args.get('filename', '')
path = os.path.join(STATIC_DIR, filename)
sanitized = path.replace("/", "_")
- f = open(sanitized) # $result=BAD // OK if only running on UNIX systems, NOT OK if could be running on windows
+ f = open(sanitized) # $ Alert // OK if only running on UNIX systems, NOT OK if could be running on windows
@app.route("/stackoverflow-solution")
@@ -139,7 +139,7 @@ def stackoverflow_solution():
path = os.path.join(STATIC_DIR, filename)
if os.path.commonprefix((os.path.realpath(path), STATIC_DIR)) != STATIC_DIR:
return "not this time"
- f = open(path) # $SPURIOUS: result=BAD
+ f = open(path) # $ SPURIOUS: Alert
SAFE_FILES = ['foo', 'bar', 'baz']
@@ -149,4 +149,4 @@ def safe_set_of_files():
filename = request.args.get('filename', '')
if filename in SAFE_FILES:
path = os.path.join(STATIC_DIR, filename)
- f = open(path) # $SPURIOUS: result=BAD
+ f = open(path) # $ SPURIOUS: Alert
diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/pathlib_use.py b/python/ql/test/query-tests/Security/CWE-022-PathInjection/pathlib_use.py
index 6f703f903dc..76ce1d1cc99 100644
--- a/python/ql/test/query-tests/Security/CWE-022-PathInjection/pathlib_use.py
+++ b/python/ql/test/query-tests/Security/CWE-022-PathInjection/pathlib_use.py
@@ -1,6 +1,6 @@
import pathlib
-from flask import Flask, request
+from flask import Flask, request # $ Source
app = Flask(__name__)
@@ -11,7 +11,7 @@ STATIC_DIR = pathlib.Path("/server/static/")
def path_injection():
filename = request.args.get('filename', '')
p = STATIC_DIR / filename
- p.open() # $ result=BAD
+ p.open() # $ Alert
p2 = pathlib.Path(STATIC_DIR, filename)
- p2.open() # $ result=BAD
+ p2.open() # $ Alert
diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/test.py b/python/ql/test/query-tests/Security/CWE-022-PathInjection/test.py
index 7200cd78f45..c10c257dae5 100644
--- a/python/ql/test/query-tests/Security/CWE-022-PathInjection/test.py
+++ b/python/ql/test/query-tests/Security/CWE-022-PathInjection/test.py
@@ -1,6 +1,6 @@
import os.path
-from flask import Flask, request
+from flask import Flask, request # $ Source
app = Flask(__name__)
@@ -16,21 +16,21 @@ def normalize(x):
@app.route("/path")
def simple():
x = source()
- open(x) # $result=BAD
+ open(x) # $ Alert
@app.route("/path")
def normalization():
x = source()
y = normalize(x)
- open(y) # $result=BAD
+ open(y) # $ Alert
@app.route("/path")
def check():
x = source()
if x.startswith("subfolder/"):
- open(x) # $result=BAD
+ open(x) # $ Alert
@app.route("/path")
@@ -46,4 +46,4 @@ def check_then_normalize():
x = source()
if x.startswith("subfolder/"):
y = normalize(x)
- open(y) # $result=BAD
+ open(y) # $ Alert
diff --git a/ruby/extractor/Cargo.toml b/ruby/extractor/Cargo.toml
index 63c6d16d53c..f4de37e8512 100644
--- a/ruby/extractor/Cargo.toml
+++ b/ruby/extractor/Cargo.toml
@@ -12,11 +12,11 @@ tree-sitter-embedded-template = "0.23.2"
tree-sitter-ruby = "0.23.1"
clap = { version = "4.5", features = ["derive"] }
tracing = "0.1"
-tracing-subscriber = { version = "0.3.19", features = ["env-filter"] }
-rayon = "1.10.0"
-regex = "1.11.1"
+tracing-subscriber = { version = "0.3.20", features = ["env-filter"] }
+rayon = "1.11.0"
+regex = "1.11.2"
encoding = "0.2"
lazy_static = "1.5.0"
-serde_json = "1.0.142"
+serde_json = "1.0.143"
codeql-extractor = { path = "../../shared/tree-sitter-extractor" }
diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md
index 560bf17bc51..b9333de9c5d 100644
--- a/ruby/ql/lib/CHANGELOG.md
+++ b/ruby/ql/lib/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 5.0.4
+
+No user-facing changes.
+
## 5.0.3
No user-facing changes.
diff --git a/ruby/ql/lib/change-notes/released/5.0.4.md b/ruby/ql/lib/change-notes/released/5.0.4.md
new file mode 100644
index 00000000000..5c625c33d52
--- /dev/null
+++ b/ruby/ql/lib/change-notes/released/5.0.4.md
@@ -0,0 +1,3 @@
+## 5.0.4
+
+No user-facing changes.
diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml
index 6997554f6dd..8cb0167caf0 100644
--- a/ruby/ql/lib/codeql-pack.release.yml
+++ b/ruby/ql/lib/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 5.0.3
+lastReleaseVersion: 5.0.4
diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml
index 89f162e0ed9..a2288bd3799 100644
--- a/ruby/ql/lib/qlpack.yml
+++ b/ruby/ql/lib/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/ruby-all
-version: 5.0.4-dev
+version: 5.0.5-dev
groups: ruby
extractor: ruby
dbscheme: ruby.dbscheme
diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md
index 29b4ff27bc0..40209ec84bd 100644
--- a/ruby/ql/src/CHANGELOG.md
+++ b/ruby/ql/src/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.4.5
+
+No user-facing changes.
+
## 1.4.4
No user-facing changes.
diff --git a/ruby/ql/src/change-notes/released/1.4.5.md b/ruby/ql/src/change-notes/released/1.4.5.md
new file mode 100644
index 00000000000..930163bb5ae
--- /dev/null
+++ b/ruby/ql/src/change-notes/released/1.4.5.md
@@ -0,0 +1,3 @@
+## 1.4.5
+
+No user-facing changes.
diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml
index 1dfca6daa3b..a74b6b08d86 100644
--- a/ruby/ql/src/codeql-pack.release.yml
+++ b/ruby/ql/src/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 1.4.4
+lastReleaseVersion: 1.4.5
diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml
index da157badc90..084d64e8b02 100644
--- a/ruby/ql/src/qlpack.yml
+++ b/ruby/ql/src/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/ruby-queries
-version: 1.4.5-dev
+version: 1.4.6-dev
groups:
- ruby
- queries
diff --git a/rust/ast-generator/Cargo.toml b/rust/ast-generator/Cargo.toml
index 1c079952f71..a5270923722 100644
--- a/rust/ast-generator/Cargo.toml
+++ b/rust/ast-generator/Cargo.toml
@@ -7,10 +7,10 @@ license = "MIT"
# When updating these dependencies, run `rust/update_cargo_deps.sh`
[dependencies]
ungrammar = "1.16.1"
-proc-macro2 = "1.0.97"
+proc-macro2 = "1.0.101"
quote = "1.0.40"
either = "1.15.0"
-stdx = {package = "ra_ap_stdx", version = "0.0.300"}
+stdx = {package = "ra_ap_stdx", version = "0.0.301"}
itertools = "0.14.0"
mustache = "0.9.0"
serde = { version = "1.0.219", features = ["derive"] }
diff --git a/rust/extractor/Cargo.toml b/rust/extractor/Cargo.toml
index ed9915b2877..0f87bc22f9e 100644
--- a/rust/extractor/Cargo.toml
+++ b/rust/extractor/Cargo.toml
@@ -7,24 +7,24 @@ license = "MIT"
# When updating these dependencies, run `rust/update_cargo_deps.sh`
[dependencies]
anyhow = "1.0.99"
-clap = { version = "4.5.44", features = ["derive"] }
+clap = { version = "4.5.47", features = ["derive"] }
figment = { version = "0.10.19", features = ["env", "yaml"] }
num-traits = "0.2.19"
-ra_ap_base_db = "0.0.300"
-ra_ap_hir = "0.0.300"
-ra_ap_hir_def = "0.0.300"
-ra_ap_ide_db = "0.0.300"
-ra_ap_hir_ty = "0.0.300"
-ra_ap_hir_expand = "0.0.300"
-ra_ap_load-cargo = "0.0.300"
-ra_ap_paths = "0.0.300"
-ra_ap_project_model = "0.0.300"
-ra_ap_syntax = "0.0.300"
-ra_ap_vfs = "0.0.300"
-ra_ap_parser = "0.0.300"
-ra_ap_span = "0.0.300"
-ra_ap_cfg = "0.0.300"
-ra_ap_intern = "0.0.300"
+ra_ap_base_db = "0.0.301"
+ra_ap_hir = "0.0.301"
+ra_ap_hir_def = "0.0.301"
+ra_ap_ide_db = "0.0.301"
+ra_ap_hir_ty = "0.0.301"
+ra_ap_hir_expand = "0.0.301"
+ra_ap_load-cargo = "0.0.301"
+ra_ap_paths = "0.0.301"
+ra_ap_project_model = "0.0.301"
+ra_ap_syntax = "0.0.301"
+ra_ap_vfs = "0.0.301"
+ra_ap_parser = "0.0.301"
+ra_ap_span = "0.0.301"
+ra_ap_cfg = "0.0.301"
+ra_ap_intern = "0.0.301"
serde = "1.0.219"
serde_with = "3.14.0"
triomphe = "0.1.14"
@@ -33,12 +33,12 @@ codeql-extractor = { path = "../../shared/tree-sitter-extractor" }
rust-extractor-macros = { path = "macros" }
itertools = "0.14.0"
glob = "0.3.3"
-chrono = { version = "0.4.41", features = ["serde"] }
-serde_json = "1.0.142"
+chrono = { version = "0.4.42", features = ["serde"] }
+serde_json = "1.0.143"
dunce = "1.0.5"
toml = "0.9.5"
tracing = "0.1.41"
tracing-flame = "0.2.0"
-tracing-subscriber = "0.3.19"
+tracing-subscriber = "0.3.20"
chalk-ir = "0.104.0"
mustache = "0.9.0"
diff --git a/rust/extractor/macros/Cargo.toml b/rust/extractor/macros/Cargo.toml
index e666bf75510..013ebd986b4 100644
--- a/rust/extractor/macros/Cargo.toml
+++ b/rust/extractor/macros/Cargo.toml
@@ -10,4 +10,4 @@ proc-macro = true
# When updating these dependencies, run `rust/update_cargo_deps.sh`
[dependencies]
quote = "1.0.40"
-syn = { version = "2.0.104", features = ["full"] }
+syn = { version = "2.0.106", features = ["full"] }
diff --git a/rust/ql/lib/CHANGELOG.md b/rust/ql/lib/CHANGELOG.md
index 6ff2f1072c7..809479e5fec 100644
--- a/rust/ql/lib/CHANGELOG.md
+++ b/rust/ql/lib/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 0.1.16
+
+### Minor Analysis Improvements
+
+* Added cryptography related models for the `cookie` and `biscotti` crates.
+
## 0.1.15
### Major Analysis Improvements
diff --git a/rust/ql/lib/change-notes/2025-09-12-cookie.md b/rust/ql/lib/change-notes/released/0.1.16.md
similarity index 63%
rename from rust/ql/lib/change-notes/2025-09-12-cookie.md
rename to rust/ql/lib/change-notes/released/0.1.16.md
index 04fa37d1d2d..eb630642345 100644
--- a/rust/ql/lib/change-notes/2025-09-12-cookie.md
+++ b/rust/ql/lib/change-notes/released/0.1.16.md
@@ -1,4 +1,5 @@
----
-category: minorAnalysis
----
+## 0.1.16
+
+### Minor Analysis Improvements
+
* Added cryptography related models for the `cookie` and `biscotti` crates.
diff --git a/rust/ql/lib/codeql-pack.release.yml b/rust/ql/lib/codeql-pack.release.yml
index 74719634743..a01dca92161 100644
--- a/rust/ql/lib/codeql-pack.release.yml
+++ b/rust/ql/lib/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 0.1.15
+lastReleaseVersion: 0.1.16
diff --git a/rust/ql/lib/codeql/rust/controlflow/CfgNodes.qll b/rust/ql/lib/codeql/rust/controlflow/CfgNodes.qll
index 1aed1cfa026..96ae6f8fdbc 100644
--- a/rust/ql/lib/codeql/rust/controlflow/CfgNodes.qll
+++ b/rust/ql/lib/codeql/rust/controlflow/CfgNodes.qll
@@ -16,6 +16,36 @@ class ExitCfgNode = CfgImpl::ExitNode;
class AnnotatedExitCfgNode = CfgImpl::AnnotatedExitNode;
+/** A variable access. */
+final class VariableAccessCfgNode extends PathExprBaseCfgNode {
+ private VariableAccess a;
+
+ VariableAccessCfgNode() { a = this.getAstNode() }
+
+ /** Gets the underlying `VariableAccess`. */
+ VariableAccess getAccess() { result = a }
+}
+
+/** A variable write. */
+final class VariableWriteAccessCfgNode extends VariableAccessCfgNode {
+ private VariableWriteAccess a;
+
+ VariableWriteAccessCfgNode() { a = this.getAstNode() }
+
+ /** Gets the underlying `VariableWriteAccess`. */
+ VariableWriteAccess getAccess() { result = a }
+}
+
+/** A variable read. */
+final class VariableReadAccessCfgNode extends VariableAccessCfgNode {
+ private VariableReadAccess a;
+
+ VariableReadAccessCfgNode() { a = this.getAstNode() }
+
+ /** Gets the underlying `VariableReadAccess`. */
+ VariableReadAccess getAccess() { result = a }
+}
+
/**
* An assignment expression, for example
*
@@ -24,12 +54,42 @@ class AnnotatedExitCfgNode = CfgImpl::AnnotatedExitNode;
* ```
*/
final class AssignmentExprCfgNode extends BinaryExprCfgNode {
- AssignmentExpr a;
+ AssignmentExprChildMapping a;
AssignmentExprCfgNode() { a = this.getBinaryExpr() }
/** Gets the underlying `AssignmentExpr`. */
AssignmentExpr getAssignmentExpr() { result = a }
+
+ /**
+ * Gets a write access that occurs in the left-hand side of this assignment expression.
+ */
+ VariableWriteAccessCfgNode getAWriteAccess() {
+ a = result.getAccess().getAssignmentExpr() and
+ any(ChildMapping mapping).hasCfgChild(a, result.getAccess(), this, result)
+ }
+}
+
+/**
+ * A compound assignment expression, for example:
+ * ```rust
+ * x += y;
+ * ```
+ *
+ * Note that compound assignment expressions are syntatic sugar for
+ * trait invocations, i.e., the above actually means
+ *
+ * ```rust
+ * (&mut x).add_assign(y);
+ * ```
+ */
+final class CompoundAssignmentExprCfgNode extends BinaryExprCfgNode {
+ CompoundAssignmentExpr a;
+
+ CompoundAssignmentExprCfgNode() { a = this.getBinaryExpr() }
+
+ /** Gets the underlying `CompoundAssignmentExpr`. */
+ CompoundAssignmentExpr getCompoundAssignmentExpr() { result = a }
}
/**
diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll b/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll
index bb29047cb92..eb4d665436e 100644
--- a/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll
+++ b/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll
@@ -81,6 +81,12 @@ class FormatArgsExprChildMapping extends ParentAstNode, CfgImpl::ExprTrees::Form
override predicate relevantChild(AstNode child) { child = this.getChildNode(_) }
}
+class AssignmentExprChildMapping extends ParentAstNode, AssignmentExpr {
+ override predicate relevantChild(AstNode child) {
+ child.(VariableWriteAccess).getAssignmentExpr() = this
+ }
+}
+
private class ChildMappingImpl extends ChildMapping {
/** Gets a CFG node for `child`, where `child` is a relevant child node of `parent`. */
private CfgNode getRelevantChildCfgNode(AstNode parent, AstNode child) {
diff --git a/rust/ql/lib/codeql/rust/dataflow/Ssa.qll b/rust/ql/lib/codeql/rust/dataflow/Ssa.qll
index d2b97d7c2e7..badbef9e420 100644
--- a/rust/ql/lib/codeql/rust/dataflow/Ssa.qll
+++ b/rust/ql/lib/codeql/rust/dataflow/Ssa.qll
@@ -171,9 +171,20 @@ module Ssa {
private CfgNode write;
WriteDefinition() {
- exists(BasicBlock bb, int i, Variable v |
+ exists(BasicBlock bb, int i, Variable v, CfgNode n |
this.definesAt(v, bb, i) and
- SsaImpl::variableWriteActual(bb, i, v, write)
+ SsaImpl::variableWriteActual(bb, i, v, n)
+ |
+ write.(VariableAccessCfgNode).getAccess().getVariable() = v and
+ (
+ write = n.(AssignmentExprCfgNode).getAWriteAccess()
+ or
+ write = n.(CompoundAssignmentExprCfgNode).getLhs()
+ )
+ or
+ not n instanceof AssignmentExprCfgNode and
+ not n instanceof CompoundAssignmentExprCfgNode and
+ write = n
)
}
diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll
index c63d2330ca2..1d7a3d49cf4 100644
--- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll
+++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll
@@ -263,7 +263,7 @@ module LocalFlow {
or
// An edge from a pattern/expression to its corresponding SSA definition.
nodeFrom.(AstCfgFlowNode).getCfgNode() =
- nodeTo.(SsaNode).asDefinition().(Ssa::WriteDefinition).getControlFlowNode()
+ nodeTo.(SsaNode).asDefinition().(Ssa::WriteDefinition).getWriteAccess()
or
nodeFrom.(SourceParameterNode).getParameter().(ParamCfgNode).getPat() = nodeTo.asPat()
or
diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll
index df0824fcdfc..49b40474c98 100644
--- a/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll
+++ b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll
@@ -18,23 +18,22 @@ private predicate isInUninitializedLet(Name name) {
)
}
-/** Holds if `write` writes to variable `v`. */
-predicate variableWrite(AstNode write, Variable v) {
+/** Holds if `write` writes to variable `v` via `access`. */
+predicate variableWrite(AstNode write, AstNode access, Variable v) {
exists(Name name |
name = write and
+ access = write and
name = v.getName() and
not isInUninitializedLet(name)
)
or
- exists(VariableAccess access |
- access = write and
- access.getVariable() = v
- |
- access instanceof VariableWriteAccess
+ v = access.(VariableAccess).getVariable() and
+ (
+ write = access.(VariableWriteAccess).getAssignmentExpr()
or
// Although compound assignments, like `x += y`, may in fact not update `x`,
// it makes sense to treat them as such
- access = any(CompoundAssignmentExpr cae).getLhs()
+ access = write.(CompoundAssignmentExpr).getLhs()
)
}
@@ -226,7 +225,7 @@ private module Cached {
cached
predicate variableWriteActual(BasicBlock bb, int i, Variable v, CfgNode write) {
bb.getNode(i) = write and
- variableWrite(write.getAstNode(), v)
+ variableWrite(write.getAstNode(), _, v)
}
cached
diff --git a/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll
index 02fe1f2ad7f..eaced654b01 100644
--- a/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll
+++ b/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll
@@ -679,11 +679,11 @@ module Impl {
}
/** Holds if `e` occurs in the LHS of an assignment or compound assignment. */
- private predicate assignmentExprDescendant(Expr e) {
- e = any(AssignmentExpr ae).getLhs()
+ private predicate assignmentExprDescendant(AssignmentExpr ae, Expr e) {
+ e = ae.getLhs()
or
exists(Expr mid |
- assignmentExprDescendant(mid) and
+ assignmentExprDescendant(ae, mid) and
getImmediateParentAdj(e) = mid and
not mid instanceof DerefExpr and
not mid instanceof FieldExpr and
@@ -693,11 +693,16 @@ module Impl {
/** A variable write. */
class VariableWriteAccess extends VariableAccess {
+ private AssignmentExpr ae;
+
cached
VariableWriteAccess() {
Cached::ref() and
- assignmentExprDescendant(this)
+ assignmentExprDescendant(ae, this)
}
+
+ /** Gets the assignment expression that has this write access in the left-hand side. */
+ AssignmentExpr getAssignmentExpr() { result = ae }
}
/** A variable read. */
diff --git a/rust/ql/lib/codeql/rust/frameworks/warp.model.yml b/rust/ql/lib/codeql/rust/frameworks/warp.model.yml
new file mode 100644
index 00000000000..5071b4dea86
--- /dev/null
+++ b/rust/ql/lib/codeql/rust/frameworks/warp.model.yml
@@ -0,0 +1,8 @@
+extensions:
+ - addsTo:
+ pack: codeql/rust-all
+ extensible: sourceModel
+ data:
+ - ["<_ as warp::filter::Filter>::then", "Argument[0].Parameter[0..7]", "remote", "manual"]
+ - ["<_ as warp::filter::Filter>::map", "Argument[0].Parameter[0..7]", "remote", "manual"]
+ - ["<_ as warp::filter::Filter>::and_then", "Argument[0].Parameter[0..7]", "remote", "manual"]
\ No newline at end of file
diff --git a/rust/ql/lib/qlpack.yml b/rust/ql/lib/qlpack.yml
index 6b78c2d50ad..421a604aa3d 100644
--- a/rust/ql/lib/qlpack.yml
+++ b/rust/ql/lib/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/rust-all
-version: 0.1.16-dev
+version: 0.1.17-dev
groups: rust
extractor: rust
dbscheme: rust.dbscheme
diff --git a/rust/ql/src/CHANGELOG.md b/rust/ql/src/CHANGELOG.md
index b8ca5b71568..48f64efbcdb 100644
--- a/rust/ql/src/CHANGELOG.md
+++ b/rust/ql/src/CHANGELOG.md
@@ -1,3 +1,13 @@
+## 0.1.16
+
+### New Queries
+
+* Added a new query, `rust/request-forgery`, for detecting server-side request forgery vulnerabilities.
+
+### Bug Fixes
+
+* The message for `rust/diagnostic/database-quality` has been updated to include detailed database health metrics. These changes are visible on the tool status page.
+
## 0.1.15
### New Queries
diff --git a/rust/ql/src/change-notes/2025-09-09-request-forgery.md b/rust/ql/src/change-notes/2025-09-09-request-forgery.md
deleted file mode 100644
index 991dd0918cd..00000000000
--- a/rust/ql/src/change-notes/2025-09-09-request-forgery.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-category: newQuery
----
-* Added a new query, `rust/request-forgery`, for detecting server-side request forgery vulnerabilities.
\ No newline at end of file
diff --git a/rust/ql/src/change-notes/2025-09-04-database-diagnostics.md b/rust/ql/src/change-notes/released/0.1.16.md
similarity index 52%
rename from rust/ql/src/change-notes/2025-09-04-database-diagnostics.md
rename to rust/ql/src/change-notes/released/0.1.16.md
index b578fcef141..97666aba677 100644
--- a/rust/ql/src/change-notes/2025-09-04-database-diagnostics.md
+++ b/rust/ql/src/change-notes/released/0.1.16.md
@@ -1,4 +1,9 @@
----
-category: fix
----
+## 0.1.16
+
+### New Queries
+
+* Added a new query, `rust/request-forgery`, for detecting server-side request forgery vulnerabilities.
+
+### Bug Fixes
+
* The message for `rust/diagnostic/database-quality` has been updated to include detailed database health metrics. These changes are visible on the tool status page.
diff --git a/rust/ql/src/codeql-pack.release.yml b/rust/ql/src/codeql-pack.release.yml
index 74719634743..a01dca92161 100644
--- a/rust/ql/src/codeql-pack.release.yml
+++ b/rust/ql/src/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 0.1.15
+lastReleaseVersion: 0.1.16
diff --git a/rust/ql/src/qlpack.yml b/rust/ql/src/qlpack.yml
index 54c742df0b5..3c122e1853b 100644
--- a/rust/ql/src/qlpack.yml
+++ b/rust/ql/src/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/rust-queries
-version: 0.1.16-dev
+version: 0.1.17-dev
groups:
- rust
- queries
diff --git a/rust/ql/src/queries/unusedentities/UnusedValue.ql b/rust/ql/src/queries/unusedentities/UnusedValue.ql
index 11e29d475e4..14204a2273b 100644
--- a/rust/ql/src/queries/unusedentities/UnusedValue.ql
+++ b/rust/ql/src/queries/unusedentities/UnusedValue.ql
@@ -16,7 +16,7 @@ import UnusedVariable
from AstNode write, Ssa::Variable v
where
- variableWrite(write, v) and
+ variableWrite(_, write, v) and
not v instanceof DiscardVariable and
not write.isInMacroExpansion() and
not isAllowableUnused(v) and
diff --git a/rust/ql/test/library-tests/dataflow/sources/Cargo.lock b/rust/ql/test/library-tests/dataflow/sources/Cargo.lock
index 5bdbe2c0ebb..887f9016bc7 100644
--- a/rust/ql/test/library-tests/dataflow/sources/Cargo.lock
+++ b/rust/ql/test/library-tests/dataflow/sources/Cargo.lock
@@ -1514,6 +1514,16 @@ version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+[[package]]
+name = "mime_guess"
+version = "2.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
[[package]]
name = "minimal-lexical"
version = "0.2.1"
@@ -1680,6 +1690,26 @@ version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+[[package]]
+name = "pin-project"
+version = "1.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
[[package]]
name = "pin-project-lite"
version = "0.2.16"
@@ -2069,6 +2099,12 @@ dependencies = [
"windows-sys 0.59.0",
]
+[[package]]
+name = "scoped-tls"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
+
[[package]]
name = "scopeguard"
version = "1.2.0"
@@ -2297,6 +2333,7 @@ dependencies = [
"serde",
"serde_json",
"tokio",
+ "warp",
]
[[package]]
@@ -2538,6 +2575,12 @@ dependencies = [
"version_check",
]
+[[package]]
+name = "unicase"
+version = "2.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539"
+
[[package]]
name = "unicode-ident"
version = "1.0.18"
@@ -2600,6 +2643,35 @@ dependencies = [
"try-lock",
]
+[[package]]
+name = "warp"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51d06d9202adc1f15d709c4f4a2069be5428aa912cc025d6f268ac441ab066b0"
+dependencies = [
+ "bytes",
+ "futures-util",
+ "headers",
+ "http 1.3.1",
+ "http-body",
+ "http-body-util",
+ "hyper",
+ "hyper-util",
+ "log",
+ "mime",
+ "mime_guess",
+ "percent-encoding",
+ "pin-project",
+ "scoped-tls",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-util",
+ "tower-service",
+ "tracing",
+]
+
[[package]]
name = "wasi"
version = "0.11.1+wasi-snapshot-preview1"
diff --git a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected
index 59f1e9b4e0c..96b6426baf4 100644
--- a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected
+++ b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected
@@ -100,3 +100,67 @@
| web_frameworks.rs:58:14:58:15 | ms | Flow source 'RemoteSource' of type remote (DEFAULT). |
| web_frameworks.rs:68:15:68:15 | a | Flow source 'RemoteSource' of type remote (DEFAULT). |
| web_frameworks.rs:68:15:68:15 | a | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
diff --git a/rust/ql/test/library-tests/dataflow/sources/options.yml b/rust/ql/test/library-tests/dataflow/sources/options.yml
index a05a970f7b8..1fc6475170a 100644
--- a/rust/ql/test/library-tests/dataflow/sources/options.yml
+++ b/rust/ql/test/library-tests/dataflow/sources/options.yml
@@ -16,3 +16,4 @@ qltest_dependencies:
- rustls = { version = "0.23.27" }
- futures-rustls = { version = "0.26.0" }
- async-std = { version = "1.13.1" }
+ - warp = { version = "0.4.2", features = ["server"] }
diff --git a/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs b/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs
index 32cae626593..857fc3b479e 100644
--- a/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs
+++ b/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs
@@ -229,3 +229,61 @@ mod axum_test {
// ...
}
}
+
+mod warp_test {
+ use super::sink;
+ use warp::Filter;
+
+ #[tokio::main]
+ #[rustfmt::skip]
+ async fn test_warp() {
+ // A route with parameter and `map`
+ let map_route =
+ warp::path::param().map(|a: String| // $ Alert[rust/summary/taint-sources]
+ {
+ sink(a); // $ MISSING: hasTaintFlow
+
+ "".to_string()
+ });
+
+ // A route with parameter and `then`
+ let then_route = warp::path::param().then( // $ Alert[rust/summary/taint-sources]
+ async move |a: String| {
+ sink(a); // $ MISSING: hasTaintFlow
+
+ "".to_string()
+ },
+ );
+
+ // A route with parameter and `and_then`
+ let and_then_route = warp::path::param().and_then( // $ Alert[rust/summary/taint-sources]
+ async move | id: u64 |
+ {
+ if id != 0 {
+ sink(id); // $ MISSING: hasTaintFlow
+ Ok("".to_string())
+ } else {
+ Err(warp::reject::not_found())
+ }
+ },
+ );
+
+ // A route with path, parameter, and `and_then`
+ let path_and_map_route = warp::path("1").and(warp::path::param()).map( // $ Alert[rust/summary/taint-sources]
+ | a: String |
+ {
+ sink(a); // $ MISSING: hasTaintFlow
+
+ "".to_string()
+ },
+ );
+
+ let routes = warp::get().and(
+ map_route
+ .or(then_route)
+ .or(and_then_route)
+ .or(path_and_map_route),
+ );
+ warp::serve(routes).run(([127, 0, 0, 1], 3030)).await;
+ }
+}
diff --git a/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected
index ec1a29e40c8..6b4022b86e5 100644
--- a/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected
+++ b/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected
@@ -1,3 +1,3 @@
multipleCallTargets
-| main.rs:89:19:89:40 | ...::from(...) |
-| main.rs:111:19:111:40 | ...::from(...) |
+| main.rs:91:19:91:40 | ...::from(...) |
+| main.rs:113:19:113:40 | ...::from(...) |
diff --git a/rust/ql/test/library-tests/variables/Cfg.expected b/rust/ql/test/library-tests/variables/Cfg.expected
index 0097a12e398..6b3f0e0e93d 100644
--- a/rust/ql/test/library-tests/variables/Cfg.expected
+++ b/rust/ql/test/library-tests/variables/Cfg.expected
@@ -58,9 +58,9 @@ edges
| main.rs:21:5:21:17 | print_str(...) | main.rs:19:25:22:1 | { ... } | |
| main.rs:21:5:21:18 | ExprStmt | main.rs:21:5:21:13 | print_str | |
| main.rs:21:15:21:16 | x1 | main.rs:21:5:21:17 | print_str(...) | |
-| main.rs:24:1:29:1 | enter fn mutable_variable | main.rs:25:5:25:19 | let ... = 4 | |
-| main.rs:24:1:29:1 | exit fn mutable_variable (normal) | main.rs:24:1:29:1 | exit fn mutable_variable | |
-| main.rs:24:23:29:1 | { ... } | main.rs:24:1:29:1 | exit fn mutable_variable (normal) | |
+| main.rs:24:1:31:1 | enter fn mutable_variable | main.rs:25:5:25:19 | let ... = 4 | |
+| main.rs:24:1:31:1 | exit fn mutable_variable (normal) | main.rs:24:1:31:1 | exit fn mutable_variable | |
+| main.rs:24:23:31:1 | { ... } | main.rs:24:1:31:1 | exit fn mutable_variable (normal) | |
| main.rs:25:5:25:19 | let ... = 4 | main.rs:25:18:25:18 | 4 | |
| main.rs:25:9:25:14 | mut x2 | main.rs:26:5:26:18 | ExprStmt | match |
| main.rs:25:13:25:14 | x2 | main.rs:25:9:25:14 | mut x2 | |
@@ -74,1807 +74,1815 @@ edges
| main.rs:27:5:27:11 | ExprStmt | main.rs:27:5:27:6 | x2 | |
| main.rs:27:10:27:10 | 5 | main.rs:27:5:27:10 | ... = ... | |
| main.rs:28:5:28:13 | print_i64 | main.rs:28:15:28:16 | x2 | |
-| main.rs:28:5:28:17 | print_i64(...) | main.rs:24:23:29:1 | { ... } | |
+| main.rs:28:5:28:17 | print_i64(...) | main.rs:29:5:29:12 | ExprStmt | |
| main.rs:28:5:28:18 | ExprStmt | main.rs:28:5:28:13 | print_i64 | |
| main.rs:28:15:28:16 | x2 | main.rs:28:5:28:17 | print_i64(...) | |
-| main.rs:31:1:36:1 | enter fn mutable_variable_immutable_borrow | main.rs:32:5:32:18 | let ... = 1 | |
-| main.rs:31:1:36:1 | exit fn mutable_variable_immutable_borrow (normal) | main.rs:31:1:36:1 | exit fn mutable_variable_immutable_borrow | |
-| main.rs:31:40:36:1 | { ... } | main.rs:31:1:36:1 | exit fn mutable_variable_immutable_borrow (normal) | |
-| main.rs:32:5:32:18 | let ... = 1 | main.rs:32:17:32:17 | 1 | |
-| main.rs:32:9:32:13 | mut x | main.rs:33:5:33:22 | ExprStmt | match |
-| main.rs:32:13:32:13 | x | main.rs:32:9:32:13 | mut x | |
-| main.rs:32:17:32:17 | 1 | main.rs:32:13:32:13 | x | |
-| main.rs:33:5:33:17 | print_i64_ref | main.rs:33:20:33:20 | x | |
-| main.rs:33:5:33:21 | print_i64_ref(...) | main.rs:34:5:34:10 | ExprStmt | |
-| main.rs:33:5:33:22 | ExprStmt | main.rs:33:5:33:17 | print_i64_ref | |
-| main.rs:33:19:33:20 | &x | main.rs:33:5:33:21 | print_i64_ref(...) | |
-| main.rs:33:20:33:20 | x | main.rs:33:19:33:20 | &x | |
-| main.rs:34:5:34:5 | x | main.rs:34:9:34:9 | 2 | |
-| main.rs:34:5:34:9 | ... = ... | main.rs:35:5:35:22 | ExprStmt | |
-| main.rs:34:5:34:10 | ExprStmt | main.rs:34:5:34:5 | x | |
-| main.rs:34:9:34:9 | 2 | main.rs:34:5:34:9 | ... = ... | |
+| main.rs:29:5:29:6 | x2 | main.rs:29:10:29:11 | x2 | |
+| main.rs:29:5:29:11 | ... = ... | main.rs:30:5:30:18 | ExprStmt | |
+| main.rs:29:5:29:12 | ExprStmt | main.rs:29:5:29:6 | x2 | |
+| main.rs:29:10:29:11 | x2 | main.rs:29:5:29:11 | ... = ... | |
+| main.rs:30:5:30:13 | print_i64 | main.rs:30:15:30:16 | x2 | |
+| main.rs:30:5:30:17 | print_i64(...) | main.rs:24:23:31:1 | { ... } | |
+| main.rs:30:5:30:18 | ExprStmt | main.rs:30:5:30:13 | print_i64 | |
+| main.rs:30:15:30:16 | x2 | main.rs:30:5:30:17 | print_i64(...) | |
+| main.rs:33:1:38:1 | enter fn mutable_variable_immutable_borrow | main.rs:34:5:34:18 | let ... = 1 | |
+| main.rs:33:1:38:1 | exit fn mutable_variable_immutable_borrow (normal) | main.rs:33:1:38:1 | exit fn mutable_variable_immutable_borrow | |
+| main.rs:33:40:38:1 | { ... } | main.rs:33:1:38:1 | exit fn mutable_variable_immutable_borrow (normal) | |
+| main.rs:34:5:34:18 | let ... = 1 | main.rs:34:17:34:17 | 1 | |
+| main.rs:34:9:34:13 | mut x | main.rs:35:5:35:22 | ExprStmt | match |
+| main.rs:34:13:34:13 | x | main.rs:34:9:34:13 | mut x | |
+| main.rs:34:17:34:17 | 1 | main.rs:34:13:34:13 | x | |
| main.rs:35:5:35:17 | print_i64_ref | main.rs:35:20:35:20 | x | |
-| main.rs:35:5:35:21 | print_i64_ref(...) | main.rs:31:40:36:1 | { ... } | |
+| main.rs:35:5:35:21 | print_i64_ref(...) | main.rs:36:5:36:10 | ExprStmt | |
| main.rs:35:5:35:22 | ExprStmt | main.rs:35:5:35:17 | print_i64_ref | |
| main.rs:35:19:35:20 | &x | main.rs:35:5:35:21 | print_i64_ref(...) | |
| main.rs:35:20:35:20 | x | main.rs:35:19:35:20 | &x | |
-| main.rs:38:1:44:1 | enter fn variable_shadow1 | main.rs:39:5:39:15 | let ... = 1 | |
-| main.rs:38:1:44:1 | exit fn variable_shadow1 (normal) | main.rs:38:1:44:1 | exit fn variable_shadow1 | |
-| main.rs:38:23:44:1 | { ... } | main.rs:38:1:44:1 | exit fn variable_shadow1 (normal) | |
-| main.rs:39:5:39:15 | let ... = 1 | main.rs:39:14:39:14 | 1 | |
-| main.rs:39:9:39:10 | x3 | main.rs:39:9:39:10 | x3 | |
-| main.rs:39:9:39:10 | x3 | main.rs:40:5:40:18 | ExprStmt | match |
-| main.rs:39:14:39:14 | 1 | main.rs:39:9:39:10 | x3 | |
-| main.rs:40:5:40:13 | print_i64 | main.rs:40:15:40:16 | x3 | |
-| main.rs:40:5:40:17 | print_i64(...) | main.rs:41:5:42:15 | let ... = ... | |
-| main.rs:40:5:40:18 | ExprStmt | main.rs:40:5:40:13 | print_i64 | |
-| main.rs:40:15:40:16 | x3 | main.rs:40:5:40:17 | print_i64(...) | |
-| main.rs:41:5:42:15 | let ... = ... | main.rs:42:9:42:10 | x3 | |
+| main.rs:36:5:36:5 | x | main.rs:36:9:36:9 | 2 | |
+| main.rs:36:5:36:9 | ... = ... | main.rs:37:5:37:22 | ExprStmt | |
+| main.rs:36:5:36:10 | ExprStmt | main.rs:36:5:36:5 | x | |
+| main.rs:36:9:36:9 | 2 | main.rs:36:5:36:9 | ... = ... | |
+| main.rs:37:5:37:17 | print_i64_ref | main.rs:37:20:37:20 | x | |
+| main.rs:37:5:37:21 | print_i64_ref(...) | main.rs:33:40:38:1 | { ... } | |
+| main.rs:37:5:37:22 | ExprStmt | main.rs:37:5:37:17 | print_i64_ref | |
+| main.rs:37:19:37:20 | &x | main.rs:37:5:37:21 | print_i64_ref(...) | |
+| main.rs:37:20:37:20 | x | main.rs:37:19:37:20 | &x | |
+| main.rs:40:1:46:1 | enter fn variable_shadow1 | main.rs:41:5:41:15 | let ... = 1 | |
+| main.rs:40:1:46:1 | exit fn variable_shadow1 (normal) | main.rs:40:1:46:1 | exit fn variable_shadow1 | |
+| main.rs:40:23:46:1 | { ... } | main.rs:40:1:46:1 | exit fn variable_shadow1 (normal) | |
+| main.rs:41:5:41:15 | let ... = 1 | main.rs:41:14:41:14 | 1 | |
| main.rs:41:9:41:10 | x3 | main.rs:41:9:41:10 | x3 | |
-| main.rs:41:9:41:10 | x3 | main.rs:43:5:43:18 | ExprStmt | match |
-| main.rs:42:9:42:10 | x3 | main.rs:42:14:42:14 | 1 | |
-| main.rs:42:9:42:14 | ... + ... | main.rs:41:9:41:10 | x3 | |
-| main.rs:42:14:42:14 | 1 | main.rs:42:9:42:14 | ... + ... | |
-| main.rs:43:5:43:13 | print_i64 | main.rs:43:15:43:16 | x3 | |
-| main.rs:43:5:43:17 | print_i64(...) | main.rs:38:23:44:1 | { ... } | |
-| main.rs:43:5:43:18 | ExprStmt | main.rs:43:5:43:13 | print_i64 | |
-| main.rs:43:15:43:16 | x3 | main.rs:43:5:43:17 | print_i64(...) | |
-| main.rs:46:1:54:1 | enter fn variable_shadow2 | main.rs:47:5:47:17 | let ... = "a" | |
-| main.rs:46:1:54:1 | exit fn variable_shadow2 (normal) | main.rs:46:1:54:1 | exit fn variable_shadow2 | |
-| main.rs:46:23:54:1 | { ... } | main.rs:46:1:54:1 | exit fn variable_shadow2 (normal) | |
-| main.rs:47:5:47:17 | let ... = "a" | main.rs:47:14:47:16 | "a" | |
-| main.rs:47:9:47:10 | x4 | main.rs:47:9:47:10 | x4 | |
-| main.rs:47:9:47:10 | x4 | main.rs:48:5:48:18 | ExprStmt | match |
-| main.rs:47:14:47:16 | "a" | main.rs:47:9:47:10 | x4 | |
-| main.rs:48:5:48:13 | print_str | main.rs:48:15:48:16 | x4 | |
-| main.rs:48:5:48:17 | print_str(...) | main.rs:49:5:52:5 | ExprStmt | |
-| main.rs:48:5:48:18 | ExprStmt | main.rs:48:5:48:13 | print_str | |
-| main.rs:48:15:48:16 | x4 | main.rs:48:5:48:17 | print_str(...) | |
-| main.rs:49:5:52:5 | ExprStmt | main.rs:50:9:50:21 | let ... = "b" | |
-| main.rs:49:5:52:5 | { ... } | main.rs:53:5:53:18 | ExprStmt | |
-| main.rs:50:9:50:21 | let ... = "b" | main.rs:50:18:50:20 | "b" | |
-| main.rs:50:13:50:14 | x4 | main.rs:50:13:50:14 | x4 | |
-| main.rs:50:13:50:14 | x4 | main.rs:51:9:51:22 | ExprStmt | match |
-| main.rs:50:18:50:20 | "b" | main.rs:50:13:50:14 | x4 | |
-| main.rs:51:9:51:17 | print_str | main.rs:51:19:51:20 | x4 | |
-| main.rs:51:9:51:21 | print_str(...) | main.rs:49:5:52:5 | { ... } | |
-| main.rs:51:9:51:22 | ExprStmt | main.rs:51:9:51:17 | print_str | |
-| main.rs:51:19:51:20 | x4 | main.rs:51:9:51:21 | print_str(...) | |
-| main.rs:53:5:53:13 | print_str | main.rs:53:15:53:16 | x4 | |
-| main.rs:53:5:53:17 | print_str(...) | main.rs:46:23:54:1 | { ... } | |
-| main.rs:53:5:53:18 | ExprStmt | main.rs:53:5:53:13 | print_str | |
-| main.rs:53:15:53:16 | x4 | main.rs:53:5:53:17 | print_str(...) | |
-| main.rs:61:1:76:1 | enter fn let_pattern1 | main.rs:62:5:71:47 | let ... = ... | |
-| main.rs:61:1:76:1 | exit fn let_pattern1 (normal) | main.rs:61:1:76:1 | exit fn let_pattern1 | |
-| main.rs:61:19:76:1 | { ... } | main.rs:61:1:76:1 | exit fn let_pattern1 (normal) | |
-| main.rs:62:5:71:47 | let ... = ... | main.rs:71:11:71:13 | "a" | |
-| main.rs:62:9:71:5 | TuplePat | main.rs:63:9:66:9 | TuplePat | match |
-| main.rs:63:9:66:9 | TuplePat | main.rs:64:13:64:14 | a1 | match |
-| main.rs:64:13:64:14 | a1 | main.rs:64:13:64:14 | a1 | |
-| main.rs:64:13:64:14 | a1 | main.rs:65:13:65:14 | b1 | match |
-| main.rs:65:13:65:14 | b1 | main.rs:65:13:65:14 | b1 | |
-| main.rs:65:13:65:14 | b1 | main.rs:67:9:70:9 | Point {...} | match |
-| main.rs:67:9:70:9 | Point {...} | main.rs:68:13:68:13 | x | match |
-| main.rs:68:13:68:13 | x | main.rs:68:13:68:13 | x | |
-| main.rs:68:13:68:13 | x | main.rs:69:13:69:13 | y | match |
-| main.rs:69:13:69:13 | y | main.rs:69:13:69:13 | y | |
-| main.rs:69:13:69:13 | y | main.rs:72:5:72:18 | ExprStmt | match |
-| main.rs:71:9:71:46 | TupleExpr | main.rs:62:9:71:5 | TuplePat | |
-| main.rs:71:10:71:19 | TupleExpr | main.rs:71:33:71:35 | "x" | |
-| main.rs:71:11:71:13 | "a" | main.rs:71:16:71:18 | "b" | |
-| main.rs:71:16:71:18 | "b" | main.rs:71:10:71:19 | TupleExpr | |
-| main.rs:71:22:71:45 | Point {...} | main.rs:71:9:71:46 | TupleExpr | |
-| main.rs:71:33:71:35 | "x" | main.rs:71:41:71:43 | "y" | |
-| main.rs:71:41:71:43 | "y" | main.rs:71:22:71:45 | Point {...} | |
-| main.rs:72:5:72:13 | print_str | main.rs:72:15:72:16 | a1 | |
-| main.rs:72:5:72:17 | print_str(...) | main.rs:73:5:73:18 | ExprStmt | |
-| main.rs:72:5:72:18 | ExprStmt | main.rs:72:5:72:13 | print_str | |
-| main.rs:72:15:72:16 | a1 | main.rs:72:5:72:17 | print_str(...) | |
-| main.rs:73:5:73:13 | print_str | main.rs:73:15:73:16 | b1 | |
-| main.rs:73:5:73:17 | print_str(...) | main.rs:74:5:74:17 | ExprStmt | |
-| main.rs:73:5:73:18 | ExprStmt | main.rs:73:5:73:13 | print_str | |
-| main.rs:73:15:73:16 | b1 | main.rs:73:5:73:17 | print_str(...) | |
-| main.rs:74:5:74:13 | print_str | main.rs:74:15:74:15 | x | |
-| main.rs:74:5:74:16 | print_str(...) | main.rs:75:5:75:17 | ExprStmt | |
-| main.rs:74:5:74:17 | ExprStmt | main.rs:74:5:74:13 | print_str | |
-| main.rs:74:15:74:15 | x | main.rs:74:5:74:16 | print_str(...) | |
-| main.rs:75:5:75:13 | print_str | main.rs:75:15:75:15 | y | |
-| main.rs:75:5:75:16 | print_str(...) | main.rs:61:19:76:1 | { ... } | |
-| main.rs:75:5:75:17 | ExprStmt | main.rs:75:5:75:13 | print_str | |
-| main.rs:75:15:75:15 | y | main.rs:75:5:75:16 | print_str(...) | |
-| main.rs:78:1:86:1 | enter fn let_pattern2 | main.rs:79:5:79:38 | let ... = ... | |
-| main.rs:78:1:86:1 | exit fn let_pattern2 (normal) | main.rs:78:1:86:1 | exit fn let_pattern2 | |
-| main.rs:78:19:86:1 | { ... } | main.rs:78:1:86:1 | exit fn let_pattern2 (normal) | |
-| main.rs:79:5:79:38 | let ... = ... | main.rs:79:25:79:27 | "a" | |
-| main.rs:79:9:79:10 | p1 | main.rs:79:9:79:10 | p1 | |
-| main.rs:79:9:79:10 | p1 | main.rs:80:5:83:11 | let ... = p1 | match |
-| main.rs:79:14:79:37 | Point {...} | main.rs:79:9:79:10 | p1 | |
-| main.rs:79:25:79:27 | "a" | main.rs:79:33:79:35 | "b" | |
-| main.rs:79:33:79:35 | "b" | main.rs:79:14:79:37 | Point {...} | |
-| main.rs:80:5:83:11 | let ... = p1 | main.rs:83:9:83:10 | p1 | |
-| main.rs:80:9:83:5 | Point {...} | main.rs:81:12:81:13 | a2 | match |
-| main.rs:81:12:81:13 | a2 | main.rs:81:12:81:13 | a2 | |
-| main.rs:81:12:81:13 | a2 | main.rs:82:12:82:13 | b2 | match |
-| main.rs:82:12:82:13 | b2 | main.rs:82:12:82:13 | b2 | |
-| main.rs:82:12:82:13 | b2 | main.rs:84:5:84:18 | ExprStmt | match |
-| main.rs:83:9:83:10 | p1 | main.rs:80:9:83:5 | Point {...} | |
-| main.rs:84:5:84:13 | print_str | main.rs:84:15:84:16 | a2 | |
-| main.rs:84:5:84:17 | print_str(...) | main.rs:85:5:85:18 | ExprStmt | |
-| main.rs:84:5:84:18 | ExprStmt | main.rs:84:5:84:13 | print_str | |
-| main.rs:84:15:84:16 | a2 | main.rs:84:5:84:17 | print_str(...) | |
-| main.rs:85:5:85:13 | print_str | main.rs:85:15:85:16 | b2 | |
-| main.rs:85:5:85:17 | print_str(...) | main.rs:78:19:86:1 | { ... } | |
-| main.rs:85:5:85:18 | ExprStmt | main.rs:85:5:85:13 | print_str | |
-| main.rs:85:15:85:16 | b2 | main.rs:85:5:85:17 | print_str(...) | |
-| main.rs:88:1:95:1 | enter fn let_pattern3 | main.rs:89:5:89:42 | let ... = ... | |
-| main.rs:88:1:95:1 | exit fn let_pattern3 (normal) | main.rs:88:1:95:1 | exit fn let_pattern3 | |
-| main.rs:88:19:95:1 | { ... } | main.rs:88:1:95:1 | exit fn let_pattern3 (normal) | |
-| main.rs:89:5:89:42 | let ... = ... | main.rs:89:14:89:17 | Some | |
-| main.rs:89:9:89:10 | s1 | main.rs:89:9:89:10 | s1 | |
-| main.rs:89:9:89:10 | s1 | main.rs:92:11:92:12 | s1 | match |
-| main.rs:89:14:89:17 | Some | main.rs:89:19:89:30 | ...::from | |
-| main.rs:89:14:89:41 | Some(...) | main.rs:89:9:89:10 | s1 | |
-| main.rs:89:19:89:30 | ...::from | main.rs:89:32:89:39 | "Hello!" | |
-| main.rs:89:19:89:40 | ...::from(...) | main.rs:89:14:89:41 | Some(...) | |
-| main.rs:89:32:89:39 | "Hello!" | main.rs:89:19:89:40 | ...::from(...) | |
-| main.rs:91:5:94:5 | if ... {...} | main.rs:88:19:95:1 | { ... } | |
-| main.rs:91:8:92:12 | [boolean(false)] let ... = s1 | main.rs:91:5:94:5 | if ... {...} | false |
-| main.rs:91:8:92:12 | [boolean(true)] let ... = s1 | main.rs:93:9:93:22 | ExprStmt | true |
-| main.rs:91:12:91:23 | Some(...) | main.rs:91:8:92:12 | [boolean(false)] let ... = s1 | no-match |
-| main.rs:91:12:91:23 | Some(...) | main.rs:91:21:91:22 | s2 | match |
-| main.rs:91:17:91:22 | ref s2 | main.rs:91:8:92:12 | [boolean(true)] let ... = s1 | match |
-| main.rs:91:21:91:22 | s2 | main.rs:91:17:91:22 | ref s2 | |
-| main.rs:92:11:92:12 | s1 | main.rs:91:12:91:23 | Some(...) | |
-| main.rs:92:14:94:5 | { ... } | main.rs:91:5:94:5 | if ... {...} | |
-| main.rs:93:9:93:17 | print_str | main.rs:93:19:93:20 | s2 | |
-| main.rs:93:9:93:21 | print_str(...) | main.rs:92:14:94:5 | { ... } | |
-| main.rs:93:9:93:22 | ExprStmt | main.rs:93:9:93:17 | print_str | |
-| main.rs:93:19:93:20 | s2 | main.rs:93:9:93:21 | print_str(...) | |
-| main.rs:97:1:108:1 | enter fn let_pattern4 | main.rs:98:5:98:23 | let ... = ... | |
-| main.rs:97:1:108:1 | exit fn let_pattern4 (normal) | main.rs:97:1:108:1 | exit fn let_pattern4 | |
-| main.rs:97:19:108:1 | { ... } | main.rs:97:1:108:1 | exit fn let_pattern4 (normal) | |
-| main.rs:98:5:98:23 | let ... = ... | main.rs:98:13:98:16 | Some | |
-| main.rs:98:9:98:9 | x | main.rs:98:9:98:9 | x | |
-| main.rs:98:9:98:9 | x | main.rs:99:5:106:6 | let ... = x else {...} | match |
-| main.rs:98:13:98:16 | Some | main.rs:98:18:98:21 | "x5" | |
-| main.rs:98:13:98:22 | Some(...) | main.rs:98:9:98:9 | x | |
-| main.rs:98:18:98:21 | "x5" | main.rs:98:13:98:22 | Some(...) | |
-| main.rs:99:5:106:6 | let ... = x else {...} | main.rs:100:7:100:7 | x | |
-| main.rs:99:9:99:15 | Some(...) | main.rs:99:14:99:14 | x | match |
-| main.rs:99:9:99:15 | Some(...) | main.rs:102:9:103:14 | let ... = x | no-match |
-| main.rs:99:14:99:14 | x | main.rs:99:14:99:14 | x | |
-| main.rs:99:14:99:14 | x | main.rs:107:5:107:17 | ExprStmt | match |
-| main.rs:100:7:100:7 | x | main.rs:99:9:99:15 | Some(...) | |
-| main.rs:102:9:103:14 | let ... = x | main.rs:103:13:103:13 | x | |
-| main.rs:102:13:102:13 | x | main.rs:102:13:102:13 | x | |
-| main.rs:102:13:102:13 | x | main.rs:104:9:104:30 | ExprStmt | match |
-| main.rs:103:13:103:13 | x | main.rs:102:13:102:13 | x | |
-| main.rs:104:9:104:17 | print_str | main.rs:104:19:104:19 | x | |
-| main.rs:104:9:104:29 | print_str(...) | main.rs:105:9:105:13 | ...::panic | |
-| main.rs:104:9:104:30 | ExprStmt | main.rs:104:9:104:17 | print_str | |
-| main.rs:104:19:104:19 | x | main.rs:104:19:104:28 | x.unwrap() | |
-| main.rs:104:19:104:28 | x.unwrap() | main.rs:104:9:104:29 | print_str(...) | |
-| main.rs:105:9:105:13 | "not yet implemented" | main.rs:105:9:105:13 | ...::panic(...) | |
-| main.rs:105:9:105:13 | ...::panic | main.rs:105:9:105:13 | "not yet implemented" | |
-| main.rs:105:9:105:13 | ...::panic(...) | main.rs:105:9:105:13 | MacroBlockExpr | |
-| main.rs:105:9:105:13 | MacroBlockExpr | main.rs:105:9:105:15 | todo!... | |
-| main.rs:105:9:105:15 | MacroExpr | main.rs:101:10:106:5 | { ... } | |
-| main.rs:105:9:105:15 | todo!... | main.rs:105:9:105:15 | MacroExpr | |
-| main.rs:107:5:107:13 | print_str | main.rs:107:15:107:15 | x | |
-| main.rs:107:5:107:16 | print_str(...) | main.rs:97:19:108:1 | { ... } | |
-| main.rs:107:5:107:17 | ExprStmt | main.rs:107:5:107:13 | print_str | |
-| main.rs:107:15:107:15 | x | main.rs:107:5:107:16 | print_str(...) | |
-| main.rs:110:1:117:1 | enter fn let_pattern5 | main.rs:111:5:111:42 | let ... = ... | |
-| main.rs:110:1:117:1 | exit fn let_pattern5 (normal) | main.rs:110:1:117:1 | exit fn let_pattern5 | |
-| main.rs:110:19:117:1 | { ... } | main.rs:110:1:117:1 | exit fn let_pattern5 (normal) | |
-| main.rs:111:5:111:42 | let ... = ... | main.rs:111:14:111:17 | Some | |
-| main.rs:111:9:111:10 | s1 | main.rs:111:9:111:10 | s1 | |
-| main.rs:111:9:111:10 | s1 | main.rs:114:11:114:12 | s1 | match |
-| main.rs:111:14:111:17 | Some | main.rs:111:19:111:30 | ...::from | |
-| main.rs:111:14:111:41 | Some(...) | main.rs:111:9:111:10 | s1 | |
-| main.rs:111:19:111:30 | ...::from | main.rs:111:32:111:39 | "Hello!" | |
-| main.rs:111:19:111:40 | ...::from(...) | main.rs:111:14:111:41 | Some(...) | |
-| main.rs:111:32:111:39 | "Hello!" | main.rs:111:19:111:40 | ...::from(...) | |
-| main.rs:113:5:116:5 | while ... { ... } | main.rs:110:19:117:1 | { ... } | |
-| main.rs:113:11:114:12 | [boolean(false)] let ... = s1 | main.rs:113:5:116:5 | while ... { ... } | false |
-| main.rs:113:11:114:12 | [boolean(true)] let ... = s1 | main.rs:115:9:115:22 | ExprStmt | true |
-| main.rs:113:15:113:26 | Some(...) | main.rs:113:11:114:12 | [boolean(false)] let ... = s1 | no-match |
-| main.rs:113:15:113:26 | Some(...) | main.rs:113:24:113:25 | s2 | match |
-| main.rs:113:20:113:25 | ref s2 | main.rs:113:11:114:12 | [boolean(true)] let ... = s1 | match |
-| main.rs:113:24:113:25 | s2 | main.rs:113:20:113:25 | ref s2 | |
-| main.rs:114:11:114:12 | s1 | main.rs:113:15:113:26 | Some(...) | |
-| main.rs:114:14:116:5 | { ... } | main.rs:114:11:114:12 | s1 | |
-| main.rs:115:9:115:17 | print_str | main.rs:115:19:115:20 | s2 | |
-| main.rs:115:9:115:21 | print_str(...) | main.rs:114:14:116:5 | { ... } | |
-| main.rs:115:9:115:22 | ExprStmt | main.rs:115:9:115:17 | print_str | |
-| main.rs:115:19:115:20 | s2 | main.rs:115:9:115:21 | print_str(...) | |
-| main.rs:119:1:134:1 | enter fn match_pattern1 | main.rs:120:5:120:21 | let ... = ... | |
-| main.rs:119:1:134:1 | exit fn match_pattern1 (normal) | main.rs:119:1:134:1 | exit fn match_pattern1 | |
-| main.rs:119:21:134:1 | { ... } | main.rs:119:1:134:1 | exit fn match_pattern1 (normal) | |
-| main.rs:120:5:120:21 | let ... = ... | main.rs:120:14:120:17 | Some | |
-| main.rs:120:9:120:10 | x6 | main.rs:120:9:120:10 | x6 | |
-| main.rs:120:9:120:10 | x6 | main.rs:121:5:121:16 | let ... = 10 | match |
-| main.rs:120:14:120:17 | Some | main.rs:120:19:120:19 | 5 | |
-| main.rs:120:14:120:20 | Some(...) | main.rs:120:9:120:10 | x6 | |
-| main.rs:120:19:120:19 | 5 | main.rs:120:14:120:20 | Some(...) | |
-| main.rs:121:5:121:16 | let ... = 10 | main.rs:121:14:121:15 | 10 | |
-| main.rs:121:9:121:10 | y1 | main.rs:121:9:121:10 | y1 | |
-| main.rs:121:9:121:10 | y1 | main.rs:123:5:131:5 | ExprStmt | match |
-| main.rs:121:14:121:15 | 10 | main.rs:121:9:121:10 | y1 | |
-| main.rs:123:5:131:5 | ExprStmt | main.rs:123:11:123:12 | x6 | |
-| main.rs:123:5:131:5 | match x6 { ... } | main.rs:133:5:133:18 | ExprStmt | |
-| main.rs:123:11:123:12 | x6 | main.rs:124:9:124:16 | Some(...) | |
-| main.rs:124:9:124:16 | Some(...) | main.rs:124:14:124:15 | 50 | match |
-| main.rs:124:9:124:16 | Some(...) | main.rs:125:9:125:16 | Some(...) | no-match |
-| main.rs:124:14:124:15 | 50 | main.rs:124:14:124:15 | 50 | |
-| main.rs:124:14:124:15 | 50 | main.rs:124:21:124:29 | print_str | match |
-| main.rs:124:14:124:15 | 50 | main.rs:125:9:125:16 | Some(...) | no-match |
-| main.rs:124:21:124:29 | print_str | main.rs:124:31:124:38 | "Got 50" | |
-| main.rs:124:21:124:39 | print_str(...) | main.rs:123:5:131:5 | match x6 { ... } | |
-| main.rs:124:31:124:38 | "Got 50" | main.rs:124:21:124:39 | print_str(...) | |
-| main.rs:125:9:125:16 | Some(...) | main.rs:125:14:125:15 | y1 | match |
-| main.rs:125:9:125:16 | Some(...) | main.rs:130:9:130:12 | None | no-match |
-| main.rs:125:14:125:15 | y1 | main.rs:125:14:125:15 | y1 | |
-| main.rs:125:14:125:15 | y1 | main.rs:128:13:128:21 | print_i64 | match |
-| main.rs:127:9:129:9 | { ... } | main.rs:123:5:131:5 | match x6 { ... } | |
-| main.rs:128:13:128:21 | print_i64 | main.rs:128:23:128:24 | y1 | |
-| main.rs:128:13:128:25 | print_i64(...) | main.rs:127:9:129:9 | { ... } | |
-| main.rs:128:23:128:24 | y1 | main.rs:128:13:128:25 | print_i64(...) | |
-| main.rs:130:9:130:12 | None | main.rs:130:9:130:12 | None | |
-| main.rs:130:9:130:12 | None | main.rs:130:17:130:25 | print_str | match |
-| main.rs:130:17:130:25 | print_str | main.rs:130:27:130:32 | "NONE" | |
-| main.rs:130:17:130:33 | print_str(...) | main.rs:123:5:131:5 | match x6 { ... } | |
-| main.rs:130:27:130:32 | "NONE" | main.rs:130:17:130:33 | print_str(...) | |
-| main.rs:133:5:133:13 | print_i64 | main.rs:133:15:133:16 | y1 | |
-| main.rs:133:5:133:17 | print_i64(...) | main.rs:119:21:134:1 | { ... } | |
-| main.rs:133:5:133:18 | ExprStmt | main.rs:133:5:133:13 | print_i64 | |
-| main.rs:133:15:133:16 | y1 | main.rs:133:5:133:17 | print_i64(...) | |
-| main.rs:136:1:165:1 | enter fn match_pattern2 | main.rs:137:5:137:36 | let ... = ... | |
-| main.rs:136:1:165:1 | exit fn match_pattern2 (normal) | main.rs:136:1:165:1 | exit fn match_pattern2 | |
-| main.rs:136:21:165:1 | { ... } | main.rs:136:1:165:1 | exit fn match_pattern2 (normal) | |
-| main.rs:137:5:137:36 | let ... = ... | main.rs:137:20:137:20 | 2 | |
-| main.rs:137:9:137:15 | numbers | main.rs:137:9:137:15 | numbers | |
-| main.rs:137:9:137:15 | numbers | main.rs:139:5:152:5 | ExprStmt | match |
-| main.rs:137:19:137:35 | TupleExpr | main.rs:137:9:137:15 | numbers | |
-| main.rs:137:20:137:20 | 2 | main.rs:137:23:137:23 | 4 | |
-| main.rs:137:23:137:23 | 4 | main.rs:137:26:137:26 | 8 | |
-| main.rs:137:26:137:26 | 8 | main.rs:137:29:137:30 | 16 | |
-| main.rs:137:29:137:30 | 16 | main.rs:137:33:137:34 | 32 | |
-| main.rs:137:33:137:34 | 32 | main.rs:137:19:137:35 | TupleExpr | |
-| main.rs:139:5:152:5 | ExprStmt | main.rs:139:11:139:17 | numbers | |
-| main.rs:139:5:152:5 | match numbers { ... } | main.rs:154:11:154:17 | numbers | |
-| main.rs:139:11:139:17 | numbers | main.rs:141:9:147:9 | TuplePat | |
-| main.rs:141:9:147:9 | TuplePat | main.rs:142:13:142:17 | first | match |
-| main.rs:142:13:142:17 | first | main.rs:142:13:142:17 | first | |
-| main.rs:142:13:142:17 | first | main.rs:143:13:143:13 | _ | match |
-| main.rs:143:13:143:13 | _ | main.rs:144:13:144:17 | third | match |
-| main.rs:144:13:144:17 | third | main.rs:144:13:144:17 | third | |
-| main.rs:144:13:144:17 | third | main.rs:145:13:145:13 | _ | match |
-| main.rs:145:13:145:13 | _ | main.rs:146:13:146:17 | fifth | match |
-| main.rs:146:13:146:17 | fifth | main.rs:146:13:146:17 | fifth | |
-| main.rs:146:13:146:17 | fifth | main.rs:148:13:148:29 | ExprStmt | match |
-| main.rs:147:14:151:9 | { ... } | main.rs:139:5:152:5 | match numbers { ... } | |
-| main.rs:148:13:148:21 | print_i64 | main.rs:148:23:148:27 | first | |
-| main.rs:148:13:148:28 | print_i64(...) | main.rs:149:13:149:29 | ExprStmt | |
-| main.rs:148:13:148:29 | ExprStmt | main.rs:148:13:148:21 | print_i64 | |
-| main.rs:148:23:148:27 | first | main.rs:148:13:148:28 | print_i64(...) | |
-| main.rs:149:13:149:21 | print_i64 | main.rs:149:23:149:27 | third | |
-| main.rs:149:13:149:28 | print_i64(...) | main.rs:150:13:150:29 | ExprStmt | |
-| main.rs:149:13:149:29 | ExprStmt | main.rs:149:13:149:21 | print_i64 | |
-| main.rs:149:23:149:27 | third | main.rs:149:13:149:28 | print_i64(...) | |
-| main.rs:150:13:150:21 | print_i64 | main.rs:150:23:150:27 | fifth | |
-| main.rs:150:13:150:28 | print_i64(...) | main.rs:147:14:151:9 | { ... } | |
+| main.rs:41:9:41:10 | x3 | main.rs:42:5:42:18 | ExprStmt | match |
+| main.rs:41:14:41:14 | 1 | main.rs:41:9:41:10 | x3 | |
+| main.rs:42:5:42:13 | print_i64 | main.rs:42:15:42:16 | x3 | |
+| main.rs:42:5:42:17 | print_i64(...) | main.rs:43:5:44:15 | let ... = ... | |
+| main.rs:42:5:42:18 | ExprStmt | main.rs:42:5:42:13 | print_i64 | |
+| main.rs:42:15:42:16 | x3 | main.rs:42:5:42:17 | print_i64(...) | |
+| main.rs:43:5:44:15 | let ... = ... | main.rs:44:9:44:10 | x3 | |
+| main.rs:43:9:43:10 | x3 | main.rs:43:9:43:10 | x3 | |
+| main.rs:43:9:43:10 | x3 | main.rs:45:5:45:18 | ExprStmt | match |
+| main.rs:44:9:44:10 | x3 | main.rs:44:14:44:14 | 1 | |
+| main.rs:44:9:44:14 | ... + ... | main.rs:43:9:43:10 | x3 | |
+| main.rs:44:14:44:14 | 1 | main.rs:44:9:44:14 | ... + ... | |
+| main.rs:45:5:45:13 | print_i64 | main.rs:45:15:45:16 | x3 | |
+| main.rs:45:5:45:17 | print_i64(...) | main.rs:40:23:46:1 | { ... } | |
+| main.rs:45:5:45:18 | ExprStmt | main.rs:45:5:45:13 | print_i64 | |
+| main.rs:45:15:45:16 | x3 | main.rs:45:5:45:17 | print_i64(...) | |
+| main.rs:48:1:56:1 | enter fn variable_shadow2 | main.rs:49:5:49:17 | let ... = "a" | |
+| main.rs:48:1:56:1 | exit fn variable_shadow2 (normal) | main.rs:48:1:56:1 | exit fn variable_shadow2 | |
+| main.rs:48:23:56:1 | { ... } | main.rs:48:1:56:1 | exit fn variable_shadow2 (normal) | |
+| main.rs:49:5:49:17 | let ... = "a" | main.rs:49:14:49:16 | "a" | |
+| main.rs:49:9:49:10 | x4 | main.rs:49:9:49:10 | x4 | |
+| main.rs:49:9:49:10 | x4 | main.rs:50:5:50:18 | ExprStmt | match |
+| main.rs:49:14:49:16 | "a" | main.rs:49:9:49:10 | x4 | |
+| main.rs:50:5:50:13 | print_str | main.rs:50:15:50:16 | x4 | |
+| main.rs:50:5:50:17 | print_str(...) | main.rs:51:5:54:5 | ExprStmt | |
+| main.rs:50:5:50:18 | ExprStmt | main.rs:50:5:50:13 | print_str | |
+| main.rs:50:15:50:16 | x4 | main.rs:50:5:50:17 | print_str(...) | |
+| main.rs:51:5:54:5 | ExprStmt | main.rs:52:9:52:21 | let ... = "b" | |
+| main.rs:51:5:54:5 | { ... } | main.rs:55:5:55:18 | ExprStmt | |
+| main.rs:52:9:52:21 | let ... = "b" | main.rs:52:18:52:20 | "b" | |
+| main.rs:52:13:52:14 | x4 | main.rs:52:13:52:14 | x4 | |
+| main.rs:52:13:52:14 | x4 | main.rs:53:9:53:22 | ExprStmt | match |
+| main.rs:52:18:52:20 | "b" | main.rs:52:13:52:14 | x4 | |
+| main.rs:53:9:53:17 | print_str | main.rs:53:19:53:20 | x4 | |
+| main.rs:53:9:53:21 | print_str(...) | main.rs:51:5:54:5 | { ... } | |
+| main.rs:53:9:53:22 | ExprStmt | main.rs:53:9:53:17 | print_str | |
+| main.rs:53:19:53:20 | x4 | main.rs:53:9:53:21 | print_str(...) | |
+| main.rs:55:5:55:13 | print_str | main.rs:55:15:55:16 | x4 | |
+| main.rs:55:5:55:17 | print_str(...) | main.rs:48:23:56:1 | { ... } | |
+| main.rs:55:5:55:18 | ExprStmt | main.rs:55:5:55:13 | print_str | |
+| main.rs:55:15:55:16 | x4 | main.rs:55:5:55:17 | print_str(...) | |
+| main.rs:63:1:78:1 | enter fn let_pattern1 | main.rs:64:5:73:47 | let ... = ... | |
+| main.rs:63:1:78:1 | exit fn let_pattern1 (normal) | main.rs:63:1:78:1 | exit fn let_pattern1 | |
+| main.rs:63:19:78:1 | { ... } | main.rs:63:1:78:1 | exit fn let_pattern1 (normal) | |
+| main.rs:64:5:73:47 | let ... = ... | main.rs:73:11:73:13 | "a" | |
+| main.rs:64:9:73:5 | TuplePat | main.rs:65:9:68:9 | TuplePat | match |
+| main.rs:65:9:68:9 | TuplePat | main.rs:66:13:66:14 | a1 | match |
+| main.rs:66:13:66:14 | a1 | main.rs:66:13:66:14 | a1 | |
+| main.rs:66:13:66:14 | a1 | main.rs:67:13:67:14 | b1 | match |
+| main.rs:67:13:67:14 | b1 | main.rs:67:13:67:14 | b1 | |
+| main.rs:67:13:67:14 | b1 | main.rs:69:9:72:9 | Point {...} | match |
+| main.rs:69:9:72:9 | Point {...} | main.rs:70:13:70:13 | x | match |
+| main.rs:70:13:70:13 | x | main.rs:70:13:70:13 | x | |
+| main.rs:70:13:70:13 | x | main.rs:71:13:71:13 | y | match |
+| main.rs:71:13:71:13 | y | main.rs:71:13:71:13 | y | |
+| main.rs:71:13:71:13 | y | main.rs:74:5:74:18 | ExprStmt | match |
+| main.rs:73:9:73:46 | TupleExpr | main.rs:64:9:73:5 | TuplePat | |
+| main.rs:73:10:73:19 | TupleExpr | main.rs:73:33:73:35 | "x" | |
+| main.rs:73:11:73:13 | "a" | main.rs:73:16:73:18 | "b" | |
+| main.rs:73:16:73:18 | "b" | main.rs:73:10:73:19 | TupleExpr | |
+| main.rs:73:22:73:45 | Point {...} | main.rs:73:9:73:46 | TupleExpr | |
+| main.rs:73:33:73:35 | "x" | main.rs:73:41:73:43 | "y" | |
+| main.rs:73:41:73:43 | "y" | main.rs:73:22:73:45 | Point {...} | |
+| main.rs:74:5:74:13 | print_str | main.rs:74:15:74:16 | a1 | |
+| main.rs:74:5:74:17 | print_str(...) | main.rs:75:5:75:18 | ExprStmt | |
+| main.rs:74:5:74:18 | ExprStmt | main.rs:74:5:74:13 | print_str | |
+| main.rs:74:15:74:16 | a1 | main.rs:74:5:74:17 | print_str(...) | |
+| main.rs:75:5:75:13 | print_str | main.rs:75:15:75:16 | b1 | |
+| main.rs:75:5:75:17 | print_str(...) | main.rs:76:5:76:17 | ExprStmt | |
+| main.rs:75:5:75:18 | ExprStmt | main.rs:75:5:75:13 | print_str | |
+| main.rs:75:15:75:16 | b1 | main.rs:75:5:75:17 | print_str(...) | |
+| main.rs:76:5:76:13 | print_str | main.rs:76:15:76:15 | x | |
+| main.rs:76:5:76:16 | print_str(...) | main.rs:77:5:77:17 | ExprStmt | |
+| main.rs:76:5:76:17 | ExprStmt | main.rs:76:5:76:13 | print_str | |
+| main.rs:76:15:76:15 | x | main.rs:76:5:76:16 | print_str(...) | |
+| main.rs:77:5:77:13 | print_str | main.rs:77:15:77:15 | y | |
+| main.rs:77:5:77:16 | print_str(...) | main.rs:63:19:78:1 | { ... } | |
+| main.rs:77:5:77:17 | ExprStmt | main.rs:77:5:77:13 | print_str | |
+| main.rs:77:15:77:15 | y | main.rs:77:5:77:16 | print_str(...) | |
+| main.rs:80:1:88:1 | enter fn let_pattern2 | main.rs:81:5:81:38 | let ... = ... | |
+| main.rs:80:1:88:1 | exit fn let_pattern2 (normal) | main.rs:80:1:88:1 | exit fn let_pattern2 | |
+| main.rs:80:19:88:1 | { ... } | main.rs:80:1:88:1 | exit fn let_pattern2 (normal) | |
+| main.rs:81:5:81:38 | let ... = ... | main.rs:81:25:81:27 | "a" | |
+| main.rs:81:9:81:10 | p1 | main.rs:81:9:81:10 | p1 | |
+| main.rs:81:9:81:10 | p1 | main.rs:82:5:85:11 | let ... = p1 | match |
+| main.rs:81:14:81:37 | Point {...} | main.rs:81:9:81:10 | p1 | |
+| main.rs:81:25:81:27 | "a" | main.rs:81:33:81:35 | "b" | |
+| main.rs:81:33:81:35 | "b" | main.rs:81:14:81:37 | Point {...} | |
+| main.rs:82:5:85:11 | let ... = p1 | main.rs:85:9:85:10 | p1 | |
+| main.rs:82:9:85:5 | Point {...} | main.rs:83:12:83:13 | a2 | match |
+| main.rs:83:12:83:13 | a2 | main.rs:83:12:83:13 | a2 | |
+| main.rs:83:12:83:13 | a2 | main.rs:84:12:84:13 | b2 | match |
+| main.rs:84:12:84:13 | b2 | main.rs:84:12:84:13 | b2 | |
+| main.rs:84:12:84:13 | b2 | main.rs:86:5:86:18 | ExprStmt | match |
+| main.rs:85:9:85:10 | p1 | main.rs:82:9:85:5 | Point {...} | |
+| main.rs:86:5:86:13 | print_str | main.rs:86:15:86:16 | a2 | |
+| main.rs:86:5:86:17 | print_str(...) | main.rs:87:5:87:18 | ExprStmt | |
+| main.rs:86:5:86:18 | ExprStmt | main.rs:86:5:86:13 | print_str | |
+| main.rs:86:15:86:16 | a2 | main.rs:86:5:86:17 | print_str(...) | |
+| main.rs:87:5:87:13 | print_str | main.rs:87:15:87:16 | b2 | |
+| main.rs:87:5:87:17 | print_str(...) | main.rs:80:19:88:1 | { ... } | |
+| main.rs:87:5:87:18 | ExprStmt | main.rs:87:5:87:13 | print_str | |
+| main.rs:87:15:87:16 | b2 | main.rs:87:5:87:17 | print_str(...) | |
+| main.rs:90:1:97:1 | enter fn let_pattern3 | main.rs:91:5:91:42 | let ... = ... | |
+| main.rs:90:1:97:1 | exit fn let_pattern3 (normal) | main.rs:90:1:97:1 | exit fn let_pattern3 | |
+| main.rs:90:19:97:1 | { ... } | main.rs:90:1:97:1 | exit fn let_pattern3 (normal) | |
+| main.rs:91:5:91:42 | let ... = ... | main.rs:91:14:91:17 | Some | |
+| main.rs:91:9:91:10 | s1 | main.rs:91:9:91:10 | s1 | |
+| main.rs:91:9:91:10 | s1 | main.rs:94:11:94:12 | s1 | match |
+| main.rs:91:14:91:17 | Some | main.rs:91:19:91:30 | ...::from | |
+| main.rs:91:14:91:41 | Some(...) | main.rs:91:9:91:10 | s1 | |
+| main.rs:91:19:91:30 | ...::from | main.rs:91:32:91:39 | "Hello!" | |
+| main.rs:91:19:91:40 | ...::from(...) | main.rs:91:14:91:41 | Some(...) | |
+| main.rs:91:32:91:39 | "Hello!" | main.rs:91:19:91:40 | ...::from(...) | |
+| main.rs:93:5:96:5 | if ... {...} | main.rs:90:19:97:1 | { ... } | |
+| main.rs:93:8:94:12 | [boolean(false)] let ... = s1 | main.rs:93:5:96:5 | if ... {...} | false |
+| main.rs:93:8:94:12 | [boolean(true)] let ... = s1 | main.rs:95:9:95:22 | ExprStmt | true |
+| main.rs:93:12:93:23 | Some(...) | main.rs:93:8:94:12 | [boolean(false)] let ... = s1 | no-match |
+| main.rs:93:12:93:23 | Some(...) | main.rs:93:21:93:22 | s2 | match |
+| main.rs:93:17:93:22 | ref s2 | main.rs:93:8:94:12 | [boolean(true)] let ... = s1 | match |
+| main.rs:93:21:93:22 | s2 | main.rs:93:17:93:22 | ref s2 | |
+| main.rs:94:11:94:12 | s1 | main.rs:93:12:93:23 | Some(...) | |
+| main.rs:94:14:96:5 | { ... } | main.rs:93:5:96:5 | if ... {...} | |
+| main.rs:95:9:95:17 | print_str | main.rs:95:19:95:20 | s2 | |
+| main.rs:95:9:95:21 | print_str(...) | main.rs:94:14:96:5 | { ... } | |
+| main.rs:95:9:95:22 | ExprStmt | main.rs:95:9:95:17 | print_str | |
+| main.rs:95:19:95:20 | s2 | main.rs:95:9:95:21 | print_str(...) | |
+| main.rs:99:1:110:1 | enter fn let_pattern4 | main.rs:100:5:100:23 | let ... = ... | |
+| main.rs:99:1:110:1 | exit fn let_pattern4 (normal) | main.rs:99:1:110:1 | exit fn let_pattern4 | |
+| main.rs:99:19:110:1 | { ... } | main.rs:99:1:110:1 | exit fn let_pattern4 (normal) | |
+| main.rs:100:5:100:23 | let ... = ... | main.rs:100:13:100:16 | Some | |
+| main.rs:100:9:100:9 | x | main.rs:100:9:100:9 | x | |
+| main.rs:100:9:100:9 | x | main.rs:101:5:108:6 | let ... = x else {...} | match |
+| main.rs:100:13:100:16 | Some | main.rs:100:18:100:21 | "x5" | |
+| main.rs:100:13:100:22 | Some(...) | main.rs:100:9:100:9 | x | |
+| main.rs:100:18:100:21 | "x5" | main.rs:100:13:100:22 | Some(...) | |
+| main.rs:101:5:108:6 | let ... = x else {...} | main.rs:102:7:102:7 | x | |
+| main.rs:101:9:101:15 | Some(...) | main.rs:101:14:101:14 | x | match |
+| main.rs:101:9:101:15 | Some(...) | main.rs:104:9:105:14 | let ... = x | no-match |
+| main.rs:101:14:101:14 | x | main.rs:101:14:101:14 | x | |
+| main.rs:101:14:101:14 | x | main.rs:109:5:109:17 | ExprStmt | match |
+| main.rs:102:7:102:7 | x | main.rs:101:9:101:15 | Some(...) | |
+| main.rs:104:9:105:14 | let ... = x | main.rs:105:13:105:13 | x | |
+| main.rs:104:13:104:13 | x | main.rs:104:13:104:13 | x | |
+| main.rs:104:13:104:13 | x | main.rs:106:9:106:30 | ExprStmt | match |
+| main.rs:105:13:105:13 | x | main.rs:104:13:104:13 | x | |
+| main.rs:106:9:106:17 | print_str | main.rs:106:19:106:19 | x | |
+| main.rs:106:9:106:29 | print_str(...) | main.rs:107:9:107:13 | ...::panic | |
+| main.rs:106:9:106:30 | ExprStmt | main.rs:106:9:106:17 | print_str | |
+| main.rs:106:19:106:19 | x | main.rs:106:19:106:28 | x.unwrap() | |
+| main.rs:106:19:106:28 | x.unwrap() | main.rs:106:9:106:29 | print_str(...) | |
+| main.rs:107:9:107:13 | "not yet implemented" | main.rs:107:9:107:13 | ...::panic(...) | |
+| main.rs:107:9:107:13 | ...::panic | main.rs:107:9:107:13 | "not yet implemented" | |
+| main.rs:107:9:107:13 | ...::panic(...) | main.rs:107:9:107:13 | MacroBlockExpr | |
+| main.rs:107:9:107:13 | MacroBlockExpr | main.rs:107:9:107:15 | todo!... | |
+| main.rs:107:9:107:15 | MacroExpr | main.rs:103:10:108:5 | { ... } | |
+| main.rs:107:9:107:15 | todo!... | main.rs:107:9:107:15 | MacroExpr | |
+| main.rs:109:5:109:13 | print_str | main.rs:109:15:109:15 | x | |
+| main.rs:109:5:109:16 | print_str(...) | main.rs:99:19:110:1 | { ... } | |
+| main.rs:109:5:109:17 | ExprStmt | main.rs:109:5:109:13 | print_str | |
+| main.rs:109:15:109:15 | x | main.rs:109:5:109:16 | print_str(...) | |
+| main.rs:112:1:119:1 | enter fn let_pattern5 | main.rs:113:5:113:42 | let ... = ... | |
+| main.rs:112:1:119:1 | exit fn let_pattern5 (normal) | main.rs:112:1:119:1 | exit fn let_pattern5 | |
+| main.rs:112:19:119:1 | { ... } | main.rs:112:1:119:1 | exit fn let_pattern5 (normal) | |
+| main.rs:113:5:113:42 | let ... = ... | main.rs:113:14:113:17 | Some | |
+| main.rs:113:9:113:10 | s1 | main.rs:113:9:113:10 | s1 | |
+| main.rs:113:9:113:10 | s1 | main.rs:116:11:116:12 | s1 | match |
+| main.rs:113:14:113:17 | Some | main.rs:113:19:113:30 | ...::from | |
+| main.rs:113:14:113:41 | Some(...) | main.rs:113:9:113:10 | s1 | |
+| main.rs:113:19:113:30 | ...::from | main.rs:113:32:113:39 | "Hello!" | |
+| main.rs:113:19:113:40 | ...::from(...) | main.rs:113:14:113:41 | Some(...) | |
+| main.rs:113:32:113:39 | "Hello!" | main.rs:113:19:113:40 | ...::from(...) | |
+| main.rs:115:5:118:5 | while ... { ... } | main.rs:112:19:119:1 | { ... } | |
+| main.rs:115:11:116:12 | [boolean(false)] let ... = s1 | main.rs:115:5:118:5 | while ... { ... } | false |
+| main.rs:115:11:116:12 | [boolean(true)] let ... = s1 | main.rs:117:9:117:22 | ExprStmt | true |
+| main.rs:115:15:115:26 | Some(...) | main.rs:115:11:116:12 | [boolean(false)] let ... = s1 | no-match |
+| main.rs:115:15:115:26 | Some(...) | main.rs:115:24:115:25 | s2 | match |
+| main.rs:115:20:115:25 | ref s2 | main.rs:115:11:116:12 | [boolean(true)] let ... = s1 | match |
+| main.rs:115:24:115:25 | s2 | main.rs:115:20:115:25 | ref s2 | |
+| main.rs:116:11:116:12 | s1 | main.rs:115:15:115:26 | Some(...) | |
+| main.rs:116:14:118:5 | { ... } | main.rs:116:11:116:12 | s1 | |
+| main.rs:117:9:117:17 | print_str | main.rs:117:19:117:20 | s2 | |
+| main.rs:117:9:117:21 | print_str(...) | main.rs:116:14:118:5 | { ... } | |
+| main.rs:117:9:117:22 | ExprStmt | main.rs:117:9:117:17 | print_str | |
+| main.rs:117:19:117:20 | s2 | main.rs:117:9:117:21 | print_str(...) | |
+| main.rs:121:1:136:1 | enter fn match_pattern1 | main.rs:122:5:122:21 | let ... = ... | |
+| main.rs:121:1:136:1 | exit fn match_pattern1 (normal) | main.rs:121:1:136:1 | exit fn match_pattern1 | |
+| main.rs:121:21:136:1 | { ... } | main.rs:121:1:136:1 | exit fn match_pattern1 (normal) | |
+| main.rs:122:5:122:21 | let ... = ... | main.rs:122:14:122:17 | Some | |
+| main.rs:122:9:122:10 | x6 | main.rs:122:9:122:10 | x6 | |
+| main.rs:122:9:122:10 | x6 | main.rs:123:5:123:16 | let ... = 10 | match |
+| main.rs:122:14:122:17 | Some | main.rs:122:19:122:19 | 5 | |
+| main.rs:122:14:122:20 | Some(...) | main.rs:122:9:122:10 | x6 | |
+| main.rs:122:19:122:19 | 5 | main.rs:122:14:122:20 | Some(...) | |
+| main.rs:123:5:123:16 | let ... = 10 | main.rs:123:14:123:15 | 10 | |
+| main.rs:123:9:123:10 | y1 | main.rs:123:9:123:10 | y1 | |
+| main.rs:123:9:123:10 | y1 | main.rs:125:5:133:5 | ExprStmt | match |
+| main.rs:123:14:123:15 | 10 | main.rs:123:9:123:10 | y1 | |
+| main.rs:125:5:133:5 | ExprStmt | main.rs:125:11:125:12 | x6 | |
+| main.rs:125:5:133:5 | match x6 { ... } | main.rs:135:5:135:18 | ExprStmt | |
+| main.rs:125:11:125:12 | x6 | main.rs:126:9:126:16 | Some(...) | |
+| main.rs:126:9:126:16 | Some(...) | main.rs:126:14:126:15 | 50 | match |
+| main.rs:126:9:126:16 | Some(...) | main.rs:127:9:127:16 | Some(...) | no-match |
+| main.rs:126:14:126:15 | 50 | main.rs:126:14:126:15 | 50 | |
+| main.rs:126:14:126:15 | 50 | main.rs:126:21:126:29 | print_str | match |
+| main.rs:126:14:126:15 | 50 | main.rs:127:9:127:16 | Some(...) | no-match |
+| main.rs:126:21:126:29 | print_str | main.rs:126:31:126:38 | "Got 50" | |
+| main.rs:126:21:126:39 | print_str(...) | main.rs:125:5:133:5 | match x6 { ... } | |
+| main.rs:126:31:126:38 | "Got 50" | main.rs:126:21:126:39 | print_str(...) | |
+| main.rs:127:9:127:16 | Some(...) | main.rs:127:14:127:15 | y1 | match |
+| main.rs:127:9:127:16 | Some(...) | main.rs:132:9:132:12 | None | no-match |
+| main.rs:127:14:127:15 | y1 | main.rs:127:14:127:15 | y1 | |
+| main.rs:127:14:127:15 | y1 | main.rs:130:13:130:21 | print_i64 | match |
+| main.rs:129:9:131:9 | { ... } | main.rs:125:5:133:5 | match x6 { ... } | |
+| main.rs:130:13:130:21 | print_i64 | main.rs:130:23:130:24 | y1 | |
+| main.rs:130:13:130:25 | print_i64(...) | main.rs:129:9:131:9 | { ... } | |
+| main.rs:130:23:130:24 | y1 | main.rs:130:13:130:25 | print_i64(...) | |
+| main.rs:132:9:132:12 | None | main.rs:132:9:132:12 | None | |
+| main.rs:132:9:132:12 | None | main.rs:132:17:132:25 | print_str | match |
+| main.rs:132:17:132:25 | print_str | main.rs:132:27:132:32 | "NONE" | |
+| main.rs:132:17:132:33 | print_str(...) | main.rs:125:5:133:5 | match x6 { ... } | |
+| main.rs:132:27:132:32 | "NONE" | main.rs:132:17:132:33 | print_str(...) | |
+| main.rs:135:5:135:13 | print_i64 | main.rs:135:15:135:16 | y1 | |
+| main.rs:135:5:135:17 | print_i64(...) | main.rs:121:21:136:1 | { ... } | |
+| main.rs:135:5:135:18 | ExprStmt | main.rs:135:5:135:13 | print_i64 | |
+| main.rs:135:15:135:16 | y1 | main.rs:135:5:135:17 | print_i64(...) | |
+| main.rs:138:1:167:1 | enter fn match_pattern2 | main.rs:139:5:139:36 | let ... = ... | |
+| main.rs:138:1:167:1 | exit fn match_pattern2 (normal) | main.rs:138:1:167:1 | exit fn match_pattern2 | |
+| main.rs:138:21:167:1 | { ... } | main.rs:138:1:167:1 | exit fn match_pattern2 (normal) | |
+| main.rs:139:5:139:36 | let ... = ... | main.rs:139:20:139:20 | 2 | |
+| main.rs:139:9:139:15 | numbers | main.rs:139:9:139:15 | numbers | |
+| main.rs:139:9:139:15 | numbers | main.rs:141:5:154:5 | ExprStmt | match |
+| main.rs:139:19:139:35 | TupleExpr | main.rs:139:9:139:15 | numbers | |
+| main.rs:139:20:139:20 | 2 | main.rs:139:23:139:23 | 4 | |
+| main.rs:139:23:139:23 | 4 | main.rs:139:26:139:26 | 8 | |
+| main.rs:139:26:139:26 | 8 | main.rs:139:29:139:30 | 16 | |
+| main.rs:139:29:139:30 | 16 | main.rs:139:33:139:34 | 32 | |
+| main.rs:139:33:139:34 | 32 | main.rs:139:19:139:35 | TupleExpr | |
+| main.rs:141:5:154:5 | ExprStmt | main.rs:141:11:141:17 | numbers | |
+| main.rs:141:5:154:5 | match numbers { ... } | main.rs:156:11:156:17 | numbers | |
+| main.rs:141:11:141:17 | numbers | main.rs:143:9:149:9 | TuplePat | |
+| main.rs:143:9:149:9 | TuplePat | main.rs:144:13:144:17 | first | match |
+| main.rs:144:13:144:17 | first | main.rs:144:13:144:17 | first | |
+| main.rs:144:13:144:17 | first | main.rs:145:13:145:13 | _ | match |
+| main.rs:145:13:145:13 | _ | main.rs:146:13:146:17 | third | match |
+| main.rs:146:13:146:17 | third | main.rs:146:13:146:17 | third | |
+| main.rs:146:13:146:17 | third | main.rs:147:13:147:13 | _ | match |
+| main.rs:147:13:147:13 | _ | main.rs:148:13:148:17 | fifth | match |
+| main.rs:148:13:148:17 | fifth | main.rs:148:13:148:17 | fifth | |
+| main.rs:148:13:148:17 | fifth | main.rs:150:13:150:29 | ExprStmt | match |
+| main.rs:149:14:153:9 | { ... } | main.rs:141:5:154:5 | match numbers { ... } | |
+| main.rs:150:13:150:21 | print_i64 | main.rs:150:23:150:27 | first | |
+| main.rs:150:13:150:28 | print_i64(...) | main.rs:151:13:151:29 | ExprStmt | |
| main.rs:150:13:150:29 | ExprStmt | main.rs:150:13:150:21 | print_i64 | |
-| main.rs:150:23:150:27 | fifth | main.rs:150:13:150:28 | print_i64(...) | |
-| main.rs:154:5:164:5 | match numbers { ... } | main.rs:136:21:165:1 | { ... } | |
-| main.rs:154:11:154:17 | numbers | main.rs:156:9:160:9 | TuplePat | |
-| main.rs:156:9:160:9 | TuplePat | main.rs:157:13:157:17 | first | match |
-| main.rs:157:13:157:17 | first | main.rs:157:13:157:17 | first | |
-| main.rs:157:13:157:17 | first | main.rs:158:13:158:14 | .. | match |
-| main.rs:158:13:158:14 | .. | main.rs:159:13:159:16 | last | match |
-| main.rs:159:13:159:16 | last | main.rs:159:13:159:16 | last | |
-| main.rs:159:13:159:16 | last | main.rs:161:13:161:29 | ExprStmt | match |
-| main.rs:160:14:163:9 | { ... } | main.rs:154:5:164:5 | match numbers { ... } | |
-| main.rs:161:13:161:21 | print_i64 | main.rs:161:23:161:27 | first | |
-| main.rs:161:13:161:28 | print_i64(...) | main.rs:162:13:162:28 | ExprStmt | |
-| main.rs:161:13:161:29 | ExprStmt | main.rs:161:13:161:21 | print_i64 | |
-| main.rs:161:23:161:27 | first | main.rs:161:13:161:28 | print_i64(...) | |
-| main.rs:162:13:162:21 | print_i64 | main.rs:162:23:162:26 | last | |
-| main.rs:162:13:162:27 | print_i64(...) | main.rs:160:14:163:9 | { ... } | |
-| main.rs:162:13:162:28 | ExprStmt | main.rs:162:13:162:21 | print_i64 | |
-| main.rs:162:23:162:26 | last | main.rs:162:13:162:27 | print_i64(...) | |
-| main.rs:167:1:175:1 | enter fn match_pattern3 | main.rs:168:5:168:38 | let ... = ... | |
-| main.rs:167:1:175:1 | exit fn match_pattern3 (normal) | main.rs:167:1:175:1 | exit fn match_pattern3 | |
-| main.rs:167:21:175:1 | { ... } | main.rs:167:1:175:1 | exit fn match_pattern3 (normal) | |
-| main.rs:168:5:168:38 | let ... = ... | main.rs:168:25:168:27 | "x" | |
-| main.rs:168:9:168:10 | p2 | main.rs:168:9:168:10 | p2 | |
-| main.rs:168:9:168:10 | p2 | main.rs:170:11:170:12 | p2 | match |
-| main.rs:168:14:168:37 | Point {...} | main.rs:168:9:168:10 | p2 | |
-| main.rs:168:25:168:27 | "x" | main.rs:168:33:168:35 | "y" | |
-| main.rs:168:33:168:35 | "y" | main.rs:168:14:168:37 | Point {...} | |
-| main.rs:170:5:174:5 | match p2 { ... } | main.rs:167:21:175:1 | { ... } | |
-| main.rs:170:11:170:12 | p2 | main.rs:171:9:173:9 | Point {...} | |
-| main.rs:171:9:173:9 | Point {...} | main.rs:172:16:172:17 | x7 | match |
-| main.rs:172:16:172:17 | x7 | main.rs:172:16:172:17 | x7 | |
-| main.rs:172:16:172:17 | x7 | main.rs:172:20:172:21 | .. | match |
-| main.rs:172:20:172:21 | .. | main.rs:173:14:173:22 | print_str | match |
-| main.rs:173:14:173:22 | print_str | main.rs:173:24:173:25 | x7 | |
-| main.rs:173:14:173:26 | print_str(...) | main.rs:170:5:174:5 | match p2 { ... } | |
-| main.rs:173:24:173:25 | x7 | main.rs:173:14:173:26 | print_str(...) | |
-| main.rs:181:1:198:1 | enter fn match_pattern4 | main.rs:182:5:182:39 | let ... = ... | |
-| main.rs:181:1:198:1 | exit fn match_pattern4 (normal) | main.rs:181:1:198:1 | exit fn match_pattern4 | |
-| main.rs:181:21:198:1 | { ... } | main.rs:181:1:198:1 | exit fn match_pattern4 (normal) | |
-| main.rs:182:5:182:39 | let ... = ... | main.rs:182:36:182:36 | 0 | |
-| main.rs:182:9:182:11 | msg | main.rs:182:9:182:11 | msg | |
-| main.rs:182:9:182:11 | msg | main.rs:184:11:184:13 | msg | match |
-| main.rs:182:15:182:38 | ...::Hello {...} | main.rs:182:9:182:11 | msg | |
-| main.rs:182:36:182:36 | 0 | main.rs:182:15:182:38 | ...::Hello {...} | |
-| main.rs:184:5:197:5 | match msg { ... } | main.rs:181:21:198:1 | { ... } | |
-| main.rs:184:11:184:13 | msg | main.rs:186:9:188:9 | ...::Hello {...} | |
-| main.rs:186:9:188:9 | ...::Hello {...} | main.rs:187:31:187:35 | RangePat | match |
-| main.rs:186:9:188:9 | ...::Hello {...} | main.rs:189:9:189:38 | ...::Hello {...} | no-match |
-| main.rs:187:17:187:27 | id_variable | main.rs:187:17:187:35 | id_variable @ ... | |
-| main.rs:187:17:187:35 | id_variable @ ... | main.rs:188:14:188:22 | print_i64 | match |
-| main.rs:187:31:187:31 | 3 | main.rs:187:31:187:31 | 3 | |
-| main.rs:187:31:187:31 | 3 | main.rs:187:35:187:35 | 7 | match |
-| main.rs:187:31:187:31 | 3 | main.rs:189:9:189:38 | ...::Hello {...} | no-match |
-| main.rs:187:31:187:35 | RangePat | main.rs:187:31:187:31 | 3 | match |
-| main.rs:187:35:187:35 | 7 | main.rs:187:17:187:27 | id_variable | match |
-| main.rs:187:35:187:35 | 7 | main.rs:187:35:187:35 | 7 | |
-| main.rs:187:35:187:35 | 7 | main.rs:189:9:189:38 | ...::Hello {...} | no-match |
-| main.rs:188:14:188:22 | print_i64 | main.rs:188:24:188:34 | id_variable | |
-| main.rs:188:14:188:35 | print_i64(...) | main.rs:184:5:197:5 | match msg { ... } | |
-| main.rs:188:24:188:34 | id_variable | main.rs:188:14:188:35 | print_i64(...) | |
-| main.rs:189:9:189:38 | ...::Hello {...} | main.rs:189:30:189:36 | RangePat | match |
-| main.rs:189:9:189:38 | ...::Hello {...} | main.rs:192:9:192:29 | ...::Hello {...} | no-match |
-| main.rs:189:30:189:31 | 10 | main.rs:189:30:189:31 | 10 | |
-| main.rs:189:30:189:31 | 10 | main.rs:189:35:189:36 | 12 | match |
-| main.rs:189:30:189:31 | 10 | main.rs:192:9:192:29 | ...::Hello {...} | no-match |
-| main.rs:189:30:189:36 | RangePat | main.rs:189:30:189:31 | 10 | match |
-| main.rs:189:35:189:36 | 12 | main.rs:189:35:189:36 | 12 | |
-| main.rs:189:35:189:36 | 12 | main.rs:190:22:190:51 | ExprStmt | match |
-| main.rs:189:35:189:36 | 12 | main.rs:192:9:192:29 | ...::Hello {...} | no-match |
-| main.rs:189:43:191:9 | { ... } | main.rs:184:5:197:5 | match msg { ... } | |
-| main.rs:190:13:190:20 | ...::_print | main.rs:190:22:190:51 | "Found an id in another range\\... | |
-| main.rs:190:13:190:52 | MacroExpr | main.rs:189:43:191:9 | { ... } | |
-| main.rs:190:13:190:52 | println!... | main.rs:190:13:190:52 | MacroExpr | |
-| main.rs:190:22:190:51 | "Found an id in another range\\... | main.rs:190:22:190:51 | FormatArgsExpr | |
-| main.rs:190:22:190:51 | ...::_print(...) | main.rs:190:22:190:51 | { ... } | |
-| main.rs:190:22:190:51 | ...::format_args_nl!... | main.rs:190:22:190:51 | MacroExpr | |
-| main.rs:190:22:190:51 | ExprStmt | main.rs:190:13:190:20 | ...::_print | |
-| main.rs:190:22:190:51 | FormatArgsExpr | main.rs:190:22:190:51 | ...::format_args_nl!... | |
-| main.rs:190:22:190:51 | MacroBlockExpr | main.rs:190:13:190:52 | println!... | |
-| main.rs:190:22:190:51 | MacroExpr | main.rs:190:22:190:51 | ...::_print(...) | |
-| main.rs:190:22:190:51 | { ... } | main.rs:190:22:190:51 | MacroBlockExpr | |
-| main.rs:192:9:192:29 | ...::Hello {...} | main.rs:192:26:192:27 | id | match |
-| main.rs:192:26:192:27 | id | main.rs:192:26:192:27 | id | |
-| main.rs:192:26:192:27 | id | main.rs:195:13:195:21 | print_i64 | match |
-| main.rs:194:9:196:9 | { ... } | main.rs:184:5:197:5 | match msg { ... } | |
-| main.rs:195:13:195:21 | print_i64 | main.rs:195:23:195:24 | id | |
-| main.rs:195:13:195:25 | print_i64(...) | main.rs:194:9:196:9 | { ... } | |
-| main.rs:195:23:195:24 | id | main.rs:195:13:195:25 | print_i64(...) | |
-| main.rs:205:1:211:1 | enter fn match_pattern5 | main.rs:206:5:206:34 | let ... = ... | |
-| main.rs:205:1:211:1 | exit fn match_pattern5 (normal) | main.rs:205:1:211:1 | exit fn match_pattern5 | |
-| main.rs:205:21:211:1 | { ... } | main.rs:205:1:211:1 | exit fn match_pattern5 (normal) | |
-| main.rs:206:5:206:34 | let ... = ... | main.rs:206:18:206:29 | ...::Left | |
-| main.rs:206:9:206:14 | either | main.rs:206:9:206:14 | either | |
-| main.rs:206:9:206:14 | either | main.rs:207:11:207:16 | either | match |
-| main.rs:206:18:206:29 | ...::Left | main.rs:206:31:206:32 | 32 | |
-| main.rs:206:18:206:33 | ...::Left(...) | main.rs:206:9:206:14 | either | |
-| main.rs:206:31:206:32 | 32 | main.rs:206:18:206:33 | ...::Left(...) | |
-| main.rs:207:5:210:5 | match either { ... } | main.rs:205:21:211:1 | { ... } | |
-| main.rs:207:11:207:16 | either | main.rs:208:9:208:24 | ...::Left(...) | |
-| main.rs:208:9:208:24 | ...::Left(...) | main.rs:208:22:208:23 | a3 | match |
-| main.rs:208:9:208:24 | ...::Left(...) | main.rs:208:28:208:44 | ...::Right(...) | no-match |
-| main.rs:208:9:208:44 | ... \| ... | main.rs:209:16:209:24 | print_i64 | match |
-| main.rs:208:22:208:23 | a3 | main.rs:208:9:208:44 | ... \| ... | match |
-| main.rs:208:22:208:23 | a3 | main.rs:208:22:208:23 | a3 | |
-| main.rs:208:28:208:44 | ...::Right(...) | main.rs:208:42:208:43 | a3 | match |
-| main.rs:208:42:208:43 | a3 | main.rs:208:9:208:44 | ... \| ... | match |
-| main.rs:208:42:208:43 | a3 | main.rs:208:42:208:43 | a3 | |
-| main.rs:209:16:209:24 | print_i64 | main.rs:209:26:209:27 | a3 | |
-| main.rs:209:16:209:28 | print_i64(...) | main.rs:207:5:210:5 | match either { ... } | |
-| main.rs:209:26:209:27 | a3 | main.rs:209:16:209:28 | print_i64(...) | |
-| main.rs:219:1:233:1 | enter fn match_pattern6 | main.rs:220:5:220:37 | let ... = ... | |
-| main.rs:219:1:233:1 | exit fn match_pattern6 (normal) | main.rs:219:1:233:1 | exit fn match_pattern6 | |
-| main.rs:219:21:233:1 | { ... } | main.rs:219:1:233:1 | exit fn match_pattern6 (normal) | |
-| main.rs:220:5:220:37 | let ... = ... | main.rs:220:14:220:32 | ...::Second | |
-| main.rs:220:9:220:10 | tv | main.rs:220:9:220:10 | tv | |
-| main.rs:220:9:220:10 | tv | main.rs:221:5:224:5 | ExprStmt | match |
-| main.rs:220:14:220:32 | ...::Second | main.rs:220:34:220:35 | 62 | |
-| main.rs:220:14:220:36 | ...::Second(...) | main.rs:220:9:220:10 | tv | |
-| main.rs:220:34:220:35 | 62 | main.rs:220:14:220:36 | ...::Second(...) | |
-| main.rs:221:5:224:5 | ExprStmt | main.rs:221:11:221:12 | tv | |
-| main.rs:221:5:224:5 | match tv { ... } | main.rs:225:5:228:5 | ExprStmt | |
-| main.rs:221:11:221:12 | tv | main.rs:222:9:222:30 | ...::First(...) | |
-| main.rs:222:9:222:30 | ...::First(...) | main.rs:222:28:222:29 | a4 | match |
-| main.rs:222:9:222:30 | ...::First(...) | main.rs:222:34:222:56 | ...::Second(...) | no-match |
-| main.rs:222:9:222:81 | ... \| ... \| ... | main.rs:223:16:223:24 | print_i64 | match |
-| main.rs:222:28:222:29 | a4 | main.rs:222:9:222:81 | ... \| ... \| ... | match |
-| main.rs:222:28:222:29 | a4 | main.rs:222:28:222:29 | a4 | |
-| main.rs:222:34:222:56 | ...::Second(...) | main.rs:222:54:222:55 | a4 | match |
-| main.rs:222:34:222:56 | ...::Second(...) | main.rs:222:60:222:81 | ...::Third(...) | no-match |
-| main.rs:222:54:222:55 | a4 | main.rs:222:9:222:81 | ... \| ... \| ... | match |
-| main.rs:222:54:222:55 | a4 | main.rs:222:54:222:55 | a4 | |
-| main.rs:222:60:222:81 | ...::Third(...) | main.rs:222:79:222:80 | a4 | match |
-| main.rs:222:79:222:80 | a4 | main.rs:222:9:222:81 | ... \| ... \| ... | match |
-| main.rs:222:79:222:80 | a4 | main.rs:222:79:222:80 | a4 | |
-| main.rs:223:16:223:24 | print_i64 | main.rs:223:26:223:27 | a4 | |
-| main.rs:223:16:223:28 | print_i64(...) | main.rs:221:5:224:5 | match tv { ... } | |
-| main.rs:223:26:223:27 | a4 | main.rs:223:16:223:28 | print_i64(...) | |
-| main.rs:225:5:228:5 | ExprStmt | main.rs:225:11:225:12 | tv | |
-| main.rs:225:5:228:5 | match tv { ... } | main.rs:229:11:229:12 | tv | |
-| main.rs:225:11:225:12 | tv | main.rs:226:10:226:31 | ...::First(...) | |
-| main.rs:226:9:226:83 | ... \| ... | main.rs:227:16:227:24 | print_i64 | match |
-| main.rs:226:10:226:31 | ...::First(...) | main.rs:226:29:226:30 | a5 | match |
-| main.rs:226:10:226:31 | ...::First(...) | main.rs:226:35:226:57 | ...::Second(...) | no-match |
-| main.rs:226:10:226:57 | [match(false)] ... \| ... | main.rs:226:62:226:83 | ...::Third(...) | no-match |
-| main.rs:226:10:226:57 | [match(true)] ... \| ... | main.rs:226:9:226:83 | ... \| ... | match |
-| main.rs:226:29:226:30 | a5 | main.rs:226:10:226:57 | [match(true)] ... \| ... | match |
-| main.rs:226:29:226:30 | a5 | main.rs:226:29:226:30 | a5 | |
-| main.rs:226:35:226:57 | ...::Second(...) | main.rs:226:10:226:57 | [match(false)] ... \| ... | no-match |
-| main.rs:226:35:226:57 | ...::Second(...) | main.rs:226:55:226:56 | a5 | match |
-| main.rs:226:55:226:56 | a5 | main.rs:226:10:226:57 | [match(true)] ... \| ... | match |
-| main.rs:226:55:226:56 | a5 | main.rs:226:55:226:56 | a5 | |
-| main.rs:226:62:226:83 | ...::Third(...) | main.rs:226:81:226:82 | a5 | match |
-| main.rs:226:81:226:82 | a5 | main.rs:226:9:226:83 | ... \| ... | match |
-| main.rs:226:81:226:82 | a5 | main.rs:226:81:226:82 | a5 | |
-| main.rs:227:16:227:24 | print_i64 | main.rs:227:26:227:27 | a5 | |
-| main.rs:227:16:227:28 | print_i64(...) | main.rs:225:5:228:5 | match tv { ... } | |
-| main.rs:227:26:227:27 | a5 | main.rs:227:16:227:28 | print_i64(...) | |
-| main.rs:229:5:232:5 | match tv { ... } | main.rs:219:21:233:1 | { ... } | |
-| main.rs:229:11:229:12 | tv | main.rs:230:9:230:30 | ...::First(...) | |
-| main.rs:230:9:230:30 | ...::First(...) | main.rs:230:28:230:29 | a6 | match |
-| main.rs:230:9:230:30 | ...::First(...) | main.rs:230:35:230:57 | ...::Second(...) | no-match |
-| main.rs:230:9:230:83 | ... \| ... | main.rs:231:16:231:24 | print_i64 | match |
-| main.rs:230:28:230:29 | a6 | main.rs:230:9:230:83 | ... \| ... | match |
-| main.rs:230:28:230:29 | a6 | main.rs:230:28:230:29 | a6 | |
-| main.rs:230:35:230:57 | ...::Second(...) | main.rs:230:55:230:56 | a6 | match |
-| main.rs:230:35:230:57 | ...::Second(...) | main.rs:230:61:230:82 | ...::Third(...) | no-match |
-| main.rs:230:35:230:82 | ... \| ... | main.rs:230:9:230:83 | ... \| ... | match |
-| main.rs:230:55:230:56 | a6 | main.rs:230:35:230:82 | ... \| ... | match |
-| main.rs:230:55:230:56 | a6 | main.rs:230:55:230:56 | a6 | |
-| main.rs:230:61:230:82 | ...::Third(...) | main.rs:230:80:230:81 | a6 | match |
-| main.rs:230:80:230:81 | a6 | main.rs:230:35:230:82 | ... \| ... | match |
-| main.rs:230:80:230:81 | a6 | main.rs:230:80:230:81 | a6 | |
-| main.rs:231:16:231:24 | print_i64 | main.rs:231:26:231:27 | a6 | |
-| main.rs:231:16:231:28 | print_i64(...) | main.rs:229:5:232:5 | match tv { ... } | |
-| main.rs:231:26:231:27 | a6 | main.rs:231:16:231:28 | print_i64(...) | |
-| main.rs:235:1:243:1 | enter fn match_pattern7 | main.rs:236:5:236:34 | let ... = ... | |
-| main.rs:235:1:243:1 | exit fn match_pattern7 (normal) | main.rs:235:1:243:1 | exit fn match_pattern7 | |
-| main.rs:235:21:243:1 | { ... } | main.rs:235:1:243:1 | exit fn match_pattern7 (normal) | |
-| main.rs:236:5:236:34 | let ... = ... | main.rs:236:18:236:29 | ...::Left | |
-| main.rs:236:9:236:14 | either | main.rs:236:9:236:14 | either | |
-| main.rs:236:9:236:14 | either | main.rs:237:11:237:16 | either | match |
-| main.rs:236:18:236:29 | ...::Left | main.rs:236:31:236:32 | 32 | |
-| main.rs:236:18:236:33 | ...::Left(...) | main.rs:236:9:236:14 | either | |
-| main.rs:236:31:236:32 | 32 | main.rs:236:18:236:33 | ...::Left(...) | |
-| main.rs:237:5:242:5 | match either { ... } | main.rs:235:21:243:1 | { ... } | |
-| main.rs:237:11:237:16 | either | main.rs:238:9:238:24 | ...::Left(...) | |
-| main.rs:238:9:238:24 | ...::Left(...) | main.rs:238:22:238:23 | a7 | match |
-| main.rs:238:9:238:24 | ...::Left(...) | main.rs:238:28:238:44 | ...::Right(...) | no-match |
-| main.rs:238:9:238:44 | [match(false)] ... \| ... | main.rs:241:9:241:9 | _ | no-match |
-| main.rs:238:9:238:44 | [match(true)] ... \| ... | main.rs:239:16:239:17 | a7 | match |
-| main.rs:238:22:238:23 | a7 | main.rs:238:9:238:44 | [match(true)] ... \| ... | match |
-| main.rs:238:22:238:23 | a7 | main.rs:238:22:238:23 | a7 | |
-| main.rs:238:28:238:44 | ...::Right(...) | main.rs:238:9:238:44 | [match(false)] ... \| ... | no-match |
-| main.rs:238:28:238:44 | ...::Right(...) | main.rs:238:42:238:43 | a7 | match |
-| main.rs:238:42:238:43 | a7 | main.rs:238:9:238:44 | [match(true)] ... \| ... | match |
-| main.rs:238:42:238:43 | a7 | main.rs:238:42:238:43 | a7 | |
-| main.rs:239:16:239:17 | a7 | main.rs:239:21:239:21 | 0 | |
-| main.rs:239:16:239:21 | ... > ... | main.rs:240:16:240:24 | print_i64 | true |
-| main.rs:239:16:239:21 | ... > ... | main.rs:241:9:241:9 | _ | false |
-| main.rs:239:21:239:21 | 0 | main.rs:239:16:239:21 | ... > ... | |
-| main.rs:240:16:240:24 | print_i64 | main.rs:240:26:240:27 | a7 | |
-| main.rs:240:16:240:28 | print_i64(...) | main.rs:237:5:242:5 | match either { ... } | |
-| main.rs:240:26:240:27 | a7 | main.rs:240:16:240:28 | print_i64(...) | |
-| main.rs:241:9:241:9 | _ | main.rs:241:14:241:15 | TupleExpr | match |
-| main.rs:241:14:241:15 | TupleExpr | main.rs:237:5:242:5 | match either { ... } | |
-| main.rs:245:1:260:1 | enter fn match_pattern8 | main.rs:246:5:246:34 | let ... = ... | |
-| main.rs:245:1:260:1 | exit fn match_pattern8 (normal) | main.rs:245:1:260:1 | exit fn match_pattern8 | |
-| main.rs:245:21:260:1 | { ... } | main.rs:245:1:260:1 | exit fn match_pattern8 (normal) | |
-| main.rs:246:5:246:34 | let ... = ... | main.rs:246:18:246:29 | ...::Left | |
-| main.rs:246:9:246:14 | either | main.rs:246:9:246:14 | either | |
-| main.rs:246:9:246:14 | either | main.rs:248:11:248:16 | either | match |
-| main.rs:246:18:246:29 | ...::Left | main.rs:246:31:246:32 | 32 | |
-| main.rs:246:18:246:33 | ...::Left(...) | main.rs:246:9:246:14 | either | |
-| main.rs:246:31:246:32 | 32 | main.rs:246:18:246:33 | ...::Left(...) | |
-| main.rs:248:5:259:5 | match either { ... } | main.rs:245:21:260:1 | { ... } | |
-| main.rs:248:11:248:16 | either | main.rs:250:14:250:30 | ...::Left(...) | |
-| main.rs:249:9:250:52 | ref e @ ... | main.rs:252:13:252:27 | ExprStmt | match |
-| main.rs:249:13:249:13 | e | main.rs:249:9:250:52 | ref e @ ... | |
-| main.rs:250:14:250:30 | ...::Left(...) | main.rs:250:27:250:29 | a11 | match |
-| main.rs:250:14:250:30 | ...::Left(...) | main.rs:250:34:250:51 | ...::Right(...) | no-match |
-| main.rs:250:14:250:51 | [match(false)] ... \| ... | main.rs:258:9:258:9 | _ | no-match |
-| main.rs:250:14:250:51 | [match(true)] ... \| ... | main.rs:249:13:249:13 | e | match |
-| main.rs:250:27:250:29 | a11 | main.rs:250:14:250:51 | [match(true)] ... \| ... | match |
-| main.rs:250:27:250:29 | a11 | main.rs:250:27:250:29 | a11 | |
-| main.rs:250:34:250:51 | ...::Right(...) | main.rs:250:14:250:51 | [match(false)] ... \| ... | no-match |
-| main.rs:250:34:250:51 | ...::Right(...) | main.rs:250:48:250:50 | a11 | match |
-| main.rs:250:48:250:50 | a11 | main.rs:250:14:250:51 | [match(true)] ... \| ... | match |
-| main.rs:250:48:250:50 | a11 | main.rs:250:48:250:50 | a11 | |
-| main.rs:251:12:257:9 | { ... } | main.rs:248:5:259:5 | match either { ... } | |
-| main.rs:252:13:252:21 | print_i64 | main.rs:252:23:252:25 | a11 | |
-| main.rs:252:13:252:26 | print_i64(...) | main.rs:254:15:254:15 | e | |
-| main.rs:252:13:252:27 | ExprStmt | main.rs:252:13:252:21 | print_i64 | |
-| main.rs:252:23:252:25 | a11 | main.rs:252:13:252:26 | print_i64(...) | |
-| main.rs:253:13:256:13 | if ... {...} | main.rs:251:12:257:9 | { ... } | |
-| main.rs:253:16:254:15 | [boolean(false)] let ... = e | main.rs:253:13:256:13 | if ... {...} | false |
-| main.rs:253:16:254:15 | [boolean(true)] let ... = e | main.rs:255:17:255:32 | ExprStmt | true |
-| main.rs:253:20:253:36 | ...::Left(...) | main.rs:253:16:254:15 | [boolean(false)] let ... = e | no-match |
-| main.rs:253:20:253:36 | ...::Left(...) | main.rs:253:33:253:35 | a12 | match |
-| main.rs:253:33:253:35 | a12 | main.rs:253:16:254:15 | [boolean(true)] let ... = e | match |
-| main.rs:253:33:253:35 | a12 | main.rs:253:33:253:35 | a12 | |
-| main.rs:254:15:254:15 | e | main.rs:253:20:253:36 | ...::Left(...) | |
-| main.rs:254:17:256:13 | { ... } | main.rs:253:13:256:13 | if ... {...} | |
-| main.rs:255:17:255:25 | print_i64 | main.rs:255:28:255:30 | a12 | |
-| main.rs:255:17:255:31 | print_i64(...) | main.rs:254:17:256:13 | { ... } | |
-| main.rs:255:17:255:32 | ExprStmt | main.rs:255:17:255:25 | print_i64 | |
-| main.rs:255:27:255:30 | * ... | main.rs:255:17:255:31 | print_i64(...) | |
-| main.rs:255:28:255:30 | a12 | main.rs:255:27:255:30 | * ... | |
-| main.rs:258:9:258:9 | _ | main.rs:258:14:258:15 | TupleExpr | match |
-| main.rs:258:14:258:15 | TupleExpr | main.rs:248:5:259:5 | match either { ... } | |
-| main.rs:269:1:275:1 | enter fn match_pattern9 | main.rs:270:5:270:36 | let ... = ... | |
-| main.rs:269:1:275:1 | exit fn match_pattern9 (normal) | main.rs:269:1:275:1 | exit fn match_pattern9 | |
-| main.rs:269:21:275:1 | { ... } | main.rs:269:1:275:1 | exit fn match_pattern9 (normal) | |
-| main.rs:270:5:270:36 | let ... = ... | main.rs:270:14:270:31 | ...::Second | |
-| main.rs:270:9:270:10 | fv | main.rs:270:9:270:10 | fv | |
-| main.rs:270:9:270:10 | fv | main.rs:271:11:271:12 | fv | match |
-| main.rs:270:14:270:31 | ...::Second | main.rs:270:33:270:34 | 62 | |
-| main.rs:270:14:270:35 | ...::Second(...) | main.rs:270:9:270:10 | fv | |
-| main.rs:270:33:270:34 | 62 | main.rs:270:14:270:35 | ...::Second(...) | |
-| main.rs:271:5:274:5 | match fv { ... } | main.rs:269:21:275:1 | { ... } | |
-| main.rs:271:11:271:12 | fv | main.rs:272:9:272:30 | ...::First(...) | |
-| main.rs:272:9:272:30 | ...::First(...) | main.rs:272:27:272:29 | a13 | match |
-| main.rs:272:9:272:30 | ...::First(...) | main.rs:272:35:272:57 | ...::Second(...) | no-match |
-| main.rs:272:9:272:109 | ... \| ... \| ... | main.rs:273:16:273:24 | print_i64 | match |
-| main.rs:272:27:272:29 | a13 | main.rs:272:9:272:109 | ... \| ... \| ... | match |
-| main.rs:272:27:272:29 | a13 | main.rs:272:27:272:29 | a13 | |
-| main.rs:272:35:272:57 | ...::Second(...) | main.rs:272:54:272:56 | a13 | match |
-| main.rs:272:35:272:57 | ...::Second(...) | main.rs:272:61:272:82 | ...::Third(...) | no-match |
-| main.rs:272:35:272:82 | [match(false)] ... \| ... | main.rs:272:87:272:109 | ...::Fourth(...) | no-match |
-| main.rs:272:35:272:82 | [match(true)] ... \| ... | main.rs:272:9:272:109 | ... \| ... \| ... | match |
-| main.rs:272:54:272:56 | a13 | main.rs:272:35:272:82 | [match(true)] ... \| ... | match |
-| main.rs:272:54:272:56 | a13 | main.rs:272:54:272:56 | a13 | |
-| main.rs:272:61:272:82 | ...::Third(...) | main.rs:272:35:272:82 | [match(false)] ... \| ... | no-match |
-| main.rs:272:61:272:82 | ...::Third(...) | main.rs:272:79:272:81 | a13 | match |
-| main.rs:272:79:272:81 | a13 | main.rs:272:35:272:82 | [match(true)] ... \| ... | match |
-| main.rs:272:79:272:81 | a13 | main.rs:272:79:272:81 | a13 | |
-| main.rs:272:87:272:109 | ...::Fourth(...) | main.rs:272:106:272:108 | a13 | match |
-| main.rs:272:106:272:108 | a13 | main.rs:272:9:272:109 | ... \| ... \| ... | match |
-| main.rs:272:106:272:108 | a13 | main.rs:272:106:272:108 | a13 | |
-| main.rs:273:16:273:24 | print_i64 | main.rs:273:26:273:28 | a13 | |
-| main.rs:273:16:273:29 | print_i64(...) | main.rs:271:5:274:5 | match fv { ... } | |
-| main.rs:273:26:273:28 | a13 | main.rs:273:16:273:29 | print_i64(...) | |
-| main.rs:277:1:291:1 | enter fn match_pattern10 | main.rs:279:5:279:20 | let ... = ... | |
-| main.rs:277:1:291:1 | exit fn match_pattern10 (normal) | main.rs:277:1:291:1 | exit fn match_pattern10 | |
-| main.rs:278:22:291:1 | { ... } | main.rs:277:1:291:1 | exit fn match_pattern10 (normal) | |
-| main.rs:279:5:279:20 | let ... = ... | main.rs:279:12:279:15 | Some | |
-| main.rs:279:9:279:9 | x | main.rs:279:9:279:9 | x | |
-| main.rs:279:9:279:9 | x | main.rs:281:7:281:7 | x | match |
-| main.rs:279:12:279:15 | Some | main.rs:279:17:279:18 | 42 | |
-| main.rs:279:12:279:19 | Some(...) | main.rs:279:9:279:9 | x | |
-| main.rs:279:17:279:18 | 42 | main.rs:279:12:279:19 | Some(...) | |
-| main.rs:280:5:290:5 | if ... {...} else {...} | main.rs:278:22:291:1 | { ... } | |
-| main.rs:280:8:281:7 | [boolean(false)] let ... = x | main.rs:280:8:283:9 | [boolean(false)] ... && ... | false |
-| main.rs:280:8:281:7 | [boolean(true)] let ... = x | main.rs:283:5:283:5 | x | true |
-| main.rs:280:8:283:9 | [boolean(false)] ... && ... | main.rs:287:9:288:14 | let ... = x | false |
-| main.rs:280:8:283:9 | [boolean(true)] ... && ... | main.rs:285:9:285:21 | ExprStmt | true |
-| main.rs:280:12:280:18 | Some(...) | main.rs:280:8:281:7 | [boolean(false)] let ... = x | no-match |
-| main.rs:280:12:280:18 | Some(...) | main.rs:280:17:280:17 | x | match |
-| main.rs:280:17:280:17 | x | main.rs:280:8:281:7 | [boolean(true)] let ... = x | match |
-| main.rs:280:17:280:17 | x | main.rs:280:17:280:17 | x | |
-| main.rs:281:7:281:7 | x | main.rs:280:12:280:18 | Some(...) | |
-| main.rs:283:5:283:5 | x | main.rs:283:9:283:9 | 0 | |
-| main.rs:283:5:283:9 | ... > ... | main.rs:280:8:283:9 | [boolean(false)] ... && ... | false |
-| main.rs:283:5:283:9 | ... > ... | main.rs:280:8:283:9 | [boolean(true)] ... && ... | true |
-| main.rs:283:9:283:9 | 0 | main.rs:283:5:283:9 | ... > ... | |
-| main.rs:284:5:286:5 | { ... } | main.rs:280:5:290:5 | if ... {...} else {...} | |
-| main.rs:285:9:285:17 | print_i64 | main.rs:285:19:285:19 | x | |
-| main.rs:285:9:285:20 | print_i64(...) | main.rs:284:5:286:5 | { ... } | |
-| main.rs:285:9:285:21 | ExprStmt | main.rs:285:9:285:17 | print_i64 | |
-| main.rs:285:19:285:19 | x | main.rs:285:9:285:20 | print_i64(...) | |
-| main.rs:286:12:290:5 | { ... } | main.rs:280:5:290:5 | if ... {...} else {...} | |
-| main.rs:287:9:288:14 | let ... = x | main.rs:288:13:288:13 | x | |
-| main.rs:287:13:287:13 | x | main.rs:287:13:287:13 | x | |
-| main.rs:287:13:287:13 | x | main.rs:289:9:289:30 | ExprStmt | match |
-| main.rs:288:13:288:13 | x | main.rs:287:13:287:13 | x | |
-| main.rs:289:9:289:17 | print_i64 | main.rs:289:19:289:19 | x | |
-| main.rs:289:9:289:29 | print_i64(...) | main.rs:286:12:290:5 | { ... } | |
-| main.rs:289:9:289:30 | ExprStmt | main.rs:289:9:289:17 | print_i64 | |
-| main.rs:289:19:289:19 | x | main.rs:289:19:289:28 | x.unwrap() | |
-| main.rs:289:19:289:28 | x.unwrap() | main.rs:289:9:289:29 | print_i64(...) | |
-| main.rs:293:1:310:1 | enter fn match_pattern11 | main.rs:295:5:295:21 | let ... = ... | |
-| main.rs:293:1:310:1 | exit fn match_pattern11 (normal) | main.rs:293:1:310:1 | exit fn match_pattern11 | |
-| main.rs:294:22:310:1 | { ... } | main.rs:293:1:310:1 | exit fn match_pattern11 (normal) | |
-| main.rs:295:5:295:21 | let ... = ... | main.rs:295:13:295:16 | Some | |
-| main.rs:295:9:295:9 | x | main.rs:295:9:295:9 | x | |
-| main.rs:295:9:295:9 | x | main.rs:297:7:297:7 | x | match |
-| main.rs:295:13:295:16 | Some | main.rs:295:18:295:19 | 42 | |
-| main.rs:295:13:295:20 | Some(...) | main.rs:295:9:295:9 | x | |
-| main.rs:295:18:295:19 | 42 | main.rs:295:13:295:20 | Some(...) | |
-| main.rs:296:5:309:5 | if ... {...} else {...} | main.rs:294:22:310:1 | { ... } | |
-| main.rs:296:8:297:7 | [boolean(false)] let ... = x | main.rs:296:8:300:13 | [boolean(false)] ... && ... | false |
-| main.rs:296:8:297:7 | [boolean(true)] let ... = x | main.rs:300:7:300:10 | Some | true |
-| main.rs:296:8:300:13 | [boolean(false)] ... && ... | main.rs:296:8:302:9 | [boolean(false)] ... && ... | false |
-| main.rs:296:8:300:13 | [boolean(true)] ... && ... | main.rs:302:5:302:5 | x | true |
-| main.rs:296:8:302:9 | [boolean(false)] ... && ... | main.rs:306:9:307:14 | let ... = x | false |
-| main.rs:296:8:302:9 | [boolean(true)] ... && ... | main.rs:304:9:304:21 | ExprStmt | true |
-| main.rs:296:12:296:18 | Some(...) | main.rs:296:8:297:7 | [boolean(false)] let ... = x | no-match |
-| main.rs:296:12:296:18 | Some(...) | main.rs:296:17:296:17 | x | match |
-| main.rs:296:17:296:17 | x | main.rs:296:8:297:7 | [boolean(true)] let ... = x | match |
-| main.rs:296:17:296:17 | x | main.rs:296:17:296:17 | x | |
-| main.rs:297:7:297:7 | x | main.rs:296:12:296:18 | Some(...) | |
-| main.rs:299:5:300:13 | [boolean(false)] let ... = ... | main.rs:296:8:300:13 | [boolean(false)] ... && ... | false |
-| main.rs:299:5:300:13 | [boolean(true)] let ... = ... | main.rs:296:8:300:13 | [boolean(true)] ... && ... | true |
-| main.rs:299:9:299:15 | Some(...) | main.rs:299:5:300:13 | [boolean(false)] let ... = ... | no-match |
-| main.rs:299:9:299:15 | Some(...) | main.rs:299:14:299:14 | x | match |
-| main.rs:299:14:299:14 | x | main.rs:299:5:300:13 | [boolean(true)] let ... = ... | match |
-| main.rs:299:14:299:14 | x | main.rs:299:14:299:14 | x | |
-| main.rs:300:7:300:10 | Some | main.rs:300:12:300:12 | x | |
-| main.rs:300:7:300:13 | Some(...) | main.rs:299:9:299:15 | Some(...) | |
-| main.rs:300:12:300:12 | x | main.rs:300:7:300:13 | Some(...) | |
-| main.rs:302:5:302:5 | x | main.rs:302:9:302:9 | 0 | |
-| main.rs:302:5:302:9 | ... > ... | main.rs:296:8:302:9 | [boolean(false)] ... && ... | false |
-| main.rs:302:5:302:9 | ... > ... | main.rs:296:8:302:9 | [boolean(true)] ... && ... | true |
-| main.rs:302:9:302:9 | 0 | main.rs:302:5:302:9 | ... > ... | |
-| main.rs:303:5:305:5 | { ... } | main.rs:296:5:309:5 | if ... {...} else {...} | |
-| main.rs:304:9:304:17 | print_i64 | main.rs:304:19:304:19 | x | |
-| main.rs:304:9:304:20 | print_i64(...) | main.rs:303:5:305:5 | { ... } | |
-| main.rs:304:9:304:21 | ExprStmt | main.rs:304:9:304:17 | print_i64 | |
-| main.rs:304:19:304:19 | x | main.rs:304:9:304:20 | print_i64(...) | |
-| main.rs:305:12:309:5 | { ... } | main.rs:296:5:309:5 | if ... {...} else {...} | |
-| main.rs:306:9:307:14 | let ... = x | main.rs:307:13:307:13 | x | |
-| main.rs:306:13:306:13 | x | main.rs:306:13:306:13 | x | |
-| main.rs:306:13:306:13 | x | main.rs:308:9:308:30 | ExprStmt | match |
-| main.rs:307:13:307:13 | x | main.rs:306:13:306:13 | x | |
-| main.rs:308:9:308:17 | print_i64 | main.rs:308:19:308:19 | x | |
-| main.rs:308:9:308:29 | print_i64(...) | main.rs:305:12:309:5 | { ... } | |
-| main.rs:308:9:308:30 | ExprStmt | main.rs:308:9:308:17 | print_i64 | |
-| main.rs:308:19:308:19 | x | main.rs:308:19:308:28 | x.unwrap() | |
-| main.rs:308:19:308:28 | x.unwrap() | main.rs:308:9:308:29 | print_i64(...) | |
-| main.rs:312:1:328:1 | enter fn match_pattern12 | main.rs:314:5:314:21 | let ... = ... | |
-| main.rs:312:1:328:1 | exit fn match_pattern12 (normal) | main.rs:312:1:328:1 | exit fn match_pattern12 | |
-| main.rs:313:22:328:1 | { ... } | main.rs:312:1:328:1 | exit fn match_pattern12 (normal) | |
-| main.rs:314:5:314:21 | let ... = ... | main.rs:314:13:314:16 | Some | |
-| main.rs:314:9:314:9 | x | main.rs:314:9:314:9 | x | |
-| main.rs:314:9:314:9 | x | main.rs:315:5:325:5 | ExprStmt | match |
-| main.rs:314:13:314:16 | Some | main.rs:314:18:314:19 | 42 | |
-| main.rs:314:13:314:20 | Some(...) | main.rs:314:9:314:9 | x | |
-| main.rs:314:18:314:19 | 42 | main.rs:314:13:314:20 | Some(...) | |
-| main.rs:315:5:325:5 | ExprStmt | main.rs:316:7:316:7 | x | |
-| main.rs:315:5:325:5 | while ... { ... } | main.rs:327:5:327:26 | ExprStmt | |
-| main.rs:315:11:316:7 | [boolean(false)] let ... = x | main.rs:315:11:319:13 | [boolean(false)] ... && ... | false |
-| main.rs:315:11:316:7 | [boolean(true)] let ... = x | main.rs:319:7:319:10 | Some | true |
-| main.rs:315:11:319:13 | [boolean(false)] ... && ... | main.rs:315:11:321:9 | [boolean(false)] ... && ... | false |
-| main.rs:315:11:319:13 | [boolean(true)] ... && ... | main.rs:321:5:321:5 | x | true |
-| main.rs:315:11:321:9 | [boolean(false)] ... && ... | main.rs:315:5:325:5 | while ... { ... } | false |
-| main.rs:315:11:321:9 | [boolean(true)] ... && ... | main.rs:323:9:323:21 | ExprStmt | true |
-| main.rs:315:15:315:21 | Some(...) | main.rs:315:11:316:7 | [boolean(false)] let ... = x | no-match |
-| main.rs:315:15:315:21 | Some(...) | main.rs:315:20:315:20 | x | match |
-| main.rs:315:20:315:20 | x | main.rs:315:11:316:7 | [boolean(true)] let ... = x | match |
-| main.rs:315:20:315:20 | x | main.rs:315:20:315:20 | x | |
-| main.rs:316:7:316:7 | x | main.rs:315:15:315:21 | Some(...) | |
-| main.rs:318:5:319:13 | [boolean(false)] let ... = ... | main.rs:315:11:319:13 | [boolean(false)] ... && ... | false |
-| main.rs:318:5:319:13 | [boolean(true)] let ... = ... | main.rs:315:11:319:13 | [boolean(true)] ... && ... | true |
-| main.rs:318:9:318:15 | Some(...) | main.rs:318:5:319:13 | [boolean(false)] let ... = ... | no-match |
-| main.rs:318:9:318:15 | Some(...) | main.rs:318:14:318:14 | x | match |
-| main.rs:318:14:318:14 | x | main.rs:318:5:319:13 | [boolean(true)] let ... = ... | match |
-| main.rs:318:14:318:14 | x | main.rs:318:14:318:14 | x | |
-| main.rs:319:7:319:10 | Some | main.rs:319:12:319:12 | x | |
-| main.rs:319:7:319:13 | Some(...) | main.rs:318:9:318:15 | Some(...) | |
-| main.rs:319:12:319:12 | x | main.rs:319:7:319:13 | Some(...) | |
-| main.rs:321:5:321:5 | x | main.rs:321:9:321:9 | 0 | |
-| main.rs:321:5:321:9 | ... > ... | main.rs:315:11:321:9 | [boolean(false)] ... && ... | false |
-| main.rs:321:5:321:9 | ... > ... | main.rs:315:11:321:9 | [boolean(true)] ... && ... | true |
-| main.rs:321:9:321:9 | 0 | main.rs:321:5:321:9 | ... > ... | |
-| main.rs:323:9:323:17 | print_i64 | main.rs:323:19:323:19 | x | |
-| main.rs:323:9:323:20 | print_i64(...) | main.rs:324:9:324:14 | ExprStmt | |
-| main.rs:323:9:323:21 | ExprStmt | main.rs:323:9:323:17 | print_i64 | |
-| main.rs:323:19:323:19 | x | main.rs:323:9:323:20 | print_i64(...) | |
-| main.rs:324:9:324:13 | break | main.rs:315:5:325:5 | while ... { ... } | break |
-| main.rs:324:9:324:14 | ExprStmt | main.rs:324:9:324:13 | break | |
-| main.rs:327:5:327:13 | print_i64 | main.rs:327:15:327:15 | x | |
-| main.rs:327:5:327:25 | print_i64(...) | main.rs:313:22:328:1 | { ... } | |
-| main.rs:327:5:327:26 | ExprStmt | main.rs:327:5:327:13 | print_i64 | |
-| main.rs:327:15:327:15 | x | main.rs:327:15:327:24 | x.unwrap() | |
-| main.rs:327:15:327:24 | x.unwrap() | main.rs:327:5:327:25 | print_i64(...) | |
-| main.rs:330:1:342:1 | enter fn match_pattern13 | main.rs:332:5:332:21 | let ... = ... | |
-| main.rs:330:1:342:1 | exit fn match_pattern13 (normal) | main.rs:330:1:342:1 | exit fn match_pattern13 | |
-| main.rs:331:22:342:1 | { ... } | main.rs:330:1:342:1 | exit fn match_pattern13 (normal) | |
-| main.rs:332:5:332:21 | let ... = ... | main.rs:332:13:332:16 | Some | |
-| main.rs:332:9:332:9 | x | main.rs:332:9:332:9 | x | |
-| main.rs:332:9:332:9 | x | main.rs:333:5:339:5 | ExprStmt | match |
-| main.rs:332:13:332:16 | Some | main.rs:332:18:332:19 | 42 | |
-| main.rs:332:13:332:20 | Some(...) | main.rs:332:9:332:9 | x | |
-| main.rs:332:18:332:19 | 42 | main.rs:332:13:332:20 | Some(...) | |
-| main.rs:333:5:339:5 | ExprStmt | main.rs:333:11:333:11 | x | |
-| main.rs:333:5:339:5 | match x { ... } | main.rs:341:5:341:26 | ExprStmt | |
-| main.rs:333:11:333:11 | x | main.rs:334:9:334:15 | Some(...) | |
-| main.rs:334:9:334:15 | Some(...) | main.rs:334:14:334:14 | x | match |
-| main.rs:334:9:334:15 | Some(...) | main.rs:338:9:338:9 | _ | no-match |
-| main.rs:334:14:334:14 | x | main.rs:334:14:334:14 | x | |
-| main.rs:334:14:334:14 | x | main.rs:336:18:336:18 | x | match |
-| main.rs:335:16:336:18 | [boolean(true)] let ... = x | main.rs:337:19:337:19 | x | true |
-| main.rs:335:16:337:23 | [boolean(false)] ... && ... | main.rs:338:9:338:9 | _ | false |
-| main.rs:335:16:337:23 | [boolean(true)] ... && ... | main.rs:337:28:337:29 | TupleExpr | true |
-| main.rs:335:20:335:20 | x | main.rs:335:16:336:18 | [boolean(true)] let ... = x | match |
-| main.rs:335:20:335:20 | x | main.rs:335:20:335:20 | x | |
-| main.rs:336:18:336:18 | x | main.rs:335:20:335:20 | x | |
-| main.rs:337:19:337:19 | x | main.rs:337:23:337:23 | 0 | |
-| main.rs:337:19:337:23 | ... > ... | main.rs:335:16:337:23 | [boolean(false)] ... && ... | false |
-| main.rs:337:19:337:23 | ... > ... | main.rs:335:16:337:23 | [boolean(true)] ... && ... | true |
-| main.rs:337:23:337:23 | 0 | main.rs:337:19:337:23 | ... > ... | |
-| main.rs:337:28:337:29 | TupleExpr | main.rs:333:5:339:5 | match x { ... } | |
-| main.rs:338:9:338:9 | _ | main.rs:338:14:338:15 | TupleExpr | match |
-| main.rs:338:14:338:15 | TupleExpr | main.rs:333:5:339:5 | match x { ... } | |
-| main.rs:341:5:341:13 | print_i64 | main.rs:341:15:341:15 | x | |
-| main.rs:341:5:341:25 | print_i64(...) | main.rs:331:22:342:1 | { ... } | |
-| main.rs:341:5:341:26 | ExprStmt | main.rs:341:5:341:13 | print_i64 | |
-| main.rs:341:15:341:15 | x | main.rs:341:15:341:24 | x.unwrap() | |
-| main.rs:341:15:341:24 | x.unwrap() | main.rs:341:5:341:25 | print_i64(...) | |
-| main.rs:344:1:359:1 | enter fn match_pattern14 | main.rs:346:5:346:19 | let ... = ... | |
-| main.rs:344:1:359:1 | exit fn match_pattern14 (normal) | main.rs:344:1:359:1 | exit fn match_pattern14 | |
-| main.rs:345:22:359:1 | { ... } | main.rs:344:1:359:1 | exit fn match_pattern14 (normal) | |
-| main.rs:346:5:346:19 | let ... = ... | main.rs:346:13:346:14 | Ok | |
-| main.rs:346:9:346:9 | x | main.rs:346:9:346:9 | x | |
-| main.rs:346:9:346:9 | x | main.rs:348:7:348:7 | x | match |
-| main.rs:346:13:346:14 | Ok | main.rs:346:16:346:17 | 42 | |
-| main.rs:346:13:346:18 | Ok(...) | main.rs:346:9:346:9 | x | |
-| main.rs:346:16:346:17 | 42 | main.rs:346:13:346:18 | Ok(...) | |
-| main.rs:347:5:358:5 | if ... {...} else {...} | main.rs:345:22:359:1 | { ... } | |
-| main.rs:347:8:348:7 | [boolean(false)] let ... = x | main.rs:353:7:353:7 | x | false |
-| main.rs:347:8:348:7 | [boolean(true)] let ... = x | main.rs:350:9:350:21 | ExprStmt | true |
-| main.rs:347:12:347:17 | Err(...) | main.rs:347:8:348:7 | [boolean(false)] let ... = x | no-match |
-| main.rs:347:12:347:17 | Err(...) | main.rs:347:16:347:16 | x | match |
-| main.rs:347:16:347:16 | x | main.rs:347:8:348:7 | [boolean(true)] let ... = x | match |
-| main.rs:347:16:347:16 | x | main.rs:347:16:347:16 | x | |
-| main.rs:348:7:348:7 | x | main.rs:347:12:347:17 | Err(...) | |
-| main.rs:349:5:351:5 | { ... } | main.rs:347:5:358:5 | if ... {...} else {...} | |
-| main.rs:350:9:350:17 | print_i64 | main.rs:350:19:350:19 | x | |
-| main.rs:350:9:350:20 | print_i64(...) | main.rs:349:5:351:5 | { ... } | |
-| main.rs:350:9:350:21 | ExprStmt | main.rs:350:9:350:17 | print_i64 | |
-| main.rs:350:19:350:19 | x | main.rs:350:9:350:20 | print_i64(...) | |
-| main.rs:352:10:358:5 | if ... {...} else {...} | main.rs:347:5:358:5 | if ... {...} else {...} | |
-| main.rs:352:13:353:7 | [boolean(false)] let ... = x | main.rs:357:9:357:30 | ExprStmt | false |
-| main.rs:352:13:353:7 | [boolean(true)] let ... = x | main.rs:355:9:355:21 | ExprStmt | true |
-| main.rs:352:17:352:21 | Ok(...) | main.rs:352:13:353:7 | [boolean(false)] let ... = x | no-match |
-| main.rs:352:17:352:21 | Ok(...) | main.rs:352:20:352:20 | x | match |
-| main.rs:352:20:352:20 | x | main.rs:352:13:353:7 | [boolean(true)] let ... = x | match |
-| main.rs:352:20:352:20 | x | main.rs:352:20:352:20 | x | |
-| main.rs:353:7:353:7 | x | main.rs:352:17:352:21 | Ok(...) | |
-| main.rs:354:5:356:5 | { ... } | main.rs:352:10:358:5 | if ... {...} else {...} | |
-| main.rs:355:9:355:17 | print_i64 | main.rs:355:19:355:19 | x | |
-| main.rs:355:9:355:20 | print_i64(...) | main.rs:354:5:356:5 | { ... } | |
-| main.rs:355:9:355:21 | ExprStmt | main.rs:355:9:355:17 | print_i64 | |
-| main.rs:355:19:355:19 | x | main.rs:355:9:355:20 | print_i64(...) | |
-| main.rs:356:12:358:5 | { ... } | main.rs:352:10:358:5 | if ... {...} else {...} | |
+| main.rs:150:23:150:27 | first | main.rs:150:13:150:28 | print_i64(...) | |
+| main.rs:151:13:151:21 | print_i64 | main.rs:151:23:151:27 | third | |
+| main.rs:151:13:151:28 | print_i64(...) | main.rs:152:13:152:29 | ExprStmt | |
+| main.rs:151:13:151:29 | ExprStmt | main.rs:151:13:151:21 | print_i64 | |
+| main.rs:151:23:151:27 | third | main.rs:151:13:151:28 | print_i64(...) | |
+| main.rs:152:13:152:21 | print_i64 | main.rs:152:23:152:27 | fifth | |
+| main.rs:152:13:152:28 | print_i64(...) | main.rs:149:14:153:9 | { ... } | |
+| main.rs:152:13:152:29 | ExprStmt | main.rs:152:13:152:21 | print_i64 | |
+| main.rs:152:23:152:27 | fifth | main.rs:152:13:152:28 | print_i64(...) | |
+| main.rs:156:5:166:5 | match numbers { ... } | main.rs:138:21:167:1 | { ... } | |
+| main.rs:156:11:156:17 | numbers | main.rs:158:9:162:9 | TuplePat | |
+| main.rs:158:9:162:9 | TuplePat | main.rs:159:13:159:17 | first | match |
+| main.rs:159:13:159:17 | first | main.rs:159:13:159:17 | first | |
+| main.rs:159:13:159:17 | first | main.rs:160:13:160:14 | .. | match |
+| main.rs:160:13:160:14 | .. | main.rs:161:13:161:16 | last | match |
+| main.rs:161:13:161:16 | last | main.rs:161:13:161:16 | last | |
+| main.rs:161:13:161:16 | last | main.rs:163:13:163:29 | ExprStmt | match |
+| main.rs:162:14:165:9 | { ... } | main.rs:156:5:166:5 | match numbers { ... } | |
+| main.rs:163:13:163:21 | print_i64 | main.rs:163:23:163:27 | first | |
+| main.rs:163:13:163:28 | print_i64(...) | main.rs:164:13:164:28 | ExprStmt | |
+| main.rs:163:13:163:29 | ExprStmt | main.rs:163:13:163:21 | print_i64 | |
+| main.rs:163:23:163:27 | first | main.rs:163:13:163:28 | print_i64(...) | |
+| main.rs:164:13:164:21 | print_i64 | main.rs:164:23:164:26 | last | |
+| main.rs:164:13:164:27 | print_i64(...) | main.rs:162:14:165:9 | { ... } | |
+| main.rs:164:13:164:28 | ExprStmt | main.rs:164:13:164:21 | print_i64 | |
+| main.rs:164:23:164:26 | last | main.rs:164:13:164:27 | print_i64(...) | |
+| main.rs:169:1:177:1 | enter fn match_pattern3 | main.rs:170:5:170:38 | let ... = ... | |
+| main.rs:169:1:177:1 | exit fn match_pattern3 (normal) | main.rs:169:1:177:1 | exit fn match_pattern3 | |
+| main.rs:169:21:177:1 | { ... } | main.rs:169:1:177:1 | exit fn match_pattern3 (normal) | |
+| main.rs:170:5:170:38 | let ... = ... | main.rs:170:25:170:27 | "x" | |
+| main.rs:170:9:170:10 | p2 | main.rs:170:9:170:10 | p2 | |
+| main.rs:170:9:170:10 | p2 | main.rs:172:11:172:12 | p2 | match |
+| main.rs:170:14:170:37 | Point {...} | main.rs:170:9:170:10 | p2 | |
+| main.rs:170:25:170:27 | "x" | main.rs:170:33:170:35 | "y" | |
+| main.rs:170:33:170:35 | "y" | main.rs:170:14:170:37 | Point {...} | |
+| main.rs:172:5:176:5 | match p2 { ... } | main.rs:169:21:177:1 | { ... } | |
+| main.rs:172:11:172:12 | p2 | main.rs:173:9:175:9 | Point {...} | |
+| main.rs:173:9:175:9 | Point {...} | main.rs:174:16:174:17 | x7 | match |
+| main.rs:174:16:174:17 | x7 | main.rs:174:16:174:17 | x7 | |
+| main.rs:174:16:174:17 | x7 | main.rs:174:20:174:21 | .. | match |
+| main.rs:174:20:174:21 | .. | main.rs:175:14:175:22 | print_str | match |
+| main.rs:175:14:175:22 | print_str | main.rs:175:24:175:25 | x7 | |
+| main.rs:175:14:175:26 | print_str(...) | main.rs:172:5:176:5 | match p2 { ... } | |
+| main.rs:175:24:175:25 | x7 | main.rs:175:14:175:26 | print_str(...) | |
+| main.rs:183:1:200:1 | enter fn match_pattern4 | main.rs:184:5:184:39 | let ... = ... | |
+| main.rs:183:1:200:1 | exit fn match_pattern4 (normal) | main.rs:183:1:200:1 | exit fn match_pattern4 | |
+| main.rs:183:21:200:1 | { ... } | main.rs:183:1:200:1 | exit fn match_pattern4 (normal) | |
+| main.rs:184:5:184:39 | let ... = ... | main.rs:184:36:184:36 | 0 | |
+| main.rs:184:9:184:11 | msg | main.rs:184:9:184:11 | msg | |
+| main.rs:184:9:184:11 | msg | main.rs:186:11:186:13 | msg | match |
+| main.rs:184:15:184:38 | ...::Hello {...} | main.rs:184:9:184:11 | msg | |
+| main.rs:184:36:184:36 | 0 | main.rs:184:15:184:38 | ...::Hello {...} | |
+| main.rs:186:5:199:5 | match msg { ... } | main.rs:183:21:200:1 | { ... } | |
+| main.rs:186:11:186:13 | msg | main.rs:188:9:190:9 | ...::Hello {...} | |
+| main.rs:188:9:190:9 | ...::Hello {...} | main.rs:189:31:189:35 | RangePat | match |
+| main.rs:188:9:190:9 | ...::Hello {...} | main.rs:191:9:191:38 | ...::Hello {...} | no-match |
+| main.rs:189:17:189:27 | id_variable | main.rs:189:17:189:35 | id_variable @ ... | |
+| main.rs:189:17:189:35 | id_variable @ ... | main.rs:190:14:190:22 | print_i64 | match |
+| main.rs:189:31:189:31 | 3 | main.rs:189:31:189:31 | 3 | |
+| main.rs:189:31:189:31 | 3 | main.rs:189:35:189:35 | 7 | match |
+| main.rs:189:31:189:31 | 3 | main.rs:191:9:191:38 | ...::Hello {...} | no-match |
+| main.rs:189:31:189:35 | RangePat | main.rs:189:31:189:31 | 3 | match |
+| main.rs:189:35:189:35 | 7 | main.rs:189:17:189:27 | id_variable | match |
+| main.rs:189:35:189:35 | 7 | main.rs:189:35:189:35 | 7 | |
+| main.rs:189:35:189:35 | 7 | main.rs:191:9:191:38 | ...::Hello {...} | no-match |
+| main.rs:190:14:190:22 | print_i64 | main.rs:190:24:190:34 | id_variable | |
+| main.rs:190:14:190:35 | print_i64(...) | main.rs:186:5:199:5 | match msg { ... } | |
+| main.rs:190:24:190:34 | id_variable | main.rs:190:14:190:35 | print_i64(...) | |
+| main.rs:191:9:191:38 | ...::Hello {...} | main.rs:191:30:191:36 | RangePat | match |
+| main.rs:191:9:191:38 | ...::Hello {...} | main.rs:194:9:194:29 | ...::Hello {...} | no-match |
+| main.rs:191:30:191:31 | 10 | main.rs:191:30:191:31 | 10 | |
+| main.rs:191:30:191:31 | 10 | main.rs:191:35:191:36 | 12 | match |
+| main.rs:191:30:191:31 | 10 | main.rs:194:9:194:29 | ...::Hello {...} | no-match |
+| main.rs:191:30:191:36 | RangePat | main.rs:191:30:191:31 | 10 | match |
+| main.rs:191:35:191:36 | 12 | main.rs:191:35:191:36 | 12 | |
+| main.rs:191:35:191:36 | 12 | main.rs:192:22:192:51 | ExprStmt | match |
+| main.rs:191:35:191:36 | 12 | main.rs:194:9:194:29 | ...::Hello {...} | no-match |
+| main.rs:191:43:193:9 | { ... } | main.rs:186:5:199:5 | match msg { ... } | |
+| main.rs:192:13:192:20 | ...::_print | main.rs:192:22:192:51 | "Found an id in another range\\... | |
+| main.rs:192:13:192:52 | MacroExpr | main.rs:191:43:193:9 | { ... } | |
+| main.rs:192:13:192:52 | println!... | main.rs:192:13:192:52 | MacroExpr | |
+| main.rs:192:22:192:51 | "Found an id in another range\\... | main.rs:192:22:192:51 | FormatArgsExpr | |
+| main.rs:192:22:192:51 | ...::_print(...) | main.rs:192:22:192:51 | { ... } | |
+| main.rs:192:22:192:51 | ...::format_args_nl!... | main.rs:192:22:192:51 | MacroExpr | |
+| main.rs:192:22:192:51 | ExprStmt | main.rs:192:13:192:20 | ...::_print | |
+| main.rs:192:22:192:51 | FormatArgsExpr | main.rs:192:22:192:51 | ...::format_args_nl!... | |
+| main.rs:192:22:192:51 | MacroBlockExpr | main.rs:192:13:192:52 | println!... | |
+| main.rs:192:22:192:51 | MacroExpr | main.rs:192:22:192:51 | ...::_print(...) | |
+| main.rs:192:22:192:51 | { ... } | main.rs:192:22:192:51 | MacroBlockExpr | |
+| main.rs:194:9:194:29 | ...::Hello {...} | main.rs:194:26:194:27 | id | match |
+| main.rs:194:26:194:27 | id | main.rs:194:26:194:27 | id | |
+| main.rs:194:26:194:27 | id | main.rs:197:13:197:21 | print_i64 | match |
+| main.rs:196:9:198:9 | { ... } | main.rs:186:5:199:5 | match msg { ... } | |
+| main.rs:197:13:197:21 | print_i64 | main.rs:197:23:197:24 | id | |
+| main.rs:197:13:197:25 | print_i64(...) | main.rs:196:9:198:9 | { ... } | |
+| main.rs:197:23:197:24 | id | main.rs:197:13:197:25 | print_i64(...) | |
+| main.rs:207:1:213:1 | enter fn match_pattern5 | main.rs:208:5:208:34 | let ... = ... | |
+| main.rs:207:1:213:1 | exit fn match_pattern5 (normal) | main.rs:207:1:213:1 | exit fn match_pattern5 | |
+| main.rs:207:21:213:1 | { ... } | main.rs:207:1:213:1 | exit fn match_pattern5 (normal) | |
+| main.rs:208:5:208:34 | let ... = ... | main.rs:208:18:208:29 | ...::Left | |
+| main.rs:208:9:208:14 | either | main.rs:208:9:208:14 | either | |
+| main.rs:208:9:208:14 | either | main.rs:209:11:209:16 | either | match |
+| main.rs:208:18:208:29 | ...::Left | main.rs:208:31:208:32 | 32 | |
+| main.rs:208:18:208:33 | ...::Left(...) | main.rs:208:9:208:14 | either | |
+| main.rs:208:31:208:32 | 32 | main.rs:208:18:208:33 | ...::Left(...) | |
+| main.rs:209:5:212:5 | match either { ... } | main.rs:207:21:213:1 | { ... } | |
+| main.rs:209:11:209:16 | either | main.rs:210:9:210:24 | ...::Left(...) | |
+| main.rs:210:9:210:24 | ...::Left(...) | main.rs:210:22:210:23 | a3 | match |
+| main.rs:210:9:210:24 | ...::Left(...) | main.rs:210:28:210:44 | ...::Right(...) | no-match |
+| main.rs:210:9:210:44 | ... \| ... | main.rs:211:16:211:24 | print_i64 | match |
+| main.rs:210:22:210:23 | a3 | main.rs:210:9:210:44 | ... \| ... | match |
+| main.rs:210:22:210:23 | a3 | main.rs:210:22:210:23 | a3 | |
+| main.rs:210:28:210:44 | ...::Right(...) | main.rs:210:42:210:43 | a3 | match |
+| main.rs:210:42:210:43 | a3 | main.rs:210:9:210:44 | ... \| ... | match |
+| main.rs:210:42:210:43 | a3 | main.rs:210:42:210:43 | a3 | |
+| main.rs:211:16:211:24 | print_i64 | main.rs:211:26:211:27 | a3 | |
+| main.rs:211:16:211:28 | print_i64(...) | main.rs:209:5:212:5 | match either { ... } | |
+| main.rs:211:26:211:27 | a3 | main.rs:211:16:211:28 | print_i64(...) | |
+| main.rs:221:1:235:1 | enter fn match_pattern6 | main.rs:222:5:222:37 | let ... = ... | |
+| main.rs:221:1:235:1 | exit fn match_pattern6 (normal) | main.rs:221:1:235:1 | exit fn match_pattern6 | |
+| main.rs:221:21:235:1 | { ... } | main.rs:221:1:235:1 | exit fn match_pattern6 (normal) | |
+| main.rs:222:5:222:37 | let ... = ... | main.rs:222:14:222:32 | ...::Second | |
+| main.rs:222:9:222:10 | tv | main.rs:222:9:222:10 | tv | |
+| main.rs:222:9:222:10 | tv | main.rs:223:5:226:5 | ExprStmt | match |
+| main.rs:222:14:222:32 | ...::Second | main.rs:222:34:222:35 | 62 | |
+| main.rs:222:14:222:36 | ...::Second(...) | main.rs:222:9:222:10 | tv | |
+| main.rs:222:34:222:35 | 62 | main.rs:222:14:222:36 | ...::Second(...) | |
+| main.rs:223:5:226:5 | ExprStmt | main.rs:223:11:223:12 | tv | |
+| main.rs:223:5:226:5 | match tv { ... } | main.rs:227:5:230:5 | ExprStmt | |
+| main.rs:223:11:223:12 | tv | main.rs:224:9:224:30 | ...::First(...) | |
+| main.rs:224:9:224:30 | ...::First(...) | main.rs:224:28:224:29 | a4 | match |
+| main.rs:224:9:224:30 | ...::First(...) | main.rs:224:34:224:56 | ...::Second(...) | no-match |
+| main.rs:224:9:224:81 | ... \| ... \| ... | main.rs:225:16:225:24 | print_i64 | match |
+| main.rs:224:28:224:29 | a4 | main.rs:224:9:224:81 | ... \| ... \| ... | match |
+| main.rs:224:28:224:29 | a4 | main.rs:224:28:224:29 | a4 | |
+| main.rs:224:34:224:56 | ...::Second(...) | main.rs:224:54:224:55 | a4 | match |
+| main.rs:224:34:224:56 | ...::Second(...) | main.rs:224:60:224:81 | ...::Third(...) | no-match |
+| main.rs:224:54:224:55 | a4 | main.rs:224:9:224:81 | ... \| ... \| ... | match |
+| main.rs:224:54:224:55 | a4 | main.rs:224:54:224:55 | a4 | |
+| main.rs:224:60:224:81 | ...::Third(...) | main.rs:224:79:224:80 | a4 | match |
+| main.rs:224:79:224:80 | a4 | main.rs:224:9:224:81 | ... \| ... \| ... | match |
+| main.rs:224:79:224:80 | a4 | main.rs:224:79:224:80 | a4 | |
+| main.rs:225:16:225:24 | print_i64 | main.rs:225:26:225:27 | a4 | |
+| main.rs:225:16:225:28 | print_i64(...) | main.rs:223:5:226:5 | match tv { ... } | |
+| main.rs:225:26:225:27 | a4 | main.rs:225:16:225:28 | print_i64(...) | |
+| main.rs:227:5:230:5 | ExprStmt | main.rs:227:11:227:12 | tv | |
+| main.rs:227:5:230:5 | match tv { ... } | main.rs:231:11:231:12 | tv | |
+| main.rs:227:11:227:12 | tv | main.rs:228:10:228:31 | ...::First(...) | |
+| main.rs:228:9:228:83 | ... \| ... | main.rs:229:16:229:24 | print_i64 | match |
+| main.rs:228:10:228:31 | ...::First(...) | main.rs:228:29:228:30 | a5 | match |
+| main.rs:228:10:228:31 | ...::First(...) | main.rs:228:35:228:57 | ...::Second(...) | no-match |
+| main.rs:228:10:228:57 | [match(false)] ... \| ... | main.rs:228:62:228:83 | ...::Third(...) | no-match |
+| main.rs:228:10:228:57 | [match(true)] ... \| ... | main.rs:228:9:228:83 | ... \| ... | match |
+| main.rs:228:29:228:30 | a5 | main.rs:228:10:228:57 | [match(true)] ... \| ... | match |
+| main.rs:228:29:228:30 | a5 | main.rs:228:29:228:30 | a5 | |
+| main.rs:228:35:228:57 | ...::Second(...) | main.rs:228:10:228:57 | [match(false)] ... \| ... | no-match |
+| main.rs:228:35:228:57 | ...::Second(...) | main.rs:228:55:228:56 | a5 | match |
+| main.rs:228:55:228:56 | a5 | main.rs:228:10:228:57 | [match(true)] ... \| ... | match |
+| main.rs:228:55:228:56 | a5 | main.rs:228:55:228:56 | a5 | |
+| main.rs:228:62:228:83 | ...::Third(...) | main.rs:228:81:228:82 | a5 | match |
+| main.rs:228:81:228:82 | a5 | main.rs:228:9:228:83 | ... \| ... | match |
+| main.rs:228:81:228:82 | a5 | main.rs:228:81:228:82 | a5 | |
+| main.rs:229:16:229:24 | print_i64 | main.rs:229:26:229:27 | a5 | |
+| main.rs:229:16:229:28 | print_i64(...) | main.rs:227:5:230:5 | match tv { ... } | |
+| main.rs:229:26:229:27 | a5 | main.rs:229:16:229:28 | print_i64(...) | |
+| main.rs:231:5:234:5 | match tv { ... } | main.rs:221:21:235:1 | { ... } | |
+| main.rs:231:11:231:12 | tv | main.rs:232:9:232:30 | ...::First(...) | |
+| main.rs:232:9:232:30 | ...::First(...) | main.rs:232:28:232:29 | a6 | match |
+| main.rs:232:9:232:30 | ...::First(...) | main.rs:232:35:232:57 | ...::Second(...) | no-match |
+| main.rs:232:9:232:83 | ... \| ... | main.rs:233:16:233:24 | print_i64 | match |
+| main.rs:232:28:232:29 | a6 | main.rs:232:9:232:83 | ... \| ... | match |
+| main.rs:232:28:232:29 | a6 | main.rs:232:28:232:29 | a6 | |
+| main.rs:232:35:232:57 | ...::Second(...) | main.rs:232:55:232:56 | a6 | match |
+| main.rs:232:35:232:57 | ...::Second(...) | main.rs:232:61:232:82 | ...::Third(...) | no-match |
+| main.rs:232:35:232:82 | ... \| ... | main.rs:232:9:232:83 | ... \| ... | match |
+| main.rs:232:55:232:56 | a6 | main.rs:232:35:232:82 | ... \| ... | match |
+| main.rs:232:55:232:56 | a6 | main.rs:232:55:232:56 | a6 | |
+| main.rs:232:61:232:82 | ...::Third(...) | main.rs:232:80:232:81 | a6 | match |
+| main.rs:232:80:232:81 | a6 | main.rs:232:35:232:82 | ... \| ... | match |
+| main.rs:232:80:232:81 | a6 | main.rs:232:80:232:81 | a6 | |
+| main.rs:233:16:233:24 | print_i64 | main.rs:233:26:233:27 | a6 | |
+| main.rs:233:16:233:28 | print_i64(...) | main.rs:231:5:234:5 | match tv { ... } | |
+| main.rs:233:26:233:27 | a6 | main.rs:233:16:233:28 | print_i64(...) | |
+| main.rs:237:1:245:1 | enter fn match_pattern7 | main.rs:238:5:238:34 | let ... = ... | |
+| main.rs:237:1:245:1 | exit fn match_pattern7 (normal) | main.rs:237:1:245:1 | exit fn match_pattern7 | |
+| main.rs:237:21:245:1 | { ... } | main.rs:237:1:245:1 | exit fn match_pattern7 (normal) | |
+| main.rs:238:5:238:34 | let ... = ... | main.rs:238:18:238:29 | ...::Left | |
+| main.rs:238:9:238:14 | either | main.rs:238:9:238:14 | either | |
+| main.rs:238:9:238:14 | either | main.rs:239:11:239:16 | either | match |
+| main.rs:238:18:238:29 | ...::Left | main.rs:238:31:238:32 | 32 | |
+| main.rs:238:18:238:33 | ...::Left(...) | main.rs:238:9:238:14 | either | |
+| main.rs:238:31:238:32 | 32 | main.rs:238:18:238:33 | ...::Left(...) | |
+| main.rs:239:5:244:5 | match either { ... } | main.rs:237:21:245:1 | { ... } | |
+| main.rs:239:11:239:16 | either | main.rs:240:9:240:24 | ...::Left(...) | |
+| main.rs:240:9:240:24 | ...::Left(...) | main.rs:240:22:240:23 | a7 | match |
+| main.rs:240:9:240:24 | ...::Left(...) | main.rs:240:28:240:44 | ...::Right(...) | no-match |
+| main.rs:240:9:240:44 | [match(false)] ... \| ... | main.rs:243:9:243:9 | _ | no-match |
+| main.rs:240:9:240:44 | [match(true)] ... \| ... | main.rs:241:16:241:17 | a7 | match |
+| main.rs:240:22:240:23 | a7 | main.rs:240:9:240:44 | [match(true)] ... \| ... | match |
+| main.rs:240:22:240:23 | a7 | main.rs:240:22:240:23 | a7 | |
+| main.rs:240:28:240:44 | ...::Right(...) | main.rs:240:9:240:44 | [match(false)] ... \| ... | no-match |
+| main.rs:240:28:240:44 | ...::Right(...) | main.rs:240:42:240:43 | a7 | match |
+| main.rs:240:42:240:43 | a7 | main.rs:240:9:240:44 | [match(true)] ... \| ... | match |
+| main.rs:240:42:240:43 | a7 | main.rs:240:42:240:43 | a7 | |
+| main.rs:241:16:241:17 | a7 | main.rs:241:21:241:21 | 0 | |
+| main.rs:241:16:241:21 | ... > ... | main.rs:242:16:242:24 | print_i64 | true |
+| main.rs:241:16:241:21 | ... > ... | main.rs:243:9:243:9 | _ | false |
+| main.rs:241:21:241:21 | 0 | main.rs:241:16:241:21 | ... > ... | |
+| main.rs:242:16:242:24 | print_i64 | main.rs:242:26:242:27 | a7 | |
+| main.rs:242:16:242:28 | print_i64(...) | main.rs:239:5:244:5 | match either { ... } | |
+| main.rs:242:26:242:27 | a7 | main.rs:242:16:242:28 | print_i64(...) | |
+| main.rs:243:9:243:9 | _ | main.rs:243:14:243:15 | TupleExpr | match |
+| main.rs:243:14:243:15 | TupleExpr | main.rs:239:5:244:5 | match either { ... } | |
+| main.rs:247:1:262:1 | enter fn match_pattern8 | main.rs:248:5:248:34 | let ... = ... | |
+| main.rs:247:1:262:1 | exit fn match_pattern8 (normal) | main.rs:247:1:262:1 | exit fn match_pattern8 | |
+| main.rs:247:21:262:1 | { ... } | main.rs:247:1:262:1 | exit fn match_pattern8 (normal) | |
+| main.rs:248:5:248:34 | let ... = ... | main.rs:248:18:248:29 | ...::Left | |
+| main.rs:248:9:248:14 | either | main.rs:248:9:248:14 | either | |
+| main.rs:248:9:248:14 | either | main.rs:250:11:250:16 | either | match |
+| main.rs:248:18:248:29 | ...::Left | main.rs:248:31:248:32 | 32 | |
+| main.rs:248:18:248:33 | ...::Left(...) | main.rs:248:9:248:14 | either | |
+| main.rs:248:31:248:32 | 32 | main.rs:248:18:248:33 | ...::Left(...) | |
+| main.rs:250:5:261:5 | match either { ... } | main.rs:247:21:262:1 | { ... } | |
+| main.rs:250:11:250:16 | either | main.rs:252:14:252:30 | ...::Left(...) | |
+| main.rs:251:9:252:52 | ref e @ ... | main.rs:254:13:254:27 | ExprStmt | match |
+| main.rs:251:13:251:13 | e | main.rs:251:9:252:52 | ref e @ ... | |
+| main.rs:252:14:252:30 | ...::Left(...) | main.rs:252:27:252:29 | a11 | match |
+| main.rs:252:14:252:30 | ...::Left(...) | main.rs:252:34:252:51 | ...::Right(...) | no-match |
+| main.rs:252:14:252:51 | [match(false)] ... \| ... | main.rs:260:9:260:9 | _ | no-match |
+| main.rs:252:14:252:51 | [match(true)] ... \| ... | main.rs:251:13:251:13 | e | match |
+| main.rs:252:27:252:29 | a11 | main.rs:252:14:252:51 | [match(true)] ... \| ... | match |
+| main.rs:252:27:252:29 | a11 | main.rs:252:27:252:29 | a11 | |
+| main.rs:252:34:252:51 | ...::Right(...) | main.rs:252:14:252:51 | [match(false)] ... \| ... | no-match |
+| main.rs:252:34:252:51 | ...::Right(...) | main.rs:252:48:252:50 | a11 | match |
+| main.rs:252:48:252:50 | a11 | main.rs:252:14:252:51 | [match(true)] ... \| ... | match |
+| main.rs:252:48:252:50 | a11 | main.rs:252:48:252:50 | a11 | |
+| main.rs:253:12:259:9 | { ... } | main.rs:250:5:261:5 | match either { ... } | |
+| main.rs:254:13:254:21 | print_i64 | main.rs:254:23:254:25 | a11 | |
+| main.rs:254:13:254:26 | print_i64(...) | main.rs:256:15:256:15 | e | |
+| main.rs:254:13:254:27 | ExprStmt | main.rs:254:13:254:21 | print_i64 | |
+| main.rs:254:23:254:25 | a11 | main.rs:254:13:254:26 | print_i64(...) | |
+| main.rs:255:13:258:13 | if ... {...} | main.rs:253:12:259:9 | { ... } | |
+| main.rs:255:16:256:15 | [boolean(false)] let ... = e | main.rs:255:13:258:13 | if ... {...} | false |
+| main.rs:255:16:256:15 | [boolean(true)] let ... = e | main.rs:257:17:257:32 | ExprStmt | true |
+| main.rs:255:20:255:36 | ...::Left(...) | main.rs:255:16:256:15 | [boolean(false)] let ... = e | no-match |
+| main.rs:255:20:255:36 | ...::Left(...) | main.rs:255:33:255:35 | a12 | match |
+| main.rs:255:33:255:35 | a12 | main.rs:255:16:256:15 | [boolean(true)] let ... = e | match |
+| main.rs:255:33:255:35 | a12 | main.rs:255:33:255:35 | a12 | |
+| main.rs:256:15:256:15 | e | main.rs:255:20:255:36 | ...::Left(...) | |
+| main.rs:256:17:258:13 | { ... } | main.rs:255:13:258:13 | if ... {...} | |
+| main.rs:257:17:257:25 | print_i64 | main.rs:257:28:257:30 | a12 | |
+| main.rs:257:17:257:31 | print_i64(...) | main.rs:256:17:258:13 | { ... } | |
+| main.rs:257:17:257:32 | ExprStmt | main.rs:257:17:257:25 | print_i64 | |
+| main.rs:257:27:257:30 | * ... | main.rs:257:17:257:31 | print_i64(...) | |
+| main.rs:257:28:257:30 | a12 | main.rs:257:27:257:30 | * ... | |
+| main.rs:260:9:260:9 | _ | main.rs:260:14:260:15 | TupleExpr | match |
+| main.rs:260:14:260:15 | TupleExpr | main.rs:250:5:261:5 | match either { ... } | |
+| main.rs:271:1:277:1 | enter fn match_pattern9 | main.rs:272:5:272:36 | let ... = ... | |
+| main.rs:271:1:277:1 | exit fn match_pattern9 (normal) | main.rs:271:1:277:1 | exit fn match_pattern9 | |
+| main.rs:271:21:277:1 | { ... } | main.rs:271:1:277:1 | exit fn match_pattern9 (normal) | |
+| main.rs:272:5:272:36 | let ... = ... | main.rs:272:14:272:31 | ...::Second | |
+| main.rs:272:9:272:10 | fv | main.rs:272:9:272:10 | fv | |
+| main.rs:272:9:272:10 | fv | main.rs:273:11:273:12 | fv | match |
+| main.rs:272:14:272:31 | ...::Second | main.rs:272:33:272:34 | 62 | |
+| main.rs:272:14:272:35 | ...::Second(...) | main.rs:272:9:272:10 | fv | |
+| main.rs:272:33:272:34 | 62 | main.rs:272:14:272:35 | ...::Second(...) | |
+| main.rs:273:5:276:5 | match fv { ... } | main.rs:271:21:277:1 | { ... } | |
+| main.rs:273:11:273:12 | fv | main.rs:274:9:274:30 | ...::First(...) | |
+| main.rs:274:9:274:30 | ...::First(...) | main.rs:274:27:274:29 | a13 | match |
+| main.rs:274:9:274:30 | ...::First(...) | main.rs:274:35:274:57 | ...::Second(...) | no-match |
+| main.rs:274:9:274:109 | ... \| ... \| ... | main.rs:275:16:275:24 | print_i64 | match |
+| main.rs:274:27:274:29 | a13 | main.rs:274:9:274:109 | ... \| ... \| ... | match |
+| main.rs:274:27:274:29 | a13 | main.rs:274:27:274:29 | a13 | |
+| main.rs:274:35:274:57 | ...::Second(...) | main.rs:274:54:274:56 | a13 | match |
+| main.rs:274:35:274:57 | ...::Second(...) | main.rs:274:61:274:82 | ...::Third(...) | no-match |
+| main.rs:274:35:274:82 | [match(false)] ... \| ... | main.rs:274:87:274:109 | ...::Fourth(...) | no-match |
+| main.rs:274:35:274:82 | [match(true)] ... \| ... | main.rs:274:9:274:109 | ... \| ... \| ... | match |
+| main.rs:274:54:274:56 | a13 | main.rs:274:35:274:82 | [match(true)] ... \| ... | match |
+| main.rs:274:54:274:56 | a13 | main.rs:274:54:274:56 | a13 | |
+| main.rs:274:61:274:82 | ...::Third(...) | main.rs:274:35:274:82 | [match(false)] ... \| ... | no-match |
+| main.rs:274:61:274:82 | ...::Third(...) | main.rs:274:79:274:81 | a13 | match |
+| main.rs:274:79:274:81 | a13 | main.rs:274:35:274:82 | [match(true)] ... \| ... | match |
+| main.rs:274:79:274:81 | a13 | main.rs:274:79:274:81 | a13 | |
+| main.rs:274:87:274:109 | ...::Fourth(...) | main.rs:274:106:274:108 | a13 | match |
+| main.rs:274:106:274:108 | a13 | main.rs:274:9:274:109 | ... \| ... \| ... | match |
+| main.rs:274:106:274:108 | a13 | main.rs:274:106:274:108 | a13 | |
+| main.rs:275:16:275:24 | print_i64 | main.rs:275:26:275:28 | a13 | |
+| main.rs:275:16:275:29 | print_i64(...) | main.rs:273:5:276:5 | match fv { ... } | |
+| main.rs:275:26:275:28 | a13 | main.rs:275:16:275:29 | print_i64(...) | |
+| main.rs:279:1:293:1 | enter fn match_pattern10 | main.rs:281:5:281:20 | let ... = ... | |
+| main.rs:279:1:293:1 | exit fn match_pattern10 (normal) | main.rs:279:1:293:1 | exit fn match_pattern10 | |
+| main.rs:280:22:293:1 | { ... } | main.rs:279:1:293:1 | exit fn match_pattern10 (normal) | |
+| main.rs:281:5:281:20 | let ... = ... | main.rs:281:12:281:15 | Some | |
+| main.rs:281:9:281:9 | x | main.rs:281:9:281:9 | x | |
+| main.rs:281:9:281:9 | x | main.rs:283:7:283:7 | x | match |
+| main.rs:281:12:281:15 | Some | main.rs:281:17:281:18 | 42 | |
+| main.rs:281:12:281:19 | Some(...) | main.rs:281:9:281:9 | x | |
+| main.rs:281:17:281:18 | 42 | main.rs:281:12:281:19 | Some(...) | |
+| main.rs:282:5:292:5 | if ... {...} else {...} | main.rs:280:22:293:1 | { ... } | |
+| main.rs:282:8:283:7 | [boolean(false)] let ... = x | main.rs:282:8:285:9 | [boolean(false)] ... && ... | false |
+| main.rs:282:8:283:7 | [boolean(true)] let ... = x | main.rs:285:5:285:5 | x | true |
+| main.rs:282:8:285:9 | [boolean(false)] ... && ... | main.rs:289:9:290:14 | let ... = x | false |
+| main.rs:282:8:285:9 | [boolean(true)] ... && ... | main.rs:287:9:287:21 | ExprStmt | true |
+| main.rs:282:12:282:18 | Some(...) | main.rs:282:8:283:7 | [boolean(false)] let ... = x | no-match |
+| main.rs:282:12:282:18 | Some(...) | main.rs:282:17:282:17 | x | match |
+| main.rs:282:17:282:17 | x | main.rs:282:8:283:7 | [boolean(true)] let ... = x | match |
+| main.rs:282:17:282:17 | x | main.rs:282:17:282:17 | x | |
+| main.rs:283:7:283:7 | x | main.rs:282:12:282:18 | Some(...) | |
+| main.rs:285:5:285:5 | x | main.rs:285:9:285:9 | 0 | |
+| main.rs:285:5:285:9 | ... > ... | main.rs:282:8:285:9 | [boolean(false)] ... && ... | false |
+| main.rs:285:5:285:9 | ... > ... | main.rs:282:8:285:9 | [boolean(true)] ... && ... | true |
+| main.rs:285:9:285:9 | 0 | main.rs:285:5:285:9 | ... > ... | |
+| main.rs:286:5:288:5 | { ... } | main.rs:282:5:292:5 | if ... {...} else {...} | |
+| main.rs:287:9:287:17 | print_i64 | main.rs:287:19:287:19 | x | |
+| main.rs:287:9:287:20 | print_i64(...) | main.rs:286:5:288:5 | { ... } | |
+| main.rs:287:9:287:21 | ExprStmt | main.rs:287:9:287:17 | print_i64 | |
+| main.rs:287:19:287:19 | x | main.rs:287:9:287:20 | print_i64(...) | |
+| main.rs:288:12:292:5 | { ... } | main.rs:282:5:292:5 | if ... {...} else {...} | |
+| main.rs:289:9:290:14 | let ... = x | main.rs:290:13:290:13 | x | |
+| main.rs:289:13:289:13 | x | main.rs:289:13:289:13 | x | |
+| main.rs:289:13:289:13 | x | main.rs:291:9:291:30 | ExprStmt | match |
+| main.rs:290:13:290:13 | x | main.rs:289:13:289:13 | x | |
+| main.rs:291:9:291:17 | print_i64 | main.rs:291:19:291:19 | x | |
+| main.rs:291:9:291:29 | print_i64(...) | main.rs:288:12:292:5 | { ... } | |
+| main.rs:291:9:291:30 | ExprStmt | main.rs:291:9:291:17 | print_i64 | |
+| main.rs:291:19:291:19 | x | main.rs:291:19:291:28 | x.unwrap() | |
+| main.rs:291:19:291:28 | x.unwrap() | main.rs:291:9:291:29 | print_i64(...) | |
+| main.rs:295:1:312:1 | enter fn match_pattern11 | main.rs:297:5:297:21 | let ... = ... | |
+| main.rs:295:1:312:1 | exit fn match_pattern11 (normal) | main.rs:295:1:312:1 | exit fn match_pattern11 | |
+| main.rs:296:22:312:1 | { ... } | main.rs:295:1:312:1 | exit fn match_pattern11 (normal) | |
+| main.rs:297:5:297:21 | let ... = ... | main.rs:297:13:297:16 | Some | |
+| main.rs:297:9:297:9 | x | main.rs:297:9:297:9 | x | |
+| main.rs:297:9:297:9 | x | main.rs:299:7:299:7 | x | match |
+| main.rs:297:13:297:16 | Some | main.rs:297:18:297:19 | 42 | |
+| main.rs:297:13:297:20 | Some(...) | main.rs:297:9:297:9 | x | |
+| main.rs:297:18:297:19 | 42 | main.rs:297:13:297:20 | Some(...) | |
+| main.rs:298:5:311:5 | if ... {...} else {...} | main.rs:296:22:312:1 | { ... } | |
+| main.rs:298:8:299:7 | [boolean(false)] let ... = x | main.rs:298:8:302:13 | [boolean(false)] ... && ... | false |
+| main.rs:298:8:299:7 | [boolean(true)] let ... = x | main.rs:302:7:302:10 | Some | true |
+| main.rs:298:8:302:13 | [boolean(false)] ... && ... | main.rs:298:8:304:9 | [boolean(false)] ... && ... | false |
+| main.rs:298:8:302:13 | [boolean(true)] ... && ... | main.rs:304:5:304:5 | x | true |
+| main.rs:298:8:304:9 | [boolean(false)] ... && ... | main.rs:308:9:309:14 | let ... = x | false |
+| main.rs:298:8:304:9 | [boolean(true)] ... && ... | main.rs:306:9:306:21 | ExprStmt | true |
+| main.rs:298:12:298:18 | Some(...) | main.rs:298:8:299:7 | [boolean(false)] let ... = x | no-match |
+| main.rs:298:12:298:18 | Some(...) | main.rs:298:17:298:17 | x | match |
+| main.rs:298:17:298:17 | x | main.rs:298:8:299:7 | [boolean(true)] let ... = x | match |
+| main.rs:298:17:298:17 | x | main.rs:298:17:298:17 | x | |
+| main.rs:299:7:299:7 | x | main.rs:298:12:298:18 | Some(...) | |
+| main.rs:301:5:302:13 | [boolean(false)] let ... = ... | main.rs:298:8:302:13 | [boolean(false)] ... && ... | false |
+| main.rs:301:5:302:13 | [boolean(true)] let ... = ... | main.rs:298:8:302:13 | [boolean(true)] ... && ... | true |
+| main.rs:301:9:301:15 | Some(...) | main.rs:301:5:302:13 | [boolean(false)] let ... = ... | no-match |
+| main.rs:301:9:301:15 | Some(...) | main.rs:301:14:301:14 | x | match |
+| main.rs:301:14:301:14 | x | main.rs:301:5:302:13 | [boolean(true)] let ... = ... | match |
+| main.rs:301:14:301:14 | x | main.rs:301:14:301:14 | x | |
+| main.rs:302:7:302:10 | Some | main.rs:302:12:302:12 | x | |
+| main.rs:302:7:302:13 | Some(...) | main.rs:301:9:301:15 | Some(...) | |
+| main.rs:302:12:302:12 | x | main.rs:302:7:302:13 | Some(...) | |
+| main.rs:304:5:304:5 | x | main.rs:304:9:304:9 | 0 | |
+| main.rs:304:5:304:9 | ... > ... | main.rs:298:8:304:9 | [boolean(false)] ... && ... | false |
+| main.rs:304:5:304:9 | ... > ... | main.rs:298:8:304:9 | [boolean(true)] ... && ... | true |
+| main.rs:304:9:304:9 | 0 | main.rs:304:5:304:9 | ... > ... | |
+| main.rs:305:5:307:5 | { ... } | main.rs:298:5:311:5 | if ... {...} else {...} | |
+| main.rs:306:9:306:17 | print_i64 | main.rs:306:19:306:19 | x | |
+| main.rs:306:9:306:20 | print_i64(...) | main.rs:305:5:307:5 | { ... } | |
+| main.rs:306:9:306:21 | ExprStmt | main.rs:306:9:306:17 | print_i64 | |
+| main.rs:306:19:306:19 | x | main.rs:306:9:306:20 | print_i64(...) | |
+| main.rs:307:12:311:5 | { ... } | main.rs:298:5:311:5 | if ... {...} else {...} | |
+| main.rs:308:9:309:14 | let ... = x | main.rs:309:13:309:13 | x | |
+| main.rs:308:13:308:13 | x | main.rs:308:13:308:13 | x | |
+| main.rs:308:13:308:13 | x | main.rs:310:9:310:30 | ExprStmt | match |
+| main.rs:309:13:309:13 | x | main.rs:308:13:308:13 | x | |
+| main.rs:310:9:310:17 | print_i64 | main.rs:310:19:310:19 | x | |
+| main.rs:310:9:310:29 | print_i64(...) | main.rs:307:12:311:5 | { ... } | |
+| main.rs:310:9:310:30 | ExprStmt | main.rs:310:9:310:17 | print_i64 | |
+| main.rs:310:19:310:19 | x | main.rs:310:19:310:28 | x.unwrap() | |
+| main.rs:310:19:310:28 | x.unwrap() | main.rs:310:9:310:29 | print_i64(...) | |
+| main.rs:314:1:330:1 | enter fn match_pattern12 | main.rs:316:5:316:21 | let ... = ... | |
+| main.rs:314:1:330:1 | exit fn match_pattern12 (normal) | main.rs:314:1:330:1 | exit fn match_pattern12 | |
+| main.rs:315:22:330:1 | { ... } | main.rs:314:1:330:1 | exit fn match_pattern12 (normal) | |
+| main.rs:316:5:316:21 | let ... = ... | main.rs:316:13:316:16 | Some | |
+| main.rs:316:9:316:9 | x | main.rs:316:9:316:9 | x | |
+| main.rs:316:9:316:9 | x | main.rs:317:5:327:5 | ExprStmt | match |
+| main.rs:316:13:316:16 | Some | main.rs:316:18:316:19 | 42 | |
+| main.rs:316:13:316:20 | Some(...) | main.rs:316:9:316:9 | x | |
+| main.rs:316:18:316:19 | 42 | main.rs:316:13:316:20 | Some(...) | |
+| main.rs:317:5:327:5 | ExprStmt | main.rs:318:7:318:7 | x | |
+| main.rs:317:5:327:5 | while ... { ... } | main.rs:329:5:329:26 | ExprStmt | |
+| main.rs:317:11:318:7 | [boolean(false)] let ... = x | main.rs:317:11:321:13 | [boolean(false)] ... && ... | false |
+| main.rs:317:11:318:7 | [boolean(true)] let ... = x | main.rs:321:7:321:10 | Some | true |
+| main.rs:317:11:321:13 | [boolean(false)] ... && ... | main.rs:317:11:323:9 | [boolean(false)] ... && ... | false |
+| main.rs:317:11:321:13 | [boolean(true)] ... && ... | main.rs:323:5:323:5 | x | true |
+| main.rs:317:11:323:9 | [boolean(false)] ... && ... | main.rs:317:5:327:5 | while ... { ... } | false |
+| main.rs:317:11:323:9 | [boolean(true)] ... && ... | main.rs:325:9:325:21 | ExprStmt | true |
+| main.rs:317:15:317:21 | Some(...) | main.rs:317:11:318:7 | [boolean(false)] let ... = x | no-match |
+| main.rs:317:15:317:21 | Some(...) | main.rs:317:20:317:20 | x | match |
+| main.rs:317:20:317:20 | x | main.rs:317:11:318:7 | [boolean(true)] let ... = x | match |
+| main.rs:317:20:317:20 | x | main.rs:317:20:317:20 | x | |
+| main.rs:318:7:318:7 | x | main.rs:317:15:317:21 | Some(...) | |
+| main.rs:320:5:321:13 | [boolean(false)] let ... = ... | main.rs:317:11:321:13 | [boolean(false)] ... && ... | false |
+| main.rs:320:5:321:13 | [boolean(true)] let ... = ... | main.rs:317:11:321:13 | [boolean(true)] ... && ... | true |
+| main.rs:320:9:320:15 | Some(...) | main.rs:320:5:321:13 | [boolean(false)] let ... = ... | no-match |
+| main.rs:320:9:320:15 | Some(...) | main.rs:320:14:320:14 | x | match |
+| main.rs:320:14:320:14 | x | main.rs:320:5:321:13 | [boolean(true)] let ... = ... | match |
+| main.rs:320:14:320:14 | x | main.rs:320:14:320:14 | x | |
+| main.rs:321:7:321:10 | Some | main.rs:321:12:321:12 | x | |
+| main.rs:321:7:321:13 | Some(...) | main.rs:320:9:320:15 | Some(...) | |
+| main.rs:321:12:321:12 | x | main.rs:321:7:321:13 | Some(...) | |
+| main.rs:323:5:323:5 | x | main.rs:323:9:323:9 | 0 | |
+| main.rs:323:5:323:9 | ... > ... | main.rs:317:11:323:9 | [boolean(false)] ... && ... | false |
+| main.rs:323:5:323:9 | ... > ... | main.rs:317:11:323:9 | [boolean(true)] ... && ... | true |
+| main.rs:323:9:323:9 | 0 | main.rs:323:5:323:9 | ... > ... | |
+| main.rs:325:9:325:17 | print_i64 | main.rs:325:19:325:19 | x | |
+| main.rs:325:9:325:20 | print_i64(...) | main.rs:326:9:326:14 | ExprStmt | |
+| main.rs:325:9:325:21 | ExprStmt | main.rs:325:9:325:17 | print_i64 | |
+| main.rs:325:19:325:19 | x | main.rs:325:9:325:20 | print_i64(...) | |
+| main.rs:326:9:326:13 | break | main.rs:317:5:327:5 | while ... { ... } | break |
+| main.rs:326:9:326:14 | ExprStmt | main.rs:326:9:326:13 | break | |
+| main.rs:329:5:329:13 | print_i64 | main.rs:329:15:329:15 | x | |
+| main.rs:329:5:329:25 | print_i64(...) | main.rs:315:22:330:1 | { ... } | |
+| main.rs:329:5:329:26 | ExprStmt | main.rs:329:5:329:13 | print_i64 | |
+| main.rs:329:15:329:15 | x | main.rs:329:15:329:24 | x.unwrap() | |
+| main.rs:329:15:329:24 | x.unwrap() | main.rs:329:5:329:25 | print_i64(...) | |
+| main.rs:332:1:344:1 | enter fn match_pattern13 | main.rs:334:5:334:21 | let ... = ... | |
+| main.rs:332:1:344:1 | exit fn match_pattern13 (normal) | main.rs:332:1:344:1 | exit fn match_pattern13 | |
+| main.rs:333:22:344:1 | { ... } | main.rs:332:1:344:1 | exit fn match_pattern13 (normal) | |
+| main.rs:334:5:334:21 | let ... = ... | main.rs:334:13:334:16 | Some | |
+| main.rs:334:9:334:9 | x | main.rs:334:9:334:9 | x | |
+| main.rs:334:9:334:9 | x | main.rs:335:5:341:5 | ExprStmt | match |
+| main.rs:334:13:334:16 | Some | main.rs:334:18:334:19 | 42 | |
+| main.rs:334:13:334:20 | Some(...) | main.rs:334:9:334:9 | x | |
+| main.rs:334:18:334:19 | 42 | main.rs:334:13:334:20 | Some(...) | |
+| main.rs:335:5:341:5 | ExprStmt | main.rs:335:11:335:11 | x | |
+| main.rs:335:5:341:5 | match x { ... } | main.rs:343:5:343:26 | ExprStmt | |
+| main.rs:335:11:335:11 | x | main.rs:336:9:336:15 | Some(...) | |
+| main.rs:336:9:336:15 | Some(...) | main.rs:336:14:336:14 | x | match |
+| main.rs:336:9:336:15 | Some(...) | main.rs:340:9:340:9 | _ | no-match |
+| main.rs:336:14:336:14 | x | main.rs:336:14:336:14 | x | |
+| main.rs:336:14:336:14 | x | main.rs:338:18:338:18 | x | match |
+| main.rs:337:16:338:18 | [boolean(true)] let ... = x | main.rs:339:19:339:19 | x | true |
+| main.rs:337:16:339:23 | [boolean(false)] ... && ... | main.rs:340:9:340:9 | _ | false |
+| main.rs:337:16:339:23 | [boolean(true)] ... && ... | main.rs:339:28:339:29 | TupleExpr | true |
+| main.rs:337:20:337:20 | x | main.rs:337:16:338:18 | [boolean(true)] let ... = x | match |
+| main.rs:337:20:337:20 | x | main.rs:337:20:337:20 | x | |
+| main.rs:338:18:338:18 | x | main.rs:337:20:337:20 | x | |
+| main.rs:339:19:339:19 | x | main.rs:339:23:339:23 | 0 | |
+| main.rs:339:19:339:23 | ... > ... | main.rs:337:16:339:23 | [boolean(false)] ... && ... | false |
+| main.rs:339:19:339:23 | ... > ... | main.rs:337:16:339:23 | [boolean(true)] ... && ... | true |
+| main.rs:339:23:339:23 | 0 | main.rs:339:19:339:23 | ... > ... | |
+| main.rs:339:28:339:29 | TupleExpr | main.rs:335:5:341:5 | match x { ... } | |
+| main.rs:340:9:340:9 | _ | main.rs:340:14:340:15 | TupleExpr | match |
+| main.rs:340:14:340:15 | TupleExpr | main.rs:335:5:341:5 | match x { ... } | |
+| main.rs:343:5:343:13 | print_i64 | main.rs:343:15:343:15 | x | |
+| main.rs:343:5:343:25 | print_i64(...) | main.rs:333:22:344:1 | { ... } | |
+| main.rs:343:5:343:26 | ExprStmt | main.rs:343:5:343:13 | print_i64 | |
+| main.rs:343:15:343:15 | x | main.rs:343:15:343:24 | x.unwrap() | |
+| main.rs:343:15:343:24 | x.unwrap() | main.rs:343:5:343:25 | print_i64(...) | |
+| main.rs:346:1:361:1 | enter fn match_pattern14 | main.rs:348:5:348:19 | let ... = ... | |
+| main.rs:346:1:361:1 | exit fn match_pattern14 (normal) | main.rs:346:1:361:1 | exit fn match_pattern14 | |
+| main.rs:347:22:361:1 | { ... } | main.rs:346:1:361:1 | exit fn match_pattern14 (normal) | |
+| main.rs:348:5:348:19 | let ... = ... | main.rs:348:13:348:14 | Ok | |
+| main.rs:348:9:348:9 | x | main.rs:348:9:348:9 | x | |
+| main.rs:348:9:348:9 | x | main.rs:350:7:350:7 | x | match |
+| main.rs:348:13:348:14 | Ok | main.rs:348:16:348:17 | 42 | |
+| main.rs:348:13:348:18 | Ok(...) | main.rs:348:9:348:9 | x | |
+| main.rs:348:16:348:17 | 42 | main.rs:348:13:348:18 | Ok(...) | |
+| main.rs:349:5:360:5 | if ... {...} else {...} | main.rs:347:22:361:1 | { ... } | |
+| main.rs:349:8:350:7 | [boolean(false)] let ... = x | main.rs:355:7:355:7 | x | false |
+| main.rs:349:8:350:7 | [boolean(true)] let ... = x | main.rs:352:9:352:21 | ExprStmt | true |
+| main.rs:349:12:349:17 | Err(...) | main.rs:349:8:350:7 | [boolean(false)] let ... = x | no-match |
+| main.rs:349:12:349:17 | Err(...) | main.rs:349:16:349:16 | x | match |
+| main.rs:349:16:349:16 | x | main.rs:349:8:350:7 | [boolean(true)] let ... = x | match |
+| main.rs:349:16:349:16 | x | main.rs:349:16:349:16 | x | |
+| main.rs:350:7:350:7 | x | main.rs:349:12:349:17 | Err(...) | |
+| main.rs:351:5:353:5 | { ... } | main.rs:349:5:360:5 | if ... {...} else {...} | |
+| main.rs:352:9:352:17 | print_i64 | main.rs:352:19:352:19 | x | |
+| main.rs:352:9:352:20 | print_i64(...) | main.rs:351:5:353:5 | { ... } | |
+| main.rs:352:9:352:21 | ExprStmt | main.rs:352:9:352:17 | print_i64 | |
+| main.rs:352:19:352:19 | x | main.rs:352:9:352:20 | print_i64(...) | |
+| main.rs:354:10:360:5 | if ... {...} else {...} | main.rs:349:5:360:5 | if ... {...} else {...} | |
+| main.rs:354:13:355:7 | [boolean(false)] let ... = x | main.rs:359:9:359:30 | ExprStmt | false |
+| main.rs:354:13:355:7 | [boolean(true)] let ... = x | main.rs:357:9:357:21 | ExprStmt | true |
+| main.rs:354:17:354:21 | Ok(...) | main.rs:354:13:355:7 | [boolean(false)] let ... = x | no-match |
+| main.rs:354:17:354:21 | Ok(...) | main.rs:354:20:354:20 | x | match |
+| main.rs:354:20:354:20 | x | main.rs:354:13:355:7 | [boolean(true)] let ... = x | match |
+| main.rs:354:20:354:20 | x | main.rs:354:20:354:20 | x | |
+| main.rs:355:7:355:7 | x | main.rs:354:17:354:21 | Ok(...) | |
+| main.rs:356:5:358:5 | { ... } | main.rs:354:10:360:5 | if ... {...} else {...} | |
| main.rs:357:9:357:17 | print_i64 | main.rs:357:19:357:19 | x | |
-| main.rs:357:9:357:29 | print_i64(...) | main.rs:356:12:358:5 | { ... } | |
-| main.rs:357:9:357:30 | ExprStmt | main.rs:357:9:357:17 | print_i64 | |
-| main.rs:357:19:357:19 | x | main.rs:357:19:357:28 | x.unwrap() | |
-| main.rs:357:19:357:28 | x.unwrap() | main.rs:357:9:357:29 | print_i64(...) | |
-| main.rs:361:1:371:1 | enter fn param_pattern1 | main.rs:362:5:362:6 | a8 | |
-| main.rs:361:1:371:1 | exit fn param_pattern1 (normal) | main.rs:361:1:371:1 | exit fn param_pattern1 | |
-| main.rs:362:5:362:6 | a8 | main.rs:362:5:362:6 | a8 | |
-| main.rs:362:5:362:6 | a8 | main.rs:362:5:362:12 | ...: ... | match |
-| main.rs:362:5:362:12 | ...: ... | main.rs:363:5:366:5 | TuplePat | |
-| main.rs:363:5:366:5 | TuplePat | main.rs:364:9:364:10 | b3 | match |
-| main.rs:363:5:366:19 | ...: ... | main.rs:368:5:368:18 | ExprStmt | |
-| main.rs:364:9:364:10 | b3 | main.rs:364:9:364:10 | b3 | |
-| main.rs:364:9:364:10 | b3 | main.rs:365:9:365:10 | c1 | match |
-| main.rs:365:9:365:10 | c1 | main.rs:363:5:366:19 | ...: ... | match |
-| main.rs:365:9:365:10 | c1 | main.rs:365:9:365:10 | c1 | |
-| main.rs:367:9:371:1 | { ... } | main.rs:361:1:371:1 | exit fn param_pattern1 (normal) | |
-| main.rs:368:5:368:13 | print_str | main.rs:368:15:368:16 | a8 | |
-| main.rs:368:5:368:17 | print_str(...) | main.rs:369:5:369:18 | ExprStmt | |
-| main.rs:368:5:368:18 | ExprStmt | main.rs:368:5:368:13 | print_str | |
-| main.rs:368:15:368:16 | a8 | main.rs:368:5:368:17 | print_str(...) | |
-| main.rs:369:5:369:13 | print_str | main.rs:369:15:369:16 | b3 | |
-| main.rs:369:5:369:17 | print_str(...) | main.rs:370:5:370:18 | ExprStmt | |
-| main.rs:369:5:369:18 | ExprStmt | main.rs:369:5:369:13 | print_str | |
-| main.rs:369:15:369:16 | b3 | main.rs:369:5:369:17 | print_str(...) | |
-| main.rs:370:5:370:13 | print_str | main.rs:370:15:370:16 | c1 | |
-| main.rs:370:5:370:17 | print_str(...) | main.rs:367:9:371:1 | { ... } | |
+| main.rs:357:9:357:20 | print_i64(...) | main.rs:356:5:358:5 | { ... } | |
+| main.rs:357:9:357:21 | ExprStmt | main.rs:357:9:357:17 | print_i64 | |
+| main.rs:357:19:357:19 | x | main.rs:357:9:357:20 | print_i64(...) | |
+| main.rs:358:12:360:5 | { ... } | main.rs:354:10:360:5 | if ... {...} else {...} | |
+| main.rs:359:9:359:17 | print_i64 | main.rs:359:19:359:19 | x | |
+| main.rs:359:9:359:29 | print_i64(...) | main.rs:358:12:360:5 | { ... } | |
+| main.rs:359:9:359:30 | ExprStmt | main.rs:359:9:359:17 | print_i64 | |
+| main.rs:359:19:359:19 | x | main.rs:359:19:359:28 | x.unwrap() | |
+| main.rs:359:19:359:28 | x.unwrap() | main.rs:359:9:359:29 | print_i64(...) | |
+| main.rs:363:1:373:1 | enter fn param_pattern1 | main.rs:364:5:364:6 | a8 | |
+| main.rs:363:1:373:1 | exit fn param_pattern1 (normal) | main.rs:363:1:373:1 | exit fn param_pattern1 | |
+| main.rs:364:5:364:6 | a8 | main.rs:364:5:364:6 | a8 | |
+| main.rs:364:5:364:6 | a8 | main.rs:364:5:364:12 | ...: ... | match |
+| main.rs:364:5:364:12 | ...: ... | main.rs:365:5:368:5 | TuplePat | |
+| main.rs:365:5:368:5 | TuplePat | main.rs:366:9:366:10 | b3 | match |
+| main.rs:365:5:368:19 | ...: ... | main.rs:370:5:370:18 | ExprStmt | |
+| main.rs:366:9:366:10 | b3 | main.rs:366:9:366:10 | b3 | |
+| main.rs:366:9:366:10 | b3 | main.rs:367:9:367:10 | c1 | match |
+| main.rs:367:9:367:10 | c1 | main.rs:365:5:368:19 | ...: ... | match |
+| main.rs:367:9:367:10 | c1 | main.rs:367:9:367:10 | c1 | |
+| main.rs:369:9:373:1 | { ... } | main.rs:363:1:373:1 | exit fn param_pattern1 (normal) | |
+| main.rs:370:5:370:13 | print_str | main.rs:370:15:370:16 | a8 | |
+| main.rs:370:5:370:17 | print_str(...) | main.rs:371:5:371:18 | ExprStmt | |
| main.rs:370:5:370:18 | ExprStmt | main.rs:370:5:370:13 | print_str | |
-| main.rs:370:15:370:16 | c1 | main.rs:370:5:370:17 | print_str(...) | |
-| main.rs:373:1:376:1 | enter fn param_pattern2 | main.rs:373:20:373:35 | ...::Left(...) | |
-| main.rs:373:1:376:1 | exit fn param_pattern2 (normal) | main.rs:373:1:376:1 | exit fn param_pattern2 | |
-| main.rs:373:19:373:64 | ...: Either | main.rs:375:5:375:18 | ExprStmt | |
-| main.rs:373:20:373:35 | ...::Left(...) | main.rs:373:33:373:34 | a9 | match |
-| main.rs:373:20:373:35 | ...::Left(...) | main.rs:373:39:373:55 | ...::Right(...) | no-match |
-| main.rs:373:20:373:55 | ... \| ... | main.rs:373:19:373:64 | ...: Either | match |
-| main.rs:373:33:373:34 | a9 | main.rs:373:20:373:55 | ... \| ... | match |
-| main.rs:373:33:373:34 | a9 | main.rs:373:33:373:34 | a9 | |
-| main.rs:373:39:373:55 | ...::Right(...) | main.rs:373:53:373:54 | a9 | match |
-| main.rs:373:53:373:54 | a9 | main.rs:373:20:373:55 | ... \| ... | match |
-| main.rs:373:53:373:54 | a9 | main.rs:373:53:373:54 | a9 | |
-| main.rs:374:9:376:1 | { ... } | main.rs:373:1:376:1 | exit fn param_pattern2 (normal) | |
-| main.rs:375:5:375:13 | print_i64 | main.rs:375:15:375:16 | a9 | |
-| main.rs:375:5:375:17 | print_i64(...) | main.rs:374:9:376:1 | { ... } | |
-| main.rs:375:5:375:18 | ExprStmt | main.rs:375:5:375:13 | print_i64 | |
-| main.rs:375:15:375:16 | a9 | main.rs:375:5:375:17 | print_i64(...) | |
-| main.rs:378:1:413:1 | enter fn destruct_assignment | main.rs:379:5:383:18 | let ... = ... | |
-| main.rs:378:1:413:1 | exit fn destruct_assignment (normal) | main.rs:378:1:413:1 | exit fn destruct_assignment | |
-| main.rs:378:26:413:1 | { ... } | main.rs:378:1:413:1 | exit fn destruct_assignment (normal) | |
-| main.rs:379:5:383:18 | let ... = ... | main.rs:383:10:383:10 | 1 | |
-| main.rs:379:9:383:5 | TuplePat | main.rs:380:13:380:15 | a10 | match |
-| main.rs:380:9:380:15 | mut a10 | main.rs:381:13:381:14 | b4 | match |
-| main.rs:380:13:380:15 | a10 | main.rs:380:9:380:15 | mut a10 | |
-| main.rs:381:9:381:14 | mut b4 | main.rs:382:13:382:14 | c2 | match |
-| main.rs:381:13:381:14 | b4 | main.rs:381:9:381:14 | mut b4 | |
-| main.rs:382:9:382:14 | mut c2 | main.rs:384:5:384:19 | ExprStmt | match |
-| main.rs:382:13:382:14 | c2 | main.rs:382:9:382:14 | mut c2 | |
-| main.rs:383:9:383:17 | TupleExpr | main.rs:379:9:383:5 | TuplePat | |
-| main.rs:383:10:383:10 | 1 | main.rs:383:13:383:13 | 2 | |
-| main.rs:383:13:383:13 | 2 | main.rs:383:16:383:16 | 3 | |
-| main.rs:383:16:383:16 | 3 | main.rs:383:9:383:17 | TupleExpr | |
-| main.rs:384:5:384:13 | print_i64 | main.rs:384:15:384:17 | a10 | |
-| main.rs:384:5:384:18 | print_i64(...) | main.rs:385:5:385:18 | ExprStmt | |
-| main.rs:384:5:384:19 | ExprStmt | main.rs:384:5:384:13 | print_i64 | |
-| main.rs:384:15:384:17 | a10 | main.rs:384:5:384:18 | print_i64(...) | |
-| main.rs:385:5:385:13 | print_i64 | main.rs:385:15:385:16 | b4 | |
-| main.rs:385:5:385:17 | print_i64(...) | main.rs:386:5:386:18 | ExprStmt | |
-| main.rs:385:5:385:18 | ExprStmt | main.rs:385:5:385:13 | print_i64 | |
-| main.rs:385:15:385:16 | b4 | main.rs:385:5:385:17 | print_i64(...) | |
-| main.rs:386:5:386:13 | print_i64 | main.rs:386:15:386:16 | c2 | |
-| main.rs:386:5:386:17 | print_i64(...) | main.rs:388:5:396:6 | ExprStmt | |
-| main.rs:386:5:386:18 | ExprStmt | main.rs:386:5:386:13 | print_i64 | |
-| main.rs:386:15:386:16 | c2 | main.rs:386:5:386:17 | print_i64(...) | |
-| main.rs:388:5:392:5 | TupleExpr | main.rs:393:9:393:11 | a10 | |
-| main.rs:388:5:396:5 | ... = ... | main.rs:397:5:397:19 | ExprStmt | |
-| main.rs:388:5:396:6 | ExprStmt | main.rs:389:9:389:10 | c2 | |
-| main.rs:389:9:389:10 | c2 | main.rs:390:9:390:10 | b4 | |
-| main.rs:390:9:390:10 | b4 | main.rs:391:9:391:11 | a10 | |
-| main.rs:391:9:391:11 | a10 | main.rs:388:5:392:5 | TupleExpr | |
-| main.rs:392:9:396:5 | TupleExpr | main.rs:388:5:396:5 | ... = ... | |
-| main.rs:393:9:393:11 | a10 | main.rs:394:9:394:10 | b4 | |
-| main.rs:394:9:394:10 | b4 | main.rs:395:9:395:10 | c2 | |
-| main.rs:395:9:395:10 | c2 | main.rs:392:9:396:5 | TupleExpr | |
-| main.rs:397:5:397:13 | print_i64 | main.rs:397:15:397:17 | a10 | |
-| main.rs:397:5:397:18 | print_i64(...) | main.rs:398:5:398:18 | ExprStmt | |
-| main.rs:397:5:397:19 | ExprStmt | main.rs:397:5:397:13 | print_i64 | |
-| main.rs:397:15:397:17 | a10 | main.rs:397:5:397:18 | print_i64(...) | |
-| main.rs:398:5:398:13 | print_i64 | main.rs:398:15:398:16 | b4 | |
-| main.rs:398:5:398:17 | print_i64(...) | main.rs:399:5:399:18 | ExprStmt | |
-| main.rs:398:5:398:18 | ExprStmt | main.rs:398:5:398:13 | print_i64 | |
-| main.rs:398:15:398:16 | b4 | main.rs:398:5:398:17 | print_i64(...) | |
-| main.rs:399:5:399:13 | print_i64 | main.rs:399:15:399:16 | c2 | |
-| main.rs:399:5:399:17 | print_i64(...) | main.rs:401:5:409:5 | ExprStmt | |
-| main.rs:399:5:399:18 | ExprStmt | main.rs:399:5:399:13 | print_i64 | |
-| main.rs:399:15:399:16 | c2 | main.rs:399:5:399:17 | print_i64(...) | |
-| main.rs:401:5:409:5 | ExprStmt | main.rs:401:12:401:12 | 4 | |
-| main.rs:401:5:409:5 | match ... { ... } | main.rs:411:5:411:19 | ExprStmt | |
-| main.rs:401:11:401:16 | TupleExpr | main.rs:402:9:405:9 | TuplePat | |
-| main.rs:401:12:401:12 | 4 | main.rs:401:15:401:15 | 5 | |
-| main.rs:401:15:401:15 | 5 | main.rs:401:11:401:16 | TupleExpr | |
-| main.rs:402:9:405:9 | TuplePat | main.rs:403:13:403:15 | a10 | match |
-| main.rs:403:13:403:15 | a10 | main.rs:403:13:403:15 | a10 | |
-| main.rs:403:13:403:15 | a10 | main.rs:404:13:404:14 | b4 | match |
-| main.rs:404:13:404:14 | b4 | main.rs:404:13:404:14 | b4 | |
-| main.rs:404:13:404:14 | b4 | main.rs:406:13:406:27 | ExprStmt | match |
-| main.rs:405:14:408:9 | { ... } | main.rs:401:5:409:5 | match ... { ... } | |
-| main.rs:406:13:406:21 | print_i64 | main.rs:406:23:406:25 | a10 | |
-| main.rs:406:13:406:26 | print_i64(...) | main.rs:407:13:407:26 | ExprStmt | |
-| main.rs:406:13:406:27 | ExprStmt | main.rs:406:13:406:21 | print_i64 | |
-| main.rs:406:23:406:25 | a10 | main.rs:406:13:406:26 | print_i64(...) | |
-| main.rs:407:13:407:21 | print_i64 | main.rs:407:23:407:24 | b4 | |
-| main.rs:407:13:407:25 | print_i64(...) | main.rs:405:14:408:9 | { ... } | |
-| main.rs:407:13:407:26 | ExprStmt | main.rs:407:13:407:21 | print_i64 | |
-| main.rs:407:23:407:24 | b4 | main.rs:407:13:407:25 | print_i64(...) | |
-| main.rs:411:5:411:13 | print_i64 | main.rs:411:15:411:17 | a10 | |
-| main.rs:411:5:411:18 | print_i64(...) | main.rs:412:5:412:18 | ExprStmt | |
-| main.rs:411:5:411:19 | ExprStmt | main.rs:411:5:411:13 | print_i64 | |
-| main.rs:411:15:411:17 | a10 | main.rs:411:5:411:18 | print_i64(...) | |
-| main.rs:412:5:412:13 | print_i64 | main.rs:412:15:412:16 | b4 | |
-| main.rs:412:5:412:17 | print_i64(...) | main.rs:378:26:413:1 | { ... } | |
-| main.rs:412:5:412:18 | ExprStmt | main.rs:412:5:412:13 | print_i64 | |
-| main.rs:412:15:412:16 | b4 | main.rs:412:5:412:17 | print_i64(...) | |
-| main.rs:415:1:430:1 | enter fn closure_variable | main.rs:416:5:418:10 | let ... = ... | |
-| main.rs:415:1:430:1 | exit fn closure_variable (normal) | main.rs:415:1:430:1 | exit fn closure_variable | |
-| main.rs:415:23:430:1 | { ... } | main.rs:415:1:430:1 | exit fn closure_variable (normal) | |
-| main.rs:416:5:418:10 | let ... = ... | main.rs:417:9:418:9 | \|...\| x | |
-| main.rs:416:9:416:23 | example_closure | main.rs:416:9:416:23 | example_closure | |
-| main.rs:416:9:416:23 | example_closure | main.rs:419:5:420:27 | let ... = ... | match |
-| main.rs:417:9:418:9 | \|...\| x | main.rs:416:9:416:23 | example_closure | |
-| main.rs:417:9:418:9 | enter \|...\| x | main.rs:417:10:417:10 | x | |
-| main.rs:417:9:418:9 | exit \|...\| x (normal) | main.rs:417:9:418:9 | exit \|...\| x | |
-| main.rs:417:10:417:10 | x | main.rs:417:10:417:10 | x | |
-| main.rs:417:10:417:10 | x | main.rs:417:10:417:15 | ...: i64 | match |
-| main.rs:417:10:417:15 | ...: i64 | main.rs:418:9:418:9 | x | |
-| main.rs:418:9:418:9 | x | main.rs:417:9:418:9 | exit \|...\| x (normal) | |
-| main.rs:419:5:420:27 | let ... = ... | main.rs:420:9:420:23 | example_closure | |
-| main.rs:419:9:419:10 | n1 | main.rs:419:9:419:10 | n1 | |
-| main.rs:419:9:419:10 | n1 | main.rs:421:5:421:18 | ExprStmt | match |
-| main.rs:420:9:420:23 | example_closure | main.rs:420:25:420:25 | 5 | |
-| main.rs:420:9:420:26 | example_closure(...) | main.rs:419:9:419:10 | n1 | |
-| main.rs:420:25:420:25 | 5 | main.rs:420:9:420:26 | example_closure(...) | |
-| main.rs:421:5:421:13 | print_i64 | main.rs:421:15:421:16 | n1 | |
-| main.rs:421:5:421:17 | print_i64(...) | main.rs:423:5:423:25 | ExprStmt | |
-| main.rs:421:5:421:18 | ExprStmt | main.rs:421:5:421:13 | print_i64 | |
-| main.rs:421:15:421:16 | n1 | main.rs:421:5:421:17 | print_i64(...) | |
-| main.rs:423:5:423:22 | immutable_variable | main.rs:423:5:423:24 | immutable_variable(...) | |
-| main.rs:423:5:423:24 | immutable_variable(...) | main.rs:424:5:426:10 | let ... = ... | |
-| main.rs:423:5:423:25 | ExprStmt | main.rs:423:5:423:22 | immutable_variable | |
-| main.rs:424:5:426:10 | let ... = ... | main.rs:425:5:426:9 | \|...\| x | |
-| main.rs:424:9:424:26 | immutable_variable | main.rs:424:9:424:26 | immutable_variable | |
-| main.rs:424:9:424:26 | immutable_variable | main.rs:427:5:428:30 | let ... = ... | match |
-| main.rs:425:5:426:9 | \|...\| x | main.rs:424:9:424:26 | immutable_variable | |
-| main.rs:425:5:426:9 | enter \|...\| x | main.rs:425:6:425:6 | x | |
-| main.rs:425:5:426:9 | exit \|...\| x (normal) | main.rs:425:5:426:9 | exit \|...\| x | |
-| main.rs:425:6:425:6 | x | main.rs:425:6:425:6 | x | |
-| main.rs:425:6:425:6 | x | main.rs:425:6:425:11 | ...: i64 | match |
-| main.rs:425:6:425:11 | ...: i64 | main.rs:426:9:426:9 | x | |
-| main.rs:426:9:426:9 | x | main.rs:425:5:426:9 | exit \|...\| x (normal) | |
-| main.rs:427:5:428:30 | let ... = ... | main.rs:428:9:428:26 | immutable_variable | |
-| main.rs:427:9:427:10 | n2 | main.rs:427:9:427:10 | n2 | |
-| main.rs:427:9:427:10 | n2 | main.rs:429:5:429:18 | ExprStmt | match |
-| main.rs:428:9:428:26 | immutable_variable | main.rs:428:28:428:28 | 6 | |
-| main.rs:428:9:428:29 | immutable_variable(...) | main.rs:427:9:427:10 | n2 | |
-| main.rs:428:28:428:28 | 6 | main.rs:428:9:428:29 | immutable_variable(...) | |
-| main.rs:429:5:429:13 | print_i64 | main.rs:429:15:429:16 | n2 | |
-| main.rs:429:5:429:17 | print_i64(...) | main.rs:415:23:430:1 | { ... } | |
-| main.rs:429:5:429:18 | ExprStmt | main.rs:429:5:429:13 | print_i64 | |
-| main.rs:429:15:429:16 | n2 | main.rs:429:5:429:17 | print_i64(...) | |
-| main.rs:432:1:462:1 | enter fn nested_function | main.rs:434:5:436:10 | let ... = ... | |
-| main.rs:432:1:462:1 | exit fn nested_function (normal) | main.rs:432:1:462:1 | exit fn nested_function | |
-| main.rs:432:22:462:1 | { ... } | main.rs:432:1:462:1 | exit fn nested_function (normal) | |
-| main.rs:434:5:436:10 | let ... = ... | main.rs:435:9:436:9 | \|...\| x | |
-| main.rs:434:9:434:9 | f | main.rs:434:9:434:9 | f | |
-| main.rs:434:9:434:9 | f | main.rs:437:5:437:20 | ExprStmt | match |
-| main.rs:435:9:436:9 | \|...\| x | main.rs:434:9:434:9 | f | |
-| main.rs:435:9:436:9 | enter \|...\| x | main.rs:435:10:435:10 | x | |
-| main.rs:435:9:436:9 | exit \|...\| x (normal) | main.rs:435:9:436:9 | exit \|...\| x | |
-| main.rs:435:10:435:10 | x | main.rs:435:10:435:10 | x | |
-| main.rs:435:10:435:10 | x | main.rs:435:10:435:15 | ...: i64 | match |
-| main.rs:435:10:435:15 | ...: i64 | main.rs:436:9:436:9 | x | |
-| main.rs:436:9:436:9 | x | main.rs:435:9:436:9 | exit \|...\| x (normal) | |
-| main.rs:437:5:437:13 | print_i64 | main.rs:437:15:437:15 | f | |
-| main.rs:437:5:437:19 | print_i64(...) | main.rs:439:5:442:5 | fn f | |
-| main.rs:437:5:437:20 | ExprStmt | main.rs:437:5:437:13 | print_i64 | |
-| main.rs:437:15:437:15 | f | main.rs:437:17:437:17 | 1 | |
-| main.rs:437:15:437:18 | f(...) | main.rs:437:5:437:19 | print_i64(...) | |
-| main.rs:437:17:437:17 | 1 | main.rs:437:15:437:18 | f(...) | |
-| main.rs:439:5:442:5 | enter fn f | main.rs:439:10:439:10 | x | |
-| main.rs:439:5:442:5 | exit fn f (normal) | main.rs:439:5:442:5 | exit fn f | |
-| main.rs:439:5:442:5 | fn f | main.rs:444:5:444:20 | ExprStmt | |
-| main.rs:439:10:439:10 | x | main.rs:439:10:439:10 | x | |
-| main.rs:439:10:439:10 | x | main.rs:439:10:439:15 | ...: i64 | match |
-| main.rs:439:10:439:15 | ...: i64 | main.rs:441:9:441:9 | x | |
-| main.rs:440:5:442:5 | { ... } | main.rs:439:5:442:5 | exit fn f (normal) | |
-| main.rs:441:9:441:9 | x | main.rs:441:13:441:13 | 1 | |
-| main.rs:441:9:441:13 | ... + ... | main.rs:440:5:442:5 | { ... } | |
-| main.rs:441:13:441:13 | 1 | main.rs:441:9:441:13 | ... + ... | |
-| main.rs:444:5:444:13 | print_i64 | main.rs:444:15:444:15 | f | |
-| main.rs:444:5:444:19 | print_i64(...) | main.rs:447:9:447:24 | ExprStmt | |
-| main.rs:444:5:444:20 | ExprStmt | main.rs:444:5:444:13 | print_i64 | |
-| main.rs:444:15:444:15 | f | main.rs:444:17:444:17 | 2 | |
-| main.rs:444:15:444:18 | f(...) | main.rs:444:5:444:19 | print_i64(...) | |
-| main.rs:444:17:444:17 | 2 | main.rs:444:15:444:18 | f(...) | |
-| main.rs:446:5:461:5 | { ... } | main.rs:432:22:462:1 | { ... } | |
-| main.rs:447:9:447:17 | print_i64 | main.rs:447:19:447:19 | f | |
-| main.rs:447:9:447:23 | print_i64(...) | main.rs:448:9:451:9 | fn f | |
-| main.rs:447:9:447:24 | ExprStmt | main.rs:447:9:447:17 | print_i64 | |
-| main.rs:447:19:447:19 | f | main.rs:447:21:447:21 | 3 | |
-| main.rs:447:19:447:22 | f(...) | main.rs:447:9:447:23 | print_i64(...) | |
-| main.rs:447:21:447:21 | 3 | main.rs:447:19:447:22 | f(...) | |
-| main.rs:448:9:451:9 | enter fn f | main.rs:448:14:448:14 | x | |
-| main.rs:448:9:451:9 | exit fn f (normal) | main.rs:448:9:451:9 | exit fn f | |
-| main.rs:448:9:451:9 | fn f | main.rs:453:9:455:9 | ExprStmt | |
-| main.rs:448:14:448:14 | x | main.rs:448:14:448:14 | x | |
-| main.rs:448:14:448:14 | x | main.rs:448:14:448:19 | ...: i64 | match |
-| main.rs:448:14:448:19 | ...: i64 | main.rs:450:13:450:13 | 2 | |
-| main.rs:449:9:451:9 | { ... } | main.rs:448:9:451:9 | exit fn f (normal) | |
-| main.rs:450:13:450:13 | 2 | main.rs:450:17:450:17 | x | |
-| main.rs:450:13:450:17 | ... * ... | main.rs:449:9:451:9 | { ... } | |
-| main.rs:450:17:450:17 | x | main.rs:450:13:450:17 | ... * ... | |
-| main.rs:453:9:455:9 | ExprStmt | main.rs:454:13:454:28 | ExprStmt | |
-| main.rs:453:9:455:9 | { ... } | main.rs:457:9:459:14 | let ... = ... | |
-| main.rs:454:13:454:21 | print_i64 | main.rs:454:23:454:23 | f | |
-| main.rs:454:13:454:27 | print_i64(...) | main.rs:453:9:455:9 | { ... } | |
-| main.rs:454:13:454:28 | ExprStmt | main.rs:454:13:454:21 | print_i64 | |
-| main.rs:454:23:454:23 | f | main.rs:454:25:454:25 | 4 | |
-| main.rs:454:23:454:26 | f(...) | main.rs:454:13:454:27 | print_i64(...) | |
-| main.rs:454:25:454:25 | 4 | main.rs:454:23:454:26 | f(...) | |
-| main.rs:457:9:459:14 | let ... = ... | main.rs:458:13:459:13 | \|...\| x | |
-| main.rs:457:13:457:13 | f | main.rs:457:13:457:13 | f | |
-| main.rs:457:13:457:13 | f | main.rs:460:9:460:24 | ExprStmt | match |
-| main.rs:458:13:459:13 | \|...\| x | main.rs:457:13:457:13 | f | |
-| main.rs:458:13:459:13 | enter \|...\| x | main.rs:458:14:458:14 | x | |
-| main.rs:458:13:459:13 | exit \|...\| x (normal) | main.rs:458:13:459:13 | exit \|...\| x | |
-| main.rs:458:14:458:14 | x | main.rs:458:14:458:14 | x | |
-| main.rs:458:14:458:14 | x | main.rs:458:14:458:19 | ...: i64 | match |
-| main.rs:458:14:458:19 | ...: i64 | main.rs:459:13:459:13 | x | |
-| main.rs:459:13:459:13 | x | main.rs:458:13:459:13 | exit \|...\| x (normal) | |
-| main.rs:460:9:460:17 | print_i64 | main.rs:460:19:460:19 | f | |
-| main.rs:460:9:460:23 | print_i64(...) | main.rs:446:5:461:5 | { ... } | |
-| main.rs:460:9:460:24 | ExprStmt | main.rs:460:9:460:17 | print_i64 | |
-| main.rs:460:19:460:19 | f | main.rs:460:21:460:21 | 5 | |
-| main.rs:460:19:460:22 | f(...) | main.rs:460:9:460:23 | print_i64(...) | |
-| main.rs:460:21:460:21 | 5 | main.rs:460:19:460:22 | f(...) | |
-| main.rs:464:1:471:1 | enter fn for_variable | main.rs:465:5:465:42 | let ... = ... | |
-| main.rs:464:1:471:1 | exit fn for_variable (normal) | main.rs:464:1:471:1 | exit fn for_variable | |
-| main.rs:464:19:471:1 | { ... } | main.rs:464:1:471:1 | exit fn for_variable (normal) | |
-| main.rs:465:5:465:42 | let ... = ... | main.rs:465:15:465:22 | "apples" | |
-| main.rs:465:9:465:9 | v | main.rs:465:9:465:9 | v | |
-| main.rs:465:9:465:9 | v | main.rs:468:12:468:12 | v | match |
-| main.rs:465:13:465:41 | &... | main.rs:465:9:465:9 | v | |
-| main.rs:465:14:465:41 | [...] | main.rs:465:13:465:41 | &... | |
-| main.rs:465:15:465:22 | "apples" | main.rs:465:25:465:30 | "cake" | |
-| main.rs:465:25:465:30 | "cake" | main.rs:465:33:465:40 | "coffee" | |
-| main.rs:465:33:465:40 | "coffee" | main.rs:465:14:465:41 | [...] | |
-| main.rs:467:5:470:5 | for ... in ... { ... } | main.rs:464:19:471:1 | { ... } | |
-| main.rs:467:9:467:12 | text | main.rs:467:5:470:5 | for ... in ... { ... } | no-match |
-| main.rs:467:9:467:12 | text | main.rs:467:9:467:12 | text | |
-| main.rs:467:9:467:12 | text | main.rs:469:9:469:24 | ExprStmt | match |
-| main.rs:468:12:468:12 | v | main.rs:467:9:467:12 | text | |
-| main.rs:468:14:470:5 | { ... } | main.rs:467:9:467:12 | text | |
-| main.rs:469:9:469:17 | print_str | main.rs:469:19:469:22 | text | |
-| main.rs:469:9:469:23 | print_str(...) | main.rs:468:14:470:5 | { ... } | |
-| main.rs:469:9:469:24 | ExprStmt | main.rs:469:9:469:17 | print_str | |
-| main.rs:469:19:469:22 | text | main.rs:469:9:469:23 | print_str(...) | |
-| main.rs:473:1:479:1 | enter fn add_assign | main.rs:474:5:474:18 | let ... = 0 | |
-| main.rs:473:1:479:1 | exit fn add_assign (normal) | main.rs:473:1:479:1 | exit fn add_assign | |
-| main.rs:473:17:479:1 | { ... } | main.rs:473:1:479:1 | exit fn add_assign (normal) | |
-| main.rs:474:5:474:18 | let ... = 0 | main.rs:474:17:474:17 | 0 | |
-| main.rs:474:9:474:13 | mut a | main.rs:475:5:475:11 | ExprStmt | match |
-| main.rs:474:13:474:13 | a | main.rs:474:9:474:13 | mut a | |
-| main.rs:474:17:474:17 | 0 | main.rs:474:13:474:13 | a | |
-| main.rs:475:5:475:5 | a | main.rs:475:10:475:10 | 1 | |
-| main.rs:475:5:475:10 | ... += ... | main.rs:476:5:476:17 | ExprStmt | |
-| main.rs:475:5:475:11 | ExprStmt | main.rs:475:5:475:5 | a | |
-| main.rs:475:10:475:10 | 1 | main.rs:475:5:475:10 | ... += ... | |
-| main.rs:476:5:476:13 | print_i64 | main.rs:476:15:476:15 | a | |
-| main.rs:476:5:476:16 | print_i64(...) | main.rs:477:5:477:28 | ExprStmt | |
-| main.rs:476:5:476:17 | ExprStmt | main.rs:476:5:476:13 | print_i64 | |
-| main.rs:476:15:476:15 | a | main.rs:476:5:476:16 | print_i64(...) | |
-| main.rs:477:5:477:27 | ... .add_assign(...) | main.rs:478:5:478:17 | ExprStmt | |
-| main.rs:477:5:477:28 | ExprStmt | main.rs:477:11:477:11 | a | |
-| main.rs:477:6:477:11 | &mut a | main.rs:477:25:477:26 | 10 | |
-| main.rs:477:11:477:11 | a | main.rs:477:6:477:11 | &mut a | |
-| main.rs:477:25:477:26 | 10 | main.rs:477:5:477:27 | ... .add_assign(...) | |
+| main.rs:370:15:370:16 | a8 | main.rs:370:5:370:17 | print_str(...) | |
+| main.rs:371:5:371:13 | print_str | main.rs:371:15:371:16 | b3 | |
+| main.rs:371:5:371:17 | print_str(...) | main.rs:372:5:372:18 | ExprStmt | |
+| main.rs:371:5:371:18 | ExprStmt | main.rs:371:5:371:13 | print_str | |
+| main.rs:371:15:371:16 | b3 | main.rs:371:5:371:17 | print_str(...) | |
+| main.rs:372:5:372:13 | print_str | main.rs:372:15:372:16 | c1 | |
+| main.rs:372:5:372:17 | print_str(...) | main.rs:369:9:373:1 | { ... } | |
+| main.rs:372:5:372:18 | ExprStmt | main.rs:372:5:372:13 | print_str | |
+| main.rs:372:15:372:16 | c1 | main.rs:372:5:372:17 | print_str(...) | |
+| main.rs:375:1:378:1 | enter fn param_pattern2 | main.rs:375:20:375:35 | ...::Left(...) | |
+| main.rs:375:1:378:1 | exit fn param_pattern2 (normal) | main.rs:375:1:378:1 | exit fn param_pattern2 | |
+| main.rs:375:19:375:64 | ...: Either | main.rs:377:5:377:18 | ExprStmt | |
+| main.rs:375:20:375:35 | ...::Left(...) | main.rs:375:33:375:34 | a9 | match |
+| main.rs:375:20:375:35 | ...::Left(...) | main.rs:375:39:375:55 | ...::Right(...) | no-match |
+| main.rs:375:20:375:55 | ... \| ... | main.rs:375:19:375:64 | ...: Either | match |
+| main.rs:375:33:375:34 | a9 | main.rs:375:20:375:55 | ... \| ... | match |
+| main.rs:375:33:375:34 | a9 | main.rs:375:33:375:34 | a9 | |
+| main.rs:375:39:375:55 | ...::Right(...) | main.rs:375:53:375:54 | a9 | match |
+| main.rs:375:53:375:54 | a9 | main.rs:375:20:375:55 | ... \| ... | match |
+| main.rs:375:53:375:54 | a9 | main.rs:375:53:375:54 | a9 | |
+| main.rs:376:9:378:1 | { ... } | main.rs:375:1:378:1 | exit fn param_pattern2 (normal) | |
+| main.rs:377:5:377:13 | print_i64 | main.rs:377:15:377:16 | a9 | |
+| main.rs:377:5:377:17 | print_i64(...) | main.rs:376:9:378:1 | { ... } | |
+| main.rs:377:5:377:18 | ExprStmt | main.rs:377:5:377:13 | print_i64 | |
+| main.rs:377:15:377:16 | a9 | main.rs:377:5:377:17 | print_i64(...) | |
+| main.rs:380:1:415:1 | enter fn destruct_assignment | main.rs:381:5:385:18 | let ... = ... | |
+| main.rs:380:1:415:1 | exit fn destruct_assignment (normal) | main.rs:380:1:415:1 | exit fn destruct_assignment | |
+| main.rs:380:26:415:1 | { ... } | main.rs:380:1:415:1 | exit fn destruct_assignment (normal) | |
+| main.rs:381:5:385:18 | let ... = ... | main.rs:385:10:385:10 | 1 | |
+| main.rs:381:9:385:5 | TuplePat | main.rs:382:13:382:15 | a10 | match |
+| main.rs:382:9:382:15 | mut a10 | main.rs:383:13:383:14 | b4 | match |
+| main.rs:382:13:382:15 | a10 | main.rs:382:9:382:15 | mut a10 | |
+| main.rs:383:9:383:14 | mut b4 | main.rs:384:13:384:14 | c2 | match |
+| main.rs:383:13:383:14 | b4 | main.rs:383:9:383:14 | mut b4 | |
+| main.rs:384:9:384:14 | mut c2 | main.rs:386:5:386:19 | ExprStmt | match |
+| main.rs:384:13:384:14 | c2 | main.rs:384:9:384:14 | mut c2 | |
+| main.rs:385:9:385:17 | TupleExpr | main.rs:381:9:385:5 | TuplePat | |
+| main.rs:385:10:385:10 | 1 | main.rs:385:13:385:13 | 2 | |
+| main.rs:385:13:385:13 | 2 | main.rs:385:16:385:16 | 3 | |
+| main.rs:385:16:385:16 | 3 | main.rs:385:9:385:17 | TupleExpr | |
+| main.rs:386:5:386:13 | print_i64 | main.rs:386:15:386:17 | a10 | |
+| main.rs:386:5:386:18 | print_i64(...) | main.rs:387:5:387:18 | ExprStmt | |
+| main.rs:386:5:386:19 | ExprStmt | main.rs:386:5:386:13 | print_i64 | |
+| main.rs:386:15:386:17 | a10 | main.rs:386:5:386:18 | print_i64(...) | |
+| main.rs:387:5:387:13 | print_i64 | main.rs:387:15:387:16 | b4 | |
+| main.rs:387:5:387:17 | print_i64(...) | main.rs:388:5:388:18 | ExprStmt | |
+| main.rs:387:5:387:18 | ExprStmt | main.rs:387:5:387:13 | print_i64 | |
+| main.rs:387:15:387:16 | b4 | main.rs:387:5:387:17 | print_i64(...) | |
+| main.rs:388:5:388:13 | print_i64 | main.rs:388:15:388:16 | c2 | |
+| main.rs:388:5:388:17 | print_i64(...) | main.rs:390:5:398:6 | ExprStmt | |
+| main.rs:388:5:388:18 | ExprStmt | main.rs:388:5:388:13 | print_i64 | |
+| main.rs:388:15:388:16 | c2 | main.rs:388:5:388:17 | print_i64(...) | |
+| main.rs:390:5:394:5 | TupleExpr | main.rs:395:9:395:11 | a10 | |
+| main.rs:390:5:398:5 | ... = ... | main.rs:399:5:399:19 | ExprStmt | |
+| main.rs:390:5:398:6 | ExprStmt | main.rs:391:9:391:10 | c2 | |
+| main.rs:391:9:391:10 | c2 | main.rs:392:9:392:10 | b4 | |
+| main.rs:392:9:392:10 | b4 | main.rs:393:9:393:11 | a10 | |
+| main.rs:393:9:393:11 | a10 | main.rs:390:5:394:5 | TupleExpr | |
+| main.rs:394:9:398:5 | TupleExpr | main.rs:390:5:398:5 | ... = ... | |
+| main.rs:395:9:395:11 | a10 | main.rs:396:9:396:10 | b4 | |
+| main.rs:396:9:396:10 | b4 | main.rs:397:9:397:10 | c2 | |
+| main.rs:397:9:397:10 | c2 | main.rs:394:9:398:5 | TupleExpr | |
+| main.rs:399:5:399:13 | print_i64 | main.rs:399:15:399:17 | a10 | |
+| main.rs:399:5:399:18 | print_i64(...) | main.rs:400:5:400:18 | ExprStmt | |
+| main.rs:399:5:399:19 | ExprStmt | main.rs:399:5:399:13 | print_i64 | |
+| main.rs:399:15:399:17 | a10 | main.rs:399:5:399:18 | print_i64(...) | |
+| main.rs:400:5:400:13 | print_i64 | main.rs:400:15:400:16 | b4 | |
+| main.rs:400:5:400:17 | print_i64(...) | main.rs:401:5:401:18 | ExprStmt | |
+| main.rs:400:5:400:18 | ExprStmt | main.rs:400:5:400:13 | print_i64 | |
+| main.rs:400:15:400:16 | b4 | main.rs:400:5:400:17 | print_i64(...) | |
+| main.rs:401:5:401:13 | print_i64 | main.rs:401:15:401:16 | c2 | |
+| main.rs:401:5:401:17 | print_i64(...) | main.rs:403:5:411:5 | ExprStmt | |
+| main.rs:401:5:401:18 | ExprStmt | main.rs:401:5:401:13 | print_i64 | |
+| main.rs:401:15:401:16 | c2 | main.rs:401:5:401:17 | print_i64(...) | |
+| main.rs:403:5:411:5 | ExprStmt | main.rs:403:12:403:12 | 4 | |
+| main.rs:403:5:411:5 | match ... { ... } | main.rs:413:5:413:19 | ExprStmt | |
+| main.rs:403:11:403:16 | TupleExpr | main.rs:404:9:407:9 | TuplePat | |
+| main.rs:403:12:403:12 | 4 | main.rs:403:15:403:15 | 5 | |
+| main.rs:403:15:403:15 | 5 | main.rs:403:11:403:16 | TupleExpr | |
+| main.rs:404:9:407:9 | TuplePat | main.rs:405:13:405:15 | a10 | match |
+| main.rs:405:13:405:15 | a10 | main.rs:405:13:405:15 | a10 | |
+| main.rs:405:13:405:15 | a10 | main.rs:406:13:406:14 | b4 | match |
+| main.rs:406:13:406:14 | b4 | main.rs:406:13:406:14 | b4 | |
+| main.rs:406:13:406:14 | b4 | main.rs:408:13:408:27 | ExprStmt | match |
+| main.rs:407:14:410:9 | { ... } | main.rs:403:5:411:5 | match ... { ... } | |
+| main.rs:408:13:408:21 | print_i64 | main.rs:408:23:408:25 | a10 | |
+| main.rs:408:13:408:26 | print_i64(...) | main.rs:409:13:409:26 | ExprStmt | |
+| main.rs:408:13:408:27 | ExprStmt | main.rs:408:13:408:21 | print_i64 | |
+| main.rs:408:23:408:25 | a10 | main.rs:408:13:408:26 | print_i64(...) | |
+| main.rs:409:13:409:21 | print_i64 | main.rs:409:23:409:24 | b4 | |
+| main.rs:409:13:409:25 | print_i64(...) | main.rs:407:14:410:9 | { ... } | |
+| main.rs:409:13:409:26 | ExprStmt | main.rs:409:13:409:21 | print_i64 | |
+| main.rs:409:23:409:24 | b4 | main.rs:409:13:409:25 | print_i64(...) | |
+| main.rs:413:5:413:13 | print_i64 | main.rs:413:15:413:17 | a10 | |
+| main.rs:413:5:413:18 | print_i64(...) | main.rs:414:5:414:18 | ExprStmt | |
+| main.rs:413:5:413:19 | ExprStmt | main.rs:413:5:413:13 | print_i64 | |
+| main.rs:413:15:413:17 | a10 | main.rs:413:5:413:18 | print_i64(...) | |
+| main.rs:414:5:414:13 | print_i64 | main.rs:414:15:414:16 | b4 | |
+| main.rs:414:5:414:17 | print_i64(...) | main.rs:380:26:415:1 | { ... } | |
+| main.rs:414:5:414:18 | ExprStmt | main.rs:414:5:414:13 | print_i64 | |
+| main.rs:414:15:414:16 | b4 | main.rs:414:5:414:17 | print_i64(...) | |
+| main.rs:417:1:432:1 | enter fn closure_variable | main.rs:418:5:420:10 | let ... = ... | |
+| main.rs:417:1:432:1 | exit fn closure_variable (normal) | main.rs:417:1:432:1 | exit fn closure_variable | |
+| main.rs:417:23:432:1 | { ... } | main.rs:417:1:432:1 | exit fn closure_variable (normal) | |
+| main.rs:418:5:420:10 | let ... = ... | main.rs:419:9:420:9 | \|...\| x | |
+| main.rs:418:9:418:23 | example_closure | main.rs:418:9:418:23 | example_closure | |
+| main.rs:418:9:418:23 | example_closure | main.rs:421:5:422:27 | let ... = ... | match |
+| main.rs:419:9:420:9 | \|...\| x | main.rs:418:9:418:23 | example_closure | |
+| main.rs:419:9:420:9 | enter \|...\| x | main.rs:419:10:419:10 | x | |
+| main.rs:419:9:420:9 | exit \|...\| x (normal) | main.rs:419:9:420:9 | exit \|...\| x | |
+| main.rs:419:10:419:10 | x | main.rs:419:10:419:10 | x | |
+| main.rs:419:10:419:10 | x | main.rs:419:10:419:15 | ...: i64 | match |
+| main.rs:419:10:419:15 | ...: i64 | main.rs:420:9:420:9 | x | |
+| main.rs:420:9:420:9 | x | main.rs:419:9:420:9 | exit \|...\| x (normal) | |
+| main.rs:421:5:422:27 | let ... = ... | main.rs:422:9:422:23 | example_closure | |
+| main.rs:421:9:421:10 | n1 | main.rs:421:9:421:10 | n1 | |
+| main.rs:421:9:421:10 | n1 | main.rs:423:5:423:18 | ExprStmt | match |
+| main.rs:422:9:422:23 | example_closure | main.rs:422:25:422:25 | 5 | |
+| main.rs:422:9:422:26 | example_closure(...) | main.rs:421:9:421:10 | n1 | |
+| main.rs:422:25:422:25 | 5 | main.rs:422:9:422:26 | example_closure(...) | |
+| main.rs:423:5:423:13 | print_i64 | main.rs:423:15:423:16 | n1 | |
+| main.rs:423:5:423:17 | print_i64(...) | main.rs:425:5:425:25 | ExprStmt | |
+| main.rs:423:5:423:18 | ExprStmt | main.rs:423:5:423:13 | print_i64 | |
+| main.rs:423:15:423:16 | n1 | main.rs:423:5:423:17 | print_i64(...) | |
+| main.rs:425:5:425:22 | immutable_variable | main.rs:425:5:425:24 | immutable_variable(...) | |
+| main.rs:425:5:425:24 | immutable_variable(...) | main.rs:426:5:428:10 | let ... = ... | |
+| main.rs:425:5:425:25 | ExprStmt | main.rs:425:5:425:22 | immutable_variable | |
+| main.rs:426:5:428:10 | let ... = ... | main.rs:427:5:428:9 | \|...\| x | |
+| main.rs:426:9:426:26 | immutable_variable | main.rs:426:9:426:26 | immutable_variable | |
+| main.rs:426:9:426:26 | immutable_variable | main.rs:429:5:430:30 | let ... = ... | match |
+| main.rs:427:5:428:9 | \|...\| x | main.rs:426:9:426:26 | immutable_variable | |
+| main.rs:427:5:428:9 | enter \|...\| x | main.rs:427:6:427:6 | x | |
+| main.rs:427:5:428:9 | exit \|...\| x (normal) | main.rs:427:5:428:9 | exit \|...\| x | |
+| main.rs:427:6:427:6 | x | main.rs:427:6:427:6 | x | |
+| main.rs:427:6:427:6 | x | main.rs:427:6:427:11 | ...: i64 | match |
+| main.rs:427:6:427:11 | ...: i64 | main.rs:428:9:428:9 | x | |
+| main.rs:428:9:428:9 | x | main.rs:427:5:428:9 | exit \|...\| x (normal) | |
+| main.rs:429:5:430:30 | let ... = ... | main.rs:430:9:430:26 | immutable_variable | |
+| main.rs:429:9:429:10 | n2 | main.rs:429:9:429:10 | n2 | |
+| main.rs:429:9:429:10 | n2 | main.rs:431:5:431:18 | ExprStmt | match |
+| main.rs:430:9:430:26 | immutable_variable | main.rs:430:28:430:28 | 6 | |
+| main.rs:430:9:430:29 | immutable_variable(...) | main.rs:429:9:429:10 | n2 | |
+| main.rs:430:28:430:28 | 6 | main.rs:430:9:430:29 | immutable_variable(...) | |
+| main.rs:431:5:431:13 | print_i64 | main.rs:431:15:431:16 | n2 | |
+| main.rs:431:5:431:17 | print_i64(...) | main.rs:417:23:432:1 | { ... } | |
+| main.rs:431:5:431:18 | ExprStmt | main.rs:431:5:431:13 | print_i64 | |
+| main.rs:431:15:431:16 | n2 | main.rs:431:5:431:17 | print_i64(...) | |
+| main.rs:434:1:464:1 | enter fn nested_function | main.rs:436:5:438:10 | let ... = ... | |
+| main.rs:434:1:464:1 | exit fn nested_function (normal) | main.rs:434:1:464:1 | exit fn nested_function | |
+| main.rs:434:22:464:1 | { ... } | main.rs:434:1:464:1 | exit fn nested_function (normal) | |
+| main.rs:436:5:438:10 | let ... = ... | main.rs:437:9:438:9 | \|...\| x | |
+| main.rs:436:9:436:9 | f | main.rs:436:9:436:9 | f | |
+| main.rs:436:9:436:9 | f | main.rs:439:5:439:20 | ExprStmt | match |
+| main.rs:437:9:438:9 | \|...\| x | main.rs:436:9:436:9 | f | |
+| main.rs:437:9:438:9 | enter \|...\| x | main.rs:437:10:437:10 | x | |
+| main.rs:437:9:438:9 | exit \|...\| x (normal) | main.rs:437:9:438:9 | exit \|...\| x | |
+| main.rs:437:10:437:10 | x | main.rs:437:10:437:10 | x | |
+| main.rs:437:10:437:10 | x | main.rs:437:10:437:15 | ...: i64 | match |
+| main.rs:437:10:437:15 | ...: i64 | main.rs:438:9:438:9 | x | |
+| main.rs:438:9:438:9 | x | main.rs:437:9:438:9 | exit \|...\| x (normal) | |
+| main.rs:439:5:439:13 | print_i64 | main.rs:439:15:439:15 | f | |
+| main.rs:439:5:439:19 | print_i64(...) | main.rs:441:5:444:5 | fn f | |
+| main.rs:439:5:439:20 | ExprStmt | main.rs:439:5:439:13 | print_i64 | |
+| main.rs:439:15:439:15 | f | main.rs:439:17:439:17 | 1 | |
+| main.rs:439:15:439:18 | f(...) | main.rs:439:5:439:19 | print_i64(...) | |
+| main.rs:439:17:439:17 | 1 | main.rs:439:15:439:18 | f(...) | |
+| main.rs:441:5:444:5 | enter fn f | main.rs:441:10:441:10 | x | |
+| main.rs:441:5:444:5 | exit fn f (normal) | main.rs:441:5:444:5 | exit fn f | |
+| main.rs:441:5:444:5 | fn f | main.rs:446:5:446:20 | ExprStmt | |
+| main.rs:441:10:441:10 | x | main.rs:441:10:441:10 | x | |
+| main.rs:441:10:441:10 | x | main.rs:441:10:441:15 | ...: i64 | match |
+| main.rs:441:10:441:15 | ...: i64 | main.rs:443:9:443:9 | x | |
+| main.rs:442:5:444:5 | { ... } | main.rs:441:5:444:5 | exit fn f (normal) | |
+| main.rs:443:9:443:9 | x | main.rs:443:13:443:13 | 1 | |
+| main.rs:443:9:443:13 | ... + ... | main.rs:442:5:444:5 | { ... } | |
+| main.rs:443:13:443:13 | 1 | main.rs:443:9:443:13 | ... + ... | |
+| main.rs:446:5:446:13 | print_i64 | main.rs:446:15:446:15 | f | |
+| main.rs:446:5:446:19 | print_i64(...) | main.rs:449:9:449:24 | ExprStmt | |
+| main.rs:446:5:446:20 | ExprStmt | main.rs:446:5:446:13 | print_i64 | |
+| main.rs:446:15:446:15 | f | main.rs:446:17:446:17 | 2 | |
+| main.rs:446:15:446:18 | f(...) | main.rs:446:5:446:19 | print_i64(...) | |
+| main.rs:446:17:446:17 | 2 | main.rs:446:15:446:18 | f(...) | |
+| main.rs:448:5:463:5 | { ... } | main.rs:434:22:464:1 | { ... } | |
+| main.rs:449:9:449:17 | print_i64 | main.rs:449:19:449:19 | f | |
+| main.rs:449:9:449:23 | print_i64(...) | main.rs:450:9:453:9 | fn f | |
+| main.rs:449:9:449:24 | ExprStmt | main.rs:449:9:449:17 | print_i64 | |
+| main.rs:449:19:449:19 | f | main.rs:449:21:449:21 | 3 | |
+| main.rs:449:19:449:22 | f(...) | main.rs:449:9:449:23 | print_i64(...) | |
+| main.rs:449:21:449:21 | 3 | main.rs:449:19:449:22 | f(...) | |
+| main.rs:450:9:453:9 | enter fn f | main.rs:450:14:450:14 | x | |
+| main.rs:450:9:453:9 | exit fn f (normal) | main.rs:450:9:453:9 | exit fn f | |
+| main.rs:450:9:453:9 | fn f | main.rs:455:9:457:9 | ExprStmt | |
+| main.rs:450:14:450:14 | x | main.rs:450:14:450:14 | x | |
+| main.rs:450:14:450:14 | x | main.rs:450:14:450:19 | ...: i64 | match |
+| main.rs:450:14:450:19 | ...: i64 | main.rs:452:13:452:13 | 2 | |
+| main.rs:451:9:453:9 | { ... } | main.rs:450:9:453:9 | exit fn f (normal) | |
+| main.rs:452:13:452:13 | 2 | main.rs:452:17:452:17 | x | |
+| main.rs:452:13:452:17 | ... * ... | main.rs:451:9:453:9 | { ... } | |
+| main.rs:452:17:452:17 | x | main.rs:452:13:452:17 | ... * ... | |
+| main.rs:455:9:457:9 | ExprStmt | main.rs:456:13:456:28 | ExprStmt | |
+| main.rs:455:9:457:9 | { ... } | main.rs:459:9:461:14 | let ... = ... | |
+| main.rs:456:13:456:21 | print_i64 | main.rs:456:23:456:23 | f | |
+| main.rs:456:13:456:27 | print_i64(...) | main.rs:455:9:457:9 | { ... } | |
+| main.rs:456:13:456:28 | ExprStmt | main.rs:456:13:456:21 | print_i64 | |
+| main.rs:456:23:456:23 | f | main.rs:456:25:456:25 | 4 | |
+| main.rs:456:23:456:26 | f(...) | main.rs:456:13:456:27 | print_i64(...) | |
+| main.rs:456:25:456:25 | 4 | main.rs:456:23:456:26 | f(...) | |
+| main.rs:459:9:461:14 | let ... = ... | main.rs:460:13:461:13 | \|...\| x | |
+| main.rs:459:13:459:13 | f | main.rs:459:13:459:13 | f | |
+| main.rs:459:13:459:13 | f | main.rs:462:9:462:24 | ExprStmt | match |
+| main.rs:460:13:461:13 | \|...\| x | main.rs:459:13:459:13 | f | |
+| main.rs:460:13:461:13 | enter \|...\| x | main.rs:460:14:460:14 | x | |
+| main.rs:460:13:461:13 | exit \|...\| x (normal) | main.rs:460:13:461:13 | exit \|...\| x | |
+| main.rs:460:14:460:14 | x | main.rs:460:14:460:14 | x | |
+| main.rs:460:14:460:14 | x | main.rs:460:14:460:19 | ...: i64 | match |
+| main.rs:460:14:460:19 | ...: i64 | main.rs:461:13:461:13 | x | |
+| main.rs:461:13:461:13 | x | main.rs:460:13:461:13 | exit \|...\| x (normal) | |
+| main.rs:462:9:462:17 | print_i64 | main.rs:462:19:462:19 | f | |
+| main.rs:462:9:462:23 | print_i64(...) | main.rs:448:5:463:5 | { ... } | |
+| main.rs:462:9:462:24 | ExprStmt | main.rs:462:9:462:17 | print_i64 | |
+| main.rs:462:19:462:19 | f | main.rs:462:21:462:21 | 5 | |
+| main.rs:462:19:462:22 | f(...) | main.rs:462:9:462:23 | print_i64(...) | |
+| main.rs:462:21:462:21 | 5 | main.rs:462:19:462:22 | f(...) | |
+| main.rs:466:1:473:1 | enter fn for_variable | main.rs:467:5:467:42 | let ... = ... | |
+| main.rs:466:1:473:1 | exit fn for_variable (normal) | main.rs:466:1:473:1 | exit fn for_variable | |
+| main.rs:466:19:473:1 | { ... } | main.rs:466:1:473:1 | exit fn for_variable (normal) | |
+| main.rs:467:5:467:42 | let ... = ... | main.rs:467:15:467:22 | "apples" | |
+| main.rs:467:9:467:9 | v | main.rs:467:9:467:9 | v | |
+| main.rs:467:9:467:9 | v | main.rs:470:12:470:12 | v | match |
+| main.rs:467:13:467:41 | &... | main.rs:467:9:467:9 | v | |
+| main.rs:467:14:467:41 | [...] | main.rs:467:13:467:41 | &... | |
+| main.rs:467:15:467:22 | "apples" | main.rs:467:25:467:30 | "cake" | |
+| main.rs:467:25:467:30 | "cake" | main.rs:467:33:467:40 | "coffee" | |
+| main.rs:467:33:467:40 | "coffee" | main.rs:467:14:467:41 | [...] | |
+| main.rs:469:5:472:5 | for ... in ... { ... } | main.rs:466:19:473:1 | { ... } | |
+| main.rs:469:9:469:12 | text | main.rs:469:5:472:5 | for ... in ... { ... } | no-match |
+| main.rs:469:9:469:12 | text | main.rs:469:9:469:12 | text | |
+| main.rs:469:9:469:12 | text | main.rs:471:9:471:24 | ExprStmt | match |
+| main.rs:470:12:470:12 | v | main.rs:469:9:469:12 | text | |
+| main.rs:470:14:472:5 | { ... } | main.rs:469:9:469:12 | text | |
+| main.rs:471:9:471:17 | print_str | main.rs:471:19:471:22 | text | |
+| main.rs:471:9:471:23 | print_str(...) | main.rs:470:14:472:5 | { ... } | |
+| main.rs:471:9:471:24 | ExprStmt | main.rs:471:9:471:17 | print_str | |
+| main.rs:471:19:471:22 | text | main.rs:471:9:471:23 | print_str(...) | |
+| main.rs:475:1:481:1 | enter fn add_assign | main.rs:476:5:476:18 | let ... = 0 | |
+| main.rs:475:1:481:1 | exit fn add_assign (normal) | main.rs:475:1:481:1 | exit fn add_assign | |
+| main.rs:475:17:481:1 | { ... } | main.rs:475:1:481:1 | exit fn add_assign (normal) | |
+| main.rs:476:5:476:18 | let ... = 0 | main.rs:476:17:476:17 | 0 | |
+| main.rs:476:9:476:13 | mut a | main.rs:477:5:477:11 | ExprStmt | match |
+| main.rs:476:13:476:13 | a | main.rs:476:9:476:13 | mut a | |
+| main.rs:476:17:476:17 | 0 | main.rs:476:13:476:13 | a | |
+| main.rs:477:5:477:5 | a | main.rs:477:10:477:10 | 1 | |
+| main.rs:477:5:477:10 | ... += ... | main.rs:478:5:478:17 | ExprStmt | |
+| main.rs:477:5:477:11 | ExprStmt | main.rs:477:5:477:5 | a | |
+| main.rs:477:10:477:10 | 1 | main.rs:477:5:477:10 | ... += ... | |
| main.rs:478:5:478:13 | print_i64 | main.rs:478:15:478:15 | a | |
-| main.rs:478:5:478:16 | print_i64(...) | main.rs:473:17:479:1 | { ... } | |
+| main.rs:478:5:478:16 | print_i64(...) | main.rs:479:5:479:28 | ExprStmt | |
| main.rs:478:5:478:17 | ExprStmt | main.rs:478:5:478:13 | print_i64 | |
| main.rs:478:15:478:15 | a | main.rs:478:5:478:16 | print_i64(...) | |
-| main.rs:481:1:487:1 | enter fn mutate | main.rs:482:5:482:18 | let ... = 1 | |
-| main.rs:481:1:487:1 | exit fn mutate (normal) | main.rs:481:1:487:1 | exit fn mutate | |
-| main.rs:481:13:487:1 | { ... } | main.rs:481:1:487:1 | exit fn mutate (normal) | |
-| main.rs:482:5:482:18 | let ... = 1 | main.rs:482:17:482:17 | 1 | |
-| main.rs:482:9:482:13 | mut i | main.rs:483:5:484:15 | let ... = ... | match |
-| main.rs:482:13:482:13 | i | main.rs:482:9:482:13 | mut i | |
-| main.rs:482:17:482:17 | 1 | main.rs:482:13:482:13 | i | |
-| main.rs:483:5:484:15 | let ... = ... | main.rs:484:14:484:14 | i | |
-| main.rs:483:9:483:13 | ref_i | main.rs:483:9:483:13 | ref_i | |
-| main.rs:483:9:483:13 | ref_i | main.rs:485:5:485:15 | ExprStmt | match |
-| main.rs:484:9:484:14 | &mut i | main.rs:483:9:483:13 | ref_i | |
-| main.rs:484:14:484:14 | i | main.rs:484:9:484:14 | &mut i | |
-| main.rs:485:5:485:10 | * ... | main.rs:485:14:485:14 | 2 | |
-| main.rs:485:5:485:14 | ... = ... | main.rs:486:5:486:17 | ExprStmt | |
-| main.rs:485:5:485:15 | ExprStmt | main.rs:485:6:485:10 | ref_i | |
-| main.rs:485:6:485:10 | ref_i | main.rs:485:5:485:10 | * ... | |
-| main.rs:485:14:485:14 | 2 | main.rs:485:5:485:14 | ... = ... | |
-| main.rs:486:5:486:13 | print_i64 | main.rs:486:15:486:15 | i | |
-| main.rs:486:5:486:16 | print_i64(...) | main.rs:481:13:487:1 | { ... } | |
-| main.rs:486:5:486:17 | ExprStmt | main.rs:486:5:486:13 | print_i64 | |
-| main.rs:486:15:486:15 | i | main.rs:486:5:486:16 | print_i64(...) | |
-| main.rs:489:1:494:1 | enter fn mutate_param | main.rs:489:17:489:17 | x | |
-| main.rs:489:1:494:1 | exit fn mutate_param (normal) | main.rs:489:1:494:1 | exit fn mutate_param | |
-| main.rs:489:17:489:17 | x | main.rs:489:17:489:17 | x | |
-| main.rs:489:17:489:17 | x | main.rs:489:17:489:27 | ...: ... | match |
-| main.rs:489:17:489:27 | ...: ... | main.rs:490:5:492:11 | ExprStmt | |
-| main.rs:490:5:490:6 | * ... | main.rs:491:10:491:10 | x | |
-| main.rs:490:5:492:10 | ... = ... | main.rs:493:5:493:13 | ExprStmt | |
-| main.rs:490:5:492:11 | ExprStmt | main.rs:490:6:490:6 | x | |
-| main.rs:490:6:490:6 | x | main.rs:490:5:490:6 | * ... | |
-| main.rs:491:9:491:10 | * ... | main.rs:492:10:492:10 | x | |
-| main.rs:491:9:492:10 | ... + ... | main.rs:490:5:492:10 | ... = ... | |
-| main.rs:491:10:491:10 | x | main.rs:491:9:491:10 | * ... | |
-| main.rs:492:9:492:10 | * ... | main.rs:491:9:492:10 | ... + ... | |
-| main.rs:492:10:492:10 | x | main.rs:492:9:492:10 | * ... | |
-| main.rs:493:5:493:12 | return x | main.rs:489:1:494:1 | exit fn mutate_param (normal) | return |
-| main.rs:493:5:493:13 | ExprStmt | main.rs:493:12:493:12 | x | |
-| main.rs:493:12:493:12 | x | main.rs:493:5:493:12 | return x | |
-| main.rs:496:1:502:1 | enter fn mutate_param2 | main.rs:496:22:496:22 | x | |
-| main.rs:496:1:502:1 | exit fn mutate_param2 (normal) | main.rs:496:1:502:1 | exit fn mutate_param2 | |
-| main.rs:496:22:496:22 | x | main.rs:496:22:496:22 | x | |
-| main.rs:496:22:496:22 | x | main.rs:496:22:496:35 | ...: ... | match |
-| main.rs:496:22:496:35 | ...: ... | main.rs:496:38:496:38 | y | |
-| main.rs:496:38:496:38 | y | main.rs:496:38:496:38 | y | |
-| main.rs:496:38:496:38 | y | main.rs:496:38:496:56 | ...: ... | match |
-| main.rs:496:38:496:56 | ...: ... | main.rs:497:5:499:11 | ExprStmt | |
-| main.rs:496:59:502:1 | { ... } | main.rs:496:1:502:1 | exit fn mutate_param2 (normal) | |
-| main.rs:497:5:497:6 | * ... | main.rs:498:10:498:10 | x | |
-| main.rs:497:5:499:10 | ... = ... | main.rs:500:5:501:10 | ExprStmt | |
-| main.rs:497:5:499:11 | ExprStmt | main.rs:497:6:497:6 | x | |
-| main.rs:497:6:497:6 | x | main.rs:497:5:497:6 | * ... | |
-| main.rs:498:9:498:10 | * ... | main.rs:499:10:499:10 | x | |
-| main.rs:498:9:499:10 | ... + ... | main.rs:497:5:499:10 | ... = ... | |
-| main.rs:498:10:498:10 | x | main.rs:498:9:498:10 | * ... | |
-| main.rs:499:9:499:10 | * ... | main.rs:498:9:499:10 | ... + ... | |
-| main.rs:499:10:499:10 | x | main.rs:499:9:499:10 | * ... | |
-| main.rs:500:5:500:6 | * ... | main.rs:501:9:501:9 | x | |
-| main.rs:500:5:501:9 | ... = ... | main.rs:496:59:502:1 | { ... } | |
-| main.rs:500:5:501:10 | ExprStmt | main.rs:500:6:500:6 | y | |
-| main.rs:500:6:500:6 | y | main.rs:500:5:500:6 | * ... | |
-| main.rs:501:9:501:9 | x | main.rs:500:5:501:9 | ... = ... | |
-| main.rs:504:1:524:1 | enter fn mutate_arg | main.rs:505:5:505:18 | let ... = 2 | |
-| main.rs:504:1:524:1 | exit fn mutate_arg (normal) | main.rs:504:1:524:1 | exit fn mutate_arg | |
-| main.rs:504:17:524:1 | { ... } | main.rs:504:1:524:1 | exit fn mutate_arg (normal) | |
-| main.rs:505:5:505:18 | let ... = 2 | main.rs:505:17:505:17 | 2 | |
-| main.rs:505:9:505:13 | mut x | main.rs:506:5:507:29 | let ... = ... | match |
-| main.rs:505:13:505:13 | x | main.rs:505:9:505:13 | mut x | |
-| main.rs:505:17:505:17 | 2 | main.rs:505:13:505:13 | x | |
-| main.rs:506:5:507:29 | let ... = ... | main.rs:507:9:507:20 | mutate_param | |
-| main.rs:506:9:506:9 | y | main.rs:506:9:506:9 | y | |
-| main.rs:506:9:506:9 | y | main.rs:508:5:508:12 | ExprStmt | match |
-| main.rs:507:9:507:20 | mutate_param | main.rs:507:27:507:27 | x | |
-| main.rs:507:9:507:28 | mutate_param(...) | main.rs:506:9:506:9 | y | |
-| main.rs:507:22:507:27 | &mut x | main.rs:507:9:507:28 | mutate_param(...) | |
-| main.rs:507:27:507:27 | x | main.rs:507:22:507:27 | &mut x | |
-| main.rs:508:5:508:6 | * ... | main.rs:508:10:508:11 | 10 | |
-| main.rs:508:5:508:11 | ... = ... | main.rs:511:5:511:17 | ExprStmt | |
-| main.rs:508:5:508:12 | ExprStmt | main.rs:508:6:508:6 | y | |
-| main.rs:508:6:508:6 | y | main.rs:508:5:508:6 | * ... | |
-| main.rs:508:10:508:11 | 10 | main.rs:508:5:508:11 | ... = ... | |
-| main.rs:511:5:511:13 | print_i64 | main.rs:511:15:511:15 | x | |
-| main.rs:511:5:511:16 | print_i64(...) | main.rs:513:5:513:18 | let ... = 4 | |
-| main.rs:511:5:511:17 | ExprStmt | main.rs:511:5:511:13 | print_i64 | |
-| main.rs:511:15:511:15 | x | main.rs:511:5:511:16 | print_i64(...) | |
-| main.rs:513:5:513:18 | let ... = 4 | main.rs:513:17:513:17 | 4 | |
-| main.rs:513:9:513:13 | mut z | main.rs:514:5:515:20 | let ... = ... | match |
-| main.rs:513:13:513:13 | z | main.rs:513:9:513:13 | mut z | |
-| main.rs:513:17:513:17 | 4 | main.rs:513:13:513:13 | z | |
-| main.rs:514:5:515:20 | let ... = ... | main.rs:515:19:515:19 | x | |
-| main.rs:514:9:514:9 | w | main.rs:514:9:514:9 | w | |
-| main.rs:514:9:514:9 | w | main.rs:516:5:519:6 | ExprStmt | match |
-| main.rs:515:9:515:19 | &mut ... | main.rs:514:9:514:9 | w | |
-| main.rs:515:14:515:19 | &mut x | main.rs:515:9:515:19 | &mut ... | |
-| main.rs:515:19:515:19 | x | main.rs:515:14:515:19 | &mut x | |
-| main.rs:516:5:516:17 | mutate_param2 | main.rs:517:14:517:14 | z | |
-| main.rs:516:5:519:5 | mutate_param2(...) | main.rs:520:5:520:13 | ExprStmt | |
-| main.rs:516:5:519:6 | ExprStmt | main.rs:516:5:516:17 | mutate_param2 | |
-| main.rs:517:9:517:14 | &mut z | main.rs:518:9:518:9 | w | |
-| main.rs:517:14:517:14 | z | main.rs:517:9:517:14 | &mut z | |
-| main.rs:518:9:518:9 | w | main.rs:516:5:519:5 | mutate_param2(...) | |
-| main.rs:520:5:520:7 | * ... | main.rs:520:11:520:12 | 11 | |
-| main.rs:520:5:520:12 | ... = ... | main.rs:523:5:523:17 | ExprStmt | |
-| main.rs:520:5:520:13 | ExprStmt | main.rs:520:7:520:7 | w | |
-| main.rs:520:6:520:7 | * ... | main.rs:520:5:520:7 | * ... | |
-| main.rs:520:7:520:7 | w | main.rs:520:6:520:7 | * ... | |
-| main.rs:520:11:520:12 | 11 | main.rs:520:5:520:12 | ... = ... | |
-| main.rs:523:5:523:13 | print_i64 | main.rs:523:15:523:15 | z | |
-| main.rs:523:5:523:16 | print_i64(...) | main.rs:504:17:524:1 | { ... } | |
-| main.rs:523:5:523:17 | ExprStmt | main.rs:523:5:523:13 | print_i64 | |
-| main.rs:523:15:523:15 | z | main.rs:523:5:523:16 | print_i64(...) | |
-| main.rs:526:1:532:1 | enter fn alias | main.rs:527:5:527:18 | let ... = 1 | |
-| main.rs:526:1:532:1 | exit fn alias (normal) | main.rs:526:1:532:1 | exit fn alias | |
-| main.rs:526:12:532:1 | { ... } | main.rs:526:1:532:1 | exit fn alias (normal) | |
-| main.rs:527:5:527:18 | let ... = 1 | main.rs:527:17:527:17 | 1 | |
-| main.rs:527:9:527:13 | mut x | main.rs:528:5:529:15 | let ... = ... | match |
-| main.rs:527:13:527:13 | x | main.rs:527:9:527:13 | mut x | |
-| main.rs:527:17:527:17 | 1 | main.rs:527:13:527:13 | x | |
-| main.rs:528:5:529:15 | let ... = ... | main.rs:529:14:529:14 | x | |
-| main.rs:528:9:528:9 | y | main.rs:528:9:528:9 | y | |
-| main.rs:528:9:528:9 | y | main.rs:530:5:530:11 | ExprStmt | match |
-| main.rs:529:9:529:14 | &mut x | main.rs:528:9:528:9 | y | |
-| main.rs:529:14:529:14 | x | main.rs:529:9:529:14 | &mut x | |
-| main.rs:530:5:530:6 | * ... | main.rs:530:10:530:10 | 2 | |
-| main.rs:530:5:530:10 | ... = ... | main.rs:531:5:531:17 | ExprStmt | |
-| main.rs:530:5:530:11 | ExprStmt | main.rs:530:6:530:6 | y | |
-| main.rs:530:6:530:6 | y | main.rs:530:5:530:6 | * ... | |
-| main.rs:530:10:530:10 | 2 | main.rs:530:5:530:10 | ... = ... | |
-| main.rs:531:5:531:13 | print_i64 | main.rs:531:15:531:15 | x | |
-| main.rs:531:5:531:16 | print_i64(...) | main.rs:526:12:532:1 | { ... } | |
-| main.rs:531:5:531:17 | ExprStmt | main.rs:531:5:531:13 | print_i64 | |
-| main.rs:531:15:531:15 | x | main.rs:531:5:531:16 | print_i64(...) | |
-| main.rs:534:1:543:1 | enter fn capture_immut | main.rs:535:5:535:16 | let ... = 100 | |
-| main.rs:534:1:543:1 | exit fn capture_immut (normal) | main.rs:534:1:543:1 | exit fn capture_immut | |
-| main.rs:534:20:543:1 | { ... } | main.rs:534:1:543:1 | exit fn capture_immut (normal) | |
-| main.rs:535:5:535:16 | let ... = 100 | main.rs:535:13:535:15 | 100 | |
-| main.rs:535:9:535:9 | x | main.rs:535:9:535:9 | x | |
-| main.rs:535:9:535:9 | x | main.rs:538:5:540:6 | let ... = ... | match |
-| main.rs:535:13:535:15 | 100 | main.rs:535:9:535:9 | x | |
-| main.rs:538:5:540:6 | let ... = ... | main.rs:538:15:540:5 | \|...\| ... | |
-| main.rs:538:9:538:11 | cap | main.rs:538:9:538:11 | cap | |
-| main.rs:538:9:538:11 | cap | main.rs:541:5:541:10 | ExprStmt | match |
-| main.rs:538:15:540:5 | \|...\| ... | main.rs:538:9:538:11 | cap | |
-| main.rs:538:15:540:5 | enter \|...\| ... | main.rs:539:9:539:21 | ExprStmt | |
-| main.rs:538:15:540:5 | exit \|...\| ... (normal) | main.rs:538:15:540:5 | exit \|...\| ... | |
-| main.rs:538:18:540:5 | { ... } | main.rs:538:15:540:5 | exit \|...\| ... (normal) | |
-| main.rs:539:9:539:17 | print_i64 | main.rs:539:19:539:19 | x | |
-| main.rs:539:9:539:20 | print_i64(...) | main.rs:538:18:540:5 | { ... } | |
-| main.rs:539:9:539:21 | ExprStmt | main.rs:539:9:539:17 | print_i64 | |
-| main.rs:539:19:539:19 | x | main.rs:539:9:539:20 | print_i64(...) | |
-| main.rs:541:5:541:7 | cap | main.rs:541:5:541:9 | cap(...) | |
-| main.rs:541:5:541:9 | cap(...) | main.rs:542:5:542:17 | ExprStmt | |
-| main.rs:541:5:541:10 | ExprStmt | main.rs:541:5:541:7 | cap | |
-| main.rs:542:5:542:13 | print_i64 | main.rs:542:15:542:15 | x | |
-| main.rs:542:5:542:16 | print_i64(...) | main.rs:534:20:543:1 | { ... } | |
-| main.rs:542:5:542:17 | ExprStmt | main.rs:542:5:542:13 | print_i64 | |
-| main.rs:542:15:542:15 | x | main.rs:542:5:542:16 | print_i64(...) | |
-| main.rs:545:1:572:1 | enter fn capture_mut | main.rs:546:5:546:18 | let ... = 1 | |
-| main.rs:545:1:572:1 | exit fn capture_mut (normal) | main.rs:545:1:572:1 | exit fn capture_mut | |
-| main.rs:545:18:572:1 | { ... } | main.rs:545:1:572:1 | exit fn capture_mut (normal) | |
-| main.rs:546:5:546:18 | let ... = 1 | main.rs:546:17:546:17 | 1 | |
-| main.rs:546:9:546:13 | mut x | main.rs:549:5:551:6 | let ... = ... | match |
-| main.rs:546:13:546:13 | x | main.rs:546:9:546:13 | mut x | |
-| main.rs:546:17:546:17 | 1 | main.rs:546:13:546:13 | x | |
-| main.rs:549:5:551:6 | let ... = ... | main.rs:549:20:551:5 | \|...\| ... | |
-| main.rs:549:9:549:16 | closure1 | main.rs:549:9:549:16 | closure1 | |
-| main.rs:549:9:549:16 | closure1 | main.rs:552:5:552:15 | ExprStmt | match |
-| main.rs:549:20:551:5 | \|...\| ... | main.rs:549:9:549:16 | closure1 | |
-| main.rs:549:20:551:5 | enter \|...\| ... | main.rs:550:9:550:21 | ExprStmt | |
-| main.rs:549:20:551:5 | exit \|...\| ... (normal) | main.rs:549:20:551:5 | exit \|...\| ... | |
-| main.rs:549:23:551:5 | { ... } | main.rs:549:20:551:5 | exit \|...\| ... (normal) | |
-| main.rs:550:9:550:17 | print_i64 | main.rs:550:19:550:19 | x | |
-| main.rs:550:9:550:20 | print_i64(...) | main.rs:549:23:551:5 | { ... } | |
-| main.rs:550:9:550:21 | ExprStmt | main.rs:550:9:550:17 | print_i64 | |
-| main.rs:550:19:550:19 | x | main.rs:550:9:550:20 | print_i64(...) | |
-| main.rs:552:5:552:12 | closure1 | main.rs:552:5:552:14 | closure1(...) | |
-| main.rs:552:5:552:14 | closure1(...) | main.rs:553:5:553:17 | ExprStmt | |
-| main.rs:552:5:552:15 | ExprStmt | main.rs:552:5:552:12 | closure1 | |
-| main.rs:553:5:553:13 | print_i64 | main.rs:553:15:553:15 | x | |
-| main.rs:553:5:553:16 | print_i64(...) | main.rs:555:5:555:18 | let ... = 2 | |
-| main.rs:553:5:553:17 | ExprStmt | main.rs:553:5:553:13 | print_i64 | |
-| main.rs:553:15:553:15 | x | main.rs:553:5:553:16 | print_i64(...) | |
-| main.rs:555:5:555:18 | let ... = 2 | main.rs:555:17:555:17 | 2 | |
-| main.rs:555:9:555:13 | mut y | main.rs:558:5:560:6 | let ... = ... | match |
-| main.rs:555:13:555:13 | y | main.rs:555:9:555:13 | mut y | |
-| main.rs:555:17:555:17 | 2 | main.rs:555:13:555:13 | y | |
-| main.rs:558:5:560:6 | let ... = ... | main.rs:558:24:560:5 | \|...\| ... | |
-| main.rs:558:9:558:20 | mut closure2 | main.rs:561:5:561:15 | ExprStmt | match |
-| main.rs:558:13:558:20 | closure2 | main.rs:558:9:558:20 | mut closure2 | |
-| main.rs:558:24:560:5 | \|...\| ... | main.rs:558:13:558:20 | closure2 | |
-| main.rs:558:24:560:5 | enter \|...\| ... | main.rs:559:9:559:14 | ExprStmt | |
-| main.rs:558:24:560:5 | exit \|...\| ... (normal) | main.rs:558:24:560:5 | exit \|...\| ... | |
-| main.rs:558:27:560:5 | { ... } | main.rs:558:24:560:5 | exit \|...\| ... (normal) | |
-| main.rs:559:9:559:9 | y | main.rs:559:13:559:13 | 3 | |
-| main.rs:559:9:559:13 | ... = ... | main.rs:558:27:560:5 | { ... } | |
-| main.rs:559:9:559:14 | ExprStmt | main.rs:559:9:559:9 | y | |
-| main.rs:559:13:559:13 | 3 | main.rs:559:9:559:13 | ... = ... | |
-| main.rs:561:5:561:12 | closure2 | main.rs:561:5:561:14 | closure2(...) | |
-| main.rs:561:5:561:14 | closure2(...) | main.rs:562:5:562:17 | ExprStmt | |
-| main.rs:561:5:561:15 | ExprStmt | main.rs:561:5:561:12 | closure2 | |
-| main.rs:562:5:562:13 | print_i64 | main.rs:562:15:562:15 | y | |
-| main.rs:562:5:562:16 | print_i64(...) | main.rs:564:5:564:18 | let ... = 2 | |
-| main.rs:562:5:562:17 | ExprStmt | main.rs:562:5:562:13 | print_i64 | |
-| main.rs:562:15:562:15 | y | main.rs:562:5:562:16 | print_i64(...) | |
-| main.rs:564:5:564:18 | let ... = 2 | main.rs:564:17:564:17 | 2 | |
-| main.rs:564:9:564:13 | mut z | main.rs:567:5:569:6 | let ... = ... | match |
-| main.rs:564:13:564:13 | z | main.rs:564:9:564:13 | mut z | |
-| main.rs:564:17:564:17 | 2 | main.rs:564:13:564:13 | z | |
-| main.rs:567:5:569:6 | let ... = ... | main.rs:567:24:569:5 | \|...\| ... | |
-| main.rs:567:9:567:20 | mut closure3 | main.rs:570:5:570:15 | ExprStmt | match |
-| main.rs:567:13:567:20 | closure3 | main.rs:567:9:567:20 | mut closure3 | |
-| main.rs:567:24:569:5 | \|...\| ... | main.rs:567:13:567:20 | closure3 | |
-| main.rs:567:24:569:5 | enter \|...\| ... | main.rs:568:9:568:24 | ExprStmt | |
-| main.rs:567:24:569:5 | exit \|...\| ... (normal) | main.rs:567:24:569:5 | exit \|...\| ... | |
-| main.rs:567:27:569:5 | { ... } | main.rs:567:24:569:5 | exit \|...\| ... (normal) | |
-| main.rs:568:9:568:9 | z | main.rs:568:22:568:22 | 1 | |
-| main.rs:568:9:568:23 | z.add_assign(...) | main.rs:567:27:569:5 | { ... } | |
-| main.rs:568:9:568:24 | ExprStmt | main.rs:568:9:568:9 | z | |
-| main.rs:568:22:568:22 | 1 | main.rs:568:9:568:23 | z.add_assign(...) | |
-| main.rs:570:5:570:12 | closure3 | main.rs:570:5:570:14 | closure3(...) | |
-| main.rs:570:5:570:14 | closure3(...) | main.rs:571:5:571:17 | ExprStmt | |
-| main.rs:570:5:570:15 | ExprStmt | main.rs:570:5:570:12 | closure3 | |
-| main.rs:571:5:571:13 | print_i64 | main.rs:571:15:571:15 | z | |
-| main.rs:571:5:571:16 | print_i64(...) | main.rs:545:18:572:1 | { ... } | |
-| main.rs:571:5:571:17 | ExprStmt | main.rs:571:5:571:13 | print_i64 | |
-| main.rs:571:15:571:15 | z | main.rs:571:5:571:16 | print_i64(...) | |
-| main.rs:574:1:582:1 | enter fn async_block_capture | main.rs:575:5:575:23 | let ... = 0 | |
-| main.rs:574:1:582:1 | exit fn async_block_capture (normal) | main.rs:574:1:582:1 | exit fn async_block_capture | |
-| main.rs:574:32:582:1 | { ... } | main.rs:574:1:582:1 | exit fn async_block_capture (normal) | |
-| main.rs:575:5:575:23 | let ... = 0 | main.rs:575:22:575:22 | 0 | |
-| main.rs:575:9:575:13 | mut i | main.rs:576:5:578:6 | let ... = ... | match |
-| main.rs:575:13:575:13 | i | main.rs:575:9:575:13 | mut i | |
-| main.rs:575:22:575:22 | 0 | main.rs:575:13:575:13 | i | |
-| main.rs:576:5:578:6 | let ... = ... | main.rs:576:17:578:5 | { ... } | |
-| main.rs:576:9:576:13 | block | main.rs:576:9:576:13 | block | |
-| main.rs:576:9:576:13 | block | main.rs:580:5:580:16 | ExprStmt | match |
-| main.rs:576:17:578:5 | enter { ... } | main.rs:577:9:577:14 | ExprStmt | |
-| main.rs:576:17:578:5 | exit { ... } (normal) | main.rs:576:17:578:5 | exit { ... } | |
-| main.rs:576:17:578:5 | { ... } | main.rs:576:9:576:13 | block | |
-| main.rs:577:9:577:9 | i | main.rs:577:13:577:13 | 1 | |
-| main.rs:577:9:577:13 | ... = ... | main.rs:576:17:578:5 | exit { ... } (normal) | |
-| main.rs:577:9:577:14 | ExprStmt | main.rs:577:9:577:9 | i | |
-| main.rs:577:13:577:13 | 1 | main.rs:577:9:577:13 | ... = ... | |
-| main.rs:580:5:580:9 | block | main.rs:580:5:580:15 | await block | |
-| main.rs:580:5:580:15 | await block | main.rs:581:5:581:17 | ExprStmt | |
-| main.rs:580:5:580:16 | ExprStmt | main.rs:580:5:580:9 | block | |
-| main.rs:581:5:581:13 | print_i64 | main.rs:581:15:581:15 | i | |
-| main.rs:581:5:581:16 | print_i64(...) | main.rs:574:32:582:1 | { ... } | |
-| main.rs:581:5:581:17 | ExprStmt | main.rs:581:5:581:13 | print_i64 | |
-| main.rs:581:15:581:15 | i | main.rs:581:5:581:16 | print_i64(...) | |
-| main.rs:584:1:600:1 | enter fn phi | main.rs:584:8:584:8 | b | |
-| main.rs:584:1:600:1 | exit fn phi (normal) | main.rs:584:1:600:1 | exit fn phi | |
-| main.rs:584:8:584:8 | b | main.rs:584:8:584:8 | b | |
-| main.rs:584:8:584:8 | b | main.rs:584:8:584:14 | ...: bool | match |
-| main.rs:584:8:584:14 | ...: bool | main.rs:585:5:585:18 | let ... = 1 | |
-| main.rs:584:17:600:1 | { ... } | main.rs:584:1:600:1 | exit fn phi (normal) | |
-| main.rs:585:5:585:18 | let ... = 1 | main.rs:585:17:585:17 | 1 | |
-| main.rs:585:9:585:13 | mut x | main.rs:586:5:586:17 | ExprStmt | match |
-| main.rs:585:13:585:13 | x | main.rs:585:9:585:13 | mut x | |
-| main.rs:585:17:585:17 | 1 | main.rs:585:13:585:13 | x | |
-| main.rs:586:5:586:13 | print_i64 | main.rs:586:15:586:15 | x | |
-| main.rs:586:5:586:16 | print_i64(...) | main.rs:587:5:587:21 | ExprStmt | |
-| main.rs:586:5:586:17 | ExprStmt | main.rs:586:5:586:13 | print_i64 | |
-| main.rs:586:15:586:15 | x | main.rs:586:5:586:16 | print_i64(...) | |
-| main.rs:587:5:587:13 | print_i64 | main.rs:587:15:587:15 | x | |
-| main.rs:587:5:587:20 | print_i64(...) | main.rs:588:5:598:6 | let _ = ... | |
-| main.rs:587:5:587:21 | ExprStmt | main.rs:587:5:587:13 | print_i64 | |
-| main.rs:587:15:587:15 | x | main.rs:587:19:587:19 | 1 | |
-| main.rs:587:15:587:19 | ... + ... | main.rs:587:5:587:20 | print_i64(...) | |
-| main.rs:587:19:587:19 | 1 | main.rs:587:15:587:19 | ... + ... | |
-| main.rs:588:5:598:6 | let _ = ... | main.rs:589:16:589:16 | b | |
-| main.rs:589:9:589:9 | _ | main.rs:599:5:599:17 | ExprStmt | match |
-| main.rs:589:13:598:5 | if b {...} else {...} | main.rs:589:9:589:9 | _ | |
-| main.rs:589:16:589:16 | b | main.rs:591:9:591:14 | ExprStmt | true |
-| main.rs:589:16:589:16 | b | main.rs:595:9:595:14 | ExprStmt | false |
-| main.rs:590:5:594:5 | { ... } | main.rs:589:13:598:5 | if b {...} else {...} | |
-| main.rs:591:9:591:9 | x | main.rs:591:13:591:13 | 2 | |
-| main.rs:591:9:591:13 | ... = ... | main.rs:592:9:592:21 | ExprStmt | |
-| main.rs:591:9:591:14 | ExprStmt | main.rs:591:9:591:9 | x | |
-| main.rs:591:13:591:13 | 2 | main.rs:591:9:591:13 | ... = ... | |
-| main.rs:592:9:592:17 | print_i64 | main.rs:592:19:592:19 | x | |
-| main.rs:592:9:592:20 | print_i64(...) | main.rs:593:9:593:25 | ExprStmt | |
-| main.rs:592:9:592:21 | ExprStmt | main.rs:592:9:592:17 | print_i64 | |
-| main.rs:592:19:592:19 | x | main.rs:592:9:592:20 | print_i64(...) | |
-| main.rs:593:9:593:17 | print_i64 | main.rs:593:19:593:19 | x | |
-| main.rs:593:9:593:24 | print_i64(...) | main.rs:590:5:594:5 | { ... } | |
-| main.rs:593:9:593:25 | ExprStmt | main.rs:593:9:593:17 | print_i64 | |
-| main.rs:593:19:593:19 | x | main.rs:593:23:593:23 | 1 | |
-| main.rs:593:19:593:23 | ... + ... | main.rs:593:9:593:24 | print_i64(...) | |
-| main.rs:593:23:593:23 | 1 | main.rs:593:19:593:23 | ... + ... | |
-| main.rs:594:12:598:5 | { ... } | main.rs:589:13:598:5 | if b {...} else {...} | |
-| main.rs:595:9:595:9 | x | main.rs:595:13:595:13 | 3 | |
-| main.rs:595:9:595:13 | ... = ... | main.rs:596:9:596:21 | ExprStmt | |
-| main.rs:595:9:595:14 | ExprStmt | main.rs:595:9:595:9 | x | |
-| main.rs:595:13:595:13 | 3 | main.rs:595:9:595:13 | ... = ... | |
-| main.rs:596:9:596:17 | print_i64 | main.rs:596:19:596:19 | x | |
-| main.rs:596:9:596:20 | print_i64(...) | main.rs:597:9:597:25 | ExprStmt | |
-| main.rs:596:9:596:21 | ExprStmt | main.rs:596:9:596:17 | print_i64 | |
-| main.rs:596:19:596:19 | x | main.rs:596:9:596:20 | print_i64(...) | |
-| main.rs:597:9:597:17 | print_i64 | main.rs:597:19:597:19 | x | |
-| main.rs:597:9:597:24 | print_i64(...) | main.rs:594:12:598:5 | { ... } | |
-| main.rs:597:9:597:25 | ExprStmt | main.rs:597:9:597:17 | print_i64 | |
-| main.rs:597:19:597:19 | x | main.rs:597:23:597:23 | 1 | |
-| main.rs:597:19:597:23 | ... + ... | main.rs:597:9:597:24 | print_i64(...) | |
-| main.rs:597:23:597:23 | 1 | main.rs:597:19:597:23 | ... + ... | |
-| main.rs:599:5:599:13 | print_i64 | main.rs:599:15:599:15 | x | |
-| main.rs:599:5:599:16 | print_i64(...) | main.rs:584:17:600:1 | { ... } | |
-| main.rs:599:5:599:17 | ExprStmt | main.rs:599:5:599:13 | print_i64 | |
-| main.rs:599:15:599:15 | x | main.rs:599:5:599:16 | print_i64(...) | |
-| main.rs:602:1:619:1 | enter fn phi_read | main.rs:602:13:602:14 | b1 | |
-| main.rs:602:1:619:1 | exit fn phi_read (normal) | main.rs:602:1:619:1 | exit fn phi_read | |
-| main.rs:602:13:602:14 | b1 | main.rs:602:13:602:14 | b1 | |
-| main.rs:602:13:602:14 | b1 | main.rs:602:13:602:20 | ...: bool | match |
-| main.rs:602:13:602:20 | ...: bool | main.rs:602:23:602:24 | b2 | |
-| main.rs:602:23:602:24 | b2 | main.rs:602:23:602:24 | b2 | |
-| main.rs:602:23:602:24 | b2 | main.rs:602:23:602:30 | ...: bool | match |
-| main.rs:602:23:602:30 | ...: bool | main.rs:603:5:603:14 | let ... = 1 | |
-| main.rs:602:33:619:1 | { ... } | main.rs:602:1:619:1 | exit fn phi_read (normal) | |
-| main.rs:603:5:603:14 | let ... = 1 | main.rs:603:13:603:13 | 1 | |
-| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x | |
-| main.rs:603:9:603:9 | x | main.rs:604:5:610:6 | let _ = ... | match |
-| main.rs:603:13:603:13 | 1 | main.rs:603:9:603:9 | x | |
-| main.rs:604:5:610:6 | let _ = ... | main.rs:605:16:605:17 | b1 | |
-| main.rs:605:9:605:9 | _ | main.rs:612:5:618:6 | let _ = ... | match |
-| main.rs:605:13:610:5 | if b1 {...} else {...} | main.rs:605:9:605:9 | _ | |
-| main.rs:605:16:605:17 | b1 | main.rs:607:9:607:21 | ExprStmt | true |
-| main.rs:605:16:605:17 | b1 | main.rs:609:9:609:21 | ExprStmt | false |
-| main.rs:606:5:608:5 | { ... } | main.rs:605:13:610:5 | if b1 {...} else {...} | |
-| main.rs:607:9:607:17 | print_i64 | main.rs:607:19:607:19 | x | |
-| main.rs:607:9:607:20 | print_i64(...) | main.rs:606:5:608:5 | { ... } | |
-| main.rs:607:9:607:21 | ExprStmt | main.rs:607:9:607:17 | print_i64 | |
-| main.rs:607:19:607:19 | x | main.rs:607:9:607:20 | print_i64(...) | |
-| main.rs:608:12:610:5 | { ... } | main.rs:605:13:610:5 | if b1 {...} else {...} | |
+| main.rs:479:5:479:27 | ... .add_assign(...) | main.rs:480:5:480:17 | ExprStmt | |
+| main.rs:479:5:479:28 | ExprStmt | main.rs:479:11:479:11 | a | |
+| main.rs:479:6:479:11 | &mut a | main.rs:479:25:479:26 | 10 | |
+| main.rs:479:11:479:11 | a | main.rs:479:6:479:11 | &mut a | |
+| main.rs:479:25:479:26 | 10 | main.rs:479:5:479:27 | ... .add_assign(...) | |
+| main.rs:480:5:480:13 | print_i64 | main.rs:480:15:480:15 | a | |
+| main.rs:480:5:480:16 | print_i64(...) | main.rs:475:17:481:1 | { ... } | |
+| main.rs:480:5:480:17 | ExprStmt | main.rs:480:5:480:13 | print_i64 | |
+| main.rs:480:15:480:15 | a | main.rs:480:5:480:16 | print_i64(...) | |
+| main.rs:483:1:489:1 | enter fn mutate | main.rs:484:5:484:18 | let ... = 1 | |
+| main.rs:483:1:489:1 | exit fn mutate (normal) | main.rs:483:1:489:1 | exit fn mutate | |
+| main.rs:483:13:489:1 | { ... } | main.rs:483:1:489:1 | exit fn mutate (normal) | |
+| main.rs:484:5:484:18 | let ... = 1 | main.rs:484:17:484:17 | 1 | |
+| main.rs:484:9:484:13 | mut i | main.rs:485:5:486:15 | let ... = ... | match |
+| main.rs:484:13:484:13 | i | main.rs:484:9:484:13 | mut i | |
+| main.rs:484:17:484:17 | 1 | main.rs:484:13:484:13 | i | |
+| main.rs:485:5:486:15 | let ... = ... | main.rs:486:14:486:14 | i | |
+| main.rs:485:9:485:13 | ref_i | main.rs:485:9:485:13 | ref_i | |
+| main.rs:485:9:485:13 | ref_i | main.rs:487:5:487:15 | ExprStmt | match |
+| main.rs:486:9:486:14 | &mut i | main.rs:485:9:485:13 | ref_i | |
+| main.rs:486:14:486:14 | i | main.rs:486:9:486:14 | &mut i | |
+| main.rs:487:5:487:10 | * ... | main.rs:487:14:487:14 | 2 | |
+| main.rs:487:5:487:14 | ... = ... | main.rs:488:5:488:17 | ExprStmt | |
+| main.rs:487:5:487:15 | ExprStmt | main.rs:487:6:487:10 | ref_i | |
+| main.rs:487:6:487:10 | ref_i | main.rs:487:5:487:10 | * ... | |
+| main.rs:487:14:487:14 | 2 | main.rs:487:5:487:14 | ... = ... | |
+| main.rs:488:5:488:13 | print_i64 | main.rs:488:15:488:15 | i | |
+| main.rs:488:5:488:16 | print_i64(...) | main.rs:483:13:489:1 | { ... } | |
+| main.rs:488:5:488:17 | ExprStmt | main.rs:488:5:488:13 | print_i64 | |
+| main.rs:488:15:488:15 | i | main.rs:488:5:488:16 | print_i64(...) | |
+| main.rs:491:1:496:1 | enter fn mutate_param | main.rs:491:17:491:17 | x | |
+| main.rs:491:1:496:1 | exit fn mutate_param (normal) | main.rs:491:1:496:1 | exit fn mutate_param | |
+| main.rs:491:17:491:17 | x | main.rs:491:17:491:17 | x | |
+| main.rs:491:17:491:17 | x | main.rs:491:17:491:27 | ...: ... | match |
+| main.rs:491:17:491:27 | ...: ... | main.rs:492:5:494:11 | ExprStmt | |
+| main.rs:492:5:492:6 | * ... | main.rs:493:10:493:10 | x | |
+| main.rs:492:5:494:10 | ... = ... | main.rs:495:5:495:13 | ExprStmt | |
+| main.rs:492:5:494:11 | ExprStmt | main.rs:492:6:492:6 | x | |
+| main.rs:492:6:492:6 | x | main.rs:492:5:492:6 | * ... | |
+| main.rs:493:9:493:10 | * ... | main.rs:494:10:494:10 | x | |
+| main.rs:493:9:494:10 | ... + ... | main.rs:492:5:494:10 | ... = ... | |
+| main.rs:493:10:493:10 | x | main.rs:493:9:493:10 | * ... | |
+| main.rs:494:9:494:10 | * ... | main.rs:493:9:494:10 | ... + ... | |
+| main.rs:494:10:494:10 | x | main.rs:494:9:494:10 | * ... | |
+| main.rs:495:5:495:12 | return x | main.rs:491:1:496:1 | exit fn mutate_param (normal) | return |
+| main.rs:495:5:495:13 | ExprStmt | main.rs:495:12:495:12 | x | |
+| main.rs:495:12:495:12 | x | main.rs:495:5:495:12 | return x | |
+| main.rs:498:1:504:1 | enter fn mutate_param2 | main.rs:498:22:498:22 | x | |
+| main.rs:498:1:504:1 | exit fn mutate_param2 (normal) | main.rs:498:1:504:1 | exit fn mutate_param2 | |
+| main.rs:498:22:498:22 | x | main.rs:498:22:498:22 | x | |
+| main.rs:498:22:498:22 | x | main.rs:498:22:498:35 | ...: ... | match |
+| main.rs:498:22:498:35 | ...: ... | main.rs:498:38:498:38 | y | |
+| main.rs:498:38:498:38 | y | main.rs:498:38:498:38 | y | |
+| main.rs:498:38:498:38 | y | main.rs:498:38:498:56 | ...: ... | match |
+| main.rs:498:38:498:56 | ...: ... | main.rs:499:5:501:11 | ExprStmt | |
+| main.rs:498:59:504:1 | { ... } | main.rs:498:1:504:1 | exit fn mutate_param2 (normal) | |
+| main.rs:499:5:499:6 | * ... | main.rs:500:10:500:10 | x | |
+| main.rs:499:5:501:10 | ... = ... | main.rs:502:5:503:10 | ExprStmt | |
+| main.rs:499:5:501:11 | ExprStmt | main.rs:499:6:499:6 | x | |
+| main.rs:499:6:499:6 | x | main.rs:499:5:499:6 | * ... | |
+| main.rs:500:9:500:10 | * ... | main.rs:501:10:501:10 | x | |
+| main.rs:500:9:501:10 | ... + ... | main.rs:499:5:501:10 | ... = ... | |
+| main.rs:500:10:500:10 | x | main.rs:500:9:500:10 | * ... | |
+| main.rs:501:9:501:10 | * ... | main.rs:500:9:501:10 | ... + ... | |
+| main.rs:501:10:501:10 | x | main.rs:501:9:501:10 | * ... | |
+| main.rs:502:5:502:6 | * ... | main.rs:503:9:503:9 | x | |
+| main.rs:502:5:503:9 | ... = ... | main.rs:498:59:504:1 | { ... } | |
+| main.rs:502:5:503:10 | ExprStmt | main.rs:502:6:502:6 | y | |
+| main.rs:502:6:502:6 | y | main.rs:502:5:502:6 | * ... | |
+| main.rs:503:9:503:9 | x | main.rs:502:5:503:9 | ... = ... | |
+| main.rs:506:1:526:1 | enter fn mutate_arg | main.rs:507:5:507:18 | let ... = 2 | |
+| main.rs:506:1:526:1 | exit fn mutate_arg (normal) | main.rs:506:1:526:1 | exit fn mutate_arg | |
+| main.rs:506:17:526:1 | { ... } | main.rs:506:1:526:1 | exit fn mutate_arg (normal) | |
+| main.rs:507:5:507:18 | let ... = 2 | main.rs:507:17:507:17 | 2 | |
+| main.rs:507:9:507:13 | mut x | main.rs:508:5:509:29 | let ... = ... | match |
+| main.rs:507:13:507:13 | x | main.rs:507:9:507:13 | mut x | |
+| main.rs:507:17:507:17 | 2 | main.rs:507:13:507:13 | x | |
+| main.rs:508:5:509:29 | let ... = ... | main.rs:509:9:509:20 | mutate_param | |
+| main.rs:508:9:508:9 | y | main.rs:508:9:508:9 | y | |
+| main.rs:508:9:508:9 | y | main.rs:510:5:510:12 | ExprStmt | match |
+| main.rs:509:9:509:20 | mutate_param | main.rs:509:27:509:27 | x | |
+| main.rs:509:9:509:28 | mutate_param(...) | main.rs:508:9:508:9 | y | |
+| main.rs:509:22:509:27 | &mut x | main.rs:509:9:509:28 | mutate_param(...) | |
+| main.rs:509:27:509:27 | x | main.rs:509:22:509:27 | &mut x | |
+| main.rs:510:5:510:6 | * ... | main.rs:510:10:510:11 | 10 | |
+| main.rs:510:5:510:11 | ... = ... | main.rs:513:5:513:17 | ExprStmt | |
+| main.rs:510:5:510:12 | ExprStmt | main.rs:510:6:510:6 | y | |
+| main.rs:510:6:510:6 | y | main.rs:510:5:510:6 | * ... | |
+| main.rs:510:10:510:11 | 10 | main.rs:510:5:510:11 | ... = ... | |
+| main.rs:513:5:513:13 | print_i64 | main.rs:513:15:513:15 | x | |
+| main.rs:513:5:513:16 | print_i64(...) | main.rs:515:5:515:18 | let ... = 4 | |
+| main.rs:513:5:513:17 | ExprStmt | main.rs:513:5:513:13 | print_i64 | |
+| main.rs:513:15:513:15 | x | main.rs:513:5:513:16 | print_i64(...) | |
+| main.rs:515:5:515:18 | let ... = 4 | main.rs:515:17:515:17 | 4 | |
+| main.rs:515:9:515:13 | mut z | main.rs:516:5:517:20 | let ... = ... | match |
+| main.rs:515:13:515:13 | z | main.rs:515:9:515:13 | mut z | |
+| main.rs:515:17:515:17 | 4 | main.rs:515:13:515:13 | z | |
+| main.rs:516:5:517:20 | let ... = ... | main.rs:517:19:517:19 | x | |
+| main.rs:516:9:516:9 | w | main.rs:516:9:516:9 | w | |
+| main.rs:516:9:516:9 | w | main.rs:518:5:521:6 | ExprStmt | match |
+| main.rs:517:9:517:19 | &mut ... | main.rs:516:9:516:9 | w | |
+| main.rs:517:14:517:19 | &mut x | main.rs:517:9:517:19 | &mut ... | |
+| main.rs:517:19:517:19 | x | main.rs:517:14:517:19 | &mut x | |
+| main.rs:518:5:518:17 | mutate_param2 | main.rs:519:14:519:14 | z | |
+| main.rs:518:5:521:5 | mutate_param2(...) | main.rs:522:5:522:13 | ExprStmt | |
+| main.rs:518:5:521:6 | ExprStmt | main.rs:518:5:518:17 | mutate_param2 | |
+| main.rs:519:9:519:14 | &mut z | main.rs:520:9:520:9 | w | |
+| main.rs:519:14:519:14 | z | main.rs:519:9:519:14 | &mut z | |
+| main.rs:520:9:520:9 | w | main.rs:518:5:521:5 | mutate_param2(...) | |
+| main.rs:522:5:522:7 | * ... | main.rs:522:11:522:12 | 11 | |
+| main.rs:522:5:522:12 | ... = ... | main.rs:525:5:525:17 | ExprStmt | |
+| main.rs:522:5:522:13 | ExprStmt | main.rs:522:7:522:7 | w | |
+| main.rs:522:6:522:7 | * ... | main.rs:522:5:522:7 | * ... | |
+| main.rs:522:7:522:7 | w | main.rs:522:6:522:7 | * ... | |
+| main.rs:522:11:522:12 | 11 | main.rs:522:5:522:12 | ... = ... | |
+| main.rs:525:5:525:13 | print_i64 | main.rs:525:15:525:15 | z | |
+| main.rs:525:5:525:16 | print_i64(...) | main.rs:506:17:526:1 | { ... } | |
+| main.rs:525:5:525:17 | ExprStmt | main.rs:525:5:525:13 | print_i64 | |
+| main.rs:525:15:525:15 | z | main.rs:525:5:525:16 | print_i64(...) | |
+| main.rs:528:1:534:1 | enter fn alias | main.rs:529:5:529:18 | let ... = 1 | |
+| main.rs:528:1:534:1 | exit fn alias (normal) | main.rs:528:1:534:1 | exit fn alias | |
+| main.rs:528:12:534:1 | { ... } | main.rs:528:1:534:1 | exit fn alias (normal) | |
+| main.rs:529:5:529:18 | let ... = 1 | main.rs:529:17:529:17 | 1 | |
+| main.rs:529:9:529:13 | mut x | main.rs:530:5:531:15 | let ... = ... | match |
+| main.rs:529:13:529:13 | x | main.rs:529:9:529:13 | mut x | |
+| main.rs:529:17:529:17 | 1 | main.rs:529:13:529:13 | x | |
+| main.rs:530:5:531:15 | let ... = ... | main.rs:531:14:531:14 | x | |
+| main.rs:530:9:530:9 | y | main.rs:530:9:530:9 | y | |
+| main.rs:530:9:530:9 | y | main.rs:532:5:532:11 | ExprStmt | match |
+| main.rs:531:9:531:14 | &mut x | main.rs:530:9:530:9 | y | |
+| main.rs:531:14:531:14 | x | main.rs:531:9:531:14 | &mut x | |
+| main.rs:532:5:532:6 | * ... | main.rs:532:10:532:10 | 2 | |
+| main.rs:532:5:532:10 | ... = ... | main.rs:533:5:533:17 | ExprStmt | |
+| main.rs:532:5:532:11 | ExprStmt | main.rs:532:6:532:6 | y | |
+| main.rs:532:6:532:6 | y | main.rs:532:5:532:6 | * ... | |
+| main.rs:532:10:532:10 | 2 | main.rs:532:5:532:10 | ... = ... | |
+| main.rs:533:5:533:13 | print_i64 | main.rs:533:15:533:15 | x | |
+| main.rs:533:5:533:16 | print_i64(...) | main.rs:528:12:534:1 | { ... } | |
+| main.rs:533:5:533:17 | ExprStmt | main.rs:533:5:533:13 | print_i64 | |
+| main.rs:533:15:533:15 | x | main.rs:533:5:533:16 | print_i64(...) | |
+| main.rs:536:1:545:1 | enter fn capture_immut | main.rs:537:5:537:16 | let ... = 100 | |
+| main.rs:536:1:545:1 | exit fn capture_immut (normal) | main.rs:536:1:545:1 | exit fn capture_immut | |
+| main.rs:536:20:545:1 | { ... } | main.rs:536:1:545:1 | exit fn capture_immut (normal) | |
+| main.rs:537:5:537:16 | let ... = 100 | main.rs:537:13:537:15 | 100 | |
+| main.rs:537:9:537:9 | x | main.rs:537:9:537:9 | x | |
+| main.rs:537:9:537:9 | x | main.rs:540:5:542:6 | let ... = ... | match |
+| main.rs:537:13:537:15 | 100 | main.rs:537:9:537:9 | x | |
+| main.rs:540:5:542:6 | let ... = ... | main.rs:540:15:542:5 | \|...\| ... | |
+| main.rs:540:9:540:11 | cap | main.rs:540:9:540:11 | cap | |
+| main.rs:540:9:540:11 | cap | main.rs:543:5:543:10 | ExprStmt | match |
+| main.rs:540:15:542:5 | \|...\| ... | main.rs:540:9:540:11 | cap | |
+| main.rs:540:15:542:5 | enter \|...\| ... | main.rs:541:9:541:21 | ExprStmt | |
+| main.rs:540:15:542:5 | exit \|...\| ... (normal) | main.rs:540:15:542:5 | exit \|...\| ... | |
+| main.rs:540:18:542:5 | { ... } | main.rs:540:15:542:5 | exit \|...\| ... (normal) | |
+| main.rs:541:9:541:17 | print_i64 | main.rs:541:19:541:19 | x | |
+| main.rs:541:9:541:20 | print_i64(...) | main.rs:540:18:542:5 | { ... } | |
+| main.rs:541:9:541:21 | ExprStmt | main.rs:541:9:541:17 | print_i64 | |
+| main.rs:541:19:541:19 | x | main.rs:541:9:541:20 | print_i64(...) | |
+| main.rs:543:5:543:7 | cap | main.rs:543:5:543:9 | cap(...) | |
+| main.rs:543:5:543:9 | cap(...) | main.rs:544:5:544:17 | ExprStmt | |
+| main.rs:543:5:543:10 | ExprStmt | main.rs:543:5:543:7 | cap | |
+| main.rs:544:5:544:13 | print_i64 | main.rs:544:15:544:15 | x | |
+| main.rs:544:5:544:16 | print_i64(...) | main.rs:536:20:545:1 | { ... } | |
+| main.rs:544:5:544:17 | ExprStmt | main.rs:544:5:544:13 | print_i64 | |
+| main.rs:544:15:544:15 | x | main.rs:544:5:544:16 | print_i64(...) | |
+| main.rs:547:1:574:1 | enter fn capture_mut | main.rs:548:5:548:18 | let ... = 1 | |
+| main.rs:547:1:574:1 | exit fn capture_mut (normal) | main.rs:547:1:574:1 | exit fn capture_mut | |
+| main.rs:547:18:574:1 | { ... } | main.rs:547:1:574:1 | exit fn capture_mut (normal) | |
+| main.rs:548:5:548:18 | let ... = 1 | main.rs:548:17:548:17 | 1 | |
+| main.rs:548:9:548:13 | mut x | main.rs:551:5:553:6 | let ... = ... | match |
+| main.rs:548:13:548:13 | x | main.rs:548:9:548:13 | mut x | |
+| main.rs:548:17:548:17 | 1 | main.rs:548:13:548:13 | x | |
+| main.rs:551:5:553:6 | let ... = ... | main.rs:551:20:553:5 | \|...\| ... | |
+| main.rs:551:9:551:16 | closure1 | main.rs:551:9:551:16 | closure1 | |
+| main.rs:551:9:551:16 | closure1 | main.rs:554:5:554:15 | ExprStmt | match |
+| main.rs:551:20:553:5 | \|...\| ... | main.rs:551:9:551:16 | closure1 | |
+| main.rs:551:20:553:5 | enter \|...\| ... | main.rs:552:9:552:21 | ExprStmt | |
+| main.rs:551:20:553:5 | exit \|...\| ... (normal) | main.rs:551:20:553:5 | exit \|...\| ... | |
+| main.rs:551:23:553:5 | { ... } | main.rs:551:20:553:5 | exit \|...\| ... (normal) | |
+| main.rs:552:9:552:17 | print_i64 | main.rs:552:19:552:19 | x | |
+| main.rs:552:9:552:20 | print_i64(...) | main.rs:551:23:553:5 | { ... } | |
+| main.rs:552:9:552:21 | ExprStmt | main.rs:552:9:552:17 | print_i64 | |
+| main.rs:552:19:552:19 | x | main.rs:552:9:552:20 | print_i64(...) | |
+| main.rs:554:5:554:12 | closure1 | main.rs:554:5:554:14 | closure1(...) | |
+| main.rs:554:5:554:14 | closure1(...) | main.rs:555:5:555:17 | ExprStmt | |
+| main.rs:554:5:554:15 | ExprStmt | main.rs:554:5:554:12 | closure1 | |
+| main.rs:555:5:555:13 | print_i64 | main.rs:555:15:555:15 | x | |
+| main.rs:555:5:555:16 | print_i64(...) | main.rs:557:5:557:18 | let ... = 2 | |
+| main.rs:555:5:555:17 | ExprStmt | main.rs:555:5:555:13 | print_i64 | |
+| main.rs:555:15:555:15 | x | main.rs:555:5:555:16 | print_i64(...) | |
+| main.rs:557:5:557:18 | let ... = 2 | main.rs:557:17:557:17 | 2 | |
+| main.rs:557:9:557:13 | mut y | main.rs:560:5:562:6 | let ... = ... | match |
+| main.rs:557:13:557:13 | y | main.rs:557:9:557:13 | mut y | |
+| main.rs:557:17:557:17 | 2 | main.rs:557:13:557:13 | y | |
+| main.rs:560:5:562:6 | let ... = ... | main.rs:560:24:562:5 | \|...\| ... | |
+| main.rs:560:9:560:20 | mut closure2 | main.rs:563:5:563:15 | ExprStmt | match |
+| main.rs:560:13:560:20 | closure2 | main.rs:560:9:560:20 | mut closure2 | |
+| main.rs:560:24:562:5 | \|...\| ... | main.rs:560:13:560:20 | closure2 | |
+| main.rs:560:24:562:5 | enter \|...\| ... | main.rs:561:9:561:14 | ExprStmt | |
+| main.rs:560:24:562:5 | exit \|...\| ... (normal) | main.rs:560:24:562:5 | exit \|...\| ... | |
+| main.rs:560:27:562:5 | { ... } | main.rs:560:24:562:5 | exit \|...\| ... (normal) | |
+| main.rs:561:9:561:9 | y | main.rs:561:13:561:13 | 3 | |
+| main.rs:561:9:561:13 | ... = ... | main.rs:560:27:562:5 | { ... } | |
+| main.rs:561:9:561:14 | ExprStmt | main.rs:561:9:561:9 | y | |
+| main.rs:561:13:561:13 | 3 | main.rs:561:9:561:13 | ... = ... | |
+| main.rs:563:5:563:12 | closure2 | main.rs:563:5:563:14 | closure2(...) | |
+| main.rs:563:5:563:14 | closure2(...) | main.rs:564:5:564:17 | ExprStmt | |
+| main.rs:563:5:563:15 | ExprStmt | main.rs:563:5:563:12 | closure2 | |
+| main.rs:564:5:564:13 | print_i64 | main.rs:564:15:564:15 | y | |
+| main.rs:564:5:564:16 | print_i64(...) | main.rs:566:5:566:18 | let ... = 2 | |
+| main.rs:564:5:564:17 | ExprStmt | main.rs:564:5:564:13 | print_i64 | |
+| main.rs:564:15:564:15 | y | main.rs:564:5:564:16 | print_i64(...) | |
+| main.rs:566:5:566:18 | let ... = 2 | main.rs:566:17:566:17 | 2 | |
+| main.rs:566:9:566:13 | mut z | main.rs:569:5:571:6 | let ... = ... | match |
+| main.rs:566:13:566:13 | z | main.rs:566:9:566:13 | mut z | |
+| main.rs:566:17:566:17 | 2 | main.rs:566:13:566:13 | z | |
+| main.rs:569:5:571:6 | let ... = ... | main.rs:569:24:571:5 | \|...\| ... | |
+| main.rs:569:9:569:20 | mut closure3 | main.rs:572:5:572:15 | ExprStmt | match |
+| main.rs:569:13:569:20 | closure3 | main.rs:569:9:569:20 | mut closure3 | |
+| main.rs:569:24:571:5 | \|...\| ... | main.rs:569:13:569:20 | closure3 | |
+| main.rs:569:24:571:5 | enter \|...\| ... | main.rs:570:9:570:24 | ExprStmt | |
+| main.rs:569:24:571:5 | exit \|...\| ... (normal) | main.rs:569:24:571:5 | exit \|...\| ... | |
+| main.rs:569:27:571:5 | { ... } | main.rs:569:24:571:5 | exit \|...\| ... (normal) | |
+| main.rs:570:9:570:9 | z | main.rs:570:22:570:22 | 1 | |
+| main.rs:570:9:570:23 | z.add_assign(...) | main.rs:569:27:571:5 | { ... } | |
+| main.rs:570:9:570:24 | ExprStmt | main.rs:570:9:570:9 | z | |
+| main.rs:570:22:570:22 | 1 | main.rs:570:9:570:23 | z.add_assign(...) | |
+| main.rs:572:5:572:12 | closure3 | main.rs:572:5:572:14 | closure3(...) | |
+| main.rs:572:5:572:14 | closure3(...) | main.rs:573:5:573:17 | ExprStmt | |
+| main.rs:572:5:572:15 | ExprStmt | main.rs:572:5:572:12 | closure3 | |
+| main.rs:573:5:573:13 | print_i64 | main.rs:573:15:573:15 | z | |
+| main.rs:573:5:573:16 | print_i64(...) | main.rs:547:18:574:1 | { ... } | |
+| main.rs:573:5:573:17 | ExprStmt | main.rs:573:5:573:13 | print_i64 | |
+| main.rs:573:15:573:15 | z | main.rs:573:5:573:16 | print_i64(...) | |
+| main.rs:576:1:584:1 | enter fn async_block_capture | main.rs:577:5:577:23 | let ... = 0 | |
+| main.rs:576:1:584:1 | exit fn async_block_capture (normal) | main.rs:576:1:584:1 | exit fn async_block_capture | |
+| main.rs:576:32:584:1 | { ... } | main.rs:576:1:584:1 | exit fn async_block_capture (normal) | |
+| main.rs:577:5:577:23 | let ... = 0 | main.rs:577:22:577:22 | 0 | |
+| main.rs:577:9:577:13 | mut i | main.rs:578:5:580:6 | let ... = ... | match |
+| main.rs:577:13:577:13 | i | main.rs:577:9:577:13 | mut i | |
+| main.rs:577:22:577:22 | 0 | main.rs:577:13:577:13 | i | |
+| main.rs:578:5:580:6 | let ... = ... | main.rs:578:17:580:5 | { ... } | |
+| main.rs:578:9:578:13 | block | main.rs:578:9:578:13 | block | |
+| main.rs:578:9:578:13 | block | main.rs:582:5:582:16 | ExprStmt | match |
+| main.rs:578:17:580:5 | enter { ... } | main.rs:579:9:579:14 | ExprStmt | |
+| main.rs:578:17:580:5 | exit { ... } (normal) | main.rs:578:17:580:5 | exit { ... } | |
+| main.rs:578:17:580:5 | { ... } | main.rs:578:9:578:13 | block | |
+| main.rs:579:9:579:9 | i | main.rs:579:13:579:13 | 1 | |
+| main.rs:579:9:579:13 | ... = ... | main.rs:578:17:580:5 | exit { ... } (normal) | |
+| main.rs:579:9:579:14 | ExprStmt | main.rs:579:9:579:9 | i | |
+| main.rs:579:13:579:13 | 1 | main.rs:579:9:579:13 | ... = ... | |
+| main.rs:582:5:582:9 | block | main.rs:582:5:582:15 | await block | |
+| main.rs:582:5:582:15 | await block | main.rs:583:5:583:17 | ExprStmt | |
+| main.rs:582:5:582:16 | ExprStmt | main.rs:582:5:582:9 | block | |
+| main.rs:583:5:583:13 | print_i64 | main.rs:583:15:583:15 | i | |
+| main.rs:583:5:583:16 | print_i64(...) | main.rs:576:32:584:1 | { ... } | |
+| main.rs:583:5:583:17 | ExprStmt | main.rs:583:5:583:13 | print_i64 | |
+| main.rs:583:15:583:15 | i | main.rs:583:5:583:16 | print_i64(...) | |
+| main.rs:586:1:602:1 | enter fn phi | main.rs:586:8:586:8 | b | |
+| main.rs:586:1:602:1 | exit fn phi (normal) | main.rs:586:1:602:1 | exit fn phi | |
+| main.rs:586:8:586:8 | b | main.rs:586:8:586:8 | b | |
+| main.rs:586:8:586:8 | b | main.rs:586:8:586:14 | ...: bool | match |
+| main.rs:586:8:586:14 | ...: bool | main.rs:587:5:587:18 | let ... = 1 | |
+| main.rs:586:17:602:1 | { ... } | main.rs:586:1:602:1 | exit fn phi (normal) | |
+| main.rs:587:5:587:18 | let ... = 1 | main.rs:587:17:587:17 | 1 | |
+| main.rs:587:9:587:13 | mut x | main.rs:588:5:588:17 | ExprStmt | match |
+| main.rs:587:13:587:13 | x | main.rs:587:9:587:13 | mut x | |
+| main.rs:587:17:587:17 | 1 | main.rs:587:13:587:13 | x | |
+| main.rs:588:5:588:13 | print_i64 | main.rs:588:15:588:15 | x | |
+| main.rs:588:5:588:16 | print_i64(...) | main.rs:589:5:589:21 | ExprStmt | |
+| main.rs:588:5:588:17 | ExprStmt | main.rs:588:5:588:13 | print_i64 | |
+| main.rs:588:15:588:15 | x | main.rs:588:5:588:16 | print_i64(...) | |
+| main.rs:589:5:589:13 | print_i64 | main.rs:589:15:589:15 | x | |
+| main.rs:589:5:589:20 | print_i64(...) | main.rs:590:5:600:6 | let _ = ... | |
+| main.rs:589:5:589:21 | ExprStmt | main.rs:589:5:589:13 | print_i64 | |
+| main.rs:589:15:589:15 | x | main.rs:589:19:589:19 | 1 | |
+| main.rs:589:15:589:19 | ... + ... | main.rs:589:5:589:20 | print_i64(...) | |
+| main.rs:589:19:589:19 | 1 | main.rs:589:15:589:19 | ... + ... | |
+| main.rs:590:5:600:6 | let _ = ... | main.rs:591:16:591:16 | b | |
+| main.rs:591:9:591:9 | _ | main.rs:601:5:601:17 | ExprStmt | match |
+| main.rs:591:13:600:5 | if b {...} else {...} | main.rs:591:9:591:9 | _ | |
+| main.rs:591:16:591:16 | b | main.rs:593:9:593:14 | ExprStmt | true |
+| main.rs:591:16:591:16 | b | main.rs:597:9:597:14 | ExprStmt | false |
+| main.rs:592:5:596:5 | { ... } | main.rs:591:13:600:5 | if b {...} else {...} | |
+| main.rs:593:9:593:9 | x | main.rs:593:13:593:13 | 2 | |
+| main.rs:593:9:593:13 | ... = ... | main.rs:594:9:594:21 | ExprStmt | |
+| main.rs:593:9:593:14 | ExprStmt | main.rs:593:9:593:9 | x | |
+| main.rs:593:13:593:13 | 2 | main.rs:593:9:593:13 | ... = ... | |
+| main.rs:594:9:594:17 | print_i64 | main.rs:594:19:594:19 | x | |
+| main.rs:594:9:594:20 | print_i64(...) | main.rs:595:9:595:25 | ExprStmt | |
+| main.rs:594:9:594:21 | ExprStmt | main.rs:594:9:594:17 | print_i64 | |
+| main.rs:594:19:594:19 | x | main.rs:594:9:594:20 | print_i64(...) | |
+| main.rs:595:9:595:17 | print_i64 | main.rs:595:19:595:19 | x | |
+| main.rs:595:9:595:24 | print_i64(...) | main.rs:592:5:596:5 | { ... } | |
+| main.rs:595:9:595:25 | ExprStmt | main.rs:595:9:595:17 | print_i64 | |
+| main.rs:595:19:595:19 | x | main.rs:595:23:595:23 | 1 | |
+| main.rs:595:19:595:23 | ... + ... | main.rs:595:9:595:24 | print_i64(...) | |
+| main.rs:595:23:595:23 | 1 | main.rs:595:19:595:23 | ... + ... | |
+| main.rs:596:12:600:5 | { ... } | main.rs:591:13:600:5 | if b {...} else {...} | |
+| main.rs:597:9:597:9 | x | main.rs:597:13:597:13 | 3 | |
+| main.rs:597:9:597:13 | ... = ... | main.rs:598:9:598:21 | ExprStmt | |
+| main.rs:597:9:597:14 | ExprStmt | main.rs:597:9:597:9 | x | |
+| main.rs:597:13:597:13 | 3 | main.rs:597:9:597:13 | ... = ... | |
+| main.rs:598:9:598:17 | print_i64 | main.rs:598:19:598:19 | x | |
+| main.rs:598:9:598:20 | print_i64(...) | main.rs:599:9:599:25 | ExprStmt | |
+| main.rs:598:9:598:21 | ExprStmt | main.rs:598:9:598:17 | print_i64 | |
+| main.rs:598:19:598:19 | x | main.rs:598:9:598:20 | print_i64(...) | |
+| main.rs:599:9:599:17 | print_i64 | main.rs:599:19:599:19 | x | |
+| main.rs:599:9:599:24 | print_i64(...) | main.rs:596:12:600:5 | { ... } | |
+| main.rs:599:9:599:25 | ExprStmt | main.rs:599:9:599:17 | print_i64 | |
+| main.rs:599:19:599:19 | x | main.rs:599:23:599:23 | 1 | |
+| main.rs:599:19:599:23 | ... + ... | main.rs:599:9:599:24 | print_i64(...) | |
+| main.rs:599:23:599:23 | 1 | main.rs:599:19:599:23 | ... + ... | |
+| main.rs:601:5:601:13 | print_i64 | main.rs:601:15:601:15 | x | |
+| main.rs:601:5:601:16 | print_i64(...) | main.rs:586:17:602:1 | { ... } | |
+| main.rs:601:5:601:17 | ExprStmt | main.rs:601:5:601:13 | print_i64 | |
+| main.rs:601:15:601:15 | x | main.rs:601:5:601:16 | print_i64(...) | |
+| main.rs:604:1:621:1 | enter fn phi_read | main.rs:604:13:604:14 | b1 | |
+| main.rs:604:1:621:1 | exit fn phi_read (normal) | main.rs:604:1:621:1 | exit fn phi_read | |
+| main.rs:604:13:604:14 | b1 | main.rs:604:13:604:14 | b1 | |
+| main.rs:604:13:604:14 | b1 | main.rs:604:13:604:20 | ...: bool | match |
+| main.rs:604:13:604:20 | ...: bool | main.rs:604:23:604:24 | b2 | |
+| main.rs:604:23:604:24 | b2 | main.rs:604:23:604:24 | b2 | |
+| main.rs:604:23:604:24 | b2 | main.rs:604:23:604:30 | ...: bool | match |
+| main.rs:604:23:604:30 | ...: bool | main.rs:605:5:605:14 | let ... = 1 | |
+| main.rs:604:33:621:1 | { ... } | main.rs:604:1:621:1 | exit fn phi_read (normal) | |
+| main.rs:605:5:605:14 | let ... = 1 | main.rs:605:13:605:13 | 1 | |
+| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x | |
+| main.rs:605:9:605:9 | x | main.rs:606:5:612:6 | let _ = ... | match |
+| main.rs:605:13:605:13 | 1 | main.rs:605:9:605:9 | x | |
+| main.rs:606:5:612:6 | let _ = ... | main.rs:607:16:607:17 | b1 | |
+| main.rs:607:9:607:9 | _ | main.rs:614:5:620:6 | let _ = ... | match |
+| main.rs:607:13:612:5 | if b1 {...} else {...} | main.rs:607:9:607:9 | _ | |
+| main.rs:607:16:607:17 | b1 | main.rs:609:9:609:21 | ExprStmt | true |
+| main.rs:607:16:607:17 | b1 | main.rs:611:9:611:21 | ExprStmt | false |
+| main.rs:608:5:610:5 | { ... } | main.rs:607:13:612:5 | if b1 {...} else {...} | |
| main.rs:609:9:609:17 | print_i64 | main.rs:609:19:609:19 | x | |
-| main.rs:609:9:609:20 | print_i64(...) | main.rs:608:12:610:5 | { ... } | |
+| main.rs:609:9:609:20 | print_i64(...) | main.rs:608:5:610:5 | { ... } | |
| main.rs:609:9:609:21 | ExprStmt | main.rs:609:9:609:17 | print_i64 | |
| main.rs:609:19:609:19 | x | main.rs:609:9:609:20 | print_i64(...) | |
-| main.rs:612:5:618:6 | let _ = ... | main.rs:613:16:613:17 | b2 | |
-| main.rs:613:9:613:9 | _ | main.rs:602:33:619:1 | { ... } | match |
-| main.rs:613:13:618:5 | if b2 {...} else {...} | main.rs:613:9:613:9 | _ | |
-| main.rs:613:16:613:17 | b2 | main.rs:615:9:615:21 | ExprStmt | true |
-| main.rs:613:16:613:17 | b2 | main.rs:617:9:617:21 | ExprStmt | false |
-| main.rs:614:5:616:5 | { ... } | main.rs:613:13:618:5 | if b2 {...} else {...} | |
-| main.rs:615:9:615:17 | print_i64 | main.rs:615:19:615:19 | x | |
-| main.rs:615:9:615:20 | print_i64(...) | main.rs:614:5:616:5 | { ... } | |
-| main.rs:615:9:615:21 | ExprStmt | main.rs:615:9:615:17 | print_i64 | |
-| main.rs:615:19:615:19 | x | main.rs:615:9:615:20 | print_i64(...) | |
-| main.rs:616:12:618:5 | { ... } | main.rs:613:13:618:5 | if b2 {...} else {...} | |
+| main.rs:610:12:612:5 | { ... } | main.rs:607:13:612:5 | if b1 {...} else {...} | |
+| main.rs:611:9:611:17 | print_i64 | main.rs:611:19:611:19 | x | |
+| main.rs:611:9:611:20 | print_i64(...) | main.rs:610:12:612:5 | { ... } | |
+| main.rs:611:9:611:21 | ExprStmt | main.rs:611:9:611:17 | print_i64 | |
+| main.rs:611:19:611:19 | x | main.rs:611:9:611:20 | print_i64(...) | |
+| main.rs:614:5:620:6 | let _ = ... | main.rs:615:16:615:17 | b2 | |
+| main.rs:615:9:615:9 | _ | main.rs:604:33:621:1 | { ... } | match |
+| main.rs:615:13:620:5 | if b2 {...} else {...} | main.rs:615:9:615:9 | _ | |
+| main.rs:615:16:615:17 | b2 | main.rs:617:9:617:21 | ExprStmt | true |
+| main.rs:615:16:615:17 | b2 | main.rs:619:9:619:21 | ExprStmt | false |
+| main.rs:616:5:618:5 | { ... } | main.rs:615:13:620:5 | if b2 {...} else {...} | |
| main.rs:617:9:617:17 | print_i64 | main.rs:617:19:617:19 | x | |
-| main.rs:617:9:617:20 | print_i64(...) | main.rs:616:12:618:5 | { ... } | |
+| main.rs:617:9:617:20 | print_i64(...) | main.rs:616:5:618:5 | { ... } | |
| main.rs:617:9:617:21 | ExprStmt | main.rs:617:9:617:17 | print_i64 | |
| main.rs:617:19:617:19 | x | main.rs:617:9:617:20 | print_i64(...) | |
-| main.rs:626:5:628:5 | enter fn my_get | main.rs:626:20:626:23 | self | |
-| main.rs:626:5:628:5 | exit fn my_get (normal) | main.rs:626:5:628:5 | exit fn my_get | |
-| main.rs:626:15:626:23 | SelfParam | main.rs:627:9:627:24 | ExprStmt | |
-| main.rs:626:20:626:23 | self | main.rs:626:15:626:23 | SelfParam | |
-| main.rs:627:9:627:23 | return ... | main.rs:626:5:628:5 | exit fn my_get (normal) | return |
-| main.rs:627:9:627:24 | ExprStmt | main.rs:627:16:627:19 | self | |
-| main.rs:627:16:627:19 | self | main.rs:627:16:627:23 | self.val | |
-| main.rs:627:16:627:23 | self.val | main.rs:627:9:627:23 | return ... | |
-| main.rs:630:5:632:5 | enter fn id | main.rs:630:11:630:14 | self | |
-| main.rs:630:5:632:5 | exit fn id (normal) | main.rs:630:5:632:5 | exit fn id | |
-| main.rs:630:11:630:14 | SelfParam | main.rs:631:9:631:12 | self | |
-| main.rs:630:11:630:14 | self | main.rs:630:11:630:14 | SelfParam | |
-| main.rs:630:25:632:5 | { ... } | main.rs:630:5:632:5 | exit fn id (normal) | |
-| main.rs:631:9:631:12 | self | main.rs:630:25:632:5 | { ... } | |
-| main.rs:634:5:641:5 | enter fn my_method | main.rs:634:23:634:26 | self | |
-| main.rs:634:5:641:5 | exit fn my_method (normal) | main.rs:634:5:641:5 | exit fn my_method | |
-| main.rs:634:18:634:26 | SelfParam | main.rs:635:9:638:10 | let ... = ... | |
-| main.rs:634:23:634:26 | self | main.rs:634:18:634:26 | SelfParam | |
-| main.rs:634:29:641:5 | { ... } | main.rs:634:5:641:5 | exit fn my_method (normal) | |
-| main.rs:635:9:638:10 | let ... = ... | main.rs:635:21:638:9 | \|...\| ... | |
-| main.rs:635:13:635:17 | mut f | main.rs:639:9:639:13 | ExprStmt | match |
-| main.rs:635:17:635:17 | f | main.rs:635:13:635:17 | mut f | |
-| main.rs:635:21:638:9 | \|...\| ... | main.rs:635:17:635:17 | f | |
-| main.rs:635:21:638:9 | enter \|...\| ... | main.rs:635:22:635:22 | n | |
-| main.rs:635:21:638:9 | exit \|...\| ... (normal) | main.rs:635:21:638:9 | exit \|...\| ... | |
-| main.rs:635:22:635:22 | ... | main.rs:637:13:637:26 | ExprStmt | |
-| main.rs:635:22:635:22 | n | main.rs:635:22:635:22 | ... | match |
-| main.rs:635:22:635:22 | n | main.rs:635:22:635:22 | n | |
-| main.rs:635:25:638:9 | { ... } | main.rs:635:21:638:9 | exit \|...\| ... (normal) | |
-| main.rs:637:13:637:16 | self | main.rs:637:13:637:20 | self.val | |
-| main.rs:637:13:637:20 | self.val | main.rs:637:25:637:25 | n | |
-| main.rs:637:13:637:25 | ... += ... | main.rs:635:25:638:9 | { ... } | |
-| main.rs:637:13:637:26 | ExprStmt | main.rs:637:13:637:16 | self | |
-| main.rs:637:25:637:25 | n | main.rs:637:13:637:25 | ... += ... | |
-| main.rs:639:9:639:9 | f | main.rs:639:11:639:11 | 3 | |
-| main.rs:639:9:639:12 | f(...) | main.rs:640:9:640:13 | ExprStmt | |
-| main.rs:639:9:639:13 | ExprStmt | main.rs:639:9:639:9 | f | |
-| main.rs:639:11:639:11 | 3 | main.rs:639:9:639:12 | f(...) | |
-| main.rs:640:9:640:9 | f | main.rs:640:11:640:11 | 4 | |
-| main.rs:640:9:640:12 | f(...) | main.rs:634:29:641:5 | { ... } | |
-| main.rs:640:9:640:13 | ExprStmt | main.rs:640:9:640:9 | f | |
-| main.rs:640:11:640:11 | 4 | main.rs:640:9:640:12 | f(...) | |
-| main.rs:644:1:651:1 | enter fn structs | main.rs:645:5:645:36 | let ... = ... | |
-| main.rs:644:1:651:1 | exit fn structs (normal) | main.rs:644:1:651:1 | exit fn structs | |
-| main.rs:644:14:651:1 | { ... } | main.rs:644:1:651:1 | exit fn structs (normal) | |
-| main.rs:645:5:645:36 | let ... = ... | main.rs:645:33:645:33 | 1 | |
-| main.rs:645:9:645:13 | mut a | main.rs:646:5:646:26 | ExprStmt | match |
-| main.rs:645:13:645:13 | a | main.rs:645:9:645:13 | mut a | |
-| main.rs:645:17:645:35 | MyStruct {...} | main.rs:645:13:645:13 | a | |
-| main.rs:645:33:645:33 | 1 | main.rs:645:17:645:35 | MyStruct {...} | |
-| main.rs:646:5:646:13 | print_i64 | main.rs:646:15:646:15 | a | |
-| main.rs:646:5:646:25 | print_i64(...) | main.rs:647:5:647:14 | ExprStmt | |
-| main.rs:646:5:646:26 | ExprStmt | main.rs:646:5:646:13 | print_i64 | |
-| main.rs:646:15:646:15 | a | main.rs:646:15:646:24 | a.my_get() | |
-| main.rs:646:15:646:24 | a.my_get() | main.rs:646:5:646:25 | print_i64(...) | |
-| main.rs:647:5:647:5 | a | main.rs:647:5:647:9 | a.val | |
-| main.rs:647:5:647:9 | a.val | main.rs:647:13:647:13 | 5 | |
-| main.rs:647:5:647:13 | ... = ... | main.rs:648:5:648:26 | ExprStmt | |
-| main.rs:647:5:647:14 | ExprStmt | main.rs:647:5:647:5 | a | |
-| main.rs:647:13:647:13 | 5 | main.rs:647:5:647:13 | ... = ... | |
+| main.rs:618:12:620:5 | { ... } | main.rs:615:13:620:5 | if b2 {...} else {...} | |
+| main.rs:619:9:619:17 | print_i64 | main.rs:619:19:619:19 | x | |
+| main.rs:619:9:619:20 | print_i64(...) | main.rs:618:12:620:5 | { ... } | |
+| main.rs:619:9:619:21 | ExprStmt | main.rs:619:9:619:17 | print_i64 | |
+| main.rs:619:19:619:19 | x | main.rs:619:9:619:20 | print_i64(...) | |
+| main.rs:628:5:630:5 | enter fn my_get | main.rs:628:20:628:23 | self | |
+| main.rs:628:5:630:5 | exit fn my_get (normal) | main.rs:628:5:630:5 | exit fn my_get | |
+| main.rs:628:15:628:23 | SelfParam | main.rs:629:9:629:24 | ExprStmt | |
+| main.rs:628:20:628:23 | self | main.rs:628:15:628:23 | SelfParam | |
+| main.rs:629:9:629:23 | return ... | main.rs:628:5:630:5 | exit fn my_get (normal) | return |
+| main.rs:629:9:629:24 | ExprStmt | main.rs:629:16:629:19 | self | |
+| main.rs:629:16:629:19 | self | main.rs:629:16:629:23 | self.val | |
+| main.rs:629:16:629:23 | self.val | main.rs:629:9:629:23 | return ... | |
+| main.rs:632:5:634:5 | enter fn id | main.rs:632:11:632:14 | self | |
+| main.rs:632:5:634:5 | exit fn id (normal) | main.rs:632:5:634:5 | exit fn id | |
+| main.rs:632:11:632:14 | SelfParam | main.rs:633:9:633:12 | self | |
+| main.rs:632:11:632:14 | self | main.rs:632:11:632:14 | SelfParam | |
+| main.rs:632:25:634:5 | { ... } | main.rs:632:5:634:5 | exit fn id (normal) | |
+| main.rs:633:9:633:12 | self | main.rs:632:25:634:5 | { ... } | |
+| main.rs:636:5:643:5 | enter fn my_method | main.rs:636:23:636:26 | self | |
+| main.rs:636:5:643:5 | exit fn my_method (normal) | main.rs:636:5:643:5 | exit fn my_method | |
+| main.rs:636:18:636:26 | SelfParam | main.rs:637:9:640:10 | let ... = ... | |
+| main.rs:636:23:636:26 | self | main.rs:636:18:636:26 | SelfParam | |
+| main.rs:636:29:643:5 | { ... } | main.rs:636:5:643:5 | exit fn my_method (normal) | |
+| main.rs:637:9:640:10 | let ... = ... | main.rs:637:21:640:9 | \|...\| ... | |
+| main.rs:637:13:637:17 | mut f | main.rs:641:9:641:13 | ExprStmt | match |
+| main.rs:637:17:637:17 | f | main.rs:637:13:637:17 | mut f | |
+| main.rs:637:21:640:9 | \|...\| ... | main.rs:637:17:637:17 | f | |
+| main.rs:637:21:640:9 | enter \|...\| ... | main.rs:637:22:637:22 | n | |
+| main.rs:637:21:640:9 | exit \|...\| ... (normal) | main.rs:637:21:640:9 | exit \|...\| ... | |
+| main.rs:637:22:637:22 | ... | main.rs:639:13:639:26 | ExprStmt | |
+| main.rs:637:22:637:22 | n | main.rs:637:22:637:22 | ... | match |
+| main.rs:637:22:637:22 | n | main.rs:637:22:637:22 | n | |
+| main.rs:637:25:640:9 | { ... } | main.rs:637:21:640:9 | exit \|...\| ... (normal) | |
+| main.rs:639:13:639:16 | self | main.rs:639:13:639:20 | self.val | |
+| main.rs:639:13:639:20 | self.val | main.rs:639:25:639:25 | n | |
+| main.rs:639:13:639:25 | ... += ... | main.rs:637:25:640:9 | { ... } | |
+| main.rs:639:13:639:26 | ExprStmt | main.rs:639:13:639:16 | self | |
+| main.rs:639:25:639:25 | n | main.rs:639:13:639:25 | ... += ... | |
+| main.rs:641:9:641:9 | f | main.rs:641:11:641:11 | 3 | |
+| main.rs:641:9:641:12 | f(...) | main.rs:642:9:642:13 | ExprStmt | |
+| main.rs:641:9:641:13 | ExprStmt | main.rs:641:9:641:9 | f | |
+| main.rs:641:11:641:11 | 3 | main.rs:641:9:641:12 | f(...) | |
+| main.rs:642:9:642:9 | f | main.rs:642:11:642:11 | 4 | |
+| main.rs:642:9:642:12 | f(...) | main.rs:636:29:643:5 | { ... } | |
+| main.rs:642:9:642:13 | ExprStmt | main.rs:642:9:642:9 | f | |
+| main.rs:642:11:642:11 | 4 | main.rs:642:9:642:12 | f(...) | |
+| main.rs:646:1:653:1 | enter fn structs | main.rs:647:5:647:36 | let ... = ... | |
+| main.rs:646:1:653:1 | exit fn structs (normal) | main.rs:646:1:653:1 | exit fn structs | |
+| main.rs:646:14:653:1 | { ... } | main.rs:646:1:653:1 | exit fn structs (normal) | |
+| main.rs:647:5:647:36 | let ... = ... | main.rs:647:33:647:33 | 1 | |
+| main.rs:647:9:647:13 | mut a | main.rs:648:5:648:26 | ExprStmt | match |
+| main.rs:647:13:647:13 | a | main.rs:647:9:647:13 | mut a | |
+| main.rs:647:17:647:35 | MyStruct {...} | main.rs:647:13:647:13 | a | |
+| main.rs:647:33:647:33 | 1 | main.rs:647:17:647:35 | MyStruct {...} | |
| main.rs:648:5:648:13 | print_i64 | main.rs:648:15:648:15 | a | |
-| main.rs:648:5:648:25 | print_i64(...) | main.rs:649:5:649:28 | ExprStmt | |
+| main.rs:648:5:648:25 | print_i64(...) | main.rs:649:5:649:14 | ExprStmt | |
| main.rs:648:5:648:26 | ExprStmt | main.rs:648:5:648:13 | print_i64 | |
| main.rs:648:15:648:15 | a | main.rs:648:15:648:24 | a.my_get() | |
| main.rs:648:15:648:24 | a.my_get() | main.rs:648:5:648:25 | print_i64(...) | |
-| main.rs:649:5:649:5 | a | main.rs:649:25:649:25 | 2 | |
-| main.rs:649:5:649:27 | ... = ... | main.rs:650:5:650:26 | ExprStmt | |
-| main.rs:649:5:649:28 | ExprStmt | main.rs:649:5:649:5 | a | |
-| main.rs:649:9:649:27 | MyStruct {...} | main.rs:649:5:649:27 | ... = ... | |
-| main.rs:649:25:649:25 | 2 | main.rs:649:9:649:27 | MyStruct {...} | |
+| main.rs:649:5:649:5 | a | main.rs:649:5:649:9 | a.val | |
+| main.rs:649:5:649:9 | a.val | main.rs:649:13:649:13 | 5 | |
+| main.rs:649:5:649:13 | ... = ... | main.rs:650:5:650:26 | ExprStmt | |
+| main.rs:649:5:649:14 | ExprStmt | main.rs:649:5:649:5 | a | |
+| main.rs:649:13:649:13 | 5 | main.rs:649:5:649:13 | ... = ... | |
| main.rs:650:5:650:13 | print_i64 | main.rs:650:15:650:15 | a | |
-| main.rs:650:5:650:25 | print_i64(...) | main.rs:644:14:651:1 | { ... } | |
+| main.rs:650:5:650:25 | print_i64(...) | main.rs:651:5:651:28 | ExprStmt | |
| main.rs:650:5:650:26 | ExprStmt | main.rs:650:5:650:13 | print_i64 | |
| main.rs:650:15:650:15 | a | main.rs:650:15:650:24 | a.my_get() | |
| main.rs:650:15:650:24 | a.my_get() | main.rs:650:5:650:25 | print_i64(...) | |
-| main.rs:653:1:660:1 | enter fn arrays | main.rs:654:5:654:26 | let ... = ... | |
-| main.rs:653:1:660:1 | exit fn arrays (normal) | main.rs:653:1:660:1 | exit fn arrays | |
-| main.rs:653:13:660:1 | { ... } | main.rs:653:1:660:1 | exit fn arrays (normal) | |
-| main.rs:654:5:654:26 | let ... = ... | main.rs:654:18:654:18 | 1 | |
-| main.rs:654:9:654:13 | mut a | main.rs:655:5:655:20 | ExprStmt | match |
-| main.rs:654:13:654:13 | a | main.rs:654:9:654:13 | mut a | |
-| main.rs:654:17:654:25 | [...] | main.rs:654:13:654:13 | a | |
-| main.rs:654:18:654:18 | 1 | main.rs:654:21:654:21 | 2 | |
-| main.rs:654:21:654:21 | 2 | main.rs:654:24:654:24 | 3 | |
-| main.rs:654:24:654:24 | 3 | main.rs:654:17:654:25 | [...] | |
-| main.rs:655:5:655:13 | print_i64 | main.rs:655:15:655:15 | a | |
-| main.rs:655:5:655:19 | print_i64(...) | main.rs:656:5:656:13 | ExprStmt | |
-| main.rs:655:5:655:20 | ExprStmt | main.rs:655:5:655:13 | print_i64 | |
-| main.rs:655:15:655:15 | a | main.rs:655:17:655:17 | 0 | |
-| main.rs:655:15:655:18 | a[0] | main.rs:655:5:655:19 | print_i64(...) | |
-| main.rs:655:17:655:17 | 0 | main.rs:655:15:655:18 | a[0] | |
-| main.rs:656:5:656:5 | a | main.rs:656:7:656:7 | 1 | |
-| main.rs:656:5:656:8 | a[1] | main.rs:656:12:656:12 | 5 | |
-| main.rs:656:5:656:12 | ... = ... | main.rs:657:5:657:20 | ExprStmt | |
-| main.rs:656:5:656:13 | ExprStmt | main.rs:656:5:656:5 | a | |
-| main.rs:656:7:656:7 | 1 | main.rs:656:5:656:8 | a[1] | |
-| main.rs:656:12:656:12 | 5 | main.rs:656:5:656:12 | ... = ... | |
+| main.rs:651:5:651:5 | a | main.rs:651:25:651:25 | 2 | |
+| main.rs:651:5:651:27 | ... = ... | main.rs:652:5:652:26 | ExprStmt | |
+| main.rs:651:5:651:28 | ExprStmt | main.rs:651:5:651:5 | a | |
+| main.rs:651:9:651:27 | MyStruct {...} | main.rs:651:5:651:27 | ... = ... | |
+| main.rs:651:25:651:25 | 2 | main.rs:651:9:651:27 | MyStruct {...} | |
+| main.rs:652:5:652:13 | print_i64 | main.rs:652:15:652:15 | a | |
+| main.rs:652:5:652:25 | print_i64(...) | main.rs:646:14:653:1 | { ... } | |
+| main.rs:652:5:652:26 | ExprStmt | main.rs:652:5:652:13 | print_i64 | |
+| main.rs:652:15:652:15 | a | main.rs:652:15:652:24 | a.my_get() | |
+| main.rs:652:15:652:24 | a.my_get() | main.rs:652:5:652:25 | print_i64(...) | |
+| main.rs:655:1:662:1 | enter fn arrays | main.rs:656:5:656:26 | let ... = ... | |
+| main.rs:655:1:662:1 | exit fn arrays (normal) | main.rs:655:1:662:1 | exit fn arrays | |
+| main.rs:655:13:662:1 | { ... } | main.rs:655:1:662:1 | exit fn arrays (normal) | |
+| main.rs:656:5:656:26 | let ... = ... | main.rs:656:18:656:18 | 1 | |
+| main.rs:656:9:656:13 | mut a | main.rs:657:5:657:20 | ExprStmt | match |
+| main.rs:656:13:656:13 | a | main.rs:656:9:656:13 | mut a | |
+| main.rs:656:17:656:25 | [...] | main.rs:656:13:656:13 | a | |
+| main.rs:656:18:656:18 | 1 | main.rs:656:21:656:21 | 2 | |
+| main.rs:656:21:656:21 | 2 | main.rs:656:24:656:24 | 3 | |
+| main.rs:656:24:656:24 | 3 | main.rs:656:17:656:25 | [...] | |
| main.rs:657:5:657:13 | print_i64 | main.rs:657:15:657:15 | a | |
-| main.rs:657:5:657:19 | print_i64(...) | main.rs:658:5:658:18 | ExprStmt | |
+| main.rs:657:5:657:19 | print_i64(...) | main.rs:658:5:658:13 | ExprStmt | |
| main.rs:657:5:657:20 | ExprStmt | main.rs:657:5:657:13 | print_i64 | |
-| main.rs:657:15:657:15 | a | main.rs:657:17:657:17 | 1 | |
-| main.rs:657:15:657:18 | a[1] | main.rs:657:5:657:19 | print_i64(...) | |
-| main.rs:657:17:657:17 | 1 | main.rs:657:15:657:18 | a[1] | |
-| main.rs:658:5:658:5 | a | main.rs:658:10:658:10 | 4 | |
-| main.rs:658:5:658:17 | ... = ... | main.rs:659:5:659:20 | ExprStmt | |
-| main.rs:658:5:658:18 | ExprStmt | main.rs:658:5:658:5 | a | |
-| main.rs:658:9:658:17 | [...] | main.rs:658:5:658:17 | ... = ... | |
-| main.rs:658:10:658:10 | 4 | main.rs:658:13:658:13 | 5 | |
-| main.rs:658:13:658:13 | 5 | main.rs:658:16:658:16 | 6 | |
-| main.rs:658:16:658:16 | 6 | main.rs:658:9:658:17 | [...] | |
+| main.rs:657:15:657:15 | a | main.rs:657:17:657:17 | 0 | |
+| main.rs:657:15:657:18 | a[0] | main.rs:657:5:657:19 | print_i64(...) | |
+| main.rs:657:17:657:17 | 0 | main.rs:657:15:657:18 | a[0] | |
+| main.rs:658:5:658:5 | a | main.rs:658:7:658:7 | 1 | |
+| main.rs:658:5:658:8 | a[1] | main.rs:658:12:658:12 | 5 | |
+| main.rs:658:5:658:12 | ... = ... | main.rs:659:5:659:20 | ExprStmt | |
+| main.rs:658:5:658:13 | ExprStmt | main.rs:658:5:658:5 | a | |
+| main.rs:658:7:658:7 | 1 | main.rs:658:5:658:8 | a[1] | |
+| main.rs:658:12:658:12 | 5 | main.rs:658:5:658:12 | ... = ... | |
| main.rs:659:5:659:13 | print_i64 | main.rs:659:15:659:15 | a | |
-| main.rs:659:5:659:19 | print_i64(...) | main.rs:653:13:660:1 | { ... } | |
+| main.rs:659:5:659:19 | print_i64(...) | main.rs:660:5:660:18 | ExprStmt | |
| main.rs:659:5:659:20 | ExprStmt | main.rs:659:5:659:13 | print_i64 | |
-| main.rs:659:15:659:15 | a | main.rs:659:17:659:17 | 2 | |
-| main.rs:659:15:659:18 | a[2] | main.rs:659:5:659:19 | print_i64(...) | |
-| main.rs:659:17:659:17 | 2 | main.rs:659:15:659:18 | a[2] | |
-| main.rs:662:1:669:1 | enter fn ref_arg | main.rs:663:5:663:15 | let ... = 16 | |
-| main.rs:662:1:669:1 | exit fn ref_arg (normal) | main.rs:662:1:669:1 | exit fn ref_arg | |
-| main.rs:662:14:669:1 | { ... } | main.rs:662:1:669:1 | exit fn ref_arg (normal) | |
-| main.rs:663:5:663:15 | let ... = 16 | main.rs:663:13:663:14 | 16 | |
-| main.rs:663:9:663:9 | x | main.rs:663:9:663:9 | x | |
-| main.rs:663:9:663:9 | x | main.rs:664:5:664:22 | ExprStmt | match |
-| main.rs:663:13:663:14 | 16 | main.rs:663:9:663:9 | x | |
-| main.rs:664:5:664:17 | print_i64_ref | main.rs:664:20:664:20 | x | |
-| main.rs:664:5:664:21 | print_i64_ref(...) | main.rs:665:5:665:17 | ExprStmt | |
-| main.rs:664:5:664:22 | ExprStmt | main.rs:664:5:664:17 | print_i64_ref | |
-| main.rs:664:19:664:20 | &x | main.rs:664:5:664:21 | print_i64_ref(...) | |
-| main.rs:664:20:664:20 | x | main.rs:664:19:664:20 | &x | |
-| main.rs:665:5:665:13 | print_i64 | main.rs:665:15:665:15 | x | |
-| main.rs:665:5:665:16 | print_i64(...) | main.rs:667:5:667:15 | let ... = 17 | |
-| main.rs:665:5:665:17 | ExprStmt | main.rs:665:5:665:13 | print_i64 | |
-| main.rs:665:15:665:15 | x | main.rs:665:5:665:16 | print_i64(...) | |
-| main.rs:667:5:667:15 | let ... = 17 | main.rs:667:13:667:14 | 17 | |
-| main.rs:667:9:667:9 | z | main.rs:667:9:667:9 | z | |
-| main.rs:667:9:667:9 | z | main.rs:668:5:668:22 | ExprStmt | match |
-| main.rs:667:13:667:14 | 17 | main.rs:667:9:667:9 | z | |
-| main.rs:668:5:668:17 | print_i64_ref | main.rs:668:20:668:20 | z | |
-| main.rs:668:5:668:21 | print_i64_ref(...) | main.rs:662:14:669:1 | { ... } | |
-| main.rs:668:5:668:22 | ExprStmt | main.rs:668:5:668:17 | print_i64_ref | |
-| main.rs:668:19:668:20 | &z | main.rs:668:5:668:21 | print_i64_ref(...) | |
-| main.rs:668:20:668:20 | z | main.rs:668:19:668:20 | &z | |
-| main.rs:676:5:678:5 | enter fn bar | main.rs:676:17:676:20 | self | |
-| main.rs:676:5:678:5 | exit fn bar (normal) | main.rs:676:5:678:5 | exit fn bar | |
-| main.rs:676:12:676:20 | SelfParam | main.rs:677:9:677:36 | ExprStmt | |
-| main.rs:676:17:676:20 | self | main.rs:676:12:676:20 | SelfParam | |
-| main.rs:676:23:678:5 | { ... } | main.rs:676:5:678:5 | exit fn bar (normal) | |
-| main.rs:677:9:677:13 | * ... | main.rs:677:33:677:33 | 3 | |
-| main.rs:677:9:677:35 | ... = ... | main.rs:676:23:678:5 | { ... } | |
-| main.rs:677:9:677:36 | ExprStmt | main.rs:677:10:677:13 | self | |
-| main.rs:677:10:677:13 | self | main.rs:677:9:677:13 | * ... | |
-| main.rs:677:17:677:35 | MyStruct {...} | main.rs:677:9:677:35 | ... = ... | |
-| main.rs:677:33:677:33 | 3 | main.rs:677:17:677:35 | MyStruct {...} | |
-| main.rs:681:1:687:1 | enter fn ref_methodcall_receiver | main.rs:682:5:682:36 | let ... = ... | |
-| main.rs:681:1:687:1 | exit fn ref_methodcall_receiver (normal) | main.rs:681:1:687:1 | exit fn ref_methodcall_receiver | |
-| main.rs:681:30:687:1 | { ... } | main.rs:681:1:687:1 | exit fn ref_methodcall_receiver (normal) | |
-| main.rs:682:5:682:36 | let ... = ... | main.rs:682:33:682:33 | 1 | |
-| main.rs:682:9:682:13 | mut a | main.rs:683:5:683:12 | ExprStmt | match |
-| main.rs:682:13:682:13 | a | main.rs:682:9:682:13 | mut a | |
-| main.rs:682:17:682:35 | MyStruct {...} | main.rs:682:13:682:13 | a | |
-| main.rs:682:33:682:33 | 1 | main.rs:682:17:682:35 | MyStruct {...} | |
-| main.rs:683:5:683:5 | a | main.rs:683:5:683:11 | a.bar() | |
-| main.rs:683:5:683:11 | a.bar() | main.rs:686:5:686:21 | ExprStmt | |
-| main.rs:683:5:683:12 | ExprStmt | main.rs:683:5:683:5 | a | |
-| main.rs:686:5:686:13 | print_i64 | main.rs:686:15:686:15 | a | |
-| main.rs:686:5:686:20 | print_i64(...) | main.rs:681:30:687:1 | { ... } | |
-| main.rs:686:5:686:21 | ExprStmt | main.rs:686:5:686:13 | print_i64 | |
-| main.rs:686:15:686:15 | a | main.rs:686:15:686:19 | a.val | |
-| main.rs:686:15:686:19 | a.val | main.rs:686:5:686:20 | print_i64(...) | |
-| main.rs:703:1:714:1 | enter fn macro_invocation | main.rs:704:5:705:26 | let ... = ... | |
-| main.rs:703:1:714:1 | exit fn macro_invocation (normal) | main.rs:703:1:714:1 | exit fn macro_invocation | |
-| main.rs:703:23:714:1 | { ... } | main.rs:703:1:714:1 | exit fn macro_invocation (normal) | |
-| main.rs:704:5:705:26 | let ... = ... | main.rs:705:23:705:24 | let ... = 37 | |
-| main.rs:704:9:704:22 | var_from_macro | main.rs:704:9:704:22 | var_from_macro | |
-| main.rs:704:9:704:22 | var_from_macro | main.rs:706:5:706:30 | ExprStmt | match |
-| main.rs:705:9:705:21 | var_in_macro | main.rs:705:9:705:21 | var_in_macro | |
-| main.rs:705:9:705:21 | var_in_macro | main.rs:705:9:705:21 | var_in_macro | match |
-| main.rs:705:9:705:21 | var_in_macro | main.rs:705:23:705:24 | { ... } | |
-| main.rs:705:9:705:25 | MacroExpr | main.rs:704:9:704:22 | var_from_macro | |
-| main.rs:705:9:705:25 | let_in_macro!... | main.rs:705:9:705:25 | MacroExpr | |
-| main.rs:705:23:705:24 | 37 | main.rs:705:9:705:21 | var_in_macro | |
-| main.rs:705:23:705:24 | let ... = 37 | main.rs:705:23:705:24 | 37 | |
-| main.rs:705:23:705:24 | { ... } | main.rs:705:9:705:25 | let_in_macro!... | |
-| main.rs:706:5:706:13 | print_i64 | main.rs:706:15:706:28 | var_from_macro | |
-| main.rs:706:5:706:29 | print_i64(...) | main.rs:707:5:707:26 | let ... = 33 | |
-| main.rs:706:5:706:30 | ExprStmt | main.rs:706:5:706:13 | print_i64 | |
-| main.rs:706:15:706:28 | var_from_macro | main.rs:706:5:706:29 | print_i64(...) | |
-| main.rs:707:5:707:26 | let ... = 33 | main.rs:707:24:707:25 | 33 | |
-| main.rs:707:9:707:20 | var_in_macro | main.rs:707:9:707:20 | var_in_macro | |
-| main.rs:707:9:707:20 | var_in_macro | main.rs:712:5:712:44 | ExprStmt | match |
-| main.rs:707:24:707:25 | 33 | main.rs:707:9:707:20 | var_in_macro | |
-| main.rs:712:5:712:13 | print_i64 | main.rs:712:15:712:28 | let ... = 0 | |
-| main.rs:712:5:712:43 | print_i64(...) | main.rs:713:5:713:28 | ExprStmt | |
-| main.rs:712:5:712:44 | ExprStmt | main.rs:712:5:712:13 | print_i64 | |
-| main.rs:712:15:712:28 | 0 | main.rs:712:15:712:28 | var_in_macro | |
-| main.rs:712:15:712:28 | let ... = 0 | main.rs:712:15:712:28 | 0 | |
-| main.rs:712:15:712:28 | var_in_macro | main.rs:712:15:712:28 | var_in_macro | |
-| main.rs:712:15:712:28 | var_in_macro | main.rs:712:30:712:41 | var_in_macro | match |
-| main.rs:712:15:712:42 | MacroExpr | main.rs:712:5:712:43 | print_i64(...) | |
-| main.rs:712:15:712:42 | let_in_macro2!... | main.rs:712:15:712:42 | MacroExpr | |
-| main.rs:712:30:712:41 | var_in_macro | main.rs:712:30:712:41 | { ... } | |
-| main.rs:712:30:712:41 | { ... } | main.rs:712:15:712:42 | let_in_macro2!... | |
-| main.rs:713:5:713:13 | print_i64 | main.rs:713:15:713:26 | var_in_macro | |
-| main.rs:713:5:713:27 | print_i64(...) | main.rs:703:23:714:1 | { ... } | |
-| main.rs:713:5:713:28 | ExprStmt | main.rs:713:5:713:13 | print_i64 | |
-| main.rs:713:15:713:26 | var_in_macro | main.rs:713:5:713:27 | print_i64(...) | |
-| main.rs:716:1:720:1 | enter fn let_without_initializer | main.rs:717:5:717:10 | let ... | |
-| main.rs:716:1:720:1 | exit fn let_without_initializer (normal) | main.rs:716:1:720:1 | exit fn let_without_initializer | |
-| main.rs:716:30:720:1 | { ... } | main.rs:716:1:720:1 | exit fn let_without_initializer (normal) | |
-| main.rs:717:5:717:10 | let ... | main.rs:717:9:717:9 | x | |
-| main.rs:717:9:717:9 | x | main.rs:717:9:717:9 | x | |
-| main.rs:717:9:717:9 | x | main.rs:718:5:718:10 | ExprStmt | match |
-| main.rs:718:5:718:5 | x | main.rs:718:9:718:9 | 1 | |
-| main.rs:718:5:718:9 | ... = ... | main.rs:719:5:719:17 | ExprStmt | |
-| main.rs:718:5:718:10 | ExprStmt | main.rs:718:5:718:5 | x | |
-| main.rs:718:9:718:9 | 1 | main.rs:718:5:718:9 | ... = ... | |
-| main.rs:719:5:719:13 | print_i64 | main.rs:719:15:719:15 | x | |
-| main.rs:719:5:719:16 | print_i64(...) | main.rs:716:30:720:1 | { ... } | |
-| main.rs:719:5:719:17 | ExprStmt | main.rs:719:5:719:13 | print_i64 | |
-| main.rs:719:15:719:15 | x | main.rs:719:5:719:16 | print_i64(...) | |
-| main.rs:722:1:732:1 | enter fn capture_phi | main.rs:723:5:723:20 | let ... = 100 | |
-| main.rs:722:1:732:1 | exit fn capture_phi (normal) | main.rs:722:1:732:1 | exit fn capture_phi | |
-| main.rs:722:18:732:1 | { ... } | main.rs:722:1:732:1 | exit fn capture_phi (normal) | |
-| main.rs:723:5:723:20 | let ... = 100 | main.rs:723:17:723:19 | 100 | |
-| main.rs:723:9:723:13 | mut x | main.rs:724:5:729:6 | let ... = ... | match |
-| main.rs:723:13:723:13 | x | main.rs:723:9:723:13 | mut x | |
-| main.rs:723:17:723:19 | 100 | main.rs:723:13:723:13 | x | |
-| main.rs:724:5:729:6 | let ... = ... | main.rs:724:19:729:5 | \|...\| ... | |
-| main.rs:724:9:724:15 | mut cap | main.rs:730:5:730:14 | ExprStmt | match |
-| main.rs:724:13:724:15 | cap | main.rs:724:9:724:15 | mut cap | |
-| main.rs:724:19:729:5 | \|...\| ... | main.rs:724:13:724:15 | cap | |
-| main.rs:724:19:729:5 | enter \|...\| ... | main.rs:724:20:724:20 | b | |
-| main.rs:724:19:729:5 | exit \|...\| ... (normal) | main.rs:724:19:729:5 | exit \|...\| ... | |
-| main.rs:724:20:724:20 | b | main.rs:724:20:724:20 | b | |
-| main.rs:724:20:724:20 | b | main.rs:724:20:724:26 | ...: bool | match |
-| main.rs:724:20:724:26 | ...: bool | main.rs:725:9:728:10 | let _ = ... | |
-| main.rs:724:29:729:5 | { ... } | main.rs:724:19:729:5 | exit \|...\| ... (normal) | |
-| main.rs:725:9:728:10 | let _ = ... | main.rs:726:20:726:20 | b | |
-| main.rs:726:13:726:13 | _ | main.rs:724:29:729:5 | { ... } | match |
-| main.rs:726:17:728:9 | if b {...} | main.rs:726:13:726:13 | _ | |
-| main.rs:726:20:726:20 | b | main.rs:726:17:728:9 | if b {...} | false |
-| main.rs:726:20:726:20 | b | main.rs:727:13:727:20 | ExprStmt | true |
-| main.rs:726:22:728:9 | { ... } | main.rs:726:17:728:9 | if b {...} | |
-| main.rs:727:13:727:13 | x | main.rs:727:17:727:19 | 200 | |
-| main.rs:727:13:727:19 | ... = ... | main.rs:726:22:728:9 | { ... } | |
-| main.rs:727:13:727:20 | ExprStmt | main.rs:727:13:727:13 | x | |
-| main.rs:727:17:727:19 | 200 | main.rs:727:13:727:19 | ... = ... | |
-| main.rs:730:5:730:7 | cap | main.rs:730:9:730:12 | true | |
-| main.rs:730:5:730:13 | cap(...) | main.rs:731:5:731:17 | ExprStmt | |
-| main.rs:730:5:730:14 | ExprStmt | main.rs:730:5:730:7 | cap | |
-| main.rs:730:9:730:12 | true | main.rs:730:5:730:13 | cap(...) | |
-| main.rs:731:5:731:13 | print_i64 | main.rs:731:15:731:15 | x | |
-| main.rs:731:5:731:16 | print_i64(...) | main.rs:722:18:732:1 | { ... } | |
-| main.rs:731:5:731:17 | ExprStmt | main.rs:731:5:731:13 | print_i64 | |
-| main.rs:731:15:731:15 | x | main.rs:731:5:731:16 | print_i64(...) | |
-| main.rs:734:1:776:1 | enter fn main | main.rs:735:5:735:25 | ExprStmt | |
-| main.rs:734:1:776:1 | exit fn main (normal) | main.rs:734:1:776:1 | exit fn main | |
-| main.rs:734:11:776:1 | { ... } | main.rs:734:1:776:1 | exit fn main (normal) | |
-| main.rs:735:5:735:22 | immutable_variable | main.rs:735:5:735:24 | immutable_variable(...) | |
-| main.rs:735:5:735:24 | immutable_variable(...) | main.rs:736:5:736:23 | ExprStmt | |
-| main.rs:735:5:735:25 | ExprStmt | main.rs:735:5:735:22 | immutable_variable | |
-| main.rs:736:5:736:20 | mutable_variable | main.rs:736:5:736:22 | mutable_variable(...) | |
-| main.rs:736:5:736:22 | mutable_variable(...) | main.rs:737:5:737:40 | ExprStmt | |
-| main.rs:736:5:736:23 | ExprStmt | main.rs:736:5:736:20 | mutable_variable | |
-| main.rs:737:5:737:37 | mutable_variable_immutable_borrow | main.rs:737:5:737:39 | mutable_variable_immutable_borrow(...) | |
-| main.rs:737:5:737:39 | mutable_variable_immutable_borrow(...) | main.rs:738:5:738:23 | ExprStmt | |
-| main.rs:737:5:737:40 | ExprStmt | main.rs:737:5:737:37 | mutable_variable_immutable_borrow | |
-| main.rs:738:5:738:20 | variable_shadow1 | main.rs:738:5:738:22 | variable_shadow1(...) | |
-| main.rs:738:5:738:22 | variable_shadow1(...) | main.rs:739:5:739:23 | ExprStmt | |
-| main.rs:738:5:738:23 | ExprStmt | main.rs:738:5:738:20 | variable_shadow1 | |
-| main.rs:739:5:739:20 | variable_shadow2 | main.rs:739:5:739:22 | variable_shadow2(...) | |
-| main.rs:739:5:739:22 | variable_shadow2(...) | main.rs:740:5:740:19 | ExprStmt | |
-| main.rs:739:5:739:23 | ExprStmt | main.rs:739:5:739:20 | variable_shadow2 | |
-| main.rs:740:5:740:16 | let_pattern1 | main.rs:740:5:740:18 | let_pattern1(...) | |
-| main.rs:740:5:740:18 | let_pattern1(...) | main.rs:741:5:741:19 | ExprStmt | |
-| main.rs:740:5:740:19 | ExprStmt | main.rs:740:5:740:16 | let_pattern1 | |
-| main.rs:741:5:741:16 | let_pattern2 | main.rs:741:5:741:18 | let_pattern2(...) | |
-| main.rs:741:5:741:18 | let_pattern2(...) | main.rs:742:5:742:19 | ExprStmt | |
-| main.rs:741:5:741:19 | ExprStmt | main.rs:741:5:741:16 | let_pattern2 | |
-| main.rs:742:5:742:16 | let_pattern3 | main.rs:742:5:742:18 | let_pattern3(...) | |
-| main.rs:742:5:742:18 | let_pattern3(...) | main.rs:743:5:743:19 | ExprStmt | |
-| main.rs:742:5:742:19 | ExprStmt | main.rs:742:5:742:16 | let_pattern3 | |
-| main.rs:743:5:743:16 | let_pattern4 | main.rs:743:5:743:18 | let_pattern4(...) | |
-| main.rs:743:5:743:18 | let_pattern4(...) | main.rs:744:5:744:21 | ExprStmt | |
-| main.rs:743:5:743:19 | ExprStmt | main.rs:743:5:743:16 | let_pattern4 | |
-| main.rs:744:5:744:18 | match_pattern1 | main.rs:744:5:744:20 | match_pattern1(...) | |
-| main.rs:744:5:744:20 | match_pattern1(...) | main.rs:745:5:745:21 | ExprStmt | |
-| main.rs:744:5:744:21 | ExprStmt | main.rs:744:5:744:18 | match_pattern1 | |
-| main.rs:745:5:745:18 | match_pattern2 | main.rs:745:5:745:20 | match_pattern2(...) | |
-| main.rs:745:5:745:20 | match_pattern2(...) | main.rs:746:5:746:21 | ExprStmt | |
-| main.rs:745:5:745:21 | ExprStmt | main.rs:745:5:745:18 | match_pattern2 | |
-| main.rs:746:5:746:18 | match_pattern3 | main.rs:746:5:746:20 | match_pattern3(...) | |
-| main.rs:746:5:746:20 | match_pattern3(...) | main.rs:747:5:747:21 | ExprStmt | |
-| main.rs:746:5:746:21 | ExprStmt | main.rs:746:5:746:18 | match_pattern3 | |
-| main.rs:747:5:747:18 | match_pattern4 | main.rs:747:5:747:20 | match_pattern4(...) | |
-| main.rs:747:5:747:20 | match_pattern4(...) | main.rs:748:5:748:21 | ExprStmt | |
-| main.rs:747:5:747:21 | ExprStmt | main.rs:747:5:747:18 | match_pattern4 | |
-| main.rs:748:5:748:18 | match_pattern5 | main.rs:748:5:748:20 | match_pattern5(...) | |
-| main.rs:748:5:748:20 | match_pattern5(...) | main.rs:749:5:749:21 | ExprStmt | |
-| main.rs:748:5:748:21 | ExprStmt | main.rs:748:5:748:18 | match_pattern5 | |
-| main.rs:749:5:749:18 | match_pattern6 | main.rs:749:5:749:20 | match_pattern6(...) | |
-| main.rs:749:5:749:20 | match_pattern6(...) | main.rs:750:5:750:21 | ExprStmt | |
-| main.rs:749:5:749:21 | ExprStmt | main.rs:749:5:749:18 | match_pattern6 | |
-| main.rs:750:5:750:18 | match_pattern7 | main.rs:750:5:750:20 | match_pattern7(...) | |
-| main.rs:750:5:750:20 | match_pattern7(...) | main.rs:751:5:751:21 | ExprStmt | |
-| main.rs:750:5:750:21 | ExprStmt | main.rs:750:5:750:18 | match_pattern7 | |
-| main.rs:751:5:751:18 | match_pattern8 | main.rs:751:5:751:20 | match_pattern8(...) | |
-| main.rs:751:5:751:20 | match_pattern8(...) | main.rs:752:5:752:21 | ExprStmt | |
-| main.rs:751:5:751:21 | ExprStmt | main.rs:751:5:751:18 | match_pattern8 | |
-| main.rs:752:5:752:18 | match_pattern9 | main.rs:752:5:752:20 | match_pattern9(...) | |
-| main.rs:752:5:752:20 | match_pattern9(...) | main.rs:753:5:753:22 | ExprStmt | |
-| main.rs:752:5:752:21 | ExprStmt | main.rs:752:5:752:18 | match_pattern9 | |
-| main.rs:753:5:753:19 | match_pattern10 | main.rs:753:5:753:21 | match_pattern10(...) | |
-| main.rs:753:5:753:21 | match_pattern10(...) | main.rs:754:5:754:22 | ExprStmt | |
-| main.rs:753:5:753:22 | ExprStmt | main.rs:753:5:753:19 | match_pattern10 | |
-| main.rs:754:5:754:19 | match_pattern11 | main.rs:754:5:754:21 | match_pattern11(...) | |
-| main.rs:754:5:754:21 | match_pattern11(...) | main.rs:755:5:755:22 | ExprStmt | |
-| main.rs:754:5:754:22 | ExprStmt | main.rs:754:5:754:19 | match_pattern11 | |
-| main.rs:755:5:755:19 | match_pattern12 | main.rs:755:5:755:21 | match_pattern12(...) | |
-| main.rs:755:5:755:21 | match_pattern12(...) | main.rs:756:5:756:22 | ExprStmt | |
-| main.rs:755:5:755:22 | ExprStmt | main.rs:755:5:755:19 | match_pattern12 | |
-| main.rs:756:5:756:19 | match_pattern13 | main.rs:756:5:756:21 | match_pattern13(...) | |
-| main.rs:756:5:756:21 | match_pattern13(...) | main.rs:757:5:757:22 | ExprStmt | |
-| main.rs:756:5:756:22 | ExprStmt | main.rs:756:5:756:19 | match_pattern13 | |
-| main.rs:757:5:757:19 | match_pattern14 | main.rs:757:5:757:21 | match_pattern14(...) | |
-| main.rs:757:5:757:21 | match_pattern14(...) | main.rs:758:5:758:36 | ExprStmt | |
-| main.rs:757:5:757:22 | ExprStmt | main.rs:757:5:757:19 | match_pattern14 | |
-| main.rs:758:5:758:18 | param_pattern1 | main.rs:758:20:758:22 | "a" | |
-| main.rs:758:5:758:35 | param_pattern1(...) | main.rs:759:5:759:37 | ExprStmt | |
-| main.rs:758:5:758:36 | ExprStmt | main.rs:758:5:758:18 | param_pattern1 | |
-| main.rs:758:20:758:22 | "a" | main.rs:758:26:758:28 | "b" | |
-| main.rs:758:25:758:34 | TupleExpr | main.rs:758:5:758:35 | param_pattern1(...) | |
-| main.rs:758:26:758:28 | "b" | main.rs:758:31:758:33 | "c" | |
-| main.rs:758:31:758:33 | "c" | main.rs:758:25:758:34 | TupleExpr | |
-| main.rs:759:5:759:18 | param_pattern2 | main.rs:759:20:759:31 | ...::Left | |
-| main.rs:759:5:759:36 | param_pattern2(...) | main.rs:760:5:760:26 | ExprStmt | |
-| main.rs:759:5:759:37 | ExprStmt | main.rs:759:5:759:18 | param_pattern2 | |
-| main.rs:759:20:759:31 | ...::Left | main.rs:759:33:759:34 | 45 | |
-| main.rs:759:20:759:35 | ...::Left(...) | main.rs:759:5:759:36 | param_pattern2(...) | |
-| main.rs:759:33:759:34 | 45 | main.rs:759:20:759:35 | ...::Left(...) | |
-| main.rs:760:5:760:23 | destruct_assignment | main.rs:760:5:760:25 | destruct_assignment(...) | |
-| main.rs:760:5:760:25 | destruct_assignment(...) | main.rs:761:5:761:23 | ExprStmt | |
-| main.rs:760:5:760:26 | ExprStmt | main.rs:760:5:760:23 | destruct_assignment | |
-| main.rs:761:5:761:20 | closure_variable | main.rs:761:5:761:22 | closure_variable(...) | |
-| main.rs:761:5:761:22 | closure_variable(...) | main.rs:762:5:762:22 | ExprStmt | |
-| main.rs:761:5:761:23 | ExprStmt | main.rs:761:5:761:20 | closure_variable | |
-| main.rs:762:5:762:19 | nested_function | main.rs:762:5:762:21 | nested_function(...) | |
-| main.rs:762:5:762:21 | nested_function(...) | main.rs:763:5:763:19 | ExprStmt | |
-| main.rs:762:5:762:22 | ExprStmt | main.rs:762:5:762:19 | nested_function | |
-| main.rs:763:5:763:16 | for_variable | main.rs:763:5:763:18 | for_variable(...) | |
-| main.rs:763:5:763:18 | for_variable(...) | main.rs:764:5:764:17 | ExprStmt | |
-| main.rs:763:5:763:19 | ExprStmt | main.rs:763:5:763:16 | for_variable | |
-| main.rs:764:5:764:14 | add_assign | main.rs:764:5:764:16 | add_assign(...) | |
-| main.rs:764:5:764:16 | add_assign(...) | main.rs:765:5:765:13 | ExprStmt | |
-| main.rs:764:5:764:17 | ExprStmt | main.rs:764:5:764:14 | add_assign | |
-| main.rs:765:5:765:10 | mutate | main.rs:765:5:765:12 | mutate(...) | |
-| main.rs:765:5:765:12 | mutate(...) | main.rs:766:5:766:17 | ExprStmt | |
-| main.rs:765:5:765:13 | ExprStmt | main.rs:765:5:765:10 | mutate | |
-| main.rs:766:5:766:14 | mutate_arg | main.rs:766:5:766:16 | mutate_arg(...) | |
-| main.rs:766:5:766:16 | mutate_arg(...) | main.rs:767:5:767:12 | ExprStmt | |
-| main.rs:766:5:766:17 | ExprStmt | main.rs:766:5:766:14 | mutate_arg | |
-| main.rs:767:5:767:9 | alias | main.rs:767:5:767:11 | alias(...) | |
-| main.rs:767:5:767:11 | alias(...) | main.rs:768:5:768:18 | ExprStmt | |
-| main.rs:767:5:767:12 | ExprStmt | main.rs:767:5:767:9 | alias | |
-| main.rs:768:5:768:15 | capture_mut | main.rs:768:5:768:17 | capture_mut(...) | |
-| main.rs:768:5:768:17 | capture_mut(...) | main.rs:769:5:769:20 | ExprStmt | |
-| main.rs:768:5:768:18 | ExprStmt | main.rs:768:5:768:15 | capture_mut | |
-| main.rs:769:5:769:17 | capture_immut | main.rs:769:5:769:19 | capture_immut(...) | |
-| main.rs:769:5:769:19 | capture_immut(...) | main.rs:770:5:770:26 | ExprStmt | |
-| main.rs:769:5:769:20 | ExprStmt | main.rs:769:5:769:17 | capture_immut | |
-| main.rs:770:5:770:23 | async_block_capture | main.rs:770:5:770:25 | async_block_capture(...) | |
-| main.rs:770:5:770:25 | async_block_capture(...) | main.rs:771:5:771:14 | ExprStmt | |
-| main.rs:770:5:770:26 | ExprStmt | main.rs:770:5:770:23 | async_block_capture | |
-| main.rs:771:5:771:11 | structs | main.rs:771:5:771:13 | structs(...) | |
-| main.rs:771:5:771:13 | structs(...) | main.rs:772:5:772:14 | ExprStmt | |
-| main.rs:771:5:771:14 | ExprStmt | main.rs:771:5:771:11 | structs | |
-| main.rs:772:5:772:11 | ref_arg | main.rs:772:5:772:13 | ref_arg(...) | |
-| main.rs:772:5:772:13 | ref_arg(...) | main.rs:773:5:773:30 | ExprStmt | |
-| main.rs:772:5:772:14 | ExprStmt | main.rs:772:5:772:11 | ref_arg | |
-| main.rs:773:5:773:27 | ref_methodcall_receiver | main.rs:773:5:773:29 | ref_methodcall_receiver(...) | |
-| main.rs:773:5:773:29 | ref_methodcall_receiver(...) | main.rs:774:5:774:23 | ExprStmt | |
-| main.rs:773:5:773:30 | ExprStmt | main.rs:773:5:773:27 | ref_methodcall_receiver | |
-| main.rs:774:5:774:20 | macro_invocation | main.rs:774:5:774:22 | macro_invocation(...) | |
-| main.rs:774:5:774:22 | macro_invocation(...) | main.rs:775:5:775:18 | ExprStmt | |
-| main.rs:774:5:774:23 | ExprStmt | main.rs:774:5:774:20 | macro_invocation | |
-| main.rs:775:5:775:15 | capture_phi | main.rs:775:5:775:17 | capture_phi(...) | |
-| main.rs:775:5:775:17 | capture_phi(...) | main.rs:734:11:776:1 | { ... } | |
-| main.rs:775:5:775:18 | ExprStmt | main.rs:775:5:775:15 | capture_phi | |
+| main.rs:659:15:659:15 | a | main.rs:659:17:659:17 | 1 | |
+| main.rs:659:15:659:18 | a[1] | main.rs:659:5:659:19 | print_i64(...) | |
+| main.rs:659:17:659:17 | 1 | main.rs:659:15:659:18 | a[1] | |
+| main.rs:660:5:660:5 | a | main.rs:660:10:660:10 | 4 | |
+| main.rs:660:5:660:17 | ... = ... | main.rs:661:5:661:20 | ExprStmt | |
+| main.rs:660:5:660:18 | ExprStmt | main.rs:660:5:660:5 | a | |
+| main.rs:660:9:660:17 | [...] | main.rs:660:5:660:17 | ... = ... | |
+| main.rs:660:10:660:10 | 4 | main.rs:660:13:660:13 | 5 | |
+| main.rs:660:13:660:13 | 5 | main.rs:660:16:660:16 | 6 | |
+| main.rs:660:16:660:16 | 6 | main.rs:660:9:660:17 | [...] | |
+| main.rs:661:5:661:13 | print_i64 | main.rs:661:15:661:15 | a | |
+| main.rs:661:5:661:19 | print_i64(...) | main.rs:655:13:662:1 | { ... } | |
+| main.rs:661:5:661:20 | ExprStmt | main.rs:661:5:661:13 | print_i64 | |
+| main.rs:661:15:661:15 | a | main.rs:661:17:661:17 | 2 | |
+| main.rs:661:15:661:18 | a[2] | main.rs:661:5:661:19 | print_i64(...) | |
+| main.rs:661:17:661:17 | 2 | main.rs:661:15:661:18 | a[2] | |
+| main.rs:664:1:671:1 | enter fn ref_arg | main.rs:665:5:665:15 | let ... = 16 | |
+| main.rs:664:1:671:1 | exit fn ref_arg (normal) | main.rs:664:1:671:1 | exit fn ref_arg | |
+| main.rs:664:14:671:1 | { ... } | main.rs:664:1:671:1 | exit fn ref_arg (normal) | |
+| main.rs:665:5:665:15 | let ... = 16 | main.rs:665:13:665:14 | 16 | |
+| main.rs:665:9:665:9 | x | main.rs:665:9:665:9 | x | |
+| main.rs:665:9:665:9 | x | main.rs:666:5:666:22 | ExprStmt | match |
+| main.rs:665:13:665:14 | 16 | main.rs:665:9:665:9 | x | |
+| main.rs:666:5:666:17 | print_i64_ref | main.rs:666:20:666:20 | x | |
+| main.rs:666:5:666:21 | print_i64_ref(...) | main.rs:667:5:667:17 | ExprStmt | |
+| main.rs:666:5:666:22 | ExprStmt | main.rs:666:5:666:17 | print_i64_ref | |
+| main.rs:666:19:666:20 | &x | main.rs:666:5:666:21 | print_i64_ref(...) | |
+| main.rs:666:20:666:20 | x | main.rs:666:19:666:20 | &x | |
+| main.rs:667:5:667:13 | print_i64 | main.rs:667:15:667:15 | x | |
+| main.rs:667:5:667:16 | print_i64(...) | main.rs:669:5:669:15 | let ... = 17 | |
+| main.rs:667:5:667:17 | ExprStmt | main.rs:667:5:667:13 | print_i64 | |
+| main.rs:667:15:667:15 | x | main.rs:667:5:667:16 | print_i64(...) | |
+| main.rs:669:5:669:15 | let ... = 17 | main.rs:669:13:669:14 | 17 | |
+| main.rs:669:9:669:9 | z | main.rs:669:9:669:9 | z | |
+| main.rs:669:9:669:9 | z | main.rs:670:5:670:22 | ExprStmt | match |
+| main.rs:669:13:669:14 | 17 | main.rs:669:9:669:9 | z | |
+| main.rs:670:5:670:17 | print_i64_ref | main.rs:670:20:670:20 | z | |
+| main.rs:670:5:670:21 | print_i64_ref(...) | main.rs:664:14:671:1 | { ... } | |
+| main.rs:670:5:670:22 | ExprStmt | main.rs:670:5:670:17 | print_i64_ref | |
+| main.rs:670:19:670:20 | &z | main.rs:670:5:670:21 | print_i64_ref(...) | |
+| main.rs:670:20:670:20 | z | main.rs:670:19:670:20 | &z | |
+| main.rs:678:5:680:5 | enter fn bar | main.rs:678:17:678:20 | self | |
+| main.rs:678:5:680:5 | exit fn bar (normal) | main.rs:678:5:680:5 | exit fn bar | |
+| main.rs:678:12:678:20 | SelfParam | main.rs:679:9:679:36 | ExprStmt | |
+| main.rs:678:17:678:20 | self | main.rs:678:12:678:20 | SelfParam | |
+| main.rs:678:23:680:5 | { ... } | main.rs:678:5:680:5 | exit fn bar (normal) | |
+| main.rs:679:9:679:13 | * ... | main.rs:679:33:679:33 | 3 | |
+| main.rs:679:9:679:35 | ... = ... | main.rs:678:23:680:5 | { ... } | |
+| main.rs:679:9:679:36 | ExprStmt | main.rs:679:10:679:13 | self | |
+| main.rs:679:10:679:13 | self | main.rs:679:9:679:13 | * ... | |
+| main.rs:679:17:679:35 | MyStruct {...} | main.rs:679:9:679:35 | ... = ... | |
+| main.rs:679:33:679:33 | 3 | main.rs:679:17:679:35 | MyStruct {...} | |
+| main.rs:683:1:689:1 | enter fn ref_methodcall_receiver | main.rs:684:5:684:36 | let ... = ... | |
+| main.rs:683:1:689:1 | exit fn ref_methodcall_receiver (normal) | main.rs:683:1:689:1 | exit fn ref_methodcall_receiver | |
+| main.rs:683:30:689:1 | { ... } | main.rs:683:1:689:1 | exit fn ref_methodcall_receiver (normal) | |
+| main.rs:684:5:684:36 | let ... = ... | main.rs:684:33:684:33 | 1 | |
+| main.rs:684:9:684:13 | mut a | main.rs:685:5:685:12 | ExprStmt | match |
+| main.rs:684:13:684:13 | a | main.rs:684:9:684:13 | mut a | |
+| main.rs:684:17:684:35 | MyStruct {...} | main.rs:684:13:684:13 | a | |
+| main.rs:684:33:684:33 | 1 | main.rs:684:17:684:35 | MyStruct {...} | |
+| main.rs:685:5:685:5 | a | main.rs:685:5:685:11 | a.bar() | |
+| main.rs:685:5:685:11 | a.bar() | main.rs:688:5:688:21 | ExprStmt | |
+| main.rs:685:5:685:12 | ExprStmt | main.rs:685:5:685:5 | a | |
+| main.rs:688:5:688:13 | print_i64 | main.rs:688:15:688:15 | a | |
+| main.rs:688:5:688:20 | print_i64(...) | main.rs:683:30:689:1 | { ... } | |
+| main.rs:688:5:688:21 | ExprStmt | main.rs:688:5:688:13 | print_i64 | |
+| main.rs:688:15:688:15 | a | main.rs:688:15:688:19 | a.val | |
+| main.rs:688:15:688:19 | a.val | main.rs:688:5:688:20 | print_i64(...) | |
+| main.rs:705:1:716:1 | enter fn macro_invocation | main.rs:706:5:707:26 | let ... = ... | |
+| main.rs:705:1:716:1 | exit fn macro_invocation (normal) | main.rs:705:1:716:1 | exit fn macro_invocation | |
+| main.rs:705:23:716:1 | { ... } | main.rs:705:1:716:1 | exit fn macro_invocation (normal) | |
+| main.rs:706:5:707:26 | let ... = ... | main.rs:707:23:707:24 | let ... = 37 | |
+| main.rs:706:9:706:22 | var_from_macro | main.rs:706:9:706:22 | var_from_macro | |
+| main.rs:706:9:706:22 | var_from_macro | main.rs:708:5:708:30 | ExprStmt | match |
+| main.rs:707:9:707:21 | var_in_macro | main.rs:707:9:707:21 | var_in_macro | |
+| main.rs:707:9:707:21 | var_in_macro | main.rs:707:9:707:21 | var_in_macro | match |
+| main.rs:707:9:707:21 | var_in_macro | main.rs:707:23:707:24 | { ... } | |
+| main.rs:707:9:707:25 | MacroExpr | main.rs:706:9:706:22 | var_from_macro | |
+| main.rs:707:9:707:25 | let_in_macro!... | main.rs:707:9:707:25 | MacroExpr | |
+| main.rs:707:23:707:24 | 37 | main.rs:707:9:707:21 | var_in_macro | |
+| main.rs:707:23:707:24 | let ... = 37 | main.rs:707:23:707:24 | 37 | |
+| main.rs:707:23:707:24 | { ... } | main.rs:707:9:707:25 | let_in_macro!... | |
+| main.rs:708:5:708:13 | print_i64 | main.rs:708:15:708:28 | var_from_macro | |
+| main.rs:708:5:708:29 | print_i64(...) | main.rs:709:5:709:26 | let ... = 33 | |
+| main.rs:708:5:708:30 | ExprStmt | main.rs:708:5:708:13 | print_i64 | |
+| main.rs:708:15:708:28 | var_from_macro | main.rs:708:5:708:29 | print_i64(...) | |
+| main.rs:709:5:709:26 | let ... = 33 | main.rs:709:24:709:25 | 33 | |
+| main.rs:709:9:709:20 | var_in_macro | main.rs:709:9:709:20 | var_in_macro | |
+| main.rs:709:9:709:20 | var_in_macro | main.rs:714:5:714:44 | ExprStmt | match |
+| main.rs:709:24:709:25 | 33 | main.rs:709:9:709:20 | var_in_macro | |
+| main.rs:714:5:714:13 | print_i64 | main.rs:714:15:714:28 | let ... = 0 | |
+| main.rs:714:5:714:43 | print_i64(...) | main.rs:715:5:715:28 | ExprStmt | |
+| main.rs:714:5:714:44 | ExprStmt | main.rs:714:5:714:13 | print_i64 | |
+| main.rs:714:15:714:28 | 0 | main.rs:714:15:714:28 | var_in_macro | |
+| main.rs:714:15:714:28 | let ... = 0 | main.rs:714:15:714:28 | 0 | |
+| main.rs:714:15:714:28 | var_in_macro | main.rs:714:15:714:28 | var_in_macro | |
+| main.rs:714:15:714:28 | var_in_macro | main.rs:714:30:714:41 | var_in_macro | match |
+| main.rs:714:15:714:42 | MacroExpr | main.rs:714:5:714:43 | print_i64(...) | |
+| main.rs:714:15:714:42 | let_in_macro2!... | main.rs:714:15:714:42 | MacroExpr | |
+| main.rs:714:30:714:41 | var_in_macro | main.rs:714:30:714:41 | { ... } | |
+| main.rs:714:30:714:41 | { ... } | main.rs:714:15:714:42 | let_in_macro2!... | |
+| main.rs:715:5:715:13 | print_i64 | main.rs:715:15:715:26 | var_in_macro | |
+| main.rs:715:5:715:27 | print_i64(...) | main.rs:705:23:716:1 | { ... } | |
+| main.rs:715:5:715:28 | ExprStmt | main.rs:715:5:715:13 | print_i64 | |
+| main.rs:715:15:715:26 | var_in_macro | main.rs:715:5:715:27 | print_i64(...) | |
+| main.rs:718:1:722:1 | enter fn let_without_initializer | main.rs:719:5:719:10 | let ... | |
+| main.rs:718:1:722:1 | exit fn let_without_initializer (normal) | main.rs:718:1:722:1 | exit fn let_without_initializer | |
+| main.rs:718:30:722:1 | { ... } | main.rs:718:1:722:1 | exit fn let_without_initializer (normal) | |
+| main.rs:719:5:719:10 | let ... | main.rs:719:9:719:9 | x | |
+| main.rs:719:9:719:9 | x | main.rs:719:9:719:9 | x | |
+| main.rs:719:9:719:9 | x | main.rs:720:5:720:10 | ExprStmt | match |
+| main.rs:720:5:720:5 | x | main.rs:720:9:720:9 | 1 | |
+| main.rs:720:5:720:9 | ... = ... | main.rs:721:5:721:17 | ExprStmt | |
+| main.rs:720:5:720:10 | ExprStmt | main.rs:720:5:720:5 | x | |
+| main.rs:720:9:720:9 | 1 | main.rs:720:5:720:9 | ... = ... | |
+| main.rs:721:5:721:13 | print_i64 | main.rs:721:15:721:15 | x | |
+| main.rs:721:5:721:16 | print_i64(...) | main.rs:718:30:722:1 | { ... } | |
+| main.rs:721:5:721:17 | ExprStmt | main.rs:721:5:721:13 | print_i64 | |
+| main.rs:721:15:721:15 | x | main.rs:721:5:721:16 | print_i64(...) | |
+| main.rs:724:1:734:1 | enter fn capture_phi | main.rs:725:5:725:20 | let ... = 100 | |
+| main.rs:724:1:734:1 | exit fn capture_phi (normal) | main.rs:724:1:734:1 | exit fn capture_phi | |
+| main.rs:724:18:734:1 | { ... } | main.rs:724:1:734:1 | exit fn capture_phi (normal) | |
+| main.rs:725:5:725:20 | let ... = 100 | main.rs:725:17:725:19 | 100 | |
+| main.rs:725:9:725:13 | mut x | main.rs:726:5:731:6 | let ... = ... | match |
+| main.rs:725:13:725:13 | x | main.rs:725:9:725:13 | mut x | |
+| main.rs:725:17:725:19 | 100 | main.rs:725:13:725:13 | x | |
+| main.rs:726:5:731:6 | let ... = ... | main.rs:726:19:731:5 | \|...\| ... | |
+| main.rs:726:9:726:15 | mut cap | main.rs:732:5:732:14 | ExprStmt | match |
+| main.rs:726:13:726:15 | cap | main.rs:726:9:726:15 | mut cap | |
+| main.rs:726:19:731:5 | \|...\| ... | main.rs:726:13:726:15 | cap | |
+| main.rs:726:19:731:5 | enter \|...\| ... | main.rs:726:20:726:20 | b | |
+| main.rs:726:19:731:5 | exit \|...\| ... (normal) | main.rs:726:19:731:5 | exit \|...\| ... | |
+| main.rs:726:20:726:20 | b | main.rs:726:20:726:20 | b | |
+| main.rs:726:20:726:20 | b | main.rs:726:20:726:26 | ...: bool | match |
+| main.rs:726:20:726:26 | ...: bool | main.rs:727:9:730:10 | let _ = ... | |
+| main.rs:726:29:731:5 | { ... } | main.rs:726:19:731:5 | exit \|...\| ... (normal) | |
+| main.rs:727:9:730:10 | let _ = ... | main.rs:728:20:728:20 | b | |
+| main.rs:728:13:728:13 | _ | main.rs:726:29:731:5 | { ... } | match |
+| main.rs:728:17:730:9 | if b {...} | main.rs:728:13:728:13 | _ | |
+| main.rs:728:20:728:20 | b | main.rs:728:17:730:9 | if b {...} | false |
+| main.rs:728:20:728:20 | b | main.rs:729:13:729:20 | ExprStmt | true |
+| main.rs:728:22:730:9 | { ... } | main.rs:728:17:730:9 | if b {...} | |
+| main.rs:729:13:729:13 | x | main.rs:729:17:729:19 | 200 | |
+| main.rs:729:13:729:19 | ... = ... | main.rs:728:22:730:9 | { ... } | |
+| main.rs:729:13:729:20 | ExprStmt | main.rs:729:13:729:13 | x | |
+| main.rs:729:17:729:19 | 200 | main.rs:729:13:729:19 | ... = ... | |
+| main.rs:732:5:732:7 | cap | main.rs:732:9:732:12 | true | |
+| main.rs:732:5:732:13 | cap(...) | main.rs:733:5:733:17 | ExprStmt | |
+| main.rs:732:5:732:14 | ExprStmt | main.rs:732:5:732:7 | cap | |
+| main.rs:732:9:732:12 | true | main.rs:732:5:732:13 | cap(...) | |
+| main.rs:733:5:733:13 | print_i64 | main.rs:733:15:733:15 | x | |
+| main.rs:733:5:733:16 | print_i64(...) | main.rs:724:18:734:1 | { ... } | |
+| main.rs:733:5:733:17 | ExprStmt | main.rs:733:5:733:13 | print_i64 | |
+| main.rs:733:15:733:15 | x | main.rs:733:5:733:16 | print_i64(...) | |
+| main.rs:736:1:778:1 | enter fn main | main.rs:737:5:737:25 | ExprStmt | |
+| main.rs:736:1:778:1 | exit fn main (normal) | main.rs:736:1:778:1 | exit fn main | |
+| main.rs:736:11:778:1 | { ... } | main.rs:736:1:778:1 | exit fn main (normal) | |
+| main.rs:737:5:737:22 | immutable_variable | main.rs:737:5:737:24 | immutable_variable(...) | |
+| main.rs:737:5:737:24 | immutable_variable(...) | main.rs:738:5:738:23 | ExprStmt | |
+| main.rs:737:5:737:25 | ExprStmt | main.rs:737:5:737:22 | immutable_variable | |
+| main.rs:738:5:738:20 | mutable_variable | main.rs:738:5:738:22 | mutable_variable(...) | |
+| main.rs:738:5:738:22 | mutable_variable(...) | main.rs:739:5:739:40 | ExprStmt | |
+| main.rs:738:5:738:23 | ExprStmt | main.rs:738:5:738:20 | mutable_variable | |
+| main.rs:739:5:739:37 | mutable_variable_immutable_borrow | main.rs:739:5:739:39 | mutable_variable_immutable_borrow(...) | |
+| main.rs:739:5:739:39 | mutable_variable_immutable_borrow(...) | main.rs:740:5:740:23 | ExprStmt | |
+| main.rs:739:5:739:40 | ExprStmt | main.rs:739:5:739:37 | mutable_variable_immutable_borrow | |
+| main.rs:740:5:740:20 | variable_shadow1 | main.rs:740:5:740:22 | variable_shadow1(...) | |
+| main.rs:740:5:740:22 | variable_shadow1(...) | main.rs:741:5:741:23 | ExprStmt | |
+| main.rs:740:5:740:23 | ExprStmt | main.rs:740:5:740:20 | variable_shadow1 | |
+| main.rs:741:5:741:20 | variable_shadow2 | main.rs:741:5:741:22 | variable_shadow2(...) | |
+| main.rs:741:5:741:22 | variable_shadow2(...) | main.rs:742:5:742:19 | ExprStmt | |
+| main.rs:741:5:741:23 | ExprStmt | main.rs:741:5:741:20 | variable_shadow2 | |
+| main.rs:742:5:742:16 | let_pattern1 | main.rs:742:5:742:18 | let_pattern1(...) | |
+| main.rs:742:5:742:18 | let_pattern1(...) | main.rs:743:5:743:19 | ExprStmt | |
+| main.rs:742:5:742:19 | ExprStmt | main.rs:742:5:742:16 | let_pattern1 | |
+| main.rs:743:5:743:16 | let_pattern2 | main.rs:743:5:743:18 | let_pattern2(...) | |
+| main.rs:743:5:743:18 | let_pattern2(...) | main.rs:744:5:744:19 | ExprStmt | |
+| main.rs:743:5:743:19 | ExprStmt | main.rs:743:5:743:16 | let_pattern2 | |
+| main.rs:744:5:744:16 | let_pattern3 | main.rs:744:5:744:18 | let_pattern3(...) | |
+| main.rs:744:5:744:18 | let_pattern3(...) | main.rs:745:5:745:19 | ExprStmt | |
+| main.rs:744:5:744:19 | ExprStmt | main.rs:744:5:744:16 | let_pattern3 | |
+| main.rs:745:5:745:16 | let_pattern4 | main.rs:745:5:745:18 | let_pattern4(...) | |
+| main.rs:745:5:745:18 | let_pattern4(...) | main.rs:746:5:746:21 | ExprStmt | |
+| main.rs:745:5:745:19 | ExprStmt | main.rs:745:5:745:16 | let_pattern4 | |
+| main.rs:746:5:746:18 | match_pattern1 | main.rs:746:5:746:20 | match_pattern1(...) | |
+| main.rs:746:5:746:20 | match_pattern1(...) | main.rs:747:5:747:21 | ExprStmt | |
+| main.rs:746:5:746:21 | ExprStmt | main.rs:746:5:746:18 | match_pattern1 | |
+| main.rs:747:5:747:18 | match_pattern2 | main.rs:747:5:747:20 | match_pattern2(...) | |
+| main.rs:747:5:747:20 | match_pattern2(...) | main.rs:748:5:748:21 | ExprStmt | |
+| main.rs:747:5:747:21 | ExprStmt | main.rs:747:5:747:18 | match_pattern2 | |
+| main.rs:748:5:748:18 | match_pattern3 | main.rs:748:5:748:20 | match_pattern3(...) | |
+| main.rs:748:5:748:20 | match_pattern3(...) | main.rs:749:5:749:21 | ExprStmt | |
+| main.rs:748:5:748:21 | ExprStmt | main.rs:748:5:748:18 | match_pattern3 | |
+| main.rs:749:5:749:18 | match_pattern4 | main.rs:749:5:749:20 | match_pattern4(...) | |
+| main.rs:749:5:749:20 | match_pattern4(...) | main.rs:750:5:750:21 | ExprStmt | |
+| main.rs:749:5:749:21 | ExprStmt | main.rs:749:5:749:18 | match_pattern4 | |
+| main.rs:750:5:750:18 | match_pattern5 | main.rs:750:5:750:20 | match_pattern5(...) | |
+| main.rs:750:5:750:20 | match_pattern5(...) | main.rs:751:5:751:21 | ExprStmt | |
+| main.rs:750:5:750:21 | ExprStmt | main.rs:750:5:750:18 | match_pattern5 | |
+| main.rs:751:5:751:18 | match_pattern6 | main.rs:751:5:751:20 | match_pattern6(...) | |
+| main.rs:751:5:751:20 | match_pattern6(...) | main.rs:752:5:752:21 | ExprStmt | |
+| main.rs:751:5:751:21 | ExprStmt | main.rs:751:5:751:18 | match_pattern6 | |
+| main.rs:752:5:752:18 | match_pattern7 | main.rs:752:5:752:20 | match_pattern7(...) | |
+| main.rs:752:5:752:20 | match_pattern7(...) | main.rs:753:5:753:21 | ExprStmt | |
+| main.rs:752:5:752:21 | ExprStmt | main.rs:752:5:752:18 | match_pattern7 | |
+| main.rs:753:5:753:18 | match_pattern8 | main.rs:753:5:753:20 | match_pattern8(...) | |
+| main.rs:753:5:753:20 | match_pattern8(...) | main.rs:754:5:754:21 | ExprStmt | |
+| main.rs:753:5:753:21 | ExprStmt | main.rs:753:5:753:18 | match_pattern8 | |
+| main.rs:754:5:754:18 | match_pattern9 | main.rs:754:5:754:20 | match_pattern9(...) | |
+| main.rs:754:5:754:20 | match_pattern9(...) | main.rs:755:5:755:22 | ExprStmt | |
+| main.rs:754:5:754:21 | ExprStmt | main.rs:754:5:754:18 | match_pattern9 | |
+| main.rs:755:5:755:19 | match_pattern10 | main.rs:755:5:755:21 | match_pattern10(...) | |
+| main.rs:755:5:755:21 | match_pattern10(...) | main.rs:756:5:756:22 | ExprStmt | |
+| main.rs:755:5:755:22 | ExprStmt | main.rs:755:5:755:19 | match_pattern10 | |
+| main.rs:756:5:756:19 | match_pattern11 | main.rs:756:5:756:21 | match_pattern11(...) | |
+| main.rs:756:5:756:21 | match_pattern11(...) | main.rs:757:5:757:22 | ExprStmt | |
+| main.rs:756:5:756:22 | ExprStmt | main.rs:756:5:756:19 | match_pattern11 | |
+| main.rs:757:5:757:19 | match_pattern12 | main.rs:757:5:757:21 | match_pattern12(...) | |
+| main.rs:757:5:757:21 | match_pattern12(...) | main.rs:758:5:758:22 | ExprStmt | |
+| main.rs:757:5:757:22 | ExprStmt | main.rs:757:5:757:19 | match_pattern12 | |
+| main.rs:758:5:758:19 | match_pattern13 | main.rs:758:5:758:21 | match_pattern13(...) | |
+| main.rs:758:5:758:21 | match_pattern13(...) | main.rs:759:5:759:22 | ExprStmt | |
+| main.rs:758:5:758:22 | ExprStmt | main.rs:758:5:758:19 | match_pattern13 | |
+| main.rs:759:5:759:19 | match_pattern14 | main.rs:759:5:759:21 | match_pattern14(...) | |
+| main.rs:759:5:759:21 | match_pattern14(...) | main.rs:760:5:760:36 | ExprStmt | |
+| main.rs:759:5:759:22 | ExprStmt | main.rs:759:5:759:19 | match_pattern14 | |
+| main.rs:760:5:760:18 | param_pattern1 | main.rs:760:20:760:22 | "a" | |
+| main.rs:760:5:760:35 | param_pattern1(...) | main.rs:761:5:761:37 | ExprStmt | |
+| main.rs:760:5:760:36 | ExprStmt | main.rs:760:5:760:18 | param_pattern1 | |
+| main.rs:760:20:760:22 | "a" | main.rs:760:26:760:28 | "b" | |
+| main.rs:760:25:760:34 | TupleExpr | main.rs:760:5:760:35 | param_pattern1(...) | |
+| main.rs:760:26:760:28 | "b" | main.rs:760:31:760:33 | "c" | |
+| main.rs:760:31:760:33 | "c" | main.rs:760:25:760:34 | TupleExpr | |
+| main.rs:761:5:761:18 | param_pattern2 | main.rs:761:20:761:31 | ...::Left | |
+| main.rs:761:5:761:36 | param_pattern2(...) | main.rs:762:5:762:26 | ExprStmt | |
+| main.rs:761:5:761:37 | ExprStmt | main.rs:761:5:761:18 | param_pattern2 | |
+| main.rs:761:20:761:31 | ...::Left | main.rs:761:33:761:34 | 45 | |
+| main.rs:761:20:761:35 | ...::Left(...) | main.rs:761:5:761:36 | param_pattern2(...) | |
+| main.rs:761:33:761:34 | 45 | main.rs:761:20:761:35 | ...::Left(...) | |
+| main.rs:762:5:762:23 | destruct_assignment | main.rs:762:5:762:25 | destruct_assignment(...) | |
+| main.rs:762:5:762:25 | destruct_assignment(...) | main.rs:763:5:763:23 | ExprStmt | |
+| main.rs:762:5:762:26 | ExprStmt | main.rs:762:5:762:23 | destruct_assignment | |
+| main.rs:763:5:763:20 | closure_variable | main.rs:763:5:763:22 | closure_variable(...) | |
+| main.rs:763:5:763:22 | closure_variable(...) | main.rs:764:5:764:22 | ExprStmt | |
+| main.rs:763:5:763:23 | ExprStmt | main.rs:763:5:763:20 | closure_variable | |
+| main.rs:764:5:764:19 | nested_function | main.rs:764:5:764:21 | nested_function(...) | |
+| main.rs:764:5:764:21 | nested_function(...) | main.rs:765:5:765:19 | ExprStmt | |
+| main.rs:764:5:764:22 | ExprStmt | main.rs:764:5:764:19 | nested_function | |
+| main.rs:765:5:765:16 | for_variable | main.rs:765:5:765:18 | for_variable(...) | |
+| main.rs:765:5:765:18 | for_variable(...) | main.rs:766:5:766:17 | ExprStmt | |
+| main.rs:765:5:765:19 | ExprStmt | main.rs:765:5:765:16 | for_variable | |
+| main.rs:766:5:766:14 | add_assign | main.rs:766:5:766:16 | add_assign(...) | |
+| main.rs:766:5:766:16 | add_assign(...) | main.rs:767:5:767:13 | ExprStmt | |
+| main.rs:766:5:766:17 | ExprStmt | main.rs:766:5:766:14 | add_assign | |
+| main.rs:767:5:767:10 | mutate | main.rs:767:5:767:12 | mutate(...) | |
+| main.rs:767:5:767:12 | mutate(...) | main.rs:768:5:768:17 | ExprStmt | |
+| main.rs:767:5:767:13 | ExprStmt | main.rs:767:5:767:10 | mutate | |
+| main.rs:768:5:768:14 | mutate_arg | main.rs:768:5:768:16 | mutate_arg(...) | |
+| main.rs:768:5:768:16 | mutate_arg(...) | main.rs:769:5:769:12 | ExprStmt | |
+| main.rs:768:5:768:17 | ExprStmt | main.rs:768:5:768:14 | mutate_arg | |
+| main.rs:769:5:769:9 | alias | main.rs:769:5:769:11 | alias(...) | |
+| main.rs:769:5:769:11 | alias(...) | main.rs:770:5:770:18 | ExprStmt | |
+| main.rs:769:5:769:12 | ExprStmt | main.rs:769:5:769:9 | alias | |
+| main.rs:770:5:770:15 | capture_mut | main.rs:770:5:770:17 | capture_mut(...) | |
+| main.rs:770:5:770:17 | capture_mut(...) | main.rs:771:5:771:20 | ExprStmt | |
+| main.rs:770:5:770:18 | ExprStmt | main.rs:770:5:770:15 | capture_mut | |
+| main.rs:771:5:771:17 | capture_immut | main.rs:771:5:771:19 | capture_immut(...) | |
+| main.rs:771:5:771:19 | capture_immut(...) | main.rs:772:5:772:26 | ExprStmt | |
+| main.rs:771:5:771:20 | ExprStmt | main.rs:771:5:771:17 | capture_immut | |
+| main.rs:772:5:772:23 | async_block_capture | main.rs:772:5:772:25 | async_block_capture(...) | |
+| main.rs:772:5:772:25 | async_block_capture(...) | main.rs:773:5:773:14 | ExprStmt | |
+| main.rs:772:5:772:26 | ExprStmt | main.rs:772:5:772:23 | async_block_capture | |
+| main.rs:773:5:773:11 | structs | main.rs:773:5:773:13 | structs(...) | |
+| main.rs:773:5:773:13 | structs(...) | main.rs:774:5:774:14 | ExprStmt | |
+| main.rs:773:5:773:14 | ExprStmt | main.rs:773:5:773:11 | structs | |
+| main.rs:774:5:774:11 | ref_arg | main.rs:774:5:774:13 | ref_arg(...) | |
+| main.rs:774:5:774:13 | ref_arg(...) | main.rs:775:5:775:30 | ExprStmt | |
+| main.rs:774:5:774:14 | ExprStmt | main.rs:774:5:774:11 | ref_arg | |
+| main.rs:775:5:775:27 | ref_methodcall_receiver | main.rs:775:5:775:29 | ref_methodcall_receiver(...) | |
+| main.rs:775:5:775:29 | ref_methodcall_receiver(...) | main.rs:776:5:776:23 | ExprStmt | |
+| main.rs:775:5:775:30 | ExprStmt | main.rs:775:5:775:27 | ref_methodcall_receiver | |
+| main.rs:776:5:776:20 | macro_invocation | main.rs:776:5:776:22 | macro_invocation(...) | |
+| main.rs:776:5:776:22 | macro_invocation(...) | main.rs:777:5:777:18 | ExprStmt | |
+| main.rs:776:5:776:23 | ExprStmt | main.rs:776:5:776:20 | macro_invocation | |
+| main.rs:777:5:777:15 | capture_phi | main.rs:777:5:777:17 | capture_phi(...) | |
+| main.rs:777:5:777:17 | capture_phi(...) | main.rs:736:11:778:1 | { ... } | |
+| main.rs:777:5:777:18 | ExprStmt | main.rs:777:5:777:15 | capture_phi | |
breakTarget
-| main.rs:324:9:324:13 | break | main.rs:315:5:325:5 | while ... { ... } |
+| main.rs:326:9:326:13 | break | main.rs:317:5:327:5 | while ... { ... } |
continueTarget
diff --git a/rust/ql/test/library-tests/variables/Ssa.expected b/rust/ql/test/library-tests/variables/Ssa.expected
index da0a2b272e8..342fd0df20b 100644
--- a/rust/ql/test/library-tests/variables/Ssa.expected
+++ b/rust/ql/test/library-tests/variables/Ssa.expected
@@ -5,191 +5,192 @@ definition
| main.rs:20:9:20:10 | x1 | main.rs:20:9:20:10 | x1 |
| main.rs:25:13:25:14 | x2 | main.rs:25:13:25:14 | x2 |
| main.rs:27:5:27:6 | x2 | main.rs:25:13:25:14 | x2 |
-| main.rs:32:13:32:13 | x | main.rs:32:13:32:13 | x |
-| main.rs:34:5:34:5 | x | main.rs:32:13:32:13 | x |
-| main.rs:39:9:39:10 | x3 | main.rs:39:9:39:10 | x3 |
+| main.rs:29:5:29:6 | x2 | main.rs:25:13:25:14 | x2 |
+| main.rs:34:13:34:13 | x | main.rs:34:13:34:13 | x |
+| main.rs:36:5:36:5 | x | main.rs:34:13:34:13 | x |
| main.rs:41:9:41:10 | x3 | main.rs:41:9:41:10 | x3 |
-| main.rs:47:9:47:10 | x4 | main.rs:47:9:47:10 | x4 |
-| main.rs:50:13:50:14 | x4 | main.rs:50:13:50:14 | x4 |
-| main.rs:64:13:64:14 | a1 | main.rs:64:13:64:14 | a1 |
-| main.rs:65:13:65:14 | b1 | main.rs:65:13:65:14 | b1 |
-| main.rs:68:13:68:13 | x | main.rs:68:13:68:13 | x |
-| main.rs:69:13:69:13 | y | main.rs:69:13:69:13 | y |
-| main.rs:79:9:79:10 | p1 | main.rs:79:9:79:10 | p1 |
-| main.rs:81:12:81:13 | a2 | main.rs:81:12:81:13 | a2 |
-| main.rs:82:12:82:13 | b2 | main.rs:82:12:82:13 | b2 |
-| main.rs:89:9:89:10 | s1 | main.rs:89:9:89:10 | s1 |
-| main.rs:91:21:91:22 | s2 | main.rs:91:21:91:22 | s2 |
-| main.rs:98:9:98:9 | x | main.rs:98:9:98:9 | x |
-| main.rs:99:14:99:14 | x | main.rs:99:14:99:14 | x |
-| main.rs:102:13:102:13 | x | main.rs:102:13:102:13 | x |
-| main.rs:111:9:111:10 | s1 | main.rs:111:9:111:10 | s1 |
-| main.rs:113:24:113:25 | s2 | main.rs:113:24:113:25 | s2 |
-| main.rs:120:9:120:10 | x6 | main.rs:120:9:120:10 | x6 |
-| main.rs:121:9:121:10 | y1 | main.rs:121:9:121:10 | y1 |
-| main.rs:125:14:125:15 | y1 | main.rs:125:14:125:15 | y1 |
-| main.rs:137:9:137:15 | numbers | main.rs:137:9:137:15 | numbers |
-| main.rs:142:13:142:17 | first | main.rs:142:13:142:17 | first |
-| main.rs:144:13:144:17 | third | main.rs:144:13:144:17 | third |
-| main.rs:146:13:146:17 | fifth | main.rs:146:13:146:17 | fifth |
-| main.rs:157:13:157:17 | first | main.rs:157:13:157:17 | first |
-| main.rs:159:13:159:16 | last | main.rs:159:13:159:16 | last |
-| main.rs:168:9:168:10 | p2 | main.rs:168:9:168:10 | p2 |
-| main.rs:172:16:172:17 | x7 | main.rs:172:16:172:17 | x7 |
-| main.rs:182:9:182:11 | msg | main.rs:182:9:182:11 | msg |
-| main.rs:187:17:187:27 | id_variable | main.rs:187:17:187:27 | id_variable |
-| main.rs:192:26:192:27 | id | main.rs:192:26:192:27 | id |
-| main.rs:206:9:206:14 | either | main.rs:206:9:206:14 | either |
-| main.rs:208:9:208:44 | SSA phi(a3) | main.rs:208:9:208:44 | a3 |
-| main.rs:208:22:208:23 | a3 | main.rs:208:9:208:44 | a3 |
-| main.rs:208:42:208:43 | a3 | main.rs:208:9:208:44 | a3 |
-| main.rs:220:9:220:10 | tv | main.rs:220:9:220:10 | tv |
-| main.rs:222:9:222:81 | SSA phi(a4) | main.rs:222:9:222:81 | a4 |
-| main.rs:222:28:222:29 | a4 | main.rs:222:9:222:81 | a4 |
-| main.rs:222:54:222:55 | a4 | main.rs:222:9:222:81 | a4 |
-| main.rs:222:79:222:80 | a4 | main.rs:222:9:222:81 | a4 |
-| main.rs:226:9:226:83 | SSA phi(a5) | main.rs:226:9:226:83 | a5 |
-| main.rs:226:10:226:57 | [match(true)] SSA phi(a5) | main.rs:226:9:226:83 | a5 |
-| main.rs:226:29:226:30 | a5 | main.rs:226:9:226:83 | a5 |
-| main.rs:226:55:226:56 | a5 | main.rs:226:9:226:83 | a5 |
-| main.rs:226:81:226:82 | a5 | main.rs:226:9:226:83 | a5 |
-| main.rs:230:9:230:83 | SSA phi(a6) | main.rs:230:9:230:83 | a6 |
-| main.rs:230:28:230:29 | a6 | main.rs:230:9:230:83 | a6 |
-| main.rs:230:35:230:82 | SSA phi(a6) | main.rs:230:9:230:83 | a6 |
-| main.rs:230:55:230:56 | a6 | main.rs:230:9:230:83 | a6 |
-| main.rs:230:80:230:81 | a6 | main.rs:230:9:230:83 | a6 |
-| main.rs:236:9:236:14 | either | main.rs:236:9:236:14 | either |
-| main.rs:238:9:238:44 | [match(true)] SSA phi(a7) | main.rs:238:9:238:44 | a7 |
-| main.rs:238:22:238:23 | a7 | main.rs:238:9:238:44 | a7 |
-| main.rs:238:42:238:43 | a7 | main.rs:238:9:238:44 | a7 |
-| main.rs:246:9:246:14 | either | main.rs:246:9:246:14 | either |
-| main.rs:249:13:249:13 | e | main.rs:249:13:249:13 | e |
-| main.rs:250:14:250:51 | [match(true)] SSA phi(a11) | main.rs:250:14:250:51 | a11 |
-| main.rs:250:27:250:29 | a11 | main.rs:250:14:250:51 | a11 |
-| main.rs:250:48:250:50 | a11 | main.rs:250:14:250:51 | a11 |
-| main.rs:253:33:253:35 | a12 | main.rs:253:33:253:35 | a12 |
-| main.rs:270:9:270:10 | fv | main.rs:270:9:270:10 | fv |
-| main.rs:272:9:272:109 | SSA phi(a13) | main.rs:272:9:272:109 | a13 |
-| main.rs:272:27:272:29 | a13 | main.rs:272:9:272:109 | a13 |
-| main.rs:272:35:272:82 | [match(true)] SSA phi(a13) | main.rs:272:9:272:109 | a13 |
-| main.rs:272:54:272:56 | a13 | main.rs:272:9:272:109 | a13 |
-| main.rs:272:79:272:81 | a13 | main.rs:272:9:272:109 | a13 |
-| main.rs:272:106:272:108 | a13 | main.rs:272:9:272:109 | a13 |
-| main.rs:279:9:279:9 | x | main.rs:279:9:279:9 | x |
-| main.rs:280:17:280:17 | x | main.rs:280:17:280:17 | x |
-| main.rs:287:13:287:13 | x | main.rs:287:13:287:13 | x |
-| main.rs:295:9:295:9 | x | main.rs:295:9:295:9 | x |
-| main.rs:296:17:296:17 | x | main.rs:296:17:296:17 | x |
-| main.rs:299:14:299:14 | x | main.rs:299:14:299:14 | x |
-| main.rs:306:13:306:13 | x | main.rs:306:13:306:13 | x |
-| main.rs:314:9:314:9 | x | main.rs:314:9:314:9 | x |
-| main.rs:315:20:315:20 | x | main.rs:315:20:315:20 | x |
-| main.rs:318:14:318:14 | x | main.rs:318:14:318:14 | x |
-| main.rs:332:9:332:9 | x | main.rs:332:9:332:9 | x |
-| main.rs:334:14:334:14 | x | main.rs:334:14:334:14 | x |
-| main.rs:335:20:335:20 | x | main.rs:335:20:335:20 | x |
-| main.rs:346:9:346:9 | x | main.rs:346:9:346:9 | x |
-| main.rs:347:16:347:16 | x | main.rs:347:16:347:16 | x |
-| main.rs:352:20:352:20 | x | main.rs:352:20:352:20 | x |
-| main.rs:362:5:362:6 | a8 | main.rs:362:5:362:6 | a8 |
-| main.rs:364:9:364:10 | b3 | main.rs:364:9:364:10 | b3 |
-| main.rs:365:9:365:10 | c1 | main.rs:365:9:365:10 | c1 |
-| main.rs:373:20:373:55 | SSA phi(a9) | main.rs:373:20:373:55 | a9 |
-| main.rs:373:33:373:34 | a9 | main.rs:373:20:373:55 | a9 |
-| main.rs:373:53:373:54 | a9 | main.rs:373:20:373:55 | a9 |
-| main.rs:380:13:380:15 | a10 | main.rs:380:13:380:15 | a10 |
-| main.rs:381:13:381:14 | b4 | main.rs:381:13:381:14 | b4 |
-| main.rs:382:13:382:14 | c2 | main.rs:382:13:382:14 | c2 |
-| main.rs:389:9:389:10 | c2 | main.rs:382:13:382:14 | c2 |
-| main.rs:390:9:390:10 | b4 | main.rs:381:13:381:14 | b4 |
-| main.rs:391:9:391:11 | a10 | main.rs:380:13:380:15 | a10 |
-| main.rs:403:13:403:15 | a10 | main.rs:403:13:403:15 | a10 |
-| main.rs:404:13:404:14 | b4 | main.rs:404:13:404:14 | b4 |
-| main.rs:416:9:416:23 | example_closure | main.rs:416:9:416:23 | example_closure |
-| main.rs:417:10:417:10 | x | main.rs:417:10:417:10 | x |
-| main.rs:419:9:419:10 | n1 | main.rs:419:9:419:10 | n1 |
-| main.rs:424:9:424:26 | immutable_variable | main.rs:424:9:424:26 | immutable_variable |
-| main.rs:425:6:425:6 | x | main.rs:425:6:425:6 | x |
-| main.rs:427:9:427:10 | n2 | main.rs:427:9:427:10 | n2 |
-| main.rs:434:9:434:9 | f | main.rs:434:9:434:9 | f |
-| main.rs:435:10:435:10 | x | main.rs:435:10:435:10 | x |
-| main.rs:439:10:439:10 | x | main.rs:439:10:439:10 | x |
-| main.rs:448:14:448:14 | x | main.rs:448:14:448:14 | x |
-| main.rs:457:13:457:13 | f | main.rs:457:13:457:13 | f |
-| main.rs:458:14:458:14 | x | main.rs:458:14:458:14 | x |
-| main.rs:465:9:465:9 | v | main.rs:465:9:465:9 | v |
-| main.rs:467:9:467:12 | text | main.rs:467:9:467:12 | text |
-| main.rs:474:13:474:13 | a | main.rs:474:13:474:13 | a |
-| main.rs:475:5:475:5 | a | main.rs:474:13:474:13 | a |
-| main.rs:477:6:477:11 | &mut a | main.rs:474:13:474:13 | a |
-| main.rs:482:13:482:13 | i | main.rs:482:13:482:13 | i |
-| main.rs:483:9:483:13 | ref_i | main.rs:483:9:483:13 | ref_i |
-| main.rs:484:9:484:14 | &mut i | main.rs:482:13:482:13 | i |
-| main.rs:489:17:489:17 | x | main.rs:489:17:489:17 | x |
-| main.rs:496:22:496:22 | x | main.rs:496:22:496:22 | x |
-| main.rs:496:38:496:38 | y | main.rs:496:38:496:38 | y |
-| main.rs:505:13:505:13 | x | main.rs:505:13:505:13 | x |
-| main.rs:506:9:506:9 | y | main.rs:506:9:506:9 | y |
-| main.rs:507:22:507:27 | &mut x | main.rs:505:13:505:13 | x |
-| main.rs:513:13:513:13 | z | main.rs:513:13:513:13 | z |
-| main.rs:514:9:514:9 | w | main.rs:514:9:514:9 | w |
-| main.rs:517:9:517:14 | &mut z | main.rs:513:13:513:13 | z |
-| main.rs:527:13:527:13 | x | main.rs:527:13:527:13 | x |
-| main.rs:528:9:528:9 | y | main.rs:528:9:528:9 | y |
-| main.rs:529:9:529:14 | &mut x | main.rs:527:13:527:13 | x |
-| main.rs:535:9:535:9 | x | main.rs:535:9:535:9 | x |
-| main.rs:538:9:538:11 | cap | main.rs:538:9:538:11 | cap |
-| main.rs:538:15:540:5 | x | main.rs:535:9:535:9 | x |
-| main.rs:546:13:546:13 | x | main.rs:546:13:546:13 | x |
-| main.rs:549:9:549:16 | closure1 | main.rs:549:9:549:16 | closure1 |
-| main.rs:549:20:551:5 | x | main.rs:546:13:546:13 | x |
-| main.rs:555:13:555:13 | y | main.rs:555:13:555:13 | y |
-| main.rs:558:13:558:20 | closure2 | main.rs:558:13:558:20 | closure2 |
-| main.rs:559:9:559:9 | y | main.rs:555:13:555:13 | y |
-| main.rs:561:5:561:14 | y | main.rs:555:13:555:13 | y |
-| main.rs:564:13:564:13 | z | main.rs:564:13:564:13 | z |
-| main.rs:567:13:567:20 | closure3 | main.rs:567:13:567:20 | closure3 |
-| main.rs:567:24:569:5 | z | main.rs:564:13:564:13 | z |
-| main.rs:575:13:575:13 | i | main.rs:575:13:575:13 | i |
-| main.rs:576:9:576:13 | block | main.rs:576:9:576:13 | block |
-| main.rs:577:9:577:9 | i | main.rs:575:13:575:13 | i |
-| main.rs:580:5:580:15 | i | main.rs:575:13:575:13 | i |
-| main.rs:584:8:584:8 | b | main.rs:584:8:584:8 | b |
-| main.rs:585:13:585:13 | x | main.rs:585:13:585:13 | x |
-| main.rs:589:13:598:5 | SSA phi(x) | main.rs:585:13:585:13 | x |
-| main.rs:591:9:591:9 | x | main.rs:585:13:585:13 | x |
-| main.rs:595:9:595:9 | x | main.rs:585:13:585:13 | x |
-| main.rs:602:13:602:14 | b1 | main.rs:602:13:602:14 | b1 |
-| main.rs:602:23:602:24 | b2 | main.rs:602:23:602:24 | b2 |
-| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x |
-| main.rs:626:20:626:23 | self | main.rs:626:20:626:23 | self |
-| main.rs:630:11:630:14 | self | main.rs:630:11:630:14 | self |
-| main.rs:634:23:634:26 | self | main.rs:634:23:634:26 | self |
-| main.rs:635:17:635:17 | f | main.rs:635:17:635:17 | f |
-| main.rs:635:21:638:9 | self | main.rs:634:23:634:26 | self |
-| main.rs:635:22:635:22 | n | main.rs:635:22:635:22 | n |
-| main.rs:645:13:645:13 | a | main.rs:645:13:645:13 | a |
-| main.rs:646:15:646:15 | a | main.rs:645:13:645:13 | a |
-| main.rs:649:5:649:5 | a | main.rs:645:13:645:13 | a |
-| main.rs:654:13:654:13 | a | main.rs:654:13:654:13 | a |
-| main.rs:658:5:658:5 | a | main.rs:654:13:654:13 | a |
-| main.rs:663:9:663:9 | x | main.rs:663:9:663:9 | x |
-| main.rs:667:9:667:9 | z | main.rs:667:9:667:9 | z |
-| main.rs:676:17:676:20 | self | main.rs:676:17:676:20 | self |
-| main.rs:682:13:682:13 | a | main.rs:682:13:682:13 | a |
-| main.rs:683:5:683:5 | a | main.rs:682:13:682:13 | a |
-| main.rs:704:9:704:22 | var_from_macro | main.rs:704:9:704:22 | var_from_macro |
-| main.rs:705:9:705:21 | var_in_macro | main.rs:705:9:705:21 | var_in_macro |
-| main.rs:707:9:707:20 | var_in_macro | main.rs:707:9:707:20 | var_in_macro |
-| main.rs:712:15:712:28 | var_in_macro | main.rs:712:15:712:28 | var_in_macro |
-| main.rs:718:5:718:5 | x | main.rs:717:9:717:9 | x |
-| main.rs:723:13:723:13 | x | main.rs:723:13:723:13 | x |
-| main.rs:724:13:724:15 | cap | main.rs:724:13:724:15 | cap |
-| main.rs:724:19:729:5 | x | main.rs:723:13:723:13 | x |
-| main.rs:724:20:724:20 | b | main.rs:724:20:724:20 | b |
-| main.rs:726:17:728:9 | SSA phi(x) | main.rs:723:13:723:13 | x |
-| main.rs:727:13:727:13 | x | main.rs:723:13:723:13 | x |
-| main.rs:730:5:730:13 | x | main.rs:723:13:723:13 | x |
+| main.rs:43:9:43:10 | x3 | main.rs:43:9:43:10 | x3 |
+| main.rs:49:9:49:10 | x4 | main.rs:49:9:49:10 | x4 |
+| main.rs:52:13:52:14 | x4 | main.rs:52:13:52:14 | x4 |
+| main.rs:66:13:66:14 | a1 | main.rs:66:13:66:14 | a1 |
+| main.rs:67:13:67:14 | b1 | main.rs:67:13:67:14 | b1 |
+| main.rs:70:13:70:13 | x | main.rs:70:13:70:13 | x |
+| main.rs:71:13:71:13 | y | main.rs:71:13:71:13 | y |
+| main.rs:81:9:81:10 | p1 | main.rs:81:9:81:10 | p1 |
+| main.rs:83:12:83:13 | a2 | main.rs:83:12:83:13 | a2 |
+| main.rs:84:12:84:13 | b2 | main.rs:84:12:84:13 | b2 |
+| main.rs:91:9:91:10 | s1 | main.rs:91:9:91:10 | s1 |
+| main.rs:93:21:93:22 | s2 | main.rs:93:21:93:22 | s2 |
+| main.rs:100:9:100:9 | x | main.rs:100:9:100:9 | x |
+| main.rs:101:14:101:14 | x | main.rs:101:14:101:14 | x |
+| main.rs:104:13:104:13 | x | main.rs:104:13:104:13 | x |
+| main.rs:113:9:113:10 | s1 | main.rs:113:9:113:10 | s1 |
+| main.rs:115:24:115:25 | s2 | main.rs:115:24:115:25 | s2 |
+| main.rs:122:9:122:10 | x6 | main.rs:122:9:122:10 | x6 |
+| main.rs:123:9:123:10 | y1 | main.rs:123:9:123:10 | y1 |
+| main.rs:127:14:127:15 | y1 | main.rs:127:14:127:15 | y1 |
+| main.rs:139:9:139:15 | numbers | main.rs:139:9:139:15 | numbers |
+| main.rs:144:13:144:17 | first | main.rs:144:13:144:17 | first |
+| main.rs:146:13:146:17 | third | main.rs:146:13:146:17 | third |
+| main.rs:148:13:148:17 | fifth | main.rs:148:13:148:17 | fifth |
+| main.rs:159:13:159:17 | first | main.rs:159:13:159:17 | first |
+| main.rs:161:13:161:16 | last | main.rs:161:13:161:16 | last |
+| main.rs:170:9:170:10 | p2 | main.rs:170:9:170:10 | p2 |
+| main.rs:174:16:174:17 | x7 | main.rs:174:16:174:17 | x7 |
+| main.rs:184:9:184:11 | msg | main.rs:184:9:184:11 | msg |
+| main.rs:189:17:189:27 | id_variable | main.rs:189:17:189:27 | id_variable |
+| main.rs:194:26:194:27 | id | main.rs:194:26:194:27 | id |
+| main.rs:208:9:208:14 | either | main.rs:208:9:208:14 | either |
+| main.rs:210:9:210:44 | SSA phi(a3) | main.rs:210:9:210:44 | a3 |
+| main.rs:210:22:210:23 | a3 | main.rs:210:9:210:44 | a3 |
+| main.rs:210:42:210:43 | a3 | main.rs:210:9:210:44 | a3 |
+| main.rs:222:9:222:10 | tv | main.rs:222:9:222:10 | tv |
+| main.rs:224:9:224:81 | SSA phi(a4) | main.rs:224:9:224:81 | a4 |
+| main.rs:224:28:224:29 | a4 | main.rs:224:9:224:81 | a4 |
+| main.rs:224:54:224:55 | a4 | main.rs:224:9:224:81 | a4 |
+| main.rs:224:79:224:80 | a4 | main.rs:224:9:224:81 | a4 |
+| main.rs:228:9:228:83 | SSA phi(a5) | main.rs:228:9:228:83 | a5 |
+| main.rs:228:10:228:57 | [match(true)] SSA phi(a5) | main.rs:228:9:228:83 | a5 |
+| main.rs:228:29:228:30 | a5 | main.rs:228:9:228:83 | a5 |
+| main.rs:228:55:228:56 | a5 | main.rs:228:9:228:83 | a5 |
+| main.rs:228:81:228:82 | a5 | main.rs:228:9:228:83 | a5 |
+| main.rs:232:9:232:83 | SSA phi(a6) | main.rs:232:9:232:83 | a6 |
+| main.rs:232:28:232:29 | a6 | main.rs:232:9:232:83 | a6 |
+| main.rs:232:35:232:82 | SSA phi(a6) | main.rs:232:9:232:83 | a6 |
+| main.rs:232:55:232:56 | a6 | main.rs:232:9:232:83 | a6 |
+| main.rs:232:80:232:81 | a6 | main.rs:232:9:232:83 | a6 |
+| main.rs:238:9:238:14 | either | main.rs:238:9:238:14 | either |
+| main.rs:240:9:240:44 | [match(true)] SSA phi(a7) | main.rs:240:9:240:44 | a7 |
+| main.rs:240:22:240:23 | a7 | main.rs:240:9:240:44 | a7 |
+| main.rs:240:42:240:43 | a7 | main.rs:240:9:240:44 | a7 |
+| main.rs:248:9:248:14 | either | main.rs:248:9:248:14 | either |
+| main.rs:251:13:251:13 | e | main.rs:251:13:251:13 | e |
+| main.rs:252:14:252:51 | [match(true)] SSA phi(a11) | main.rs:252:14:252:51 | a11 |
+| main.rs:252:27:252:29 | a11 | main.rs:252:14:252:51 | a11 |
+| main.rs:252:48:252:50 | a11 | main.rs:252:14:252:51 | a11 |
+| main.rs:255:33:255:35 | a12 | main.rs:255:33:255:35 | a12 |
+| main.rs:272:9:272:10 | fv | main.rs:272:9:272:10 | fv |
+| main.rs:274:9:274:109 | SSA phi(a13) | main.rs:274:9:274:109 | a13 |
+| main.rs:274:27:274:29 | a13 | main.rs:274:9:274:109 | a13 |
+| main.rs:274:35:274:82 | [match(true)] SSA phi(a13) | main.rs:274:9:274:109 | a13 |
+| main.rs:274:54:274:56 | a13 | main.rs:274:9:274:109 | a13 |
+| main.rs:274:79:274:81 | a13 | main.rs:274:9:274:109 | a13 |
+| main.rs:274:106:274:108 | a13 | main.rs:274:9:274:109 | a13 |
+| main.rs:281:9:281:9 | x | main.rs:281:9:281:9 | x |
+| main.rs:282:17:282:17 | x | main.rs:282:17:282:17 | x |
+| main.rs:289:13:289:13 | x | main.rs:289:13:289:13 | x |
+| main.rs:297:9:297:9 | x | main.rs:297:9:297:9 | x |
+| main.rs:298:17:298:17 | x | main.rs:298:17:298:17 | x |
+| main.rs:301:14:301:14 | x | main.rs:301:14:301:14 | x |
+| main.rs:308:13:308:13 | x | main.rs:308:13:308:13 | x |
+| main.rs:316:9:316:9 | x | main.rs:316:9:316:9 | x |
+| main.rs:317:20:317:20 | x | main.rs:317:20:317:20 | x |
+| main.rs:320:14:320:14 | x | main.rs:320:14:320:14 | x |
+| main.rs:334:9:334:9 | x | main.rs:334:9:334:9 | x |
+| main.rs:336:14:336:14 | x | main.rs:336:14:336:14 | x |
+| main.rs:337:20:337:20 | x | main.rs:337:20:337:20 | x |
+| main.rs:348:9:348:9 | x | main.rs:348:9:348:9 | x |
+| main.rs:349:16:349:16 | x | main.rs:349:16:349:16 | x |
+| main.rs:354:20:354:20 | x | main.rs:354:20:354:20 | x |
+| main.rs:364:5:364:6 | a8 | main.rs:364:5:364:6 | a8 |
+| main.rs:366:9:366:10 | b3 | main.rs:366:9:366:10 | b3 |
+| main.rs:367:9:367:10 | c1 | main.rs:367:9:367:10 | c1 |
+| main.rs:375:20:375:55 | SSA phi(a9) | main.rs:375:20:375:55 | a9 |
+| main.rs:375:33:375:34 | a9 | main.rs:375:20:375:55 | a9 |
+| main.rs:375:53:375:54 | a9 | main.rs:375:20:375:55 | a9 |
+| main.rs:382:13:382:15 | a10 | main.rs:382:13:382:15 | a10 |
+| main.rs:383:13:383:14 | b4 | main.rs:383:13:383:14 | b4 |
+| main.rs:384:13:384:14 | c2 | main.rs:384:13:384:14 | c2 |
+| main.rs:391:9:391:10 | c2 | main.rs:384:13:384:14 | c2 |
+| main.rs:392:9:392:10 | b4 | main.rs:383:13:383:14 | b4 |
+| main.rs:393:9:393:11 | a10 | main.rs:382:13:382:15 | a10 |
+| main.rs:405:13:405:15 | a10 | main.rs:405:13:405:15 | a10 |
+| main.rs:406:13:406:14 | b4 | main.rs:406:13:406:14 | b4 |
+| main.rs:418:9:418:23 | example_closure | main.rs:418:9:418:23 | example_closure |
+| main.rs:419:10:419:10 | x | main.rs:419:10:419:10 | x |
+| main.rs:421:9:421:10 | n1 | main.rs:421:9:421:10 | n1 |
+| main.rs:426:9:426:26 | immutable_variable | main.rs:426:9:426:26 | immutable_variable |
+| main.rs:427:6:427:6 | x | main.rs:427:6:427:6 | x |
+| main.rs:429:9:429:10 | n2 | main.rs:429:9:429:10 | n2 |
+| main.rs:436:9:436:9 | f | main.rs:436:9:436:9 | f |
+| main.rs:437:10:437:10 | x | main.rs:437:10:437:10 | x |
+| main.rs:441:10:441:10 | x | main.rs:441:10:441:10 | x |
+| main.rs:450:14:450:14 | x | main.rs:450:14:450:14 | x |
+| main.rs:459:13:459:13 | f | main.rs:459:13:459:13 | f |
+| main.rs:460:14:460:14 | x | main.rs:460:14:460:14 | x |
+| main.rs:467:9:467:9 | v | main.rs:467:9:467:9 | v |
+| main.rs:469:9:469:12 | text | main.rs:469:9:469:12 | text |
+| main.rs:476:13:476:13 | a | main.rs:476:13:476:13 | a |
+| main.rs:477:5:477:5 | a | main.rs:476:13:476:13 | a |
+| main.rs:479:6:479:11 | &mut a | main.rs:476:13:476:13 | a |
+| main.rs:484:13:484:13 | i | main.rs:484:13:484:13 | i |
+| main.rs:485:9:485:13 | ref_i | main.rs:485:9:485:13 | ref_i |
+| main.rs:486:9:486:14 | &mut i | main.rs:484:13:484:13 | i |
+| main.rs:491:17:491:17 | x | main.rs:491:17:491:17 | x |
+| main.rs:498:22:498:22 | x | main.rs:498:22:498:22 | x |
+| main.rs:498:38:498:38 | y | main.rs:498:38:498:38 | y |
+| main.rs:507:13:507:13 | x | main.rs:507:13:507:13 | x |
+| main.rs:508:9:508:9 | y | main.rs:508:9:508:9 | y |
+| main.rs:509:22:509:27 | &mut x | main.rs:507:13:507:13 | x |
+| main.rs:515:13:515:13 | z | main.rs:515:13:515:13 | z |
+| main.rs:516:9:516:9 | w | main.rs:516:9:516:9 | w |
+| main.rs:519:9:519:14 | &mut z | main.rs:515:13:515:13 | z |
+| main.rs:529:13:529:13 | x | main.rs:529:13:529:13 | x |
+| main.rs:530:9:530:9 | y | main.rs:530:9:530:9 | y |
+| main.rs:531:9:531:14 | &mut x | main.rs:529:13:529:13 | x |
+| main.rs:537:9:537:9 | x | main.rs:537:9:537:9 | x |
+| main.rs:540:9:540:11 | cap | main.rs:540:9:540:11 | cap |
+| main.rs:540:15:542:5 | x | main.rs:537:9:537:9 | x |
+| main.rs:548:13:548:13 | x | main.rs:548:13:548:13 | x |
+| main.rs:551:9:551:16 | closure1 | main.rs:551:9:551:16 | closure1 |
+| main.rs:551:20:553:5 | x | main.rs:548:13:548:13 | x |
+| main.rs:557:13:557:13 | y | main.rs:557:13:557:13 | y |
+| main.rs:560:13:560:20 | closure2 | main.rs:560:13:560:20 | closure2 |
+| main.rs:561:9:561:9 | y | main.rs:557:13:557:13 | y |
+| main.rs:563:5:563:14 | y | main.rs:557:13:557:13 | y |
+| main.rs:566:13:566:13 | z | main.rs:566:13:566:13 | z |
+| main.rs:569:13:569:20 | closure3 | main.rs:569:13:569:20 | closure3 |
+| main.rs:569:24:571:5 | z | main.rs:566:13:566:13 | z |
+| main.rs:577:13:577:13 | i | main.rs:577:13:577:13 | i |
+| main.rs:578:9:578:13 | block | main.rs:578:9:578:13 | block |
+| main.rs:579:9:579:9 | i | main.rs:577:13:577:13 | i |
+| main.rs:582:5:582:15 | i | main.rs:577:13:577:13 | i |
+| main.rs:586:8:586:8 | b | main.rs:586:8:586:8 | b |
+| main.rs:587:13:587:13 | x | main.rs:587:13:587:13 | x |
+| main.rs:591:13:600:5 | SSA phi(x) | main.rs:587:13:587:13 | x |
+| main.rs:593:9:593:9 | x | main.rs:587:13:587:13 | x |
+| main.rs:597:9:597:9 | x | main.rs:587:13:587:13 | x |
+| main.rs:604:13:604:14 | b1 | main.rs:604:13:604:14 | b1 |
+| main.rs:604:23:604:24 | b2 | main.rs:604:23:604:24 | b2 |
+| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x |
+| main.rs:628:20:628:23 | self | main.rs:628:20:628:23 | self |
+| main.rs:632:11:632:14 | self | main.rs:632:11:632:14 | self |
+| main.rs:636:23:636:26 | self | main.rs:636:23:636:26 | self |
+| main.rs:637:17:637:17 | f | main.rs:637:17:637:17 | f |
+| main.rs:637:21:640:9 | self | main.rs:636:23:636:26 | self |
+| main.rs:637:22:637:22 | n | main.rs:637:22:637:22 | n |
+| main.rs:647:13:647:13 | a | main.rs:647:13:647:13 | a |
+| main.rs:648:15:648:15 | a | main.rs:647:13:647:13 | a |
+| main.rs:651:5:651:5 | a | main.rs:647:13:647:13 | a |
+| main.rs:656:13:656:13 | a | main.rs:656:13:656:13 | a |
+| main.rs:660:5:660:5 | a | main.rs:656:13:656:13 | a |
+| main.rs:665:9:665:9 | x | main.rs:665:9:665:9 | x |
+| main.rs:669:9:669:9 | z | main.rs:669:9:669:9 | z |
+| main.rs:678:17:678:20 | self | main.rs:678:17:678:20 | self |
+| main.rs:684:13:684:13 | a | main.rs:684:13:684:13 | a |
+| main.rs:685:5:685:5 | a | main.rs:684:13:684:13 | a |
+| main.rs:706:9:706:22 | var_from_macro | main.rs:706:9:706:22 | var_from_macro |
+| main.rs:707:9:707:21 | var_in_macro | main.rs:707:9:707:21 | var_in_macro |
+| main.rs:709:9:709:20 | var_in_macro | main.rs:709:9:709:20 | var_in_macro |
+| main.rs:714:15:714:28 | var_in_macro | main.rs:714:15:714:28 | var_in_macro |
+| main.rs:720:5:720:5 | x | main.rs:719:9:719:9 | x |
+| main.rs:725:13:725:13 | x | main.rs:725:13:725:13 | x |
+| main.rs:726:13:726:15 | cap | main.rs:726:13:726:15 | cap |
+| main.rs:726:19:731:5 | x | main.rs:725:13:725:13 | x |
+| main.rs:726:20:726:20 | b | main.rs:726:20:726:20 | b |
+| main.rs:728:17:730:9 | SSA phi(x) | main.rs:725:13:725:13 | x |
+| main.rs:729:13:729:13 | x | main.rs:725:13:725:13 | x |
+| main.rs:732:5:732:13 | x | main.rs:725:13:725:13 | x |
read
| main.rs:5:14:5:14 | s | main.rs:5:14:5:14 | s | main.rs:7:20:7:20 | s |
| main.rs:10:14:10:14 | i | main.rs:10:14:10:14 | i | main.rs:12:20:12:20 | i |
@@ -197,200 +198,202 @@ read
| main.rs:20:9:20:10 | x1 | main.rs:20:9:20:10 | x1 | main.rs:21:15:21:16 | x1 |
| main.rs:25:13:25:14 | x2 | main.rs:25:13:25:14 | x2 | main.rs:26:15:26:16 | x2 |
| main.rs:27:5:27:6 | x2 | main.rs:25:13:25:14 | x2 | main.rs:28:15:28:16 | x2 |
-| main.rs:32:13:32:13 | x | main.rs:32:13:32:13 | x | main.rs:33:20:33:20 | x |
-| main.rs:34:5:34:5 | x | main.rs:32:13:32:13 | x | main.rs:35:20:35:20 | x |
-| main.rs:39:9:39:10 | x3 | main.rs:39:9:39:10 | x3 | main.rs:40:15:40:16 | x3 |
-| main.rs:39:9:39:10 | x3 | main.rs:39:9:39:10 | x3 | main.rs:42:9:42:10 | x3 |
-| main.rs:41:9:41:10 | x3 | main.rs:41:9:41:10 | x3 | main.rs:43:15:43:16 | x3 |
-| main.rs:47:9:47:10 | x4 | main.rs:47:9:47:10 | x4 | main.rs:48:15:48:16 | x4 |
-| main.rs:47:9:47:10 | x4 | main.rs:47:9:47:10 | x4 | main.rs:53:15:53:16 | x4 |
-| main.rs:50:13:50:14 | x4 | main.rs:50:13:50:14 | x4 | main.rs:51:19:51:20 | x4 |
-| main.rs:64:13:64:14 | a1 | main.rs:64:13:64:14 | a1 | main.rs:72:15:72:16 | a1 |
-| main.rs:65:13:65:14 | b1 | main.rs:65:13:65:14 | b1 | main.rs:73:15:73:16 | b1 |
-| main.rs:68:13:68:13 | x | main.rs:68:13:68:13 | x | main.rs:74:15:74:15 | x |
-| main.rs:69:13:69:13 | y | main.rs:69:13:69:13 | y | main.rs:75:15:75:15 | y |
-| main.rs:79:9:79:10 | p1 | main.rs:79:9:79:10 | p1 | main.rs:83:9:83:10 | p1 |
-| main.rs:81:12:81:13 | a2 | main.rs:81:12:81:13 | a2 | main.rs:84:15:84:16 | a2 |
-| main.rs:82:12:82:13 | b2 | main.rs:82:12:82:13 | b2 | main.rs:85:15:85:16 | b2 |
-| main.rs:89:9:89:10 | s1 | main.rs:89:9:89:10 | s1 | main.rs:92:11:92:12 | s1 |
-| main.rs:91:21:91:22 | s2 | main.rs:91:21:91:22 | s2 | main.rs:93:19:93:20 | s2 |
-| main.rs:98:9:98:9 | x | main.rs:98:9:98:9 | x | main.rs:100:7:100:7 | x |
-| main.rs:98:9:98:9 | x | main.rs:98:9:98:9 | x | main.rs:103:13:103:13 | x |
-| main.rs:99:14:99:14 | x | main.rs:99:14:99:14 | x | main.rs:107:15:107:15 | x |
-| main.rs:102:13:102:13 | x | main.rs:102:13:102:13 | x | main.rs:104:19:104:19 | x |
-| main.rs:111:9:111:10 | s1 | main.rs:111:9:111:10 | s1 | main.rs:114:11:114:12 | s1 |
-| main.rs:113:24:113:25 | s2 | main.rs:113:24:113:25 | s2 | main.rs:115:19:115:20 | s2 |
-| main.rs:120:9:120:10 | x6 | main.rs:120:9:120:10 | x6 | main.rs:123:11:123:12 | x6 |
-| main.rs:121:9:121:10 | y1 | main.rs:121:9:121:10 | y1 | main.rs:133:15:133:16 | y1 |
-| main.rs:125:14:125:15 | y1 | main.rs:125:14:125:15 | y1 | main.rs:128:23:128:24 | y1 |
-| main.rs:137:9:137:15 | numbers | main.rs:137:9:137:15 | numbers | main.rs:139:11:139:17 | numbers |
-| main.rs:137:9:137:15 | numbers | main.rs:137:9:137:15 | numbers | main.rs:154:11:154:17 | numbers |
-| main.rs:142:13:142:17 | first | main.rs:142:13:142:17 | first | main.rs:148:23:148:27 | first |
-| main.rs:144:13:144:17 | third | main.rs:144:13:144:17 | third | main.rs:149:23:149:27 | third |
-| main.rs:146:13:146:17 | fifth | main.rs:146:13:146:17 | fifth | main.rs:150:23:150:27 | fifth |
-| main.rs:157:13:157:17 | first | main.rs:157:13:157:17 | first | main.rs:161:23:161:27 | first |
-| main.rs:159:13:159:16 | last | main.rs:159:13:159:16 | last | main.rs:162:23:162:26 | last |
-| main.rs:168:9:168:10 | p2 | main.rs:168:9:168:10 | p2 | main.rs:170:11:170:12 | p2 |
-| main.rs:172:16:172:17 | x7 | main.rs:172:16:172:17 | x7 | main.rs:173:24:173:25 | x7 |
-| main.rs:182:9:182:11 | msg | main.rs:182:9:182:11 | msg | main.rs:184:11:184:13 | msg |
-| main.rs:187:17:187:27 | id_variable | main.rs:187:17:187:27 | id_variable | main.rs:188:24:188:34 | id_variable |
-| main.rs:192:26:192:27 | id | main.rs:192:26:192:27 | id | main.rs:195:23:195:24 | id |
-| main.rs:206:9:206:14 | either | main.rs:206:9:206:14 | either | main.rs:207:11:207:16 | either |
-| main.rs:208:9:208:44 | SSA phi(a3) | main.rs:208:9:208:44 | a3 | main.rs:209:26:209:27 | a3 |
-| main.rs:220:9:220:10 | tv | main.rs:220:9:220:10 | tv | main.rs:221:11:221:12 | tv |
-| main.rs:220:9:220:10 | tv | main.rs:220:9:220:10 | tv | main.rs:225:11:225:12 | tv |
-| main.rs:220:9:220:10 | tv | main.rs:220:9:220:10 | tv | main.rs:229:11:229:12 | tv |
-| main.rs:222:9:222:81 | SSA phi(a4) | main.rs:222:9:222:81 | a4 | main.rs:223:26:223:27 | a4 |
-| main.rs:226:9:226:83 | SSA phi(a5) | main.rs:226:9:226:83 | a5 | main.rs:227:26:227:27 | a5 |
-| main.rs:230:9:230:83 | SSA phi(a6) | main.rs:230:9:230:83 | a6 | main.rs:231:26:231:27 | a6 |
-| main.rs:236:9:236:14 | either | main.rs:236:9:236:14 | either | main.rs:237:11:237:16 | either |
-| main.rs:238:9:238:44 | [match(true)] SSA phi(a7) | main.rs:238:9:238:44 | a7 | main.rs:239:16:239:17 | a7 |
-| main.rs:238:9:238:44 | [match(true)] SSA phi(a7) | main.rs:238:9:238:44 | a7 | main.rs:240:26:240:27 | a7 |
-| main.rs:246:9:246:14 | either | main.rs:246:9:246:14 | either | main.rs:248:11:248:16 | either |
-| main.rs:249:13:249:13 | e | main.rs:249:13:249:13 | e | main.rs:254:15:254:15 | e |
-| main.rs:250:14:250:51 | [match(true)] SSA phi(a11) | main.rs:250:14:250:51 | a11 | main.rs:252:23:252:25 | a11 |
-| main.rs:253:33:253:35 | a12 | main.rs:253:33:253:35 | a12 | main.rs:255:28:255:30 | a12 |
-| main.rs:270:9:270:10 | fv | main.rs:270:9:270:10 | fv | main.rs:271:11:271:12 | fv |
-| main.rs:272:9:272:109 | SSA phi(a13) | main.rs:272:9:272:109 | a13 | main.rs:273:26:273:28 | a13 |
-| main.rs:279:9:279:9 | x | main.rs:279:9:279:9 | x | main.rs:281:7:281:7 | x |
-| main.rs:279:9:279:9 | x | main.rs:279:9:279:9 | x | main.rs:288:13:288:13 | x |
-| main.rs:280:17:280:17 | x | main.rs:280:17:280:17 | x | main.rs:283:5:283:5 | x |
-| main.rs:280:17:280:17 | x | main.rs:280:17:280:17 | x | main.rs:285:19:285:19 | x |
-| main.rs:287:13:287:13 | x | main.rs:287:13:287:13 | x | main.rs:289:19:289:19 | x |
-| main.rs:295:9:295:9 | x | main.rs:295:9:295:9 | x | main.rs:297:7:297:7 | x |
-| main.rs:295:9:295:9 | x | main.rs:295:9:295:9 | x | main.rs:307:13:307:13 | x |
-| main.rs:296:17:296:17 | x | main.rs:296:17:296:17 | x | main.rs:300:12:300:12 | x |
-| main.rs:299:14:299:14 | x | main.rs:299:14:299:14 | x | main.rs:302:5:302:5 | x |
-| main.rs:299:14:299:14 | x | main.rs:299:14:299:14 | x | main.rs:304:19:304:19 | x |
-| main.rs:306:13:306:13 | x | main.rs:306:13:306:13 | x | main.rs:308:19:308:19 | x |
-| main.rs:314:9:314:9 | x | main.rs:314:9:314:9 | x | main.rs:316:7:316:7 | x |
-| main.rs:314:9:314:9 | x | main.rs:314:9:314:9 | x | main.rs:327:15:327:15 | x |
-| main.rs:315:20:315:20 | x | main.rs:315:20:315:20 | x | main.rs:319:12:319:12 | x |
-| main.rs:318:14:318:14 | x | main.rs:318:14:318:14 | x | main.rs:321:5:321:5 | x |
-| main.rs:318:14:318:14 | x | main.rs:318:14:318:14 | x | main.rs:323:19:323:19 | x |
-| main.rs:332:9:332:9 | x | main.rs:332:9:332:9 | x | main.rs:333:11:333:11 | x |
-| main.rs:332:9:332:9 | x | main.rs:332:9:332:9 | x | main.rs:341:15:341:15 | x |
-| main.rs:334:14:334:14 | x | main.rs:334:14:334:14 | x | main.rs:336:18:336:18 | x |
-| main.rs:335:20:335:20 | x | main.rs:335:20:335:20 | x | main.rs:337:19:337:19 | x |
-| main.rs:346:9:346:9 | x | main.rs:346:9:346:9 | x | main.rs:348:7:348:7 | x |
-| main.rs:346:9:346:9 | x | main.rs:346:9:346:9 | x | main.rs:353:7:353:7 | x |
-| main.rs:346:9:346:9 | x | main.rs:346:9:346:9 | x | main.rs:357:19:357:19 | x |
-| main.rs:347:16:347:16 | x | main.rs:347:16:347:16 | x | main.rs:350:19:350:19 | x |
-| main.rs:352:20:352:20 | x | main.rs:352:20:352:20 | x | main.rs:355:19:355:19 | x |
-| main.rs:362:5:362:6 | a8 | main.rs:362:5:362:6 | a8 | main.rs:368:15:368:16 | a8 |
-| main.rs:364:9:364:10 | b3 | main.rs:364:9:364:10 | b3 | main.rs:369:15:369:16 | b3 |
-| main.rs:365:9:365:10 | c1 | main.rs:365:9:365:10 | c1 | main.rs:370:15:370:16 | c1 |
-| main.rs:373:20:373:55 | SSA phi(a9) | main.rs:373:20:373:55 | a9 | main.rs:375:15:375:16 | a9 |
-| main.rs:380:13:380:15 | a10 | main.rs:380:13:380:15 | a10 | main.rs:384:15:384:17 | a10 |
-| main.rs:381:13:381:14 | b4 | main.rs:381:13:381:14 | b4 | main.rs:385:15:385:16 | b4 |
-| main.rs:382:13:382:14 | c2 | main.rs:382:13:382:14 | c2 | main.rs:386:15:386:16 | c2 |
-| main.rs:389:9:389:10 | c2 | main.rs:382:13:382:14 | c2 | main.rs:395:9:395:10 | c2 |
-| main.rs:389:9:389:10 | c2 | main.rs:382:13:382:14 | c2 | main.rs:399:15:399:16 | c2 |
-| main.rs:390:9:390:10 | b4 | main.rs:381:13:381:14 | b4 | main.rs:394:9:394:10 | b4 |
-| main.rs:390:9:390:10 | b4 | main.rs:381:13:381:14 | b4 | main.rs:398:15:398:16 | b4 |
-| main.rs:390:9:390:10 | b4 | main.rs:381:13:381:14 | b4 | main.rs:412:15:412:16 | b4 |
-| main.rs:391:9:391:11 | a10 | main.rs:380:13:380:15 | a10 | main.rs:393:9:393:11 | a10 |
-| main.rs:391:9:391:11 | a10 | main.rs:380:13:380:15 | a10 | main.rs:397:15:397:17 | a10 |
-| main.rs:391:9:391:11 | a10 | main.rs:380:13:380:15 | a10 | main.rs:411:15:411:17 | a10 |
-| main.rs:403:13:403:15 | a10 | main.rs:403:13:403:15 | a10 | main.rs:406:23:406:25 | a10 |
-| main.rs:404:13:404:14 | b4 | main.rs:404:13:404:14 | b4 | main.rs:407:23:407:24 | b4 |
-| main.rs:416:9:416:23 | example_closure | main.rs:416:9:416:23 | example_closure | main.rs:420:9:420:23 | example_closure |
-| main.rs:417:10:417:10 | x | main.rs:417:10:417:10 | x | main.rs:418:9:418:9 | x |
-| main.rs:419:9:419:10 | n1 | main.rs:419:9:419:10 | n1 | main.rs:421:15:421:16 | n1 |
-| main.rs:424:9:424:26 | immutable_variable | main.rs:424:9:424:26 | immutable_variable | main.rs:428:9:428:26 | immutable_variable |
-| main.rs:425:6:425:6 | x | main.rs:425:6:425:6 | x | main.rs:426:9:426:9 | x |
-| main.rs:427:9:427:10 | n2 | main.rs:427:9:427:10 | n2 | main.rs:429:15:429:16 | n2 |
-| main.rs:434:9:434:9 | f | main.rs:434:9:434:9 | f | main.rs:437:15:437:15 | f |
-| main.rs:434:9:434:9 | f | main.rs:434:9:434:9 | f | main.rs:444:15:444:15 | f |
-| main.rs:435:10:435:10 | x | main.rs:435:10:435:10 | x | main.rs:436:9:436:9 | x |
-| main.rs:439:10:439:10 | x | main.rs:439:10:439:10 | x | main.rs:441:9:441:9 | x |
-| main.rs:448:14:448:14 | x | main.rs:448:14:448:14 | x | main.rs:450:17:450:17 | x |
-| main.rs:457:13:457:13 | f | main.rs:457:13:457:13 | f | main.rs:460:19:460:19 | f |
-| main.rs:458:14:458:14 | x | main.rs:458:14:458:14 | x | main.rs:459:13:459:13 | x |
-| main.rs:465:9:465:9 | v | main.rs:465:9:465:9 | v | main.rs:468:12:468:12 | v |
-| main.rs:467:9:467:12 | text | main.rs:467:9:467:12 | text | main.rs:469:19:469:22 | text |
-| main.rs:474:13:474:13 | a | main.rs:474:13:474:13 | a | main.rs:475:5:475:5 | a |
-| main.rs:475:5:475:5 | a | main.rs:474:13:474:13 | a | main.rs:476:15:476:15 | a |
-| main.rs:475:5:475:5 | a | main.rs:474:13:474:13 | a | main.rs:477:11:477:11 | a |
-| main.rs:477:6:477:11 | &mut a | main.rs:474:13:474:13 | a | main.rs:478:15:478:15 | a |
-| main.rs:482:13:482:13 | i | main.rs:482:13:482:13 | i | main.rs:484:14:484:14 | i |
-| main.rs:483:9:483:13 | ref_i | main.rs:483:9:483:13 | ref_i | main.rs:485:6:485:10 | ref_i |
-| main.rs:484:9:484:14 | &mut i | main.rs:482:13:482:13 | i | main.rs:486:15:486:15 | i |
-| main.rs:489:17:489:17 | x | main.rs:489:17:489:17 | x | main.rs:490:6:490:6 | x |
-| main.rs:489:17:489:17 | x | main.rs:489:17:489:17 | x | main.rs:491:10:491:10 | x |
-| main.rs:489:17:489:17 | x | main.rs:489:17:489:17 | x | main.rs:492:10:492:10 | x |
-| main.rs:489:17:489:17 | x | main.rs:489:17:489:17 | x | main.rs:493:12:493:12 | x |
-| main.rs:496:22:496:22 | x | main.rs:496:22:496:22 | x | main.rs:497:6:497:6 | x |
-| main.rs:496:22:496:22 | x | main.rs:496:22:496:22 | x | main.rs:498:10:498:10 | x |
-| main.rs:496:22:496:22 | x | main.rs:496:22:496:22 | x | main.rs:499:10:499:10 | x |
-| main.rs:496:22:496:22 | x | main.rs:496:22:496:22 | x | main.rs:501:9:501:9 | x |
-| main.rs:496:38:496:38 | y | main.rs:496:38:496:38 | y | main.rs:500:6:500:6 | y |
-| main.rs:505:13:505:13 | x | main.rs:505:13:505:13 | x | main.rs:507:27:507:27 | x |
-| main.rs:506:9:506:9 | y | main.rs:506:9:506:9 | y | main.rs:508:6:508:6 | y |
-| main.rs:507:22:507:27 | &mut x | main.rs:505:13:505:13 | x | main.rs:511:15:511:15 | x |
-| main.rs:507:22:507:27 | &mut x | main.rs:505:13:505:13 | x | main.rs:515:19:515:19 | x |
-| main.rs:513:13:513:13 | z | main.rs:513:13:513:13 | z | main.rs:517:14:517:14 | z |
-| main.rs:514:9:514:9 | w | main.rs:514:9:514:9 | w | main.rs:518:9:518:9 | w |
-| main.rs:514:9:514:9 | w | main.rs:514:9:514:9 | w | main.rs:520:7:520:7 | w |
-| main.rs:517:9:517:14 | &mut z | main.rs:513:13:513:13 | z | main.rs:523:15:523:15 | z |
-| main.rs:527:13:527:13 | x | main.rs:527:13:527:13 | x | main.rs:529:14:529:14 | x |
-| main.rs:528:9:528:9 | y | main.rs:528:9:528:9 | y | main.rs:530:6:530:6 | y |
-| main.rs:529:9:529:14 | &mut x | main.rs:527:13:527:13 | x | main.rs:531:15:531:15 | x |
-| main.rs:535:9:535:9 | x | main.rs:535:9:535:9 | x | main.rs:542:15:542:15 | x |
-| main.rs:538:9:538:11 | cap | main.rs:538:9:538:11 | cap | main.rs:541:5:541:7 | cap |
-| main.rs:538:15:540:5 | x | main.rs:535:9:535:9 | x | main.rs:539:19:539:19 | x |
-| main.rs:546:13:546:13 | x | main.rs:546:13:546:13 | x | main.rs:553:15:553:15 | x |
-| main.rs:549:9:549:16 | closure1 | main.rs:549:9:549:16 | closure1 | main.rs:552:5:552:12 | closure1 |
-| main.rs:549:20:551:5 | x | main.rs:546:13:546:13 | x | main.rs:550:19:550:19 | x |
-| main.rs:558:13:558:20 | closure2 | main.rs:558:13:558:20 | closure2 | main.rs:561:5:561:12 | closure2 |
-| main.rs:561:5:561:14 | y | main.rs:555:13:555:13 | y | main.rs:562:15:562:15 | y |
-| main.rs:564:13:564:13 | z | main.rs:564:13:564:13 | z | main.rs:571:15:571:15 | z |
-| main.rs:567:13:567:20 | closure3 | main.rs:567:13:567:20 | closure3 | main.rs:570:5:570:12 | closure3 |
-| main.rs:567:24:569:5 | z | main.rs:564:13:564:13 | z | main.rs:568:9:568:9 | z |
-| main.rs:576:9:576:13 | block | main.rs:576:9:576:13 | block | main.rs:580:5:580:9 | block |
-| main.rs:580:5:580:15 | i | main.rs:575:13:575:13 | i | main.rs:581:15:581:15 | i |
-| main.rs:584:8:584:8 | b | main.rs:584:8:584:8 | b | main.rs:589:16:589:16 | b |
-| main.rs:585:13:585:13 | x | main.rs:585:13:585:13 | x | main.rs:586:15:586:15 | x |
-| main.rs:585:13:585:13 | x | main.rs:585:13:585:13 | x | main.rs:587:15:587:15 | x |
-| main.rs:589:13:598:5 | SSA phi(x) | main.rs:585:13:585:13 | x | main.rs:599:15:599:15 | x |
-| main.rs:591:9:591:9 | x | main.rs:585:13:585:13 | x | main.rs:592:19:592:19 | x |
-| main.rs:591:9:591:9 | x | main.rs:585:13:585:13 | x | main.rs:593:19:593:19 | x |
-| main.rs:595:9:595:9 | x | main.rs:585:13:585:13 | x | main.rs:596:19:596:19 | x |
-| main.rs:595:9:595:9 | x | main.rs:585:13:585:13 | x | main.rs:597:19:597:19 | x |
-| main.rs:602:13:602:14 | b1 | main.rs:602:13:602:14 | b1 | main.rs:605:16:605:17 | b1 |
-| main.rs:602:23:602:24 | b2 | main.rs:602:23:602:24 | b2 | main.rs:613:16:613:17 | b2 |
-| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x | main.rs:607:19:607:19 | x |
-| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x | main.rs:609:19:609:19 | x |
-| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x | main.rs:615:19:615:19 | x |
-| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x | main.rs:617:19:617:19 | x |
-| main.rs:626:20:626:23 | self | main.rs:626:20:626:23 | self | main.rs:627:16:627:19 | self |
-| main.rs:630:11:630:14 | self | main.rs:630:11:630:14 | self | main.rs:631:9:631:12 | self |
-| main.rs:635:17:635:17 | f | main.rs:635:17:635:17 | f | main.rs:639:9:639:9 | f |
-| main.rs:635:17:635:17 | f | main.rs:635:17:635:17 | f | main.rs:640:9:640:9 | f |
-| main.rs:635:21:638:9 | self | main.rs:634:23:634:26 | self | main.rs:637:13:637:16 | self |
-| main.rs:635:22:635:22 | n | main.rs:635:22:635:22 | n | main.rs:637:25:637:25 | n |
-| main.rs:645:13:645:13 | a | main.rs:645:13:645:13 | a | main.rs:646:15:646:15 | a |
-| main.rs:646:15:646:15 | a | main.rs:645:13:645:13 | a | main.rs:647:5:647:5 | a |
-| main.rs:646:15:646:15 | a | main.rs:645:13:645:13 | a | main.rs:648:15:648:15 | a |
-| main.rs:649:5:649:5 | a | main.rs:645:13:645:13 | a | main.rs:650:15:650:15 | a |
-| main.rs:654:13:654:13 | a | main.rs:654:13:654:13 | a | main.rs:655:15:655:15 | a |
-| main.rs:654:13:654:13 | a | main.rs:654:13:654:13 | a | main.rs:656:5:656:5 | a |
-| main.rs:654:13:654:13 | a | main.rs:654:13:654:13 | a | main.rs:657:15:657:15 | a |
-| main.rs:658:5:658:5 | a | main.rs:654:13:654:13 | a | main.rs:659:15:659:15 | a |
-| main.rs:663:9:663:9 | x | main.rs:663:9:663:9 | x | main.rs:664:20:664:20 | x |
-| main.rs:663:9:663:9 | x | main.rs:663:9:663:9 | x | main.rs:665:15:665:15 | x |
-| main.rs:667:9:667:9 | z | main.rs:667:9:667:9 | z | main.rs:668:20:668:20 | z |
-| main.rs:676:17:676:20 | self | main.rs:676:17:676:20 | self | main.rs:677:10:677:13 | self |
-| main.rs:682:13:682:13 | a | main.rs:682:13:682:13 | a | main.rs:683:5:683:5 | a |
-| main.rs:683:5:683:5 | a | main.rs:682:13:682:13 | a | main.rs:686:15:686:15 | a |
-| main.rs:704:9:704:22 | var_from_macro | main.rs:704:9:704:22 | var_from_macro | main.rs:706:15:706:28 | var_from_macro |
-| main.rs:705:9:705:21 | var_in_macro | main.rs:705:9:705:21 | var_in_macro | main.rs:705:9:705:21 | var_in_macro |
-| main.rs:707:9:707:20 | var_in_macro | main.rs:707:9:707:20 | var_in_macro | main.rs:713:15:713:26 | var_in_macro |
-| main.rs:712:15:712:28 | var_in_macro | main.rs:712:15:712:28 | var_in_macro | main.rs:712:30:712:41 | var_in_macro |
-| main.rs:718:5:718:5 | x | main.rs:717:9:717:9 | x | main.rs:719:15:719:15 | x |
-| main.rs:724:13:724:15 | cap | main.rs:724:13:724:15 | cap | main.rs:730:5:730:7 | cap |
-| main.rs:724:20:724:20 | b | main.rs:724:20:724:20 | b | main.rs:726:20:726:20 | b |
-| main.rs:730:5:730:13 | x | main.rs:723:13:723:13 | x | main.rs:731:15:731:15 | x |
+| main.rs:27:5:27:6 | x2 | main.rs:25:13:25:14 | x2 | main.rs:29:10:29:11 | x2 |
+| main.rs:29:5:29:6 | x2 | main.rs:25:13:25:14 | x2 | main.rs:30:15:30:16 | x2 |
+| main.rs:34:13:34:13 | x | main.rs:34:13:34:13 | x | main.rs:35:20:35:20 | x |
+| main.rs:36:5:36:5 | x | main.rs:34:13:34:13 | x | main.rs:37:20:37:20 | x |
+| main.rs:41:9:41:10 | x3 | main.rs:41:9:41:10 | x3 | main.rs:42:15:42:16 | x3 |
+| main.rs:41:9:41:10 | x3 | main.rs:41:9:41:10 | x3 | main.rs:44:9:44:10 | x3 |
+| main.rs:43:9:43:10 | x3 | main.rs:43:9:43:10 | x3 | main.rs:45:15:45:16 | x3 |
+| main.rs:49:9:49:10 | x4 | main.rs:49:9:49:10 | x4 | main.rs:50:15:50:16 | x4 |
+| main.rs:49:9:49:10 | x4 | main.rs:49:9:49:10 | x4 | main.rs:55:15:55:16 | x4 |
+| main.rs:52:13:52:14 | x4 | main.rs:52:13:52:14 | x4 | main.rs:53:19:53:20 | x4 |
+| main.rs:66:13:66:14 | a1 | main.rs:66:13:66:14 | a1 | main.rs:74:15:74:16 | a1 |
+| main.rs:67:13:67:14 | b1 | main.rs:67:13:67:14 | b1 | main.rs:75:15:75:16 | b1 |
+| main.rs:70:13:70:13 | x | main.rs:70:13:70:13 | x | main.rs:76:15:76:15 | x |
+| main.rs:71:13:71:13 | y | main.rs:71:13:71:13 | y | main.rs:77:15:77:15 | y |
+| main.rs:81:9:81:10 | p1 | main.rs:81:9:81:10 | p1 | main.rs:85:9:85:10 | p1 |
+| main.rs:83:12:83:13 | a2 | main.rs:83:12:83:13 | a2 | main.rs:86:15:86:16 | a2 |
+| main.rs:84:12:84:13 | b2 | main.rs:84:12:84:13 | b2 | main.rs:87:15:87:16 | b2 |
+| main.rs:91:9:91:10 | s1 | main.rs:91:9:91:10 | s1 | main.rs:94:11:94:12 | s1 |
+| main.rs:93:21:93:22 | s2 | main.rs:93:21:93:22 | s2 | main.rs:95:19:95:20 | s2 |
+| main.rs:100:9:100:9 | x | main.rs:100:9:100:9 | x | main.rs:102:7:102:7 | x |
+| main.rs:100:9:100:9 | x | main.rs:100:9:100:9 | x | main.rs:105:13:105:13 | x |
+| main.rs:101:14:101:14 | x | main.rs:101:14:101:14 | x | main.rs:109:15:109:15 | x |
+| main.rs:104:13:104:13 | x | main.rs:104:13:104:13 | x | main.rs:106:19:106:19 | x |
+| main.rs:113:9:113:10 | s1 | main.rs:113:9:113:10 | s1 | main.rs:116:11:116:12 | s1 |
+| main.rs:115:24:115:25 | s2 | main.rs:115:24:115:25 | s2 | main.rs:117:19:117:20 | s2 |
+| main.rs:122:9:122:10 | x6 | main.rs:122:9:122:10 | x6 | main.rs:125:11:125:12 | x6 |
+| main.rs:123:9:123:10 | y1 | main.rs:123:9:123:10 | y1 | main.rs:135:15:135:16 | y1 |
+| main.rs:127:14:127:15 | y1 | main.rs:127:14:127:15 | y1 | main.rs:130:23:130:24 | y1 |
+| main.rs:139:9:139:15 | numbers | main.rs:139:9:139:15 | numbers | main.rs:141:11:141:17 | numbers |
+| main.rs:139:9:139:15 | numbers | main.rs:139:9:139:15 | numbers | main.rs:156:11:156:17 | numbers |
+| main.rs:144:13:144:17 | first | main.rs:144:13:144:17 | first | main.rs:150:23:150:27 | first |
+| main.rs:146:13:146:17 | third | main.rs:146:13:146:17 | third | main.rs:151:23:151:27 | third |
+| main.rs:148:13:148:17 | fifth | main.rs:148:13:148:17 | fifth | main.rs:152:23:152:27 | fifth |
+| main.rs:159:13:159:17 | first | main.rs:159:13:159:17 | first | main.rs:163:23:163:27 | first |
+| main.rs:161:13:161:16 | last | main.rs:161:13:161:16 | last | main.rs:164:23:164:26 | last |
+| main.rs:170:9:170:10 | p2 | main.rs:170:9:170:10 | p2 | main.rs:172:11:172:12 | p2 |
+| main.rs:174:16:174:17 | x7 | main.rs:174:16:174:17 | x7 | main.rs:175:24:175:25 | x7 |
+| main.rs:184:9:184:11 | msg | main.rs:184:9:184:11 | msg | main.rs:186:11:186:13 | msg |
+| main.rs:189:17:189:27 | id_variable | main.rs:189:17:189:27 | id_variable | main.rs:190:24:190:34 | id_variable |
+| main.rs:194:26:194:27 | id | main.rs:194:26:194:27 | id | main.rs:197:23:197:24 | id |
+| main.rs:208:9:208:14 | either | main.rs:208:9:208:14 | either | main.rs:209:11:209:16 | either |
+| main.rs:210:9:210:44 | SSA phi(a3) | main.rs:210:9:210:44 | a3 | main.rs:211:26:211:27 | a3 |
+| main.rs:222:9:222:10 | tv | main.rs:222:9:222:10 | tv | main.rs:223:11:223:12 | tv |
+| main.rs:222:9:222:10 | tv | main.rs:222:9:222:10 | tv | main.rs:227:11:227:12 | tv |
+| main.rs:222:9:222:10 | tv | main.rs:222:9:222:10 | tv | main.rs:231:11:231:12 | tv |
+| main.rs:224:9:224:81 | SSA phi(a4) | main.rs:224:9:224:81 | a4 | main.rs:225:26:225:27 | a4 |
+| main.rs:228:9:228:83 | SSA phi(a5) | main.rs:228:9:228:83 | a5 | main.rs:229:26:229:27 | a5 |
+| main.rs:232:9:232:83 | SSA phi(a6) | main.rs:232:9:232:83 | a6 | main.rs:233:26:233:27 | a6 |
+| main.rs:238:9:238:14 | either | main.rs:238:9:238:14 | either | main.rs:239:11:239:16 | either |
+| main.rs:240:9:240:44 | [match(true)] SSA phi(a7) | main.rs:240:9:240:44 | a7 | main.rs:241:16:241:17 | a7 |
+| main.rs:240:9:240:44 | [match(true)] SSA phi(a7) | main.rs:240:9:240:44 | a7 | main.rs:242:26:242:27 | a7 |
+| main.rs:248:9:248:14 | either | main.rs:248:9:248:14 | either | main.rs:250:11:250:16 | either |
+| main.rs:251:13:251:13 | e | main.rs:251:13:251:13 | e | main.rs:256:15:256:15 | e |
+| main.rs:252:14:252:51 | [match(true)] SSA phi(a11) | main.rs:252:14:252:51 | a11 | main.rs:254:23:254:25 | a11 |
+| main.rs:255:33:255:35 | a12 | main.rs:255:33:255:35 | a12 | main.rs:257:28:257:30 | a12 |
+| main.rs:272:9:272:10 | fv | main.rs:272:9:272:10 | fv | main.rs:273:11:273:12 | fv |
+| main.rs:274:9:274:109 | SSA phi(a13) | main.rs:274:9:274:109 | a13 | main.rs:275:26:275:28 | a13 |
+| main.rs:281:9:281:9 | x | main.rs:281:9:281:9 | x | main.rs:283:7:283:7 | x |
+| main.rs:281:9:281:9 | x | main.rs:281:9:281:9 | x | main.rs:290:13:290:13 | x |
+| main.rs:282:17:282:17 | x | main.rs:282:17:282:17 | x | main.rs:285:5:285:5 | x |
+| main.rs:282:17:282:17 | x | main.rs:282:17:282:17 | x | main.rs:287:19:287:19 | x |
+| main.rs:289:13:289:13 | x | main.rs:289:13:289:13 | x | main.rs:291:19:291:19 | x |
+| main.rs:297:9:297:9 | x | main.rs:297:9:297:9 | x | main.rs:299:7:299:7 | x |
+| main.rs:297:9:297:9 | x | main.rs:297:9:297:9 | x | main.rs:309:13:309:13 | x |
+| main.rs:298:17:298:17 | x | main.rs:298:17:298:17 | x | main.rs:302:12:302:12 | x |
+| main.rs:301:14:301:14 | x | main.rs:301:14:301:14 | x | main.rs:304:5:304:5 | x |
+| main.rs:301:14:301:14 | x | main.rs:301:14:301:14 | x | main.rs:306:19:306:19 | x |
+| main.rs:308:13:308:13 | x | main.rs:308:13:308:13 | x | main.rs:310:19:310:19 | x |
+| main.rs:316:9:316:9 | x | main.rs:316:9:316:9 | x | main.rs:318:7:318:7 | x |
+| main.rs:316:9:316:9 | x | main.rs:316:9:316:9 | x | main.rs:329:15:329:15 | x |
+| main.rs:317:20:317:20 | x | main.rs:317:20:317:20 | x | main.rs:321:12:321:12 | x |
+| main.rs:320:14:320:14 | x | main.rs:320:14:320:14 | x | main.rs:323:5:323:5 | x |
+| main.rs:320:14:320:14 | x | main.rs:320:14:320:14 | x | main.rs:325:19:325:19 | x |
+| main.rs:334:9:334:9 | x | main.rs:334:9:334:9 | x | main.rs:335:11:335:11 | x |
+| main.rs:334:9:334:9 | x | main.rs:334:9:334:9 | x | main.rs:343:15:343:15 | x |
+| main.rs:336:14:336:14 | x | main.rs:336:14:336:14 | x | main.rs:338:18:338:18 | x |
+| main.rs:337:20:337:20 | x | main.rs:337:20:337:20 | x | main.rs:339:19:339:19 | x |
+| main.rs:348:9:348:9 | x | main.rs:348:9:348:9 | x | main.rs:350:7:350:7 | x |
+| main.rs:348:9:348:9 | x | main.rs:348:9:348:9 | x | main.rs:355:7:355:7 | x |
+| main.rs:348:9:348:9 | x | main.rs:348:9:348:9 | x | main.rs:359:19:359:19 | x |
+| main.rs:349:16:349:16 | x | main.rs:349:16:349:16 | x | main.rs:352:19:352:19 | x |
+| main.rs:354:20:354:20 | x | main.rs:354:20:354:20 | x | main.rs:357:19:357:19 | x |
+| main.rs:364:5:364:6 | a8 | main.rs:364:5:364:6 | a8 | main.rs:370:15:370:16 | a8 |
+| main.rs:366:9:366:10 | b3 | main.rs:366:9:366:10 | b3 | main.rs:371:15:371:16 | b3 |
+| main.rs:367:9:367:10 | c1 | main.rs:367:9:367:10 | c1 | main.rs:372:15:372:16 | c1 |
+| main.rs:375:20:375:55 | SSA phi(a9) | main.rs:375:20:375:55 | a9 | main.rs:377:15:377:16 | a9 |
+| main.rs:382:13:382:15 | a10 | main.rs:382:13:382:15 | a10 | main.rs:386:15:386:17 | a10 |
+| main.rs:382:13:382:15 | a10 | main.rs:382:13:382:15 | a10 | main.rs:395:9:395:11 | a10 |
+| main.rs:383:13:383:14 | b4 | main.rs:383:13:383:14 | b4 | main.rs:387:15:387:16 | b4 |
+| main.rs:383:13:383:14 | b4 | main.rs:383:13:383:14 | b4 | main.rs:396:9:396:10 | b4 |
+| main.rs:384:13:384:14 | c2 | main.rs:384:13:384:14 | c2 | main.rs:388:15:388:16 | c2 |
+| main.rs:384:13:384:14 | c2 | main.rs:384:13:384:14 | c2 | main.rs:397:9:397:10 | c2 |
+| main.rs:391:9:391:10 | c2 | main.rs:384:13:384:14 | c2 | main.rs:401:15:401:16 | c2 |
+| main.rs:392:9:392:10 | b4 | main.rs:383:13:383:14 | b4 | main.rs:400:15:400:16 | b4 |
+| main.rs:392:9:392:10 | b4 | main.rs:383:13:383:14 | b4 | main.rs:414:15:414:16 | b4 |
+| main.rs:393:9:393:11 | a10 | main.rs:382:13:382:15 | a10 | main.rs:399:15:399:17 | a10 |
+| main.rs:393:9:393:11 | a10 | main.rs:382:13:382:15 | a10 | main.rs:413:15:413:17 | a10 |
+| main.rs:405:13:405:15 | a10 | main.rs:405:13:405:15 | a10 | main.rs:408:23:408:25 | a10 |
+| main.rs:406:13:406:14 | b4 | main.rs:406:13:406:14 | b4 | main.rs:409:23:409:24 | b4 |
+| main.rs:418:9:418:23 | example_closure | main.rs:418:9:418:23 | example_closure | main.rs:422:9:422:23 | example_closure |
+| main.rs:419:10:419:10 | x | main.rs:419:10:419:10 | x | main.rs:420:9:420:9 | x |
+| main.rs:421:9:421:10 | n1 | main.rs:421:9:421:10 | n1 | main.rs:423:15:423:16 | n1 |
+| main.rs:426:9:426:26 | immutable_variable | main.rs:426:9:426:26 | immutable_variable | main.rs:430:9:430:26 | immutable_variable |
+| main.rs:427:6:427:6 | x | main.rs:427:6:427:6 | x | main.rs:428:9:428:9 | x |
+| main.rs:429:9:429:10 | n2 | main.rs:429:9:429:10 | n2 | main.rs:431:15:431:16 | n2 |
+| main.rs:436:9:436:9 | f | main.rs:436:9:436:9 | f | main.rs:439:15:439:15 | f |
+| main.rs:436:9:436:9 | f | main.rs:436:9:436:9 | f | main.rs:446:15:446:15 | f |
+| main.rs:437:10:437:10 | x | main.rs:437:10:437:10 | x | main.rs:438:9:438:9 | x |
+| main.rs:441:10:441:10 | x | main.rs:441:10:441:10 | x | main.rs:443:9:443:9 | x |
+| main.rs:450:14:450:14 | x | main.rs:450:14:450:14 | x | main.rs:452:17:452:17 | x |
+| main.rs:459:13:459:13 | f | main.rs:459:13:459:13 | f | main.rs:462:19:462:19 | f |
+| main.rs:460:14:460:14 | x | main.rs:460:14:460:14 | x | main.rs:461:13:461:13 | x |
+| main.rs:467:9:467:9 | v | main.rs:467:9:467:9 | v | main.rs:470:12:470:12 | v |
+| main.rs:469:9:469:12 | text | main.rs:469:9:469:12 | text | main.rs:471:19:471:22 | text |
+| main.rs:476:13:476:13 | a | main.rs:476:13:476:13 | a | main.rs:477:5:477:5 | a |
+| main.rs:477:5:477:5 | a | main.rs:476:13:476:13 | a | main.rs:478:15:478:15 | a |
+| main.rs:477:5:477:5 | a | main.rs:476:13:476:13 | a | main.rs:479:11:479:11 | a |
+| main.rs:479:6:479:11 | &mut a | main.rs:476:13:476:13 | a | main.rs:480:15:480:15 | a |
+| main.rs:484:13:484:13 | i | main.rs:484:13:484:13 | i | main.rs:486:14:486:14 | i |
+| main.rs:485:9:485:13 | ref_i | main.rs:485:9:485:13 | ref_i | main.rs:487:6:487:10 | ref_i |
+| main.rs:486:9:486:14 | &mut i | main.rs:484:13:484:13 | i | main.rs:488:15:488:15 | i |
+| main.rs:491:17:491:17 | x | main.rs:491:17:491:17 | x | main.rs:492:6:492:6 | x |
+| main.rs:491:17:491:17 | x | main.rs:491:17:491:17 | x | main.rs:493:10:493:10 | x |
+| main.rs:491:17:491:17 | x | main.rs:491:17:491:17 | x | main.rs:494:10:494:10 | x |
+| main.rs:491:17:491:17 | x | main.rs:491:17:491:17 | x | main.rs:495:12:495:12 | x |
+| main.rs:498:22:498:22 | x | main.rs:498:22:498:22 | x | main.rs:499:6:499:6 | x |
+| main.rs:498:22:498:22 | x | main.rs:498:22:498:22 | x | main.rs:500:10:500:10 | x |
+| main.rs:498:22:498:22 | x | main.rs:498:22:498:22 | x | main.rs:501:10:501:10 | x |
+| main.rs:498:22:498:22 | x | main.rs:498:22:498:22 | x | main.rs:503:9:503:9 | x |
+| main.rs:498:38:498:38 | y | main.rs:498:38:498:38 | y | main.rs:502:6:502:6 | y |
+| main.rs:507:13:507:13 | x | main.rs:507:13:507:13 | x | main.rs:509:27:509:27 | x |
+| main.rs:508:9:508:9 | y | main.rs:508:9:508:9 | y | main.rs:510:6:510:6 | y |
+| main.rs:509:22:509:27 | &mut x | main.rs:507:13:507:13 | x | main.rs:513:15:513:15 | x |
+| main.rs:509:22:509:27 | &mut x | main.rs:507:13:507:13 | x | main.rs:517:19:517:19 | x |
+| main.rs:515:13:515:13 | z | main.rs:515:13:515:13 | z | main.rs:519:14:519:14 | z |
+| main.rs:516:9:516:9 | w | main.rs:516:9:516:9 | w | main.rs:520:9:520:9 | w |
+| main.rs:516:9:516:9 | w | main.rs:516:9:516:9 | w | main.rs:522:7:522:7 | w |
+| main.rs:519:9:519:14 | &mut z | main.rs:515:13:515:13 | z | main.rs:525:15:525:15 | z |
+| main.rs:529:13:529:13 | x | main.rs:529:13:529:13 | x | main.rs:531:14:531:14 | x |
+| main.rs:530:9:530:9 | y | main.rs:530:9:530:9 | y | main.rs:532:6:532:6 | y |
+| main.rs:531:9:531:14 | &mut x | main.rs:529:13:529:13 | x | main.rs:533:15:533:15 | x |
+| main.rs:537:9:537:9 | x | main.rs:537:9:537:9 | x | main.rs:544:15:544:15 | x |
+| main.rs:540:9:540:11 | cap | main.rs:540:9:540:11 | cap | main.rs:543:5:543:7 | cap |
+| main.rs:540:15:542:5 | x | main.rs:537:9:537:9 | x | main.rs:541:19:541:19 | x |
+| main.rs:548:13:548:13 | x | main.rs:548:13:548:13 | x | main.rs:555:15:555:15 | x |
+| main.rs:551:9:551:16 | closure1 | main.rs:551:9:551:16 | closure1 | main.rs:554:5:554:12 | closure1 |
+| main.rs:551:20:553:5 | x | main.rs:548:13:548:13 | x | main.rs:552:19:552:19 | x |
+| main.rs:560:13:560:20 | closure2 | main.rs:560:13:560:20 | closure2 | main.rs:563:5:563:12 | closure2 |
+| main.rs:563:5:563:14 | y | main.rs:557:13:557:13 | y | main.rs:564:15:564:15 | y |
+| main.rs:566:13:566:13 | z | main.rs:566:13:566:13 | z | main.rs:573:15:573:15 | z |
+| main.rs:569:13:569:20 | closure3 | main.rs:569:13:569:20 | closure3 | main.rs:572:5:572:12 | closure3 |
+| main.rs:569:24:571:5 | z | main.rs:566:13:566:13 | z | main.rs:570:9:570:9 | z |
+| main.rs:578:9:578:13 | block | main.rs:578:9:578:13 | block | main.rs:582:5:582:9 | block |
+| main.rs:582:5:582:15 | i | main.rs:577:13:577:13 | i | main.rs:583:15:583:15 | i |
+| main.rs:586:8:586:8 | b | main.rs:586:8:586:8 | b | main.rs:591:16:591:16 | b |
+| main.rs:587:13:587:13 | x | main.rs:587:13:587:13 | x | main.rs:588:15:588:15 | x |
+| main.rs:587:13:587:13 | x | main.rs:587:13:587:13 | x | main.rs:589:15:589:15 | x |
+| main.rs:591:13:600:5 | SSA phi(x) | main.rs:587:13:587:13 | x | main.rs:601:15:601:15 | x |
+| main.rs:593:9:593:9 | x | main.rs:587:13:587:13 | x | main.rs:594:19:594:19 | x |
+| main.rs:593:9:593:9 | x | main.rs:587:13:587:13 | x | main.rs:595:19:595:19 | x |
+| main.rs:597:9:597:9 | x | main.rs:587:13:587:13 | x | main.rs:598:19:598:19 | x |
+| main.rs:597:9:597:9 | x | main.rs:587:13:587:13 | x | main.rs:599:19:599:19 | x |
+| main.rs:604:13:604:14 | b1 | main.rs:604:13:604:14 | b1 | main.rs:607:16:607:17 | b1 |
+| main.rs:604:23:604:24 | b2 | main.rs:604:23:604:24 | b2 | main.rs:615:16:615:17 | b2 |
+| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x | main.rs:609:19:609:19 | x |
+| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x | main.rs:611:19:611:19 | x |
+| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x | main.rs:617:19:617:19 | x |
+| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x | main.rs:619:19:619:19 | x |
+| main.rs:628:20:628:23 | self | main.rs:628:20:628:23 | self | main.rs:629:16:629:19 | self |
+| main.rs:632:11:632:14 | self | main.rs:632:11:632:14 | self | main.rs:633:9:633:12 | self |
+| main.rs:637:17:637:17 | f | main.rs:637:17:637:17 | f | main.rs:641:9:641:9 | f |
+| main.rs:637:17:637:17 | f | main.rs:637:17:637:17 | f | main.rs:642:9:642:9 | f |
+| main.rs:637:21:640:9 | self | main.rs:636:23:636:26 | self | main.rs:639:13:639:16 | self |
+| main.rs:637:22:637:22 | n | main.rs:637:22:637:22 | n | main.rs:639:25:639:25 | n |
+| main.rs:647:13:647:13 | a | main.rs:647:13:647:13 | a | main.rs:648:15:648:15 | a |
+| main.rs:648:15:648:15 | a | main.rs:647:13:647:13 | a | main.rs:649:5:649:5 | a |
+| main.rs:648:15:648:15 | a | main.rs:647:13:647:13 | a | main.rs:650:15:650:15 | a |
+| main.rs:651:5:651:5 | a | main.rs:647:13:647:13 | a | main.rs:652:15:652:15 | a |
+| main.rs:656:13:656:13 | a | main.rs:656:13:656:13 | a | main.rs:657:15:657:15 | a |
+| main.rs:656:13:656:13 | a | main.rs:656:13:656:13 | a | main.rs:658:5:658:5 | a |
+| main.rs:656:13:656:13 | a | main.rs:656:13:656:13 | a | main.rs:659:15:659:15 | a |
+| main.rs:660:5:660:5 | a | main.rs:656:13:656:13 | a | main.rs:661:15:661:15 | a |
+| main.rs:665:9:665:9 | x | main.rs:665:9:665:9 | x | main.rs:666:20:666:20 | x |
+| main.rs:665:9:665:9 | x | main.rs:665:9:665:9 | x | main.rs:667:15:667:15 | x |
+| main.rs:669:9:669:9 | z | main.rs:669:9:669:9 | z | main.rs:670:20:670:20 | z |
+| main.rs:678:17:678:20 | self | main.rs:678:17:678:20 | self | main.rs:679:10:679:13 | self |
+| main.rs:684:13:684:13 | a | main.rs:684:13:684:13 | a | main.rs:685:5:685:5 | a |
+| main.rs:685:5:685:5 | a | main.rs:684:13:684:13 | a | main.rs:688:15:688:15 | a |
+| main.rs:706:9:706:22 | var_from_macro | main.rs:706:9:706:22 | var_from_macro | main.rs:708:15:708:28 | var_from_macro |
+| main.rs:707:9:707:21 | var_in_macro | main.rs:707:9:707:21 | var_in_macro | main.rs:707:9:707:21 | var_in_macro |
+| main.rs:709:9:709:20 | var_in_macro | main.rs:709:9:709:20 | var_in_macro | main.rs:715:15:715:26 | var_in_macro |
+| main.rs:714:15:714:28 | var_in_macro | main.rs:714:15:714:28 | var_in_macro | main.rs:714:30:714:41 | var_in_macro |
+| main.rs:720:5:720:5 | x | main.rs:719:9:719:9 | x | main.rs:721:15:721:15 | x |
+| main.rs:726:13:726:15 | cap | main.rs:726:13:726:15 | cap | main.rs:732:5:732:7 | cap |
+| main.rs:726:20:726:20 | b | main.rs:726:20:726:20 | b | main.rs:728:20:728:20 | b |
+| main.rs:732:5:732:13 | x | main.rs:725:13:725:13 | x | main.rs:733:15:733:15 | x |
firstRead
| main.rs:5:14:5:14 | s | main.rs:5:14:5:14 | s | main.rs:7:20:7:20 | s |
| main.rs:10:14:10:14 | i | main.rs:10:14:10:14 | i | main.rs:12:20:12:20 | i |
@@ -398,355 +401,358 @@ firstRead
| main.rs:20:9:20:10 | x1 | main.rs:20:9:20:10 | x1 | main.rs:21:15:21:16 | x1 |
| main.rs:25:13:25:14 | x2 | main.rs:25:13:25:14 | x2 | main.rs:26:15:26:16 | x2 |
| main.rs:27:5:27:6 | x2 | main.rs:25:13:25:14 | x2 | main.rs:28:15:28:16 | x2 |
-| main.rs:32:13:32:13 | x | main.rs:32:13:32:13 | x | main.rs:33:20:33:20 | x |
-| main.rs:34:5:34:5 | x | main.rs:32:13:32:13 | x | main.rs:35:20:35:20 | x |
-| main.rs:39:9:39:10 | x3 | main.rs:39:9:39:10 | x3 | main.rs:40:15:40:16 | x3 |
-| main.rs:41:9:41:10 | x3 | main.rs:41:9:41:10 | x3 | main.rs:43:15:43:16 | x3 |
-| main.rs:47:9:47:10 | x4 | main.rs:47:9:47:10 | x4 | main.rs:48:15:48:16 | x4 |
-| main.rs:50:13:50:14 | x4 | main.rs:50:13:50:14 | x4 | main.rs:51:19:51:20 | x4 |
-| main.rs:64:13:64:14 | a1 | main.rs:64:13:64:14 | a1 | main.rs:72:15:72:16 | a1 |
-| main.rs:65:13:65:14 | b1 | main.rs:65:13:65:14 | b1 | main.rs:73:15:73:16 | b1 |
-| main.rs:68:13:68:13 | x | main.rs:68:13:68:13 | x | main.rs:74:15:74:15 | x |
-| main.rs:69:13:69:13 | y | main.rs:69:13:69:13 | y | main.rs:75:15:75:15 | y |
-| main.rs:79:9:79:10 | p1 | main.rs:79:9:79:10 | p1 | main.rs:83:9:83:10 | p1 |
-| main.rs:81:12:81:13 | a2 | main.rs:81:12:81:13 | a2 | main.rs:84:15:84:16 | a2 |
-| main.rs:82:12:82:13 | b2 | main.rs:82:12:82:13 | b2 | main.rs:85:15:85:16 | b2 |
-| main.rs:89:9:89:10 | s1 | main.rs:89:9:89:10 | s1 | main.rs:92:11:92:12 | s1 |
-| main.rs:91:21:91:22 | s2 | main.rs:91:21:91:22 | s2 | main.rs:93:19:93:20 | s2 |
-| main.rs:98:9:98:9 | x | main.rs:98:9:98:9 | x | main.rs:100:7:100:7 | x |
-| main.rs:99:14:99:14 | x | main.rs:99:14:99:14 | x | main.rs:107:15:107:15 | x |
-| main.rs:102:13:102:13 | x | main.rs:102:13:102:13 | x | main.rs:104:19:104:19 | x |
-| main.rs:111:9:111:10 | s1 | main.rs:111:9:111:10 | s1 | main.rs:114:11:114:12 | s1 |
-| main.rs:113:24:113:25 | s2 | main.rs:113:24:113:25 | s2 | main.rs:115:19:115:20 | s2 |
-| main.rs:120:9:120:10 | x6 | main.rs:120:9:120:10 | x6 | main.rs:123:11:123:12 | x6 |
-| main.rs:121:9:121:10 | y1 | main.rs:121:9:121:10 | y1 | main.rs:133:15:133:16 | y1 |
-| main.rs:125:14:125:15 | y1 | main.rs:125:14:125:15 | y1 | main.rs:128:23:128:24 | y1 |
-| main.rs:137:9:137:15 | numbers | main.rs:137:9:137:15 | numbers | main.rs:139:11:139:17 | numbers |
-| main.rs:142:13:142:17 | first | main.rs:142:13:142:17 | first | main.rs:148:23:148:27 | first |
-| main.rs:144:13:144:17 | third | main.rs:144:13:144:17 | third | main.rs:149:23:149:27 | third |
-| main.rs:146:13:146:17 | fifth | main.rs:146:13:146:17 | fifth | main.rs:150:23:150:27 | fifth |
-| main.rs:157:13:157:17 | first | main.rs:157:13:157:17 | first | main.rs:161:23:161:27 | first |
-| main.rs:159:13:159:16 | last | main.rs:159:13:159:16 | last | main.rs:162:23:162:26 | last |
-| main.rs:168:9:168:10 | p2 | main.rs:168:9:168:10 | p2 | main.rs:170:11:170:12 | p2 |
-| main.rs:172:16:172:17 | x7 | main.rs:172:16:172:17 | x7 | main.rs:173:24:173:25 | x7 |
-| main.rs:182:9:182:11 | msg | main.rs:182:9:182:11 | msg | main.rs:184:11:184:13 | msg |
-| main.rs:187:17:187:27 | id_variable | main.rs:187:17:187:27 | id_variable | main.rs:188:24:188:34 | id_variable |
-| main.rs:192:26:192:27 | id | main.rs:192:26:192:27 | id | main.rs:195:23:195:24 | id |
-| main.rs:206:9:206:14 | either | main.rs:206:9:206:14 | either | main.rs:207:11:207:16 | either |
-| main.rs:208:9:208:44 | SSA phi(a3) | main.rs:208:9:208:44 | a3 | main.rs:209:26:209:27 | a3 |
-| main.rs:220:9:220:10 | tv | main.rs:220:9:220:10 | tv | main.rs:221:11:221:12 | tv |
-| main.rs:222:9:222:81 | SSA phi(a4) | main.rs:222:9:222:81 | a4 | main.rs:223:26:223:27 | a4 |
-| main.rs:226:9:226:83 | SSA phi(a5) | main.rs:226:9:226:83 | a5 | main.rs:227:26:227:27 | a5 |
-| main.rs:230:9:230:83 | SSA phi(a6) | main.rs:230:9:230:83 | a6 | main.rs:231:26:231:27 | a6 |
-| main.rs:236:9:236:14 | either | main.rs:236:9:236:14 | either | main.rs:237:11:237:16 | either |
-| main.rs:238:9:238:44 | [match(true)] SSA phi(a7) | main.rs:238:9:238:44 | a7 | main.rs:239:16:239:17 | a7 |
-| main.rs:246:9:246:14 | either | main.rs:246:9:246:14 | either | main.rs:248:11:248:16 | either |
-| main.rs:249:13:249:13 | e | main.rs:249:13:249:13 | e | main.rs:254:15:254:15 | e |
-| main.rs:250:14:250:51 | [match(true)] SSA phi(a11) | main.rs:250:14:250:51 | a11 | main.rs:252:23:252:25 | a11 |
-| main.rs:253:33:253:35 | a12 | main.rs:253:33:253:35 | a12 | main.rs:255:28:255:30 | a12 |
-| main.rs:270:9:270:10 | fv | main.rs:270:9:270:10 | fv | main.rs:271:11:271:12 | fv |
-| main.rs:272:9:272:109 | SSA phi(a13) | main.rs:272:9:272:109 | a13 | main.rs:273:26:273:28 | a13 |
-| main.rs:279:9:279:9 | x | main.rs:279:9:279:9 | x | main.rs:281:7:281:7 | x |
-| main.rs:280:17:280:17 | x | main.rs:280:17:280:17 | x | main.rs:283:5:283:5 | x |
-| main.rs:287:13:287:13 | x | main.rs:287:13:287:13 | x | main.rs:289:19:289:19 | x |
-| main.rs:295:9:295:9 | x | main.rs:295:9:295:9 | x | main.rs:297:7:297:7 | x |
-| main.rs:296:17:296:17 | x | main.rs:296:17:296:17 | x | main.rs:300:12:300:12 | x |
-| main.rs:299:14:299:14 | x | main.rs:299:14:299:14 | x | main.rs:302:5:302:5 | x |
-| main.rs:306:13:306:13 | x | main.rs:306:13:306:13 | x | main.rs:308:19:308:19 | x |
-| main.rs:314:9:314:9 | x | main.rs:314:9:314:9 | x | main.rs:316:7:316:7 | x |
-| main.rs:315:20:315:20 | x | main.rs:315:20:315:20 | x | main.rs:319:12:319:12 | x |
-| main.rs:318:14:318:14 | x | main.rs:318:14:318:14 | x | main.rs:321:5:321:5 | x |
-| main.rs:332:9:332:9 | x | main.rs:332:9:332:9 | x | main.rs:333:11:333:11 | x |
-| main.rs:334:14:334:14 | x | main.rs:334:14:334:14 | x | main.rs:336:18:336:18 | x |
-| main.rs:335:20:335:20 | x | main.rs:335:20:335:20 | x | main.rs:337:19:337:19 | x |
-| main.rs:346:9:346:9 | x | main.rs:346:9:346:9 | x | main.rs:348:7:348:7 | x |
-| main.rs:347:16:347:16 | x | main.rs:347:16:347:16 | x | main.rs:350:19:350:19 | x |
-| main.rs:352:20:352:20 | x | main.rs:352:20:352:20 | x | main.rs:355:19:355:19 | x |
-| main.rs:362:5:362:6 | a8 | main.rs:362:5:362:6 | a8 | main.rs:368:15:368:16 | a8 |
-| main.rs:364:9:364:10 | b3 | main.rs:364:9:364:10 | b3 | main.rs:369:15:369:16 | b3 |
-| main.rs:365:9:365:10 | c1 | main.rs:365:9:365:10 | c1 | main.rs:370:15:370:16 | c1 |
-| main.rs:373:20:373:55 | SSA phi(a9) | main.rs:373:20:373:55 | a9 | main.rs:375:15:375:16 | a9 |
-| main.rs:380:13:380:15 | a10 | main.rs:380:13:380:15 | a10 | main.rs:384:15:384:17 | a10 |
-| main.rs:381:13:381:14 | b4 | main.rs:381:13:381:14 | b4 | main.rs:385:15:385:16 | b4 |
-| main.rs:382:13:382:14 | c2 | main.rs:382:13:382:14 | c2 | main.rs:386:15:386:16 | c2 |
-| main.rs:389:9:389:10 | c2 | main.rs:382:13:382:14 | c2 | main.rs:395:9:395:10 | c2 |
-| main.rs:390:9:390:10 | b4 | main.rs:381:13:381:14 | b4 | main.rs:394:9:394:10 | b4 |
-| main.rs:391:9:391:11 | a10 | main.rs:380:13:380:15 | a10 | main.rs:393:9:393:11 | a10 |
-| main.rs:403:13:403:15 | a10 | main.rs:403:13:403:15 | a10 | main.rs:406:23:406:25 | a10 |
-| main.rs:404:13:404:14 | b4 | main.rs:404:13:404:14 | b4 | main.rs:407:23:407:24 | b4 |
-| main.rs:416:9:416:23 | example_closure | main.rs:416:9:416:23 | example_closure | main.rs:420:9:420:23 | example_closure |
-| main.rs:417:10:417:10 | x | main.rs:417:10:417:10 | x | main.rs:418:9:418:9 | x |
-| main.rs:419:9:419:10 | n1 | main.rs:419:9:419:10 | n1 | main.rs:421:15:421:16 | n1 |
-| main.rs:424:9:424:26 | immutable_variable | main.rs:424:9:424:26 | immutable_variable | main.rs:428:9:428:26 | immutable_variable |
-| main.rs:425:6:425:6 | x | main.rs:425:6:425:6 | x | main.rs:426:9:426:9 | x |
-| main.rs:427:9:427:10 | n2 | main.rs:427:9:427:10 | n2 | main.rs:429:15:429:16 | n2 |
-| main.rs:434:9:434:9 | f | main.rs:434:9:434:9 | f | main.rs:437:15:437:15 | f |
-| main.rs:435:10:435:10 | x | main.rs:435:10:435:10 | x | main.rs:436:9:436:9 | x |
-| main.rs:439:10:439:10 | x | main.rs:439:10:439:10 | x | main.rs:441:9:441:9 | x |
-| main.rs:448:14:448:14 | x | main.rs:448:14:448:14 | x | main.rs:450:17:450:17 | x |
-| main.rs:457:13:457:13 | f | main.rs:457:13:457:13 | f | main.rs:460:19:460:19 | f |
-| main.rs:458:14:458:14 | x | main.rs:458:14:458:14 | x | main.rs:459:13:459:13 | x |
-| main.rs:465:9:465:9 | v | main.rs:465:9:465:9 | v | main.rs:468:12:468:12 | v |
-| main.rs:467:9:467:12 | text | main.rs:467:9:467:12 | text | main.rs:469:19:469:22 | text |
-| main.rs:474:13:474:13 | a | main.rs:474:13:474:13 | a | main.rs:475:5:475:5 | a |
-| main.rs:475:5:475:5 | a | main.rs:474:13:474:13 | a | main.rs:476:15:476:15 | a |
-| main.rs:477:6:477:11 | &mut a | main.rs:474:13:474:13 | a | main.rs:478:15:478:15 | a |
-| main.rs:482:13:482:13 | i | main.rs:482:13:482:13 | i | main.rs:484:14:484:14 | i |
-| main.rs:483:9:483:13 | ref_i | main.rs:483:9:483:13 | ref_i | main.rs:485:6:485:10 | ref_i |
-| main.rs:484:9:484:14 | &mut i | main.rs:482:13:482:13 | i | main.rs:486:15:486:15 | i |
-| main.rs:489:17:489:17 | x | main.rs:489:17:489:17 | x | main.rs:490:6:490:6 | x |
-| main.rs:496:22:496:22 | x | main.rs:496:22:496:22 | x | main.rs:497:6:497:6 | x |
-| main.rs:496:38:496:38 | y | main.rs:496:38:496:38 | y | main.rs:500:6:500:6 | y |
-| main.rs:505:13:505:13 | x | main.rs:505:13:505:13 | x | main.rs:507:27:507:27 | x |
-| main.rs:506:9:506:9 | y | main.rs:506:9:506:9 | y | main.rs:508:6:508:6 | y |
-| main.rs:507:22:507:27 | &mut x | main.rs:505:13:505:13 | x | main.rs:511:15:511:15 | x |
-| main.rs:513:13:513:13 | z | main.rs:513:13:513:13 | z | main.rs:517:14:517:14 | z |
-| main.rs:514:9:514:9 | w | main.rs:514:9:514:9 | w | main.rs:518:9:518:9 | w |
-| main.rs:517:9:517:14 | &mut z | main.rs:513:13:513:13 | z | main.rs:523:15:523:15 | z |
-| main.rs:527:13:527:13 | x | main.rs:527:13:527:13 | x | main.rs:529:14:529:14 | x |
-| main.rs:528:9:528:9 | y | main.rs:528:9:528:9 | y | main.rs:530:6:530:6 | y |
-| main.rs:529:9:529:14 | &mut x | main.rs:527:13:527:13 | x | main.rs:531:15:531:15 | x |
-| main.rs:535:9:535:9 | x | main.rs:535:9:535:9 | x | main.rs:542:15:542:15 | x |
-| main.rs:538:9:538:11 | cap | main.rs:538:9:538:11 | cap | main.rs:541:5:541:7 | cap |
-| main.rs:538:15:540:5 | x | main.rs:535:9:535:9 | x | main.rs:539:19:539:19 | x |
-| main.rs:546:13:546:13 | x | main.rs:546:13:546:13 | x | main.rs:553:15:553:15 | x |
-| main.rs:549:9:549:16 | closure1 | main.rs:549:9:549:16 | closure1 | main.rs:552:5:552:12 | closure1 |
-| main.rs:549:20:551:5 | x | main.rs:546:13:546:13 | x | main.rs:550:19:550:19 | x |
-| main.rs:558:13:558:20 | closure2 | main.rs:558:13:558:20 | closure2 | main.rs:561:5:561:12 | closure2 |
-| main.rs:561:5:561:14 | y | main.rs:555:13:555:13 | y | main.rs:562:15:562:15 | y |
-| main.rs:564:13:564:13 | z | main.rs:564:13:564:13 | z | main.rs:571:15:571:15 | z |
-| main.rs:567:13:567:20 | closure3 | main.rs:567:13:567:20 | closure3 | main.rs:570:5:570:12 | closure3 |
-| main.rs:567:24:569:5 | z | main.rs:564:13:564:13 | z | main.rs:568:9:568:9 | z |
-| main.rs:576:9:576:13 | block | main.rs:576:9:576:13 | block | main.rs:580:5:580:9 | block |
-| main.rs:580:5:580:15 | i | main.rs:575:13:575:13 | i | main.rs:581:15:581:15 | i |
-| main.rs:584:8:584:8 | b | main.rs:584:8:584:8 | b | main.rs:589:16:589:16 | b |
-| main.rs:585:13:585:13 | x | main.rs:585:13:585:13 | x | main.rs:586:15:586:15 | x |
-| main.rs:589:13:598:5 | SSA phi(x) | main.rs:585:13:585:13 | x | main.rs:599:15:599:15 | x |
-| main.rs:591:9:591:9 | x | main.rs:585:13:585:13 | x | main.rs:592:19:592:19 | x |
-| main.rs:595:9:595:9 | x | main.rs:585:13:585:13 | x | main.rs:596:19:596:19 | x |
-| main.rs:602:13:602:14 | b1 | main.rs:602:13:602:14 | b1 | main.rs:605:16:605:17 | b1 |
-| main.rs:602:23:602:24 | b2 | main.rs:602:23:602:24 | b2 | main.rs:613:16:613:17 | b2 |
-| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x | main.rs:607:19:607:19 | x |
-| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x | main.rs:609:19:609:19 | x |
-| main.rs:626:20:626:23 | self | main.rs:626:20:626:23 | self | main.rs:627:16:627:19 | self |
-| main.rs:630:11:630:14 | self | main.rs:630:11:630:14 | self | main.rs:631:9:631:12 | self |
-| main.rs:635:17:635:17 | f | main.rs:635:17:635:17 | f | main.rs:639:9:639:9 | f |
-| main.rs:635:21:638:9 | self | main.rs:634:23:634:26 | self | main.rs:637:13:637:16 | self |
-| main.rs:635:22:635:22 | n | main.rs:635:22:635:22 | n | main.rs:637:25:637:25 | n |
-| main.rs:645:13:645:13 | a | main.rs:645:13:645:13 | a | main.rs:646:15:646:15 | a |
-| main.rs:646:15:646:15 | a | main.rs:645:13:645:13 | a | main.rs:647:5:647:5 | a |
-| main.rs:649:5:649:5 | a | main.rs:645:13:645:13 | a | main.rs:650:15:650:15 | a |
-| main.rs:654:13:654:13 | a | main.rs:654:13:654:13 | a | main.rs:655:15:655:15 | a |
-| main.rs:658:5:658:5 | a | main.rs:654:13:654:13 | a | main.rs:659:15:659:15 | a |
-| main.rs:663:9:663:9 | x | main.rs:663:9:663:9 | x | main.rs:664:20:664:20 | x |
-| main.rs:667:9:667:9 | z | main.rs:667:9:667:9 | z | main.rs:668:20:668:20 | z |
-| main.rs:676:17:676:20 | self | main.rs:676:17:676:20 | self | main.rs:677:10:677:13 | self |
-| main.rs:682:13:682:13 | a | main.rs:682:13:682:13 | a | main.rs:683:5:683:5 | a |
-| main.rs:683:5:683:5 | a | main.rs:682:13:682:13 | a | main.rs:686:15:686:15 | a |
-| main.rs:704:9:704:22 | var_from_macro | main.rs:704:9:704:22 | var_from_macro | main.rs:706:15:706:28 | var_from_macro |
-| main.rs:705:9:705:21 | var_in_macro | main.rs:705:9:705:21 | var_in_macro | main.rs:705:9:705:21 | var_in_macro |
-| main.rs:707:9:707:20 | var_in_macro | main.rs:707:9:707:20 | var_in_macro | main.rs:713:15:713:26 | var_in_macro |
-| main.rs:712:15:712:28 | var_in_macro | main.rs:712:15:712:28 | var_in_macro | main.rs:712:30:712:41 | var_in_macro |
-| main.rs:718:5:718:5 | x | main.rs:717:9:717:9 | x | main.rs:719:15:719:15 | x |
-| main.rs:724:13:724:15 | cap | main.rs:724:13:724:15 | cap | main.rs:730:5:730:7 | cap |
-| main.rs:724:20:724:20 | b | main.rs:724:20:724:20 | b | main.rs:726:20:726:20 | b |
-| main.rs:730:5:730:13 | x | main.rs:723:13:723:13 | x | main.rs:731:15:731:15 | x |
+| main.rs:29:5:29:6 | x2 | main.rs:25:13:25:14 | x2 | main.rs:30:15:30:16 | x2 |
+| main.rs:34:13:34:13 | x | main.rs:34:13:34:13 | x | main.rs:35:20:35:20 | x |
+| main.rs:36:5:36:5 | x | main.rs:34:13:34:13 | x | main.rs:37:20:37:20 | x |
+| main.rs:41:9:41:10 | x3 | main.rs:41:9:41:10 | x3 | main.rs:42:15:42:16 | x3 |
+| main.rs:43:9:43:10 | x3 | main.rs:43:9:43:10 | x3 | main.rs:45:15:45:16 | x3 |
+| main.rs:49:9:49:10 | x4 | main.rs:49:9:49:10 | x4 | main.rs:50:15:50:16 | x4 |
+| main.rs:52:13:52:14 | x4 | main.rs:52:13:52:14 | x4 | main.rs:53:19:53:20 | x4 |
+| main.rs:66:13:66:14 | a1 | main.rs:66:13:66:14 | a1 | main.rs:74:15:74:16 | a1 |
+| main.rs:67:13:67:14 | b1 | main.rs:67:13:67:14 | b1 | main.rs:75:15:75:16 | b1 |
+| main.rs:70:13:70:13 | x | main.rs:70:13:70:13 | x | main.rs:76:15:76:15 | x |
+| main.rs:71:13:71:13 | y | main.rs:71:13:71:13 | y | main.rs:77:15:77:15 | y |
+| main.rs:81:9:81:10 | p1 | main.rs:81:9:81:10 | p1 | main.rs:85:9:85:10 | p1 |
+| main.rs:83:12:83:13 | a2 | main.rs:83:12:83:13 | a2 | main.rs:86:15:86:16 | a2 |
+| main.rs:84:12:84:13 | b2 | main.rs:84:12:84:13 | b2 | main.rs:87:15:87:16 | b2 |
+| main.rs:91:9:91:10 | s1 | main.rs:91:9:91:10 | s1 | main.rs:94:11:94:12 | s1 |
+| main.rs:93:21:93:22 | s2 | main.rs:93:21:93:22 | s2 | main.rs:95:19:95:20 | s2 |
+| main.rs:100:9:100:9 | x | main.rs:100:9:100:9 | x | main.rs:102:7:102:7 | x |
+| main.rs:101:14:101:14 | x | main.rs:101:14:101:14 | x | main.rs:109:15:109:15 | x |
+| main.rs:104:13:104:13 | x | main.rs:104:13:104:13 | x | main.rs:106:19:106:19 | x |
+| main.rs:113:9:113:10 | s1 | main.rs:113:9:113:10 | s1 | main.rs:116:11:116:12 | s1 |
+| main.rs:115:24:115:25 | s2 | main.rs:115:24:115:25 | s2 | main.rs:117:19:117:20 | s2 |
+| main.rs:122:9:122:10 | x6 | main.rs:122:9:122:10 | x6 | main.rs:125:11:125:12 | x6 |
+| main.rs:123:9:123:10 | y1 | main.rs:123:9:123:10 | y1 | main.rs:135:15:135:16 | y1 |
+| main.rs:127:14:127:15 | y1 | main.rs:127:14:127:15 | y1 | main.rs:130:23:130:24 | y1 |
+| main.rs:139:9:139:15 | numbers | main.rs:139:9:139:15 | numbers | main.rs:141:11:141:17 | numbers |
+| main.rs:144:13:144:17 | first | main.rs:144:13:144:17 | first | main.rs:150:23:150:27 | first |
+| main.rs:146:13:146:17 | third | main.rs:146:13:146:17 | third | main.rs:151:23:151:27 | third |
+| main.rs:148:13:148:17 | fifth | main.rs:148:13:148:17 | fifth | main.rs:152:23:152:27 | fifth |
+| main.rs:159:13:159:17 | first | main.rs:159:13:159:17 | first | main.rs:163:23:163:27 | first |
+| main.rs:161:13:161:16 | last | main.rs:161:13:161:16 | last | main.rs:164:23:164:26 | last |
+| main.rs:170:9:170:10 | p2 | main.rs:170:9:170:10 | p2 | main.rs:172:11:172:12 | p2 |
+| main.rs:174:16:174:17 | x7 | main.rs:174:16:174:17 | x7 | main.rs:175:24:175:25 | x7 |
+| main.rs:184:9:184:11 | msg | main.rs:184:9:184:11 | msg | main.rs:186:11:186:13 | msg |
+| main.rs:189:17:189:27 | id_variable | main.rs:189:17:189:27 | id_variable | main.rs:190:24:190:34 | id_variable |
+| main.rs:194:26:194:27 | id | main.rs:194:26:194:27 | id | main.rs:197:23:197:24 | id |
+| main.rs:208:9:208:14 | either | main.rs:208:9:208:14 | either | main.rs:209:11:209:16 | either |
+| main.rs:210:9:210:44 | SSA phi(a3) | main.rs:210:9:210:44 | a3 | main.rs:211:26:211:27 | a3 |
+| main.rs:222:9:222:10 | tv | main.rs:222:9:222:10 | tv | main.rs:223:11:223:12 | tv |
+| main.rs:224:9:224:81 | SSA phi(a4) | main.rs:224:9:224:81 | a4 | main.rs:225:26:225:27 | a4 |
+| main.rs:228:9:228:83 | SSA phi(a5) | main.rs:228:9:228:83 | a5 | main.rs:229:26:229:27 | a5 |
+| main.rs:232:9:232:83 | SSA phi(a6) | main.rs:232:9:232:83 | a6 | main.rs:233:26:233:27 | a6 |
+| main.rs:238:9:238:14 | either | main.rs:238:9:238:14 | either | main.rs:239:11:239:16 | either |
+| main.rs:240:9:240:44 | [match(true)] SSA phi(a7) | main.rs:240:9:240:44 | a7 | main.rs:241:16:241:17 | a7 |
+| main.rs:248:9:248:14 | either | main.rs:248:9:248:14 | either | main.rs:250:11:250:16 | either |
+| main.rs:251:13:251:13 | e | main.rs:251:13:251:13 | e | main.rs:256:15:256:15 | e |
+| main.rs:252:14:252:51 | [match(true)] SSA phi(a11) | main.rs:252:14:252:51 | a11 | main.rs:254:23:254:25 | a11 |
+| main.rs:255:33:255:35 | a12 | main.rs:255:33:255:35 | a12 | main.rs:257:28:257:30 | a12 |
+| main.rs:272:9:272:10 | fv | main.rs:272:9:272:10 | fv | main.rs:273:11:273:12 | fv |
+| main.rs:274:9:274:109 | SSA phi(a13) | main.rs:274:9:274:109 | a13 | main.rs:275:26:275:28 | a13 |
+| main.rs:281:9:281:9 | x | main.rs:281:9:281:9 | x | main.rs:283:7:283:7 | x |
+| main.rs:282:17:282:17 | x | main.rs:282:17:282:17 | x | main.rs:285:5:285:5 | x |
+| main.rs:289:13:289:13 | x | main.rs:289:13:289:13 | x | main.rs:291:19:291:19 | x |
+| main.rs:297:9:297:9 | x | main.rs:297:9:297:9 | x | main.rs:299:7:299:7 | x |
+| main.rs:298:17:298:17 | x | main.rs:298:17:298:17 | x | main.rs:302:12:302:12 | x |
+| main.rs:301:14:301:14 | x | main.rs:301:14:301:14 | x | main.rs:304:5:304:5 | x |
+| main.rs:308:13:308:13 | x | main.rs:308:13:308:13 | x | main.rs:310:19:310:19 | x |
+| main.rs:316:9:316:9 | x | main.rs:316:9:316:9 | x | main.rs:318:7:318:7 | x |
+| main.rs:317:20:317:20 | x | main.rs:317:20:317:20 | x | main.rs:321:12:321:12 | x |
+| main.rs:320:14:320:14 | x | main.rs:320:14:320:14 | x | main.rs:323:5:323:5 | x |
+| main.rs:334:9:334:9 | x | main.rs:334:9:334:9 | x | main.rs:335:11:335:11 | x |
+| main.rs:336:14:336:14 | x | main.rs:336:14:336:14 | x | main.rs:338:18:338:18 | x |
+| main.rs:337:20:337:20 | x | main.rs:337:20:337:20 | x | main.rs:339:19:339:19 | x |
+| main.rs:348:9:348:9 | x | main.rs:348:9:348:9 | x | main.rs:350:7:350:7 | x |
+| main.rs:349:16:349:16 | x | main.rs:349:16:349:16 | x | main.rs:352:19:352:19 | x |
+| main.rs:354:20:354:20 | x | main.rs:354:20:354:20 | x | main.rs:357:19:357:19 | x |
+| main.rs:364:5:364:6 | a8 | main.rs:364:5:364:6 | a8 | main.rs:370:15:370:16 | a8 |
+| main.rs:366:9:366:10 | b3 | main.rs:366:9:366:10 | b3 | main.rs:371:15:371:16 | b3 |
+| main.rs:367:9:367:10 | c1 | main.rs:367:9:367:10 | c1 | main.rs:372:15:372:16 | c1 |
+| main.rs:375:20:375:55 | SSA phi(a9) | main.rs:375:20:375:55 | a9 | main.rs:377:15:377:16 | a9 |
+| main.rs:382:13:382:15 | a10 | main.rs:382:13:382:15 | a10 | main.rs:386:15:386:17 | a10 |
+| main.rs:383:13:383:14 | b4 | main.rs:383:13:383:14 | b4 | main.rs:387:15:387:16 | b4 |
+| main.rs:384:13:384:14 | c2 | main.rs:384:13:384:14 | c2 | main.rs:388:15:388:16 | c2 |
+| main.rs:391:9:391:10 | c2 | main.rs:384:13:384:14 | c2 | main.rs:401:15:401:16 | c2 |
+| main.rs:392:9:392:10 | b4 | main.rs:383:13:383:14 | b4 | main.rs:400:15:400:16 | b4 |
+| main.rs:393:9:393:11 | a10 | main.rs:382:13:382:15 | a10 | main.rs:399:15:399:17 | a10 |
+| main.rs:405:13:405:15 | a10 | main.rs:405:13:405:15 | a10 | main.rs:408:23:408:25 | a10 |
+| main.rs:406:13:406:14 | b4 | main.rs:406:13:406:14 | b4 | main.rs:409:23:409:24 | b4 |
+| main.rs:418:9:418:23 | example_closure | main.rs:418:9:418:23 | example_closure | main.rs:422:9:422:23 | example_closure |
+| main.rs:419:10:419:10 | x | main.rs:419:10:419:10 | x | main.rs:420:9:420:9 | x |
+| main.rs:421:9:421:10 | n1 | main.rs:421:9:421:10 | n1 | main.rs:423:15:423:16 | n1 |
+| main.rs:426:9:426:26 | immutable_variable | main.rs:426:9:426:26 | immutable_variable | main.rs:430:9:430:26 | immutable_variable |
+| main.rs:427:6:427:6 | x | main.rs:427:6:427:6 | x | main.rs:428:9:428:9 | x |
+| main.rs:429:9:429:10 | n2 | main.rs:429:9:429:10 | n2 | main.rs:431:15:431:16 | n2 |
+| main.rs:436:9:436:9 | f | main.rs:436:9:436:9 | f | main.rs:439:15:439:15 | f |
+| main.rs:437:10:437:10 | x | main.rs:437:10:437:10 | x | main.rs:438:9:438:9 | x |
+| main.rs:441:10:441:10 | x | main.rs:441:10:441:10 | x | main.rs:443:9:443:9 | x |
+| main.rs:450:14:450:14 | x | main.rs:450:14:450:14 | x | main.rs:452:17:452:17 | x |
+| main.rs:459:13:459:13 | f | main.rs:459:13:459:13 | f | main.rs:462:19:462:19 | f |
+| main.rs:460:14:460:14 | x | main.rs:460:14:460:14 | x | main.rs:461:13:461:13 | x |
+| main.rs:467:9:467:9 | v | main.rs:467:9:467:9 | v | main.rs:470:12:470:12 | v |
+| main.rs:469:9:469:12 | text | main.rs:469:9:469:12 | text | main.rs:471:19:471:22 | text |
+| main.rs:476:13:476:13 | a | main.rs:476:13:476:13 | a | main.rs:477:5:477:5 | a |
+| main.rs:477:5:477:5 | a | main.rs:476:13:476:13 | a | main.rs:478:15:478:15 | a |
+| main.rs:479:6:479:11 | &mut a | main.rs:476:13:476:13 | a | main.rs:480:15:480:15 | a |
+| main.rs:484:13:484:13 | i | main.rs:484:13:484:13 | i | main.rs:486:14:486:14 | i |
+| main.rs:485:9:485:13 | ref_i | main.rs:485:9:485:13 | ref_i | main.rs:487:6:487:10 | ref_i |
+| main.rs:486:9:486:14 | &mut i | main.rs:484:13:484:13 | i | main.rs:488:15:488:15 | i |
+| main.rs:491:17:491:17 | x | main.rs:491:17:491:17 | x | main.rs:492:6:492:6 | x |
+| main.rs:498:22:498:22 | x | main.rs:498:22:498:22 | x | main.rs:499:6:499:6 | x |
+| main.rs:498:38:498:38 | y | main.rs:498:38:498:38 | y | main.rs:502:6:502:6 | y |
+| main.rs:507:13:507:13 | x | main.rs:507:13:507:13 | x | main.rs:509:27:509:27 | x |
+| main.rs:508:9:508:9 | y | main.rs:508:9:508:9 | y | main.rs:510:6:510:6 | y |
+| main.rs:509:22:509:27 | &mut x | main.rs:507:13:507:13 | x | main.rs:513:15:513:15 | x |
+| main.rs:515:13:515:13 | z | main.rs:515:13:515:13 | z | main.rs:519:14:519:14 | z |
+| main.rs:516:9:516:9 | w | main.rs:516:9:516:9 | w | main.rs:520:9:520:9 | w |
+| main.rs:519:9:519:14 | &mut z | main.rs:515:13:515:13 | z | main.rs:525:15:525:15 | z |
+| main.rs:529:13:529:13 | x | main.rs:529:13:529:13 | x | main.rs:531:14:531:14 | x |
+| main.rs:530:9:530:9 | y | main.rs:530:9:530:9 | y | main.rs:532:6:532:6 | y |
+| main.rs:531:9:531:14 | &mut x | main.rs:529:13:529:13 | x | main.rs:533:15:533:15 | x |
+| main.rs:537:9:537:9 | x | main.rs:537:9:537:9 | x | main.rs:544:15:544:15 | x |
+| main.rs:540:9:540:11 | cap | main.rs:540:9:540:11 | cap | main.rs:543:5:543:7 | cap |
+| main.rs:540:15:542:5 | x | main.rs:537:9:537:9 | x | main.rs:541:19:541:19 | x |
+| main.rs:548:13:548:13 | x | main.rs:548:13:548:13 | x | main.rs:555:15:555:15 | x |
+| main.rs:551:9:551:16 | closure1 | main.rs:551:9:551:16 | closure1 | main.rs:554:5:554:12 | closure1 |
+| main.rs:551:20:553:5 | x | main.rs:548:13:548:13 | x | main.rs:552:19:552:19 | x |
+| main.rs:560:13:560:20 | closure2 | main.rs:560:13:560:20 | closure2 | main.rs:563:5:563:12 | closure2 |
+| main.rs:563:5:563:14 | y | main.rs:557:13:557:13 | y | main.rs:564:15:564:15 | y |
+| main.rs:566:13:566:13 | z | main.rs:566:13:566:13 | z | main.rs:573:15:573:15 | z |
+| main.rs:569:13:569:20 | closure3 | main.rs:569:13:569:20 | closure3 | main.rs:572:5:572:12 | closure3 |
+| main.rs:569:24:571:5 | z | main.rs:566:13:566:13 | z | main.rs:570:9:570:9 | z |
+| main.rs:578:9:578:13 | block | main.rs:578:9:578:13 | block | main.rs:582:5:582:9 | block |
+| main.rs:582:5:582:15 | i | main.rs:577:13:577:13 | i | main.rs:583:15:583:15 | i |
+| main.rs:586:8:586:8 | b | main.rs:586:8:586:8 | b | main.rs:591:16:591:16 | b |
+| main.rs:587:13:587:13 | x | main.rs:587:13:587:13 | x | main.rs:588:15:588:15 | x |
+| main.rs:591:13:600:5 | SSA phi(x) | main.rs:587:13:587:13 | x | main.rs:601:15:601:15 | x |
+| main.rs:593:9:593:9 | x | main.rs:587:13:587:13 | x | main.rs:594:19:594:19 | x |
+| main.rs:597:9:597:9 | x | main.rs:587:13:587:13 | x | main.rs:598:19:598:19 | x |
+| main.rs:604:13:604:14 | b1 | main.rs:604:13:604:14 | b1 | main.rs:607:16:607:17 | b1 |
+| main.rs:604:23:604:24 | b2 | main.rs:604:23:604:24 | b2 | main.rs:615:16:615:17 | b2 |
+| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x | main.rs:609:19:609:19 | x |
+| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x | main.rs:611:19:611:19 | x |
+| main.rs:628:20:628:23 | self | main.rs:628:20:628:23 | self | main.rs:629:16:629:19 | self |
+| main.rs:632:11:632:14 | self | main.rs:632:11:632:14 | self | main.rs:633:9:633:12 | self |
+| main.rs:637:17:637:17 | f | main.rs:637:17:637:17 | f | main.rs:641:9:641:9 | f |
+| main.rs:637:21:640:9 | self | main.rs:636:23:636:26 | self | main.rs:639:13:639:16 | self |
+| main.rs:637:22:637:22 | n | main.rs:637:22:637:22 | n | main.rs:639:25:639:25 | n |
+| main.rs:647:13:647:13 | a | main.rs:647:13:647:13 | a | main.rs:648:15:648:15 | a |
+| main.rs:648:15:648:15 | a | main.rs:647:13:647:13 | a | main.rs:649:5:649:5 | a |
+| main.rs:651:5:651:5 | a | main.rs:647:13:647:13 | a | main.rs:652:15:652:15 | a |
+| main.rs:656:13:656:13 | a | main.rs:656:13:656:13 | a | main.rs:657:15:657:15 | a |
+| main.rs:660:5:660:5 | a | main.rs:656:13:656:13 | a | main.rs:661:15:661:15 | a |
+| main.rs:665:9:665:9 | x | main.rs:665:9:665:9 | x | main.rs:666:20:666:20 | x |
+| main.rs:669:9:669:9 | z | main.rs:669:9:669:9 | z | main.rs:670:20:670:20 | z |
+| main.rs:678:17:678:20 | self | main.rs:678:17:678:20 | self | main.rs:679:10:679:13 | self |
+| main.rs:684:13:684:13 | a | main.rs:684:13:684:13 | a | main.rs:685:5:685:5 | a |
+| main.rs:685:5:685:5 | a | main.rs:684:13:684:13 | a | main.rs:688:15:688:15 | a |
+| main.rs:706:9:706:22 | var_from_macro | main.rs:706:9:706:22 | var_from_macro | main.rs:708:15:708:28 | var_from_macro |
+| main.rs:707:9:707:21 | var_in_macro | main.rs:707:9:707:21 | var_in_macro | main.rs:707:9:707:21 | var_in_macro |
+| main.rs:709:9:709:20 | var_in_macro | main.rs:709:9:709:20 | var_in_macro | main.rs:715:15:715:26 | var_in_macro |
+| main.rs:714:15:714:28 | var_in_macro | main.rs:714:15:714:28 | var_in_macro | main.rs:714:30:714:41 | var_in_macro |
+| main.rs:720:5:720:5 | x | main.rs:719:9:719:9 | x | main.rs:721:15:721:15 | x |
+| main.rs:726:13:726:15 | cap | main.rs:726:13:726:15 | cap | main.rs:732:5:732:7 | cap |
+| main.rs:726:20:726:20 | b | main.rs:726:20:726:20 | b | main.rs:728:20:728:20 | b |
+| main.rs:732:5:732:13 | x | main.rs:725:13:725:13 | x | main.rs:733:15:733:15 | x |
adjacentReads
-| main.rs:39:9:39:10 | x3 | main.rs:39:9:39:10 | x3 | main.rs:40:15:40:16 | x3 | main.rs:42:9:42:10 | x3 |
-| main.rs:47:9:47:10 | x4 | main.rs:47:9:47:10 | x4 | main.rs:48:15:48:16 | x4 | main.rs:53:15:53:16 | x4 |
-| main.rs:98:9:98:9 | x | main.rs:98:9:98:9 | x | main.rs:100:7:100:7 | x | main.rs:103:13:103:13 | x |
-| main.rs:111:9:111:10 | s1 | main.rs:111:9:111:10 | s1 | main.rs:114:11:114:12 | s1 | main.rs:114:11:114:12 | s1 |
-| main.rs:137:9:137:15 | numbers | main.rs:137:9:137:15 | numbers | main.rs:139:11:139:17 | numbers | main.rs:154:11:154:17 | numbers |
-| main.rs:220:9:220:10 | tv | main.rs:220:9:220:10 | tv | main.rs:221:11:221:12 | tv | main.rs:225:11:225:12 | tv |
-| main.rs:220:9:220:10 | tv | main.rs:220:9:220:10 | tv | main.rs:225:11:225:12 | tv | main.rs:229:11:229:12 | tv |
-| main.rs:238:9:238:44 | [match(true)] SSA phi(a7) | main.rs:238:9:238:44 | a7 | main.rs:239:16:239:17 | a7 | main.rs:240:26:240:27 | a7 |
-| main.rs:279:9:279:9 | x | main.rs:279:9:279:9 | x | main.rs:281:7:281:7 | x | main.rs:288:13:288:13 | x |
-| main.rs:280:17:280:17 | x | main.rs:280:17:280:17 | x | main.rs:283:5:283:5 | x | main.rs:285:19:285:19 | x |
-| main.rs:295:9:295:9 | x | main.rs:295:9:295:9 | x | main.rs:297:7:297:7 | x | main.rs:307:13:307:13 | x |
-| main.rs:299:14:299:14 | x | main.rs:299:14:299:14 | x | main.rs:302:5:302:5 | x | main.rs:304:19:304:19 | x |
-| main.rs:314:9:314:9 | x | main.rs:314:9:314:9 | x | main.rs:316:7:316:7 | x | main.rs:327:15:327:15 | x |
-| main.rs:318:14:318:14 | x | main.rs:318:14:318:14 | x | main.rs:321:5:321:5 | x | main.rs:323:19:323:19 | x |
-| main.rs:332:9:332:9 | x | main.rs:332:9:332:9 | x | main.rs:333:11:333:11 | x | main.rs:341:15:341:15 | x |
-| main.rs:346:9:346:9 | x | main.rs:346:9:346:9 | x | main.rs:348:7:348:7 | x | main.rs:353:7:353:7 | x |
-| main.rs:346:9:346:9 | x | main.rs:346:9:346:9 | x | main.rs:353:7:353:7 | x | main.rs:357:19:357:19 | x |
-| main.rs:389:9:389:10 | c2 | main.rs:382:13:382:14 | c2 | main.rs:395:9:395:10 | c2 | main.rs:399:15:399:16 | c2 |
-| main.rs:390:9:390:10 | b4 | main.rs:381:13:381:14 | b4 | main.rs:394:9:394:10 | b4 | main.rs:398:15:398:16 | b4 |
-| main.rs:390:9:390:10 | b4 | main.rs:381:13:381:14 | b4 | main.rs:398:15:398:16 | b4 | main.rs:412:15:412:16 | b4 |
-| main.rs:391:9:391:11 | a10 | main.rs:380:13:380:15 | a10 | main.rs:393:9:393:11 | a10 | main.rs:397:15:397:17 | a10 |
-| main.rs:391:9:391:11 | a10 | main.rs:380:13:380:15 | a10 | main.rs:397:15:397:17 | a10 | main.rs:411:15:411:17 | a10 |
-| main.rs:434:9:434:9 | f | main.rs:434:9:434:9 | f | main.rs:437:15:437:15 | f | main.rs:444:15:444:15 | f |
-| main.rs:475:5:475:5 | a | main.rs:474:13:474:13 | a | main.rs:476:15:476:15 | a | main.rs:477:11:477:11 | a |
-| main.rs:489:17:489:17 | x | main.rs:489:17:489:17 | x | main.rs:490:6:490:6 | x | main.rs:491:10:491:10 | x |
-| main.rs:489:17:489:17 | x | main.rs:489:17:489:17 | x | main.rs:491:10:491:10 | x | main.rs:492:10:492:10 | x |
-| main.rs:489:17:489:17 | x | main.rs:489:17:489:17 | x | main.rs:492:10:492:10 | x | main.rs:493:12:493:12 | x |
-| main.rs:496:22:496:22 | x | main.rs:496:22:496:22 | x | main.rs:497:6:497:6 | x | main.rs:498:10:498:10 | x |
-| main.rs:496:22:496:22 | x | main.rs:496:22:496:22 | x | main.rs:498:10:498:10 | x | main.rs:499:10:499:10 | x |
-| main.rs:496:22:496:22 | x | main.rs:496:22:496:22 | x | main.rs:499:10:499:10 | x | main.rs:501:9:501:9 | x |
-| main.rs:507:22:507:27 | &mut x | main.rs:505:13:505:13 | x | main.rs:511:15:511:15 | x | main.rs:515:19:515:19 | x |
-| main.rs:514:9:514:9 | w | main.rs:514:9:514:9 | w | main.rs:518:9:518:9 | w | main.rs:520:7:520:7 | w |
-| main.rs:585:13:585:13 | x | main.rs:585:13:585:13 | x | main.rs:586:15:586:15 | x | main.rs:587:15:587:15 | x |
-| main.rs:591:9:591:9 | x | main.rs:585:13:585:13 | x | main.rs:592:19:592:19 | x | main.rs:593:19:593:19 | x |
-| main.rs:595:9:595:9 | x | main.rs:585:13:585:13 | x | main.rs:596:19:596:19 | x | main.rs:597:19:597:19 | x |
-| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x | main.rs:607:19:607:19 | x | main.rs:615:19:615:19 | x |
-| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x | main.rs:607:19:607:19 | x | main.rs:617:19:617:19 | x |
-| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x | main.rs:609:19:609:19 | x | main.rs:615:19:615:19 | x |
-| main.rs:603:9:603:9 | x | main.rs:603:9:603:9 | x | main.rs:609:19:609:19 | x | main.rs:617:19:617:19 | x |
-| main.rs:635:17:635:17 | f | main.rs:635:17:635:17 | f | main.rs:639:9:639:9 | f | main.rs:640:9:640:9 | f |
-| main.rs:646:15:646:15 | a | main.rs:645:13:645:13 | a | main.rs:647:5:647:5 | a | main.rs:648:15:648:15 | a |
-| main.rs:654:13:654:13 | a | main.rs:654:13:654:13 | a | main.rs:655:15:655:15 | a | main.rs:656:5:656:5 | a |
-| main.rs:654:13:654:13 | a | main.rs:654:13:654:13 | a | main.rs:656:5:656:5 | a | main.rs:657:15:657:15 | a |
-| main.rs:663:9:663:9 | x | main.rs:663:9:663:9 | x | main.rs:664:20:664:20 | x | main.rs:665:15:665:15 | x |
+| main.rs:27:5:27:6 | x2 | main.rs:25:13:25:14 | x2 | main.rs:28:15:28:16 | x2 | main.rs:29:10:29:11 | x2 |
+| main.rs:41:9:41:10 | x3 | main.rs:41:9:41:10 | x3 | main.rs:42:15:42:16 | x3 | main.rs:44:9:44:10 | x3 |
+| main.rs:49:9:49:10 | x4 | main.rs:49:9:49:10 | x4 | main.rs:50:15:50:16 | x4 | main.rs:55:15:55:16 | x4 |
+| main.rs:100:9:100:9 | x | main.rs:100:9:100:9 | x | main.rs:102:7:102:7 | x | main.rs:105:13:105:13 | x |
+| main.rs:113:9:113:10 | s1 | main.rs:113:9:113:10 | s1 | main.rs:116:11:116:12 | s1 | main.rs:116:11:116:12 | s1 |
+| main.rs:139:9:139:15 | numbers | main.rs:139:9:139:15 | numbers | main.rs:141:11:141:17 | numbers | main.rs:156:11:156:17 | numbers |
+| main.rs:222:9:222:10 | tv | main.rs:222:9:222:10 | tv | main.rs:223:11:223:12 | tv | main.rs:227:11:227:12 | tv |
+| main.rs:222:9:222:10 | tv | main.rs:222:9:222:10 | tv | main.rs:227:11:227:12 | tv | main.rs:231:11:231:12 | tv |
+| main.rs:240:9:240:44 | [match(true)] SSA phi(a7) | main.rs:240:9:240:44 | a7 | main.rs:241:16:241:17 | a7 | main.rs:242:26:242:27 | a7 |
+| main.rs:281:9:281:9 | x | main.rs:281:9:281:9 | x | main.rs:283:7:283:7 | x | main.rs:290:13:290:13 | x |
+| main.rs:282:17:282:17 | x | main.rs:282:17:282:17 | x | main.rs:285:5:285:5 | x | main.rs:287:19:287:19 | x |
+| main.rs:297:9:297:9 | x | main.rs:297:9:297:9 | x | main.rs:299:7:299:7 | x | main.rs:309:13:309:13 | x |
+| main.rs:301:14:301:14 | x | main.rs:301:14:301:14 | x | main.rs:304:5:304:5 | x | main.rs:306:19:306:19 | x |
+| main.rs:316:9:316:9 | x | main.rs:316:9:316:9 | x | main.rs:318:7:318:7 | x | main.rs:329:15:329:15 | x |
+| main.rs:320:14:320:14 | x | main.rs:320:14:320:14 | x | main.rs:323:5:323:5 | x | main.rs:325:19:325:19 | x |
+| main.rs:334:9:334:9 | x | main.rs:334:9:334:9 | x | main.rs:335:11:335:11 | x | main.rs:343:15:343:15 | x |
+| main.rs:348:9:348:9 | x | main.rs:348:9:348:9 | x | main.rs:350:7:350:7 | x | main.rs:355:7:355:7 | x |
+| main.rs:348:9:348:9 | x | main.rs:348:9:348:9 | x | main.rs:355:7:355:7 | x | main.rs:359:19:359:19 | x |
+| main.rs:382:13:382:15 | a10 | main.rs:382:13:382:15 | a10 | main.rs:386:15:386:17 | a10 | main.rs:395:9:395:11 | a10 |
+| main.rs:383:13:383:14 | b4 | main.rs:383:13:383:14 | b4 | main.rs:387:15:387:16 | b4 | main.rs:396:9:396:10 | b4 |
+| main.rs:384:13:384:14 | c2 | main.rs:384:13:384:14 | c2 | main.rs:388:15:388:16 | c2 | main.rs:397:9:397:10 | c2 |
+| main.rs:392:9:392:10 | b4 | main.rs:383:13:383:14 | b4 | main.rs:400:15:400:16 | b4 | main.rs:414:15:414:16 | b4 |
+| main.rs:393:9:393:11 | a10 | main.rs:382:13:382:15 | a10 | main.rs:399:15:399:17 | a10 | main.rs:413:15:413:17 | a10 |
+| main.rs:436:9:436:9 | f | main.rs:436:9:436:9 | f | main.rs:439:15:439:15 | f | main.rs:446:15:446:15 | f |
+| main.rs:477:5:477:5 | a | main.rs:476:13:476:13 | a | main.rs:478:15:478:15 | a | main.rs:479:11:479:11 | a |
+| main.rs:491:17:491:17 | x | main.rs:491:17:491:17 | x | main.rs:492:6:492:6 | x | main.rs:493:10:493:10 | x |
+| main.rs:491:17:491:17 | x | main.rs:491:17:491:17 | x | main.rs:493:10:493:10 | x | main.rs:494:10:494:10 | x |
+| main.rs:491:17:491:17 | x | main.rs:491:17:491:17 | x | main.rs:494:10:494:10 | x | main.rs:495:12:495:12 | x |
+| main.rs:498:22:498:22 | x | main.rs:498:22:498:22 | x | main.rs:499:6:499:6 | x | main.rs:500:10:500:10 | x |
+| main.rs:498:22:498:22 | x | main.rs:498:22:498:22 | x | main.rs:500:10:500:10 | x | main.rs:501:10:501:10 | x |
+| main.rs:498:22:498:22 | x | main.rs:498:22:498:22 | x | main.rs:501:10:501:10 | x | main.rs:503:9:503:9 | x |
+| main.rs:509:22:509:27 | &mut x | main.rs:507:13:507:13 | x | main.rs:513:15:513:15 | x | main.rs:517:19:517:19 | x |
+| main.rs:516:9:516:9 | w | main.rs:516:9:516:9 | w | main.rs:520:9:520:9 | w | main.rs:522:7:522:7 | w |
+| main.rs:587:13:587:13 | x | main.rs:587:13:587:13 | x | main.rs:588:15:588:15 | x | main.rs:589:15:589:15 | x |
+| main.rs:593:9:593:9 | x | main.rs:587:13:587:13 | x | main.rs:594:19:594:19 | x | main.rs:595:19:595:19 | x |
+| main.rs:597:9:597:9 | x | main.rs:587:13:587:13 | x | main.rs:598:19:598:19 | x | main.rs:599:19:599:19 | x |
+| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x | main.rs:609:19:609:19 | x | main.rs:617:19:617:19 | x |
+| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x | main.rs:609:19:609:19 | x | main.rs:619:19:619:19 | x |
+| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x | main.rs:611:19:611:19 | x | main.rs:617:19:617:19 | x |
+| main.rs:605:9:605:9 | x | main.rs:605:9:605:9 | x | main.rs:611:19:611:19 | x | main.rs:619:19:619:19 | x |
+| main.rs:637:17:637:17 | f | main.rs:637:17:637:17 | f | main.rs:641:9:641:9 | f | main.rs:642:9:642:9 | f |
+| main.rs:648:15:648:15 | a | main.rs:647:13:647:13 | a | main.rs:649:5:649:5 | a | main.rs:650:15:650:15 | a |
+| main.rs:656:13:656:13 | a | main.rs:656:13:656:13 | a | main.rs:657:15:657:15 | a | main.rs:658:5:658:5 | a |
+| main.rs:656:13:656:13 | a | main.rs:656:13:656:13 | a | main.rs:658:5:658:5 | a | main.rs:659:15:659:15 | a |
+| main.rs:665:9:665:9 | x | main.rs:665:9:665:9 | x | main.rs:666:20:666:20 | x | main.rs:667:15:667:15 | x |
phi
-| main.rs:208:9:208:44 | SSA phi(a3) | main.rs:208:9:208:44 | a3 | main.rs:208:22:208:23 | a3 |
-| main.rs:208:9:208:44 | SSA phi(a3) | main.rs:208:9:208:44 | a3 | main.rs:208:42:208:43 | a3 |
-| main.rs:222:9:222:81 | SSA phi(a4) | main.rs:222:9:222:81 | a4 | main.rs:222:28:222:29 | a4 |
-| main.rs:222:9:222:81 | SSA phi(a4) | main.rs:222:9:222:81 | a4 | main.rs:222:54:222:55 | a4 |
-| main.rs:222:9:222:81 | SSA phi(a4) | main.rs:222:9:222:81 | a4 | main.rs:222:79:222:80 | a4 |
-| main.rs:226:9:226:83 | SSA phi(a5) | main.rs:226:9:226:83 | a5 | main.rs:226:10:226:57 | [match(true)] SSA phi(a5) |
-| main.rs:226:9:226:83 | SSA phi(a5) | main.rs:226:9:226:83 | a5 | main.rs:226:81:226:82 | a5 |
-| main.rs:226:10:226:57 | [match(true)] SSA phi(a5) | main.rs:226:9:226:83 | a5 | main.rs:226:29:226:30 | a5 |
-| main.rs:226:10:226:57 | [match(true)] SSA phi(a5) | main.rs:226:9:226:83 | a5 | main.rs:226:55:226:56 | a5 |
-| main.rs:230:9:230:83 | SSA phi(a6) | main.rs:230:9:230:83 | a6 | main.rs:230:28:230:29 | a6 |
-| main.rs:230:9:230:83 | SSA phi(a6) | main.rs:230:9:230:83 | a6 | main.rs:230:35:230:82 | SSA phi(a6) |
-| main.rs:230:35:230:82 | SSA phi(a6) | main.rs:230:9:230:83 | a6 | main.rs:230:55:230:56 | a6 |
-| main.rs:230:35:230:82 | SSA phi(a6) | main.rs:230:9:230:83 | a6 | main.rs:230:80:230:81 | a6 |
-| main.rs:238:9:238:44 | [match(true)] SSA phi(a7) | main.rs:238:9:238:44 | a7 | main.rs:238:22:238:23 | a7 |
-| main.rs:238:9:238:44 | [match(true)] SSA phi(a7) | main.rs:238:9:238:44 | a7 | main.rs:238:42:238:43 | a7 |
-| main.rs:250:14:250:51 | [match(true)] SSA phi(a11) | main.rs:250:14:250:51 | a11 | main.rs:250:27:250:29 | a11 |
-| main.rs:250:14:250:51 | [match(true)] SSA phi(a11) | main.rs:250:14:250:51 | a11 | main.rs:250:48:250:50 | a11 |
-| main.rs:272:9:272:109 | SSA phi(a13) | main.rs:272:9:272:109 | a13 | main.rs:272:27:272:29 | a13 |
-| main.rs:272:9:272:109 | SSA phi(a13) | main.rs:272:9:272:109 | a13 | main.rs:272:35:272:82 | [match(true)] SSA phi(a13) |
-| main.rs:272:9:272:109 | SSA phi(a13) | main.rs:272:9:272:109 | a13 | main.rs:272:106:272:108 | a13 |
-| main.rs:272:35:272:82 | [match(true)] SSA phi(a13) | main.rs:272:9:272:109 | a13 | main.rs:272:54:272:56 | a13 |
-| main.rs:272:35:272:82 | [match(true)] SSA phi(a13) | main.rs:272:9:272:109 | a13 | main.rs:272:79:272:81 | a13 |
-| main.rs:373:20:373:55 | SSA phi(a9) | main.rs:373:20:373:55 | a9 | main.rs:373:33:373:34 | a9 |
-| main.rs:373:20:373:55 | SSA phi(a9) | main.rs:373:20:373:55 | a9 | main.rs:373:53:373:54 | a9 |
-| main.rs:589:13:598:5 | SSA phi(x) | main.rs:585:13:585:13 | x | main.rs:591:9:591:9 | x |
-| main.rs:589:13:598:5 | SSA phi(x) | main.rs:585:13:585:13 | x | main.rs:595:9:595:9 | x |
-| main.rs:726:17:728:9 | SSA phi(x) | main.rs:723:13:723:13 | x | main.rs:724:19:729:5 | x |
-| main.rs:726:17:728:9 | SSA phi(x) | main.rs:723:13:723:13 | x | main.rs:727:13:727:13 | x |
+| main.rs:210:9:210:44 | SSA phi(a3) | main.rs:210:9:210:44 | a3 | main.rs:210:22:210:23 | a3 |
+| main.rs:210:9:210:44 | SSA phi(a3) | main.rs:210:9:210:44 | a3 | main.rs:210:42:210:43 | a3 |
+| main.rs:224:9:224:81 | SSA phi(a4) | main.rs:224:9:224:81 | a4 | main.rs:224:28:224:29 | a4 |
+| main.rs:224:9:224:81 | SSA phi(a4) | main.rs:224:9:224:81 | a4 | main.rs:224:54:224:55 | a4 |
+| main.rs:224:9:224:81 | SSA phi(a4) | main.rs:224:9:224:81 | a4 | main.rs:224:79:224:80 | a4 |
+| main.rs:228:9:228:83 | SSA phi(a5) | main.rs:228:9:228:83 | a5 | main.rs:228:10:228:57 | [match(true)] SSA phi(a5) |
+| main.rs:228:9:228:83 | SSA phi(a5) | main.rs:228:9:228:83 | a5 | main.rs:228:81:228:82 | a5 |
+| main.rs:228:10:228:57 | [match(true)] SSA phi(a5) | main.rs:228:9:228:83 | a5 | main.rs:228:29:228:30 | a5 |
+| main.rs:228:10:228:57 | [match(true)] SSA phi(a5) | main.rs:228:9:228:83 | a5 | main.rs:228:55:228:56 | a5 |
+| main.rs:232:9:232:83 | SSA phi(a6) | main.rs:232:9:232:83 | a6 | main.rs:232:28:232:29 | a6 |
+| main.rs:232:9:232:83 | SSA phi(a6) | main.rs:232:9:232:83 | a6 | main.rs:232:35:232:82 | SSA phi(a6) |
+| main.rs:232:35:232:82 | SSA phi(a6) | main.rs:232:9:232:83 | a6 | main.rs:232:55:232:56 | a6 |
+| main.rs:232:35:232:82 | SSA phi(a6) | main.rs:232:9:232:83 | a6 | main.rs:232:80:232:81 | a6 |
+| main.rs:240:9:240:44 | [match(true)] SSA phi(a7) | main.rs:240:9:240:44 | a7 | main.rs:240:22:240:23 | a7 |
+| main.rs:240:9:240:44 | [match(true)] SSA phi(a7) | main.rs:240:9:240:44 | a7 | main.rs:240:42:240:43 | a7 |
+| main.rs:252:14:252:51 | [match(true)] SSA phi(a11) | main.rs:252:14:252:51 | a11 | main.rs:252:27:252:29 | a11 |
+| main.rs:252:14:252:51 | [match(true)] SSA phi(a11) | main.rs:252:14:252:51 | a11 | main.rs:252:48:252:50 | a11 |
+| main.rs:274:9:274:109 | SSA phi(a13) | main.rs:274:9:274:109 | a13 | main.rs:274:27:274:29 | a13 |
+| main.rs:274:9:274:109 | SSA phi(a13) | main.rs:274:9:274:109 | a13 | main.rs:274:35:274:82 | [match(true)] SSA phi(a13) |
+| main.rs:274:9:274:109 | SSA phi(a13) | main.rs:274:9:274:109 | a13 | main.rs:274:106:274:108 | a13 |
+| main.rs:274:35:274:82 | [match(true)] SSA phi(a13) | main.rs:274:9:274:109 | a13 | main.rs:274:54:274:56 | a13 |
+| main.rs:274:35:274:82 | [match(true)] SSA phi(a13) | main.rs:274:9:274:109 | a13 | main.rs:274:79:274:81 | a13 |
+| main.rs:375:20:375:55 | SSA phi(a9) | main.rs:375:20:375:55 | a9 | main.rs:375:33:375:34 | a9 |
+| main.rs:375:20:375:55 | SSA phi(a9) | main.rs:375:20:375:55 | a9 | main.rs:375:53:375:54 | a9 |
+| main.rs:591:13:600:5 | SSA phi(x) | main.rs:587:13:587:13 | x | main.rs:593:9:593:9 | x |
+| main.rs:591:13:600:5 | SSA phi(x) | main.rs:587:13:587:13 | x | main.rs:597:9:597:9 | x |
+| main.rs:728:17:730:9 | SSA phi(x) | main.rs:725:13:725:13 | x | main.rs:726:19:731:5 | x |
+| main.rs:728:17:730:9 | SSA phi(x) | main.rs:725:13:725:13 | x | main.rs:729:13:729:13 | x |
phiReadNode
-| main.rs:114:11:114:12 | SSA phi read(s1) | main.rs:111:9:111:10 | s1 |
-| main.rs:605:13:610:5 | SSA phi read(x) | main.rs:603:9:603:9 | x |
+| main.rs:116:11:116:12 | SSA phi read(s1) | main.rs:113:9:113:10 | s1 |
+| main.rs:607:13:612:5 | SSA phi read(x) | main.rs:605:9:605:9 | x |
phiReadNodeFirstRead
-| main.rs:114:11:114:12 | SSA phi read(s1) | main.rs:111:9:111:10 | s1 | main.rs:114:11:114:12 | s1 |
-| main.rs:605:13:610:5 | SSA phi read(x) | main.rs:603:9:603:9 | x | main.rs:615:19:615:19 | x |
-| main.rs:605:13:610:5 | SSA phi read(x) | main.rs:603:9:603:9 | x | main.rs:617:19:617:19 | x |
+| main.rs:116:11:116:12 | SSA phi read(s1) | main.rs:113:9:113:10 | s1 | main.rs:116:11:116:12 | s1 |
+| main.rs:607:13:612:5 | SSA phi read(x) | main.rs:605:9:605:9 | x | main.rs:617:19:617:19 | x |
+| main.rs:607:13:612:5 | SSA phi read(x) | main.rs:605:9:605:9 | x | main.rs:619:19:619:19 | x |
phiReadInput
-| main.rs:114:11:114:12 | SSA phi read(s1) | main.rs:111:9:111:10 | s1 |
-| main.rs:114:11:114:12 | SSA phi read(s1) | main.rs:114:11:114:12 | SSA read(s1) |
-| main.rs:605:13:610:5 | SSA phi read(x) | main.rs:607:19:607:19 | SSA read(x) |
-| main.rs:605:13:610:5 | SSA phi read(x) | main.rs:609:19:609:19 | SSA read(x) |
+| main.rs:116:11:116:12 | SSA phi read(s1) | main.rs:113:9:113:10 | s1 |
+| main.rs:116:11:116:12 | SSA phi read(s1) | main.rs:116:11:116:12 | SSA read(s1) |
+| main.rs:607:13:612:5 | SSA phi read(x) | main.rs:609:19:609:19 | SSA read(x) |
+| main.rs:607:13:612:5 | SSA phi read(x) | main.rs:611:19:611:19 | SSA read(x) |
ultimateDef
-| main.rs:208:9:208:44 | SSA phi(a3) | main.rs:208:22:208:23 | a3 |
-| main.rs:208:9:208:44 | SSA phi(a3) | main.rs:208:42:208:43 | a3 |
-| main.rs:222:9:222:81 | SSA phi(a4) | main.rs:222:28:222:29 | a4 |
-| main.rs:222:9:222:81 | SSA phi(a4) | main.rs:222:54:222:55 | a4 |
-| main.rs:222:9:222:81 | SSA phi(a4) | main.rs:222:79:222:80 | a4 |
-| main.rs:226:9:226:83 | SSA phi(a5) | main.rs:226:29:226:30 | a5 |
-| main.rs:226:9:226:83 | SSA phi(a5) | main.rs:226:55:226:56 | a5 |
-| main.rs:226:9:226:83 | SSA phi(a5) | main.rs:226:81:226:82 | a5 |
-| main.rs:226:10:226:57 | [match(true)] SSA phi(a5) | main.rs:226:29:226:30 | a5 |
-| main.rs:226:10:226:57 | [match(true)] SSA phi(a5) | main.rs:226:55:226:56 | a5 |
-| main.rs:230:9:230:83 | SSA phi(a6) | main.rs:230:28:230:29 | a6 |
-| main.rs:230:9:230:83 | SSA phi(a6) | main.rs:230:55:230:56 | a6 |
-| main.rs:230:9:230:83 | SSA phi(a6) | main.rs:230:80:230:81 | a6 |
-| main.rs:230:35:230:82 | SSA phi(a6) | main.rs:230:55:230:56 | a6 |
-| main.rs:230:35:230:82 | SSA phi(a6) | main.rs:230:80:230:81 | a6 |
-| main.rs:238:9:238:44 | [match(true)] SSA phi(a7) | main.rs:238:22:238:23 | a7 |
-| main.rs:238:9:238:44 | [match(true)] SSA phi(a7) | main.rs:238:42:238:43 | a7 |
-| main.rs:250:14:250:51 | [match(true)] SSA phi(a11) | main.rs:250:27:250:29 | a11 |
-| main.rs:250:14:250:51 | [match(true)] SSA phi(a11) | main.rs:250:48:250:50 | a11 |
-| main.rs:272:9:272:109 | SSA phi(a13) | main.rs:272:27:272:29 | a13 |
-| main.rs:272:9:272:109 | SSA phi(a13) | main.rs:272:54:272:56 | a13 |
-| main.rs:272:9:272:109 | SSA phi(a13) | main.rs:272:79:272:81 | a13 |
-| main.rs:272:9:272:109 | SSA phi(a13) | main.rs:272:106:272:108 | a13 |
-| main.rs:272:35:272:82 | [match(true)] SSA phi(a13) | main.rs:272:54:272:56 | a13 |
-| main.rs:272:35:272:82 | [match(true)] SSA phi(a13) | main.rs:272:79:272:81 | a13 |
-| main.rs:373:20:373:55 | SSA phi(a9) | main.rs:373:33:373:34 | a9 |
-| main.rs:373:20:373:55 | SSA phi(a9) | main.rs:373:53:373:54 | a9 |
-| main.rs:589:13:598:5 | SSA phi(x) | main.rs:591:9:591:9 | x |
-| main.rs:589:13:598:5 | SSA phi(x) | main.rs:595:9:595:9 | x |
-| main.rs:726:17:728:9 | SSA phi(x) | main.rs:724:19:729:5 | x |
-| main.rs:726:17:728:9 | SSA phi(x) | main.rs:727:13:727:13 | x |
+| main.rs:210:9:210:44 | SSA phi(a3) | main.rs:210:22:210:23 | a3 |
+| main.rs:210:9:210:44 | SSA phi(a3) | main.rs:210:42:210:43 | a3 |
+| main.rs:224:9:224:81 | SSA phi(a4) | main.rs:224:28:224:29 | a4 |
+| main.rs:224:9:224:81 | SSA phi(a4) | main.rs:224:54:224:55 | a4 |
+| main.rs:224:9:224:81 | SSA phi(a4) | main.rs:224:79:224:80 | a4 |
+| main.rs:228:9:228:83 | SSA phi(a5) | main.rs:228:29:228:30 | a5 |
+| main.rs:228:9:228:83 | SSA phi(a5) | main.rs:228:55:228:56 | a5 |
+| main.rs:228:9:228:83 | SSA phi(a5) | main.rs:228:81:228:82 | a5 |
+| main.rs:228:10:228:57 | [match(true)] SSA phi(a5) | main.rs:228:29:228:30 | a5 |
+| main.rs:228:10:228:57 | [match(true)] SSA phi(a5) | main.rs:228:55:228:56 | a5 |
+| main.rs:232:9:232:83 | SSA phi(a6) | main.rs:232:28:232:29 | a6 |
+| main.rs:232:9:232:83 | SSA phi(a6) | main.rs:232:55:232:56 | a6 |
+| main.rs:232:9:232:83 | SSA phi(a6) | main.rs:232:80:232:81 | a6 |
+| main.rs:232:35:232:82 | SSA phi(a6) | main.rs:232:55:232:56 | a6 |
+| main.rs:232:35:232:82 | SSA phi(a6) | main.rs:232:80:232:81 | a6 |
+| main.rs:240:9:240:44 | [match(true)] SSA phi(a7) | main.rs:240:22:240:23 | a7 |
+| main.rs:240:9:240:44 | [match(true)] SSA phi(a7) | main.rs:240:42:240:43 | a7 |
+| main.rs:252:14:252:51 | [match(true)] SSA phi(a11) | main.rs:252:27:252:29 | a11 |
+| main.rs:252:14:252:51 | [match(true)] SSA phi(a11) | main.rs:252:48:252:50 | a11 |
+| main.rs:274:9:274:109 | SSA phi(a13) | main.rs:274:27:274:29 | a13 |
+| main.rs:274:9:274:109 | SSA phi(a13) | main.rs:274:54:274:56 | a13 |
+| main.rs:274:9:274:109 | SSA phi(a13) | main.rs:274:79:274:81 | a13 |
+| main.rs:274:9:274:109 | SSA phi(a13) | main.rs:274:106:274:108 | a13 |
+| main.rs:274:35:274:82 | [match(true)] SSA phi(a13) | main.rs:274:54:274:56 | a13 |
+| main.rs:274:35:274:82 | [match(true)] SSA phi(a13) | main.rs:274:79:274:81 | a13 |
+| main.rs:375:20:375:55 | SSA phi(a9) | main.rs:375:33:375:34 | a9 |
+| main.rs:375:20:375:55 | SSA phi(a9) | main.rs:375:53:375:54 | a9 |
+| main.rs:591:13:600:5 | SSA phi(x) | main.rs:593:9:593:9 | x |
+| main.rs:591:13:600:5 | SSA phi(x) | main.rs:597:9:597:9 | x |
+| main.rs:728:17:730:9 | SSA phi(x) | main.rs:726:19:731:5 | x |
+| main.rs:728:17:730:9 | SSA phi(x) | main.rs:729:13:729:13 | x |
assigns
| main.rs:20:9:20:10 | x1 | main.rs:20:14:20:16 | "a" |
| main.rs:25:13:25:14 | x2 | main.rs:25:18:25:18 | 4 |
| main.rs:27:5:27:6 | x2 | main.rs:27:10:27:10 | 5 |
-| main.rs:32:13:32:13 | x | main.rs:32:17:32:17 | 1 |
-| main.rs:34:5:34:5 | x | main.rs:34:9:34:9 | 2 |
-| main.rs:39:9:39:10 | x3 | main.rs:39:14:39:14 | 1 |
-| main.rs:41:9:41:10 | x3 | main.rs:42:9:42:14 | ... + ... |
-| main.rs:47:9:47:10 | x4 | main.rs:47:14:47:16 | "a" |
-| main.rs:50:13:50:14 | x4 | main.rs:50:18:50:20 | "b" |
-| main.rs:79:9:79:10 | p1 | main.rs:79:14:79:37 | Point {...} |
-| main.rs:89:9:89:10 | s1 | main.rs:89:14:89:41 | Some(...) |
-| main.rs:98:9:98:9 | x | main.rs:98:13:98:22 | Some(...) |
-| main.rs:102:13:102:13 | x | main.rs:103:13:103:13 | x |
-| main.rs:111:9:111:10 | s1 | main.rs:111:14:111:41 | Some(...) |
-| main.rs:120:9:120:10 | x6 | main.rs:120:14:120:20 | Some(...) |
-| main.rs:121:9:121:10 | y1 | main.rs:121:14:121:15 | 10 |
-| main.rs:137:9:137:15 | numbers | main.rs:137:19:137:35 | TupleExpr |
-| main.rs:168:9:168:10 | p2 | main.rs:168:14:168:37 | Point {...} |
-| main.rs:182:9:182:11 | msg | main.rs:182:15:182:38 | ...::Hello {...} |
-| main.rs:206:9:206:14 | either | main.rs:206:18:206:33 | ...::Left(...) |
-| main.rs:220:9:220:10 | tv | main.rs:220:14:220:36 | ...::Second(...) |
-| main.rs:236:9:236:14 | either | main.rs:236:18:236:33 | ...::Left(...) |
-| main.rs:246:9:246:14 | either | main.rs:246:18:246:33 | ...::Left(...) |
-| main.rs:270:9:270:10 | fv | main.rs:270:14:270:35 | ...::Second(...) |
-| main.rs:279:9:279:9 | x | main.rs:279:12:279:19 | Some(...) |
-| main.rs:287:13:287:13 | x | main.rs:288:13:288:13 | x |
-| main.rs:295:9:295:9 | x | main.rs:295:13:295:20 | Some(...) |
-| main.rs:306:13:306:13 | x | main.rs:307:13:307:13 | x |
-| main.rs:314:9:314:9 | x | main.rs:314:13:314:20 | Some(...) |
-| main.rs:332:9:332:9 | x | main.rs:332:13:332:20 | Some(...) |
-| main.rs:335:20:335:20 | x | main.rs:336:18:336:18 | x |
-| main.rs:346:9:346:9 | x | main.rs:346:13:346:18 | Ok(...) |
-| main.rs:416:9:416:23 | example_closure | main.rs:417:9:418:9 | \|...\| x |
-| main.rs:419:9:419:10 | n1 | main.rs:420:9:420:26 | example_closure(...) |
-| main.rs:424:9:424:26 | immutable_variable | main.rs:425:5:426:9 | \|...\| x |
-| main.rs:427:9:427:10 | n2 | main.rs:428:9:428:29 | immutable_variable(...) |
-| main.rs:434:9:434:9 | f | main.rs:435:9:436:9 | \|...\| x |
-| main.rs:457:13:457:13 | f | main.rs:458:13:459:13 | \|...\| x |
-| main.rs:465:9:465:9 | v | main.rs:465:13:465:41 | &... |
-| main.rs:474:13:474:13 | a | main.rs:474:17:474:17 | 0 |
-| main.rs:482:13:482:13 | i | main.rs:482:17:482:17 | 1 |
-| main.rs:483:9:483:13 | ref_i | main.rs:484:9:484:14 | &mut i |
-| main.rs:505:13:505:13 | x | main.rs:505:17:505:17 | 2 |
-| main.rs:506:9:506:9 | y | main.rs:507:9:507:28 | mutate_param(...) |
-| main.rs:513:13:513:13 | z | main.rs:513:17:513:17 | 4 |
-| main.rs:514:9:514:9 | w | main.rs:515:9:515:19 | &mut ... |
-| main.rs:527:13:527:13 | x | main.rs:527:17:527:17 | 1 |
-| main.rs:528:9:528:9 | y | main.rs:529:9:529:14 | &mut x |
-| main.rs:535:9:535:9 | x | main.rs:535:13:535:15 | 100 |
-| main.rs:538:9:538:11 | cap | main.rs:538:15:540:5 | \|...\| ... |
-| main.rs:546:13:546:13 | x | main.rs:546:17:546:17 | 1 |
-| main.rs:549:9:549:16 | closure1 | main.rs:549:20:551:5 | \|...\| ... |
-| main.rs:555:13:555:13 | y | main.rs:555:17:555:17 | 2 |
-| main.rs:558:13:558:20 | closure2 | main.rs:558:24:560:5 | \|...\| ... |
-| main.rs:559:9:559:9 | y | main.rs:559:13:559:13 | 3 |
-| main.rs:564:13:564:13 | z | main.rs:564:17:564:17 | 2 |
-| main.rs:567:13:567:20 | closure3 | main.rs:567:24:569:5 | \|...\| ... |
-| main.rs:575:13:575:13 | i | main.rs:575:22:575:22 | 0 |
-| main.rs:576:9:576:13 | block | main.rs:576:17:578:5 | { ... } |
-| main.rs:577:9:577:9 | i | main.rs:577:13:577:13 | 1 |
-| main.rs:585:13:585:13 | x | main.rs:585:17:585:17 | 1 |
-| main.rs:591:9:591:9 | x | main.rs:591:13:591:13 | 2 |
-| main.rs:595:9:595:9 | x | main.rs:595:13:595:13 | 3 |
-| main.rs:603:9:603:9 | x | main.rs:603:13:603:13 | 1 |
-| main.rs:635:17:635:17 | f | main.rs:635:21:638:9 | \|...\| ... |
-| main.rs:645:13:645:13 | a | main.rs:645:17:645:35 | MyStruct {...} |
-| main.rs:649:5:649:5 | a | main.rs:649:9:649:27 | MyStruct {...} |
-| main.rs:654:13:654:13 | a | main.rs:654:17:654:25 | [...] |
-| main.rs:658:5:658:5 | a | main.rs:658:9:658:17 | [...] |
-| main.rs:663:9:663:9 | x | main.rs:663:13:663:14 | 16 |
-| main.rs:667:9:667:9 | z | main.rs:667:13:667:14 | 17 |
-| main.rs:682:13:682:13 | a | main.rs:682:17:682:35 | MyStruct {...} |
-| main.rs:704:9:704:22 | var_from_macro | main.rs:705:9:705:25 | MacroExpr |
-| main.rs:705:9:705:21 | var_in_macro | main.rs:705:23:705:24 | 37 |
-| main.rs:707:9:707:20 | var_in_macro | main.rs:707:24:707:25 | 33 |
-| main.rs:712:15:712:28 | var_in_macro | main.rs:712:15:712:28 | 0 |
-| main.rs:718:5:718:5 | x | main.rs:718:9:718:9 | 1 |
-| main.rs:723:13:723:13 | x | main.rs:723:17:723:19 | 100 |
-| main.rs:724:13:724:15 | cap | main.rs:724:19:729:5 | \|...\| ... |
-| main.rs:727:13:727:13 | x | main.rs:727:17:727:19 | 200 |
+| main.rs:29:5:29:6 | x2 | main.rs:29:10:29:11 | x2 |
+| main.rs:34:13:34:13 | x | main.rs:34:17:34:17 | 1 |
+| main.rs:36:5:36:5 | x | main.rs:36:9:36:9 | 2 |
+| main.rs:41:9:41:10 | x3 | main.rs:41:14:41:14 | 1 |
+| main.rs:43:9:43:10 | x3 | main.rs:44:9:44:14 | ... + ... |
+| main.rs:49:9:49:10 | x4 | main.rs:49:14:49:16 | "a" |
+| main.rs:52:13:52:14 | x4 | main.rs:52:18:52:20 | "b" |
+| main.rs:81:9:81:10 | p1 | main.rs:81:14:81:37 | Point {...} |
+| main.rs:91:9:91:10 | s1 | main.rs:91:14:91:41 | Some(...) |
+| main.rs:100:9:100:9 | x | main.rs:100:13:100:22 | Some(...) |
+| main.rs:104:13:104:13 | x | main.rs:105:13:105:13 | x |
+| main.rs:113:9:113:10 | s1 | main.rs:113:14:113:41 | Some(...) |
+| main.rs:122:9:122:10 | x6 | main.rs:122:14:122:20 | Some(...) |
+| main.rs:123:9:123:10 | y1 | main.rs:123:14:123:15 | 10 |
+| main.rs:139:9:139:15 | numbers | main.rs:139:19:139:35 | TupleExpr |
+| main.rs:170:9:170:10 | p2 | main.rs:170:14:170:37 | Point {...} |
+| main.rs:184:9:184:11 | msg | main.rs:184:15:184:38 | ...::Hello {...} |
+| main.rs:208:9:208:14 | either | main.rs:208:18:208:33 | ...::Left(...) |
+| main.rs:222:9:222:10 | tv | main.rs:222:14:222:36 | ...::Second(...) |
+| main.rs:238:9:238:14 | either | main.rs:238:18:238:33 | ...::Left(...) |
+| main.rs:248:9:248:14 | either | main.rs:248:18:248:33 | ...::Left(...) |
+| main.rs:272:9:272:10 | fv | main.rs:272:14:272:35 | ...::Second(...) |
+| main.rs:281:9:281:9 | x | main.rs:281:12:281:19 | Some(...) |
+| main.rs:289:13:289:13 | x | main.rs:290:13:290:13 | x |
+| main.rs:297:9:297:9 | x | main.rs:297:13:297:20 | Some(...) |
+| main.rs:308:13:308:13 | x | main.rs:309:13:309:13 | x |
+| main.rs:316:9:316:9 | x | main.rs:316:13:316:20 | Some(...) |
+| main.rs:334:9:334:9 | x | main.rs:334:13:334:20 | Some(...) |
+| main.rs:337:20:337:20 | x | main.rs:338:18:338:18 | x |
+| main.rs:348:9:348:9 | x | main.rs:348:13:348:18 | Ok(...) |
+| main.rs:418:9:418:23 | example_closure | main.rs:419:9:420:9 | \|...\| x |
+| main.rs:421:9:421:10 | n1 | main.rs:422:9:422:26 | example_closure(...) |
+| main.rs:426:9:426:26 | immutable_variable | main.rs:427:5:428:9 | \|...\| x |
+| main.rs:429:9:429:10 | n2 | main.rs:430:9:430:29 | immutable_variable(...) |
+| main.rs:436:9:436:9 | f | main.rs:437:9:438:9 | \|...\| x |
+| main.rs:459:13:459:13 | f | main.rs:460:13:461:13 | \|...\| x |
+| main.rs:467:9:467:9 | v | main.rs:467:13:467:41 | &... |
+| main.rs:476:13:476:13 | a | main.rs:476:17:476:17 | 0 |
+| main.rs:484:13:484:13 | i | main.rs:484:17:484:17 | 1 |
+| main.rs:485:9:485:13 | ref_i | main.rs:486:9:486:14 | &mut i |
+| main.rs:507:13:507:13 | x | main.rs:507:17:507:17 | 2 |
+| main.rs:508:9:508:9 | y | main.rs:509:9:509:28 | mutate_param(...) |
+| main.rs:515:13:515:13 | z | main.rs:515:17:515:17 | 4 |
+| main.rs:516:9:516:9 | w | main.rs:517:9:517:19 | &mut ... |
+| main.rs:529:13:529:13 | x | main.rs:529:17:529:17 | 1 |
+| main.rs:530:9:530:9 | y | main.rs:531:9:531:14 | &mut x |
+| main.rs:537:9:537:9 | x | main.rs:537:13:537:15 | 100 |
+| main.rs:540:9:540:11 | cap | main.rs:540:15:542:5 | \|...\| ... |
+| main.rs:548:13:548:13 | x | main.rs:548:17:548:17 | 1 |
+| main.rs:551:9:551:16 | closure1 | main.rs:551:20:553:5 | \|...\| ... |
+| main.rs:557:13:557:13 | y | main.rs:557:17:557:17 | 2 |
+| main.rs:560:13:560:20 | closure2 | main.rs:560:24:562:5 | \|...\| ... |
+| main.rs:561:9:561:9 | y | main.rs:561:13:561:13 | 3 |
+| main.rs:566:13:566:13 | z | main.rs:566:17:566:17 | 2 |
+| main.rs:569:13:569:20 | closure3 | main.rs:569:24:571:5 | \|...\| ... |
+| main.rs:577:13:577:13 | i | main.rs:577:22:577:22 | 0 |
+| main.rs:578:9:578:13 | block | main.rs:578:17:580:5 | { ... } |
+| main.rs:579:9:579:9 | i | main.rs:579:13:579:13 | 1 |
+| main.rs:587:13:587:13 | x | main.rs:587:17:587:17 | 1 |
+| main.rs:593:9:593:9 | x | main.rs:593:13:593:13 | 2 |
+| main.rs:597:9:597:9 | x | main.rs:597:13:597:13 | 3 |
+| main.rs:605:9:605:9 | x | main.rs:605:13:605:13 | 1 |
+| main.rs:637:17:637:17 | f | main.rs:637:21:640:9 | \|...\| ... |
+| main.rs:647:13:647:13 | a | main.rs:647:17:647:35 | MyStruct {...} |
+| main.rs:651:5:651:5 | a | main.rs:651:9:651:27 | MyStruct {...} |
+| main.rs:656:13:656:13 | a | main.rs:656:17:656:25 | [...] |
+| main.rs:660:5:660:5 | a | main.rs:660:9:660:17 | [...] |
+| main.rs:665:9:665:9 | x | main.rs:665:13:665:14 | 16 |
+| main.rs:669:9:669:9 | z | main.rs:669:13:669:14 | 17 |
+| main.rs:684:13:684:13 | a | main.rs:684:17:684:35 | MyStruct {...} |
+| main.rs:706:9:706:22 | var_from_macro | main.rs:707:9:707:25 | MacroExpr |
+| main.rs:707:9:707:21 | var_in_macro | main.rs:707:23:707:24 | 37 |
+| main.rs:709:9:709:20 | var_in_macro | main.rs:709:24:709:25 | 33 |
+| main.rs:714:15:714:28 | var_in_macro | main.rs:714:15:714:28 | 0 |
+| main.rs:720:5:720:5 | x | main.rs:720:9:720:9 | 1 |
+| main.rs:725:13:725:13 | x | main.rs:725:17:725:19 | 100 |
+| main.rs:726:13:726:15 | cap | main.rs:726:19:731:5 | \|...\| ... |
+| main.rs:729:13:729:13 | x | main.rs:729:17:729:19 | 200 |
diff --git a/rust/ql/test/library-tests/variables/main.rs b/rust/ql/test/library-tests/variables/main.rs
index 97ab183099e..948d9134be3 100644
--- a/rust/ql/test/library-tests/variables/main.rs
+++ b/rust/ql/test/library-tests/variables/main.rs
@@ -26,6 +26,8 @@ fn mutable_variable() {
print_i64(x2); // $ read_access=x2
x2 = 5; // $ write_access=x2
print_i64(x2); // $ read_access=x2
+ x2 = x2; // $ read_access=x2 $ write_access=x2
+ print_i64(x2); // $ read_access=x2
}
fn mutable_variable_immutable_borrow() {
diff --git a/rust/ql/test/library-tests/variables/variables.expected b/rust/ql/test/library-tests/variables/variables.expected
index 2a8673172d2..d2194a59cad 100644
--- a/rust/ql/test/library-tests/variables/variables.expected
+++ b/rust/ql/test/library-tests/variables/variables.expected
@@ -5,138 +5,138 @@ variable
| main.rs:15:18:15:18 | i |
| main.rs:20:9:20:10 | x1 |
| main.rs:25:13:25:14 | x2 |
-| main.rs:32:13:32:13 | x |
-| main.rs:39:9:39:10 | x3 |
+| main.rs:34:13:34:13 | x |
| main.rs:41:9:41:10 | x3 |
-| main.rs:47:9:47:10 | x4 |
-| main.rs:50:13:50:14 | x4 |
-| main.rs:64:13:64:14 | a1 |
-| main.rs:65:13:65:14 | b1 |
-| main.rs:68:13:68:13 | x |
-| main.rs:69:13:69:13 | y |
-| main.rs:79:9:79:10 | p1 |
-| main.rs:81:12:81:13 | a2 |
-| main.rs:82:12:82:13 | b2 |
-| main.rs:89:9:89:10 | s1 |
-| main.rs:91:21:91:22 | s2 |
-| main.rs:98:9:98:9 | x |
-| main.rs:99:14:99:14 | x |
-| main.rs:102:13:102:13 | x |
-| main.rs:111:9:111:10 | s1 |
-| main.rs:113:24:113:25 | s2 |
-| main.rs:120:9:120:10 | x6 |
-| main.rs:121:9:121:10 | y1 |
-| main.rs:125:14:125:15 | y1 |
-| main.rs:137:9:137:15 | numbers |
-| main.rs:142:13:142:17 | first |
-| main.rs:144:13:144:17 | third |
-| main.rs:146:13:146:17 | fifth |
-| main.rs:157:13:157:17 | first |
-| main.rs:159:13:159:16 | last |
-| main.rs:168:9:168:10 | p2 |
-| main.rs:172:16:172:17 | x7 |
-| main.rs:182:9:182:11 | msg |
-| main.rs:187:17:187:27 | id_variable |
-| main.rs:192:26:192:27 | id |
-| main.rs:206:9:206:14 | either |
-| main.rs:208:9:208:44 | a3 |
-| main.rs:220:9:220:10 | tv |
-| main.rs:222:9:222:81 | a4 |
-| main.rs:226:9:226:83 | a5 |
-| main.rs:230:9:230:83 | a6 |
-| main.rs:236:9:236:14 | either |
-| main.rs:238:9:238:44 | a7 |
-| main.rs:246:9:246:14 | either |
-| main.rs:249:13:249:13 | e |
-| main.rs:250:14:250:51 | a11 |
-| main.rs:253:33:253:35 | a12 |
-| main.rs:270:9:270:10 | fv |
-| main.rs:272:9:272:109 | a13 |
-| main.rs:279:9:279:9 | x |
-| main.rs:280:17:280:17 | x |
-| main.rs:287:13:287:13 | x |
-| main.rs:295:9:295:9 | x |
-| main.rs:296:17:296:17 | x |
-| main.rs:299:14:299:14 | x |
-| main.rs:306:13:306:13 | x |
-| main.rs:314:9:314:9 | x |
-| main.rs:315:20:315:20 | x |
-| main.rs:318:14:318:14 | x |
-| main.rs:332:9:332:9 | x |
-| main.rs:334:14:334:14 | x |
-| main.rs:335:20:335:20 | x |
-| main.rs:346:9:346:9 | x |
-| main.rs:347:16:347:16 | x |
-| main.rs:352:20:352:20 | x |
-| main.rs:362:5:362:6 | a8 |
-| main.rs:364:9:364:10 | b3 |
-| main.rs:365:9:365:10 | c1 |
-| main.rs:373:20:373:55 | a9 |
-| main.rs:380:13:380:15 | a10 |
-| main.rs:381:13:381:14 | b4 |
-| main.rs:382:13:382:14 | c2 |
-| main.rs:403:13:403:15 | a10 |
-| main.rs:404:13:404:14 | b4 |
-| main.rs:416:9:416:23 | example_closure |
-| main.rs:417:10:417:10 | x |
-| main.rs:419:9:419:10 | n1 |
-| main.rs:424:9:424:26 | immutable_variable |
-| main.rs:425:6:425:6 | x |
-| main.rs:427:9:427:10 | n2 |
-| main.rs:434:9:434:9 | f |
-| main.rs:435:10:435:10 | x |
-| main.rs:439:10:439:10 | x |
-| main.rs:448:14:448:14 | x |
-| main.rs:457:13:457:13 | f |
-| main.rs:458:14:458:14 | x |
-| main.rs:465:9:465:9 | v |
-| main.rs:467:9:467:12 | text |
-| main.rs:474:13:474:13 | a |
-| main.rs:482:13:482:13 | i |
-| main.rs:483:9:483:13 | ref_i |
-| main.rs:489:17:489:17 | x |
-| main.rs:496:22:496:22 | x |
-| main.rs:496:38:496:38 | y |
-| main.rs:505:13:505:13 | x |
-| main.rs:506:9:506:9 | y |
-| main.rs:513:13:513:13 | z |
-| main.rs:514:9:514:9 | w |
-| main.rs:527:13:527:13 | x |
-| main.rs:528:9:528:9 | y |
-| main.rs:535:9:535:9 | x |
-| main.rs:538:9:538:11 | cap |
-| main.rs:546:13:546:13 | x |
-| main.rs:549:9:549:16 | closure1 |
-| main.rs:555:13:555:13 | y |
-| main.rs:558:13:558:20 | closure2 |
-| main.rs:564:13:564:13 | z |
-| main.rs:567:13:567:20 | closure3 |
-| main.rs:575:13:575:13 | i |
-| main.rs:576:9:576:13 | block |
-| main.rs:584:8:584:8 | b |
-| main.rs:585:13:585:13 | x |
-| main.rs:602:13:602:14 | b1 |
-| main.rs:602:23:602:24 | b2 |
-| main.rs:603:9:603:9 | x |
-| main.rs:626:20:626:23 | self |
-| main.rs:630:11:630:14 | self |
-| main.rs:634:23:634:26 | self |
-| main.rs:635:17:635:17 | f |
-| main.rs:635:22:635:22 | n |
-| main.rs:645:13:645:13 | a |
-| main.rs:654:13:654:13 | a |
-| main.rs:663:9:663:9 | x |
-| main.rs:667:9:667:9 | z |
-| main.rs:676:17:676:20 | self |
-| main.rs:682:13:682:13 | a |
-| main.rs:704:9:704:22 | var_from_macro |
-| main.rs:705:9:705:21 | var_in_macro |
-| main.rs:707:9:707:20 | var_in_macro |
-| main.rs:712:15:712:28 | var_in_macro |
-| main.rs:717:9:717:9 | x |
-| main.rs:723:13:723:13 | x |
-| main.rs:724:13:724:15 | cap |
-| main.rs:724:20:724:20 | b |
+| main.rs:43:9:43:10 | x3 |
+| main.rs:49:9:49:10 | x4 |
+| main.rs:52:13:52:14 | x4 |
+| main.rs:66:13:66:14 | a1 |
+| main.rs:67:13:67:14 | b1 |
+| main.rs:70:13:70:13 | x |
+| main.rs:71:13:71:13 | y |
+| main.rs:81:9:81:10 | p1 |
+| main.rs:83:12:83:13 | a2 |
+| main.rs:84:12:84:13 | b2 |
+| main.rs:91:9:91:10 | s1 |
+| main.rs:93:21:93:22 | s2 |
+| main.rs:100:9:100:9 | x |
+| main.rs:101:14:101:14 | x |
+| main.rs:104:13:104:13 | x |
+| main.rs:113:9:113:10 | s1 |
+| main.rs:115:24:115:25 | s2 |
+| main.rs:122:9:122:10 | x6 |
+| main.rs:123:9:123:10 | y1 |
+| main.rs:127:14:127:15 | y1 |
+| main.rs:139:9:139:15 | numbers |
+| main.rs:144:13:144:17 | first |
+| main.rs:146:13:146:17 | third |
+| main.rs:148:13:148:17 | fifth |
+| main.rs:159:13:159:17 | first |
+| main.rs:161:13:161:16 | last |
+| main.rs:170:9:170:10 | p2 |
+| main.rs:174:16:174:17 | x7 |
+| main.rs:184:9:184:11 | msg |
+| main.rs:189:17:189:27 | id_variable |
+| main.rs:194:26:194:27 | id |
+| main.rs:208:9:208:14 | either |
+| main.rs:210:9:210:44 | a3 |
+| main.rs:222:9:222:10 | tv |
+| main.rs:224:9:224:81 | a4 |
+| main.rs:228:9:228:83 | a5 |
+| main.rs:232:9:232:83 | a6 |
+| main.rs:238:9:238:14 | either |
+| main.rs:240:9:240:44 | a7 |
+| main.rs:248:9:248:14 | either |
+| main.rs:251:13:251:13 | e |
+| main.rs:252:14:252:51 | a11 |
+| main.rs:255:33:255:35 | a12 |
+| main.rs:272:9:272:10 | fv |
+| main.rs:274:9:274:109 | a13 |
+| main.rs:281:9:281:9 | x |
+| main.rs:282:17:282:17 | x |
+| main.rs:289:13:289:13 | x |
+| main.rs:297:9:297:9 | x |
+| main.rs:298:17:298:17 | x |
+| main.rs:301:14:301:14 | x |
+| main.rs:308:13:308:13 | x |
+| main.rs:316:9:316:9 | x |
+| main.rs:317:20:317:20 | x |
+| main.rs:320:14:320:14 | x |
+| main.rs:334:9:334:9 | x |
+| main.rs:336:14:336:14 | x |
+| main.rs:337:20:337:20 | x |
+| main.rs:348:9:348:9 | x |
+| main.rs:349:16:349:16 | x |
+| main.rs:354:20:354:20 | x |
+| main.rs:364:5:364:6 | a8 |
+| main.rs:366:9:366:10 | b3 |
+| main.rs:367:9:367:10 | c1 |
+| main.rs:375:20:375:55 | a9 |
+| main.rs:382:13:382:15 | a10 |
+| main.rs:383:13:383:14 | b4 |
+| main.rs:384:13:384:14 | c2 |
+| main.rs:405:13:405:15 | a10 |
+| main.rs:406:13:406:14 | b4 |
+| main.rs:418:9:418:23 | example_closure |
+| main.rs:419:10:419:10 | x |
+| main.rs:421:9:421:10 | n1 |
+| main.rs:426:9:426:26 | immutable_variable |
+| main.rs:427:6:427:6 | x |
+| main.rs:429:9:429:10 | n2 |
+| main.rs:436:9:436:9 | f |
+| main.rs:437:10:437:10 | x |
+| main.rs:441:10:441:10 | x |
+| main.rs:450:14:450:14 | x |
+| main.rs:459:13:459:13 | f |
+| main.rs:460:14:460:14 | x |
+| main.rs:467:9:467:9 | v |
+| main.rs:469:9:469:12 | text |
+| main.rs:476:13:476:13 | a |
+| main.rs:484:13:484:13 | i |
+| main.rs:485:9:485:13 | ref_i |
+| main.rs:491:17:491:17 | x |
+| main.rs:498:22:498:22 | x |
+| main.rs:498:38:498:38 | y |
+| main.rs:507:13:507:13 | x |
+| main.rs:508:9:508:9 | y |
+| main.rs:515:13:515:13 | z |
+| main.rs:516:9:516:9 | w |
+| main.rs:529:13:529:13 | x |
+| main.rs:530:9:530:9 | y |
+| main.rs:537:9:537:9 | x |
+| main.rs:540:9:540:11 | cap |
+| main.rs:548:13:548:13 | x |
+| main.rs:551:9:551:16 | closure1 |
+| main.rs:557:13:557:13 | y |
+| main.rs:560:13:560:20 | closure2 |
+| main.rs:566:13:566:13 | z |
+| main.rs:569:13:569:20 | closure3 |
+| main.rs:577:13:577:13 | i |
+| main.rs:578:9:578:13 | block |
+| main.rs:586:8:586:8 | b |
+| main.rs:587:13:587:13 | x |
+| main.rs:604:13:604:14 | b1 |
+| main.rs:604:23:604:24 | b2 |
+| main.rs:605:9:605:9 | x |
+| main.rs:628:20:628:23 | self |
+| main.rs:632:11:632:14 | self |
+| main.rs:636:23:636:26 | self |
+| main.rs:637:17:637:17 | f |
+| main.rs:637:22:637:22 | n |
+| main.rs:647:13:647:13 | a |
+| main.rs:656:13:656:13 | a |
+| main.rs:665:9:665:9 | x |
+| main.rs:669:9:669:9 | z |
+| main.rs:678:17:678:20 | self |
+| main.rs:684:13:684:13 | a |
+| main.rs:706:9:706:22 | var_from_macro |
+| main.rs:707:9:707:21 | var_in_macro |
+| main.rs:709:9:709:20 | var_in_macro |
+| main.rs:714:15:714:28 | var_in_macro |
+| main.rs:719:9:719:9 | x |
+| main.rs:725:13:725:13 | x |
+| main.rs:726:13:726:15 | cap |
+| main.rs:726:20:726:20 | b |
variableAccess
| main.rs:7:20:7:20 | s | main.rs:5:14:5:14 | s |
| main.rs:12:20:12:20 | i | main.rs:10:14:10:14 | i |
@@ -145,226 +145,230 @@ variableAccess
| main.rs:26:15:26:16 | x2 | main.rs:25:13:25:14 | x2 |
| main.rs:27:5:27:6 | x2 | main.rs:25:13:25:14 | x2 |
| main.rs:28:15:28:16 | x2 | main.rs:25:13:25:14 | x2 |
-| main.rs:33:20:33:20 | x | main.rs:32:13:32:13 | x |
-| main.rs:34:5:34:5 | x | main.rs:32:13:32:13 | x |
-| main.rs:35:20:35:20 | x | main.rs:32:13:32:13 | x |
-| main.rs:40:15:40:16 | x3 | main.rs:39:9:39:10 | x3 |
-| main.rs:42:9:42:10 | x3 | main.rs:39:9:39:10 | x3 |
-| main.rs:43:15:43:16 | x3 | main.rs:41:9:41:10 | x3 |
-| main.rs:48:15:48:16 | x4 | main.rs:47:9:47:10 | x4 |
-| main.rs:51:19:51:20 | x4 | main.rs:50:13:50:14 | x4 |
-| main.rs:53:15:53:16 | x4 | main.rs:47:9:47:10 | x4 |
-| main.rs:72:15:72:16 | a1 | main.rs:64:13:64:14 | a1 |
-| main.rs:73:15:73:16 | b1 | main.rs:65:13:65:14 | b1 |
-| main.rs:74:15:74:15 | x | main.rs:68:13:68:13 | x |
-| main.rs:75:15:75:15 | y | main.rs:69:13:69:13 | y |
-| main.rs:83:9:83:10 | p1 | main.rs:79:9:79:10 | p1 |
-| main.rs:84:15:84:16 | a2 | main.rs:81:12:81:13 | a2 |
-| main.rs:85:15:85:16 | b2 | main.rs:82:12:82:13 | b2 |
-| main.rs:92:11:92:12 | s1 | main.rs:89:9:89:10 | s1 |
-| main.rs:93:19:93:20 | s2 | main.rs:91:21:91:22 | s2 |
-| main.rs:100:7:100:7 | x | main.rs:98:9:98:9 | x |
-| main.rs:103:13:103:13 | x | main.rs:98:9:98:9 | x |
-| main.rs:104:19:104:19 | x | main.rs:102:13:102:13 | x |
-| main.rs:107:15:107:15 | x | main.rs:99:14:99:14 | x |
-| main.rs:114:11:114:12 | s1 | main.rs:111:9:111:10 | s1 |
-| main.rs:115:19:115:20 | s2 | main.rs:113:24:113:25 | s2 |
-| main.rs:123:11:123:12 | x6 | main.rs:120:9:120:10 | x6 |
-| main.rs:128:23:128:24 | y1 | main.rs:125:14:125:15 | y1 |
-| main.rs:133:15:133:16 | y1 | main.rs:121:9:121:10 | y1 |
-| main.rs:139:11:139:17 | numbers | main.rs:137:9:137:15 | numbers |
-| main.rs:148:23:148:27 | first | main.rs:142:13:142:17 | first |
-| main.rs:149:23:149:27 | third | main.rs:144:13:144:17 | third |
-| main.rs:150:23:150:27 | fifth | main.rs:146:13:146:17 | fifth |
-| main.rs:154:11:154:17 | numbers | main.rs:137:9:137:15 | numbers |
-| main.rs:161:23:161:27 | first | main.rs:157:13:157:17 | first |
-| main.rs:162:23:162:26 | last | main.rs:159:13:159:16 | last |
-| main.rs:170:11:170:12 | p2 | main.rs:168:9:168:10 | p2 |
-| main.rs:173:24:173:25 | x7 | main.rs:172:16:172:17 | x7 |
-| main.rs:184:11:184:13 | msg | main.rs:182:9:182:11 | msg |
-| main.rs:188:24:188:34 | id_variable | main.rs:187:17:187:27 | id_variable |
-| main.rs:195:23:195:24 | id | main.rs:192:26:192:27 | id |
-| main.rs:207:11:207:16 | either | main.rs:206:9:206:14 | either |
-| main.rs:209:26:209:27 | a3 | main.rs:208:9:208:44 | a3 |
-| main.rs:221:11:221:12 | tv | main.rs:220:9:220:10 | tv |
-| main.rs:223:26:223:27 | a4 | main.rs:222:9:222:81 | a4 |
-| main.rs:225:11:225:12 | tv | main.rs:220:9:220:10 | tv |
-| main.rs:227:26:227:27 | a5 | main.rs:226:9:226:83 | a5 |
-| main.rs:229:11:229:12 | tv | main.rs:220:9:220:10 | tv |
-| main.rs:231:26:231:27 | a6 | main.rs:230:9:230:83 | a6 |
-| main.rs:237:11:237:16 | either | main.rs:236:9:236:14 | either |
-| main.rs:239:16:239:17 | a7 | main.rs:238:9:238:44 | a7 |
-| main.rs:240:26:240:27 | a7 | main.rs:238:9:238:44 | a7 |
-| main.rs:248:11:248:16 | either | main.rs:246:9:246:14 | either |
-| main.rs:252:23:252:25 | a11 | main.rs:250:14:250:51 | a11 |
-| main.rs:254:15:254:15 | e | main.rs:249:13:249:13 | e |
-| main.rs:255:28:255:30 | a12 | main.rs:253:33:253:35 | a12 |
-| main.rs:271:11:271:12 | fv | main.rs:270:9:270:10 | fv |
-| main.rs:273:26:273:28 | a13 | main.rs:272:9:272:109 | a13 |
-| main.rs:281:7:281:7 | x | main.rs:279:9:279:9 | x |
-| main.rs:283:5:283:5 | x | main.rs:280:17:280:17 | x |
-| main.rs:285:19:285:19 | x | main.rs:280:17:280:17 | x |
-| main.rs:288:13:288:13 | x | main.rs:279:9:279:9 | x |
-| main.rs:289:19:289:19 | x | main.rs:287:13:287:13 | x |
-| main.rs:297:7:297:7 | x | main.rs:295:9:295:9 | x |
-| main.rs:300:12:300:12 | x | main.rs:296:17:296:17 | x |
-| main.rs:302:5:302:5 | x | main.rs:299:14:299:14 | x |
-| main.rs:304:19:304:19 | x | main.rs:299:14:299:14 | x |
-| main.rs:307:13:307:13 | x | main.rs:295:9:295:9 | x |
-| main.rs:308:19:308:19 | x | main.rs:306:13:306:13 | x |
-| main.rs:316:7:316:7 | x | main.rs:314:9:314:9 | x |
-| main.rs:319:12:319:12 | x | main.rs:315:20:315:20 | x |
-| main.rs:321:5:321:5 | x | main.rs:318:14:318:14 | x |
-| main.rs:323:19:323:19 | x | main.rs:318:14:318:14 | x |
-| main.rs:327:15:327:15 | x | main.rs:314:9:314:9 | x |
-| main.rs:333:11:333:11 | x | main.rs:332:9:332:9 | x |
-| main.rs:336:18:336:18 | x | main.rs:334:14:334:14 | x |
-| main.rs:337:19:337:19 | x | main.rs:335:20:335:20 | x |
-| main.rs:341:15:341:15 | x | main.rs:332:9:332:9 | x |
-| main.rs:348:7:348:7 | x | main.rs:346:9:346:9 | x |
-| main.rs:350:19:350:19 | x | main.rs:347:16:347:16 | x |
-| main.rs:353:7:353:7 | x | main.rs:346:9:346:9 | x |
-| main.rs:355:19:355:19 | x | main.rs:352:20:352:20 | x |
-| main.rs:357:19:357:19 | x | main.rs:346:9:346:9 | x |
-| main.rs:368:15:368:16 | a8 | main.rs:362:5:362:6 | a8 |
-| main.rs:369:15:369:16 | b3 | main.rs:364:9:364:10 | b3 |
-| main.rs:370:15:370:16 | c1 | main.rs:365:9:365:10 | c1 |
-| main.rs:375:15:375:16 | a9 | main.rs:373:20:373:55 | a9 |
-| main.rs:384:15:384:17 | a10 | main.rs:380:13:380:15 | a10 |
-| main.rs:385:15:385:16 | b4 | main.rs:381:13:381:14 | b4 |
-| main.rs:386:15:386:16 | c2 | main.rs:382:13:382:14 | c2 |
-| main.rs:389:9:389:10 | c2 | main.rs:382:13:382:14 | c2 |
-| main.rs:390:9:390:10 | b4 | main.rs:381:13:381:14 | b4 |
-| main.rs:391:9:391:11 | a10 | main.rs:380:13:380:15 | a10 |
-| main.rs:393:9:393:11 | a10 | main.rs:380:13:380:15 | a10 |
-| main.rs:394:9:394:10 | b4 | main.rs:381:13:381:14 | b4 |
-| main.rs:395:9:395:10 | c2 | main.rs:382:13:382:14 | c2 |
-| main.rs:397:15:397:17 | a10 | main.rs:380:13:380:15 | a10 |
-| main.rs:398:15:398:16 | b4 | main.rs:381:13:381:14 | b4 |
-| main.rs:399:15:399:16 | c2 | main.rs:382:13:382:14 | c2 |
-| main.rs:406:23:406:25 | a10 | main.rs:403:13:403:15 | a10 |
-| main.rs:407:23:407:24 | b4 | main.rs:404:13:404:14 | b4 |
-| main.rs:411:15:411:17 | a10 | main.rs:380:13:380:15 | a10 |
-| main.rs:412:15:412:16 | b4 | main.rs:381:13:381:14 | b4 |
-| main.rs:418:9:418:9 | x | main.rs:417:10:417:10 | x |
-| main.rs:420:9:420:23 | example_closure | main.rs:416:9:416:23 | example_closure |
-| main.rs:421:15:421:16 | n1 | main.rs:419:9:419:10 | n1 |
-| main.rs:426:9:426:9 | x | main.rs:425:6:425:6 | x |
-| main.rs:428:9:428:26 | immutable_variable | main.rs:424:9:424:26 | immutable_variable |
-| main.rs:429:15:429:16 | n2 | main.rs:427:9:427:10 | n2 |
-| main.rs:436:9:436:9 | x | main.rs:435:10:435:10 | x |
-| main.rs:437:15:437:15 | f | main.rs:434:9:434:9 | f |
-| main.rs:441:9:441:9 | x | main.rs:439:10:439:10 | x |
-| main.rs:444:15:444:15 | f | main.rs:434:9:434:9 | f |
-| main.rs:450:17:450:17 | x | main.rs:448:14:448:14 | x |
-| main.rs:459:13:459:13 | x | main.rs:458:14:458:14 | x |
-| main.rs:460:19:460:19 | f | main.rs:457:13:457:13 | f |
-| main.rs:468:12:468:12 | v | main.rs:465:9:465:9 | v |
-| main.rs:469:19:469:22 | text | main.rs:467:9:467:12 | text |
-| main.rs:475:5:475:5 | a | main.rs:474:13:474:13 | a |
-| main.rs:476:15:476:15 | a | main.rs:474:13:474:13 | a |
-| main.rs:477:11:477:11 | a | main.rs:474:13:474:13 | a |
-| main.rs:478:15:478:15 | a | main.rs:474:13:474:13 | a |
-| main.rs:484:14:484:14 | i | main.rs:482:13:482:13 | i |
-| main.rs:485:6:485:10 | ref_i | main.rs:483:9:483:13 | ref_i |
-| main.rs:486:15:486:15 | i | main.rs:482:13:482:13 | i |
-| main.rs:490:6:490:6 | x | main.rs:489:17:489:17 | x |
-| main.rs:491:10:491:10 | x | main.rs:489:17:489:17 | x |
-| main.rs:492:10:492:10 | x | main.rs:489:17:489:17 | x |
-| main.rs:493:12:493:12 | x | main.rs:489:17:489:17 | x |
-| main.rs:497:6:497:6 | x | main.rs:496:22:496:22 | x |
-| main.rs:498:10:498:10 | x | main.rs:496:22:496:22 | x |
-| main.rs:499:10:499:10 | x | main.rs:496:22:496:22 | x |
-| main.rs:500:6:500:6 | y | main.rs:496:38:496:38 | y |
-| main.rs:501:9:501:9 | x | main.rs:496:22:496:22 | x |
-| main.rs:507:27:507:27 | x | main.rs:505:13:505:13 | x |
-| main.rs:508:6:508:6 | y | main.rs:506:9:506:9 | y |
-| main.rs:511:15:511:15 | x | main.rs:505:13:505:13 | x |
-| main.rs:515:19:515:19 | x | main.rs:505:13:505:13 | x |
-| main.rs:517:14:517:14 | z | main.rs:513:13:513:13 | z |
-| main.rs:518:9:518:9 | w | main.rs:514:9:514:9 | w |
-| main.rs:520:7:520:7 | w | main.rs:514:9:514:9 | w |
-| main.rs:523:15:523:15 | z | main.rs:513:13:513:13 | z |
-| main.rs:529:14:529:14 | x | main.rs:527:13:527:13 | x |
-| main.rs:530:6:530:6 | y | main.rs:528:9:528:9 | y |
-| main.rs:531:15:531:15 | x | main.rs:527:13:527:13 | x |
-| main.rs:539:19:539:19 | x | main.rs:535:9:535:9 | x |
-| main.rs:541:5:541:7 | cap | main.rs:538:9:538:11 | cap |
-| main.rs:542:15:542:15 | x | main.rs:535:9:535:9 | x |
-| main.rs:550:19:550:19 | x | main.rs:546:13:546:13 | x |
-| main.rs:552:5:552:12 | closure1 | main.rs:549:9:549:16 | closure1 |
-| main.rs:553:15:553:15 | x | main.rs:546:13:546:13 | x |
-| main.rs:559:9:559:9 | y | main.rs:555:13:555:13 | y |
-| main.rs:561:5:561:12 | closure2 | main.rs:558:13:558:20 | closure2 |
-| main.rs:562:15:562:15 | y | main.rs:555:13:555:13 | y |
-| main.rs:568:9:568:9 | z | main.rs:564:13:564:13 | z |
-| main.rs:570:5:570:12 | closure3 | main.rs:567:13:567:20 | closure3 |
-| main.rs:571:15:571:15 | z | main.rs:564:13:564:13 | z |
-| main.rs:577:9:577:9 | i | main.rs:575:13:575:13 | i |
-| main.rs:580:5:580:9 | block | main.rs:576:9:576:13 | block |
-| main.rs:581:15:581:15 | i | main.rs:575:13:575:13 | i |
-| main.rs:586:15:586:15 | x | main.rs:585:13:585:13 | x |
-| main.rs:587:15:587:15 | x | main.rs:585:13:585:13 | x |
-| main.rs:589:16:589:16 | b | main.rs:584:8:584:8 | b |
-| main.rs:591:9:591:9 | x | main.rs:585:13:585:13 | x |
-| main.rs:592:19:592:19 | x | main.rs:585:13:585:13 | x |
-| main.rs:593:19:593:19 | x | main.rs:585:13:585:13 | x |
-| main.rs:595:9:595:9 | x | main.rs:585:13:585:13 | x |
-| main.rs:596:19:596:19 | x | main.rs:585:13:585:13 | x |
-| main.rs:597:19:597:19 | x | main.rs:585:13:585:13 | x |
-| main.rs:599:15:599:15 | x | main.rs:585:13:585:13 | x |
-| main.rs:605:16:605:17 | b1 | main.rs:602:13:602:14 | b1 |
-| main.rs:607:19:607:19 | x | main.rs:603:9:603:9 | x |
-| main.rs:609:19:609:19 | x | main.rs:603:9:603:9 | x |
-| main.rs:613:16:613:17 | b2 | main.rs:602:23:602:24 | b2 |
-| main.rs:615:19:615:19 | x | main.rs:603:9:603:9 | x |
-| main.rs:617:19:617:19 | x | main.rs:603:9:603:9 | x |
-| main.rs:627:16:627:19 | self | main.rs:626:20:626:23 | self |
-| main.rs:631:9:631:12 | self | main.rs:630:11:630:14 | self |
-| main.rs:637:13:637:16 | self | main.rs:634:23:634:26 | self |
-| main.rs:637:25:637:25 | n | main.rs:635:22:635:22 | n |
-| main.rs:639:9:639:9 | f | main.rs:635:17:635:17 | f |
-| main.rs:640:9:640:9 | f | main.rs:635:17:635:17 | f |
-| main.rs:646:15:646:15 | a | main.rs:645:13:645:13 | a |
-| main.rs:647:5:647:5 | a | main.rs:645:13:645:13 | a |
-| main.rs:648:15:648:15 | a | main.rs:645:13:645:13 | a |
-| main.rs:649:5:649:5 | a | main.rs:645:13:645:13 | a |
-| main.rs:650:15:650:15 | a | main.rs:645:13:645:13 | a |
-| main.rs:655:15:655:15 | a | main.rs:654:13:654:13 | a |
-| main.rs:656:5:656:5 | a | main.rs:654:13:654:13 | a |
-| main.rs:657:15:657:15 | a | main.rs:654:13:654:13 | a |
-| main.rs:658:5:658:5 | a | main.rs:654:13:654:13 | a |
-| main.rs:659:15:659:15 | a | main.rs:654:13:654:13 | a |
-| main.rs:664:20:664:20 | x | main.rs:663:9:663:9 | x |
-| main.rs:665:15:665:15 | x | main.rs:663:9:663:9 | x |
-| main.rs:668:20:668:20 | z | main.rs:667:9:667:9 | z |
-| main.rs:677:10:677:13 | self | main.rs:676:17:676:20 | self |
-| main.rs:683:5:683:5 | a | main.rs:682:13:682:13 | a |
-| main.rs:686:15:686:15 | a | main.rs:682:13:682:13 | a |
-| main.rs:705:9:705:21 | var_in_macro | main.rs:705:9:705:21 | var_in_macro |
-| main.rs:706:15:706:28 | var_from_macro | main.rs:704:9:704:22 | var_from_macro |
-| main.rs:712:30:712:41 | var_in_macro | main.rs:712:15:712:28 | var_in_macro |
-| main.rs:713:15:713:26 | var_in_macro | main.rs:707:9:707:20 | var_in_macro |
-| main.rs:718:5:718:5 | x | main.rs:717:9:717:9 | x |
-| main.rs:719:15:719:15 | x | main.rs:717:9:717:9 | x |
-| main.rs:726:20:726:20 | b | main.rs:724:20:724:20 | b |
-| main.rs:727:13:727:13 | x | main.rs:723:13:723:13 | x |
-| main.rs:730:5:730:7 | cap | main.rs:724:13:724:15 | cap |
-| main.rs:731:15:731:15 | x | main.rs:723:13:723:13 | x |
+| main.rs:29:5:29:6 | x2 | main.rs:25:13:25:14 | x2 |
+| main.rs:29:10:29:11 | x2 | main.rs:25:13:25:14 | x2 |
+| main.rs:30:15:30:16 | x2 | main.rs:25:13:25:14 | x2 |
+| main.rs:35:20:35:20 | x | main.rs:34:13:34:13 | x |
+| main.rs:36:5:36:5 | x | main.rs:34:13:34:13 | x |
+| main.rs:37:20:37:20 | x | main.rs:34:13:34:13 | x |
+| main.rs:42:15:42:16 | x3 | main.rs:41:9:41:10 | x3 |
+| main.rs:44:9:44:10 | x3 | main.rs:41:9:41:10 | x3 |
+| main.rs:45:15:45:16 | x3 | main.rs:43:9:43:10 | x3 |
+| main.rs:50:15:50:16 | x4 | main.rs:49:9:49:10 | x4 |
+| main.rs:53:19:53:20 | x4 | main.rs:52:13:52:14 | x4 |
+| main.rs:55:15:55:16 | x4 | main.rs:49:9:49:10 | x4 |
+| main.rs:74:15:74:16 | a1 | main.rs:66:13:66:14 | a1 |
+| main.rs:75:15:75:16 | b1 | main.rs:67:13:67:14 | b1 |
+| main.rs:76:15:76:15 | x | main.rs:70:13:70:13 | x |
+| main.rs:77:15:77:15 | y | main.rs:71:13:71:13 | y |
+| main.rs:85:9:85:10 | p1 | main.rs:81:9:81:10 | p1 |
+| main.rs:86:15:86:16 | a2 | main.rs:83:12:83:13 | a2 |
+| main.rs:87:15:87:16 | b2 | main.rs:84:12:84:13 | b2 |
+| main.rs:94:11:94:12 | s1 | main.rs:91:9:91:10 | s1 |
+| main.rs:95:19:95:20 | s2 | main.rs:93:21:93:22 | s2 |
+| main.rs:102:7:102:7 | x | main.rs:100:9:100:9 | x |
+| main.rs:105:13:105:13 | x | main.rs:100:9:100:9 | x |
+| main.rs:106:19:106:19 | x | main.rs:104:13:104:13 | x |
+| main.rs:109:15:109:15 | x | main.rs:101:14:101:14 | x |
+| main.rs:116:11:116:12 | s1 | main.rs:113:9:113:10 | s1 |
+| main.rs:117:19:117:20 | s2 | main.rs:115:24:115:25 | s2 |
+| main.rs:125:11:125:12 | x6 | main.rs:122:9:122:10 | x6 |
+| main.rs:130:23:130:24 | y1 | main.rs:127:14:127:15 | y1 |
+| main.rs:135:15:135:16 | y1 | main.rs:123:9:123:10 | y1 |
+| main.rs:141:11:141:17 | numbers | main.rs:139:9:139:15 | numbers |
+| main.rs:150:23:150:27 | first | main.rs:144:13:144:17 | first |
+| main.rs:151:23:151:27 | third | main.rs:146:13:146:17 | third |
+| main.rs:152:23:152:27 | fifth | main.rs:148:13:148:17 | fifth |
+| main.rs:156:11:156:17 | numbers | main.rs:139:9:139:15 | numbers |
+| main.rs:163:23:163:27 | first | main.rs:159:13:159:17 | first |
+| main.rs:164:23:164:26 | last | main.rs:161:13:161:16 | last |
+| main.rs:172:11:172:12 | p2 | main.rs:170:9:170:10 | p2 |
+| main.rs:175:24:175:25 | x7 | main.rs:174:16:174:17 | x7 |
+| main.rs:186:11:186:13 | msg | main.rs:184:9:184:11 | msg |
+| main.rs:190:24:190:34 | id_variable | main.rs:189:17:189:27 | id_variable |
+| main.rs:197:23:197:24 | id | main.rs:194:26:194:27 | id |
+| main.rs:209:11:209:16 | either | main.rs:208:9:208:14 | either |
+| main.rs:211:26:211:27 | a3 | main.rs:210:9:210:44 | a3 |
+| main.rs:223:11:223:12 | tv | main.rs:222:9:222:10 | tv |
+| main.rs:225:26:225:27 | a4 | main.rs:224:9:224:81 | a4 |
+| main.rs:227:11:227:12 | tv | main.rs:222:9:222:10 | tv |
+| main.rs:229:26:229:27 | a5 | main.rs:228:9:228:83 | a5 |
+| main.rs:231:11:231:12 | tv | main.rs:222:9:222:10 | tv |
+| main.rs:233:26:233:27 | a6 | main.rs:232:9:232:83 | a6 |
+| main.rs:239:11:239:16 | either | main.rs:238:9:238:14 | either |
+| main.rs:241:16:241:17 | a7 | main.rs:240:9:240:44 | a7 |
+| main.rs:242:26:242:27 | a7 | main.rs:240:9:240:44 | a7 |
+| main.rs:250:11:250:16 | either | main.rs:248:9:248:14 | either |
+| main.rs:254:23:254:25 | a11 | main.rs:252:14:252:51 | a11 |
+| main.rs:256:15:256:15 | e | main.rs:251:13:251:13 | e |
+| main.rs:257:28:257:30 | a12 | main.rs:255:33:255:35 | a12 |
+| main.rs:273:11:273:12 | fv | main.rs:272:9:272:10 | fv |
+| main.rs:275:26:275:28 | a13 | main.rs:274:9:274:109 | a13 |
+| main.rs:283:7:283:7 | x | main.rs:281:9:281:9 | x |
+| main.rs:285:5:285:5 | x | main.rs:282:17:282:17 | x |
+| main.rs:287:19:287:19 | x | main.rs:282:17:282:17 | x |
+| main.rs:290:13:290:13 | x | main.rs:281:9:281:9 | x |
+| main.rs:291:19:291:19 | x | main.rs:289:13:289:13 | x |
+| main.rs:299:7:299:7 | x | main.rs:297:9:297:9 | x |
+| main.rs:302:12:302:12 | x | main.rs:298:17:298:17 | x |
+| main.rs:304:5:304:5 | x | main.rs:301:14:301:14 | x |
+| main.rs:306:19:306:19 | x | main.rs:301:14:301:14 | x |
+| main.rs:309:13:309:13 | x | main.rs:297:9:297:9 | x |
+| main.rs:310:19:310:19 | x | main.rs:308:13:308:13 | x |
+| main.rs:318:7:318:7 | x | main.rs:316:9:316:9 | x |
+| main.rs:321:12:321:12 | x | main.rs:317:20:317:20 | x |
+| main.rs:323:5:323:5 | x | main.rs:320:14:320:14 | x |
+| main.rs:325:19:325:19 | x | main.rs:320:14:320:14 | x |
+| main.rs:329:15:329:15 | x | main.rs:316:9:316:9 | x |
+| main.rs:335:11:335:11 | x | main.rs:334:9:334:9 | x |
+| main.rs:338:18:338:18 | x | main.rs:336:14:336:14 | x |
+| main.rs:339:19:339:19 | x | main.rs:337:20:337:20 | x |
+| main.rs:343:15:343:15 | x | main.rs:334:9:334:9 | x |
+| main.rs:350:7:350:7 | x | main.rs:348:9:348:9 | x |
+| main.rs:352:19:352:19 | x | main.rs:349:16:349:16 | x |
+| main.rs:355:7:355:7 | x | main.rs:348:9:348:9 | x |
+| main.rs:357:19:357:19 | x | main.rs:354:20:354:20 | x |
+| main.rs:359:19:359:19 | x | main.rs:348:9:348:9 | x |
+| main.rs:370:15:370:16 | a8 | main.rs:364:5:364:6 | a8 |
+| main.rs:371:15:371:16 | b3 | main.rs:366:9:366:10 | b3 |
+| main.rs:372:15:372:16 | c1 | main.rs:367:9:367:10 | c1 |
+| main.rs:377:15:377:16 | a9 | main.rs:375:20:375:55 | a9 |
+| main.rs:386:15:386:17 | a10 | main.rs:382:13:382:15 | a10 |
+| main.rs:387:15:387:16 | b4 | main.rs:383:13:383:14 | b4 |
+| main.rs:388:15:388:16 | c2 | main.rs:384:13:384:14 | c2 |
+| main.rs:391:9:391:10 | c2 | main.rs:384:13:384:14 | c2 |
+| main.rs:392:9:392:10 | b4 | main.rs:383:13:383:14 | b4 |
+| main.rs:393:9:393:11 | a10 | main.rs:382:13:382:15 | a10 |
+| main.rs:395:9:395:11 | a10 | main.rs:382:13:382:15 | a10 |
+| main.rs:396:9:396:10 | b4 | main.rs:383:13:383:14 | b4 |
+| main.rs:397:9:397:10 | c2 | main.rs:384:13:384:14 | c2 |
+| main.rs:399:15:399:17 | a10 | main.rs:382:13:382:15 | a10 |
+| main.rs:400:15:400:16 | b4 | main.rs:383:13:383:14 | b4 |
+| main.rs:401:15:401:16 | c2 | main.rs:384:13:384:14 | c2 |
+| main.rs:408:23:408:25 | a10 | main.rs:405:13:405:15 | a10 |
+| main.rs:409:23:409:24 | b4 | main.rs:406:13:406:14 | b4 |
+| main.rs:413:15:413:17 | a10 | main.rs:382:13:382:15 | a10 |
+| main.rs:414:15:414:16 | b4 | main.rs:383:13:383:14 | b4 |
+| main.rs:420:9:420:9 | x | main.rs:419:10:419:10 | x |
+| main.rs:422:9:422:23 | example_closure | main.rs:418:9:418:23 | example_closure |
+| main.rs:423:15:423:16 | n1 | main.rs:421:9:421:10 | n1 |
+| main.rs:428:9:428:9 | x | main.rs:427:6:427:6 | x |
+| main.rs:430:9:430:26 | immutable_variable | main.rs:426:9:426:26 | immutable_variable |
+| main.rs:431:15:431:16 | n2 | main.rs:429:9:429:10 | n2 |
+| main.rs:438:9:438:9 | x | main.rs:437:10:437:10 | x |
+| main.rs:439:15:439:15 | f | main.rs:436:9:436:9 | f |
+| main.rs:443:9:443:9 | x | main.rs:441:10:441:10 | x |
+| main.rs:446:15:446:15 | f | main.rs:436:9:436:9 | f |
+| main.rs:452:17:452:17 | x | main.rs:450:14:450:14 | x |
+| main.rs:461:13:461:13 | x | main.rs:460:14:460:14 | x |
+| main.rs:462:19:462:19 | f | main.rs:459:13:459:13 | f |
+| main.rs:470:12:470:12 | v | main.rs:467:9:467:9 | v |
+| main.rs:471:19:471:22 | text | main.rs:469:9:469:12 | text |
+| main.rs:477:5:477:5 | a | main.rs:476:13:476:13 | a |
+| main.rs:478:15:478:15 | a | main.rs:476:13:476:13 | a |
+| main.rs:479:11:479:11 | a | main.rs:476:13:476:13 | a |
+| main.rs:480:15:480:15 | a | main.rs:476:13:476:13 | a |
+| main.rs:486:14:486:14 | i | main.rs:484:13:484:13 | i |
+| main.rs:487:6:487:10 | ref_i | main.rs:485:9:485:13 | ref_i |
+| main.rs:488:15:488:15 | i | main.rs:484:13:484:13 | i |
+| main.rs:492:6:492:6 | x | main.rs:491:17:491:17 | x |
+| main.rs:493:10:493:10 | x | main.rs:491:17:491:17 | x |
+| main.rs:494:10:494:10 | x | main.rs:491:17:491:17 | x |
+| main.rs:495:12:495:12 | x | main.rs:491:17:491:17 | x |
+| main.rs:499:6:499:6 | x | main.rs:498:22:498:22 | x |
+| main.rs:500:10:500:10 | x | main.rs:498:22:498:22 | x |
+| main.rs:501:10:501:10 | x | main.rs:498:22:498:22 | x |
+| main.rs:502:6:502:6 | y | main.rs:498:38:498:38 | y |
+| main.rs:503:9:503:9 | x | main.rs:498:22:498:22 | x |
+| main.rs:509:27:509:27 | x | main.rs:507:13:507:13 | x |
+| main.rs:510:6:510:6 | y | main.rs:508:9:508:9 | y |
+| main.rs:513:15:513:15 | x | main.rs:507:13:507:13 | x |
+| main.rs:517:19:517:19 | x | main.rs:507:13:507:13 | x |
+| main.rs:519:14:519:14 | z | main.rs:515:13:515:13 | z |
+| main.rs:520:9:520:9 | w | main.rs:516:9:516:9 | w |
+| main.rs:522:7:522:7 | w | main.rs:516:9:516:9 | w |
+| main.rs:525:15:525:15 | z | main.rs:515:13:515:13 | z |
+| main.rs:531:14:531:14 | x | main.rs:529:13:529:13 | x |
+| main.rs:532:6:532:6 | y | main.rs:530:9:530:9 | y |
+| main.rs:533:15:533:15 | x | main.rs:529:13:529:13 | x |
+| main.rs:541:19:541:19 | x | main.rs:537:9:537:9 | x |
+| main.rs:543:5:543:7 | cap | main.rs:540:9:540:11 | cap |
+| main.rs:544:15:544:15 | x | main.rs:537:9:537:9 | x |
+| main.rs:552:19:552:19 | x | main.rs:548:13:548:13 | x |
+| main.rs:554:5:554:12 | closure1 | main.rs:551:9:551:16 | closure1 |
+| main.rs:555:15:555:15 | x | main.rs:548:13:548:13 | x |
+| main.rs:561:9:561:9 | y | main.rs:557:13:557:13 | y |
+| main.rs:563:5:563:12 | closure2 | main.rs:560:13:560:20 | closure2 |
+| main.rs:564:15:564:15 | y | main.rs:557:13:557:13 | y |
+| main.rs:570:9:570:9 | z | main.rs:566:13:566:13 | z |
+| main.rs:572:5:572:12 | closure3 | main.rs:569:13:569:20 | closure3 |
+| main.rs:573:15:573:15 | z | main.rs:566:13:566:13 | z |
+| main.rs:579:9:579:9 | i | main.rs:577:13:577:13 | i |
+| main.rs:582:5:582:9 | block | main.rs:578:9:578:13 | block |
+| main.rs:583:15:583:15 | i | main.rs:577:13:577:13 | i |
+| main.rs:588:15:588:15 | x | main.rs:587:13:587:13 | x |
+| main.rs:589:15:589:15 | x | main.rs:587:13:587:13 | x |
+| main.rs:591:16:591:16 | b | main.rs:586:8:586:8 | b |
+| main.rs:593:9:593:9 | x | main.rs:587:13:587:13 | x |
+| main.rs:594:19:594:19 | x | main.rs:587:13:587:13 | x |
+| main.rs:595:19:595:19 | x | main.rs:587:13:587:13 | x |
+| main.rs:597:9:597:9 | x | main.rs:587:13:587:13 | x |
+| main.rs:598:19:598:19 | x | main.rs:587:13:587:13 | x |
+| main.rs:599:19:599:19 | x | main.rs:587:13:587:13 | x |
+| main.rs:601:15:601:15 | x | main.rs:587:13:587:13 | x |
+| main.rs:607:16:607:17 | b1 | main.rs:604:13:604:14 | b1 |
+| main.rs:609:19:609:19 | x | main.rs:605:9:605:9 | x |
+| main.rs:611:19:611:19 | x | main.rs:605:9:605:9 | x |
+| main.rs:615:16:615:17 | b2 | main.rs:604:23:604:24 | b2 |
+| main.rs:617:19:617:19 | x | main.rs:605:9:605:9 | x |
+| main.rs:619:19:619:19 | x | main.rs:605:9:605:9 | x |
+| main.rs:629:16:629:19 | self | main.rs:628:20:628:23 | self |
+| main.rs:633:9:633:12 | self | main.rs:632:11:632:14 | self |
+| main.rs:639:13:639:16 | self | main.rs:636:23:636:26 | self |
+| main.rs:639:25:639:25 | n | main.rs:637:22:637:22 | n |
+| main.rs:641:9:641:9 | f | main.rs:637:17:637:17 | f |
+| main.rs:642:9:642:9 | f | main.rs:637:17:637:17 | f |
+| main.rs:648:15:648:15 | a | main.rs:647:13:647:13 | a |
+| main.rs:649:5:649:5 | a | main.rs:647:13:647:13 | a |
+| main.rs:650:15:650:15 | a | main.rs:647:13:647:13 | a |
+| main.rs:651:5:651:5 | a | main.rs:647:13:647:13 | a |
+| main.rs:652:15:652:15 | a | main.rs:647:13:647:13 | a |
+| main.rs:657:15:657:15 | a | main.rs:656:13:656:13 | a |
+| main.rs:658:5:658:5 | a | main.rs:656:13:656:13 | a |
+| main.rs:659:15:659:15 | a | main.rs:656:13:656:13 | a |
+| main.rs:660:5:660:5 | a | main.rs:656:13:656:13 | a |
+| main.rs:661:15:661:15 | a | main.rs:656:13:656:13 | a |
+| main.rs:666:20:666:20 | x | main.rs:665:9:665:9 | x |
+| main.rs:667:15:667:15 | x | main.rs:665:9:665:9 | x |
+| main.rs:670:20:670:20 | z | main.rs:669:9:669:9 | z |
+| main.rs:679:10:679:13 | self | main.rs:678:17:678:20 | self |
+| main.rs:685:5:685:5 | a | main.rs:684:13:684:13 | a |
+| main.rs:688:15:688:15 | a | main.rs:684:13:684:13 | a |
+| main.rs:707:9:707:21 | var_in_macro | main.rs:707:9:707:21 | var_in_macro |
+| main.rs:708:15:708:28 | var_from_macro | main.rs:706:9:706:22 | var_from_macro |
+| main.rs:714:30:714:41 | var_in_macro | main.rs:714:15:714:28 | var_in_macro |
+| main.rs:715:15:715:26 | var_in_macro | main.rs:709:9:709:20 | var_in_macro |
+| main.rs:720:5:720:5 | x | main.rs:719:9:719:9 | x |
+| main.rs:721:15:721:15 | x | main.rs:719:9:719:9 | x |
+| main.rs:728:20:728:20 | b | main.rs:726:20:726:20 | b |
+| main.rs:729:13:729:13 | x | main.rs:725:13:725:13 | x |
+| main.rs:732:5:732:7 | cap | main.rs:726:13:726:15 | cap |
+| main.rs:733:15:733:15 | x | main.rs:725:13:725:13 | x |
variableWriteAccess
| main.rs:27:5:27:6 | x2 | main.rs:25:13:25:14 | x2 |
-| main.rs:34:5:34:5 | x | main.rs:32:13:32:13 | x |
-| main.rs:389:9:389:10 | c2 | main.rs:382:13:382:14 | c2 |
-| main.rs:390:9:390:10 | b4 | main.rs:381:13:381:14 | b4 |
-| main.rs:391:9:391:11 | a10 | main.rs:380:13:380:15 | a10 |
-| main.rs:559:9:559:9 | y | main.rs:555:13:555:13 | y |
-| main.rs:577:9:577:9 | i | main.rs:575:13:575:13 | i |
-| main.rs:591:9:591:9 | x | main.rs:585:13:585:13 | x |
-| main.rs:595:9:595:9 | x | main.rs:585:13:585:13 | x |
-| main.rs:649:5:649:5 | a | main.rs:645:13:645:13 | a |
-| main.rs:658:5:658:5 | a | main.rs:654:13:654:13 | a |
-| main.rs:718:5:718:5 | x | main.rs:717:9:717:9 | x |
-| main.rs:727:13:727:13 | x | main.rs:723:13:723:13 | x |
+| main.rs:29:5:29:6 | x2 | main.rs:25:13:25:14 | x2 |
+| main.rs:36:5:36:5 | x | main.rs:34:13:34:13 | x |
+| main.rs:391:9:391:10 | c2 | main.rs:384:13:384:14 | c2 |
+| main.rs:392:9:392:10 | b4 | main.rs:383:13:383:14 | b4 |
+| main.rs:393:9:393:11 | a10 | main.rs:382:13:382:15 | a10 |
+| main.rs:561:9:561:9 | y | main.rs:557:13:557:13 | y |
+| main.rs:579:9:579:9 | i | main.rs:577:13:577:13 | i |
+| main.rs:593:9:593:9 | x | main.rs:587:13:587:13 | x |
+| main.rs:597:9:597:9 | x | main.rs:587:13:587:13 | x |
+| main.rs:651:5:651:5 | a | main.rs:647:13:647:13 | a |
+| main.rs:660:5:660:5 | a | main.rs:656:13:656:13 | a |
+| main.rs:720:5:720:5 | x | main.rs:719:9:719:9 | x |
+| main.rs:729:13:729:13 | x | main.rs:725:13:725:13 | x |
variableReadAccess
| main.rs:7:20:7:20 | s | main.rs:5:14:5:14 | s |
| main.rs:12:20:12:20 | i | main.rs:10:14:10:14 | i |
@@ -372,276 +376,278 @@ variableReadAccess
| main.rs:21:15:21:16 | x1 | main.rs:20:9:20:10 | x1 |
| main.rs:26:15:26:16 | x2 | main.rs:25:13:25:14 | x2 |
| main.rs:28:15:28:16 | x2 | main.rs:25:13:25:14 | x2 |
-| main.rs:40:15:40:16 | x3 | main.rs:39:9:39:10 | x3 |
-| main.rs:42:9:42:10 | x3 | main.rs:39:9:39:10 | x3 |
-| main.rs:43:15:43:16 | x3 | main.rs:41:9:41:10 | x3 |
-| main.rs:48:15:48:16 | x4 | main.rs:47:9:47:10 | x4 |
-| main.rs:51:19:51:20 | x4 | main.rs:50:13:50:14 | x4 |
-| main.rs:53:15:53:16 | x4 | main.rs:47:9:47:10 | x4 |
-| main.rs:72:15:72:16 | a1 | main.rs:64:13:64:14 | a1 |
-| main.rs:73:15:73:16 | b1 | main.rs:65:13:65:14 | b1 |
-| main.rs:74:15:74:15 | x | main.rs:68:13:68:13 | x |
-| main.rs:75:15:75:15 | y | main.rs:69:13:69:13 | y |
-| main.rs:83:9:83:10 | p1 | main.rs:79:9:79:10 | p1 |
-| main.rs:84:15:84:16 | a2 | main.rs:81:12:81:13 | a2 |
-| main.rs:85:15:85:16 | b2 | main.rs:82:12:82:13 | b2 |
-| main.rs:92:11:92:12 | s1 | main.rs:89:9:89:10 | s1 |
-| main.rs:93:19:93:20 | s2 | main.rs:91:21:91:22 | s2 |
-| main.rs:100:7:100:7 | x | main.rs:98:9:98:9 | x |
-| main.rs:103:13:103:13 | x | main.rs:98:9:98:9 | x |
-| main.rs:104:19:104:19 | x | main.rs:102:13:102:13 | x |
-| main.rs:107:15:107:15 | x | main.rs:99:14:99:14 | x |
-| main.rs:114:11:114:12 | s1 | main.rs:111:9:111:10 | s1 |
-| main.rs:115:19:115:20 | s2 | main.rs:113:24:113:25 | s2 |
-| main.rs:123:11:123:12 | x6 | main.rs:120:9:120:10 | x6 |
-| main.rs:128:23:128:24 | y1 | main.rs:125:14:125:15 | y1 |
-| main.rs:133:15:133:16 | y1 | main.rs:121:9:121:10 | y1 |
-| main.rs:139:11:139:17 | numbers | main.rs:137:9:137:15 | numbers |
-| main.rs:148:23:148:27 | first | main.rs:142:13:142:17 | first |
-| main.rs:149:23:149:27 | third | main.rs:144:13:144:17 | third |
-| main.rs:150:23:150:27 | fifth | main.rs:146:13:146:17 | fifth |
-| main.rs:154:11:154:17 | numbers | main.rs:137:9:137:15 | numbers |
-| main.rs:161:23:161:27 | first | main.rs:157:13:157:17 | first |
-| main.rs:162:23:162:26 | last | main.rs:159:13:159:16 | last |
-| main.rs:170:11:170:12 | p2 | main.rs:168:9:168:10 | p2 |
-| main.rs:173:24:173:25 | x7 | main.rs:172:16:172:17 | x7 |
-| main.rs:184:11:184:13 | msg | main.rs:182:9:182:11 | msg |
-| main.rs:188:24:188:34 | id_variable | main.rs:187:17:187:27 | id_variable |
-| main.rs:195:23:195:24 | id | main.rs:192:26:192:27 | id |
-| main.rs:207:11:207:16 | either | main.rs:206:9:206:14 | either |
-| main.rs:209:26:209:27 | a3 | main.rs:208:9:208:44 | a3 |
-| main.rs:221:11:221:12 | tv | main.rs:220:9:220:10 | tv |
-| main.rs:223:26:223:27 | a4 | main.rs:222:9:222:81 | a4 |
-| main.rs:225:11:225:12 | tv | main.rs:220:9:220:10 | tv |
-| main.rs:227:26:227:27 | a5 | main.rs:226:9:226:83 | a5 |
-| main.rs:229:11:229:12 | tv | main.rs:220:9:220:10 | tv |
-| main.rs:231:26:231:27 | a6 | main.rs:230:9:230:83 | a6 |
-| main.rs:237:11:237:16 | either | main.rs:236:9:236:14 | either |
-| main.rs:239:16:239:17 | a7 | main.rs:238:9:238:44 | a7 |
-| main.rs:240:26:240:27 | a7 | main.rs:238:9:238:44 | a7 |
-| main.rs:248:11:248:16 | either | main.rs:246:9:246:14 | either |
-| main.rs:252:23:252:25 | a11 | main.rs:250:14:250:51 | a11 |
-| main.rs:254:15:254:15 | e | main.rs:249:13:249:13 | e |
-| main.rs:255:28:255:30 | a12 | main.rs:253:33:253:35 | a12 |
-| main.rs:271:11:271:12 | fv | main.rs:270:9:270:10 | fv |
-| main.rs:273:26:273:28 | a13 | main.rs:272:9:272:109 | a13 |
-| main.rs:281:7:281:7 | x | main.rs:279:9:279:9 | x |
-| main.rs:283:5:283:5 | x | main.rs:280:17:280:17 | x |
-| main.rs:285:19:285:19 | x | main.rs:280:17:280:17 | x |
-| main.rs:288:13:288:13 | x | main.rs:279:9:279:9 | x |
-| main.rs:289:19:289:19 | x | main.rs:287:13:287:13 | x |
-| main.rs:297:7:297:7 | x | main.rs:295:9:295:9 | x |
-| main.rs:300:12:300:12 | x | main.rs:296:17:296:17 | x |
-| main.rs:302:5:302:5 | x | main.rs:299:14:299:14 | x |
-| main.rs:304:19:304:19 | x | main.rs:299:14:299:14 | x |
-| main.rs:307:13:307:13 | x | main.rs:295:9:295:9 | x |
-| main.rs:308:19:308:19 | x | main.rs:306:13:306:13 | x |
-| main.rs:316:7:316:7 | x | main.rs:314:9:314:9 | x |
-| main.rs:319:12:319:12 | x | main.rs:315:20:315:20 | x |
-| main.rs:321:5:321:5 | x | main.rs:318:14:318:14 | x |
-| main.rs:323:19:323:19 | x | main.rs:318:14:318:14 | x |
-| main.rs:327:15:327:15 | x | main.rs:314:9:314:9 | x |
-| main.rs:333:11:333:11 | x | main.rs:332:9:332:9 | x |
-| main.rs:336:18:336:18 | x | main.rs:334:14:334:14 | x |
-| main.rs:337:19:337:19 | x | main.rs:335:20:335:20 | x |
-| main.rs:341:15:341:15 | x | main.rs:332:9:332:9 | x |
-| main.rs:348:7:348:7 | x | main.rs:346:9:346:9 | x |
-| main.rs:350:19:350:19 | x | main.rs:347:16:347:16 | x |
-| main.rs:353:7:353:7 | x | main.rs:346:9:346:9 | x |
-| main.rs:355:19:355:19 | x | main.rs:352:20:352:20 | x |
-| main.rs:357:19:357:19 | x | main.rs:346:9:346:9 | x |
-| main.rs:368:15:368:16 | a8 | main.rs:362:5:362:6 | a8 |
-| main.rs:369:15:369:16 | b3 | main.rs:364:9:364:10 | b3 |
-| main.rs:370:15:370:16 | c1 | main.rs:365:9:365:10 | c1 |
-| main.rs:375:15:375:16 | a9 | main.rs:373:20:373:55 | a9 |
-| main.rs:384:15:384:17 | a10 | main.rs:380:13:380:15 | a10 |
-| main.rs:385:15:385:16 | b4 | main.rs:381:13:381:14 | b4 |
-| main.rs:386:15:386:16 | c2 | main.rs:382:13:382:14 | c2 |
-| main.rs:393:9:393:11 | a10 | main.rs:380:13:380:15 | a10 |
-| main.rs:394:9:394:10 | b4 | main.rs:381:13:381:14 | b4 |
-| main.rs:395:9:395:10 | c2 | main.rs:382:13:382:14 | c2 |
-| main.rs:397:15:397:17 | a10 | main.rs:380:13:380:15 | a10 |
-| main.rs:398:15:398:16 | b4 | main.rs:381:13:381:14 | b4 |
-| main.rs:399:15:399:16 | c2 | main.rs:382:13:382:14 | c2 |
-| main.rs:406:23:406:25 | a10 | main.rs:403:13:403:15 | a10 |
-| main.rs:407:23:407:24 | b4 | main.rs:404:13:404:14 | b4 |
-| main.rs:411:15:411:17 | a10 | main.rs:380:13:380:15 | a10 |
-| main.rs:412:15:412:16 | b4 | main.rs:381:13:381:14 | b4 |
-| main.rs:418:9:418:9 | x | main.rs:417:10:417:10 | x |
-| main.rs:420:9:420:23 | example_closure | main.rs:416:9:416:23 | example_closure |
-| main.rs:421:15:421:16 | n1 | main.rs:419:9:419:10 | n1 |
-| main.rs:426:9:426:9 | x | main.rs:425:6:425:6 | x |
-| main.rs:428:9:428:26 | immutable_variable | main.rs:424:9:424:26 | immutable_variable |
-| main.rs:429:15:429:16 | n2 | main.rs:427:9:427:10 | n2 |
-| main.rs:436:9:436:9 | x | main.rs:435:10:435:10 | x |
-| main.rs:437:15:437:15 | f | main.rs:434:9:434:9 | f |
-| main.rs:441:9:441:9 | x | main.rs:439:10:439:10 | x |
-| main.rs:444:15:444:15 | f | main.rs:434:9:434:9 | f |
-| main.rs:450:17:450:17 | x | main.rs:448:14:448:14 | x |
-| main.rs:459:13:459:13 | x | main.rs:458:14:458:14 | x |
-| main.rs:460:19:460:19 | f | main.rs:457:13:457:13 | f |
-| main.rs:468:12:468:12 | v | main.rs:465:9:465:9 | v |
-| main.rs:469:19:469:22 | text | main.rs:467:9:467:12 | text |
-| main.rs:476:15:476:15 | a | main.rs:474:13:474:13 | a |
-| main.rs:478:15:478:15 | a | main.rs:474:13:474:13 | a |
-| main.rs:485:6:485:10 | ref_i | main.rs:483:9:483:13 | ref_i |
-| main.rs:486:15:486:15 | i | main.rs:482:13:482:13 | i |
-| main.rs:490:6:490:6 | x | main.rs:489:17:489:17 | x |
-| main.rs:491:10:491:10 | x | main.rs:489:17:489:17 | x |
-| main.rs:492:10:492:10 | x | main.rs:489:17:489:17 | x |
-| main.rs:493:12:493:12 | x | main.rs:489:17:489:17 | x |
-| main.rs:497:6:497:6 | x | main.rs:496:22:496:22 | x |
-| main.rs:498:10:498:10 | x | main.rs:496:22:496:22 | x |
-| main.rs:499:10:499:10 | x | main.rs:496:22:496:22 | x |
-| main.rs:500:6:500:6 | y | main.rs:496:38:496:38 | y |
-| main.rs:501:9:501:9 | x | main.rs:496:22:496:22 | x |
-| main.rs:508:6:508:6 | y | main.rs:506:9:506:9 | y |
-| main.rs:511:15:511:15 | x | main.rs:505:13:505:13 | x |
-| main.rs:518:9:518:9 | w | main.rs:514:9:514:9 | w |
-| main.rs:520:7:520:7 | w | main.rs:514:9:514:9 | w |
-| main.rs:523:15:523:15 | z | main.rs:513:13:513:13 | z |
-| main.rs:530:6:530:6 | y | main.rs:528:9:528:9 | y |
-| main.rs:531:15:531:15 | x | main.rs:527:13:527:13 | x |
-| main.rs:539:19:539:19 | x | main.rs:535:9:535:9 | x |
-| main.rs:541:5:541:7 | cap | main.rs:538:9:538:11 | cap |
-| main.rs:542:15:542:15 | x | main.rs:535:9:535:9 | x |
-| main.rs:550:19:550:19 | x | main.rs:546:13:546:13 | x |
-| main.rs:552:5:552:12 | closure1 | main.rs:549:9:549:16 | closure1 |
-| main.rs:553:15:553:15 | x | main.rs:546:13:546:13 | x |
-| main.rs:561:5:561:12 | closure2 | main.rs:558:13:558:20 | closure2 |
-| main.rs:562:15:562:15 | y | main.rs:555:13:555:13 | y |
-| main.rs:568:9:568:9 | z | main.rs:564:13:564:13 | z |
-| main.rs:570:5:570:12 | closure3 | main.rs:567:13:567:20 | closure3 |
-| main.rs:571:15:571:15 | z | main.rs:564:13:564:13 | z |
-| main.rs:580:5:580:9 | block | main.rs:576:9:576:13 | block |
-| main.rs:581:15:581:15 | i | main.rs:575:13:575:13 | i |
-| main.rs:586:15:586:15 | x | main.rs:585:13:585:13 | x |
-| main.rs:587:15:587:15 | x | main.rs:585:13:585:13 | x |
-| main.rs:589:16:589:16 | b | main.rs:584:8:584:8 | b |
-| main.rs:592:19:592:19 | x | main.rs:585:13:585:13 | x |
-| main.rs:593:19:593:19 | x | main.rs:585:13:585:13 | x |
-| main.rs:596:19:596:19 | x | main.rs:585:13:585:13 | x |
-| main.rs:597:19:597:19 | x | main.rs:585:13:585:13 | x |
-| main.rs:599:15:599:15 | x | main.rs:585:13:585:13 | x |
-| main.rs:605:16:605:17 | b1 | main.rs:602:13:602:14 | b1 |
-| main.rs:607:19:607:19 | x | main.rs:603:9:603:9 | x |
-| main.rs:609:19:609:19 | x | main.rs:603:9:603:9 | x |
-| main.rs:613:16:613:17 | b2 | main.rs:602:23:602:24 | b2 |
-| main.rs:615:19:615:19 | x | main.rs:603:9:603:9 | x |
-| main.rs:617:19:617:19 | x | main.rs:603:9:603:9 | x |
-| main.rs:627:16:627:19 | self | main.rs:626:20:626:23 | self |
-| main.rs:631:9:631:12 | self | main.rs:630:11:630:14 | self |
-| main.rs:637:13:637:16 | self | main.rs:634:23:634:26 | self |
-| main.rs:637:25:637:25 | n | main.rs:635:22:635:22 | n |
-| main.rs:639:9:639:9 | f | main.rs:635:17:635:17 | f |
-| main.rs:640:9:640:9 | f | main.rs:635:17:635:17 | f |
-| main.rs:646:15:646:15 | a | main.rs:645:13:645:13 | a |
-| main.rs:647:5:647:5 | a | main.rs:645:13:645:13 | a |
-| main.rs:648:15:648:15 | a | main.rs:645:13:645:13 | a |
-| main.rs:650:15:650:15 | a | main.rs:645:13:645:13 | a |
-| main.rs:655:15:655:15 | a | main.rs:654:13:654:13 | a |
-| main.rs:656:5:656:5 | a | main.rs:654:13:654:13 | a |
-| main.rs:657:15:657:15 | a | main.rs:654:13:654:13 | a |
-| main.rs:659:15:659:15 | a | main.rs:654:13:654:13 | a |
-| main.rs:665:15:665:15 | x | main.rs:663:9:663:9 | x |
-| main.rs:677:10:677:13 | self | main.rs:676:17:676:20 | self |
-| main.rs:683:5:683:5 | a | main.rs:682:13:682:13 | a |
-| main.rs:686:15:686:15 | a | main.rs:682:13:682:13 | a |
-| main.rs:705:9:705:21 | var_in_macro | main.rs:705:9:705:21 | var_in_macro |
-| main.rs:706:15:706:28 | var_from_macro | main.rs:704:9:704:22 | var_from_macro |
-| main.rs:712:30:712:41 | var_in_macro | main.rs:712:15:712:28 | var_in_macro |
-| main.rs:713:15:713:26 | var_in_macro | main.rs:707:9:707:20 | var_in_macro |
-| main.rs:719:15:719:15 | x | main.rs:717:9:717:9 | x |
-| main.rs:726:20:726:20 | b | main.rs:724:20:724:20 | b |
-| main.rs:730:5:730:7 | cap | main.rs:724:13:724:15 | cap |
-| main.rs:731:15:731:15 | x | main.rs:723:13:723:13 | x |
+| main.rs:29:10:29:11 | x2 | main.rs:25:13:25:14 | x2 |
+| main.rs:30:15:30:16 | x2 | main.rs:25:13:25:14 | x2 |
+| main.rs:42:15:42:16 | x3 | main.rs:41:9:41:10 | x3 |
+| main.rs:44:9:44:10 | x3 | main.rs:41:9:41:10 | x3 |
+| main.rs:45:15:45:16 | x3 | main.rs:43:9:43:10 | x3 |
+| main.rs:50:15:50:16 | x4 | main.rs:49:9:49:10 | x4 |
+| main.rs:53:19:53:20 | x4 | main.rs:52:13:52:14 | x4 |
+| main.rs:55:15:55:16 | x4 | main.rs:49:9:49:10 | x4 |
+| main.rs:74:15:74:16 | a1 | main.rs:66:13:66:14 | a1 |
+| main.rs:75:15:75:16 | b1 | main.rs:67:13:67:14 | b1 |
+| main.rs:76:15:76:15 | x | main.rs:70:13:70:13 | x |
+| main.rs:77:15:77:15 | y | main.rs:71:13:71:13 | y |
+| main.rs:85:9:85:10 | p1 | main.rs:81:9:81:10 | p1 |
+| main.rs:86:15:86:16 | a2 | main.rs:83:12:83:13 | a2 |
+| main.rs:87:15:87:16 | b2 | main.rs:84:12:84:13 | b2 |
+| main.rs:94:11:94:12 | s1 | main.rs:91:9:91:10 | s1 |
+| main.rs:95:19:95:20 | s2 | main.rs:93:21:93:22 | s2 |
+| main.rs:102:7:102:7 | x | main.rs:100:9:100:9 | x |
+| main.rs:105:13:105:13 | x | main.rs:100:9:100:9 | x |
+| main.rs:106:19:106:19 | x | main.rs:104:13:104:13 | x |
+| main.rs:109:15:109:15 | x | main.rs:101:14:101:14 | x |
+| main.rs:116:11:116:12 | s1 | main.rs:113:9:113:10 | s1 |
+| main.rs:117:19:117:20 | s2 | main.rs:115:24:115:25 | s2 |
+| main.rs:125:11:125:12 | x6 | main.rs:122:9:122:10 | x6 |
+| main.rs:130:23:130:24 | y1 | main.rs:127:14:127:15 | y1 |
+| main.rs:135:15:135:16 | y1 | main.rs:123:9:123:10 | y1 |
+| main.rs:141:11:141:17 | numbers | main.rs:139:9:139:15 | numbers |
+| main.rs:150:23:150:27 | first | main.rs:144:13:144:17 | first |
+| main.rs:151:23:151:27 | third | main.rs:146:13:146:17 | third |
+| main.rs:152:23:152:27 | fifth | main.rs:148:13:148:17 | fifth |
+| main.rs:156:11:156:17 | numbers | main.rs:139:9:139:15 | numbers |
+| main.rs:163:23:163:27 | first | main.rs:159:13:159:17 | first |
+| main.rs:164:23:164:26 | last | main.rs:161:13:161:16 | last |
+| main.rs:172:11:172:12 | p2 | main.rs:170:9:170:10 | p2 |
+| main.rs:175:24:175:25 | x7 | main.rs:174:16:174:17 | x7 |
+| main.rs:186:11:186:13 | msg | main.rs:184:9:184:11 | msg |
+| main.rs:190:24:190:34 | id_variable | main.rs:189:17:189:27 | id_variable |
+| main.rs:197:23:197:24 | id | main.rs:194:26:194:27 | id |
+| main.rs:209:11:209:16 | either | main.rs:208:9:208:14 | either |
+| main.rs:211:26:211:27 | a3 | main.rs:210:9:210:44 | a3 |
+| main.rs:223:11:223:12 | tv | main.rs:222:9:222:10 | tv |
+| main.rs:225:26:225:27 | a4 | main.rs:224:9:224:81 | a4 |
+| main.rs:227:11:227:12 | tv | main.rs:222:9:222:10 | tv |
+| main.rs:229:26:229:27 | a5 | main.rs:228:9:228:83 | a5 |
+| main.rs:231:11:231:12 | tv | main.rs:222:9:222:10 | tv |
+| main.rs:233:26:233:27 | a6 | main.rs:232:9:232:83 | a6 |
+| main.rs:239:11:239:16 | either | main.rs:238:9:238:14 | either |
+| main.rs:241:16:241:17 | a7 | main.rs:240:9:240:44 | a7 |
+| main.rs:242:26:242:27 | a7 | main.rs:240:9:240:44 | a7 |
+| main.rs:250:11:250:16 | either | main.rs:248:9:248:14 | either |
+| main.rs:254:23:254:25 | a11 | main.rs:252:14:252:51 | a11 |
+| main.rs:256:15:256:15 | e | main.rs:251:13:251:13 | e |
+| main.rs:257:28:257:30 | a12 | main.rs:255:33:255:35 | a12 |
+| main.rs:273:11:273:12 | fv | main.rs:272:9:272:10 | fv |
+| main.rs:275:26:275:28 | a13 | main.rs:274:9:274:109 | a13 |
+| main.rs:283:7:283:7 | x | main.rs:281:9:281:9 | x |
+| main.rs:285:5:285:5 | x | main.rs:282:17:282:17 | x |
+| main.rs:287:19:287:19 | x | main.rs:282:17:282:17 | x |
+| main.rs:290:13:290:13 | x | main.rs:281:9:281:9 | x |
+| main.rs:291:19:291:19 | x | main.rs:289:13:289:13 | x |
+| main.rs:299:7:299:7 | x | main.rs:297:9:297:9 | x |
+| main.rs:302:12:302:12 | x | main.rs:298:17:298:17 | x |
+| main.rs:304:5:304:5 | x | main.rs:301:14:301:14 | x |
+| main.rs:306:19:306:19 | x | main.rs:301:14:301:14 | x |
+| main.rs:309:13:309:13 | x | main.rs:297:9:297:9 | x |
+| main.rs:310:19:310:19 | x | main.rs:308:13:308:13 | x |
+| main.rs:318:7:318:7 | x | main.rs:316:9:316:9 | x |
+| main.rs:321:12:321:12 | x | main.rs:317:20:317:20 | x |
+| main.rs:323:5:323:5 | x | main.rs:320:14:320:14 | x |
+| main.rs:325:19:325:19 | x | main.rs:320:14:320:14 | x |
+| main.rs:329:15:329:15 | x | main.rs:316:9:316:9 | x |
+| main.rs:335:11:335:11 | x | main.rs:334:9:334:9 | x |
+| main.rs:338:18:338:18 | x | main.rs:336:14:336:14 | x |
+| main.rs:339:19:339:19 | x | main.rs:337:20:337:20 | x |
+| main.rs:343:15:343:15 | x | main.rs:334:9:334:9 | x |
+| main.rs:350:7:350:7 | x | main.rs:348:9:348:9 | x |
+| main.rs:352:19:352:19 | x | main.rs:349:16:349:16 | x |
+| main.rs:355:7:355:7 | x | main.rs:348:9:348:9 | x |
+| main.rs:357:19:357:19 | x | main.rs:354:20:354:20 | x |
+| main.rs:359:19:359:19 | x | main.rs:348:9:348:9 | x |
+| main.rs:370:15:370:16 | a8 | main.rs:364:5:364:6 | a8 |
+| main.rs:371:15:371:16 | b3 | main.rs:366:9:366:10 | b3 |
+| main.rs:372:15:372:16 | c1 | main.rs:367:9:367:10 | c1 |
+| main.rs:377:15:377:16 | a9 | main.rs:375:20:375:55 | a9 |
+| main.rs:386:15:386:17 | a10 | main.rs:382:13:382:15 | a10 |
+| main.rs:387:15:387:16 | b4 | main.rs:383:13:383:14 | b4 |
+| main.rs:388:15:388:16 | c2 | main.rs:384:13:384:14 | c2 |
+| main.rs:395:9:395:11 | a10 | main.rs:382:13:382:15 | a10 |
+| main.rs:396:9:396:10 | b4 | main.rs:383:13:383:14 | b4 |
+| main.rs:397:9:397:10 | c2 | main.rs:384:13:384:14 | c2 |
+| main.rs:399:15:399:17 | a10 | main.rs:382:13:382:15 | a10 |
+| main.rs:400:15:400:16 | b4 | main.rs:383:13:383:14 | b4 |
+| main.rs:401:15:401:16 | c2 | main.rs:384:13:384:14 | c2 |
+| main.rs:408:23:408:25 | a10 | main.rs:405:13:405:15 | a10 |
+| main.rs:409:23:409:24 | b4 | main.rs:406:13:406:14 | b4 |
+| main.rs:413:15:413:17 | a10 | main.rs:382:13:382:15 | a10 |
+| main.rs:414:15:414:16 | b4 | main.rs:383:13:383:14 | b4 |
+| main.rs:420:9:420:9 | x | main.rs:419:10:419:10 | x |
+| main.rs:422:9:422:23 | example_closure | main.rs:418:9:418:23 | example_closure |
+| main.rs:423:15:423:16 | n1 | main.rs:421:9:421:10 | n1 |
+| main.rs:428:9:428:9 | x | main.rs:427:6:427:6 | x |
+| main.rs:430:9:430:26 | immutable_variable | main.rs:426:9:426:26 | immutable_variable |
+| main.rs:431:15:431:16 | n2 | main.rs:429:9:429:10 | n2 |
+| main.rs:438:9:438:9 | x | main.rs:437:10:437:10 | x |
+| main.rs:439:15:439:15 | f | main.rs:436:9:436:9 | f |
+| main.rs:443:9:443:9 | x | main.rs:441:10:441:10 | x |
+| main.rs:446:15:446:15 | f | main.rs:436:9:436:9 | f |
+| main.rs:452:17:452:17 | x | main.rs:450:14:450:14 | x |
+| main.rs:461:13:461:13 | x | main.rs:460:14:460:14 | x |
+| main.rs:462:19:462:19 | f | main.rs:459:13:459:13 | f |
+| main.rs:470:12:470:12 | v | main.rs:467:9:467:9 | v |
+| main.rs:471:19:471:22 | text | main.rs:469:9:469:12 | text |
+| main.rs:478:15:478:15 | a | main.rs:476:13:476:13 | a |
+| main.rs:480:15:480:15 | a | main.rs:476:13:476:13 | a |
+| main.rs:487:6:487:10 | ref_i | main.rs:485:9:485:13 | ref_i |
+| main.rs:488:15:488:15 | i | main.rs:484:13:484:13 | i |
+| main.rs:492:6:492:6 | x | main.rs:491:17:491:17 | x |
+| main.rs:493:10:493:10 | x | main.rs:491:17:491:17 | x |
+| main.rs:494:10:494:10 | x | main.rs:491:17:491:17 | x |
+| main.rs:495:12:495:12 | x | main.rs:491:17:491:17 | x |
+| main.rs:499:6:499:6 | x | main.rs:498:22:498:22 | x |
+| main.rs:500:10:500:10 | x | main.rs:498:22:498:22 | x |
+| main.rs:501:10:501:10 | x | main.rs:498:22:498:22 | x |
+| main.rs:502:6:502:6 | y | main.rs:498:38:498:38 | y |
+| main.rs:503:9:503:9 | x | main.rs:498:22:498:22 | x |
+| main.rs:510:6:510:6 | y | main.rs:508:9:508:9 | y |
+| main.rs:513:15:513:15 | x | main.rs:507:13:507:13 | x |
+| main.rs:520:9:520:9 | w | main.rs:516:9:516:9 | w |
+| main.rs:522:7:522:7 | w | main.rs:516:9:516:9 | w |
+| main.rs:525:15:525:15 | z | main.rs:515:13:515:13 | z |
+| main.rs:532:6:532:6 | y | main.rs:530:9:530:9 | y |
+| main.rs:533:15:533:15 | x | main.rs:529:13:529:13 | x |
+| main.rs:541:19:541:19 | x | main.rs:537:9:537:9 | x |
+| main.rs:543:5:543:7 | cap | main.rs:540:9:540:11 | cap |
+| main.rs:544:15:544:15 | x | main.rs:537:9:537:9 | x |
+| main.rs:552:19:552:19 | x | main.rs:548:13:548:13 | x |
+| main.rs:554:5:554:12 | closure1 | main.rs:551:9:551:16 | closure1 |
+| main.rs:555:15:555:15 | x | main.rs:548:13:548:13 | x |
+| main.rs:563:5:563:12 | closure2 | main.rs:560:13:560:20 | closure2 |
+| main.rs:564:15:564:15 | y | main.rs:557:13:557:13 | y |
+| main.rs:570:9:570:9 | z | main.rs:566:13:566:13 | z |
+| main.rs:572:5:572:12 | closure3 | main.rs:569:13:569:20 | closure3 |
+| main.rs:573:15:573:15 | z | main.rs:566:13:566:13 | z |
+| main.rs:582:5:582:9 | block | main.rs:578:9:578:13 | block |
+| main.rs:583:15:583:15 | i | main.rs:577:13:577:13 | i |
+| main.rs:588:15:588:15 | x | main.rs:587:13:587:13 | x |
+| main.rs:589:15:589:15 | x | main.rs:587:13:587:13 | x |
+| main.rs:591:16:591:16 | b | main.rs:586:8:586:8 | b |
+| main.rs:594:19:594:19 | x | main.rs:587:13:587:13 | x |
+| main.rs:595:19:595:19 | x | main.rs:587:13:587:13 | x |
+| main.rs:598:19:598:19 | x | main.rs:587:13:587:13 | x |
+| main.rs:599:19:599:19 | x | main.rs:587:13:587:13 | x |
+| main.rs:601:15:601:15 | x | main.rs:587:13:587:13 | x |
+| main.rs:607:16:607:17 | b1 | main.rs:604:13:604:14 | b1 |
+| main.rs:609:19:609:19 | x | main.rs:605:9:605:9 | x |
+| main.rs:611:19:611:19 | x | main.rs:605:9:605:9 | x |
+| main.rs:615:16:615:17 | b2 | main.rs:604:23:604:24 | b2 |
+| main.rs:617:19:617:19 | x | main.rs:605:9:605:9 | x |
+| main.rs:619:19:619:19 | x | main.rs:605:9:605:9 | x |
+| main.rs:629:16:629:19 | self | main.rs:628:20:628:23 | self |
+| main.rs:633:9:633:12 | self | main.rs:632:11:632:14 | self |
+| main.rs:639:13:639:16 | self | main.rs:636:23:636:26 | self |
+| main.rs:639:25:639:25 | n | main.rs:637:22:637:22 | n |
+| main.rs:641:9:641:9 | f | main.rs:637:17:637:17 | f |
+| main.rs:642:9:642:9 | f | main.rs:637:17:637:17 | f |
+| main.rs:648:15:648:15 | a | main.rs:647:13:647:13 | a |
+| main.rs:649:5:649:5 | a | main.rs:647:13:647:13 | a |
+| main.rs:650:15:650:15 | a | main.rs:647:13:647:13 | a |
+| main.rs:652:15:652:15 | a | main.rs:647:13:647:13 | a |
+| main.rs:657:15:657:15 | a | main.rs:656:13:656:13 | a |
+| main.rs:658:5:658:5 | a | main.rs:656:13:656:13 | a |
+| main.rs:659:15:659:15 | a | main.rs:656:13:656:13 | a |
+| main.rs:661:15:661:15 | a | main.rs:656:13:656:13 | a |
+| main.rs:667:15:667:15 | x | main.rs:665:9:665:9 | x |
+| main.rs:679:10:679:13 | self | main.rs:678:17:678:20 | self |
+| main.rs:685:5:685:5 | a | main.rs:684:13:684:13 | a |
+| main.rs:688:15:688:15 | a | main.rs:684:13:684:13 | a |
+| main.rs:707:9:707:21 | var_in_macro | main.rs:707:9:707:21 | var_in_macro |
+| main.rs:708:15:708:28 | var_from_macro | main.rs:706:9:706:22 | var_from_macro |
+| main.rs:714:30:714:41 | var_in_macro | main.rs:714:15:714:28 | var_in_macro |
+| main.rs:715:15:715:26 | var_in_macro | main.rs:709:9:709:20 | var_in_macro |
+| main.rs:721:15:721:15 | x | main.rs:719:9:719:9 | x |
+| main.rs:728:20:728:20 | b | main.rs:726:20:726:20 | b |
+| main.rs:732:5:732:7 | cap | main.rs:726:13:726:15 | cap |
+| main.rs:733:15:733:15 | x | main.rs:725:13:725:13 | x |
variableInitializer
| main.rs:20:9:20:10 | x1 | main.rs:20:14:20:16 | "a" |
| main.rs:25:13:25:14 | x2 | main.rs:25:18:25:18 | 4 |
-| main.rs:32:13:32:13 | x | main.rs:32:17:32:17 | 1 |
-| main.rs:39:9:39:10 | x3 | main.rs:39:14:39:14 | 1 |
-| main.rs:41:9:41:10 | x3 | main.rs:42:9:42:14 | ... + ... |
-| main.rs:47:9:47:10 | x4 | main.rs:47:14:47:16 | "a" |
-| main.rs:50:13:50:14 | x4 | main.rs:50:18:50:20 | "b" |
-| main.rs:79:9:79:10 | p1 | main.rs:79:14:79:37 | Point {...} |
-| main.rs:89:9:89:10 | s1 | main.rs:89:14:89:41 | Some(...) |
-| main.rs:98:9:98:9 | x | main.rs:98:13:98:22 | Some(...) |
-| main.rs:102:13:102:13 | x | main.rs:103:13:103:13 | x |
-| main.rs:111:9:111:10 | s1 | main.rs:111:14:111:41 | Some(...) |
-| main.rs:120:9:120:10 | x6 | main.rs:120:14:120:20 | Some(...) |
-| main.rs:121:9:121:10 | y1 | main.rs:121:14:121:15 | 10 |
-| main.rs:137:9:137:15 | numbers | main.rs:137:19:137:35 | TupleExpr |
-| main.rs:168:9:168:10 | p2 | main.rs:168:14:168:37 | Point {...} |
-| main.rs:182:9:182:11 | msg | main.rs:182:15:182:38 | ...::Hello {...} |
-| main.rs:206:9:206:14 | either | main.rs:206:18:206:33 | ...::Left(...) |
-| main.rs:220:9:220:10 | tv | main.rs:220:14:220:36 | ...::Second(...) |
-| main.rs:236:9:236:14 | either | main.rs:236:18:236:33 | ...::Left(...) |
-| main.rs:246:9:246:14 | either | main.rs:246:18:246:33 | ...::Left(...) |
-| main.rs:270:9:270:10 | fv | main.rs:270:14:270:35 | ...::Second(...) |
-| main.rs:279:9:279:9 | x | main.rs:279:12:279:19 | Some(...) |
-| main.rs:287:13:287:13 | x | main.rs:288:13:288:13 | x |
-| main.rs:295:9:295:9 | x | main.rs:295:13:295:20 | Some(...) |
-| main.rs:306:13:306:13 | x | main.rs:307:13:307:13 | x |
-| main.rs:314:9:314:9 | x | main.rs:314:13:314:20 | Some(...) |
-| main.rs:332:9:332:9 | x | main.rs:332:13:332:20 | Some(...) |
-| main.rs:335:20:335:20 | x | main.rs:336:18:336:18 | x |
-| main.rs:346:9:346:9 | x | main.rs:346:13:346:18 | Ok(...) |
-| main.rs:416:9:416:23 | example_closure | main.rs:417:9:418:9 | \|...\| x |
-| main.rs:419:9:419:10 | n1 | main.rs:420:9:420:26 | example_closure(...) |
-| main.rs:424:9:424:26 | immutable_variable | main.rs:425:5:426:9 | \|...\| x |
-| main.rs:427:9:427:10 | n2 | main.rs:428:9:428:29 | immutable_variable(...) |
-| main.rs:434:9:434:9 | f | main.rs:435:9:436:9 | \|...\| x |
-| main.rs:457:13:457:13 | f | main.rs:458:13:459:13 | \|...\| x |
-| main.rs:465:9:465:9 | v | main.rs:465:13:465:41 | &... |
-| main.rs:474:13:474:13 | a | main.rs:474:17:474:17 | 0 |
-| main.rs:482:13:482:13 | i | main.rs:482:17:482:17 | 1 |
-| main.rs:483:9:483:13 | ref_i | main.rs:484:9:484:14 | &mut i |
-| main.rs:505:13:505:13 | x | main.rs:505:17:505:17 | 2 |
-| main.rs:506:9:506:9 | y | main.rs:507:9:507:28 | mutate_param(...) |
-| main.rs:513:13:513:13 | z | main.rs:513:17:513:17 | 4 |
-| main.rs:514:9:514:9 | w | main.rs:515:9:515:19 | &mut ... |
-| main.rs:527:13:527:13 | x | main.rs:527:17:527:17 | 1 |
-| main.rs:528:9:528:9 | y | main.rs:529:9:529:14 | &mut x |
-| main.rs:535:9:535:9 | x | main.rs:535:13:535:15 | 100 |
-| main.rs:538:9:538:11 | cap | main.rs:538:15:540:5 | \|...\| ... |
-| main.rs:546:13:546:13 | x | main.rs:546:17:546:17 | 1 |
-| main.rs:549:9:549:16 | closure1 | main.rs:549:20:551:5 | \|...\| ... |
-| main.rs:555:13:555:13 | y | main.rs:555:17:555:17 | 2 |
-| main.rs:558:13:558:20 | closure2 | main.rs:558:24:560:5 | \|...\| ... |
-| main.rs:564:13:564:13 | z | main.rs:564:17:564:17 | 2 |
-| main.rs:567:13:567:20 | closure3 | main.rs:567:24:569:5 | \|...\| ... |
-| main.rs:575:13:575:13 | i | main.rs:575:22:575:22 | 0 |
-| main.rs:576:9:576:13 | block | main.rs:576:17:578:5 | { ... } |
-| main.rs:585:13:585:13 | x | main.rs:585:17:585:17 | 1 |
-| main.rs:603:9:603:9 | x | main.rs:603:13:603:13 | 1 |
-| main.rs:635:17:635:17 | f | main.rs:635:21:638:9 | \|...\| ... |
-| main.rs:645:13:645:13 | a | main.rs:645:17:645:35 | MyStruct {...} |
-| main.rs:654:13:654:13 | a | main.rs:654:17:654:25 | [...] |
-| main.rs:663:9:663:9 | x | main.rs:663:13:663:14 | 16 |
-| main.rs:667:9:667:9 | z | main.rs:667:13:667:14 | 17 |
-| main.rs:682:13:682:13 | a | main.rs:682:17:682:35 | MyStruct {...} |
-| main.rs:704:9:704:22 | var_from_macro | main.rs:705:9:705:25 | MacroExpr |
-| main.rs:705:9:705:21 | var_in_macro | main.rs:705:23:705:24 | 37 |
-| main.rs:707:9:707:20 | var_in_macro | main.rs:707:24:707:25 | 33 |
-| main.rs:712:15:712:28 | var_in_macro | main.rs:712:15:712:28 | 0 |
-| main.rs:723:13:723:13 | x | main.rs:723:17:723:19 | 100 |
-| main.rs:724:13:724:15 | cap | main.rs:724:19:729:5 | \|...\| ... |
+| main.rs:34:13:34:13 | x | main.rs:34:17:34:17 | 1 |
+| main.rs:41:9:41:10 | x3 | main.rs:41:14:41:14 | 1 |
+| main.rs:43:9:43:10 | x3 | main.rs:44:9:44:14 | ... + ... |
+| main.rs:49:9:49:10 | x4 | main.rs:49:14:49:16 | "a" |
+| main.rs:52:13:52:14 | x4 | main.rs:52:18:52:20 | "b" |
+| main.rs:81:9:81:10 | p1 | main.rs:81:14:81:37 | Point {...} |
+| main.rs:91:9:91:10 | s1 | main.rs:91:14:91:41 | Some(...) |
+| main.rs:100:9:100:9 | x | main.rs:100:13:100:22 | Some(...) |
+| main.rs:104:13:104:13 | x | main.rs:105:13:105:13 | x |
+| main.rs:113:9:113:10 | s1 | main.rs:113:14:113:41 | Some(...) |
+| main.rs:122:9:122:10 | x6 | main.rs:122:14:122:20 | Some(...) |
+| main.rs:123:9:123:10 | y1 | main.rs:123:14:123:15 | 10 |
+| main.rs:139:9:139:15 | numbers | main.rs:139:19:139:35 | TupleExpr |
+| main.rs:170:9:170:10 | p2 | main.rs:170:14:170:37 | Point {...} |
+| main.rs:184:9:184:11 | msg | main.rs:184:15:184:38 | ...::Hello {...} |
+| main.rs:208:9:208:14 | either | main.rs:208:18:208:33 | ...::Left(...) |
+| main.rs:222:9:222:10 | tv | main.rs:222:14:222:36 | ...::Second(...) |
+| main.rs:238:9:238:14 | either | main.rs:238:18:238:33 | ...::Left(...) |
+| main.rs:248:9:248:14 | either | main.rs:248:18:248:33 | ...::Left(...) |
+| main.rs:272:9:272:10 | fv | main.rs:272:14:272:35 | ...::Second(...) |
+| main.rs:281:9:281:9 | x | main.rs:281:12:281:19 | Some(...) |
+| main.rs:289:13:289:13 | x | main.rs:290:13:290:13 | x |
+| main.rs:297:9:297:9 | x | main.rs:297:13:297:20 | Some(...) |
+| main.rs:308:13:308:13 | x | main.rs:309:13:309:13 | x |
+| main.rs:316:9:316:9 | x | main.rs:316:13:316:20 | Some(...) |
+| main.rs:334:9:334:9 | x | main.rs:334:13:334:20 | Some(...) |
+| main.rs:337:20:337:20 | x | main.rs:338:18:338:18 | x |
+| main.rs:348:9:348:9 | x | main.rs:348:13:348:18 | Ok(...) |
+| main.rs:418:9:418:23 | example_closure | main.rs:419:9:420:9 | \|...\| x |
+| main.rs:421:9:421:10 | n1 | main.rs:422:9:422:26 | example_closure(...) |
+| main.rs:426:9:426:26 | immutable_variable | main.rs:427:5:428:9 | \|...\| x |
+| main.rs:429:9:429:10 | n2 | main.rs:430:9:430:29 | immutable_variable(...) |
+| main.rs:436:9:436:9 | f | main.rs:437:9:438:9 | \|...\| x |
+| main.rs:459:13:459:13 | f | main.rs:460:13:461:13 | \|...\| x |
+| main.rs:467:9:467:9 | v | main.rs:467:13:467:41 | &... |
+| main.rs:476:13:476:13 | a | main.rs:476:17:476:17 | 0 |
+| main.rs:484:13:484:13 | i | main.rs:484:17:484:17 | 1 |
+| main.rs:485:9:485:13 | ref_i | main.rs:486:9:486:14 | &mut i |
+| main.rs:507:13:507:13 | x | main.rs:507:17:507:17 | 2 |
+| main.rs:508:9:508:9 | y | main.rs:509:9:509:28 | mutate_param(...) |
+| main.rs:515:13:515:13 | z | main.rs:515:17:515:17 | 4 |
+| main.rs:516:9:516:9 | w | main.rs:517:9:517:19 | &mut ... |
+| main.rs:529:13:529:13 | x | main.rs:529:17:529:17 | 1 |
+| main.rs:530:9:530:9 | y | main.rs:531:9:531:14 | &mut x |
+| main.rs:537:9:537:9 | x | main.rs:537:13:537:15 | 100 |
+| main.rs:540:9:540:11 | cap | main.rs:540:15:542:5 | \|...\| ... |
+| main.rs:548:13:548:13 | x | main.rs:548:17:548:17 | 1 |
+| main.rs:551:9:551:16 | closure1 | main.rs:551:20:553:5 | \|...\| ... |
+| main.rs:557:13:557:13 | y | main.rs:557:17:557:17 | 2 |
+| main.rs:560:13:560:20 | closure2 | main.rs:560:24:562:5 | \|...\| ... |
+| main.rs:566:13:566:13 | z | main.rs:566:17:566:17 | 2 |
+| main.rs:569:13:569:20 | closure3 | main.rs:569:24:571:5 | \|...\| ... |
+| main.rs:577:13:577:13 | i | main.rs:577:22:577:22 | 0 |
+| main.rs:578:9:578:13 | block | main.rs:578:17:580:5 | { ... } |
+| main.rs:587:13:587:13 | x | main.rs:587:17:587:17 | 1 |
+| main.rs:605:9:605:9 | x | main.rs:605:13:605:13 | 1 |
+| main.rs:637:17:637:17 | f | main.rs:637:21:640:9 | \|...\| ... |
+| main.rs:647:13:647:13 | a | main.rs:647:17:647:35 | MyStruct {...} |
+| main.rs:656:13:656:13 | a | main.rs:656:17:656:25 | [...] |
+| main.rs:665:9:665:9 | x | main.rs:665:13:665:14 | 16 |
+| main.rs:669:9:669:9 | z | main.rs:669:13:669:14 | 17 |
+| main.rs:684:13:684:13 | a | main.rs:684:17:684:35 | MyStruct {...} |
+| main.rs:706:9:706:22 | var_from_macro | main.rs:707:9:707:25 | MacroExpr |
+| main.rs:707:9:707:21 | var_in_macro | main.rs:707:23:707:24 | 37 |
+| main.rs:709:9:709:20 | var_in_macro | main.rs:709:24:709:25 | 33 |
+| main.rs:714:15:714:28 | var_in_macro | main.rs:714:15:714:28 | 0 |
+| main.rs:725:13:725:13 | x | main.rs:725:17:725:19 | 100 |
+| main.rs:726:13:726:15 | cap | main.rs:726:19:731:5 | \|...\| ... |
capturedVariable
-| main.rs:535:9:535:9 | x |
-| main.rs:546:13:546:13 | x |
-| main.rs:555:13:555:13 | y |
-| main.rs:564:13:564:13 | z |
-| main.rs:575:13:575:13 | i |
-| main.rs:634:23:634:26 | self |
-| main.rs:723:13:723:13 | x |
+| main.rs:537:9:537:9 | x |
+| main.rs:548:13:548:13 | x |
+| main.rs:557:13:557:13 | y |
+| main.rs:566:13:566:13 | z |
+| main.rs:577:13:577:13 | i |
+| main.rs:636:23:636:26 | self |
+| main.rs:725:13:725:13 | x |
capturedAccess
-| main.rs:539:19:539:19 | x |
-| main.rs:550:19:550:19 | x |
-| main.rs:559:9:559:9 | y |
-| main.rs:568:9:568:9 | z |
-| main.rs:577:9:577:9 | i |
-| main.rs:637:13:637:16 | self |
-| main.rs:727:13:727:13 | x |
+| main.rs:541:19:541:19 | x |
+| main.rs:552:19:552:19 | x |
+| main.rs:561:9:561:9 | y |
+| main.rs:570:9:570:9 | z |
+| main.rs:579:9:579:9 | i |
+| main.rs:639:13:639:16 | self |
+| main.rs:729:13:729:13 | x |
nestedFunctionAccess
-| main.rs:447:19:447:19 | f | main.rs:448:9:451:9 | fn f |
-| main.rs:454:23:454:23 | f | main.rs:448:9:451:9 | fn f |
+| main.rs:449:19:449:19 | f | main.rs:450:9:453:9 | fn f |
+| main.rs:456:23:456:23 | f | main.rs:450:9:453:9 | fn f |
diff --git a/rust/ql/test/query-tests/security/CWE-918/RequestForgery.expected b/rust/ql/test/query-tests/security/CWE-918/RequestForgery.expected
index 29c5d122ae2..4d44df7349f 100644
--- a/rust/ql/test/query-tests/security/CWE-918/RequestForgery.expected
+++ b/rust/ql/test/query-tests/security/CWE-918/RequestForgery.expected
@@ -21,39 +21,43 @@ edges
| request_forgery_tests.rs:5:29:5:36 | user_url | request_forgery_tests.rs:31:43:31:50 | user_url | provenance | |
| request_forgery_tests.rs:5:29:5:36 | user_url | request_forgery_tests.rs:37:51:37:58 | user_url | provenance | |
| request_forgery_tests.rs:5:29:5:36 | user_url | request_forgery_tests.rs:37:51:37:58 | user_url | provenance | |
-| request_forgery_tests.rs:8:37:8:45 | &user_url [&ref] | request_forgery_tests.rs:8:24:8:35 | ...::get | provenance | MaD:3680 Sink:MaD:3680 |
-| request_forgery_tests.rs:8:37:8:45 | &user_url [&ref] | request_forgery_tests.rs:8:24:8:35 | ...::get | provenance | MaD:3680 Sink:MaD:3680 |
+| request_forgery_tests.rs:8:37:8:45 | &user_url [&ref] | request_forgery_tests.rs:8:24:8:35 | ...::get | provenance | MaD:1 Sink:MaD:1 |
+| request_forgery_tests.rs:8:37:8:45 | &user_url [&ref] | request_forgery_tests.rs:8:24:8:35 | ...::get | provenance | MaD:1 Sink:MaD:1 |
| request_forgery_tests.rs:8:38:8:45 | user_url | request_forgery_tests.rs:8:37:8:45 | &user_url [&ref] | provenance | |
| request_forgery_tests.rs:8:38:8:45 | user_url | request_forgery_tests.rs:8:37:8:45 | &user_url [&ref] | provenance | |
| request_forgery_tests.rs:16:13:16:15 | url | request_forgery_tests.rs:17:39:17:41 | url | provenance | |
| request_forgery_tests.rs:16:27:16:49 | ...::format(...) | request_forgery_tests.rs:4:5:4:14 | res | provenance | |
| request_forgery_tests.rs:16:27:16:49 | ...::must_use(...) | request_forgery_tests.rs:16:13:16:15 | url | provenance | |
-| request_forgery_tests.rs:16:27:16:49 | MacroExpr | request_forgery_tests.rs:16:27:16:49 | ...::format(...) | provenance | MaD:291 |
-| request_forgery_tests.rs:16:27:16:49 | { ... } | request_forgery_tests.rs:16:27:16:49 | ...::must_use(...) | provenance | MaD:10629 |
-| request_forgery_tests.rs:17:38:17:41 | &url [&ref] | request_forgery_tests.rs:17:25:17:36 | ...::get | provenance | MaD:3680 Sink:MaD:3680 |
+| request_forgery_tests.rs:16:27:16:49 | MacroExpr | request_forgery_tests.rs:16:27:16:49 | ...::format(...) | provenance | MaD:2 |
+| request_forgery_tests.rs:16:27:16:49 | { ... } | request_forgery_tests.rs:16:27:16:49 | ...::must_use(...) | provenance | MaD:3 |
+| request_forgery_tests.rs:17:38:17:41 | &url [&ref] | request_forgery_tests.rs:17:25:17:36 | ...::get | provenance | MaD:1 Sink:MaD:1 |
| request_forgery_tests.rs:17:39:17:41 | url | request_forgery_tests.rs:17:38:17:41 | &url [&ref] | provenance | |
| request_forgery_tests.rs:20:13:20:15 | url | request_forgery_tests.rs:21:39:21:41 | url | provenance | |
| request_forgery_tests.rs:20:27:20:57 | ...::format(...) | request_forgery_tests.rs:4:5:4:14 | res | provenance | |
| request_forgery_tests.rs:20:27:20:57 | ...::must_use(...) | request_forgery_tests.rs:20:13:20:15 | url | provenance | |
-| request_forgery_tests.rs:20:27:20:57 | MacroExpr | request_forgery_tests.rs:20:27:20:57 | ...::format(...) | provenance | MaD:291 |
-| request_forgery_tests.rs:20:27:20:57 | { ... } | request_forgery_tests.rs:20:27:20:57 | ...::must_use(...) | provenance | MaD:10629 |
-| request_forgery_tests.rs:21:38:21:41 | &url [&ref] | request_forgery_tests.rs:21:25:21:36 | ...::get | provenance | MaD:3680 Sink:MaD:3680 |
+| request_forgery_tests.rs:20:27:20:57 | MacroExpr | request_forgery_tests.rs:20:27:20:57 | ...::format(...) | provenance | MaD:2 |
+| request_forgery_tests.rs:20:27:20:57 | { ... } | request_forgery_tests.rs:20:27:20:57 | ...::must_use(...) | provenance | MaD:3 |
+| request_forgery_tests.rs:21:38:21:41 | &url [&ref] | request_forgery_tests.rs:21:25:21:36 | ...::get | provenance | MaD:1 Sink:MaD:1 |
| request_forgery_tests.rs:21:39:21:41 | url | request_forgery_tests.rs:21:38:21:41 | &url [&ref] | provenance | |
| request_forgery_tests.rs:24:13:24:15 | url | request_forgery_tests.rs:25:39:25:41 | url | provenance | |
| request_forgery_tests.rs:24:27:24:70 | ...::format(...) | request_forgery_tests.rs:4:5:4:14 | res | provenance | |
| request_forgery_tests.rs:24:27:24:70 | ...::must_use(...) | request_forgery_tests.rs:24:13:24:15 | url | provenance | |
-| request_forgery_tests.rs:24:27:24:70 | MacroExpr | request_forgery_tests.rs:24:27:24:70 | ...::format(...) | provenance | MaD:291 |
-| request_forgery_tests.rs:24:27:24:70 | { ... } | request_forgery_tests.rs:24:27:24:70 | ...::must_use(...) | provenance | MaD:10629 |
-| request_forgery_tests.rs:25:38:25:41 | &url [&ref] | request_forgery_tests.rs:25:25:25:36 | ...::get | provenance | MaD:3680 Sink:MaD:3680 |
+| request_forgery_tests.rs:24:27:24:70 | MacroExpr | request_forgery_tests.rs:24:27:24:70 | ...::format(...) | provenance | MaD:2 |
+| request_forgery_tests.rs:24:27:24:70 | { ... } | request_forgery_tests.rs:24:27:24:70 | ...::must_use(...) | provenance | MaD:3 |
+| request_forgery_tests.rs:25:38:25:41 | &url [&ref] | request_forgery_tests.rs:25:25:25:36 | ...::get | provenance | MaD:1 Sink:MaD:1 |
| request_forgery_tests.rs:25:39:25:41 | url | request_forgery_tests.rs:25:38:25:41 | &url [&ref] | provenance | |
-| request_forgery_tests.rs:31:42:31:50 | &user_url [&ref] | request_forgery_tests.rs:31:29:31:40 | ...::get | provenance | MaD:3680 Sink:MaD:3680 |
-| request_forgery_tests.rs:31:42:31:50 | &user_url [&ref] | request_forgery_tests.rs:31:29:31:40 | ...::get | provenance | MaD:3680 Sink:MaD:3680 |
+| request_forgery_tests.rs:31:42:31:50 | &user_url [&ref] | request_forgery_tests.rs:31:29:31:40 | ...::get | provenance | MaD:1 Sink:MaD:1 |
+| request_forgery_tests.rs:31:42:31:50 | &user_url [&ref] | request_forgery_tests.rs:31:29:31:40 | ...::get | provenance | MaD:1 Sink:MaD:1 |
| request_forgery_tests.rs:31:43:31:50 | user_url | request_forgery_tests.rs:31:42:31:50 | &user_url [&ref] | provenance | |
| request_forgery_tests.rs:31:43:31:50 | user_url | request_forgery_tests.rs:31:42:31:50 | &user_url [&ref] | provenance | |
-| request_forgery_tests.rs:37:50:37:58 | &user_url [&ref] | request_forgery_tests.rs:37:37:37:48 | ...::get | provenance | MaD:3680 Sink:MaD:3680 |
-| request_forgery_tests.rs:37:50:37:58 | &user_url [&ref] | request_forgery_tests.rs:37:37:37:48 | ...::get | provenance | MaD:3680 Sink:MaD:3680 |
+| request_forgery_tests.rs:37:50:37:58 | &user_url [&ref] | request_forgery_tests.rs:37:37:37:48 | ...::get | provenance | MaD:1 Sink:MaD:1 |
+| request_forgery_tests.rs:37:50:37:58 | &user_url [&ref] | request_forgery_tests.rs:37:37:37:48 | ...::get | provenance | MaD:1 Sink:MaD:1 |
| request_forgery_tests.rs:37:51:37:58 | user_url | request_forgery_tests.rs:37:50:37:58 | &user_url [&ref] | provenance | |
| request_forgery_tests.rs:37:51:37:58 | user_url | request_forgery_tests.rs:37:50:37:58 | &user_url [&ref] | provenance | |
+models
+| 1 | Sink: reqwest::get; Argument[0]; request-url |
+| 2 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint |
+| 3 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value |
nodes
| request_forgery_tests.rs:4:5:4:14 | res | semmle.label | res |
| request_forgery_tests.rs:4:5:4:14 | res | semmle.label | res |
diff --git a/rust/ql/test/query-tests/security/CWE-918/RequestForgery.qlref b/rust/ql/test/query-tests/security/CWE-918/RequestForgery.qlref
index f5c9df78ac2..6ed39ea71f5 100644
--- a/rust/ql/test/query-tests/security/CWE-918/RequestForgery.qlref
+++ b/rust/ql/test/query-tests/security/CWE-918/RequestForgery.qlref
@@ -1,2 +1,4 @@
query: queries/security/CWE-918/RequestForgery.ql
-postprocess: utils/test/InlineExpectationsTestQuery.ql
+postprocess:
+ - utils/test/PrettyPrintModels.ql
+ - utils/test/InlineExpectationsTestQuery.ql
diff --git a/shared/concepts/CHANGELOG.md b/shared/concepts/CHANGELOG.md
index 88abeb21fd8..bac19b9b77f 100644
--- a/shared/concepts/CHANGELOG.md
+++ b/shared/concepts/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.0.5
+
+No user-facing changes.
+
## 0.0.4
No user-facing changes.
diff --git a/shared/concepts/change-notes/released/0.0.5.md b/shared/concepts/change-notes/released/0.0.5.md
new file mode 100644
index 00000000000..766ec2723b5
--- /dev/null
+++ b/shared/concepts/change-notes/released/0.0.5.md
@@ -0,0 +1,3 @@
+## 0.0.5
+
+No user-facing changes.
diff --git a/shared/concepts/codeql-pack.release.yml b/shared/concepts/codeql-pack.release.yml
index ec411a674bc..bb45a1ab018 100644
--- a/shared/concepts/codeql-pack.release.yml
+++ b/shared/concepts/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 0.0.4
+lastReleaseVersion: 0.0.5
diff --git a/shared/concepts/qlpack.yml b/shared/concepts/qlpack.yml
index 151939d739a..8b0fc6c6f7a 100644
--- a/shared/concepts/qlpack.yml
+++ b/shared/concepts/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/concepts
-version: 0.0.5-dev
+version: 0.0.6-dev
groups: shared
library: true
dependencies:
diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md
index 7e3580fae37..9b9c04fd8d8 100644
--- a/shared/controlflow/CHANGELOG.md
+++ b/shared/controlflow/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.0.15
+
+No user-facing changes.
+
## 2.0.14
No user-facing changes.
diff --git a/shared/controlflow/change-notes/released/2.0.15.md b/shared/controlflow/change-notes/released/2.0.15.md
new file mode 100644
index 00000000000..3b59db4224a
--- /dev/null
+++ b/shared/controlflow/change-notes/released/2.0.15.md
@@ -0,0 +1,3 @@
+## 2.0.15
+
+No user-facing changes.
diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml
index 23aa0864b29..0377ae283a3 100644
--- a/shared/controlflow/codeql-pack.release.yml
+++ b/shared/controlflow/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 2.0.14
+lastReleaseVersion: 2.0.15
diff --git a/shared/controlflow/codeql/controlflow/ControlFlow.qll b/shared/controlflow/codeql/controlflow/ControlFlow.qll
new file mode 100644
index 00000000000..bfb878e6756
--- /dev/null
+++ b/shared/controlflow/codeql/controlflow/ControlFlow.qll
@@ -0,0 +1,929 @@
+/**
+ * Provides an implementation of local (intraprocedural) control flow reachability.
+ */
+overlay[local?]
+module;
+
+private import codeql.controlflow.BasicBlock as BB
+private import codeql.controlflow.SuccessorType
+private import codeql.util.Boolean
+private import codeql.util.Location
+private import codeql.util.Option
+
+private signature class TypSig;
+
+signature module InputSig {
+ AstNode getEnclosingAstNode(ControlFlowNode node);
+
+ class AstNode {
+ /** Gets a textual representation of this AST node. */
+ string toString();
+
+ /** Gets the location of this AST node. */
+ Location getLocation();
+ }
+
+ AstNode getParent(AstNode node);
+
+ class Expr extends AstNode;
+
+ class FinallyBlock extends AstNode;
+
+ /** A variable that can be SSA converted. */
+ class SourceVariable {
+ /** Gets a textual representation of this variable. */
+ string toString();
+
+ /** Gets the location of this variable. */
+ Location getLocation();
+ }
+
+ class SsaDefinition {
+ SourceVariable getSourceVariable();
+
+ predicate definesAt(SourceVariable v, BasicBlock bb, int i);
+
+ /** Gets the basic block to which this SSA definition belongs. */
+ BasicBlock getBasicBlock();
+
+ /** Gets a textual representation of this SSA definition. */
+ string toString();
+
+ /** Gets the location of this SSA definition. */
+ Location getLocation();
+
+ /** Holds if this SSA variable is live at the end of `b`. */
+ predicate isLiveAtEndOfBlock(BasicBlock b);
+ }
+
+ class SsaWriteDefinition extends SsaDefinition {
+ Expr getDefinition();
+ }
+
+ class SsaPhiNode extends SsaDefinition {
+ /** Holds if `inp` is an input to the phi node along the edge originating in `bb`. */
+ predicate hasInputFromBlock(SsaDefinition inp, BasicBlock bb);
+
+ SsaDefinition getAPhiInput();
+ }
+
+ class SsaUncertainDefinition extends SsaDefinition {
+ /**
+ * Gets the immediately preceding definition. Since this update is uncertain,
+ * the value from the preceding definition might still be valid.
+ */
+ SsaDefinition getPriorDefinition();
+ }
+
+ /** An abstract value that a `Guard` may evaluate to. */
+ class GuardValue {
+ /** Gets a textual representation of this value. */
+ string toString();
+
+ /**
+ * Gets the dual value. Examples of dual values include:
+ * - null vs. not null
+ * - true vs. false
+ * - evaluating to a specific value vs. evaluating to any other value
+ * - throwing an exception vs. not throwing an exception
+ */
+ GuardValue getDualValue();
+
+ /** Gets the integer that this value represents, if any. */
+ int asIntValue();
+
+ /**
+ * Holds if this value represents an integer range.
+ *
+ * If `upper = true` the range is `(-infinity, bound]`.
+ * If `upper = false` the range is `[bound, infinity)`.
+ */
+ predicate isIntRange(int bound, boolean upper);
+ }
+
+ /**
+ * Holds if `def` evaluating to `v` controls the control-flow branch
+ * edge from `bb1` to `bb2`. That is, following the edge from `bb1` to
+ * `bb2` implies that `def` evaluated to `v`.
+ */
+ predicate ssaControlsBranchEdge(SsaDefinition def, BasicBlock bb1, BasicBlock bb2, GuardValue v);
+
+ /**
+ * Holds if `def` evaluating to `v` controls the basic block `bb`.
+ * That is, execution of `bb` implies that `def` evaluated to `v`.
+ */
+ predicate ssaControls(SsaDefinition def, BasicBlock bb, GuardValue v);
+
+ predicate exprHasValue(Expr e, GuardValue gv);
+
+ bindingset[gv1, gv2]
+ predicate disjointValues(GuardValue gv1, GuardValue gv2);
+}
+
+module Make<
+ LocationSig Location, BB::CfgSig Cfg,
+ InputSig Input>
+{
+ private module Cfg_ = Cfg;
+
+ private import Cfg_
+ private import Input
+
+ final private class FinalAstNode = Input::AstNode;
+
+ class AstNode extends FinalAstNode {
+ AstNode getParent() { result = getParent(this) }
+ }
+
+ /**
+ * Holds if `node` is enclosed by `finally`. In case of nested finally
+ * blocks, this predicate only holds for the innermost block enclosing
+ * `node`.
+ */
+ private predicate hasEnclosingFinally(AstNode node, FinallyBlock finally) {
+ node = finally
+ or
+ not node instanceof FinallyBlock and
+ hasEnclosingFinally(node.getParent(), finally)
+ }
+
+ /**
+ * Holds if `inner` is nested within `outer`.
+ */
+ private predicate nestedFinally(FinallyBlock inner, FinallyBlock outer) {
+ hasEnclosingFinally(inner.(AstNode).getParent(), outer)
+ }
+
+ /** Gets the nesting depth of `finally` in terms of number of finally blocks. */
+ private int finallyNestLevel(FinallyBlock finally) {
+ not nestedFinally(finally, _) and result = 1
+ or
+ exists(FinallyBlock outer |
+ nestedFinally(finally, outer) and result = 1 + finallyNestLevel(outer)
+ )
+ }
+
+ private int maxFinallyNesting() { result = max(finallyNestLevel(_)) }
+
+ private newtype TFinallyStack =
+ TNil() or
+ TCons(Boolean abrupt, FinallyStack tail) { tail.length() < maxFinallyNesting() }
+
+ /**
+ * A stack of split values to track whether entered finally blocks have
+ * waiting completions.
+ */
+ private class FinallyStack extends TFinallyStack {
+ string toString() {
+ result = "" and this = TNil()
+ or
+ exists(boolean abrupt, FinallyStack tail |
+ result = abrupt + ";" + tail.toString() and this = TCons(abrupt, tail)
+ )
+ }
+
+ /** Gets the length of this stack. */
+ int length() {
+ result = 0 and this = TNil()
+ or
+ exists(FinallyStack tail | result = 1 + tail.length() and this = TCons(_, tail))
+ }
+
+ /**
+ * Gets the stack resulting from pushing information about entering a
+ * finally block through a specific edge onto this stack.
+ *
+ * The `abrupt` value indicates whether the edge has an `AbruptSuccessor`
+ * or not.
+ */
+ FinallyStack enter(boolean abrupt) { result = TCons(abrupt, this) }
+
+ /**
+ * Gets the stack resulting from popping a value, if any, consistent with
+ * leaving a finally block through a specific edge.
+ *
+ * The `abrupt` value indicates whether the edge has an `AbruptSuccessor`
+ * or not.
+ */
+ FinallyStack leave(Boolean abrupt) {
+ this = TNil() and result = TNil() and exists(abrupt)
+ or
+ abrupt = false and this = TCons(false, result)
+ or
+ abrupt = true and this = TCons(_, result)
+ }
+ }
+
+ private ControlFlowNode basicBlockEndPoint() {
+ result = any(BasicBlock bb).getNode(0) or
+ result = any(BasicBlock bb).getLastNode()
+ }
+
+ private predicate inFinally(AstNode node, FinallyBlock finally) {
+ node = getEnclosingAstNode(basicBlockEndPoint()) and
+ hasEnclosingFinally(node, finally)
+ or
+ exists(FinallyBlock inner | nestedFinally(inner, finally) and inFinally(node, inner))
+ }
+
+ private predicate irrelevantFinally(FinallyBlock finally) {
+ exists(BasicBlock bb, AstNode n1, AstNode n2 |
+ n1 = getEnclosingAstNode(bb.getNode(0)) and
+ n2 = getEnclosingAstNode(bb.getLastNode())
+ |
+ inFinally(n1, finally) and not inFinally(n2, finally)
+ or
+ not inFinally(n1, finally) and inFinally(n2, finally)
+ )
+ }
+
+ private predicate entersFinally(
+ BasicBlock bb1, BasicBlock bb2, boolean abrupt, FinallyBlock finally
+ ) {
+ exists(AstNode n1, AstNode n2, SuccessorType t |
+ not irrelevantFinally(finally) and
+ bb1.getASuccessor(t) = bb2 and
+ n1 = getEnclosingAstNode(bb1.getLastNode()) and
+ n2 = getEnclosingAstNode(bb2.getNode(0)) and
+ not inFinally(n1, finally) and
+ inFinally(n2, finally) and
+ if t instanceof AbruptSuccessor then abrupt = true else abrupt = false
+ )
+ }
+
+ private predicate leavesFinally(
+ BasicBlock bb1, BasicBlock bb2, boolean abrupt, FinallyBlock finally
+ ) {
+ exists(AstNode n1, AstNode n2, SuccessorType t |
+ not irrelevantFinally(finally) and
+ bb1.getASuccessor(t) = bb2 and
+ n1 = getEnclosingAstNode(bb1.getLastNode()) and
+ n2 = getEnclosingAstNode(bb2.getNode(0)) and
+ inFinally(n1, finally) and
+ not inFinally(n2, finally) and
+ if t instanceof AbruptSuccessor then abrupt = true else abrupt = false
+ )
+ }
+
+ /** Holds if `gv1` is a strict subset of `gv2`. */
+ bindingset[gv1, gv2]
+ private predicate smaller(GuardValue gv1, GuardValue gv2) {
+ disjointValues(gv1, gv2.getDualValue()) and
+ gv1 != gv2
+ }
+
+ /**
+ * Holds if the value of `def` is `gv`.
+ *
+ * If multiple values apply, then we only include the most precise ones.
+ */
+ private predicate ssaHasValue(SsaWriteDefinition def, GuardValue gv) {
+ exists(Expr e |
+ def.getDefinition() = e and
+ exprHasValue(e, gv) and
+ not exists(GuardValue gv0 | exprHasValue(e, gv0) and smaller(gv0, gv))
+ )
+ }
+
+ pragma[nomagic]
+ private predicate ssaLiveAtEndOfBlock(SourceVariable var, SsaDefinition def, BasicBlock bb) {
+ def.getSourceVariable() = var and
+ def.isLiveAtEndOfBlock(bb)
+ }
+
+ pragma[nomagic]
+ private predicate initSsaValue0(SourceVariable var, BasicBlock bb, SsaDefinition t, GuardValue val) {
+ ssaLiveAtEndOfBlock(var, t, bb) and
+ (
+ ssaControls(t, bb, val)
+ or
+ ssaHasValue(t, val)
+ )
+ }
+
+ /**
+ * Holds if the value of `t` in `bb` is `val` and that `t` is live at the
+ * end of `bb`.
+ *
+ * If multiple values apply, then we only include the most precise ones.
+ *
+ * The underlying variable of `t` is `var`.
+ */
+ private predicate initSsaValue(SourceVariable var, BasicBlock bb, SsaDefinition t, GuardValue val) {
+ initSsaValue0(var, bb, t, val) and
+ not exists(GuardValue val0 | initSsaValue0(var, bb, t, val0) and smaller(val0, val))
+ }
+
+ private predicate possibleValue(SourceVariable var, GuardValue gv) {
+ exists(SsaDefinition def | def.getSourceVariable() = var |
+ ssaHasValue(def, gv)
+ or
+ ssaControlsBranchEdge(def, _, _, gv)
+ )
+ }
+
+ private predicate possibleRangeBound(SourceVariable var, int bound, boolean upper) {
+ exists(GuardValue gv | possibleValue(var, gv) and gv.isIntRange(bound, upper))
+ }
+
+ private predicate possibleClosedRange(SourceVariable var, int low, int high) {
+ possibleRangeBound(var, low, false) and
+ possibleRangeBound(var, high, true) and
+ low < high
+ }
+
+ private newtype TGuardValueExt =
+ AnyValue() or
+ BaseValue(GuardValue gv) { possibleValue(_, gv) } or
+ IntRange(int low, int high) { possibleClosedRange(_, low, high) }
+
+ private class GuardValueExt extends TGuardValueExt {
+ string toString() {
+ result = "Any" and this = AnyValue()
+ or
+ result = this.asBase().toString()
+ or
+ exists(int low, int high |
+ this = IntRange(low, high) and result = "[" + low + ", " + high + "]"
+ )
+ }
+
+ GuardValue asBase() { this = BaseValue(result) }
+ }
+
+ private class TGuardValueOrAny = AnyValue or BaseValue;
+
+ private class GuardValueOrAny extends GuardValueExt, TGuardValueOrAny { }
+
+ private GuardValueExt mkRange(int low, int high) {
+ result = IntRange(low, high)
+ or
+ low = high and
+ result.asBase().asIntValue() = low
+ }
+
+ private GuardValueExt intersectBase1(GuardValue gv1, GuardValue gv2) {
+ exists(SourceVariable var |
+ possibleValue(var, gv1) and
+ possibleValue(var, gv2)
+ |
+ smaller(gv1, gv2) and result.asBase() = gv1
+ or
+ exists(int low, int high |
+ gv1.isIntRange(low, false) and
+ gv2.isIntRange(high, true) and
+ result = mkRange(low, high)
+ )
+ or
+ exists(int bound, boolean upper, int d |
+ gv1.isIntRange(bound, upper) and
+ gv2.getDualValue().asIntValue() = bound and
+ result.asBase().isIntRange(bound + d, upper)
+ |
+ upper = true and d = -1
+ or
+ upper = false and d = 1
+ )
+ )
+ }
+
+ private GuardValueExt intersectBase2(GuardValueExt v1, GuardValue v2) {
+ result = intersectBase1(v1.asBase(), v2)
+ or
+ result = intersectBase1(v2, v1.asBase())
+ }
+
+ bindingset[v1, v2]
+ pragma[inline_late]
+ private GuardValueExt intersectRange(GuardValueExt v1, GuardValue v2) {
+ exists(int low, int high | v1 = IntRange(low, high) |
+ exists(int bound, boolean upper | v2.isIntRange(bound, upper) |
+ upper = true and result = mkRange(low, high.minimum(bound))
+ or
+ upper = false and result = mkRange(low.maximum(bound), high)
+ )
+ or
+ exists(int k |
+ v2.asIntValue() = k and
+ result.asBase() = v2 and
+ low <= k and
+ k <= high
+ )
+ or
+ not v2.isIntRange(_, _) and not exists(v2.asIntValue()) and result = v1
+ )
+ }
+
+ bindingset[v1, v2]
+ pragma[inline_late]
+ private GuardValueExt intersect(GuardValueExt v1, GuardValue v2) {
+ v1 = AnyValue() and result.asBase() = v2
+ or
+ result = intersectBase2(v1, v2)
+ or
+ result = v1 and
+ v1 instanceof BaseValue and
+ not exists(intersectBase2(v1, v2))
+ or
+ result = intersectRange(v1, v2)
+ }
+
+ bindingset[v1, gv2]
+ private predicate disjointValuesExt(GuardValueExt v1, GuardValue gv2) {
+ disjointValues(v1.asBase(), gv2)
+ or
+ exists(int low, int high | v1 = IntRange(low, high) |
+ gv2.asIntValue() < low
+ or
+ high < gv2.asIntValue()
+ or
+ exists(int bound, boolean upper | gv2.isIntRange(bound, upper) |
+ upper = true and bound < low
+ or
+ upper = false and high < bound
+ )
+ )
+ }
+
+ /** An input configuration for control flow reachability. */
+ signature module ConfigSig {
+ /**
+ * Holds if the value of `def` at `node` is a source for the reachability
+ * computation.
+ */
+ predicate source(ControlFlowNode node, SsaDefinition def);
+
+ /**
+ * Holds if the value of `def` at `node` is a sink for the reachability
+ * computation.
+ */
+ predicate sink(ControlFlowNode node, SsaDefinition def);
+
+ /**
+ * Holds if the value of `gv` is a barrier for the reachability computation.
+ * That is, paths where the tracked variable can be inferred to have the
+ * value of `gv` are excluded from the reachability analysis.
+ */
+ default predicate barrierValue(GuardValue gv) { none() }
+
+ /**
+ * Holds if the edge from `bb1` to `bb2` should be excluded from the
+ * reachability analysis.
+ */
+ default predicate barrierEdge(BasicBlock bb1, BasicBlock bb2) { none() }
+
+ /**
+ * Holds if flow through uncertain SSA updates should be included.
+ */
+ default predicate uncertainFlow() { any() }
+ }
+
+ /**
+ * Constructs a control flow reachability computation.
+ */
+ module Flow {
+ private predicate ssaRelevantAtEndOfBlock(SsaDefinition def, BasicBlock bb) {
+ def.isLiveAtEndOfBlock(bb)
+ or
+ def.getBasicBlock().strictlyPostDominates(bb)
+ }
+
+ pragma[nomagic]
+ private predicate isSource(
+ ControlFlowNode src, SsaDefinition srcDef, SourceVariable var, BasicBlock bb, int i
+ ) {
+ Config::source(src, srcDef) and
+ bb.getNode(i) = src and
+ srcDef.getSourceVariable() = var
+ }
+
+ pragma[nomagic]
+ private predicate isSink(
+ ControlFlowNode sink, SsaDefinition sinkDef, SourceVariable var, BasicBlock bb, int i
+ ) {
+ Config::sink(sink, sinkDef) and
+ bb.getNode(i) = sink and
+ sinkDef.getSourceVariable() = var
+ }
+
+ private predicate uncertainStep(SsaDefinition def1, SsaDefinition def2) {
+ def2.(SsaUncertainDefinition).getPriorDefinition() = def1 and
+ Config::uncertainFlow()
+ }
+
+ private predicate intraBlockStep(SsaDefinition def1, SsaDefinition def2) {
+ exists(BasicBlock bb |
+ uncertainStep(def1, def2) and
+ bb = def2.getBasicBlock() and
+ isSource(_, _, _, bb, _) and
+ isSink(_, _, _, bb, _)
+ )
+ }
+
+ private predicate intraBlockFlowAll(
+ ControlFlowNode src, SsaDefinition srcDef, int i, ControlFlowNode sink, SsaDefinition sinkDef,
+ int j
+ ) {
+ exists(SourceVariable var, BasicBlock bb |
+ isSource(src, srcDef, var, bb, i) and
+ isSink(sink, sinkDef, var, bb, j) and
+ i <= j and
+ intraBlockStep*(srcDef, sinkDef)
+ )
+ }
+
+ private predicate intraBlockFlow(
+ ControlFlowNode src, SsaDefinition srcDef, ControlFlowNode sink, SsaDefinition sinkDef
+ ) {
+ exists(int i, int j |
+ intraBlockFlowAll(src, srcDef, i, sink, sinkDef, j) and
+ not exists(int k |
+ intraBlockFlowAll(src, srcDef, i, _, _, k) and
+ k < j
+ )
+ )
+ }
+
+ private predicate sourceBlock(SsaDefinition def, BasicBlock bb, ControlFlowNode src) {
+ isSource(src, def, _, bb, _) and
+ not intraBlockFlow(src, def, _, _)
+ }
+
+ private predicate sinkBlock(SsaDefinition def, BasicBlock bb, ControlFlowNode sink) {
+ sink =
+ min(ControlFlowNode n, int i | bb.getNode(i) = n and Config::sink(n, def) | n order by i)
+ }
+
+ /**
+ * Holds if the edge from `bb1` to `bb2` implies that `def` has a value
+ * that is considered a barrier.
+ */
+ private predicate ssaValueBarrierEdge(SsaDefinition def, BasicBlock bb1, BasicBlock bb2) {
+ exists(GuardValue v |
+ ssaControlsBranchEdge(def, bb1, bb2, v) and
+ Config::barrierValue(v)
+ )
+ }
+
+ /** Holds if `def1` in `bb1` may step to `def2` in `bb2`. */
+ private predicate step(SsaDefinition def1, BasicBlock bb1, SsaDefinition def2, BasicBlock bb2) {
+ not sinkBlock(def1, bb1, _) and
+ not Config::barrierEdge(bb1, bb2) and
+ not ssaValueBarrierEdge(def1, bb1, bb2) and
+ (
+ def2.(SsaPhiNode).hasInputFromBlock(def1, bb1) and bb2 = def2.getBasicBlock()
+ or
+ exists(SourceVariable v |
+ ssaRelevantAtEndOfBlock(def1, bb1) and
+ bb1.getASuccessor() = bb2 and
+ v = def1.getSourceVariable() and
+ not exists(SsaPhiNode phi | phi.getBasicBlock() = bb2 and phi.getSourceVariable() = v) and
+ def1 = def2
+ )
+ or
+ uncertainStep(def1, def2) and
+ bb2 = def2.getBasicBlock() and
+ bb1 = bb2
+ )
+ }
+
+ bindingset[bb1, bb2, fs1]
+ pragma[inline_late]
+ private predicate stepFinallyStack(
+ BasicBlock bb1, BasicBlock bb2, FinallyStack fs1, FinallyStack fs2
+ ) {
+ exists(boolean abrupt | entersFinally(bb1, bb2, abrupt, _) and fs2 = fs1.enter(abrupt)) and
+ not leavesFinally(bb1, bb2, _, _)
+ or
+ exists(boolean abrupt | leavesFinally(bb1, bb2, abrupt, _) and fs2 = fs1.leave(abrupt)) and
+ not entersFinally(bb1, bb2, _, _)
+ or
+ exists(boolean abrupt |
+ leavesFinally(bb1, bb2, abrupt, _) and
+ entersFinally(bb1, bb2, abrupt, _) and
+ fs2 = fs1.leave(abrupt).enter(abrupt)
+ )
+ or
+ not entersFinally(bb1, bb2, _, _) and not leavesFinally(bb1, bb2, _, _) and fs2 = fs1
+ }
+
+ /**
+ * Holds if the source `srcDef` in `srcBb` may reach `def` in `bb`. If the
+ * path has entered one or more finally blocks then `fs` tracks the
+ * `SuccessorType`s of the edges entering those blocks.
+ */
+ private predicate sourceReachesBlock(
+ SsaDefinition srcDef, BasicBlock srcBb, SsaDefinition def, BasicBlock bb, FinallyStack fs
+ ) {
+ sourceBlock(srcDef, srcBb, _) and
+ def = srcDef and
+ bb = srcBb and
+ fs = TNil()
+ or
+ exists(SsaDefinition middef, BasicBlock midbb, FinallyStack midfs |
+ sourceReachesBlock(srcDef, srcBb, middef, midbb, midfs) and
+ step(middef, midbb, def, bb) and
+ stepFinallyStack(midbb, bb, midfs, fs)
+ )
+ }
+
+ /**
+ * Holds if `def` in `bb` is reachable from a source and may reach a sink.
+ */
+ private predicate blockReachesSink(SsaDefinition def, BasicBlock bb) {
+ sourceReachesBlock(_, _, def, bb, _) and
+ (
+ sinkBlock(def, bb, _)
+ or
+ exists(SsaDefinition middef, BasicBlock midbb |
+ step(def, bb, middef, midbb) and
+ blockReachesSink(middef, midbb)
+ )
+ )
+ }
+
+ private predicate escapeCandidate(SsaDefinition def, BasicBlock bb) {
+ sourceBlock(def, bb, _)
+ or
+ exists(SsaDefinition middef, BasicBlock midbb |
+ blockReachesSink(middef, midbb) and
+ step(middef, midbb, def, bb)
+ )
+ }
+
+ /**
+ * Holds if the source `srcDef` in `srcBb` may reach `escDef` in `escBb` and from
+ * there cannot reach a sink.
+ */
+ private predicate sourceEscapesSink(
+ SsaDefinition srcDef, BasicBlock srcBb, SsaDefinition escDef, BasicBlock escBb
+ ) {
+ sourceReachesBlock(srcDef, srcBb, escDef, escBb, _) and
+ escapeCandidate(escDef, escBb) and
+ not blockReachesSink(escDef, escBb)
+ }
+
+ /** Holds if `bb` is a relevant block for computing reachability of `src`. */
+ private predicate pathBlock(SourceVariable src, BasicBlock bb) {
+ exists(SsaDefinition def | def.getSourceVariable() = src |
+ blockReachesSink(def, bb)
+ or
+ escapeCandidate(def, bb)
+ )
+ }
+
+ /**
+ * Holds if `bb1` to `bb2` is a relevant edge for computing reachability
+ * of `src`.
+ */
+ private predicate pathEdge(SourceVariable src, BasicBlock bb1, BasicBlock bb2) {
+ step(_, bb1, _, bb2) and
+ pathBlock(pragma[only_bind_into](src), bb1) and
+ pathBlock(pragma[only_bind_into](src), bb2) and
+ bb1 != bb2
+ }
+
+ /**
+ * Holds if the edge from `bb1` to `bb2` implies that `def` has the value
+ * `gv` and that the edge is relevant for computing reachability of `src`.
+ *
+ * If multiple values may be implied by this edge, then we only include the
+ * most precise ones.
+ *
+ * The underlying variable of `t` is `var`.
+ */
+ private predicate ssaControlsPathEdge(
+ SourceVariable src, SsaDefinition t, SourceVariable var, GuardValue gv, BasicBlock bb1,
+ BasicBlock bb2
+ ) {
+ ssaControlsBranchEdge(t, bb1, bb2, gv) and
+ not exists(GuardValue gv0 | ssaControlsBranchEdge(t, bb1, bb2, gv0) and smaller(gv0, gv)) and
+ pathEdge(src, bb1, bb2) and
+ t.getSourceVariable() = var
+ }
+
+ /**
+ * Holds if the reachability path for `src` may go through a loop with
+ * entry point `entry`.
+ */
+ pragma[nomagic]
+ private predicate loopEntryBlock(SourceVariable src, BasicBlock entry) {
+ exists(BasicBlock pred | pathEdge(src, pred, entry) and entry.strictlyDominates(pred))
+ }
+
+ /**
+ * Holds if precision may be improved by splitting control flow on the
+ * value of `var` during the reachability computation of `src`.
+ */
+ private predicate relevantSplit(SourceVariable src, SourceVariable var) {
+ // `var` may be a relevant split if we encounter 2+ conditional edges
+ // that imply information about `var`.
+ 2 <= strictcount(BasicBlock bb1 | ssaControlsPathEdge(src, _, var, _, bb1, _))
+ or
+ // Or if we encounter a conditional edge that imply a value that's
+ // incompatible with an initial or later assigned value.
+ exists(GuardValue gv1, GuardValue gv2, BasicBlock bb |
+ ssaControlsPathEdge(src, _, var, gv1, _, _) and
+ initSsaValue(var, bb, _, gv2) and
+ disjointValues(gv1, gv2) and
+ pathBlock(src, bb)
+ )
+ or
+ // Or if we encounter a conditional edge in a loop that imply a value for
+ // `var` that may be unchanged from one iteration to the next.
+ exists(SsaDefinition def, BasicBlock bb1, BasicBlock bb2, BasicBlock loopEntry |
+ ssaControlsPathEdge(src, def, var, _, bb1, bb2) and
+ loopEntryBlock(src, loopEntry) and
+ loopEntry.strictlyDominates(bb1) and
+ bb2.getASuccessor*() = loopEntry
+ |
+ def.getBasicBlock().dominates(loopEntry)
+ or
+ exists(SsaPhiNode phi |
+ phi.definesAt(var, loopEntry, _) and
+ phi.getAPhiInput+() = def and
+ def.(SsaPhiNode).getAPhiInput*() = phi
+ )
+ )
+ }
+
+ private module SsaDefOption = Option;
+
+ private class SsaDefOption = SsaDefOption::Option;
+
+ private predicate lastDefInBlock(SourceVariable var, SsaDefinition def, BasicBlock bb) {
+ def = max(SsaDefinition d, int i | d.definesAt(var, bb, i) | d order by i)
+ }
+
+ /**
+ * Holds if `bb1` to `bb2` is a relevant edge for computing reachability of
+ * `src`, and `var` is a relevant splitting variable that gets (re-)defined
+ * in `bb2` by `t`, which is not a phi node.
+ *
+ * `val` is the best known value for `t` in `bb2`.
+ */
+ private predicate stepSsaValueRedef(
+ SourceVariable src, BasicBlock bb1, BasicBlock bb2, SourceVariable var, SsaDefinition t,
+ GuardValueOrAny val
+ ) {
+ pathEdge(src, bb1, bb2) and
+ relevantSplit(src, var) and
+ lastDefInBlock(var, t, bb2) and
+ not t instanceof SsaPhiNode and
+ (
+ ssaHasValue(t, val.asBase())
+ or
+ not ssaHasValue(t, _) and val = AnyValue()
+ )
+ }
+
+ /**
+ * Holds if `bb1` to `bb2` is a relevant edge for computing reachability of
+ * `src`, and `var` is a relevant splitting variable that has a phi node,
+ * `t2`, in `bb2` taking input from `t1` along this edge. Furthermore,
+ * there is no further redefinition of `var` in `bb2`.
+ *
+ * `val` is the best value for `t1`/`t2` implied by taking this edge.
+ */
+ private predicate stepSsaValuePhi(
+ SourceVariable src, BasicBlock bb1, BasicBlock bb2, SourceVariable var, SsaDefinition t1,
+ SsaDefinition t2, GuardValueOrAny val
+ ) {
+ pathEdge(src, bb1, bb2) and
+ relevantSplit(src, var) and
+ lastDefInBlock(var, t2, bb2) and
+ t2.(SsaPhiNode).hasInputFromBlock(t1, bb1) and
+ (
+ ssaControlsPathEdge(src, t1, _, val.asBase(), bb1, bb2)
+ or
+ not ssaControlsPathEdge(src, t1, _, _, bb1, bb2) and
+ val = AnyValue()
+ )
+ }
+
+ /**
+ * Holds if `bb1` to `bb2` is a relevant edge for computing reachability of
+ * `src`, and `var` is a relevant splitting variable that has no
+ * redefinition along this edge nor in `bb2`.
+ *
+ * Additionally, this edge implies that the SSA definition `t` of `var` has
+ * value `val`.
+ */
+ private predicate stepSsaValueNoRedef(
+ SourceVariable src, BasicBlock bb1, BasicBlock bb2, SourceVariable var, SsaDefinition t,
+ GuardValue val
+ ) {
+ pathEdge(src, bb1, bb2) and
+ relevantSplit(src, var) and
+ not lastDefInBlock(var, _, bb2) and
+ ssaControlsPathEdge(src, t, var, val, bb1, bb2)
+ }
+
+ /**
+ * Holds if the source `srcDef` in `srcBb` may reach `def` in `bb`. The
+ * taken path takes splitting based on the value of `var` into account.
+ * The pair `(tracked, val)` is the current SSA definition and known value
+ * for `var` in `bb`.
+ */
+ private predicate sourceReachesBlockWithTrackedVar(
+ SsaDefinition srcDef, BasicBlock srcBb, SsaDefinition def, BasicBlock bb, FinallyStack fs,
+ SsaDefOption tracked, GuardValueExt val, SourceVariable var
+ ) {
+ sourceBlock(srcDef, srcBb, _) and
+ def = srcDef and
+ bb = srcBb and
+ fs = TNil() and
+ relevantSplit(def.getSourceVariable(), var) and
+ (
+ // tracking variable is not yet live
+ not ssaLiveAtEndOfBlock(var, _, bb) and
+ tracked.isNone() and
+ val = AnyValue()
+ or
+ // tracking variable is live but without known value
+ ssaLiveAtEndOfBlock(var, tracked.asSome(), bb) and
+ not initSsaValue(var, bb, _, _) and
+ val = AnyValue()
+ or
+ // tracking variable has known value
+ initSsaValue(var, bb, tracked.asSome(), val.asBase())
+ )
+ or
+ exists(
+ SourceVariable src, SsaDefinition middef, BasicBlock midbb, FinallyStack midfs,
+ SsaDefOption tracked0, GuardValueExt val0
+ |
+ sourceReachesBlockWithTrackedVar(srcDef, srcBb, middef, midbb, midfs, tracked0, val0, var) and
+ src = srcDef.getSourceVariable() and
+ step(middef, midbb, def, bb) and
+ stepFinallyStack(midbb, bb, midfs, fs) and
+ pathBlock(src, bb) and
+ not exists(GuardValue gv |
+ ssaControlsPathEdge(src, tracked0.asSome(), _, gv, midbb, bb) and
+ disjointValuesExt(val0, gv)
+ )
+ |
+ // tracking variable is redefined
+ stepSsaValueRedef(src, midbb, bb, var, tracked.asSome(), val)
+ or
+ exists(GuardValueOrAny val1 |
+ // tracking variable has a phi node, and maybe value information from the edge
+ stepSsaValuePhi(src, midbb, bb, var, tracked0.asSome(), tracked.asSome(), val1)
+ |
+ val = val0 and val1 = AnyValue()
+ or
+ val = intersect(val0, val1.asBase())
+ )
+ or
+ exists(GuardValue val1 |
+ // tracking variable is unchanged, and has value information from the edge
+ stepSsaValueNoRedef(src, midbb, bb, var, tracked0.asSome(), val1) and
+ tracked = tracked0 and
+ val = intersect(val0, val1)
+ )
+ or
+ // tracking variable is unchanged, and has no value information from the edge
+ not lastDefInBlock(var, _, bb) and
+ not stepSsaValueNoRedef(src, midbb, bb, var, tracked0.asSome(), _) and
+ tracked = tracked0 and
+ val = val0
+ )
+ }
+
+ /**
+ * Holds if the source `srcDef` at `src` may reach the sink `sinkDef` at `sink`.
+ */
+ predicate flow(
+ ControlFlowNode src, SsaDefinition srcDef, ControlFlowNode sink, SsaDefinition sinkDef
+ ) {
+ intraBlockFlow(src, srcDef, sink, sinkDef)
+ or
+ exists(BasicBlock srcBb, BasicBlock sinkBb, SourceVariable srcVar |
+ sourceBlock(srcDef, srcBb, src) and
+ sourceReachesBlock(srcDef, srcBb, sinkDef, sinkBb, _) and
+ sinkBlock(sinkDef, sinkBb, sink) and
+ srcVar = srcDef.getSourceVariable() and
+ forall(SourceVariable t | relevantSplit(srcVar, t) |
+ sourceReachesBlockWithTrackedVar(srcDef, srcBb, sinkDef, sinkBb, _, _, _, t)
+ )
+ )
+ }
+
+ /**
+ * Holds if the source `srcDef` at `src` may escape, that is, there exists
+ * a path from `src` that circumvents all sinks to a point from which no
+ * sink is reachable.
+ */
+ predicate escapeFlow(ControlFlowNode src, SsaDefinition srcDef) {
+ not intraBlockFlow(src, srcDef, _, _) and
+ exists(BasicBlock srcBb, SsaDefinition escDef, BasicBlock escBb, SourceVariable srcVar |
+ sourceBlock(srcDef, srcBb, src) and
+ sourceEscapesSink(srcDef, srcBb, escDef, escBb) and
+ srcVar = srcDef.getSourceVariable() and
+ forall(SourceVariable t | relevantSplit(srcVar, t) |
+ sourceReachesBlockWithTrackedVar(srcDef, srcBb, escDef, escBb, _, _, _, t)
+ )
+ )
+ }
+ }
+}
diff --git a/shared/controlflow/codeql/controlflow/Guards.qll b/shared/controlflow/codeql/controlflow/Guards.qll
index 3fe63a7118c..0bbfb29e4e6 100644
--- a/shared/controlflow/codeql/controlflow/Guards.qll
+++ b/shared/controlflow/codeql/controlflow/Guards.qll
@@ -208,6 +208,12 @@ module Make<
private newtype TGuardValue =
TValue(TAbstractSingleValue val, Boolean isVal) or
+ TIntRange(int bound, Boolean upper) {
+ exists(ConstantExpr c | c.asIntegerValue() + [-1, 0, 1] = bound) and
+ // exclude edge cases to avoid overflow issues when computing duals
+ bound != 2147483647 and
+ bound != -2147483648
+ } or
TException(Boolean throws)
private class AbstractSingleValue extends TAbstractSingleValue {
@@ -238,6 +244,15 @@ module Make<
result = TValue(val, isVal.booleanNot())
)
or
+ exists(int bound, int d, boolean upper |
+ upper = true and d = 1
+ or
+ upper = false and d = -1
+ |
+ this = TIntRange(bound, pragma[only_bind_into](upper)) and
+ result = TIntRange(bound + d, pragma[only_bind_into](upper.booleanNot()))
+ )
+ or
exists(boolean throws |
this = TException(throws) and
result = TException(throws.booleanNot())
@@ -262,6 +277,14 @@ module Make<
/** Gets the constant that this value represents, if any. */
ConstantValue asConstantValue() { this = TValue(TValueConstant(result), true) }
+ /**
+ * Holds if this value represents an integer range.
+ *
+ * If `upper = true` the range is `(-infinity, bound]`.
+ * If `upper = false` the range is `[bound, infinity)`.
+ */
+ predicate isIntRange(int bound, boolean upper) { this = TIntRange(bound, upper) }
+
/** Holds if this value represents throwing an exception. */
predicate isThrowsException() { this = TException(true) }
@@ -275,6 +298,12 @@ module Make<
this = TValue(val, false) and result = "not " + val.toString()
)
or
+ exists(int bound |
+ this = TIntRange(bound, true) and result = "Upper bound " + bound.toString()
+ or
+ this = TIntRange(bound, false) and result = "Lower bound " + bound.toString()
+ )
+ or
exists(boolean throws | this = TException(throws) |
throws = true and result = "exception"
or
@@ -293,6 +322,24 @@ module Make<
b = TValue(b1, true) and
a1 != b1
)
+ or
+ exists(int upperbound, int lowerbound |
+ a = TIntRange(upperbound, true) and b = TIntRange(lowerbound, false)
+ or
+ b = TIntRange(upperbound, true) and a = TIntRange(lowerbound, false)
+ |
+ upperbound < lowerbound
+ )
+ or
+ exists(int bound, boolean upper, int k |
+ a = TIntRange(bound, upper) and b.asIntValue() = k
+ or
+ b = TIntRange(bound, upper) and a.asIntValue() = k
+ |
+ upper = true and bound < k
+ or
+ upper = false and bound > k
+ )
}
private predicate constantHasValue(ConstantExpr c, GuardValue v) {
@@ -681,38 +728,22 @@ module Make<
)
}
- /** Holds if `e` may take the value `k` */
- private predicate relevantInt(Expr e, int k) {
- e.(ConstantExpr).asIntegerValue() = k
- or
- relevantInt(any(Expr e1 | valueStep(e1, e)), k)
- or
- exists(SsaDefinition def |
- guardReadsSsaVar(e, def) and
- relevantInt(getAnUltimateDefinition(def, _).(SsaWriteDefinition).getDefinition(), k)
- )
- }
-
private predicate impliesStep1(Guard g1, GuardValue v1, Guard g2, GuardValue v2) {
baseImpliesStep(g1, v1, g2, v2)
or
- exists(SsaDefinition def, Expr e |
+ exists(SsaDefinition def, Expr e, BasicBlock bb1 |
// If `def = g2 ? v1 : ...` and all other assignments to `def` are different from
// `v1` then a guard proving `def == v1` ensures that `g2` evaluates to `v2`.
uniqueValue(def, e, v1) and
guardReadsSsaVar(g1, def) and
g2.directlyValueControls(e.getBasicBlock(), v2) and
- not g2.directlyValueControls(g1.getBasicBlock(), v2)
+ bb1 = g1.getBasicBlock() and
+ not g2.directlyValueControls(bb1, v2)
)
or
- exists(int k1, int k2, boolean upper |
- rangeGuard(g1, v1, g2, k1, upper) and
- relevantInt(g2, k2) and
- v2 = TValue(TValueInt(k2), false)
- |
- upper = true and k1 < k2 // g2 <= k1 < k2 ==> g2 != k2
- or
- upper = false and k1 > k2 // g2 >= k1 > k2 ==> g2 != k2
+ exists(int k, boolean upper |
+ rangeGuard(g1, v1, g2, k, upper) and
+ v2 = TIntRange(k, upper)
)
or
exists(boolean isNull |
@@ -744,6 +775,10 @@ module Make<
or
exprHasValue(e.(IdExpr).getEqualChildExpr(), v)
or
+ exists(ConditionalExpr cond | cond = e |
+ exprHasValue(cond.getThen(), v) and exprHasValue(cond.getElse(), v)
+ )
+ or
exists(SsaDefinition def, Guard g, GuardValue gv |
e = def.getARead() and
g.directlyValueControls(e.getBasicBlock(), gv) and
@@ -1213,5 +1248,16 @@ module Make<
this.valueControls(bb, any(GuardValue gv | gv.asBooleanValue() = branch))
}
}
+
+ private predicate exprHasValueAlias = exprHasValue/2;
+
+ private predicate disjointValuesAlias = disjointValues/2;
+
+ /** Provides utility predicates for working with `GuardValue`s. */
+ module InternalUtil {
+ predicate exprHasValue = exprHasValueAlias/2;
+
+ predicate disjointValues = disjointValuesAlias/2;
+ }
}
}
diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml
index e1647c3a2f4..56945c0709d 100644
--- a/shared/controlflow/qlpack.yml
+++ b/shared/controlflow/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/controlflow
-version: 2.0.15-dev
+version: 2.0.16-dev
groups: shared
library: true
dependencies:
diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md
index b5b86ffbccb..1a867888e89 100644
--- a/shared/dataflow/CHANGELOG.md
+++ b/shared/dataflow/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.0.15
+
+No user-facing changes.
+
## 2.0.14
No user-facing changes.
diff --git a/shared/dataflow/change-notes/released/2.0.15.md b/shared/dataflow/change-notes/released/2.0.15.md
new file mode 100644
index 00000000000..3b59db4224a
--- /dev/null
+++ b/shared/dataflow/change-notes/released/2.0.15.md
@@ -0,0 +1,3 @@
+## 2.0.15
+
+No user-facing changes.
diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml
index 23aa0864b29..0377ae283a3 100644
--- a/shared/dataflow/codeql-pack.release.yml
+++ b/shared/dataflow/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 2.0.14
+lastReleaseVersion: 2.0.15
diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImplConsistency.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImplConsistency.qll
index 83abd41f5e6..8f0d2cbdb77 100644
--- a/shared/dataflow/codeql/dataflow/internal/DataFlowImplConsistency.qll
+++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImplConsistency.qll
@@ -254,7 +254,10 @@ module MakeConsistency<
query predicate postWithInFlow(PostUpdateNode n, string msg) {
not clearsContent(n, _) and
- simpleLocalFlowStep(_, n, _) and
+ exists(Node pred |
+ simpleLocalFlowStep(pred, n, _) and
+ not pred instanceof PostUpdateNode
+ ) and
not Input::postWithInFlowExclude(n) and
msg = "PostUpdateNode should not be the target of local flow."
}
diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml
index 62a66a7e228..4c0a9bdfe8c 100644
--- a/shared/dataflow/qlpack.yml
+++ b/shared/dataflow/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/dataflow
-version: 2.0.15-dev
+version: 2.0.16-dev
groups: shared
library: true
dependencies:
diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md
index bd3e670038c..e6cf183a1d4 100644
--- a/shared/mad/CHANGELOG.md
+++ b/shared/mad/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.0.31
+
+No user-facing changes.
+
## 1.0.30
No user-facing changes.
diff --git a/shared/mad/change-notes/released/1.0.31.md b/shared/mad/change-notes/released/1.0.31.md
new file mode 100644
index 00000000000..b2642bbb5f8
--- /dev/null
+++ b/shared/mad/change-notes/released/1.0.31.md
@@ -0,0 +1,3 @@
+## 1.0.31
+
+No user-facing changes.
diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml
index f04640951de..f5bdc98ffc8 100644
--- a/shared/mad/codeql-pack.release.yml
+++ b/shared/mad/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 1.0.30
+lastReleaseVersion: 1.0.31
diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml
index 33968071a42..b6f4e8c2bc1 100644
--- a/shared/mad/qlpack.yml
+++ b/shared/mad/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/mad
-version: 1.0.31-dev
+version: 1.0.32-dev
groups: shared
library: true
dependencies:
diff --git a/shared/quantum/CHANGELOG.md b/shared/quantum/CHANGELOG.md
index fba2a870356..a59e560c415 100644
--- a/shared/quantum/CHANGELOG.md
+++ b/shared/quantum/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.0.9
+
+No user-facing changes.
+
## 0.0.8
No user-facing changes.
diff --git a/shared/quantum/change-notes/released/0.0.9.md b/shared/quantum/change-notes/released/0.0.9.md
new file mode 100644
index 00000000000..c9e17c6d6cf
--- /dev/null
+++ b/shared/quantum/change-notes/released/0.0.9.md
@@ -0,0 +1,3 @@
+## 0.0.9
+
+No user-facing changes.
diff --git a/shared/quantum/codeql-pack.release.yml b/shared/quantum/codeql-pack.release.yml
index 58fdc6b45de..ecdd64fbab8 100644
--- a/shared/quantum/codeql-pack.release.yml
+++ b/shared/quantum/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 0.0.8
+lastReleaseVersion: 0.0.9
diff --git a/shared/quantum/qlpack.yml b/shared/quantum/qlpack.yml
index 023d04f544d..3741ff55855 100644
--- a/shared/quantum/qlpack.yml
+++ b/shared/quantum/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/quantum
-version: 0.0.9-dev
+version: 0.0.10-dev
groups: shared
library: true
dependencies:
diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md
index e64dff3b1e6..10466480900 100644
--- a/shared/rangeanalysis/CHANGELOG.md
+++ b/shared/rangeanalysis/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.0.31
+
+No user-facing changes.
+
## 1.0.30
No user-facing changes.
diff --git a/shared/rangeanalysis/change-notes/released/1.0.31.md b/shared/rangeanalysis/change-notes/released/1.0.31.md
new file mode 100644
index 00000000000..b2642bbb5f8
--- /dev/null
+++ b/shared/rangeanalysis/change-notes/released/1.0.31.md
@@ -0,0 +1,3 @@
+## 1.0.31
+
+No user-facing changes.
diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml
index f04640951de..f5bdc98ffc8 100644
--- a/shared/rangeanalysis/codeql-pack.release.yml
+++ b/shared/rangeanalysis/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 1.0.30
+lastReleaseVersion: 1.0.31
diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml
index 5ee5c466a3d..e67c274bf51 100644
--- a/shared/rangeanalysis/qlpack.yml
+++ b/shared/rangeanalysis/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/rangeanalysis
-version: 1.0.31-dev
+version: 1.0.32-dev
groups: shared
library: true
dependencies:
diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md
index 11353af62b1..3b3fcb5a55f 100644
--- a/shared/regex/CHANGELOG.md
+++ b/shared/regex/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.0.31
+
+No user-facing changes.
+
## 1.0.30
No user-facing changes.
diff --git a/shared/regex/change-notes/released/1.0.31.md b/shared/regex/change-notes/released/1.0.31.md
new file mode 100644
index 00000000000..b2642bbb5f8
--- /dev/null
+++ b/shared/regex/change-notes/released/1.0.31.md
@@ -0,0 +1,3 @@
+## 1.0.31
+
+No user-facing changes.
diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml
index f04640951de..f5bdc98ffc8 100644
--- a/shared/regex/codeql-pack.release.yml
+++ b/shared/regex/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 1.0.30
+lastReleaseVersion: 1.0.31
diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml
index 30748219abb..5aebaf9bffb 100644
--- a/shared/regex/qlpack.yml
+++ b/shared/regex/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/regex
-version: 1.0.31-dev
+version: 1.0.32-dev
groups: shared
library: true
dependencies:
diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md
index 5a9cf1a7175..e7e17bf044b 100644
--- a/shared/ssa/CHANGELOG.md
+++ b/shared/ssa/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.0.7
+
+No user-facing changes.
+
## 2.0.6
No user-facing changes.
diff --git a/shared/ssa/change-notes/released/2.0.7.md b/shared/ssa/change-notes/released/2.0.7.md
new file mode 100644
index 00000000000..4eb1353458c
--- /dev/null
+++ b/shared/ssa/change-notes/released/2.0.7.md
@@ -0,0 +1,3 @@
+## 2.0.7
+
+No user-facing changes.
diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml
index fbbc03c7642..08d5e959449 100644
--- a/shared/ssa/codeql-pack.release.yml
+++ b/shared/ssa/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 2.0.6
+lastReleaseVersion: 2.0.7
diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml
index 1bb80db8eb8..8337226f574 100644
--- a/shared/ssa/qlpack.yml
+++ b/shared/ssa/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/ssa
-version: 2.0.7-dev
+version: 2.0.8-dev
groups: shared
library: true
dependencies:
diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md
index c30f8de8bc9..d5040623557 100644
--- a/shared/threat-models/CHANGELOG.md
+++ b/shared/threat-models/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.0.31
+
+No user-facing changes.
+
## 1.0.30
No user-facing changes.
diff --git a/shared/threat-models/change-notes/released/1.0.31.md b/shared/threat-models/change-notes/released/1.0.31.md
new file mode 100644
index 00000000000..b2642bbb5f8
--- /dev/null
+++ b/shared/threat-models/change-notes/released/1.0.31.md
@@ -0,0 +1,3 @@
+## 1.0.31
+
+No user-facing changes.
diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml
index f04640951de..f5bdc98ffc8 100644
--- a/shared/threat-models/codeql-pack.release.yml
+++ b/shared/threat-models/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 1.0.30
+lastReleaseVersion: 1.0.31
diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml
index 4295c7e7024..8f72fd8ad3f 100644
--- a/shared/threat-models/qlpack.yml
+++ b/shared/threat-models/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/threat-models
-version: 1.0.31-dev
+version: 1.0.32-dev
library: true
groups: shared
dataExtensions:
diff --git a/shared/tree-sitter-extractor/Cargo.toml b/shared/tree-sitter-extractor/Cargo.toml
index e47ef3577e2..8e60be7274f 100644
--- a/shared/tree-sitter-extractor/Cargo.toml
+++ b/shared/tree-sitter-extractor/Cargo.toml
@@ -10,14 +10,14 @@ flate2 = "1.1"
globset = "0.4"
tree-sitter = ">= 0.23.0"
tracing = "0.1"
-tracing-subscriber = { version = "0.3.19", features = ["env-filter"] }
-rayon = "1.10.0"
-regex = "1.11.1"
+tracing-subscriber = { version = "0.3.20", features = ["env-filter"] }
+rayon = "1.11.0"
+regex = "1.11.2"
encoding = "0.2"
lazy_static = "1.5.0"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
-chrono = { version = "0.4.41", features = ["serde"] }
+chrono = { version = "0.4.42", features = ["serde"] }
num_cpus = "1.17.0"
zstd = "0.13.3"
diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md
index 61441b61061..f4a80412ca8 100644
--- a/shared/tutorial/CHANGELOG.md
+++ b/shared/tutorial/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.0.31
+
+No user-facing changes.
+
## 1.0.30
No user-facing changes.
diff --git a/shared/tutorial/change-notes/released/1.0.31.md b/shared/tutorial/change-notes/released/1.0.31.md
new file mode 100644
index 00000000000..b2642bbb5f8
--- /dev/null
+++ b/shared/tutorial/change-notes/released/1.0.31.md
@@ -0,0 +1,3 @@
+## 1.0.31
+
+No user-facing changes.
diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml
index f04640951de..f5bdc98ffc8 100644
--- a/shared/tutorial/codeql-pack.release.yml
+++ b/shared/tutorial/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 1.0.30
+lastReleaseVersion: 1.0.31
diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml
index f640ccc3116..aabb0356b86 100644
--- a/shared/tutorial/qlpack.yml
+++ b/shared/tutorial/qlpack.yml
@@ -1,7 +1,7 @@
name: codeql/tutorial
description: Library for the CodeQL detective tutorials, helping new users learn to
write CodeQL queries.
-version: 1.0.31-dev
+version: 1.0.32-dev
groups: shared
library: true
warnOnImplicitThis: true
diff --git a/shared/typeflow/CHANGELOG.md b/shared/typeflow/CHANGELOG.md
index 94df766d756..bf429698022 100644
--- a/shared/typeflow/CHANGELOG.md
+++ b/shared/typeflow/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.0.31
+
+No user-facing changes.
+
## 1.0.30
No user-facing changes.
diff --git a/shared/typeflow/change-notes/released/1.0.31.md b/shared/typeflow/change-notes/released/1.0.31.md
new file mode 100644
index 00000000000..b2642bbb5f8
--- /dev/null
+++ b/shared/typeflow/change-notes/released/1.0.31.md
@@ -0,0 +1,3 @@
+## 1.0.31
+
+No user-facing changes.
diff --git a/shared/typeflow/codeql-pack.release.yml b/shared/typeflow/codeql-pack.release.yml
index f04640951de..f5bdc98ffc8 100644
--- a/shared/typeflow/codeql-pack.release.yml
+++ b/shared/typeflow/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 1.0.30
+lastReleaseVersion: 1.0.31
diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml
index f98b15e1540..98566858903 100644
--- a/shared/typeflow/qlpack.yml
+++ b/shared/typeflow/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/typeflow
-version: 1.0.31-dev
+version: 1.0.32-dev
groups: shared
library: true
dependencies:
diff --git a/shared/typeinference/CHANGELOG.md b/shared/typeinference/CHANGELOG.md
index d9dd6b6f2e2..83a42fb0551 100644
--- a/shared/typeinference/CHANGELOG.md
+++ b/shared/typeinference/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.0.12
+
+No user-facing changes.
+
## 0.0.11
No user-facing changes.
diff --git a/shared/typeinference/change-notes/released/0.0.12.md b/shared/typeinference/change-notes/released/0.0.12.md
new file mode 100644
index 00000000000..0e206033bc4
--- /dev/null
+++ b/shared/typeinference/change-notes/released/0.0.12.md
@@ -0,0 +1,3 @@
+## 0.0.12
+
+No user-facing changes.
diff --git a/shared/typeinference/codeql-pack.release.yml b/shared/typeinference/codeql-pack.release.yml
index e679dc42092..997fb8da83c 100644
--- a/shared/typeinference/codeql-pack.release.yml
+++ b/shared/typeinference/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 0.0.11
+lastReleaseVersion: 0.0.12
diff --git a/shared/typeinference/qlpack.yml b/shared/typeinference/qlpack.yml
index ca81b09ba49..954a850cf0f 100644
--- a/shared/typeinference/qlpack.yml
+++ b/shared/typeinference/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/typeinference
-version: 0.0.12-dev
+version: 0.0.13-dev
groups: shared
library: true
dependencies:
diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md
index 4e7d55fc700..1372c8c89ea 100644
--- a/shared/typetracking/CHANGELOG.md
+++ b/shared/typetracking/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.0.15
+
+No user-facing changes.
+
## 2.0.14
No user-facing changes.
diff --git a/shared/typetracking/change-notes/released/2.0.15.md b/shared/typetracking/change-notes/released/2.0.15.md
new file mode 100644
index 00000000000..3b59db4224a
--- /dev/null
+++ b/shared/typetracking/change-notes/released/2.0.15.md
@@ -0,0 +1,3 @@
+## 2.0.15
+
+No user-facing changes.
diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml
index 23aa0864b29..0377ae283a3 100644
--- a/shared/typetracking/codeql-pack.release.yml
+++ b/shared/typetracking/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 2.0.14
+lastReleaseVersion: 2.0.15
diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml
index 95228f4b0d7..2bf6f01d218 100644
--- a/shared/typetracking/qlpack.yml
+++ b/shared/typetracking/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/typetracking
-version: 2.0.15-dev
+version: 2.0.16-dev
groups: shared
library: true
dependencies:
diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md
index 37548ac47d5..c44b941f9e3 100644
--- a/shared/typos/CHANGELOG.md
+++ b/shared/typos/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.0.31
+
+No user-facing changes.
+
## 1.0.30
No user-facing changes.
diff --git a/shared/typos/change-notes/released/1.0.31.md b/shared/typos/change-notes/released/1.0.31.md
new file mode 100644
index 00000000000..b2642bbb5f8
--- /dev/null
+++ b/shared/typos/change-notes/released/1.0.31.md
@@ -0,0 +1,3 @@
+## 1.0.31
+
+No user-facing changes.
diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml
index f04640951de..f5bdc98ffc8 100644
--- a/shared/typos/codeql-pack.release.yml
+++ b/shared/typos/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 1.0.30
+lastReleaseVersion: 1.0.31
diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml
index 42c6e4df22e..b01883668b7 100644
--- a/shared/typos/qlpack.yml
+++ b/shared/typos/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/typos
-version: 1.0.31-dev
+version: 1.0.32-dev
groups: shared
library: true
warnOnImplicitThis: true
diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md
index 193ce4e9521..d9169a8d5d8 100644
--- a/shared/util/CHANGELOG.md
+++ b/shared/util/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.0.18
+
+No user-facing changes.
+
## 2.0.17
### Minor Analysis Improvements
diff --git a/shared/util/change-notes/released/2.0.18.md b/shared/util/change-notes/released/2.0.18.md
new file mode 100644
index 00000000000..11e398dac31
--- /dev/null
+++ b/shared/util/change-notes/released/2.0.18.md
@@ -0,0 +1,3 @@
+## 2.0.18
+
+No user-facing changes.
diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml
index a5f7c15c020..16342205c73 100644
--- a/shared/util/codeql-pack.release.yml
+++ b/shared/util/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 2.0.17
+lastReleaseVersion: 2.0.18
diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml
index 2587ddb147a..1c1f5670d3e 100644
--- a/shared/util/qlpack.yml
+++ b/shared/util/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/util
-version: 2.0.18-dev
+version: 2.0.19-dev
groups: shared
library: true
dependencies: null
diff --git a/shared/xml/CHANGELOG.md b/shared/xml/CHANGELOG.md
index 96204491536..59ae3e2581a 100644
--- a/shared/xml/CHANGELOG.md
+++ b/shared/xml/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.0.31
+
+No user-facing changes.
+
## 1.0.30
No user-facing changes.
diff --git a/shared/xml/change-notes/released/1.0.31.md b/shared/xml/change-notes/released/1.0.31.md
new file mode 100644
index 00000000000..b2642bbb5f8
--- /dev/null
+++ b/shared/xml/change-notes/released/1.0.31.md
@@ -0,0 +1,3 @@
+## 1.0.31
+
+No user-facing changes.
diff --git a/shared/xml/codeql-pack.release.yml b/shared/xml/codeql-pack.release.yml
index f04640951de..f5bdc98ffc8 100644
--- a/shared/xml/codeql-pack.release.yml
+++ b/shared/xml/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 1.0.30
+lastReleaseVersion: 1.0.31
diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml
index 4e9a5bf0a63..0908201b182 100644
--- a/shared/xml/qlpack.yml
+++ b/shared/xml/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/xml
-version: 1.0.31-dev
+version: 1.0.32-dev
groups: shared
library: true
dependencies:
diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md
index 67e07b08467..2254f38fb9f 100644
--- a/shared/yaml/CHANGELOG.md
+++ b/shared/yaml/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.0.31
+
+No user-facing changes.
+
## 1.0.30
No user-facing changes.
diff --git a/shared/yaml/change-notes/released/1.0.31.md b/shared/yaml/change-notes/released/1.0.31.md
new file mode 100644
index 00000000000..b2642bbb5f8
--- /dev/null
+++ b/shared/yaml/change-notes/released/1.0.31.md
@@ -0,0 +1,3 @@
+## 1.0.31
+
+No user-facing changes.
diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml
index f04640951de..f5bdc98ffc8 100644
--- a/shared/yaml/codeql-pack.release.yml
+++ b/shared/yaml/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 1.0.30
+lastReleaseVersion: 1.0.31
diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml
index 56aa47072f0..cbbdd896341 100644
--- a/shared/yaml/qlpack.yml
+++ b/shared/yaml/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/yaml
-version: 1.0.31-dev
+version: 1.0.32-dev
groups: shared
library: true
warnOnImplicitThis: true
diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md
index cef716a2578..7138ed02a2b 100644
--- a/swift/ql/lib/CHANGELOG.md
+++ b/swift/ql/lib/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 5.0.7
+
+### Minor Analysis Improvements
+
+* Updated to allow analysis of Swift 6.1.3.
+
## 5.0.6
No user-facing changes.
diff --git a/swift/ql/lib/change-notes/2025-09-08-swift-6.1.3.md b/swift/ql/lib/change-notes/released/5.0.7.md
similarity index 50%
rename from swift/ql/lib/change-notes/2025-09-08-swift-6.1.3.md
rename to swift/ql/lib/change-notes/released/5.0.7.md
index 7d2cde3c421..f10f4382e26 100644
--- a/swift/ql/lib/change-notes/2025-09-08-swift-6.1.3.md
+++ b/swift/ql/lib/change-notes/released/5.0.7.md
@@ -1,4 +1,5 @@
----
-category: minorAnalysis
----
+## 5.0.7
+
+### Minor Analysis Improvements
+
* Updated to allow analysis of Swift 6.1.3.
diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml
index cc6fded2554..accf4086d8a 100644
--- a/swift/ql/lib/codeql-pack.release.yml
+++ b/swift/ql/lib/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 5.0.6
+lastReleaseVersion: 5.0.7
diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml
index 451e86b8b3d..88950de258f 100644
--- a/swift/ql/lib/qlpack.yml
+++ b/swift/ql/lib/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/swift-all
-version: 5.0.7-dev
+version: 5.0.8-dev
groups: swift
extractor: swift
dbscheme: swift.dbscheme
diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md
index 58d42ca7813..eac65864617 100644
--- a/swift/ql/src/CHANGELOG.md
+++ b/swift/ql/src/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.2.5
+
+No user-facing changes.
+
## 1.2.4
### Bug Fixes
diff --git a/swift/ql/src/change-notes/released/1.2.5.md b/swift/ql/src/change-notes/released/1.2.5.md
new file mode 100644
index 00000000000..c805dc2cd4c
--- /dev/null
+++ b/swift/ql/src/change-notes/released/1.2.5.md
@@ -0,0 +1,3 @@
+## 1.2.5
+
+No user-facing changes.
diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml
index 172090f46b6..40355f0807f 100644
--- a/swift/ql/src/codeql-pack.release.yml
+++ b/swift/ql/src/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 1.2.4
+lastReleaseVersion: 1.2.5
diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml
index 7d0821afdd7..f49b81cec75 100644
--- a/swift/ql/src/qlpack.yml
+++ b/swift/ql/src/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/swift-queries
-version: 1.2.5-dev
+version: 1.2.6-dev
groups:
- swift
- queries