ee608784dda5b0a56d6cb205914051a0290c7efe
force* and eval*, introduce check*
Status quo: We have `force$Type` and `eval$Type`, both which first produce a value and then do a type check. The type checking logic is not consistently implemented, with lots of code duplication. This change does: - Introduce new `check*` functions which unify the logic (the error handling unfortunately still needs some duplication for now) - Make both `force*` and `eval*` use the `check*` function for the actual type checking - Inline and dismantle the `eval*` functions for being of little use and little used. This makes the `ExprOp*::eval` implementations for binary logic operators more verbose, but IMO that's a good thing: The implementation now needs to be a lot more explicit about the short-circuiting semantics, something which was previously hidden behind the short-circuiting semantics of the C++ language, in a way that could easily be overlooked and lead to confusion, which is something that happened to me twice in a year. - Changes `forceAttrs` and `forceList` to include the context in case `forceValue` fails (compared to only when the type check fails). This was done for code consistency, because I could not find any reason why list and attrs had different semantics here than int, float and bool. So far the visible change is minimal (see the diff on the err.exp), however this needs vetting for potential performance regressions. Change-Id: I33e5c706d46850c9e1126293ee01dab85ba07587
Lix
Lix is an implementation of Nix, a powerful package management system for Linux and other Unix systems that makes package management reliable and reproducible.
Read more about us at https://lix.systems.
Installation
On Linux and macOS the easiest way to install Lix is to run the following shell command (as a user other than root):
$ curl -sSf -L https://install.lix.systems/lix | sh -s -- install
For systems that already have a Nix implementation installed, such as NixOS systems, read our install page
Building And Developing
See our Hacking guide in our manual for instruction on how to set up a development environment and build Lix from source.
Additional Resources
- The Lix reference manual:
- Our wiki
- Matrix - #space:lix.systems
License
Lix is released under LGPL-2.1-or-later.
Description
Working fork of Lix - carries the adaptive load-aware build-remote patch. Upstream: gerrit.lix.systems
92 MiB
Languages
C++
74.9%
Python
11.7%
Nix
6.1%
Shell
3.6%
Meson
2%
Other
1.6%