Laythe-lang / Laythe

A gradually typed language originally based on the crafting interpreters series
MIT License
65 stars 4 forks source link

Add typed exceptions #150

Closed jonnyboyC closed 1 month ago

jonnyboyC commented 1 month ago

Problem

So far we've only had a small subset of the functionality for exceptions. Currently we supports the syntax but not the behavior of typed and multiple arm exception handlers.

Solution

Built out the remaining functionality in order to implement exceptions. This includes

Below is an example.

try {
  try {
    raise Error("test");
  // check if raised error matches Runtime Error
  } catch e: RuntimeError {
    assert(false);
  // check if raised error matches Syntax Error
  } catch e: SyntaxError {
    assert(false);
  }
// check if raised error matches Error
} catch e: Error {
  assert(true)
}

Overall some of the goals with the design are to basically make both exception paths and non exception paths as fast as possible.

None Exception

Overall these both are still relatively cheap

Overall we should be able to optimize this slightly as we have to do some double allocation at the moment.