Throw error, not emit it (while emitting msg)

If something's go wrong when we emit msg and the err are caught by
try/catch, we re-throw it instead of emit('error'). The only exception
is SyntaxError