Allow empty Fabrique files.
Define srcroot,buildroot inside Parser.
Change Parser::EnterScope() logic.

We should enter the new scope when actually doing something like parsing a file, not magically at the beginning of time.
A set of values can be empty.
More checks for in-a-bad-state-mess.
Add dag::DAGBuilder::DumpScope().

This is helpful for debugging purposes.
Always allow compound-expression-as-expression.
Allow customizing ‘subdir’ through normal scoping.

Instead of special “what directory are we in” logic in dag::DAGBuilder, define a builtin ‘subdir’ in each file that behaves like a normal value (can’t be redefined, etc.).
Fix newline-inside-files() issue.

We had been disregarding newlines inside a files() declaration, so yylineno wasn’t getting incremented (or yycolumn reset) appropriately.
Treat default action parameters correctly.
Check that function default params work.
Trivial: fix incorrect whitespace.
Allow empty lists.

An empty list has type ‘list[nil]’.
Use FindModule() rather than direct file opening.

This lets us correctly re-find source files when, e.g., printing out information about errors in included submodules.
Allow single-character value names.
Point out the whole ‘+’ operation in the error.

When we encounter a type error in adding a string to something, provide a bit more context to the error message.
Add support for importing directories.

If the user references a directory, look for a file inside it called ‘fabfile’.
Allow importing empty modules.
A more informative error message.

The output filename may not be obvious from the immediate context (e.g., “tmpdir + provided_name”), so state it explicitly.
Add ‘override’ keyword liberally.

This pushes some lines over 90 columns, but I’m about to shrink them dramatically. This commit helps me ensure I do it correctly.