06:42
For simplicity, Java instructions are going to map one to one to IL instructions since that is the easiest thing to pretty much do. Of course there will be some operations which do not need the specific type stuff since I want to remove that need. That is the type of a variable will be done in the copy and not encoded in the instruction.
07:24
Okay, so I have an idea what to do for exceptions. For this I will have
a separate pre-built code area which is for the exception handlers which
will need to be processed. They will just be offset and be at the end of
the code area. Throws will just be jumps to exception handlers, although
I have not yet handled how propogating up the stack will be done but
perhaps that is done with a special instruction. This means that for
invokes or anything that could generate an instruction there will need to
be an instructional jump target. So for Java instructions which throw an
exception, I will need to pass a reference to a method which generates the
exception and then also pass the exception handler address. For simplicity
I want to completely decouple exception handling and just treat it as
normal methods, code jumps, and compares. Also for isinstance
I can just
do a table of sorts in the loaded class object which contains class
pointers to every instance that a class is. It works and is just a linear
scan. This keeps things a bit simple. At least when classes load at the
root they just need to copy all of the instance pointers as a set then
just the current class has to be scanned. Well the current class is scanned
and then for the extend and each interface all of those class pointers will
be loaded to the table. It is only recursive at a single level so that is
fine.