All calling anonymous functions and actions.
Allow field operations on anonymous objects.
We don’t have a plugins/plugins.fab yet…
This TODO is now done.
Use sensible optimization flags, too.
Catch SemanticException first.

SemanticException is a subclass of SourceCodeException, so catch the more specific exception before the more general one.
Use release flags in bootstrap Makefile.
Use less conflicted name for ‘fab’ target.

It’s unclear what you mean when you type “make fab”, so use a clearer target name.
Add “regenerate bootstrap Makefile” script.
Catch a very strange lexer error.

This commit doesn’t fix the problem, just makes it more observable and creates a regression test.
Accept empty strings!
Show argument type errors in correct place.

When an argument’s type doesn’t match that of the parameter it’s being passed to, show the error location as the syntactic argument rather than the place that argument is semantically defined.
More consistent build formatting.

Always use spaces around the colon that separates inputs from outputs.
Trivial: generate comment in correct place.

Put the “build steps:” comment *before* the build steps.
Trivial: squelch warning in NDEBUG builds.
Add TypeContext::{input,output}FileType().

We need to programmatically distinguish between input and output files.
Refactor AbsolutePath out of AbsoluteDirectory.

Sometimes we need an absolute path, whether it’s a file or a directory.
Provide default arguments for dag::Parameter().
Provide more Arguments output methods.

When regenerating Fabrique outputs, we need to be able to reconstitute the original command-line arguments.
Keep track of input files that we parse.