>PHP uses longjmp()
Well off to a good start here.
It's not exactly uncommon, it's basically C's equivalent to exceptions. It lets you avoid having to do an extra error checking branch after every fallible operation and can quite significantly speed up the happy path of a language VM.
Not that uncommon for a language interpreter? Pretty sure MicroPython does some setjmp/longjmp for non-local returns.