< prev index next >

src/java.base/share/classes/jdk/internal/foreign/abi/LinkerOptions.java

Print this page
@@ -61,11 +61,15 @@
              LinkerOptionImpl opImpl = (LinkerOptionImpl) option;
              validator.accept(opImpl, desc);
              optionMap.put(option.getClass(), opImpl);
          }
  
-         return new LinkerOptions(optionMap);
+         LinkerOptions linkerOptions = new LinkerOptions(optionMap);
+         if (linkerOptions.hasCapturedCallState() && linkerOptions.isCritical()) {
+             throw new IllegalArgumentException("Incompatible linker options: captureCallState, critical");
+         }
+         return linkerOptions;
      }
  
      public static LinkerOptions empty() {
          return EMPTY;
      }

@@ -95,13 +99,13 @@
  
      public int firstVariadicArgIndex() {
          return getOption(FirstVariadicArg.class).index();
      }
  
-     public boolean isTrivial() {
-         IsTrivial it = getOption(IsTrivial.class);
-         return it != null;
+     public boolean isCritical() {
+         Critical c = getOption(Critical.class);
+         return c != null;
      }
  
      @Override
      public boolean equals(Object o) {
          if (this == o) return true;

@@ -113,11 +117,11 @@
      public int hashCode() {
          return Objects.hash(optionsMap);
      }
  
      public sealed interface LinkerOptionImpl extends Linker.Option
-             permits CaptureCallState, FirstVariadicArg, IsTrivial {
+             permits CaptureCallState, FirstVariadicArg, Critical {
          default void validateForDowncall(FunctionDescriptor descriptor) {
              throw new IllegalArgumentException("Not supported for downcall: " + this);
          }
  
          default void validateForUpcall(FunctionDescriptor descriptor) {

@@ -139,12 +143,12 @@
          public void validateForDowncall(FunctionDescriptor descriptor) {
              // done during construction
          }
      }
  
-     public record IsTrivial() implements LinkerOptionImpl {
-         public static IsTrivial INSTANCE = new IsTrivial();
+     public record Critical() implements LinkerOptionImpl {
+         public static Critical INSTANCE = new Critical();
  
          @Override
          public void validateForDowncall(FunctionDescriptor descriptor) {
              // always allowed
          }
< prev index next >