< prev index next >
src/java.base/share/classes/jdk/internal/nicl/Util.java
Print this page
@@ -36,12 +36,13 @@
import java.nicl.Scope;
import java.nicl.layout.Address;
import java.nicl.layout.Function;
import java.nicl.layout.Layout;
import java.nicl.layout.Sequence;
-import java.nicl.metadata.C;
-import java.nicl.metadata.CallingConvention;
+import java.nicl.metadata.NativeCallback;
+import java.nicl.metadata.NativeLocation;
+import java.nicl.metadata.NativeStruct;
import java.nicl.metadata.NativeType;
import java.nicl.types.*;
import java.nicl.types.Array;
import java.nio.Buffer;
import java.nio.ByteBuffer;
@@ -80,24 +81,11 @@
public static long alignUp(long n, long alignment) {
return (n + alignment - 1) & ~(alignment - 1);
}
public static boolean isCStruct(Class<?> clz) {
- if (!clz.isAnnotationPresent(C.class) ||
- !clz.isAnnotationPresent(NativeType.class)) {
- return false;
- }
- NativeType nt = clz.getAnnotation(NativeType.class);
- return nt.isRecordType();
- }
-
- public static boolean isFunction(Class<?> clz) {
- if (!isCStruct(clz)) {
- return false;
- }
-
- return clz.isAnnotationPresent(CallingConvention.class);
+ return clz.isAnnotationPresent(NativeStruct.class);
}
public static Layout variadicLayout(Class<?> c) {
c = (Class<?>)unboxIfNeeded(c);
if (c.isPrimitive()) {
@@ -114,15 +102,33 @@
throw new IllegalArgumentException("Unhandled variadic argument class: " + c);
}
}
public static Layout layoutof(Class<?> c) {
- NativeType nt = c.getAnnotation(NativeType.class);
- return new DescriptorParser(nt.layout()).parseLayout().findFirst().get();
+ String layout;
+ if (c.isAnnotationPresent(NativeStruct.class)) {
+ layout = c.getAnnotation(NativeStruct.class).value();
+ } else if (c.isAnnotationPresent(NativeType.class)) {
+ layout = c.getAnnotation(NativeType.class).layout();
+ } else {
+ throw new IllegalArgumentException("@NativeStruct or @NativeType expected: " + c);
+ }
+ return new DescriptorParser(layout).parseLayout().findFirst().get();
+ }
+
+ public static Function functionof(Class<?> c) {
+ if (! c.isAnnotationPresent(NativeCallback.class)) {
+ throw new IllegalArgumentException("@NativeCallback expected: " + c);
+ }
+ NativeCallback nc = c.getAnnotation(NativeCallback.class);
+ return (Function)new DescriptorParser(nc.value()).parseDescriptorOrLayouts().findFirst().get();
}
public static Function functionof(Method m) {
+ if (! m.isAnnotationPresent(NativeType.class)) {
+ throw new IllegalArgumentException("@NativeType expected: " + m);
+ }
NativeType nt = m.getAnnotation(NativeType.class);
return (Function)new DescriptorParser(nt.layout()).parseDescriptorOrLayouts().findFirst().get();
}
public static boolean isFunction(Method m) {
< prev index next >