Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

Towards structured error classes #9834

Merged
merged 6 commits into from
Feb 8, 2024

Commits on Feb 1, 2024

  1. Configuration menu
    Copy the full SHA
    c62c21e View commit details
    Browse the repository at this point in the history

Commits on Feb 2, 2024

  1. libexpr: Support structured error classes

    While preparing PRs like NixOS#9753, I've had to change error messages in
    dozens of code paths. It would be nice if instead of
    
        EvalError("expected 'boolean' but found '%1%'", showType(v))
    
    we could write
    
        TypeError(v, "boolean")
    
    or similar. Then, changing the error message could be a mechanical
    refactor with the compiler pointing out places the constructor needs to
    be changed, rather than the error-prone process of grepping through the
    codebase. Structured errors would also help prevent the "same" error
    from having multiple slightly different messages, and could be a first
    step towards error codes / an error index.
    
    This PR reworks the exception infrastructure in `libexpr` to
    support exception types with different constructor signatures than
    `BaseError`. Actually refactoring the exceptions to use structured data
    will come in a future PR (this one is big enough already, as it has to
    touch every exception in `libexpr`).
    
    The core design is in `eval-error.hh`. Generally, errors like this:
    
        state.error("'%s' is not a string", getAttrPathStr())
          .debugThrow<TypeError>()
    
    are transformed like this:
    
        state.error<TypeError>("'%s' is not a string", getAttrPathStr())
          .debugThrow()
    
    The type annotation has moved from `ErrorBuilder::debugThrow` to
    `EvalState::error`.
    9999years committed Feb 2, 2024
    Configuration menu
    Copy the full SHA
    c6a89c1 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    87dc4bc View commit details
    Browse the repository at this point in the history
  3. Remove EXCEPTION_NEEDS_THROW_SPEC

    We're on C++ 20 now, we don't need this
    9999years committed Feb 2, 2024
    Configuration menu
    Copy the full SHA
    faaccec View commit details
    Browse the repository at this point in the history

Commits on Feb 7, 2024

  1. Add comments

    9999years committed Feb 7, 2024
    Configuration menu
    Copy the full SHA
    474fc40 View commit details
    Browse the repository at this point in the history
  2. Add comment

    9999years committed Feb 7, 2024
    Configuration menu
    Copy the full SHA
    9723f53 View commit details
    Browse the repository at this point in the history