diff --git a/ql/src/codeql_ruby/controlflow/internal/Cfg.ql b/ql/src/codeql_ruby/controlflow/internal/Cfg.ql
index cf92f1d94e3..ef06ba17a97 100644
--- a/ql/src/codeql_ruby/controlflow/internal/Cfg.ql
+++ b/ql/src/codeql_ruby/controlflow/internal/Cfg.ql
@@ -4,7 +4,20 @@
import codeql_ruby.CFG
-query predicate nodes(CfgNode n) { any() }
+query predicate nodes(CfgNode n, string attr, string val) {
+ attr = "semmle.order" and
+ val =
+ any(int i |
+ n =
+ rank[i](CfgNode p |
+ |
+ p
+ order by
+ p.getLocation().getFile().getBaseName(), p.getLocation().getFile().getAbsolutePath(),
+ p.getLocation().getStartLine()
+ )
+ ).toString()
+}
query predicate edges(CfgNode pred, CfgNode succ, string attr, string val) {
exists(SuccessorType t | succ = pred.getASuccessor(t) |
diff --git a/ql/test/library-tests/controlflow/graph/Cfg.expected b/ql/test/library-tests/controlflow/graph/Cfg.expected
index 7c43e1211e5..3a7801e77e9 100644
--- a/ql/test/library-tests/controlflow/graph/Cfg.expected
+++ b/ql/test/library-tests/controlflow/graph/Cfg.expected
@@ -5,179 +5,22 @@ break_ensure.rb:
# 1| enter m1
#-----| -> elements
-# 13| enter m2
-#-----| -> elements
-
-# 27| enter m3
-#-----| -> elements
-
-# 44| enter m4
-#-----| -> elements
-
-case.rb:
-# 1| enter case.rb
-#-----| -> if_in_case
-
-# 1| enter if_in_case
-#-----| -> case ...
-
-cfg.rb:
-# 1| enter cfg.rb
-#-----| -> bar
-
-# 15| enter BEGIN { ... }
-#-----| -> "hello"
-
-# 19| enter END { ... }
-#-----| -> "world"
-
-# 25| enter { ... }
-#-----| -> x
-
-# 29| enter { ... }
-#-----| -> &x
-
-# 63| enter pattern
-#-----| -> a
-
-# 69| enter print
-#-----| -> "silly"
-
-# 101| enter parameters
-#-----| -> value
-
-# 120| enter -> { ... }
-#-----| -> x
-
-# 142| enter print
-#-----| -> "singleton"
-
-# 149| enter method
-#-----| -> *x
-
-# 153| enter two_parameters
-#-----| -> a
-
-# 187| enter run_block
-#-----| -> yield ...
-
-# 191| enter { ... }
-#-----| -> x
-
-exit.rb:
-# 1| enter exit.rb
-#-----| -> m1
-
-# 1| enter m1
-#-----| -> x
-
-# 8| enter m2
-#-----| -> x
-
-heredoc.rb:
-# 1| enter heredoc.rb
-#-----| -> double_heredoc
-
-# 1| enter double_heredoc
-#-----| -> < m1
-
-# 1| enter m1
-#-----| -> x
-
-# 11| enter m2
-#-----| -> b
-
-# 18| enter m3
-#-----| -> x
-
-# 28| enter m4
-#-----| -> b1
-
-# 32| enter m5
-#-----| -> b1
-
-# 36| enter conditional_method_def
-#-----| -> "bla"
-
-# 40| enter constant_condition
-#-----| -> true
-
-loops.rb:
-# 1| enter loops.rb
-#-----| -> m1
-
-# 1| enter m1
-#-----| -> x
-
-# 8| enter m2
-#-----| -> x
-
-# 24| enter m3
-#-----| -> 1
-
-# 25| enter do ... end
-#-----| -> x
-
-raise.rb:
-# 1| enter raise.rb
-#-----| -> ExceptionA
-
-# 7| enter m1
-#-----| -> x
-
-# 14| enter m2
-#-----| -> b
-
-# 25| enter m3
-#-----| -> b
-
-# 36| enter m4
-#-----| -> b
-
-# 47| enter m5
-#-----| -> b
-
-# 57| enter m6
-#-----| -> b
-
-# 68| enter m7
-#-----| -> x
-
-# 79| enter m8
-#-----| -> x
-
-# 94| enter m9
-#-----| -> x
-
-# 121| enter m10
-#-----| -> p
-
-# 128| enter m11
-#-----| -> b
-
-# 142| enter m12
-#-----| -> b
-
-# 150| enter m13
-#-----| -> ensure ...
-
-# 154| enter m14
-#-----| -> element
-
-# 155| enter { ... }
-#-----| -> elem
-
-break_ensure.rb:
# 1| m1
#-----| -> m2
# 1| elements
#-----| -> elements
+# 1| exit break_ensure.rb
+
+# 1| exit m1
+
+# 1| exit break_ensure.rb (normal)
+#-----| -> exit break_ensure.rb
+
+# 1| exit m1 (normal)
+#-----| -> exit m1
+
# 2| for ... in ...
#-----| -> ensure ...
@@ -226,12 +69,20 @@ break_ensure.rb:
# 9| "elements nil"
#-----| -> call to puts
+# 13| enter m2
+#-----| -> elements
+
# 13| m2
#-----| -> m3
# 13| elements
#-----| -> elements
+# 13| exit m2
+
+# 13| exit m2 (normal)
+#-----| -> exit m2
+
# 14| for ... in ...
#-----| -> exit m2 (normal)
@@ -299,12 +150,20 @@ break_ensure.rb:
# 21| [ensure: break] "elements nil"
#-----| -> [ensure: break] call to puts
+# 27| enter m3
+#-----| -> elements
+
# 27| m3
#-----| -> m4
# 27| elements
#-----| -> elements
+# 27| exit m3
+
+# 27| exit m3 (normal)
+#-----| -> exit m3
+
# 29| if ...
#-----| -> ensure ...
@@ -388,12 +247,20 @@ break_ensure.rb:
# 41| "Done"
#-----| -> call to puts
+# 44| enter m4
+#-----| -> elements
+
# 44| m4
#-----| -> exit break_ensure.rb (normal)
# 44| elements
#-----| -> elements
+# 44| exit m4
+
+# 44| exit m4 (normal)
+#-----| -> exit m4
+
# 45| for ... in ...
#-----| -> exit m4 (normal)
@@ -471,9 +338,25 @@ break_ensure.rb:
#-----| -> [ensure: raise] break
case.rb:
+# 1| enter case.rb
+#-----| -> if_in_case
+
+# 1| enter if_in_case
+#-----| -> case ...
+
# 1| if_in_case
#-----| -> exit case.rb (normal)
+# 1| exit case.rb
+
+# 1| exit if_in_case
+
+# 1| exit case.rb (normal)
+#-----| -> exit case.rb
+
+# 1| exit if_in_case (normal)
+#-----| -> exit if_in_case
+
# 2| case ...
#-----| -> call to x1
@@ -517,9 +400,17 @@ case.rb:
#-----| -> call to puts
cfg.rb:
+# 1| enter cfg.rb
+#-----| -> bar
+
# 1| bar
#-----| -> alias ...
+# 1| exit cfg.rb
+
+# 1| exit cfg.rb (normal)
+#-----| -> exit cfg.rb
+
# 3| alias ...
#-----| -> foo
@@ -574,18 +465,34 @@ cfg.rb:
# 12| 4
#-----| -> call to puts
+# 15| enter BEGIN { ... }
+#-----| -> "hello"
+
# 15| BEGIN { ... }
#-----| -> END { ... }
+# 15| exit BEGIN { ... }
+
+# 15| exit BEGIN { ... } (normal)
+#-----| -> exit BEGIN { ... }
+
# 16| call to puts
#-----| -> exit BEGIN { ... } (normal)
# 16| "hello"
#-----| -> call to puts
+# 19| enter END { ... }
+#-----| -> "world"
+
# 19| END { ... }
#-----| -> 41
+# 19| exit END { ... }
+
+# 19| exit END { ... } (normal)
+#-----| -> exit END { ... }
+
# 20| call to puts
#-----| -> exit END { ... } (normal)
@@ -601,6 +508,9 @@ cfg.rb:
# 23| 1
#-----| -> ... + ...
+# 25| enter { ... }
+#-----| -> x
+
# 25| call to times
#-----| -> :puts
@@ -619,6 +529,11 @@ cfg.rb:
# 25| x
#-----| -> call to puts
+# 25| exit { ... }
+
+# 25| exit { ... } (normal)
+#-----| -> exit { ... }
+
# 27| call to puts
#-----| -> Proc
@@ -628,6 +543,9 @@ cfg.rb:
# 27| :puts
#-----| -> &...
+# 29| enter { ... }
+#-----| -> &x
+
# 29| call to new
#-----| -> true
@@ -646,6 +564,11 @@ cfg.rb:
# 29| x
#-----| -> call to call
+# 29| exit { ... }
+
+# 29| exit { ... } (normal)
+#-----| -> exit { ... }
+
# 31| while ...
#-----| -> false
@@ -885,6 +808,9 @@ cfg.rb:
# 62| 3
#-----| -> [...]
+# 63| enter pattern
+#-----| -> a
+
# 63| pattern
#-----| -> 1
@@ -897,6 +823,11 @@ cfg.rb:
# 63| b
#-----| -> (..., ...)
+# 63| exit pattern
+
+# 63| exit pattern (normal)
+#-----| -> exit pattern
+
# 64| call to puts
#-----| -> b
@@ -939,9 +870,17 @@ cfg.rb:
# 68| 2
#-----| -> ...[...]
+# 69| enter print
+#-----| -> "silly"
+
# 69| print
#-----| -> 42
+# 69| exit print
+
+# 69| exit print (normal)
+#-----| -> exit print
+
# 70| call to puts
#-----| -> exit print (normal)
@@ -1144,6 +1083,9 @@ cfg.rb:
# 98| map1
#-----| -> **...
+# 101| enter parameters
+#-----| -> value
+
# 101| parameters
#-----| -> "healthy"
@@ -1160,6 +1102,11 @@ cfg.rb:
# 101| **kwargs
#-----| -> value
+# 101| exit parameters
+
+# 101| exit parameters (normal)
+#-----| -> exit parameters
+
# 102| call to puts
#-----| -> kwargs
@@ -1260,6 +1207,9 @@ cfg.rb:
# 117| 10
#-----| -> @@static_field
+# 120| enter -> { ... }
+#-----| -> x
+
# 120| ... = ...
#-----| -> M
@@ -1287,6 +1237,11 @@ cfg.rb:
# 120| x
#-----| -> [...]
+# 120| exit -> { ... }
+
+# 120| exit -> { ... } (normal)
+#-----| -> exit -> { ... }
+
# 122| M
#-----| -> M
@@ -1477,9 +1432,17 @@ cfg.rb:
# 141| setter=
#-----| -> print
+# 142| enter print
+#-----| -> "singleton"
+
# 142| print
#-----| -> Silly
+# 142| exit print
+
+# 142| exit print (normal)
+#-----| -> exit print
+
# 143| call to puts
#-----| -> call to super
@@ -1507,6 +1470,9 @@ cfg.rb:
# 148| Silly
#-----| -> call to new
+# 149| enter method
+#-----| -> *x
+
# 149| method
#-----| -> two_parameters
@@ -1516,12 +1482,20 @@ cfg.rb:
# 149| *x
#-----| -> x
+# 149| exit method
+
+# 149| exit method (normal)
+#-----| -> exit method
+
# 150| call to puts
#-----| -> exit method (normal)
# 150| x
#-----| -> call to puts
+# 153| enter two_parameters
+#-----| -> a
+
# 153| two_parameters
#-----| -> 1
@@ -1531,6 +1505,11 @@ cfg.rb:
# 153| b
#-----| -> exit two_parameters (normal)
+# 153| exit two_parameters
+
+# 153| exit two_parameters (normal)
+#-----| -> exit two_parameters
+
# 155| call to two_parameters
#-----| -> call to __FILE__
@@ -1826,6 +1805,9 @@ cfg.rb:
# 185| 0
#-----| -> ... != ...
+# 187| enter run_block
+#-----| -> yield ...
+
# 187| run_block
#-----| -> { ... }
@@ -1834,6 +1816,9 @@ cfg.rb:
# 188| 42
+# 191| enter { ... }
+#-----| -> x
+
# 191| call to run_block
#-----| -> exit cfg.rb (normal)
@@ -1849,13 +1834,37 @@ cfg.rb:
# 191| x
#-----| -> call to puts
+# 191| exit { ... }
+
+# 191| exit { ... } (normal)
+#-----| -> exit { ... }
+
exit.rb:
+# 1| enter exit.rb
+#-----| -> m1
+
+# 1| enter m1
+#-----| -> x
+
# 1| m1
#-----| -> m2
# 1| x
#-----| -> x
+# 1| exit exit.rb
+
+# 1| exit m1
+
+# 1| exit exit.rb (normal)
+#-----| -> exit exit.rb
+
+# 1| exit m1 (abnormal)
+#-----| -> exit m1
+
+# 1| exit m1 (normal)
+#-----| -> exit m1
+
# 2| if ...
#-----| -> "x <= 2"
@@ -1881,12 +1890,23 @@ exit.rb:
# 5| "x <= 2"
#-----| -> call to puts
+# 8| enter m2
+#-----| -> x
+
# 8| m2
#-----| -> exit exit.rb (normal)
# 8| x
#-----| -> x
+# 8| exit m2
+
+# 8| exit m2 (abnormal)
+#-----| -> exit m2
+
+# 8| exit m2 (normal)
+#-----| -> exit m2
+
# 9| if ...
#-----| -> "x <= 2"
@@ -1913,9 +1933,25 @@ exit.rb:
#-----| -> call to puts
heredoc.rb:
+# 1| enter heredoc.rb
+#-----| -> double_heredoc
+
+# 1| enter double_heredoc
+#-----| -> < exit heredoc.rb (normal)
+# 1| exit heredoc.rb
+
+# 1| exit double_heredoc
+
+# 1| exit heredoc.rb (normal)
+#-----| -> exit heredoc.rb
+
+# 1| exit double_heredoc (normal)
+#-----| -> exit double_heredoc
+
# 2| call to puts
#-----| -> exit double_heredoc (normal)
@@ -1926,12 +1962,28 @@ heredoc.rb:
#-----| -> call to puts
ifs.rb:
+# 1| enter ifs.rb
+#-----| -> m1
+
+# 1| enter m1
+#-----| -> x
+
# 1| m1
#-----| -> m2
# 1| x
#-----| -> x
+# 1| exit ifs.rb
+
+# 1| exit m1
+
+# 1| exit ifs.rb (normal)
+#-----| -> exit ifs.rb
+
+# 1| exit m1 (normal)
+#-----| -> exit m1
+
# 2| if ...
#-----| -> exit m1 (normal)
@@ -2020,12 +2072,20 @@ ifs.rb:
# 7| "I can't guess the number"
#-----| -> call to puts
+# 11| enter m2
+#-----| -> b
+
# 11| m2
#-----| -> m3
# 11| b
#-----| -> b
+# 11| exit m2
+
+# 11| exit m2 (normal)
+#-----| -> exit m2
+
# 12| if ...
#-----| -> 1
@@ -2045,12 +2105,20 @@ ifs.rb:
# 15| 1
#-----| -> return
+# 18| enter m3
+#-----| -> x
+
# 18| m3
#-----| -> m4
# 18| x
#-----| -> x
+# 18| exit m3
+
+# 18| exit m3 (normal)
+#-----| -> exit m3
+
# 19| if ...
#-----| -> x
@@ -2110,6 +2178,9 @@ ifs.rb:
# 25| x
#-----| -> call to puts
+# 28| enter m4
+#-----| -> b1
+
# 28| m4
#-----| -> m5
@@ -2122,6 +2193,11 @@ ifs.rb:
# 28| b3
#-----| -> b1
+# 28| exit m4
+
+# 28| exit m4 (normal)
+#-----| -> exit m4
+
# 29| return
#-----| return -> exit m4 (normal)
@@ -2158,6 +2234,9 @@ ifs.rb:
# 29| "!b2 || !b3"
#-----| -> ... ? ... : ...
+# 32| enter m5
+#-----| -> b1
+
# 32| m5
#-----| -> 1
@@ -2176,6 +2255,11 @@ ifs.rb:
# 32| b5
#-----| -> b1
+# 32| exit m5
+
+# 32| exit m5 (normal)
+#-----| -> exit m5
+
# 33| if ...
#-----| -> exit m5 (normal)
@@ -2223,12 +2307,20 @@ ifs.rb:
# 33| "!b2 || !b4 || !b5"
#-----| -> if ...
+# 36| enter conditional_method_def
+#-----| -> "bla"
+
# 36| ... unless ...
#-----| -> constant_condition
# 36| conditional_method_def
#-----| -> ... unless ...
+# 36| exit conditional_method_def
+
+# 36| exit conditional_method_def (normal)
+#-----| -> exit conditional_method_def
+
# 37| call to puts
#-----| -> exit conditional_method_def (normal)
@@ -2245,9 +2337,17 @@ ifs.rb:
# 38| 2
#-----| -> ... == ...
+# 40| enter constant_condition
+#-----| -> true
+
# 40| constant_condition
#-----| -> exit ifs.rb (normal)
+# 40| exit constant_condition
+
+# 40| exit constant_condition (normal)
+#-----| -> exit constant_condition
+
# 41| if ...
#-----| -> exit constant_condition (normal)
@@ -2258,12 +2358,28 @@ ifs.rb:
#-----| true -> [false] ! ...
loops.rb:
+# 1| enter loops.rb
+#-----| -> m1
+
+# 1| enter m1
+#-----| -> x
+
# 1| m1
#-----| -> m2
# 1| x
#-----| -> x
+# 1| exit loops.rb
+
+# 1| exit m1
+
+# 1| exit loops.rb (normal)
+#-----| -> exit loops.rb
+
+# 1| exit m1 (normal)
+#-----| -> exit m1
+
# 2| while ...
#-----| -> exit m1 (normal)
@@ -2292,12 +2408,20 @@ loops.rb:
# 4| 1
#-----| -> ... -= ...
+# 8| enter m2
+#-----| -> x
+
# 8| m2
#-----| -> m3
# 8| x
#-----| -> x
+# 8| exit m2
+
+# 8| exit m2 (normal)
+#-----| -> exit m2
+
# 9| while ...
#-----| -> "Done"
@@ -2386,9 +2510,20 @@ loops.rb:
# 21| "Done"
#-----| -> call to puts
+# 24| enter m3
+#-----| -> 1
+
# 24| m3
#-----| -> exit loops.rb (normal)
+# 24| exit m3
+
+# 24| exit m3 (normal)
+#-----| -> exit m3
+
+# 25| enter do ... end
+#-----| -> x
+
# 25| call to each
#-----| -> exit m3 (normal)
@@ -2410,6 +2545,11 @@ loops.rb:
# 25| x
#-----| -> x
+# 25| exit do ... end
+
+# 25| exit do ... end (normal)
+#-----| -> exit do ... end
+
# 26| call to puts
#-----| -> exit do ... end (normal)
@@ -2417,6 +2557,9 @@ loops.rb:
#-----| -> call to puts
raise.rb:
+# 1| enter raise.rb
+#-----| -> ExceptionA
+
# 1| ExceptionA
#-----| -> ExceptionA
@@ -2426,6 +2569,11 @@ raise.rb:
# 1| Exception
#-----| -> ExceptionB
+# 1| exit raise.rb
+
+# 1| exit raise.rb (normal)
+#-----| -> exit raise.rb
+
# 4| ExceptionB
#-----| -> ExceptionB
@@ -2435,12 +2583,23 @@ raise.rb:
# 4| Exception
#-----| -> m1
+# 7| enter m1
+#-----| -> x
+
# 7| m1
#-----| -> m2
# 7| x
#-----| -> x
+# 7| exit m1
+
+# 7| exit m1 (abnormal)
+#-----| -> exit m1
+
+# 7| exit m1 (normal)
+#-----| -> exit m1
+
# 8| if ...
#-----| -> "x <= 2"
@@ -2466,12 +2625,23 @@ raise.rb:
# 11| "x <= 2"
#-----| -> call to puts
+# 14| enter m2
+#-----| -> b
+
# 14| m2
#-----| -> m3
# 14| b
#-----| -> b
+# 14| exit m2
+
+# 14| exit m2 (abnormal)
+#-----| -> exit m2
+
+# 14| exit m2 (normal)
+#-----| -> exit m2
+
# 16| if ...
#-----| -> "End m2"
@@ -2504,12 +2674,20 @@ raise.rb:
# 22| "End m2"
#-----| -> call to puts
+# 25| enter m3
+#-----| -> b
+
# 25| m3
#-----| -> m4
# 25| b
#-----| -> b
+# 25| exit m3
+
+# 25| exit m3 (normal)
+#-----| -> exit m3
+
# 27| if ...
#-----| -> "End m3"
@@ -2538,12 +2716,20 @@ raise.rb:
# 33| "End m3"
#-----| -> call to puts
+# 36| enter m4
+#-----| -> b
+
# 36| m4
#-----| -> m5
# 36| b
#-----| -> b
+# 36| exit m4
+
+# 36| exit m4 (normal)
+#-----| -> exit m4
+
# 38| if ...
#-----| -> "End m4"
@@ -2575,12 +2761,20 @@ raise.rb:
# 44| "End m4"
#-----| -> call to puts
+# 47| enter m5
+#-----| -> b
+
# 47| m5
#-----| -> m6
# 47| b
#-----| -> b
+# 47| exit m5
+
+# 47| exit m5 (normal)
+#-----| -> exit m5
+
# 49| if ...
#-----| -> "End m5"
@@ -2606,12 +2800,23 @@ raise.rb:
# 54| "End m5"
#-----| -> call to puts
+# 57| enter m6
+#-----| -> b
+
# 57| m6
#-----| -> m7
# 57| b
#-----| -> b
+# 57| exit m6
+
+# 57| exit m6 (abnormal)
+#-----| -> exit m6
+
+# 57| exit m6 (normal)
+#-----| -> exit m6
+
# 59| if ...
#-----| -> "End m6"
@@ -2651,12 +2856,23 @@ raise.rb:
# 65| "End m6"
#-----| -> call to puts
+# 68| enter m7
+#-----| -> x
+
# 68| m7
#-----| -> m8
# 68| x
#-----| -> x
+# 68| exit m7
+
+# 68| exit m7 (abnormal)
+#-----| -> exit m7
+
+# 68| exit m7 (normal)
+#-----| -> exit m7
+
# 69| if ...
#-----| -> "0 <= x <= 2"
@@ -2728,12 +2944,23 @@ raise.rb:
# 76| [ensure: raise] "ensure"
#-----| -> [ensure: raise] call to puts
+# 79| enter m8
+#-----| -> x
+
# 79| m8
#-----| -> m9
# 79| x
#-----| -> "Begin m8"
+# 79| exit m8
+
+# 79| exit m8 (abnormal)
+#-----| -> exit m8
+
+# 79| exit m8 (normal)
+#-----| -> exit m8
+
# 80| call to puts
#-----| -> x
@@ -2817,6 +3044,9 @@ raise.rb:
# 91| "End m8"
#-----| -> call to puts
+# 94| enter m9
+#-----| -> x
+
# 94| m9
#-----| -> m10
@@ -2829,6 +3059,14 @@ raise.rb:
# 94| b2
#-----| -> "Begin m9"
+# 94| exit m9
+
+# 94| exit m9 (abnormal)
+#-----| -> exit m9
+
+# 94| exit m9 (normal)
+#-----| -> exit m9
+
# 95| call to puts
#-----| -> x
@@ -3071,6 +3309,9 @@ raise.rb:
# 117| [ensure: raise] "b2 is true"
#-----| -> [ensure: raise] call to raise
+# 121| enter m10
+#-----| -> p
+
# 121| m10
#-----| -> m11
@@ -3084,6 +3325,14 @@ raise.rb:
# 121| "Exception"
#-----| -> call to raise
+# 121| exit m10
+
+# 121| exit m10 (abnormal)
+#-----| -> exit m10
+
+# 121| exit m10 (normal)
+#-----| -> exit m10
+
# 124| ensure ...
#-----| -> "Will not get executed if p is..."
@@ -3093,12 +3342,23 @@ raise.rb:
# 125| "Will not get executed if p is..."
#-----| -> call to puts
+# 128| enter m11
+#-----| -> b
+
# 128| m11
#-----| -> m12
# 128| b
#-----| -> b
+# 128| exit m11
+
+# 128| exit m11 (abnormal)
+#-----| -> exit m11
+
+# 128| exit m11 (normal)
+#-----| -> exit m11
+
# 130| if ...
#-----| -> ensure ...
@@ -3156,12 +3416,20 @@ raise.rb:
# 139| "End m11"
#-----| -> call to puts
+# 142| enter m12
+#-----| -> b
+
# 142| m12
#-----| -> m13
# 142| b
#-----| -> b
+# 142| exit m12
+
+# 142| exit m12 (normal)
+#-----| -> exit m12
+
# 143| if ...
#-----| -> ensure ...
@@ -3193,18 +3461,37 @@ raise.rb:
# 147| [ensure: raise] 3
#-----| -> [ensure: raise] return
+# 150| enter m13
+#-----| -> ensure ...
+
# 150| m13
#-----| -> m14
+# 150| exit m13
+
+# 150| exit m13 (normal)
+#-----| -> exit m13
+
# 151| ensure ...
#-----| -> exit m13 (normal)
+# 154| enter m14
+#-----| -> element
+
# 154| m14
#-----| -> exit raise.rb (normal)
# 154| element
#-----| -> element
+# 154| exit m14
+
+# 154| exit m14 (normal)
+#-----| -> exit m14
+
+# 155| enter { ... }
+#-----| -> elem
+
# 155| call to each
#-----| -> exit m14 (normal)
@@ -3233,319 +3520,8 @@ raise.rb:
# 155| element
#-----| -> call to nil?
-break_ensure.rb:
-# 1| exit break_ensure.rb
-
-# 1| exit m1
-
-# 13| exit m2
-
-# 27| exit m3
-
-# 44| exit m4
-
-case.rb:
-# 1| exit case.rb
-
-# 1| exit if_in_case
-
-cfg.rb:
-# 1| exit cfg.rb
-
-# 15| exit BEGIN { ... }
-
-# 19| exit END { ... }
-
-# 25| exit { ... }
-
-# 29| exit { ... }
-
-# 63| exit pattern
-
-# 69| exit print
-
-# 101| exit parameters
-
-# 120| exit -> { ... }
-
-# 142| exit print
-
-# 149| exit method
-
-# 153| exit two_parameters
-
-# 191| exit { ... }
-
-exit.rb:
-# 1| exit exit.rb
-
-# 1| exit m1
-
-# 8| exit m2
-
-heredoc.rb:
-# 1| exit heredoc.rb
-
-# 1| exit double_heredoc
-
-ifs.rb:
-# 1| exit ifs.rb
-
-# 1| exit m1
-
-# 11| exit m2
-
-# 18| exit m3
-
-# 28| exit m4
-
-# 32| exit m5
-
-# 36| exit conditional_method_def
-
-# 40| exit constant_condition
-
-loops.rb:
-# 1| exit loops.rb
-
-# 1| exit m1
-
-# 8| exit m2
-
-# 24| exit m3
-
-# 25| exit do ... end
-
-raise.rb:
-# 1| exit raise.rb
-
-# 7| exit m1
-
-# 14| exit m2
-
-# 25| exit m3
-
-# 36| exit m4
-
-# 47| exit m5
-
-# 57| exit m6
-
-# 68| exit m7
-
-# 79| exit m8
-
-# 94| exit m9
-
-# 121| exit m10
-
-# 128| exit m11
-
-# 142| exit m12
-
-# 150| exit m13
-
-# 154| exit m14
-
# 155| exit { ... }
-break_ensure.rb:
-# 1| exit break_ensure.rb (normal)
-#-----| -> exit break_ensure.rb
-
-# 1| exit m1 (normal)
-#-----| -> exit m1
-
-# 13| exit m2 (normal)
-#-----| -> exit m2
-
-# 27| exit m3 (normal)
-#-----| -> exit m3
-
-# 44| exit m4 (normal)
-#-----| -> exit m4
-
-case.rb:
-# 1| exit case.rb (normal)
-#-----| -> exit case.rb
-
-# 1| exit if_in_case (normal)
-#-----| -> exit if_in_case
-
-cfg.rb:
-# 1| exit cfg.rb (normal)
-#-----| -> exit cfg.rb
-
-# 15| exit BEGIN { ... } (normal)
-#-----| -> exit BEGIN { ... }
-
-# 19| exit END { ... } (normal)
-#-----| -> exit END { ... }
-
-# 25| exit { ... } (normal)
-#-----| -> exit { ... }
-
-# 29| exit { ... } (normal)
-#-----| -> exit { ... }
-
-# 63| exit pattern (normal)
-#-----| -> exit pattern
-
-# 69| exit print (normal)
-#-----| -> exit print
-
-# 101| exit parameters (normal)
-#-----| -> exit parameters
-
-# 120| exit -> { ... } (normal)
-#-----| -> exit -> { ... }
-
-# 142| exit print (normal)
-#-----| -> exit print
-
-# 149| exit method (normal)
-#-----| -> exit method
-
-# 153| exit two_parameters (normal)
-#-----| -> exit two_parameters
-
-# 191| exit { ... } (normal)
-#-----| -> exit { ... }
-
-exit.rb:
-# 1| exit exit.rb (normal)
-#-----| -> exit exit.rb
-
-# 1| exit m1 (abnormal)
-#-----| -> exit m1
-
-# 1| exit m1 (normal)
-#-----| -> exit m1
-
-# 8| exit m2 (abnormal)
-#-----| -> exit m2
-
-# 8| exit m2 (normal)
-#-----| -> exit m2
-
-heredoc.rb:
-# 1| exit heredoc.rb (normal)
-#-----| -> exit heredoc.rb
-
-# 1| exit double_heredoc (normal)
-#-----| -> exit double_heredoc
-
-ifs.rb:
-# 1| exit ifs.rb (normal)
-#-----| -> exit ifs.rb
-
-# 1| exit m1 (normal)
-#-----| -> exit m1
-
-# 11| exit m2 (normal)
-#-----| -> exit m2
-
-# 18| exit m3 (normal)
-#-----| -> exit m3
-
-# 28| exit m4 (normal)
-#-----| -> exit m4
-
-# 32| exit m5 (normal)
-#-----| -> exit m5
-
-# 36| exit conditional_method_def (normal)
-#-----| -> exit conditional_method_def
-
-# 40| exit constant_condition (normal)
-#-----| -> exit constant_condition
-
-loops.rb:
-# 1| exit loops.rb (normal)
-#-----| -> exit loops.rb
-
-# 1| exit m1 (normal)
-#-----| -> exit m1
-
-# 8| exit m2 (normal)
-#-----| -> exit m2
-
-# 24| exit m3 (normal)
-#-----| -> exit m3
-
-# 25| exit do ... end (normal)
-#-----| -> exit do ... end
-
-raise.rb:
-# 1| exit raise.rb (normal)
-#-----| -> exit raise.rb
-
-# 7| exit m1 (abnormal)
-#-----| -> exit m1
-
-# 7| exit m1 (normal)
-#-----| -> exit m1
-
-# 14| exit m2 (abnormal)
-#-----| -> exit m2
-
-# 14| exit m2 (normal)
-#-----| -> exit m2
-
-# 25| exit m3 (normal)
-#-----| -> exit m3
-
-# 36| exit m4 (normal)
-#-----| -> exit m4
-
-# 47| exit m5 (normal)
-#-----| -> exit m5
-
-# 57| exit m6 (abnormal)
-#-----| -> exit m6
-
-# 57| exit m6 (normal)
-#-----| -> exit m6
-
-# 68| exit m7 (abnormal)
-#-----| -> exit m7
-
-# 68| exit m7 (normal)
-#-----| -> exit m7
-
-# 79| exit m8 (abnormal)
-#-----| -> exit m8
-
-# 79| exit m8 (normal)
-#-----| -> exit m8
-
-# 94| exit m9 (abnormal)
-#-----| -> exit m9
-
-# 94| exit m9 (normal)
-#-----| -> exit m9
-
-# 121| exit m10 (abnormal)
-#-----| -> exit m10
-
-# 121| exit m10 (normal)
-#-----| -> exit m10
-
-# 128| exit m11 (abnormal)
-#-----| -> exit m11
-
-# 128| exit m11 (normal)
-#-----| -> exit m11
-
-# 142| exit m12 (normal)
-#-----| -> exit m12
-
-# 150| exit m13 (normal)
-#-----| -> exit m13
-
-# 154| exit m14 (normal)
-#-----| -> exit m14
-
# 155| exit { ... } (abnormal)
#-----| -> exit { ... }