Simn / genjvm

13 stars 1 forks source link

[quest] Haxe unit test verification endgame #43

Closed Simn closed 5 years ago

Simn commented 5 years ago

This commit shows what currently doesn't verify:

This sometimes fails with this error:

Exception in thread "main" java.lang.NoClassDefFoundError: haxe/test/Base$InnerClass
        at unit.TestMain.main(src/unit/TestMain.hx:81)
Caused by: java.lang.ClassNotFoundException: haxe.test.Base$InnerClass
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)

And sometimes with this:

Exception in thread "main" java.lang.VerifyError: Bad type on operand stack
Exception Details:
  Location:
    unit/TestJava.testIssue2964()V @313: checkcast
  Reason:
    Type integer (current frame, stack[2]) is not assignable to 'java/lang/Object'
  Current Frame:
    bci: @313
    flags: { }
    locals: { 'unit/TestJava', 'haxe/test/MyClass', 'java/lang/Boolean', null }
    stack: { 'unit/TestJava', 'haxe/test/MyClass', integer }

The latter is a cast(1, Integer) case which I don't think should be a thing... but we should be able to support it regardless.

The first one I have no idea.

Something still going wrong with crement ops. This is likely missing a cast to some expected type.

Exception in thread "main" java.lang.VerifyError: Bad type on operand stack
Exception Details:
  Location:
    unit/issues/Issue3118.test()V @27: invokevirtual
  Reason:
    Type 'java/lang/Object' (current frame, stack[0]) is not assignable to 'Array'
  Current Frame:
    bci: @27
    flags: { }
    locals: { 'unit/issues/Issue3118', 'unit/issues/Final' }
    stack: { 'java/lang/Object', 'java/lang/Integer' }

Another missing cast, probably after field access.

Exception in thread "main" java.lang.VerifyError: Bad type on operand stack
Exception Details:
  Location:
    unit/issues/Issue4002.hx_closure$0(Ljava/lang/Object;)I @1: getfield
  Reason:
    Type 'java/lang/Object' (current frame, stack[0]) is not assignable to 'unit/issues/_Issue4002/A'
  Current Frame:
    bci: @1
    flags: { }
    locals: { 'java/lang/Object' }
    stack: { 'java/lang/Object' }

That could be bad, or it could be another missing cast.

Exception in thread "main" java.lang.VerifyError: Bad type on operand stack
Exception Details:
  Location:
    unit/issues/Issue5124.<init>()V @4: invokevirtual
  Reason:
    Type uninitializedThis (current frame, stack[2]) is not assignable to 'java/lang/Object'
  Current Frame:
    bci: @4
    flags: { flagThisUninit }
    locals: { uninitializedThis }
    stack: { uninitializedThis, 'java/lang/invoke/MethodHandle', uninitializedThis }

Something wrong with constructor logic vs. field inits. Oh no...

42

Simn commented 5 years ago

We verify.