< prev index next >
src/java.base/share/classes/jdk/internal/nicl/Util.java
Print this page
*** 36,47 ****
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.NativeType;
import java.nicl.types.*;
import java.nicl.types.Array;
import java.nio.Buffer;
import java.nio.ByteBuffer;
--- 36,48 ----
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.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,103 ****
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);
}
public static Layout variadicLayout(Class<?> c) {
c = (Class<?>)unboxIfNeeded(c);
if (c.isPrimitive()) {
--- 81,91 ----
public static long alignUp(long n, long alignment) {
return (n + alignment - 1) & ~(alignment - 1);
}
public static boolean isCStruct(Class<?> clz) {
! return clz.isAnnotationPresent(NativeStruct.class);
}
public static Layout variadicLayout(Class<?> c) {
c = (Class<?>)unboxIfNeeded(c);
if (c.isPrimitive()) {
*** 114,128 ****
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();
}
public static Function functionof(Method m) {
NativeType nt = m.getAnnotation(NativeType.class);
return (Function)new DescriptorParser(nt.layout()).parseDescriptorOrLayouts().findFirst().get();
}
public static boolean isFunction(Method m) {
--- 102,134 ----
throw new IllegalArgumentException("Unhandled variadic argument class: " + c);
}
}
public static Layout layoutof(Class<?> c) {
! 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 >