About the internal errors:
Actually that is a format chosen by the compiler developers to avoid assertions in the
COMPILER code, not everywhere else. It works just like an
assertion but without the possible overhead. The number is usually year/month/number but I understand that is not strictly adhered to.
I usually grep the compiler sources when I encounter an internal error and work my way backwards to see why.
If you encounter a internal error,
always report it,
unless you are writing your own compiler, that is..
The compiler devs try their best to give us a working compiler, but if push comes to shove they need a marker in the code without assertions: because that is a language feature and that is not there yet, without a compiler...
That is the easiest I can explain it.
You did not implement assertions either......