Fix early return in foreach_with_prefix
authorPedro Alves <palves@redhat.com>
Wed, 3 Jul 2019 17:05:20 +0000 (18:05 +0100)
committerPedro Alves <palves@redhat.com>
Wed, 3 Jul 2019 17:05:20 +0000 (18:05 +0100)
I noticed that an early return in a foreach_with_prefix block does not
cause the outer scope to return, like:

  foreach_with_prefix var {"foo" "bar"} {
     return
  }
  # Control continues here, but it should not.

The problem is that we're missing the usual "return -code" treatment.
This commit fixes it.

gdb/testsuite/ChangeLog:
2019-07-03  Pedro Alves  <palves@redhat.com>

* lib/gdb.exp (foreach_with_prefix): Use "catch" and
"return -code".

gdb/testsuite/ChangeLog
gdb/testsuite/lib/gdb.exp

index 38dcfd38df0010c66392be765f80b9e7dc1355fb..90b5f8ff8b5458750b0bf79b7a738d0df1758d85 100644 (file)
@@ -1,3 +1,8 @@
+2019-07-03  Pedro Alves  <palves@redhat.com>
+
+       * lib/gdb.exp (foreach_with_prefix): Use "catch" and
+       "return -code".
+
 2019-07-03  Pedro Alves  <palves@redhat.com>
 
        PR cli/24732
index da36ec0d4aa8587758c5d9516b40d09d02abdbd9..41f0ef5839394f033dc75bee0867b18204d6ca9f 100644 (file)
@@ -2025,7 +2025,14 @@ proc foreach_with_prefix {var list body} {
     upvar 1 $var myvar
     foreach myvar $list {
        with_test_prefix "$var=$myvar" {
-           uplevel 1 $body
+           set code [catch {uplevel 1 $body} result]
+       }
+
+       if {$code == 1} {
+           global errorInfo errorCode
+           return -code $code -errorinfo $errorInfo -errorcode $errorCode $result
+       } else {
+           return -code $code $result
        }
     }
 }