Fix indentation of printed struct instantiation.
Provide ast::FieldAccess::definition() override.

An access to a structure field is one of those special expressions that is directly defined in terms of another expression (the value defined in the structure instantiation scope).

This fixes (and tests for) an error we had with nested lookups like ‘foo.bar.baz.wibble’, in which we couldn’t cast ‘foo.bar.baz’ to HasScope& because its definition was a FieldAccess rather than a structure containing ‘wibble’.
Add (generated) manifest of test files.

In order to get the dependencies right with llvm-lit, we need a list of all the test files. Until llvm-lit grows support for -MMD etc., we need to do this ourselves.
Refactor Parser::Builtin().

Let a common Builtin() take a UniqPtr<Expression>&, making the other versions much simpler convenience methods and making it easier to add a Builtin(UniqPtr<Scope>&).

Also make these methods private, as they are no longer used externally.
Put current struct’s values in scope.

In order to support fields that reference other fields, we need to enter a struct scope and register values with it, rather than just doing a linear per-field evaluation.
Add a TODO to dag::Structure.

We don’t actually want to promise anything about the ordering of the in-memory layout: a “struct” should be treated as a name->value mapping, no more.
A StructInstantiation always uses Values.

Don’t add custom pretty-printing logic, just use the existing ast::Value::PrettyPrint.
Be clearer about scope symbols vs values.

The default begin()/end() methods are ambiguous, so get rid of them.
Refactor “we’ve defined a new value” debugging.

We will want to use this code elsewhere, such as when promoting import arguments to full values.
Create a named constant for the string “args”.

This is repeated in enough places (i.e., already more than one but soon to be at least three) that we should use a named constant rather than a hard-coded string.
Change dag::File::{set->prepend}Subdirectory().

We don’t want to overwrite the existing subdirectory, we want to say “put this file (including its current subdirectory) within a subdirectory”.
Walk through struct instantiations in order.

When we instantiate a structure, we need to use the declaration order of values rather than the map of symbols (which is not in declaration order). Unfortunately, this complicates the processing of the special ‘args’ value when importing a module.
Add another debug assertion.
Trivial: use named constant.
Fix subdir-within-subdir logic.

When we define a list of files with a subdir argument within a context that has a value called ‘subdir’ defined, the subdirectories should compose nicely rather than replace each other.