feat(tvix/eval): construct internal attribute path representation

This is required for constructing nested attribute sets at runtime.

There'll be quite a lot of optimisation potential with this solution
eventually, if it should turn out to be a bottleneck.

This introduces a conceptual change, in that the `Value` enum is now
an enum representing "all runtime values" instead of "all Nix language
types". This makes sense in general, as this type will also contain
Chunk representations etc. which are not exposed to users.

Change-Id: Ic5f72b2a0965b146c6a451efad34c6a81ca1aad8
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6103
Reviewed-by: grfn <grfn@gws.fyi>
Tested-by: BuildkiteCI
This commit is contained in:
Vincent Ambo 2022-08-09 18:49:05 +03:00 committed by tazjin
parent ec1770f95a
commit 175eb97505
4 changed files with 30 additions and 1 deletions

View file

@ -224,7 +224,7 @@ impl Compiler {
// otherwise we need to emit an instruction to construct
// the attribute path.
if key_count > 1 {
todo!("emit OpAttrPath(n) instruction")
self.chunk.add_op(OpCode::OpAttrPath(2));
}
// The value is just compiled as normal so that its