I have been thinking and I think the BasicSequence stuff in String is a bit to complicated. It makes strings less sharable across VMs and such, and when I initialize strings it gets complicated.


Actually this is going to end up being much faster because there will be less overhead with strings!


I think I want to make it so math operations on long, float, and double are done purely in software. It will have some overhead but it should simplify the number of instructions that need to be handled. Additionally everything can be tuned purely to 32-bit registers. This way I do not need conversion for long and double types. I also would not need comparisons as well.


So not exactly sure what to do for the vtable. There is ClassDataV2 but that makes instance invocations so complicated. Like I have to load that, then load off that just to get the pointer I want to execute. So I wonder if there is a faster way? Maybe every object can instead just have a reference to its own vtable? That will just waste tons of space though. So just need to figure out the best way to store and then access these vtables because they are not constant for a class. Maybe just maybe the class ID and pointer into the class table is wrong? Like what if class names should just point to the actual class data for that class? That would simplify things a bit and I would not need a gigantic table to manage classes in. Although there would be no real way to have shared types which are compatible. But I guess that is just going to be how it is. Well, there could actually just be pre-initialized and fixed stuff for the bootstrap. Like anything will try to use any bootstrap defined classes first no matter what. I think in the long run this will be the simplest solution. It will complicate the initial bootstrap stage however but if everything were ClassDataV2 then suddenly I have access to instance objects because I can just static boot vtables and such. So at this point I may as well just go all the way and initialize everything at once. Things would be far easier if I had access to String instead of doing all of this magical raw UTF stuff. Initializing the first startup task would also be easier as well with instances. So then this is pretty much settled.


In the exception handler code, if an exception is not an instance of the exception then it jumps to the handler so I think this might have been why it has been messing up in the code. It should be not zero, not zero.


Problem with jvmIsInstance is that the instance lookup will never end when casting to a ClassDataV2 using pointerToObject, so I need an unchecked one.