Use std::unordered_set
Sort nixPath attributes
Fix test
nix-env -qa --json: Generate valid JSON even if there are invalid meta attrs
Print a warning when loading a large path into memory

I.e. if you have a derivation with

  src = ./huge-directory;

you'll get a warning that this is not a good idea.
Report daemon OOM better

When copying a large path causes the daemon to run out of memory, you
now get:

  error: Nix daemon out of memory

instead of:

  error: writing to file: Broken pipe
== operator: Ignore string context

There really is no case I can think of where taking the context into
account is useful. Mostly it's just very inconvenient.
Add autoloads, make code more concise & idiomatic

- Use define-derived-mode to declare nix-mode
- Use autoloads to ensure nix-mode is usable (and enabled) without needing `require`
- Use set + make-local-variable instead of longer 2-step equivalent
Share code between scopedImport and import

In addition to reducing duplication, this fixes both import from
derivation and import of derivation for scopedImport
findFile: Realise the context of the path attributes
Drop ImportError and FindError

We're not catching these anywhere.
Fix bogus warnings about dumping large paths

Also, yay for C++11 non-static initialisers.
Don't use member initialisers

They're a little bit too recent (only supported since GCC 4.7).

http://hydra.nixos.org/build/11851475
Add importNative primop

This can be used to import a dynamic shared object and return an
arbitrary value, including new primops. This can be used both to test
new primops without having to recompile nix every time, and to build
specialized primops that probably don't belong upstream (e.g. a function
that calls out to gpg to decrypt a nixops secret as-needed).

The imported function should initialize the Value & as needed. A single
import can define multiple values by creating an attrset or list, of
course.

An example initialization function might look like:

extern "C" void initialize(nix::EvalState & state, nix::Value & v)
{
    v.type = nix::tPrimOp;
    v.primOp = NEW nix::PrimOp(myFun, 1, state.symbols.create("myFun"));
}

Then `builtins.importNative ./example.so "initialize"` will evaluate to
the primop defined in the myFun function.
Only add the importNative primop if the allow-arbitrary-code-during-evaluation option is true (default false)
Merge branch 'shlevy-import-native'
allow-arbitrary-code-during-evaluation -> allow-unsafe-native-code-during-evaluation
Add `--json` argument to `nix-instantiate`
Style fix
Manual: html -> xhtml