Skip to content

Conversation

@graalvmbot
Copy link
Collaborator

The main goal of this PR is to have java-source-level lambdas and string concatenation working in crema.

  • When crema is enabled, don't add digest to lambda names

  • Add resolution for INVOKEDYNAMIC entries

    In the RuntimeInterpreterConstantPool, INVOKEDYNAMIC entries are resolved to a ResolvedInvokeDynamicConstant.
    Those hold information about the bootstrap method and a list of call site links. Call site links can either be successful or failed.
    Successful call site links contain an invoker method as well as an appendix.
    The index of the call site link is patched into the 2 empty bytes of the 4 bytes CPI of invokedynamic bytecodes.

  • Ignore parallel class loading

    • In order to make progress quickly we are more conservative in how we lock and ignore proper parallel class loading support for now.
  • Resolve polymorphic signature methods

  • Setup the ability to interpret polymorphic signature intrinsics

    • Polymorphic signature method instantiations have an "intrinsic" field set denoting which kind of intrinsic type it is.
    • The interpreter can dispatch to IntrinsicRoot.execute for intrinsics.
    • Stack walking knows about this interpreter method
    • The special interpreter methods should be marked as @NeverInline and don't need to be added as root.
    • Add support in the interpreter for invokeBasic
  • Add a quiet mode for InterpreterToVM.dispatchInvocation

  • When enabled, let crema handle MethodHandle, MemberName, & LambdaForm

    In that mode re-enable a number of JDK code path that are usually substituted.

  • Add InterpreterUtil.assertion

    This helps avoid AssertionError in the interpreter.

  • InterpreterResolvedJavaMethod: make sure some members can't be null.

  • InterpreterResolvedJavaMethod: Store internal flags and modifiers in an int

  • Crema: detect caller sensitive methods

@oracle-contributor-agreement oracle-contributor-agreement bot added the OCA Verified All contributors have signed the Oracle Contributor Agreement. label Oct 21, 2025
@graalvmbot graalvmbot force-pushed the gd/crema-indy branch 3 times, most recently from aecbdda to 6d8e85f Compare October 30, 2025 11:38
In the `RuntimeInterpreterConstantPool`, INVOKEDYNAMIC entries are resolved
to a `ResolvedInvokeDynamicConstant`.
Those hold information about the bootstrap method and a list of call
site links. Call site links can either be successful or failed.
Successful call site links contain an invoker method as well as an
appendix.
The index of the call site link is patched into the 2 empty bytes of the
4 bytes CPI of invokedynamic bytecodes.
* Polymorphic signature method instantiations have an "intrinsic" field
  set denoting which kind of intrinsic type it is.
* The interpreter can dispatch to `IntrinsicRoot.execute` for
  intrinsics.
* Stack walking knows about this interpeter method
* The special interpreter methods should be marked as `@NeverInline` and
  don't need to be added as root.
* Add support in the interpreter for `invokeBasic`
In that mode re-enable a number of JDK code path that are usually
substituted.
This helps avoid AssertionError in the interpreter.
When compiling with ECJ there are other methods in those classes.
@graalvmbot graalvmbot merged commit 3999122 into master Oct 31, 2025
13 checks passed
@graalvmbot graalvmbot deleted the gd/crema-indy branch October 31, 2025 11:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

OCA Verified All contributors have signed the Oracle Contributor Agreement.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants