Commits

Ben Langmuir committed f0d306eb100
[ASTPrinter] Enforce pairing of pre/post decl callbacks We can have multiple printDeclPre callbacks pending (e.g top-level-code decls), so use a vector to ensure we don't lose the earlier callbacks. We also may end up calling printDeclPost without forcing the corresponding printDeclPre first if the decl doesn't actually print anything (e.g. an if-config statement when skipping those). So add a wrapper callPrintDeclPost that can check for this and skip both callbacks. In theory, we could handle this case by instead making all ast nodes go through something like shouldPrint() and making an invariant that something will be printed if and only if shouldPrint returns true. However, that is not an obvious win, because it forces us to walk all the first-level statements and decls inside a top-level-code decl to determine if anything will be printed, and it also means we can never make local decisions about whether something will be printed. For now, I've chosen to maintain flexibility by recovering from unprinted decls. Finally, add a bunch of assertions to try to keep callbacks sane.