crowlogic / arb4j

arb4j is a Java API for the arbitrary precision ball arithmetic library found at http://arblib.org
Other
1 stars 0 forks source link

expression compiler: implement typecasting #365

Closed crowlogic closed 5 months ago

crowlogic commented 5 months ago
java.lang.VerifyError: Bad type on operand stack
Exception Details:
  Location:
    factorℝ2.evaluate(Ljava/lang/Object;IILjava/lang/Object;)Ljava/lang/Object; @27: invokevirtual
  Reason:
    Type 'arb/RealPolynomial' (current frame, stack[1]) is not assignable to 'arb/Real'
  Current Frame:
    bci: @27
    flags: { }
    locals: { 'factorℝ2', 'java/lang/Object', integer, integer, 'java/lang/Object' }
    stack: { 'arb/Real', 'arb/RealPolynomial' }
  Bytecode:
    0000000: 2ab4 000e 9a00 072a b600 122a b400 162b
    0000010: c000 18b6 001e 1904 c000 20b6 0024 1d19
    0000020: 04c0 001a b600 28b0                    
  Stackmap Table:
    same_frame(@11)

    at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3549)
    at java.base/java.lang.Class.getConstructor0(Class.java:3754)
    at java.base/java.lang.Class.getDeclaredConstructor(Class.java:2930)
    at arb4j@0.89/arb.expressions.Expression.constructNewInstance(Expression.java:578)
    at arb4j@0.89/arb.expressions.Expression.instantiate(Expression.java:1267)
    at arb4j@0.89/arb.expressions.nodes.nary.NAryOperation.registerFactorSubexpressionInstance(NAryOperation.java:674)
    at arb4j@0.89/arb.expressions.nodes.nary.NAryOperation.generateFactorClass(NAryOperation.java:362)
    at arb4j@0.89/arb.expressions.nodes.nary.NAryOperation.generate(NAryOperation.java:303)
    at arb4j@0.89/arb.expressions.nodes.binary.BinaryOperation.generate(BinaryOperation.java:148)
    at arb4j@0.89/arb.expressions.nodes.binary.BinaryOperation.generate(BinaryOperation.java:146)
    at arb4j@0.89/arb.expressions.Expression.generateEvaluationMethod(Expression.java:1030)
    at arb4j@0.89/arb.expressions.Expression.compile(Expression.java:532)
    at arb4j@0.89/arb.expressions.Compiler.express(Compiler.java:143)
    at arb4j@0.89/arb.expressions.nodes.nary.NAryOperation.generateFactorClass(NAryOperation.java:353)
    at arb4j@0.89/arb.expressions.nodes.nary.NAryOperation.generate(NAryOperation.java:303)
    at arb4j@0.89/arb.expressions.Expression.generateEvaluationMethod(Expression.java:1030)
    at arb4j@0.89/arb.expressions.Expression.compile(Expression.java:532)
    at arb4j@0.89/arb.expressions.Compiler.express(Compiler.java:143)
    at arb4j@0.89/arb.expressions.Compiler.express(Compiler.java:157)
    at arb4j@0.89/arb.expressions.Compiler.express(Compiler.java:109)
    at arb4j@0.89/arb.expressions.Expression.compile(Expression.java:218)
    at arb4j@0.89/arb.expressions.Expression.instantiate(Expression.java:165)
    at arb4j@0.89/arb.functions.real.RealPolynomialNullaryFunction.express(RealPolynomialNullaryFunction.java:20)
    at arb4j@0.89/arb.functions.polynomials.HypergeometricPolynomial.<init>(HypergeometricPolynomial.java:53)
    at arb4j@0.89/arb.functions.polynomials.HypergeometricPolynomialTest.testSum(HypergeometricPolynomialTest.java:73)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at junit@4.13.2/junit.framework.TestCase.runTest(TestCase.java:177)
    at junit@4.13.2/junit.framework.TestCase.runBare(TestCase.java:142)
    at junit@4.13.2/junit.framework.TestResult$1.protect(TestResult.java:122)
    at junit@4.13.2/junit.framework.TestResult.runProtected(TestResult.java:142)
    at junit@4.13.2/junit.framework.TestResult.run(TestResult.java:125)
    at junit@4.13.2/junit.framework.TestCase.run(TestCase.java:130)
    at junit@4.13.2/junit.framework.TestSuite.runTest(TestSuite.java:241)
    at junit@4.13.2/junit.framework.TestSuite.run(TestSuite.java:236)
    at junit@4.13.2/org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:90)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:93)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:40)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:529)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:756)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:452)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)
  public arb.Real evaluate(arb.Integer, int, int, arb.Real);
    descriptor: (Ljava/lang/Object;IILjava/lang/Object;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=5, args_size=5
         0: aload_0
         1: getfield      #14                 // Field isInitialized:Z
         4: ifne          11
         7: aload_0
         8: invokevirtual #18                 // Method initialize:()V
        11: aload_0
        12: getfield      #22                 // Field α:Larb/Real;
        15: aload_1
        16: checkcast     #24                 // class arb/Integer
        19: invokevirtual #30                 // Method arb/Real.get:(Larb/Integer;)Larb/Real;
        22: aload         4
        24: checkcast     #32                 // class arb/RealPolynomial
        27: invokevirtual #36                 // Method arb/Real.identity:()Larb/Real;
        30: iload_3
        31: aload         4
        33: checkcast     #26                 // class arb/Real
        36: invokevirtual #40                 // Method arb/Real.ascendingFactorial:(Larb/Real;ILarb/Real;)Larb/Real;
        39: areturn
      StackMapTable: number_of_entries = 1
        frame_type = 11 /* same */
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0      40     0  this   Lfactorℝ2;
            0      40     1    in   Larb/Integer;
            0      40     2 order   I
            0      40     3  bits   I
            0      40     4 result   Larb/Real;
    Signature: #10                          // (Larb/Integer;IILarb/Real;)Larb/Real;
crowlogic commented 5 months ago

that wasnt the issue.. it was incorrectly downcasting thr requested RealPolynomial resultType to the scalar Real type