Decode passes error tokens around

Don't use exceptions for control flow. Raise them at the edge of the
program.