As a matter of pedantic style, I think methods of this form should be written
```
@inline private def inSelfOrSuperCall[A](sym: Symbol)(a: => A) = {
  selfOrSuperCalls push sym
  try a finally selfOrSuperCalls.pop()
}
```
This minimizes the size of the try block. (If push throws an exception then we don't need to pop, so it isn't missing anything.)

Let's make a macro which makes these methods!