We should keep track of the source location in struct expr so that we can give more precise locations in error messages.
struct expr