diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/jni/JNI_C.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/jni/JNI_C.java index 17325b33650a5e6e338a27d9e0fc71eda1a57871..8b8e778a0eb4ae4ca2fdf599791cf15688f5d483 100644 --- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/jni/JNI_C.java +++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/jni/JNI_C.java @@ -41,12 +41,10 @@ public class JNI_C implements CRFFI { @Override @TruffleBoundary public void execute(NativeCallInfo nativeCallInfo, Object[] args, boolean hasStrings) { - synchronized (JNI_C.class) { - if (traceEnabled()) { - traceDownCall(nativeCallInfo.name, args); - } - c(nativeCallInfo.address.asAddress(), args, hasStrings); + if (traceEnabled()) { + traceDownCall(nativeCallInfo.name, args); } + c(nativeCallInfo.address.asAddress(), args, hasStrings); } } diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/jni/JNI_Call.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/jni/JNI_Call.java index ee3d5222ab9ef5942554bf0221b1231271614bd5..70ad5c69a4f2269113074d15c04c06c57c013e18 100644 --- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/jni/JNI_Call.java +++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/jni/JNI_Call.java @@ -52,53 +52,51 @@ public class JNI_Call implements CallRFFI { @Override @TruffleBoundary public Object execute(NativeCallInfo nativeCallInfo, Object[] args) { - synchronized (JNI_Call.class) { - long address = nativeCallInfo.address.asAddress(); - Object result = null; - if (traceEnabled()) { - traceDownCall(nativeCallInfo.name, args); + long address = nativeCallInfo.address.asAddress(); + Object result = null; + if (traceEnabled()) { + traceDownCall(nativeCallInfo.name, args); + } + try { + switch (args.length) { + case 0: + result = call0(address); + break; + case 1: + result = call1(address, args[0]); + break; + case 2: + result = call2(address, args[0], args[1]); + break; + case 3: + result = call3(address, args[0], args[1], args[2]); + break; + case 4: + result = call4(address, args[0], args[1], args[2], args[3]); + break; + case 5: + result = call5(address, args[0], args[1], args[2], args[3], args[4]); + break; + case 6: + result = call6(address, args[0], args[1], args[2], args[3], args[4], args[5]); + break; + case 7: + result = call7(address, args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + break; + case 8: + result = call8(address, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]); + break; + case 9: + result = call9(address, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]); + break; + default: + result = call(address, args); + break; } - try { - switch (args.length) { - case 0: - result = call0(address); - break; - case 1: - result = call1(address, args[0]); - break; - case 2: - result = call2(address, args[0], args[1]); - break; - case 3: - result = call3(address, args[0], args[1], args[2]); - break; - case 4: - result = call4(address, args[0], args[1], args[2], args[3]); - break; - case 5: - result = call5(address, args[0], args[1], args[2], args[3], args[4]); - break; - case 6: - result = call6(address, args[0], args[1], args[2], args[3], args[4], args[5]); - break; - case 7: - result = call7(address, args[0], args[1], args[2], args[3], args[4], args[5], args[6]); - break; - case 8: - result = call8(address, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]); - break; - case 9: - result = call9(address, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]); - break; - default: - result = call(address, args); - break; - } - return result; - } finally { - if (traceEnabled()) { - traceDownCallReturn(nativeCallInfo.name, result); - } + return result; + } finally { + if (traceEnabled()) { + traceDownCallReturn(nativeCallInfo.name, result); } } } diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_C.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_C.java index e869188edb5536668845518bb77468b88a57c634..c6a44575fbe04e3278328db0b434fb5601f18f72 100644 --- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_C.java +++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_C.java @@ -44,82 +44,70 @@ public class TruffleNFI_C implements CRFFI { @Specialization(guards = "args.length == 0") protected void invokeCall0(NativeCallInfo nativeCallInfo, @SuppressWarnings("unused") Object[] args, @SuppressWarnings("unused") boolean hasStrings, @Cached("createExecute(args.length)") Node executeNode) { - synchronized (TruffleNFI_Call.class) { - try { - TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, - nativeCallInfo.address.asTruffleObject(), "bind", "(): void"); - ForeignAccess.sendExecute(executeNode, callFunction); - } catch (InteropException ex) { - throw RInternalError.shouldNotReachHere(ex); - } + try { + TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, + nativeCallInfo.address.asTruffleObject(), "bind", "(): void"); + ForeignAccess.sendExecute(executeNode, callFunction); + } catch (InteropException ex) { + throw RInternalError.shouldNotReachHere(ex); } } @Specialization(guards = "args.length == 1") protected void invokeCall1(NativeCallInfo nativeCallInfo, Object[] args, @SuppressWarnings("unused") boolean hasStrings, @Cached("createExecute(args.length)") Node executeNode) { - synchronized (TruffleNFI_Call.class) { - try { - Object[] nargs = new Object[args.length]; - TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, - nativeCallInfo.address.asTruffleObject(), "bind", getSignature(args, nargs)); - ForeignAccess.sendExecute(executeNode, callFunction, nargs[0]); - } catch (InteropException ex) { - throw RInternalError.shouldNotReachHere(ex); - } + try { + Object[] nargs = new Object[args.length]; + TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, + nativeCallInfo.address.asTruffleObject(), "bind", getSignature(args, nargs)); + ForeignAccess.sendExecute(executeNode, callFunction, nargs[0]); + } catch (InteropException ex) { + throw RInternalError.shouldNotReachHere(ex); } } @Specialization(guards = "args.length == 2") protected void invokeCall2(NativeCallInfo nativeCallInfo, Object[] args, @SuppressWarnings("unused") boolean hasStrings, @Cached("createExecute(args.length)") Node executeNode) { - synchronized (TruffleNFI_Call.class) { - try { - Object[] nargs = new Object[args.length]; - TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, - nativeCallInfo.address.asTruffleObject(), "bind", getSignature(args, nargs)); - ForeignAccess.sendExecute(executeNode, callFunction, nargs[0], nargs[1]); - } catch (InteropException ex) { - throw RInternalError.shouldNotReachHere(ex); - } + try { + Object[] nargs = new Object[args.length]; + TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, + nativeCallInfo.address.asTruffleObject(), "bind", getSignature(args, nargs)); + ForeignAccess.sendExecute(executeNode, callFunction, nargs[0], nargs[1]); + } catch (InteropException ex) { + throw RInternalError.shouldNotReachHere(ex); } } @Specialization(guards = "args.length == 3") protected void invokeCall3(NativeCallInfo nativeCallInfo, Object[] args, @SuppressWarnings("unused") boolean hasStrings, @Cached("createExecute(args.length)") Node executeNode) { - synchronized (TruffleNFI_Call.class) { - try { - Object[] nargs = new Object[args.length]; - TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, - nativeCallInfo.address.asTruffleObject(), "bind", getSignature(args, nargs)); - ForeignAccess.sendExecute(executeNode, callFunction, nargs[0], nargs[1], nargs[2]); - } catch (InteropException ex) { - throw RInternalError.shouldNotReachHere(ex); - } + try { + Object[] nargs = new Object[args.length]; + TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, + nativeCallInfo.address.asTruffleObject(), "bind", getSignature(args, nargs)); + ForeignAccess.sendExecute(executeNode, callFunction, nargs[0], nargs[1], nargs[2]); + } catch (InteropException ex) { + throw RInternalError.shouldNotReachHere(ex); } } @Specialization(guards = "args.length == 4") protected void invokeCall4(NativeCallInfo nativeCallInfo, Object[] args, @SuppressWarnings("unused") boolean hasStrings, @Cached("createExecute(args.length)") Node executeNode) { - synchronized (TruffleNFI_Call.class) { - try { - Object[] nargs = new Object[args.length]; - TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, - nativeCallInfo.address.asTruffleObject(), "bind", getSignature(args, nargs)); - ForeignAccess.sendExecute(executeNode, callFunction, nargs[0], nargs[1], nargs[2], nargs[3]); - } catch (InteropException ex) { - throw RInternalError.shouldNotReachHere(ex); - } + try { + Object[] nargs = new Object[args.length]; + TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, + nativeCallInfo.address.asTruffleObject(), "bind", getSignature(args, nargs)); + ForeignAccess.sendExecute(executeNode, callFunction, nargs[0], nargs[1], nargs[2], nargs[3]); + } catch (InteropException ex) { + throw RInternalError.shouldNotReachHere(ex); } } @Fallback protected void invokeCallN(@SuppressWarnings("unused") NativeCallInfo nativeCallInfo, @SuppressWarnings("unused") Object[] args, @SuppressWarnings("unused") boolean hasStrings) { - synchronized (TruffleNFI_Call.class) { - throw RInternalError.unimplemented(".C (too many args)"); - } + throw RInternalError.unimplemented(".C (too many args)"); } public static Node createExecute(int n) { diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_Call.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_Call.java index 4c1547d092df23ed89a23f5a5ca64df3d0070e19..2e474e0ac64cc2758b89e88eb6158a6553e539e5 100644 --- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_Call.java +++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_Call.java @@ -236,178 +236,160 @@ public class TruffleNFI_Call implements CallRFFI { @Specialization(guards = "args.length == 0") protected Object invokeCall0(NativeCallInfo nativeCallInfo, Object[] args, @Cached("createExecute(args.length)") Node executeNode) { - synchronized (TruffleNFI_Call.class) { - Object result = null; - boolean isNullSetting = prepareCall(nativeCallInfo.name, args); - try { - TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, - nativeCallInfo.address.asTruffleObject(), "bind", "(): object"); - result = ForeignAccess.sendExecute(executeNode, callFunction); - return result; - } catch (InteropException ex) { - throw RInternalError.shouldNotReachHere(ex); - } finally { - prepareReturn(nativeCallInfo.name, result, isNullSetting); - } + Object result = null; + boolean isNullSetting = prepareCall(nativeCallInfo.name, args); + try { + TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, + nativeCallInfo.address.asTruffleObject(), "bind", "(): object"); + result = ForeignAccess.sendExecute(executeNode, callFunction); + return result; + } catch (InteropException ex) { + throw RInternalError.shouldNotReachHere(ex); + } finally { + prepareReturn(nativeCallInfo.name, result, isNullSetting); } } @Specialization(guards = "args.length == 1") protected Object invokeCall1(NativeCallInfo nativeCallInfo, Object[] args, @Cached("createExecute(args.length)") Node executeNode) { - synchronized (TruffleNFI_Call.class) { - Object result = null; - boolean isNullSetting = prepareCall(nativeCallInfo.name, args); - try { - TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, - nativeCallInfo.address.asTruffleObject(), "bind", "(object): object"); - result = ForeignAccess.sendExecute(executeNode, callFunction, args[0]); - return result; - } catch (InteropException ex) { - throw RInternalError.shouldNotReachHere(ex); - } finally { - prepareReturn(nativeCallInfo.name, result, isNullSetting); - } + Object result = null; + boolean isNullSetting = prepareCall(nativeCallInfo.name, args); + try { + TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, + nativeCallInfo.address.asTruffleObject(), "bind", "(object): object"); + result = ForeignAccess.sendExecute(executeNode, callFunction, args[0]); + return result; + } catch (InteropException ex) { + throw RInternalError.shouldNotReachHere(ex); + } finally { + prepareReturn(nativeCallInfo.name, result, isNullSetting); } } @Specialization(guards = "args.length == 2") protected Object invokeCall2(NativeCallInfo nativeCallInfo, Object[] args, @Cached("createExecute(args.length)") Node executeNode) { - synchronized (TruffleNFI_Call.class) { - Object result = null; - boolean isNullSetting = prepareCall(nativeCallInfo.name, args); - try { - TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, - nativeCallInfo.address.asTruffleObject(), "bind", "(object, object): object"); - result = ForeignAccess.sendExecute(executeNode, callFunction, args[0], args[1]); - return result; - } catch (InteropException ex) { - throw RInternalError.shouldNotReachHere(ex); - } finally { - prepareReturn(nativeCallInfo.name, result, isNullSetting); - } + Object result = null; + boolean isNullSetting = prepareCall(nativeCallInfo.name, args); + try { + TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, + nativeCallInfo.address.asTruffleObject(), "bind", "(object, object): object"); + result = ForeignAccess.sendExecute(executeNode, callFunction, args[0], args[1]); + return result; + } catch (InteropException ex) { + throw RInternalError.shouldNotReachHere(ex); + } finally { + prepareReturn(nativeCallInfo.name, result, isNullSetting); } } @Specialization(guards = "args.length == 3") protected Object invokeCall3(NativeCallInfo nativeCallInfo, Object[] args, @Cached("createExecute(args.length)") Node executeNode) { - synchronized (TruffleNFI_Call.class) { - Object result = null; - boolean isNullSetting = prepareCall(nativeCallInfo.name, args); - try { - TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, - nativeCallInfo.address.asTruffleObject(), "bind", "(object, object, object): object"); - result = ForeignAccess.sendExecute(executeNode, callFunction, args[0], args[1], args[2]); - return result; - } catch (InteropException ex) { - throw RInternalError.shouldNotReachHere(ex); - } finally { - prepareReturn(nativeCallInfo.name, result, isNullSetting); - } + Object result = null; + boolean isNullSetting = prepareCall(nativeCallInfo.name, args); + try { + TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, + nativeCallInfo.address.asTruffleObject(), "bind", "(object, object, object): object"); + result = ForeignAccess.sendExecute(executeNode, callFunction, args[0], args[1], args[2]); + return result; + } catch (InteropException ex) { + throw RInternalError.shouldNotReachHere(ex); + } finally { + prepareReturn(nativeCallInfo.name, result, isNullSetting); } } @Specialization(guards = "args.length == 4") protected Object invokeCall4(NativeCallInfo nativeCallInfo, Object[] args, @Cached("createExecute(args.length)") Node executeNode) { - synchronized (TruffleNFI_Call.class) { - Object result = null; - boolean isNullSetting = prepareCall(nativeCallInfo.name, args); - try { - TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, - nativeCallInfo.address.asTruffleObject(), "bind", "(object, object, object, object): object"); - result = ForeignAccess.sendExecute(executeNode, callFunction, args[0], args[1], args[2], - args[3]); - return result; - } catch (InteropException ex) { - throw RInternalError.shouldNotReachHere(ex); - } finally { - prepareReturn(nativeCallInfo.name, result, isNullSetting); - } + Object result = null; + boolean isNullSetting = prepareCall(nativeCallInfo.name, args); + try { + TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, + nativeCallInfo.address.asTruffleObject(), "bind", "(object, object, object, object): object"); + result = ForeignAccess.sendExecute(executeNode, callFunction, args[0], args[1], args[2], + args[3]); + return result; + } catch (InteropException ex) { + throw RInternalError.shouldNotReachHere(ex); + } finally { + prepareReturn(nativeCallInfo.name, result, isNullSetting); } } @Specialization(guards = "args.length == 5") protected Object invokeCall5(NativeCallInfo nativeCallInfo, Object[] args, @Cached("createExecute(args.length)") Node executeNode) { - synchronized (TruffleNFI_Call.class) { - Object result = null; - boolean isNullSetting = prepareCall(nativeCallInfo.name, args); - try { - TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, - nativeCallInfo.address.asTruffleObject(), "bind", "(object, object, object, object, object): object"); - result = ForeignAccess.sendExecute(executeNode, callFunction, args[0], args[1], - args[2], args[3], args[4]); - return result; - } catch (InteropException ex) { - throw RInternalError.shouldNotReachHere(ex); - } finally { - prepareReturn(nativeCallInfo.name, result, isNullSetting); - } + Object result = null; + boolean isNullSetting = prepareCall(nativeCallInfo.name, args); + try { + TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, + nativeCallInfo.address.asTruffleObject(), "bind", "(object, object, object, object, object): object"); + result = ForeignAccess.sendExecute(executeNode, callFunction, args[0], args[1], + args[2], args[3], args[4]); + return result; + } catch (InteropException ex) { + throw RInternalError.shouldNotReachHere(ex); + } finally { + prepareReturn(nativeCallInfo.name, result, isNullSetting); } } @Specialization(guards = "args.length == 6") protected Object invokeCall6(NativeCallInfo nativeCallInfo, Object[] args, @Cached("createExecute(args.length)") Node executeNode) { - synchronized (TruffleNFI_Call.class) { - Object result = null; - boolean isNullSetting = prepareCall(nativeCallInfo.name, args); - try { - TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, - nativeCallInfo.address.asTruffleObject(), "bind", "(object, object, object, object, object, object): object"); - result = ForeignAccess.sendExecute(executeNode, callFunction, args[0], args[1], - args[2], args[3], args[4], args[5]); - return result; - } catch (InteropException ex) { - throw RInternalError.shouldNotReachHere(ex); - } finally { - prepareReturn(nativeCallInfo.name, result, isNullSetting); - } + Object result = null; + boolean isNullSetting = prepareCall(nativeCallInfo.name, args); + try { + TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, + nativeCallInfo.address.asTruffleObject(), "bind", "(object, object, object, object, object, object): object"); + result = ForeignAccess.sendExecute(executeNode, callFunction, args[0], args[1], + args[2], args[3], args[4], args[5]); + return result; + } catch (InteropException ex) { + throw RInternalError.shouldNotReachHere(ex); + } finally { + prepareReturn(nativeCallInfo.name, result, isNullSetting); } } @Specialization(guards = "args.length == 7") protected Object invokeCall7(NativeCallInfo nativeCallInfo, Object[] args, @Cached("createExecute(args.length)") Node executeNode) { - synchronized (TruffleNFI_Call.class) { - Object result = null; - boolean isNullSetting = prepareCall(nativeCallInfo.name, args); - try { - TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, - nativeCallInfo.address.asTruffleObject(), "bind", "(object, object, object, object, object, object, object): object"); - result = ForeignAccess.sendExecute(executeNode, callFunction, args[0], args[1], - args[2], args[3], args[4], args[5], - args[6]); - return result; - } catch (InteropException ex) { - throw RInternalError.shouldNotReachHere(ex); - } finally { - prepareReturn(nativeCallInfo.name, result, isNullSetting); - } + Object result = null; + boolean isNullSetting = prepareCall(nativeCallInfo.name, args); + try { + TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, + nativeCallInfo.address.asTruffleObject(), "bind", "(object, object, object, object, object, object, object): object"); + result = ForeignAccess.sendExecute(executeNode, callFunction, args[0], args[1], + args[2], args[3], args[4], args[5], + args[6]); + return result; + } catch (InteropException ex) { + throw RInternalError.shouldNotReachHere(ex); + } finally { + prepareReturn(nativeCallInfo.name, result, isNullSetting); } } @Specialization(guards = "args.length == 8") protected Object invokeCall8(NativeCallInfo nativeCallInfo, Object[] args, @Cached("createExecute(args.length)") Node executeNode) { - synchronized (TruffleNFI_Call.class) { - Object result = null; - boolean isNullSetting = prepareCall(nativeCallInfo.name, args); - try { - TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, - nativeCallInfo.address.asTruffleObject(), "bind", "(object, object, object, object, object, object, object, object): object"); - result = ForeignAccess.sendExecute(executeNode, callFunction, args[0], args[1], - args[2], args[3], args[4], args[5], - args[6], args[7]); - return result; - } catch (InteropException ex) { - throw RInternalError.shouldNotReachHere(ex); - } finally { - prepareReturn(nativeCallInfo.name, result, isNullSetting); - } + Object result = null; + boolean isNullSetting = prepareCall(nativeCallInfo.name, args); + try { + TruffleObject callFunction = (TruffleObject) ForeignAccess.sendInvoke(bindNode, + nativeCallInfo.address.asTruffleObject(), "bind", "(object, object, object, object, object, object, object, object): object"); + result = ForeignAccess.sendExecute(executeNode, callFunction, args[0], args[1], + args[2], args[3], args[4], args[5], + args[6], args[7]); + return result; + } catch (InteropException ex) { + throw RInternalError.shouldNotReachHere(ex); + } finally { + prepareReturn(nativeCallInfo.name, result, isNullSetting); } } @@ -425,26 +407,24 @@ public class TruffleNFI_Call implements CallRFFI { @Override public void execute(NativeCallInfo nativeCallInfo, Object[] args) { - synchronized (TruffleNFI_Call.class) { - boolean isNullSetting = prepareCall(nativeCallInfo.name, args); - try { - switch (args.length) { - case 0: - TruffleObject callVoid0Function = (TruffleObject) ForeignAccess.sendInvoke(bindNode, - nativeCallInfo.address.asTruffleObject(), "bind", CallVoid0Sig); - ForeignAccess.sendExecute(execute0Node, callVoid0Function); - break; - case 1: - TruffleObject callVoid1Function = (TruffleObject) ForeignAccess.sendInvoke(bindNode, - nativeCallInfo.address.asTruffleObject(), "bind", CallVoid1Sig); - ForeignAccess.sendExecute(execute1Node, callVoid1Function, args[0]); - break; - } - } catch (InteropException ex) { - throw RInternalError.shouldNotReachHere(ex); - } finally { - prepareReturn(nativeCallInfo.name, null, isNullSetting); + boolean isNullSetting = prepareCall(nativeCallInfo.name, args); + try { + switch (args.length) { + case 0: + TruffleObject callVoid0Function = (TruffleObject) ForeignAccess.sendInvoke(bindNode, + nativeCallInfo.address.asTruffleObject(), "bind", CallVoid0Sig); + ForeignAccess.sendExecute(execute0Node, callVoid0Function); + break; + case 1: + TruffleObject callVoid1Function = (TruffleObject) ForeignAccess.sendInvoke(bindNode, + nativeCallInfo.address.asTruffleObject(), "bind", CallVoid1Sig); + ForeignAccess.sendExecute(execute1Node, callVoid1Function, args[0]); + break; } + } catch (InteropException ex) { + throw RInternalError.shouldNotReachHere(ex); + } finally { + prepareReturn(nativeCallInfo.name, null, isNullSetting); } } }