Don't throw an exception from ~Parser().
Put the parser into a smaller scope.
Add ast::Scope::contains(const Identifier&).

An accessor to check whether or not this scope directly contains a symbol.
Don't lookup recursively in already-defined check.
Drop 'subdir' until we specify it properly.
Provide more structured DAG scope enter/exit.

This makes things easier to debug.
Add more debug output to DAG building.
Do recursive scope lookup for SymbolReference.
Do recurse into ast::CompoundExpression.

Rely on the CompoundExpression recursion to provide the 'result' value in currentValue.
Ensure we can reference files in other values.
Add a test that uses 'foreach' in anger.
Remove some training wheels.

We now handle enough expression types that we don't need the special case of "maybe we don't have handled the thing on the right of this assignment".
Trivial: I've updated this file this year.
Make 'we specified an output file' more explicit.

After changing the output filename logic to allow default filenames (commit f42b03e7), re-add the ability to specify stdout as an output file (-o - / --output=-).
Trivial: whitespace cleanup.
Drop an assertion that we shouldn't have.
Rename Flattener => DAGBuilder.
Make DAG an interface rather than a class.
Drop unused code.
Return a guaranteed-unique pointer to the DAG.