Find a file
Rebecca Turner c6a89c1a16
libexpr: Support structured error classes
While preparing PRs like #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`.
2024-02-01 16:39:38 -08:00
.github build(deps): bump zeebe-io/backport-action from 2.4.0 to 2.4.1 2024-01-29 22:14:10 +00:00
config Run autoupdate 2021-06-01 11:42:38 +02:00
contrib function-trace: always show the trace 2019-09-18 23:23:21 +02:00
dep-patches Move dependency patches from top level into subdir 2024-01-17 13:13:54 -05:00
doc Merge pull request #9867 from hercules-ci/issue-912 2024-01-31 19:10:59 +01:00
m4 Add configure test to ensure GCC bug is fixed 2023-10-31 12:09:46 -04:00
maintainers maintainers/release-notes: Include changelog-d 2024-01-29 17:13:48 +01:00
misc Remove custom lowdown 2023-12-13 16:25:18 -05:00
mk Build Windows DLLs with -Wl,--export-all-symbols 2024-01-11 23:34:37 -05:00
perl Signer infrastructure: Prep for #9076 2024-01-03 16:13:55 -05:00
scripts installer: allow overriding of NIX_FIRST_BUILD_ID on darwin 2023-12-18 15:02:26 -08:00
src libexpr: Support structured error classes 2024-02-01 16:39:38 -08:00
tests libexpr: Support structured error classes 2024-02-01 16:39:38 -08:00
.clang-format Add clang format configuration 2024-01-08 19:46:38 +01:00
.dir-locals.el .dir-locals.el: Set c-block-comment-prefix 2020-07-10 11:21:06 +02:00
.editorconfig .editorconfig: Also affect Perl FFI xs file 2023-11-09 23:11:52 -05:00
.gitignore gitignore: add result-* 2024-01-09 18:36:09 +07:00
.version Bump version 2024-01-29 22:57:25 +01:00
configure.ac Link both gmock and gtest, not just gtest 2024-01-24 10:10:42 -05:00
CONTRIBUTING.md Merge pull request #9182 from fricklerhandwerk/popular-issues 2023-10-19 16:25:36 -04:00
COPYING * Change this to LGPL to keep the government happy. 2006-04-25 16:41:06 +00:00
default.nix add flake-compat to flake.nix and use sha256 in default.nix 2023-03-06 21:11:24 +01:00
docker.nix fix "add an option to include flake-registry..." 2023-05-16 14:35:31 +02:00
flake.lock flake.lock: Update 2024-01-15 08:04:46 -05:00
flake.nix maintainers/release-notes: Include changelog-d 2024-01-29 17:13:48 +01:00
local.mk Use positive source filtering for the standalone functional tests job 2023-10-09 08:29:27 -04:00
Makefile Build Windows DLLs with -Wl,--export-all-symbols 2024-01-11 23:34:37 -05:00
Makefile.config.in Simplify RapidCheck configure 2024-01-15 08:05:05 -05:00
package.nix maintainers/release-notes: Include changelog-d 2024-01-29 17:13:48 +01:00
precompiled-headers.h Config: Use nlohmann/json 2020-08-20 11:02:16 +02:00
README.md fix: Remove extra to from README.md (#9213) 2023-10-23 19:20:23 +02:00
shell.nix Remove url literals 2022-01-24 13:28:21 +01:00

Nix

Open Collective supporters Test

Nix is a powerful package manager for Linux and other Unix systems that makes package management reliable and reproducible. Please refer to the Nix manual for more details.

Installation and first steps

Visit nix.dev for installation instructions and beginner tutorials.

Full reference documentation can be found in the Nix manual.

Building And Developing

See our Hacking guide in our manual for instruction on how to set up a development environment and build Nix from source.

Contributing

Check the contributing guide if you want to get involved with developing Nix.

Additional Resources

License

Nix is released under the LGPL v2.1.