#! stap -p4

# NB: also used for systemtap.base/trycatch.exp

function foo () {
  try { error("foo") println("KO 1") } catch { println("OK 1") error ("bar") }
}

function koo () {
  try { println(1/(0*foo())) println("KO 2") } catch (er) { println("OK 2 ",er) error("baz") }
}

probe begin {
  try { koo () println("KO 3") } catch { println("OK 3") }
  try { /* empty */ } catch { log("KO 4") }
  try { log("OK 4") } catch { /* empty */ }
  try { /* empty */ } catch { /* empty */ }
  println("OK 5")

  // check for proper loop / try/catch nesting
  for (i=0;i<5;i++) try { error("me") } catch { break }
  println ((i==0) ? "OK 7" : "KO 7")

  for (j=0;j<5;j++) { for (i=0;i<5;i++) try { break } catch { continue } }
  println ((i==0 && j==5) ? "OK 7a" : "KO 7a")

  for (i=0;i<5;i++) try { error("me") } catch { continue }
  println ((i==5) ? "OK 8" : "KO 8")

  for (j=0;j<5;j++) { for (i=0;i<5;i++) try { continue } catch { break } }
  println ((i==5 && j==5) ? "OK 8a" : "KO 8a")

  // check that MAXACTIONS cannot be bypassed, e.g. with nested catch {}'s
  try { for (i=0; i<100000; i++) ; println("KO 6") } catch { println("KO 5") }
  println("KO 6")
  // will result in MAXACTION error
}
