atomo / examples / exceptions.atomo

The default branch has multiple heads

Panicker = Object clone do:
  { yield: v := error: v
  }

handler = Parameter new: Panicker

try: action catch: rescue :=
  { cc |
    with: handler as: cc do: action
  } call/cc match: {
    @(exception: x) -> rescue call: [x]
    ok -> ok
  }

throw: v :=
  handler _? yield: @(exception: v)

try: {
  try: {
    "before" print
    throw: @foo
    "after" print
  } catch: { exn |
    @(got-inner: exn) print
    throw: @bar
    "after again" print
  }
} catch: { exn |
  @(got-outer: exn) print
}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.