From 57fa631d9ce79788397670c3df628e2f91015dd6 Mon Sep 17 00:00:00 2001 From: stepan <stepan.sindelar@oracle.com> Date: Tue, 6 Mar 2018 15:11:10 +0100 Subject: [PATCH] Auto-generate wrappers for RFFI functions in testrffi --- .../r/ffi/codegen/FFITestsCodeGen.java | 208 ++++ .../ffi/impl/common/JavaUpCallsRFFIImpl.java | 18 +- .../r/ffi/impl/upcalls/FastRUpCalls.java | 44 + .../r/ffi/impl/upcalls/StdUpCallsRFFI.java | 34 +- .../r/ffi/impl/upcalls/UpCallsRFFI.java | 4 +- .../ffi/impl/upcalls/VariableUpCallsRFFI.java | 5 +- .../fficall/src/common/rffi_upcallsindex.h | 12 +- .../Rinternals_truffle_common.h | 2 +- .../fficall/src/truffle_common/Rmath.c | 6 +- com.oracle.truffle.r.native/version.source | 2 +- .../packages/testrffi/testrffi/NAMESPACE | 1 + .../packages/testrffi/testrffi/R/testrffi.R | 229 +++++ .../packages/testrffi/testrffi/src/init.c | 231 +++++ .../testrffi/testrffi/src/rffiwrappers.c | 973 ++++++++++++++++++ .../testrffi/testrffi/src/rffiwrappers.h | 483 +++++++++ .../packages/testrffi/testrffi/src/testrffi.c | 5 +- mx.fastr/suite.py | 2 +- 17 files changed, 2210 insertions(+), 49 deletions(-) create mode 100644 com.oracle.truffle.r.ffi.codegen/src/com/oracle/truffle/r/ffi/codegen/FFITestsCodeGen.java create mode 100644 com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/upcalls/FastRUpCalls.java create mode 100644 com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/rffiwrappers.c create mode 100644 com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/rffiwrappers.h diff --git a/com.oracle.truffle.r.ffi.codegen/src/com/oracle/truffle/r/ffi/codegen/FFITestsCodeGen.java b/com.oracle.truffle.r.ffi.codegen/src/com/oracle/truffle/r/ffi/codegen/FFITestsCodeGen.java new file mode 100644 index 0000000000..848b84ff86 --- /dev/null +++ b/com.oracle.truffle.r.ffi.codegen/src/com/oracle/truffle/r/ffi/codegen/FFITestsCodeGen.java @@ -0,0 +1,208 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.truffle.r.ffi.codegen; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Method; +import java.lang.reflect.Parameter; +import java.util.Arrays; +import java.util.Calendar; +import java.util.HashSet; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import com.oracle.truffle.r.ffi.impl.upcalls.StdUpCallsRFFI; +import com.oracle.truffle.r.ffi.impl.upcalls.VariableUpCallsRFFI; +import com.oracle.truffle.r.ffi.processor.RFFICpointer; +import com.oracle.truffle.r.ffi.processor.RFFICstring; + +/** + * Generates 1) C wrapper that calls each RFFI function and converts between SEXP and primitive + * types, 2) sequence of calls to CALLDEF to register all those functions as ".Call" targets. + * + * This creates R interface to all applicable RFFI functions. RFFI functions working with raw + * pointers are excluded. + * + * The generated code is to be used in testrffi package located in + * "com.oracle.truffle.r.test.native/packages/testrffi/testrffi". + */ +public class FFITestsCodeGen { + private static final String FUN_PREFIX = "api_"; + private static final HashSet<String> IGNORE_FUNS = new HashSet<>(Arrays.asList("Rf_duplicate", "SET_TYPEOF_FASTR", "R_ToplevelExec", "R_CleanUp", "R_ParseVector", "octsize", "R_NewHashedEnv")); + + public static void main(String[] args) { + if (Arrays.stream(args).anyMatch(x -> "-init".equals(x))) { + generateCInit(); + } else if (Arrays.stream(args).anyMatch(x -> "-h".equals(x))) { + generateH(); + } else if (Arrays.stream(args).anyMatch(x -> "-r".equals(x))) { + generateR(); + } else { + generateC(); + } + } + + private static void generateR() { + System.out.println("#############"); + System.out.printf("# Code generated by %s class run with option '-r'\n", FFITestsCodeGen.class.getName()); + System.out.println("# R wrappers for all the generated RFFI C wrappers\n"); + getFFIMethods().forEach(method -> { + System.out.printf("api.%s <- function(...) .Call(C_api_%s, ...)\n", getName(method), getName(method)); + }); + } + + private static void generateCInit() { + System.out.printf("// Code generated by %s class run with option '-init'\n", FFITestsCodeGen.class.getName()); + System.out.println("// The following code registers all C functions that wrap RFFI functions and convert SEXP <-> primitive types."); + System.out.println("// The definitions of the C functions could be generated by the same Java class (but run without any option)"); + System.out.println("// RFFI functions that take/return C pointers are ignored"); + getFFIMethods().forEach(method -> { + System.out.printf("CALLDEF(%s%s, %d),\n", FUN_PREFIX, getName(method), method.getParameterCount()); + }); + System.out.println("// ---- end of generated code"); + } + + private static void generateH() { + System.out.println(COPYRIGHT); + System.out.printf("// Code generated by %s class run with option '-h'\n", FFITestsCodeGen.class.getName()); + System.out.println("// See the corresponding C file for more details"); + printIncludes(); + getFFIMethods().forEach(method -> { + System.out.println(getDeclaration(method) + ";\n"); + }); + } + + private static void generateC() { + System.out.println(COPYRIGHT); + System.out.printf("// Code generated by %s class", FFITestsCodeGen.class.getName()); + System.out.println("// The following code defines a 'SEXP' variant of every RFFI function implemented in FastR"); + System.out.println("// Run the same Java class with '-init' option to get sequence of CALLDEF statements that register those functions for use from R"); + System.out.println("// RFFI functions that take/return C pointers are ignored"); + printIncludes(); + System.out.println("#include \"rffiwrappers.h\"\n"); + System.out.println("#pragma GCC diagnostic push"); + System.out.println("#pragma GCC diagnostic ignored \"-Wint-conversion\"\n"); + System.out.println("#pragma GCC diagnostic ignored \"-Wincompatible-pointer-types\"\n"); + getFFIMethods().forEach(method -> { + System.out.println(getDeclaration(method) + " {"); + String stmt = String.format("%s(%s)", getName(method), Arrays.stream(method.getParameters()).map(FFITestsCodeGen::toCValue).collect(Collectors.joining(", "))); + System.out.println(" " + getReturnStmt(method.getReturnType(), stmt) + ';'); + if (method.getReturnType() == void.class) { + System.out.println(" return R_NilValue;"); + } + System.out.println("}\n"); + }); + System.out.println("#pragma GCC diagnostic pop"); + System.out.println("#pragma GCC diagnostic pop"); + } + + private static String getDeclaration(Method method) { + return String.format("SEXP %s%s(", FUN_PREFIX, getName(method)) + + Arrays.stream(method.getParameters()).map(p -> "SEXP " + p.getName()).collect(Collectors.joining(", ")) + ')'; + } + + private static String getName(Method m) { + return m.getName().replace("_FASTR", "").replace("FASTR_", ""); + } + + private static void printIncludes() { + System.out.print("#define NO_FASTR_REDEFINE\n" + + "#include <R.h>\n" + + "#include <Rdefines.h>\n" + + "#include <Rinterface.h>\n" + + "#include <Rinternals.h>\n" + + "#include <Rinterface.h>\n" + + "#include <R_ext/Parse.h>\n" + + "#include <R_ext/Connections.h>\n" + + "#include <Rmath.h>\n\n"); + } + + private static Stream<Method> getFFIMethods() { + return Arrays.stream(StdUpCallsRFFI.class.getMethods()).filter(m -> !ignoreMethod(m)); + } + + // ignore methods with C pointers, we only support SEXP, strings and primitives + private static boolean ignoreMethod(Method method) { + return IGNORE_FUNS.contains(method.getName()) || method.getAnnotation(RFFICpointer.class) != null || + Arrays.stream(method.getParameterAnnotations()).anyMatch(FFITestsCodeGen::anyCPointer); + } + + private static String toCValue(Parameter param) { + if (param.getAnnotation(RFFICstring.class) != null || param.getType() == String.class) { + return "R_CHAR(STRING_ELT(" + param.getName() + ", 0))"; + } else if (param.getType() == int.class || param.getType() == long.class || param.getType() == boolean.class) { + return "INTEGER_VALUE(" + param.getName() + ")"; + } else if (param.getType() == double.class) { + return "NUMERIC_VALUE(" + param.getName() + ")"; + } else { + return param.getName(); + } + } + + private static String getReturnStmt(Class<?> returnType, String value) { + return returnType == void.class ? value : ("return " + fromCValueToSEXP(returnType, value)); + } + + private static String fromCValueToSEXP(Class<?> fromType, String value) { + if (fromType == int.class || fromType == long.class) { + return "ScalarInteger(" + value + ")"; + } else if (fromType == double.class) { + return "ScalarReal(" + value + ")"; + } else if (fromType == boolean.class) { + return "ScalarLogical(" + value + ")"; + } else if (fromType == String.class) { + return "ScalarString(Rf_mkString(" + value + "))"; + } else if (fromType == Object.class) { + return value; + } else { + throw new RuntimeException("Unsupported return type of RFFI function: " + fromType.getSimpleName()); + } + } + + private static boolean anyCPointer(Annotation[] items) { + return Arrays.stream(items).anyMatch(a -> a.annotationType() == RFFICpointer.class); + } + + private static final String COPYRIGHT = "/*\n" + + " * Copyright (c) 2018, YEAR, Oracle and/or its affiliates. All rights reserved.\n" + + " * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.\n" + + " *\n" + + " * This code is free software; you can redistribute it and/or modify it\n" + + " * under the terms of the GNU General Public License version 2 only, as\n" + + " * published by the Free Software Foundation.\n" + + " *\n" + + " * This code is distributed in the hope that it will be useful, but WITHOUT\n" + + " * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n" + + " * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License\n" + + " * version 2 for more details (a copy is included in the LICENSE file that\n" + + " * accompanied this code).\n" + + " *\n" + + " * You should have received a copy of the GNU General Public License version\n" + + " * 2 along with this work; if not, write to the Free Software Foundation,\n" + + " * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n" + + " *\n" + + " * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA\n" + + " * or visit www.oracle.com if you need additional information or have any\n" + + " * questions.\n" + + " */\n".replace("YEAR", "" + Calendar.getInstance().get(Calendar.YEAR)); +} diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/common/JavaUpCallsRFFIImpl.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/common/JavaUpCallsRFFIImpl.java index 91b9929d96..ad28b7e947 100644 --- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/common/JavaUpCallsRFFIImpl.java +++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/common/JavaUpCallsRFFIImpl.java @@ -172,7 +172,7 @@ public abstract class JavaUpCallsRFFIImpl implements UpCallsRFFI { } @Override - public RDoubleVector Rf_ScalarDouble(double value) { + public RDoubleVector Rf_ScalarReal(double value) { return RDataFactory.createDoubleVectorFromScalar(value); } @@ -569,7 +569,7 @@ public abstract class JavaUpCallsRFFIImpl implements UpCallsRFFI { } @Override - public Object SET_NAMED_FASTR(Object x, int v) { + public void SET_NAMED_FASTR(Object x, int v) { // Note: In GNUR this is a macro that sets the sxpinfo.named regardless of whether it makes // sense to name the actual value, for compatibilty we simply ignore values that are not // RShareable, e.g. RSymbol. However we ignore and report attemps to decrease the ref-count, @@ -579,19 +579,16 @@ public abstract class JavaUpCallsRFFIImpl implements UpCallsRFFI { int actual = getNamed(r); if (v < actual) { RError.warning(RError.NO_CALLER, RError.Message.GENERIC, "Native code attempted to decrease the reference count. This operation is ignored."); - return RNull.instance; } if (v == 2) { // we play it safe: if the caller wants this instance to be shared, they may expect // it to never become non-shared again, which could happen in FastR r.makeSharedPermanent(); - return RNull.instance; } if (v == 1 && r.isTemporary()) { r.incRefCount(); } } - return RNull.instance; } private static int getNamed(RShareable r) { @@ -709,7 +706,7 @@ public abstract class JavaUpCallsRFFIImpl implements UpCallsRFFI { } @Override - public Object SET_TAG(Object x, Object y) { + public void SET_TAG(Object x, Object y) { if (x instanceof RPairList) { ((RPairList) x).setTag(y); } else { @@ -717,7 +714,6 @@ public abstract class JavaUpCallsRFFIImpl implements UpCallsRFFI { // at the moment, this can only be used to null out the pointer ((RExternalPtr) x).setTag(y); } - return y; } @Override @@ -1631,17 +1627,17 @@ public abstract class JavaUpCallsRFFIImpl implements UpCallsRFFI { } @Override - public double Rf_dnorm(double a, double b, double c, int d) { + public double Rf_dnorm4(double a, double b, double c, int d) { throw implementedAsNode(); } @Override - public double Rf_pnorm(double a, double b, double c, int d, int e) { + public double Rf_pnorm5(double a, double b, double c, int d, int e) { throw implementedAsNode(); } @Override - public double Rf_qnorm(double a, double b, double c, int d, int e) { + public double Rf_qnorm5(double a, double b, double c, int d, int e) { throw implementedAsNode(); } @@ -2094,7 +2090,7 @@ public abstract class JavaUpCallsRFFIImpl implements UpCallsRFFI { } @Override - public Object Rf_NonNullStringMatch(Object s, Object t) { + public boolean Rf_NonNullStringMatch(Object s, Object t) { throw implementedAsNode(); } diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/upcalls/FastRUpCalls.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/upcalls/FastRUpCalls.java new file mode 100644 index 0000000000..ce7ede653d --- /dev/null +++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/upcalls/FastRUpCalls.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.truffle.r.ffi.impl.upcalls; + +/** + * Up-calls specific to FastR used in FastR native code and not exported as part of any API. + */ +public interface FastRUpCalls { + // Checkstyle: stop method name check + + Object R_MethodsNamespace(); + + int FASTR_getConnectionChar(Object obj); + + Object getSummaryDescription(Object x); + + Object getConnectionClassString(Object x); + + Object getOpenModeString(Object x); + + boolean isSeekable(Object x); + + void restoreHandlerStacks(Object savedHandlerStack); +} diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/upcalls/StdUpCallsRFFI.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/upcalls/StdUpCallsRFFI.java index 1e4f75b9fa..0e2b98f281 100644 --- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/upcalls/StdUpCallsRFFI.java +++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/upcalls/StdUpCallsRFFI.java @@ -152,7 +152,7 @@ public interface StdUpCallsRFFI { Object Rf_ScalarLogical(int value); - Object Rf_ScalarDouble(double value); + Object Rf_ScalarReal(double value); Object Rf_ScalarString(Object value); @@ -242,14 +242,19 @@ public interface StdUpCallsRFFI { void SET_VECTOR_ELT(Object x, long i, Object v); + @RFFICpointer Object RAW(Object x); + @RFFICpointer Object LOGICAL(Object x); + @RFFICpointer Object INTEGER(Object x); + @RFFICpointer Object REAL(Object x); + @RFFICpointer Object COMPLEX(Object x); Object STRING_ELT(Object x, long i); @@ -258,7 +263,7 @@ public interface StdUpCallsRFFI { int NAMED(Object x); - Object SET_NAMED_FASTR(Object x, int v); + void SET_NAMED_FASTR(Object x, int v); Object SET_TYPEOF_FASTR(Object x, int v); @@ -310,7 +315,7 @@ public interface StdUpCallsRFFI { @RFFIUpCallNode(CDDDRNode.class) Object CDDDR(Object e); - Object SET_TAG(Object x, Object y); + void SET_TAG(Object x, Object y); @RFFIUpCallNode(SETCARNode.class) Object SETCAR(Object x, Object y); @@ -385,8 +390,6 @@ public interface StdUpCallsRFFI { Object R_ToplevelExec(); - void restoreHandlerStacks(Object savedHandlerStack); - int RDEBUG(Object x); void SET_RDEBUG(Object x, int v); @@ -448,6 +451,7 @@ public interface StdUpCallsRFFI { Object PRCODE(Object x); + @RFFICpointer Object R_CHAR(Object x); @RFFIUpCallNode(NewCustomConnectionNode.class) @@ -459,27 +463,15 @@ public interface StdUpCallsRFFI { Object R_GetConnection(int fd); - Object getSummaryDescription(Object x); - - Object getConnectionClassString(Object x); - - Object getOpenModeString(Object x); - - boolean isSeekable(Object x); - @RFFIUpCallNode(MiscNodes.RDoSlotNode.class) Object R_do_slot(Object o, Object name); @RFFIUpCallNode(MiscNodes.RDoSlotAssignNode.class) Object R_do_slot_assign(Object o, Object name, Object value); - Object R_MethodsNamespace(); - @RFFIUpCallNode(Str2TypeNode.class) int Rf_str2type(@RFFICstring(convert = false) Object name); - int FASTR_getConnectionChar(Object obj); - @RFFIUpCallNode(value = RandFunctionsNodes.RandFunction3_1Node.class, functionClass = Unif.DUnif.class) double Rf_dunif(double a, double b, double c, int d); @@ -517,13 +509,13 @@ public interface StdUpCallsRFFI { double Rf_rnchisq(double a, double b); @RFFIUpCallNode(value = RandFunctionsNodes.RandFunction3_1Node.class, functionClass = DNorm.class) - double Rf_dnorm(double a, double b, double c, int d); + double Rf_dnorm4(double a, double b, double c, int d); @RFFIUpCallNode(value = RandFunctionsNodes.RandFunction3_2Node.class, functionClass = Pnorm.class) - double Rf_pnorm(double a, double b, double c, int d, int e); + double Rf_pnorm5(double a, double b, double c, int d, int e); @RFFIUpCallNode(value = RandFunctionsNodes.RandFunction3_2Node.class, functionClass = Qnorm.class) - double Rf_qnorm(double a, double b, double c, int d, int e); + double Rf_qnorm5(double a, double b, double c, int d, int e); @RFFIUpCallNode(value = RandFunctionsNodes.RandFunction2Node.class, functionClass = Rnorm.class) double Rf_rnorm(double a, double b); @@ -789,7 +781,7 @@ public interface StdUpCallsRFFI { Object Rf_match(Object itables, Object ix, int nmatch); @RFFIUpCallNode(MatchNodes.NonNullStringMatchNode.class) - Object Rf_NonNullStringMatch(Object s, Object t); + boolean Rf_NonNullStringMatch(Object s, Object t); @RFFIUpCallNode(MiscNodes.RHasSlotNode.class) int R_has_slot(Object container, Object name); diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/upcalls/UpCallsRFFI.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/upcalls/UpCallsRFFI.java index 5170de9ef0..a1e3d36abf 100644 --- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/upcalls/UpCallsRFFI.java +++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/upcalls/UpCallsRFFI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,6 +28,6 @@ import com.oracle.truffle.r.ffi.processor.RFFIUpCallRoot; * Aggregation of all the FFI upcall interfaces. */ @RFFIUpCallRoot -public interface UpCallsRFFI extends StdUpCallsRFFI, IDEUpCallsRFFI, VariableUpCallsRFFI, DLLUpCallsRFFI, MemoryUpCallsRFFI { +public interface UpCallsRFFI extends StdUpCallsRFFI, IDEUpCallsRFFI, VariableUpCallsRFFI, DLLUpCallsRFFI, MemoryUpCallsRFFI, FastRUpCalls { } diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/upcalls/VariableUpCallsRFFI.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/upcalls/VariableUpCallsRFFI.java index 66e031b6b0..c3d4335038 100644 --- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/upcalls/VariableUpCallsRFFI.java +++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/upcalls/VariableUpCallsRFFI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,6 +23,7 @@ package com.oracle.truffle.r.ffi.impl.upcalls; import com.oracle.truffle.api.interop.TruffleObject; +import com.oracle.truffle.r.ffi.processor.RFFICpointer; /** * This exists because {@link TruffleObject} instances may not always be storable in memory, in all @@ -45,10 +46,12 @@ public interface VariableUpCallsRFFI { // These may need to be upcalled in some implementations. + @RFFICpointer default Object R_Home() { return null; } + @RFFICpointer default Object R_TempDir() { return null; } diff --git a/com.oracle.truffle.r.native/fficall/src/common/rffi_upcallsindex.h b/com.oracle.truffle.r.native/fficall/src/common/rffi_upcallsindex.h index 17342d6c37..3174c03b89 100644 --- a/com.oracle.truffle.r.native/fficall/src/common/rffi_upcallsindex.h +++ b/com.oracle.truffle.r.native/fficall/src/common/rffi_upcallsindex.h @@ -95,9 +95,9 @@ #define Rf_NonNullStringMatch_x 90 #define Rf_PairToVectorList_x 91 #define Rf_PrintValue_x 92 -#define Rf_ScalarDouble_x 93 -#define Rf_ScalarInteger_x 94 -#define Rf_ScalarLogical_x 95 +#define Rf_ScalarInteger_x 93 +#define Rf_ScalarLogical_x 94 +#define Rf_ScalarReal_x 95 #define Rf_ScalarString_x 96 #define Rf_VectorToPairList_x 97 #define Rf_allocArray_x 98 @@ -133,7 +133,7 @@ #define Rf_dnbinom_mu_x 128 #define Rf_dnchisq_x 129 #define Rf_dnf_x 130 -#define Rf_dnorm_x 131 +#define Rf_dnorm4_x 131 #define Rf_dnt_x 132 #define Rf_dpois_x 133 #define Rf_dsignrank_x 134 @@ -179,7 +179,7 @@ #define Rf_pnbinom_mu_x 174 #define Rf_pnchisq_x 175 #define Rf_pnf_x 176 -#define Rf_pnorm_x 177 +#define Rf_pnorm5_x 177 #define Rf_pnt_x 178 #define Rf_ppois_x 179 #define Rf_protect_x 180 @@ -205,7 +205,7 @@ #define Rf_qnbinom_mu_x 200 #define Rf_qnchisq_x 201 #define Rf_qnf_x 202 -#define Rf_qnorm_x 203 +#define Rf_qnorm5_x 203 #define Rf_qnt_x 204 #define Rf_qpois_x 205 #define Rf_qsignrank_x 206 diff --git a/com.oracle.truffle.r.native/fficall/src/truffle_common/Rinternals_truffle_common.h b/com.oracle.truffle.r.native/fficall/src/truffle_common/Rinternals_truffle_common.h index 5edea4d43b..70f1a481e0 100644 --- a/com.oracle.truffle.r.native/fficall/src/truffle_common/Rinternals_truffle_common.h +++ b/com.oracle.truffle.r.native/fficall/src/truffle_common/Rinternals_truffle_common.h @@ -309,7 +309,7 @@ SEXP Rf_ScalarInteger(int value) { SEXP Rf_ScalarReal(double value) { TRACE0(); - SEXP result = ((call_Rf_ScalarReal) callbacks[Rf_ScalarDouble_x])(value); + SEXP result = ((call_Rf_ScalarReal) callbacks[Rf_ScalarReal_x])(value); checkExitCall(); return result; } diff --git a/com.oracle.truffle.r.native/fficall/src/truffle_common/Rmath.c b/com.oracle.truffle.r.native/fficall/src/truffle_common/Rmath.c index b06cd4087e..8abb058e00 100644 --- a/com.oracle.truffle.r.native/fficall/src/truffle_common/Rmath.c +++ b/com.oracle.truffle.r.native/fficall/src/truffle_common/Rmath.c @@ -24,7 +24,7 @@ #include "rffi_upcalls.h" double Rf_dnorm(double a, double b, double c, int d) { - return ((call_Rf_dnorm) callbacks[Rf_dnorm_x])(a, b, c, d); + return ((call_Rf_dnorm) callbacks[Rf_dnorm4_x])(a, b, c, d); } double Rf_dnorm4(double a, double b, double c, int d) { @@ -32,7 +32,7 @@ double Rf_dnorm4(double a, double b, double c, int d) { } double Rf_pnorm(double a, double b, double c, int d, int e) { - return ((call_Rf_pnorm) callbacks[Rf_pnorm_x])(a, b, c, d, e); + return ((call_Rf_pnorm) callbacks[Rf_pnorm5_x])(a, b, c, d, e); } double Rf_pnorm5(double a, double b, double c, int d, int e) { @@ -40,7 +40,7 @@ double Rf_pnorm5(double a, double b, double c, int d, int e) { } double Rf_qnorm(double a, double b, double c, int d, int e) { - return ((call_Rf_qnorm) callbacks[Rf_qnorm_x])(a, b, c, d, e); + return ((call_Rf_qnorm) callbacks[Rf_qnorm5_x])(a, b, c, d, e); } double Rf_qnorm5(double a, double b, double c, int d, int e) { diff --git a/com.oracle.truffle.r.native/version.source b/com.oracle.truffle.r.native/version.source index e1617e842a..8c61d23e12 100644 --- a/com.oracle.truffle.r.native/version.source +++ b/com.oracle.truffle.r.native/version.source @@ -1 +1 @@ -57 +58 diff --git a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/NAMESPACE b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/NAMESPACE index d4740fb354..8e044208eb 100644 --- a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/NAMESPACE +++ b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/NAMESPACE @@ -3,3 +3,4 @@ useDynLib(testrffi, .registration = TRUE, .fixes = "C_") ## and exported functions exportPattern("rffi\\..*") +exportPattern("api\\..*") \ No newline at end of file diff --git a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/R/testrffi.R b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/R/testrffi.R index 54ea96bf5f..4f186c345d 100644 --- a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/R/testrffi.R +++ b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/R/testrffi.R @@ -224,3 +224,232 @@ rffi.RfRMultinom <- function() { rffi.RfFunctions <- function() { .Call('test_RfFunctions') } + +############# +# Code generated by com.oracle.truffle.r.ffi.codegen.FFITestsCodeGen class run with option '-r' +# R wrappers for all the generated RFFI C wrappers + +api.Rf_ScalarInteger <- function(...) .Call(C_api_Rf_ScalarInteger, ...) +api.Rf_ScalarLogical <- function(...) .Call(C_api_Rf_ScalarLogical, ...) +api.Rf_ScalarString <- function(...) .Call(C_api_Rf_ScalarString, ...) +api.Rf_asInteger <- function(...) .Call(C_api_Rf_asInteger, ...) +api.Rf_asReal <- function(...) .Call(C_api_Rf_asReal, ...) +api.Rf_asLogical <- function(...) .Call(C_api_Rf_asLogical, ...) +api.Rf_ScalarReal <- function(...) .Call(C_api_Rf_ScalarReal, ...) +api.Rf_asChar <- function(...) .Call(C_api_Rf_asChar, ...) +api.Rf_coerceVector <- function(...) .Call(C_api_Rf_coerceVector, ...) +api.Rf_mkCharLenCE <- function(...) .Call(C_api_Rf_mkCharLenCE, ...) +api.Rf_cons <- function(...) .Call(C_api_Rf_cons, ...) +api.Rf_defineVar <- function(...) .Call(C_api_Rf_defineVar, ...) +api.R_getClassDef <- function(...) .Call(C_api_R_getClassDef, ...) +api.R_do_MAKE_CLASS <- function(...) .Call(C_api_R_do_MAKE_CLASS, ...) +api.R_do_new_object <- function(...) .Call(C_api_R_do_new_object, ...) +api.Rf_findVar <- function(...) .Call(C_api_Rf_findVar, ...) +api.Rf_findVarInFrame <- function(...) .Call(C_api_Rf_findVarInFrame, ...) +api.Rf_findVarInFrame3 <- function(...) .Call(C_api_Rf_findVarInFrame3, ...) +api.ATTRIB <- function(...) .Call(C_api_ATTRIB, ...) +api.Rf_getAttrib <- function(...) .Call(C_api_Rf_getAttrib, ...) +api.Rf_setAttrib <- function(...) .Call(C_api_Rf_setAttrib, ...) +api.Rf_inherits <- function(...) .Call(C_api_Rf_inherits, ...) +api.Rf_install <- function(...) .Call(C_api_Rf_install, ...) +api.Rf_installChar <- function(...) .Call(C_api_Rf_installChar, ...) +api.Rf_lengthgets <- function(...) .Call(C_api_Rf_lengthgets, ...) +api.Rf_isString <- function(...) .Call(C_api_Rf_isString, ...) +api.Rf_isNull <- function(...) .Call(C_api_Rf_isNull, ...) +api.Rf_PairToVectorList <- function(...) .Call(C_api_Rf_PairToVectorList, ...) +api.Rf_error <- function(...) .Call(C_api_Rf_error, ...) +api.Rf_warning <- function(...) .Call(C_api_Rf_warning, ...) +api.Rf_warningcall <- function(...) .Call(C_api_Rf_warningcall, ...) +api.Rf_errorcall <- function(...) .Call(C_api_Rf_errorcall, ...) +api.Rf_allocVector <- function(...) .Call(C_api_Rf_allocVector, ...) +api.Rf_allocArray <- function(...) .Call(C_api_Rf_allocArray, ...) +api.Rf_allocMatrix <- function(...) .Call(C_api_Rf_allocMatrix, ...) +api.Rf_nrows <- function(...) .Call(C_api_Rf_nrows, ...) +api.Rf_ncols <- function(...) .Call(C_api_Rf_ncols, ...) +api.LENGTH <- function(...) .Call(C_api_LENGTH, ...) +api.SET_STRING_ELT <- function(...) .Call(C_api_SET_STRING_ELT, ...) +api.SET_VECTOR_ELT <- function(...) .Call(C_api_SET_VECTOR_ELT, ...) +api.STRING_ELT <- function(...) .Call(C_api_STRING_ELT, ...) +api.VECTOR_ELT <- function(...) .Call(C_api_VECTOR_ELT, ...) +api.NAMED <- function(...) .Call(C_api_NAMED, ...) +api.SET_NAMED <- function(...) .Call(C_api_SET_NAMED, ...) +api.TYPEOF <- function(...) .Call(C_api_TYPEOF, ...) +api.Rf_any_duplicated <- function(...) .Call(C_api_Rf_any_duplicated, ...) +api.Rf_any_duplicated3 <- function(...) .Call(C_api_Rf_any_duplicated3, ...) +api.PRINTNAME <- function(...) .Call(C_api_PRINTNAME, ...) +api.TAG <- function(...) .Call(C_api_TAG, ...) +api.CAR <- function(...) .Call(C_api_CAR, ...) +api.CAAR <- function(...) .Call(C_api_CAAR, ...) +api.CDR <- function(...) .Call(C_api_CDR, ...) +api.CDAR <- function(...) .Call(C_api_CDAR, ...) +api.CADR <- function(...) .Call(C_api_CADR, ...) +api.CADDR <- function(...) .Call(C_api_CADDR, ...) +api.CADDDR <- function(...) .Call(C_api_CADDDR, ...) +api.CAD4R <- function(...) .Call(C_api_CAD4R, ...) +api.CDDR <- function(...) .Call(C_api_CDDR, ...) +api.CDDDR <- function(...) .Call(C_api_CDDDR, ...) +api.SET_TAG <- function(...) .Call(C_api_SET_TAG, ...) +api.SETCAR <- function(...) .Call(C_api_SETCAR, ...) +api.SETCDR <- function(...) .Call(C_api_SETCDR, ...) +api.FORMALS <- function(...) .Call(C_api_FORMALS, ...) +api.BODY <- function(...) .Call(C_api_BODY, ...) +api.CLOENV <- function(...) .Call(C_api_CLOENV, ...) +api.SET_FORMALS <- function(...) .Call(C_api_SET_FORMALS, ...) +api.SET_BODY <- function(...) .Call(C_api_SET_BODY, ...) +api.SET_CLOENV <- function(...) .Call(C_api_SET_CLOENV, ...) +api.SETCADR <- function(...) .Call(C_api_SETCADR, ...) +api.SETCADDR <- function(...) .Call(C_api_SETCADDR, ...) +api.SETCADDDR <- function(...) .Call(C_api_SETCADDDR, ...) +api.SETCAD4R <- function(...) .Call(C_api_SETCAD4R, ...) +api.SYMVALUE <- function(...) .Call(C_api_SYMVALUE, ...) +api.SET_SYMVALUE <- function(...) .Call(C_api_SET_SYMVALUE, ...) +api.R_BindingIsLocked <- function(...) .Call(C_api_R_BindingIsLocked, ...) +api.R_LockBinding <- function(...) .Call(C_api_R_LockBinding, ...) +api.R_unLockBinding <- function(...) .Call(C_api_R_unLockBinding, ...) +api.R_FindNamespace <- function(...) .Call(C_api_R_FindNamespace, ...) +api.Rf_eval <- function(...) .Call(C_api_Rf_eval, ...) +api.Rf_findFun <- function(...) .Call(C_api_Rf_findFun, ...) +api.Rf_GetOption1 <- function(...) .Call(C_api_Rf_GetOption1, ...) +api.Rf_gsetVar <- function(...) .Call(C_api_Rf_gsetVar, ...) +api.DUPLICATE_ATTRIB <- function(...) .Call(C_api_DUPLICATE_ATTRIB, ...) +api.R_compute_identical <- function(...) .Call(C_api_R_compute_identical, ...) +api.Rf_copyListMatrix <- function(...) .Call(C_api_Rf_copyListMatrix, ...) +api.Rf_copyMatrix <- function(...) .Call(C_api_Rf_copyMatrix, ...) +api.RDEBUG <- function(...) .Call(C_api_RDEBUG, ...) +api.SET_RDEBUG <- function(...) .Call(C_api_SET_RDEBUG, ...) +api.RSTEP <- function(...) .Call(C_api_RSTEP, ...) +api.SET_RSTEP <- function(...) .Call(C_api_SET_RSTEP, ...) +api.ENCLOS <- function(...) .Call(C_api_ENCLOS, ...) +api.PRVALUE <- function(...) .Call(C_api_PRVALUE, ...) +api.R_lsInternal3 <- function(...) .Call(C_api_R_lsInternal3, ...) +api.R_HomeDir <- function(...) .Call(C_api_R_HomeDir, ...) +api.IS_S4_OBJECT <- function(...) .Call(C_api_IS_S4_OBJECT, ...) +api.SET_S4_OBJECT <- function(...) .Call(C_api_SET_S4_OBJECT, ...) +api.UNSET_S4_OBJECT <- function(...) .Call(C_api_UNSET_S4_OBJECT, ...) +api.Rprintf <- function(...) .Call(C_api_Rprintf, ...) +api.GetRNGstate <- function(...) .Call(C_api_GetRNGstate, ...) +api.PutRNGstate <- function(...) .Call(C_api_PutRNGstate, ...) +api.unif_rand <- function(...) .Call(C_api_unif_rand, ...) +api.Rf_classgets <- function(...) .Call(C_api_Rf_classgets, ...) +api.R_ExternalPtrAddr <- function(...) .Call(C_api_R_ExternalPtrAddr, ...) +api.R_ExternalPtrTag <- function(...) .Call(C_api_R_ExternalPtrTag, ...) +api.R_ExternalPtrProtected <- function(...) .Call(C_api_R_ExternalPtrProtected, ...) +api.R_SetExternalPtrAddr <- function(...) .Call(C_api_R_SetExternalPtrAddr, ...) +api.R_SetExternalPtrTag <- function(...) .Call(C_api_R_SetExternalPtrTag, ...) +api.R_SetExternalPtrProtected <- function(...) .Call(C_api_R_SetExternalPtrProtected, ...) +api.PRSEEN <- function(...) .Call(C_api_PRSEEN, ...) +api.PRENV <- function(...) .Call(C_api_PRENV, ...) +api.R_PromiseExpr <- function(...) .Call(C_api_R_PromiseExpr, ...) +api.PRCODE <- function(...) .Call(C_api_PRCODE, ...) +api.R_new_custom_connection <- function(...) .Call(C_api_R_new_custom_connection, ...) +api.R_ReadConnection <- function(...) .Call(C_api_R_ReadConnection, ...) +api.R_WriteConnection <- function(...) .Call(C_api_R_WriteConnection, ...) +api.R_GetConnection <- function(...) .Call(C_api_R_GetConnection, ...) +api.R_do_slot <- function(...) .Call(C_api_R_do_slot, ...) +api.R_do_slot_assign <- function(...) .Call(C_api_R_do_slot_assign, ...) +api.Rf_str2type <- function(...) .Call(C_api_Rf_str2type, ...) +api.Rf_dunif <- function(...) .Call(C_api_Rf_dunif, ...) +api.Rf_qunif <- function(...) .Call(C_api_Rf_qunif, ...) +api.Rf_punif <- function(...) .Call(C_api_Rf_punif, ...) +api.Rf_runif <- function(...) .Call(C_api_Rf_runif, ...) +api.Rf_dchisq <- function(...) .Call(C_api_Rf_dchisq, ...) +api.Rf_pchisq <- function(...) .Call(C_api_Rf_pchisq, ...) +api.Rf_qchisq <- function(...) .Call(C_api_Rf_qchisq, ...) +api.Rf_rchisq <- function(...) .Call(C_api_Rf_rchisq, ...) +api.Rf_dnchisq <- function(...) .Call(C_api_Rf_dnchisq, ...) +api.Rf_pnchisq <- function(...) .Call(C_api_Rf_pnchisq, ...) +api.Rf_qnchisq <- function(...) .Call(C_api_Rf_qnchisq, ...) +api.Rf_rnchisq <- function(...) .Call(C_api_Rf_rnchisq, ...) +api.Rf_dnorm4 <- function(...) .Call(C_api_Rf_dnorm4, ...) +api.Rf_pnorm5 <- function(...) .Call(C_api_Rf_pnorm5, ...) +api.Rf_qnorm5 <- function(...) .Call(C_api_Rf_qnorm5, ...) +api.Rf_rnorm <- function(...) .Call(C_api_Rf_rnorm, ...) +api.Rf_dlnorm <- function(...) .Call(C_api_Rf_dlnorm, ...) +api.Rf_plnorm <- function(...) .Call(C_api_Rf_plnorm, ...) +api.Rf_qlnorm <- function(...) .Call(C_api_Rf_qlnorm, ...) +api.Rf_rlnorm <- function(...) .Call(C_api_Rf_rlnorm, ...) +api.Rf_dgamma <- function(...) .Call(C_api_Rf_dgamma, ...) +api.Rf_pgamma <- function(...) .Call(C_api_Rf_pgamma, ...) +api.Rf_qgamma <- function(...) .Call(C_api_Rf_qgamma, ...) +api.Rf_rgamma <- function(...) .Call(C_api_Rf_rgamma, ...) +api.Rf_dbeta <- function(...) .Call(C_api_Rf_dbeta, ...) +api.Rf_pbeta <- function(...) .Call(C_api_Rf_pbeta, ...) +api.Rf_qbeta <- function(...) .Call(C_api_Rf_qbeta, ...) +api.Rf_rbeta <- function(...) .Call(C_api_Rf_rbeta, ...) +api.Rf_df <- function(...) .Call(C_api_Rf_df, ...) +api.Rf_pf <- function(...) .Call(C_api_Rf_pf, ...) +api.Rf_qf <- function(...) .Call(C_api_Rf_qf, ...) +api.Rf_rf <- function(...) .Call(C_api_Rf_rf, ...) +api.Rf_dt <- function(...) .Call(C_api_Rf_dt, ...) +api.Rf_pt <- function(...) .Call(C_api_Rf_pt, ...) +api.Rf_qt <- function(...) .Call(C_api_Rf_qt, ...) +api.Rf_rt <- function(...) .Call(C_api_Rf_rt, ...) +api.Rf_dbinom <- function(...) .Call(C_api_Rf_dbinom, ...) +api.Rf_pbinom <- function(...) .Call(C_api_Rf_pbinom, ...) +api.Rf_qbinom <- function(...) .Call(C_api_Rf_qbinom, ...) +api.Rf_rbinom <- function(...) .Call(C_api_Rf_rbinom, ...) +api.Rf_dcauchy <- function(...) .Call(C_api_Rf_dcauchy, ...) +api.Rf_pcauchy <- function(...) .Call(C_api_Rf_pcauchy, ...) +api.Rf_qcauchy <- function(...) .Call(C_api_Rf_qcauchy, ...) +api.Rf_rcauchy <- function(...) .Call(C_api_Rf_rcauchy, ...) +api.Rf_dexp <- function(...) .Call(C_api_Rf_dexp, ...) +api.Rf_pexp <- function(...) .Call(C_api_Rf_pexp, ...) +api.Rf_qexp <- function(...) .Call(C_api_Rf_qexp, ...) +api.Rf_rexp <- function(...) .Call(C_api_Rf_rexp, ...) +api.Rf_dgeom <- function(...) .Call(C_api_Rf_dgeom, ...) +api.Rf_pgeom <- function(...) .Call(C_api_Rf_pgeom, ...) +api.Rf_qgeom <- function(...) .Call(C_api_Rf_qgeom, ...) +api.Rf_rgeom <- function(...) .Call(C_api_Rf_rgeom, ...) +api.Rf_dhyper <- function(...) .Call(C_api_Rf_dhyper, ...) +api.Rf_phyper <- function(...) .Call(C_api_Rf_phyper, ...) +api.Rf_qhyper <- function(...) .Call(C_api_Rf_qhyper, ...) +api.Rf_rhyper <- function(...) .Call(C_api_Rf_rhyper, ...) +api.Rf_dnbinom <- function(...) .Call(C_api_Rf_dnbinom, ...) +api.Rf_pnbinom <- function(...) .Call(C_api_Rf_pnbinom, ...) +api.Rf_qnbinom <- function(...) .Call(C_api_Rf_qnbinom, ...) +api.Rf_rnbinom <- function(...) .Call(C_api_Rf_rnbinom, ...) +api.Rf_dnbinom_mu <- function(...) .Call(C_api_Rf_dnbinom_mu, ...) +api.Rf_pnbinom_mu <- function(...) .Call(C_api_Rf_pnbinom_mu, ...) +api.Rf_qnbinom_mu <- function(...) .Call(C_api_Rf_qnbinom_mu, ...) +api.Rf_rnbinom_mu <- function(...) .Call(C_api_Rf_rnbinom_mu, ...) +api.Rf_dpois <- function(...) .Call(C_api_Rf_dpois, ...) +api.Rf_ppois <- function(...) .Call(C_api_Rf_ppois, ...) +api.Rf_qpois <- function(...) .Call(C_api_Rf_qpois, ...) +api.Rf_rpois <- function(...) .Call(C_api_Rf_rpois, ...) +api.Rf_dweibull <- function(...) .Call(C_api_Rf_dweibull, ...) +api.Rf_pweibull <- function(...) .Call(C_api_Rf_pweibull, ...) +api.Rf_qweibull <- function(...) .Call(C_api_Rf_qweibull, ...) +api.Rf_rweibull <- function(...) .Call(C_api_Rf_rweibull, ...) +api.Rf_dlogis <- function(...) .Call(C_api_Rf_dlogis, ...) +api.Rf_plogis <- function(...) .Call(C_api_Rf_plogis, ...) +api.Rf_qlogis <- function(...) .Call(C_api_Rf_qlogis, ...) +api.Rf_rlogis <- function(...) .Call(C_api_Rf_rlogis, ...) +api.Rf_dnbeta <- function(...) .Call(C_api_Rf_dnbeta, ...) +api.Rf_pnbeta <- function(...) .Call(C_api_Rf_pnbeta, ...) +api.Rf_qnbeta <- function(...) .Call(C_api_Rf_qnbeta, ...) +api.Rf_dnf <- function(...) .Call(C_api_Rf_dnf, ...) +api.Rf_pnf <- function(...) .Call(C_api_Rf_pnf, ...) +api.Rf_qnf <- function(...) .Call(C_api_Rf_qnf, ...) +api.Rf_dnt <- function(...) .Call(C_api_Rf_dnt, ...) +api.Rf_pnt <- function(...) .Call(C_api_Rf_pnt, ...) +api.Rf_qnt <- function(...) .Call(C_api_Rf_qnt, ...) +api.Rf_ptukey <- function(...) .Call(C_api_Rf_ptukey, ...) +api.Rf_qtukey <- function(...) .Call(C_api_Rf_qtukey, ...) +api.Rf_dwilcox <- function(...) .Call(C_api_Rf_dwilcox, ...) +api.Rf_pwilcox <- function(...) .Call(C_api_Rf_pwilcox, ...) +api.Rf_qwilcox <- function(...) .Call(C_api_Rf_qwilcox, ...) +api.Rf_rwilcox <- function(...) .Call(C_api_Rf_rwilcox, ...) +api.Rf_dsignrank <- function(...) .Call(C_api_Rf_dsignrank, ...) +api.Rf_psignrank <- function(...) .Call(C_api_Rf_psignrank, ...) +api.Rf_qsignrank <- function(...) .Call(C_api_Rf_qsignrank, ...) +api.Rf_rsignrank <- function(...) .Call(C_api_Rf_rsignrank, ...) +api.Rf_ftrunc <- function(...) .Call(C_api_Rf_ftrunc, ...) +api.Rf_namesgets <- function(...) .Call(C_api_Rf_namesgets, ...) +api.Rf_copyMostAttrib <- function(...) .Call(C_api_Rf_copyMostAttrib, ...) +api.Rf_VectorToPairList <- function(...) .Call(C_api_Rf_VectorToPairList, ...) +api.Rf_asCharacterFactor <- function(...) .Call(C_api_Rf_asCharacterFactor, ...) +api.Rf_match <- function(...) .Call(C_api_Rf_match, ...) +api.Rf_NonNullStringMatch <- function(...) .Call(C_api_Rf_NonNullStringMatch, ...) +api.R_has_slot <- function(...) .Call(C_api_R_has_slot, ...) +api.Rf_PrintValue <- function(...) .Call(C_api_Rf_PrintValue, ...) +api.OBJECT <- function(...) .Call(C_api_OBJECT, ...) diff --git a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/init.c b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/init.c index 72f204258e..ecea6b4040 100644 --- a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/init.c +++ b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/init.c @@ -20,10 +20,12 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ +#define NO_FASTR_REDEFINE #include <R.h> #include <Rinternals.h> #include <R_ext/Rdynload.h> #include "testrffi.h" +#include "rffiwrappers.h" static const R_CMethodDef CEntries[] = { {"dotCModifiedArguments", (DL_FUNC) &dotCModifiedArguments, 5}, @@ -88,6 +90,235 @@ static const R_CallMethodDef CallEntries[] = { CALLDEF(test_RfRandomFunctions, 0), CALLDEF(test_RfRMultinom, 0), CALLDEF(test_RfFunctions, 0), + // Code generated by com.oracle.truffle.r.ffi.codegen.FFITestsCodeGen class run with option '-init' + // The following code registers all C functions that wrap RFFI functions and convert SEXP <-> primitive types. + // The definitions of the C functions could be generated by the same Java class (but run without any option) + // RFFI functions that take/return C pointers are ignored + CALLDEF(api_Rf_ScalarInteger, 1), + CALLDEF(api_Rf_ScalarLogical, 1), + CALLDEF(api_Rf_ScalarString, 1), + CALLDEF(api_Rf_asInteger, 1), + CALLDEF(api_Rf_ScalarReal, 1), + CALLDEF(api_Rf_asReal, 1), + CALLDEF(api_Rf_asLogical, 1), + CALLDEF(api_Rf_asChar, 1), + CALLDEF(api_Rf_coerceVector, 2), + CALLDEF(api_Rf_mkCharLenCE, 3), + CALLDEF(api_Rf_cons, 2), + CALLDEF(api_Rf_defineVar, 3), + CALLDEF(api_R_getClassDef, 1), + CALLDEF(api_R_do_MAKE_CLASS, 1), + CALLDEF(api_R_do_new_object, 1), + CALLDEF(api_Rf_findVar, 2), + CALLDEF(api_Rf_findVarInFrame, 2), + CALLDEF(api_Rf_findVarInFrame3, 3), + CALLDEF(api_ATTRIB, 1), + CALLDEF(api_Rf_getAttrib, 2), + CALLDEF(api_Rf_setAttrib, 3), + CALLDEF(api_Rf_inherits, 2), + CALLDEF(api_Rf_install, 1), + CALLDEF(api_Rf_installChar, 1), + CALLDEF(api_Rf_lengthgets, 2), + CALLDEF(api_Rf_isString, 1), + CALLDEF(api_Rf_isNull, 1), + CALLDEF(api_Rf_PairToVectorList, 1), + CALLDEF(api_Rf_error, 1), + CALLDEF(api_Rf_warning, 1), + CALLDEF(api_Rf_warningcall, 2), + CALLDEF(api_Rf_errorcall, 2), + CALLDEF(api_Rf_allocVector, 2), + CALLDEF(api_Rf_allocArray, 2), + CALLDEF(api_Rf_allocMatrix, 3), + CALLDEF(api_Rf_nrows, 1), + CALLDEF(api_Rf_ncols, 1), + CALLDEF(api_LENGTH, 1), + CALLDEF(api_SET_STRING_ELT, 3), + CALLDEF(api_SET_VECTOR_ELT, 3), + CALLDEF(api_STRING_ELT, 2), + CALLDEF(api_VECTOR_ELT, 2), + CALLDEF(api_NAMED, 1), + CALLDEF(api_SET_NAMED, 2), + CALLDEF(api_TYPEOF, 1), + CALLDEF(api_Rf_any_duplicated, 2), + CALLDEF(api_Rf_any_duplicated3, 3), + CALLDEF(api_PRINTNAME, 1), + CALLDEF(api_TAG, 1), + CALLDEF(api_CAR, 1), + CALLDEF(api_CAAR, 1), + CALLDEF(api_CDR, 1), + CALLDEF(api_CDAR, 1), + CALLDEF(api_CADR, 1), + CALLDEF(api_CADDR, 1), + CALLDEF(api_CADDDR, 1), + CALLDEF(api_CAD4R, 1), + CALLDEF(api_CDDR, 1), + CALLDEF(api_CDDDR, 1), + CALLDEF(api_SET_TAG, 2), + CALLDEF(api_SETCAR, 2), + CALLDEF(api_SETCDR, 2), + CALLDEF(api_FORMALS, 1), + CALLDEF(api_BODY, 1), + CALLDEF(api_CLOENV, 1), + CALLDEF(api_SET_FORMALS, 2), + CALLDEF(api_SET_BODY, 2), + CALLDEF(api_SET_CLOENV, 2), + CALLDEF(api_SETCADR, 2), + CALLDEF(api_SETCADDR, 2), + CALLDEF(api_SETCADDDR, 2), + CALLDEF(api_SETCAD4R, 2), + CALLDEF(api_SYMVALUE, 1), + CALLDEF(api_SET_SYMVALUE, 2), + CALLDEF(api_R_BindingIsLocked, 2), + CALLDEF(api_R_LockBinding, 2), + CALLDEF(api_R_unLockBinding, 2), + CALLDEF(api_R_FindNamespace, 1), + CALLDEF(api_Rf_eval, 2), + CALLDEF(api_Rf_findFun, 2), + CALLDEF(api_Rf_GetOption1, 1), + CALLDEF(api_Rf_gsetVar, 3), + CALLDEF(api_DUPLICATE_ATTRIB, 2), + CALLDEF(api_R_compute_identical, 3), + CALLDEF(api_Rf_copyListMatrix, 3), + CALLDEF(api_Rf_copyMatrix, 3), + CALLDEF(api_RDEBUG, 1), + CALLDEF(api_SET_RDEBUG, 2), + CALLDEF(api_RSTEP, 1), + CALLDEF(api_SET_RSTEP, 2), + CALLDEF(api_ENCLOS, 1), + CALLDEF(api_PRVALUE, 1), + CALLDEF(api_R_lsInternal3, 3), + CALLDEF(api_R_HomeDir, 0), + CALLDEF(api_IS_S4_OBJECT, 1), + CALLDEF(api_SET_S4_OBJECT, 1), + CALLDEF(api_UNSET_S4_OBJECT, 1), + CALLDEF(api_Rprintf, 1), + CALLDEF(api_GetRNGstate, 0), + CALLDEF(api_PutRNGstate, 0), + CALLDEF(api_unif_rand, 0), + CALLDEF(api_Rf_classgets, 2), + CALLDEF(api_R_ExternalPtrAddr, 1), + CALLDEF(api_R_ExternalPtrTag, 1), + CALLDEF(api_R_ExternalPtrProtected, 1), + CALLDEF(api_R_SetExternalPtrAddr, 2), + CALLDEF(api_R_SetExternalPtrTag, 2), + CALLDEF(api_R_SetExternalPtrProtected, 2), + CALLDEF(api_PRSEEN, 1), + CALLDEF(api_PRENV, 1), + CALLDEF(api_R_PromiseExpr, 1), + CALLDEF(api_PRCODE, 1), + CALLDEF(api_R_new_custom_connection, 4), + CALLDEF(api_R_ReadConnection, 3), + CALLDEF(api_R_WriteConnection, 3), + CALLDEF(api_R_GetConnection, 1), + CALLDEF(api_R_do_slot, 2), + CALLDEF(api_R_do_slot_assign, 3), + CALLDEF(api_Rf_str2type, 1), + CALLDEF(api_Rf_dunif, 4), + CALLDEF(api_Rf_qunif, 5), + CALLDEF(api_Rf_punif, 5), + CALLDEF(api_Rf_runif, 2), + CALLDEF(api_Rf_dchisq, 3), + CALLDEF(api_Rf_pchisq, 4), + CALLDEF(api_Rf_qchisq, 4), + CALLDEF(api_Rf_rchisq, 1), + CALLDEF(api_Rf_dnchisq, 4), + CALLDEF(api_Rf_pnchisq, 5), + CALLDEF(api_Rf_qnchisq, 5), + CALLDEF(api_Rf_rnchisq, 2), + CALLDEF(api_Rf_dnorm4, 4), + CALLDEF(api_Rf_pnorm5, 5), + CALLDEF(api_Rf_qnorm5, 5), + CALLDEF(api_Rf_rnorm, 2), + CALLDEF(api_Rf_dlnorm, 4), + CALLDEF(api_Rf_plnorm, 5), + CALLDEF(api_Rf_qlnorm, 5), + CALLDEF(api_Rf_rlnorm, 2), + CALLDEF(api_Rf_dgamma, 4), + CALLDEF(api_Rf_pgamma, 5), + CALLDEF(api_Rf_qgamma, 5), + CALLDEF(api_Rf_rgamma, 2), + CALLDEF(api_Rf_dbeta, 4), + CALLDEF(api_Rf_pbeta, 5), + CALLDEF(api_Rf_qbeta, 5), + CALLDEF(api_Rf_rbeta, 2), + CALLDEF(api_Rf_df, 4), + CALLDEF(api_Rf_pf, 5), + CALLDEF(api_Rf_qf, 5), + CALLDEF(api_Rf_rf, 2), + CALLDEF(api_Rf_dt, 3), + CALLDEF(api_Rf_pt, 4), + CALLDEF(api_Rf_qt, 4), + CALLDEF(api_Rf_rt, 1), + CALLDEF(api_Rf_dbinom, 4), + CALLDEF(api_Rf_pbinom, 5), + CALLDEF(api_Rf_qbinom, 5), + CALLDEF(api_Rf_rbinom, 2), + CALLDEF(api_Rf_dcauchy, 4), + CALLDEF(api_Rf_pcauchy, 5), + CALLDEF(api_Rf_qcauchy, 5), + CALLDEF(api_Rf_rcauchy, 2), + CALLDEF(api_Rf_dexp, 3), + CALLDEF(api_Rf_pexp, 4), + CALLDEF(api_Rf_qexp, 4), + CALLDEF(api_Rf_rexp, 1), + CALLDEF(api_Rf_dgeom, 3), + CALLDEF(api_Rf_pgeom, 4), + CALLDEF(api_Rf_qgeom, 4), + CALLDEF(api_Rf_rgeom, 1), + CALLDEF(api_Rf_dhyper, 5), + CALLDEF(api_Rf_phyper, 6), + CALLDEF(api_Rf_qhyper, 6), + CALLDEF(api_Rf_rhyper, 3), + CALLDEF(api_Rf_dnbinom, 4), + CALLDEF(api_Rf_pnbinom, 5), + CALLDEF(api_Rf_qnbinom, 5), + CALLDEF(api_Rf_rnbinom, 2), + CALLDEF(api_Rf_dnbinom_mu, 4), + CALLDEF(api_Rf_pnbinom_mu, 5), + CALLDEF(api_Rf_qnbinom_mu, 5), + CALLDEF(api_Rf_rnbinom_mu, 2), + CALLDEF(api_Rf_dpois, 3), + CALLDEF(api_Rf_ppois, 4), + CALLDEF(api_Rf_qpois, 4), + CALLDEF(api_Rf_rpois, 1), + CALLDEF(api_Rf_dweibull, 4), + CALLDEF(api_Rf_pweibull, 5), + CALLDEF(api_Rf_qweibull, 5), + CALLDEF(api_Rf_rweibull, 2), + CALLDEF(api_Rf_dlogis, 4), + CALLDEF(api_Rf_plogis, 5), + CALLDEF(api_Rf_qlogis, 5), + CALLDEF(api_Rf_rlogis, 2), + CALLDEF(api_Rf_dnbeta, 5), + CALLDEF(api_Rf_pnbeta, 6), + CALLDEF(api_Rf_qnbeta, 6), + CALLDEF(api_Rf_dnf, 5), + CALLDEF(api_Rf_pnf, 6), + CALLDEF(api_Rf_qnf, 6), + CALLDEF(api_Rf_dnt, 4), + CALLDEF(api_Rf_pnt, 5), + CALLDEF(api_Rf_qnt, 5), + CALLDEF(api_Rf_ptukey, 6), + CALLDEF(api_Rf_qtukey, 6), + CALLDEF(api_Rf_dwilcox, 4), + CALLDEF(api_Rf_pwilcox, 5), + CALLDEF(api_Rf_qwilcox, 5), + CALLDEF(api_Rf_rwilcox, 2), + CALLDEF(api_Rf_dsignrank, 3), + CALLDEF(api_Rf_psignrank, 4), + CALLDEF(api_Rf_qsignrank, 4), + CALLDEF(api_Rf_rsignrank, 1), + CALLDEF(api_Rf_ftrunc, 1), + CALLDEF(api_Rf_namesgets, 2), + CALLDEF(api_Rf_copyMostAttrib, 2), + CALLDEF(api_Rf_VectorToPairList, 1), + CALLDEF(api_Rf_asCharacterFactor, 1), + CALLDEF(api_Rf_match, 3), + CALLDEF(api_Rf_NonNullStringMatch, 2), + CALLDEF(api_R_has_slot, 2), + CALLDEF(api_Rf_PrintValue, 1), + CALLDEF(api_OBJECT, 1), + // ---- end of generated code {NULL, NULL, 0} }; diff --git a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/rffiwrappers.c b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/rffiwrappers.c new file mode 100644 index 0000000000..3a9ed90d86 --- /dev/null +++ b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/rffiwrappers.c @@ -0,0 +1,973 @@ +/* + * Copyright (c) 2018, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +// Code generated by com.oracle.truffle.r.ffi.codegen.FFITestsCodeGen class// The following code defines a 'SEXP' variant of every RFFI function implemented in FastR +// Run the same Java class with '-init' option to get sequence of CALLDEF statements that register those functions for use from R +// RFFI functions that take/return C pointers are ignored +#define NO_FASTR_REDEFINE +#include <R.h> +#include <Rdefines.h> +#include <Rinterface.h> +#include <Rinternals.h> +#include <Rinterface.h> +#include <R_ext/Parse.h> +#include <R_ext/Connections.h> +#include <Rmath.h> + +#include "rffiwrappers.h" + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wint-conversion" + +#pragma GCC diagnostic ignored "-Wincompatible-pointer-types" + +SEXP api_Rf_asInteger(SEXP x) { + return ScalarInteger(Rf_asInteger(x)); +} + +SEXP api_Rf_asReal(SEXP x) { + return ScalarReal(Rf_asReal(x)); +} + +SEXP api_Rf_ScalarInteger(SEXP value) { + return Rf_ScalarInteger(INTEGER_VALUE(value)); +} + +SEXP api_Rf_ScalarLogical(SEXP value) { + return Rf_ScalarLogical(INTEGER_VALUE(value)); +} + +SEXP api_Rf_ScalarReal(SEXP value) { + return Rf_ScalarReal(NUMERIC_VALUE(value)); +} + +SEXP api_Rf_ScalarString(SEXP value) { + return Rf_ScalarString(value); +} + +SEXP api_Rf_asLogical(SEXP x) { + return ScalarInteger(Rf_asLogical(x)); +} + +SEXP api_Rf_asChar(SEXP x) { + return Rf_asChar(x); +} + +SEXP api_Rf_coerceVector(SEXP x, SEXP mode) { + return Rf_coerceVector(x, INTEGER_VALUE(mode)); +} + +SEXP api_Rf_mkCharLenCE(SEXP bytes, SEXP len, SEXP encoding) { + return Rf_mkCharLenCE(R_CHAR(STRING_ELT(bytes, 0)), INTEGER_VALUE(len), INTEGER_VALUE(encoding)); +} + +SEXP api_Rf_cons(SEXP car, SEXP cdr) { + return Rf_cons(car, cdr); +} + +SEXP api_Rf_defineVar(SEXP symbolArg, SEXP value, SEXP envArg) { + Rf_defineVar(symbolArg, value, envArg); + return R_NilValue; +} + +SEXP api_R_getClassDef(SEXP clazz) { + return R_getClassDef(R_CHAR(STRING_ELT(clazz, 0))); +} + +SEXP api_R_do_MAKE_CLASS(SEXP clazz) { + return R_do_MAKE_CLASS(R_CHAR(STRING_ELT(clazz, 0))); +} + +SEXP api_R_do_new_object(SEXP classDef) { + return R_do_new_object(classDef); +} + +SEXP api_Rf_findVar(SEXP symbolArg, SEXP envArg) { + return Rf_findVar(symbolArg, envArg); +} + +SEXP api_Rf_findVarInFrame(SEXP envArg, SEXP symbolArg) { + return Rf_findVarInFrame(envArg, symbolArg); +} + +SEXP api_Rf_findVarInFrame3(SEXP envArg, SEXP symbolArg, SEXP doGet) { + return Rf_findVarInFrame3(envArg, symbolArg, INTEGER_VALUE(doGet)); +} + +SEXP api_ATTRIB(SEXP obj) { + return ATTRIB(obj); +} + +SEXP api_Rf_getAttrib(SEXP obj, SEXP name) { + return Rf_getAttrib(obj, name); +} + +SEXP api_Rf_setAttrib(SEXP obj, SEXP name, SEXP val) { + Rf_setAttrib(obj, name, val); + return R_NilValue; +} + +SEXP api_Rf_inherits(SEXP x, SEXP clazz) { + return ScalarInteger(Rf_inherits(x, R_CHAR(STRING_ELT(clazz, 0)))); +} + +SEXP api_Rf_install(SEXP name) { + return Rf_install(R_CHAR(STRING_ELT(name, 0))); +} + +SEXP api_Rf_installChar(SEXP name) { + return Rf_installChar(name); +} + +SEXP api_Rf_lengthgets(SEXP x, SEXP newSize) { + return Rf_lengthgets(x, INTEGER_VALUE(newSize)); +} + +SEXP api_Rf_isString(SEXP x) { + return ScalarInteger(Rf_isString(x)); +} + +SEXP api_Rf_isNull(SEXP x) { + return ScalarInteger(Rf_isNull(x)); +} + +SEXP api_Rf_PairToVectorList(SEXP x) { + return Rf_PairToVectorList(x); +} + +SEXP api_Rf_error(SEXP msg) { + Rf_error(R_CHAR(STRING_ELT(msg, 0))); + return R_NilValue; +} + +SEXP api_Rf_warning(SEXP msg) { + Rf_warning(R_CHAR(STRING_ELT(msg, 0))); + return R_NilValue; +} + +SEXP api_Rf_warningcall(SEXP call, SEXP msg) { + Rf_warningcall(call, R_CHAR(STRING_ELT(msg, 0))); + return R_NilValue; +} + +SEXP api_Rf_errorcall(SEXP call, SEXP msg) { + Rf_errorcall(call, R_CHAR(STRING_ELT(msg, 0))); + return R_NilValue; +} + +SEXP api_Rf_allocVector(SEXP mode, SEXP n) { + return Rf_allocVector(INTEGER_VALUE(mode), INTEGER_VALUE(n)); +} + +SEXP api_Rf_allocArray(SEXP mode, SEXP dimsObj) { + return Rf_allocArray(INTEGER_VALUE(mode), dimsObj); +} + +SEXP api_Rf_allocMatrix(SEXP mode, SEXP nrow, SEXP ncol) { + return Rf_allocMatrix(INTEGER_VALUE(mode), INTEGER_VALUE(nrow), INTEGER_VALUE(ncol)); +} + +SEXP api_Rf_nrows(SEXP x) { + return ScalarInteger(Rf_nrows(x)); +} + +SEXP api_Rf_ncols(SEXP x) { + return ScalarInteger(Rf_ncols(x)); +} + +SEXP api_LENGTH(SEXP x) { + return ScalarInteger(LENGTH(x)); +} + +SEXP api_SET_STRING_ELT(SEXP x, SEXP i, SEXP v) { + SET_STRING_ELT(x, INTEGER_VALUE(i), v); + return R_NilValue; +} + +SEXP api_SET_VECTOR_ELT(SEXP x, SEXP i, SEXP v) { + SET_VECTOR_ELT(x, INTEGER_VALUE(i), v); + return R_NilValue; +} + +SEXP api_STRING_ELT(SEXP x, SEXP i) { + return STRING_ELT(x, INTEGER_VALUE(i)); +} + +SEXP api_VECTOR_ELT(SEXP x, SEXP i) { + return VECTOR_ELT(x, INTEGER_VALUE(i)); +} + +SEXP api_NAMED(SEXP x) { + return ScalarInteger(NAMED(x)); +} + +SEXP api_SET_NAMED(SEXP x, SEXP v) { + SET_NAMED(x, INTEGER_VALUE(v)); + return R_NilValue; +} + +SEXP api_TYPEOF(SEXP x) { + return ScalarInteger(TYPEOF(x)); +} + +SEXP api_Rf_any_duplicated(SEXP x, SEXP fromLast) { + return ScalarInteger(Rf_any_duplicated(x, INTEGER_VALUE(fromLast))); +} + +SEXP api_Rf_any_duplicated3(SEXP x, SEXP incomparables, SEXP fromLast) { + return ScalarInteger(Rf_any_duplicated3(x, incomparables, INTEGER_VALUE(fromLast))); +} + +SEXP api_PRINTNAME(SEXP x) { + return PRINTNAME(x); +} + +SEXP api_TAG(SEXP e) { + return TAG(e); +} + +SEXP api_CAR(SEXP e) { + return CAR(e); +} + +SEXP api_CAAR(SEXP e) { + return CAAR(e); +} + +SEXP api_CDR(SEXP e) { + return CDR(e); +} + +SEXP api_CDAR(SEXP e) { + return CDAR(e); +} + +SEXP api_CADR(SEXP e) { + return CADR(e); +} + +SEXP api_CADDR(SEXP e) { + return CADDR(e); +} + +SEXP api_CADDDR(SEXP e) { + return CADDDR(e); +} + +SEXP api_CAD4R(SEXP e) { + return CAD4R(e); +} + +SEXP api_CDDR(SEXP e) { + return CDDR(e); +} + +SEXP api_CDDDR(SEXP e) { + return CDDDR(e); +} + +SEXP api_SET_TAG(SEXP x, SEXP y) { + SET_TAG(x, y); + return R_NilValue; +} + +SEXP api_SETCAR(SEXP x, SEXP y) { + return SETCAR(x, y); +} + +SEXP api_SETCDR(SEXP x, SEXP y) { + return SETCDR(x, y); +} + +SEXP api_FORMALS(SEXP x) { + return FORMALS(x); +} + +SEXP api_BODY(SEXP x) { + return BODY(x); +} + +SEXP api_CLOENV(SEXP x) { + return CLOENV(x); +} + +SEXP api_SET_FORMALS(SEXP x, SEXP y) { + SET_FORMALS(x, y); + return R_NilValue; +} + +SEXP api_SET_BODY(SEXP x, SEXP y) { + SET_BODY(x, y); + return R_NilValue; +} + +SEXP api_SET_CLOENV(SEXP x, SEXP y) { + SET_CLOENV(x, y); + return R_NilValue; +} + +SEXP api_SETCADR(SEXP x, SEXP y) { + return SETCADR(x, y); +} + +SEXP api_SETCADDR(SEXP x, SEXP y) { + return SETCADDR(x, y); +} + +SEXP api_SETCADDDR(SEXP x, SEXP y) { + return SETCADDDR(x, y); +} + +SEXP api_SETCAD4R(SEXP x, SEXP y) { + return SETCAD4R(x, y); +} + +SEXP api_SYMVALUE(SEXP x) { + return SYMVALUE(x); +} + +SEXP api_SET_SYMVALUE(SEXP x, SEXP v) { + SET_SYMVALUE(x, v); + return R_NilValue; +} + +SEXP api_R_BindingIsLocked(SEXP sym, SEXP env) { + return ScalarInteger(R_BindingIsLocked(sym, env)); +} + +SEXP api_R_LockBinding(SEXP sym, SEXP env) { + R_LockBinding(sym, env); + return R_NilValue; +} + +SEXP api_R_unLockBinding(SEXP sym, SEXP env) { + R_unLockBinding(sym, env); + return R_NilValue; +} + +SEXP api_R_FindNamespace(SEXP name) { + return R_FindNamespace(name); +} + +SEXP api_Rf_eval(SEXP expr, SEXP env) { + return Rf_eval(expr, env); +} + +SEXP api_Rf_findFun(SEXP symbolObj, SEXP envObj) { + return Rf_findFun(symbolObj, envObj); +} + +SEXP api_Rf_GetOption1(SEXP tag) { + return Rf_GetOption1(tag); +} + +SEXP api_Rf_gsetVar(SEXP symbol, SEXP value, SEXP rho) { + Rf_gsetVar(symbol, value, rho); + return R_NilValue; +} + +SEXP api_DUPLICATE_ATTRIB(SEXP to, SEXP from) { + DUPLICATE_ATTRIB(to, from); + return R_NilValue; +} + +SEXP api_R_compute_identical(SEXP x, SEXP y, SEXP flags) { + return ScalarInteger(R_compute_identical(x, y, INTEGER_VALUE(flags))); +} + +SEXP api_Rf_copyListMatrix(SEXP s, SEXP t, SEXP byrow) { + Rf_copyListMatrix(s, t, INTEGER_VALUE(byrow)); + return R_NilValue; +} + +SEXP api_Rf_copyMatrix(SEXP s, SEXP t, SEXP byrow) { + Rf_copyMatrix(s, t, INTEGER_VALUE(byrow)); + return R_NilValue; +} + +SEXP api_RDEBUG(SEXP x) { + return ScalarInteger(RDEBUG(x)); +} + +SEXP api_SET_RDEBUG(SEXP x, SEXP v) { + SET_RDEBUG(x, INTEGER_VALUE(v)); + return R_NilValue; +} + +SEXP api_RSTEP(SEXP x) { + return ScalarInteger(RSTEP(x)); +} + +SEXP api_SET_RSTEP(SEXP x, SEXP v) { + SET_RSTEP(x, INTEGER_VALUE(v)); + return R_NilValue; +} + +SEXP api_ENCLOS(SEXP x) { + return ENCLOS(x); +} + +SEXP api_PRVALUE(SEXP x) { + return PRVALUE(x); +} + +SEXP api_R_lsInternal3(SEXP envArg, SEXP allArg, SEXP sortedArg) { + return R_lsInternal3(envArg, INTEGER_VALUE(allArg), INTEGER_VALUE(sortedArg)); +} + +SEXP api_R_HomeDir() { + return ScalarString(Rf_mkString(R_HomeDir())); +} + +SEXP api_IS_S4_OBJECT(SEXP x) { + return ScalarInteger(IS_S4_OBJECT(x)); +} + +SEXP api_SET_S4_OBJECT(SEXP x) { + SET_S4_OBJECT(x); + return R_NilValue; +} + +SEXP api_UNSET_S4_OBJECT(SEXP x) { + UNSET_S4_OBJECT(x); + return R_NilValue; +} + +SEXP api_Rprintf(SEXP message) { + Rprintf(R_CHAR(STRING_ELT(message, 0))); + return R_NilValue; +} + +SEXP api_GetRNGstate() { + GetRNGstate(); + return R_NilValue; +} + +SEXP api_PutRNGstate() { + PutRNGstate(); + return R_NilValue; +} + +SEXP api_unif_rand() { + return ScalarReal(unif_rand()); +} + +SEXP api_Rf_classgets(SEXP x, SEXP y) { + return Rf_classgets(x, y); +} + +SEXP api_R_ExternalPtrAddr(SEXP x) { + return ScalarInteger(R_ExternalPtrAddr(x)); +} + +SEXP api_R_ExternalPtrTag(SEXP x) { + return R_ExternalPtrTag(x); +} + +SEXP api_R_ExternalPtrProtected(SEXP x) { + return R_ExternalPtrProtected(x); +} + +SEXP api_R_SetExternalPtrAddr(SEXP x, SEXP addr) { + R_SetExternalPtrAddr(x, INTEGER_VALUE(addr)); + return R_NilValue; +} + +SEXP api_R_SetExternalPtrTag(SEXP x, SEXP tag) { + R_SetExternalPtrTag(x, tag); + return R_NilValue; +} + +SEXP api_R_SetExternalPtrProtected(SEXP x, SEXP prot) { + R_SetExternalPtrProtected(x, prot); + return R_NilValue; +} + +SEXP api_PRSEEN(SEXP x) { + return ScalarInteger(PRSEEN(x)); +} + +SEXP api_PRENV(SEXP x) { + return PRENV(x); +} + +SEXP api_R_PromiseExpr(SEXP x) { + return R_PromiseExpr(x); +} + +SEXP api_PRCODE(SEXP x) { + return PRCODE(x); +} + +SEXP api_R_new_custom_connection(SEXP description, SEXP mode, SEXP className, SEXP readAddr) { + return R_new_custom_connection(R_CHAR(STRING_ELT(description, 0)), R_CHAR(STRING_ELT(mode, 0)), R_CHAR(STRING_ELT(className, 0)), readAddr); +} + +SEXP api_R_ReadConnection(SEXP fd, SEXP bufAddress, SEXP size) { + return ScalarInteger(R_ReadConnection(INTEGER_VALUE(fd), INTEGER_VALUE(bufAddress), INTEGER_VALUE(size))); +} + +SEXP api_R_WriteConnection(SEXP fd, SEXP bufAddress, SEXP size) { + return ScalarInteger(R_WriteConnection(INTEGER_VALUE(fd), INTEGER_VALUE(bufAddress), INTEGER_VALUE(size))); +} + +SEXP api_R_GetConnection(SEXP fd) { + return R_GetConnection(INTEGER_VALUE(fd)); +} + +SEXP api_R_do_slot(SEXP o, SEXP name) { + return R_do_slot(o, name); +} + +SEXP api_R_do_slot_assign(SEXP o, SEXP name, SEXP value) { + return R_do_slot_assign(o, name, value); +} + +SEXP api_Rf_str2type(SEXP name) { + return ScalarInteger(Rf_str2type(R_CHAR(STRING_ELT(name, 0)))); +} + +SEXP api_Rf_dunif(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_dunif(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_qunif(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_qunif(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_punif(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_punif(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_runif(SEXP a, SEXP b) { + return ScalarReal(Rf_runif(NUMERIC_VALUE(a), NUMERIC_VALUE(b))); +} + +SEXP api_Rf_dchisq(SEXP a, SEXP b, SEXP c) { + return ScalarReal(Rf_dchisq(NUMERIC_VALUE(a), NUMERIC_VALUE(b), INTEGER_VALUE(c))); +} + +SEXP api_Rf_pchisq(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_pchisq(NUMERIC_VALUE(a), NUMERIC_VALUE(b), INTEGER_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_qchisq(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_qchisq(NUMERIC_VALUE(a), NUMERIC_VALUE(b), INTEGER_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_rchisq(SEXP a) { + return ScalarReal(Rf_rchisq(NUMERIC_VALUE(a))); +} + +SEXP api_Rf_dnchisq(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_dnchisq(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_pnchisq(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_pnchisq(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_qnchisq(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_qnchisq(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_rnchisq(SEXP a, SEXP b) { + return ScalarReal(Rf_rnchisq(NUMERIC_VALUE(a), NUMERIC_VALUE(b))); +} + +SEXP api_Rf_dnorm4(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_dnorm4(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_pnorm5(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_pnorm5(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_qnorm5(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_qnorm5(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_rnorm(SEXP a, SEXP b) { + return ScalarReal(Rf_rnorm(NUMERIC_VALUE(a), NUMERIC_VALUE(b))); +} + +SEXP api_Rf_dlnorm(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_dlnorm(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_plnorm(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_plnorm(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_qlnorm(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_qlnorm(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_rlnorm(SEXP a, SEXP b) { + return ScalarReal(Rf_rlnorm(NUMERIC_VALUE(a), NUMERIC_VALUE(b))); +} + +SEXP api_Rf_dgamma(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_dgamma(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_pgamma(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_pgamma(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_qgamma(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_qgamma(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_rgamma(SEXP a, SEXP b) { + return ScalarReal(Rf_rgamma(NUMERIC_VALUE(a), NUMERIC_VALUE(b))); +} + +SEXP api_Rf_dbeta(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_dbeta(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_pbeta(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_pbeta(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_qbeta(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_qbeta(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_rbeta(SEXP a, SEXP b) { + return ScalarReal(Rf_rbeta(NUMERIC_VALUE(a), NUMERIC_VALUE(b))); +} + +SEXP api_Rf_df(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_df(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_pf(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_pf(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_qf(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_qf(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_rf(SEXP a, SEXP b) { + return ScalarReal(Rf_rf(NUMERIC_VALUE(a), NUMERIC_VALUE(b))); +} + +SEXP api_Rf_dt(SEXP a, SEXP b, SEXP c) { + return ScalarReal(Rf_dt(NUMERIC_VALUE(a), NUMERIC_VALUE(b), INTEGER_VALUE(c))); +} + +SEXP api_Rf_pt(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_pt(NUMERIC_VALUE(a), NUMERIC_VALUE(b), INTEGER_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_qt(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_qt(NUMERIC_VALUE(a), NUMERIC_VALUE(b), INTEGER_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_rt(SEXP a) { + return ScalarReal(Rf_rt(NUMERIC_VALUE(a))); +} + +SEXP api_Rf_dbinom(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_dbinom(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_pbinom(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_pbinom(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_qbinom(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_qbinom(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_rbinom(SEXP a, SEXP b) { + return ScalarReal(Rf_rbinom(NUMERIC_VALUE(a), NUMERIC_VALUE(b))); +} + +SEXP api_Rf_dcauchy(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_dcauchy(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_pcauchy(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_pcauchy(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_qcauchy(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_qcauchy(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_rcauchy(SEXP a, SEXP b) { + return ScalarReal(Rf_rcauchy(NUMERIC_VALUE(a), NUMERIC_VALUE(b))); +} + +SEXP api_Rf_dexp(SEXP a, SEXP b, SEXP c) { + return ScalarReal(Rf_dexp(NUMERIC_VALUE(a), NUMERIC_VALUE(b), INTEGER_VALUE(c))); +} + +SEXP api_Rf_pexp(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_pexp(NUMERIC_VALUE(a), NUMERIC_VALUE(b), INTEGER_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_qexp(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_qexp(NUMERIC_VALUE(a), NUMERIC_VALUE(b), INTEGER_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_rexp(SEXP a) { + return ScalarReal(Rf_rexp(NUMERIC_VALUE(a))); +} + +SEXP api_Rf_dgeom(SEXP a, SEXP b, SEXP c) { + return ScalarReal(Rf_dgeom(NUMERIC_VALUE(a), NUMERIC_VALUE(b), INTEGER_VALUE(c))); +} + +SEXP api_Rf_pgeom(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_pgeom(NUMERIC_VALUE(a), NUMERIC_VALUE(b), INTEGER_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_qgeom(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_qgeom(NUMERIC_VALUE(a), NUMERIC_VALUE(b), INTEGER_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_rgeom(SEXP a) { + return ScalarReal(Rf_rgeom(NUMERIC_VALUE(a))); +} + +SEXP api_Rf_dhyper(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_dhyper(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), NUMERIC_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_phyper(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e, SEXP f) { + return ScalarReal(Rf_phyper(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), NUMERIC_VALUE(d), INTEGER_VALUE(e), INTEGER_VALUE(f))); +} + +SEXP api_Rf_qhyper(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e, SEXP f) { + return ScalarReal(Rf_qhyper(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), NUMERIC_VALUE(d), INTEGER_VALUE(e), INTEGER_VALUE(f))); +} + +SEXP api_Rf_rhyper(SEXP a, SEXP b, SEXP c) { + return ScalarReal(Rf_rhyper(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c))); +} + +SEXP api_Rf_dnbinom(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_dnbinom(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_pnbinom(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_pnbinom(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_qnbinom(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_qnbinom(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_rnbinom(SEXP a, SEXP b) { + return ScalarReal(Rf_rnbinom(NUMERIC_VALUE(a), NUMERIC_VALUE(b))); +} + +SEXP api_Rf_dnbinom_mu(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_dnbinom_mu(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_pnbinom_mu(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_pnbinom_mu(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_qnbinom_mu(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_qnbinom_mu(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_rnbinom_mu(SEXP a, SEXP b) { + return ScalarReal(Rf_rnbinom_mu(NUMERIC_VALUE(a), NUMERIC_VALUE(b))); +} + +SEXP api_Rf_dpois(SEXP a, SEXP b, SEXP c) { + return ScalarReal(Rf_dpois(NUMERIC_VALUE(a), NUMERIC_VALUE(b), INTEGER_VALUE(c))); +} + +SEXP api_Rf_ppois(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_ppois(NUMERIC_VALUE(a), NUMERIC_VALUE(b), INTEGER_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_qpois(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_qpois(NUMERIC_VALUE(a), NUMERIC_VALUE(b), INTEGER_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_rpois(SEXP a) { + return ScalarReal(Rf_rpois(NUMERIC_VALUE(a))); +} + +SEXP api_Rf_dweibull(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_dweibull(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_pweibull(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_pweibull(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_qweibull(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_qweibull(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_rweibull(SEXP a, SEXP b) { + return ScalarReal(Rf_rweibull(NUMERIC_VALUE(a), NUMERIC_VALUE(b))); +} + +SEXP api_Rf_dlogis(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_dlogis(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_plogis(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_plogis(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_qlogis(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_qlogis(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_rlogis(SEXP a, SEXP b) { + return ScalarReal(Rf_rlogis(NUMERIC_VALUE(a), NUMERIC_VALUE(b))); +} + +SEXP api_Rf_dnbeta(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_dnbeta(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), NUMERIC_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_pnbeta(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e, SEXP f) { + return ScalarReal(Rf_pnbeta(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), NUMERIC_VALUE(d), INTEGER_VALUE(e), INTEGER_VALUE(f))); +} + +SEXP api_Rf_qnbeta(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e, SEXP f) { + return ScalarReal(Rf_qnbeta(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), NUMERIC_VALUE(d), INTEGER_VALUE(e), INTEGER_VALUE(f))); +} + +SEXP api_Rf_dnf(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_dnf(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), NUMERIC_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_pnf(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e, SEXP f) { + return ScalarReal(Rf_pnf(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), NUMERIC_VALUE(d), INTEGER_VALUE(e), INTEGER_VALUE(f))); +} + +SEXP api_Rf_qnf(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e, SEXP f) { + return ScalarReal(Rf_qnf(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), NUMERIC_VALUE(d), INTEGER_VALUE(e), INTEGER_VALUE(f))); +} + +SEXP api_Rf_dnt(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_dnt(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_pnt(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_pnt(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_qnt(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_qnt(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_ptukey(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e, SEXP f) { + return ScalarReal(Rf_ptukey(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), NUMERIC_VALUE(d), INTEGER_VALUE(e), INTEGER_VALUE(f))); +} + +SEXP api_Rf_qtukey(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e, SEXP f) { + return ScalarReal(Rf_qtukey(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), NUMERIC_VALUE(d), INTEGER_VALUE(e), INTEGER_VALUE(f))); +} + +SEXP api_Rf_dwilcox(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_dwilcox(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_pwilcox(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_pwilcox(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_qwilcox(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e) { + return ScalarReal(Rf_qwilcox(NUMERIC_VALUE(a), NUMERIC_VALUE(b), NUMERIC_VALUE(c), INTEGER_VALUE(d), INTEGER_VALUE(e))); +} + +SEXP api_Rf_rwilcox(SEXP a, SEXP b) { + return ScalarReal(Rf_rwilcox(NUMERIC_VALUE(a), NUMERIC_VALUE(b))); +} + +SEXP api_Rf_dsignrank(SEXP a, SEXP b, SEXP c) { + return ScalarReal(Rf_dsignrank(NUMERIC_VALUE(a), NUMERIC_VALUE(b), INTEGER_VALUE(c))); +} + +SEXP api_Rf_psignrank(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_psignrank(NUMERIC_VALUE(a), NUMERIC_VALUE(b), INTEGER_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_qsignrank(SEXP a, SEXP b, SEXP c, SEXP d) { + return ScalarReal(Rf_qsignrank(NUMERIC_VALUE(a), NUMERIC_VALUE(b), INTEGER_VALUE(c), INTEGER_VALUE(d))); +} + +SEXP api_Rf_rsignrank(SEXP a) { + return ScalarReal(Rf_rsignrank(NUMERIC_VALUE(a))); +} + +SEXP api_Rf_ftrunc(SEXP a) { + return ScalarReal(Rf_ftrunc(NUMERIC_VALUE(a))); +} + +SEXP api_Rf_namesgets(SEXP vec, SEXP val) { + return Rf_namesgets(vec, val); +} + +SEXP api_Rf_copyMostAttrib(SEXP x, SEXP y) { + Rf_copyMostAttrib(x, y); + return R_NilValue; +} + +SEXP api_Rf_VectorToPairList(SEXP x) { + return Rf_VectorToPairList(x); +} + +SEXP api_Rf_asCharacterFactor(SEXP x) { + return Rf_asCharacterFactor(x); +} + +SEXP api_Rf_match(SEXP itables, SEXP ix, SEXP nmatch) { + return Rf_match(itables, ix, INTEGER_VALUE(nmatch)); +} + +SEXP api_Rf_NonNullStringMatch(SEXP s, SEXP t) { + return ScalarLogical(Rf_NonNullStringMatch(s, t)); +} + +SEXP api_R_has_slot(SEXP container, SEXP name) { + return ScalarInteger(R_has_slot(container, name)); +} + +SEXP api_Rf_PrintValue(SEXP value) { + Rf_PrintValue(value); + return R_NilValue; +} + +SEXP api_OBJECT(SEXP x) { + return ScalarInteger(OBJECT(x)); +} + +#pragma GCC diagnostic pop +#pragma GCC diagnostic pop diff --git a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/rffiwrappers.h b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/rffiwrappers.h new file mode 100644 index 0000000000..c7a75d9107 --- /dev/null +++ b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/rffiwrappers.h @@ -0,0 +1,483 @@ +/* + * Copyright (c) 2018, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +// Code generated by com.oracle.truffle.r.ffi.codegen.FFITestsCodeGen class run with option '-h' +// See the corresponding C file for more details +#define NO_FASTR_REDEFINE +#include <R.h> +#include <Rdefines.h> +#include <Rinterface.h> +#include <Rinternals.h> +#include <Rinterface.h> +#include <R_ext/Parse.h> +#include <R_ext/Connections.h> +#include <Rmath.h> + +SEXP api_Rf_ScalarInteger(SEXP value); + +SEXP api_Rf_ScalarReal(SEXP value); + +SEXP api_Rf_asReal(SEXP x); + +SEXP api_Rf_asLogical(SEXP x); + +SEXP api_Rf_ScalarString(SEXP value); + +SEXP api_Rf_asInteger(SEXP x); + +SEXP api_Rf_ScalarLogical(SEXP value); + +SEXP api_Rf_asChar(SEXP x); + +SEXP api_Rf_coerceVector(SEXP x, SEXP mode); + +SEXP api_Rf_mkCharLenCE(SEXP bytes, SEXP len, SEXP encoding); + +SEXP api_Rf_cons(SEXP car, SEXP cdr); + +SEXP api_Rf_defineVar(SEXP symbolArg, SEXP value, SEXP envArg); + +SEXP api_R_getClassDef(SEXP clazz); + +SEXP api_R_do_MAKE_CLASS(SEXP clazz); + +SEXP api_R_do_new_object(SEXP classDef); + +SEXP api_Rf_findVar(SEXP symbolArg, SEXP envArg); + +SEXP api_Rf_findVarInFrame(SEXP envArg, SEXP symbolArg); + +SEXP api_Rf_findVarInFrame3(SEXP envArg, SEXP symbolArg, SEXP doGet); + +SEXP api_ATTRIB(SEXP obj); + +SEXP api_Rf_getAttrib(SEXP obj, SEXP name); + +SEXP api_Rf_setAttrib(SEXP obj, SEXP name, SEXP val); + +SEXP api_Rf_inherits(SEXP x, SEXP clazz); + +SEXP api_Rf_install(SEXP name); + +SEXP api_Rf_installChar(SEXP name); + +SEXP api_Rf_lengthgets(SEXP x, SEXP newSize); + +SEXP api_Rf_isString(SEXP x); + +SEXP api_Rf_isNull(SEXP x); + +SEXP api_Rf_PairToVectorList(SEXP x); + +SEXP api_Rf_error(SEXP msg); + +SEXP api_Rf_warning(SEXP msg); + +SEXP api_Rf_warningcall(SEXP call, SEXP msg); + +SEXP api_Rf_errorcall(SEXP call, SEXP msg); + +SEXP api_Rf_allocVector(SEXP mode, SEXP n); + +SEXP api_Rf_allocArray(SEXP mode, SEXP dimsObj); + +SEXP api_Rf_allocMatrix(SEXP mode, SEXP nrow, SEXP ncol); + +SEXP api_Rf_nrows(SEXP x); + +SEXP api_Rf_ncols(SEXP x); + +SEXP api_LENGTH(SEXP x); + +SEXP api_SET_STRING_ELT(SEXP x, SEXP i, SEXP v); + +SEXP api_SET_VECTOR_ELT(SEXP x, SEXP i, SEXP v); + +SEXP api_STRING_ELT(SEXP x, SEXP i); + +SEXP api_VECTOR_ELT(SEXP x, SEXP i); + +SEXP api_NAMED(SEXP x); + +SEXP api_SET_NAMED(SEXP x, SEXP v); + +SEXP api_TYPEOF(SEXP x); + +SEXP api_Rf_any_duplicated(SEXP x, SEXP fromLast); + +SEXP api_Rf_any_duplicated3(SEXP x, SEXP incomparables, SEXP fromLast); + +SEXP api_PRINTNAME(SEXP x); + +SEXP api_TAG(SEXP e); + +SEXP api_CAR(SEXP e); + +SEXP api_CAAR(SEXP e); + +SEXP api_CDR(SEXP e); + +SEXP api_CDAR(SEXP e); + +SEXP api_CADR(SEXP e); + +SEXP api_CADDR(SEXP e); + +SEXP api_CADDDR(SEXP e); + +SEXP api_CAD4R(SEXP e); + +SEXP api_CDDR(SEXP e); + +SEXP api_CDDDR(SEXP e); + +SEXP api_SET_TAG(SEXP x, SEXP y); + +SEXP api_SETCAR(SEXP x, SEXP y); + +SEXP api_SETCDR(SEXP x, SEXP y); + +SEXP api_FORMALS(SEXP x); + +SEXP api_BODY(SEXP x); + +SEXP api_CLOENV(SEXP x); + +SEXP api_SET_FORMALS(SEXP x, SEXP y); + +SEXP api_SET_BODY(SEXP x, SEXP y); + +SEXP api_SET_CLOENV(SEXP x, SEXP y); + +SEXP api_SETCADR(SEXP x, SEXP y); + +SEXP api_SETCADDR(SEXP x, SEXP y); + +SEXP api_SETCADDDR(SEXP x, SEXP y); + +SEXP api_SETCAD4R(SEXP x, SEXP y); + +SEXP api_SYMVALUE(SEXP x); + +SEXP api_SET_SYMVALUE(SEXP x, SEXP v); + +SEXP api_R_BindingIsLocked(SEXP sym, SEXP env); + +SEXP api_R_LockBinding(SEXP sym, SEXP env); + +SEXP api_R_unLockBinding(SEXP sym, SEXP env); + +SEXP api_R_FindNamespace(SEXP name); + +SEXP api_Rf_eval(SEXP expr, SEXP env); + +SEXP api_Rf_findFun(SEXP symbolObj, SEXP envObj); + +SEXP api_Rf_GetOption1(SEXP tag); + +SEXP api_Rf_gsetVar(SEXP symbol, SEXP value, SEXP rho); + +SEXP api_DUPLICATE_ATTRIB(SEXP to, SEXP from); + +SEXP api_R_compute_identical(SEXP x, SEXP y, SEXP flags); + +SEXP api_Rf_copyListMatrix(SEXP s, SEXP t, SEXP byrow); + +SEXP api_Rf_copyMatrix(SEXP s, SEXP t, SEXP byrow); + +SEXP api_RDEBUG(SEXP x); + +SEXP api_SET_RDEBUG(SEXP x, SEXP v); + +SEXP api_RSTEP(SEXP x); + +SEXP api_SET_RSTEP(SEXP x, SEXP v); + +SEXP api_ENCLOS(SEXP x); + +SEXP api_PRVALUE(SEXP x); + +SEXP api_R_lsInternal3(SEXP envArg, SEXP allArg, SEXP sortedArg); + +SEXP api_R_HomeDir(); + +SEXP api_IS_S4_OBJECT(SEXP x); + +SEXP api_SET_S4_OBJECT(SEXP x); + +SEXP api_UNSET_S4_OBJECT(SEXP x); + +SEXP api_Rprintf(SEXP message); + +SEXP api_GetRNGstate(); + +SEXP api_PutRNGstate(); + +SEXP api_unif_rand(); + +SEXP api_Rf_classgets(SEXP x, SEXP y); + +SEXP api_R_ExternalPtrAddr(SEXP x); + +SEXP api_R_ExternalPtrTag(SEXP x); + +SEXP api_R_ExternalPtrProtected(SEXP x); + +SEXP api_R_SetExternalPtrAddr(SEXP x, SEXP addr); + +SEXP api_R_SetExternalPtrTag(SEXP x, SEXP tag); + +SEXP api_R_SetExternalPtrProtected(SEXP x, SEXP prot); + +SEXP api_PRSEEN(SEXP x); + +SEXP api_PRENV(SEXP x); + +SEXP api_R_PromiseExpr(SEXP x); + +SEXP api_PRCODE(SEXP x); + +SEXP api_R_new_custom_connection(SEXP description, SEXP mode, SEXP className, SEXP readAddr); + +SEXP api_R_ReadConnection(SEXP fd, SEXP bufAddress, SEXP size); + +SEXP api_R_WriteConnection(SEXP fd, SEXP bufAddress, SEXP size); + +SEXP api_R_GetConnection(SEXP fd); + +SEXP api_R_do_slot(SEXP o, SEXP name); + +SEXP api_R_do_slot_assign(SEXP o, SEXP name, SEXP value); + +SEXP api_Rf_str2type(SEXP name); + +SEXP api_Rf_dunif(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_qunif(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_punif(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_runif(SEXP a, SEXP b); + +SEXP api_Rf_dchisq(SEXP a, SEXP b, SEXP c); + +SEXP api_Rf_pchisq(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_qchisq(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_rchisq(SEXP a); + +SEXP api_Rf_dnchisq(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_pnchisq(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_qnchisq(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_rnchisq(SEXP a, SEXP b); + +SEXP api_Rf_dnorm4(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_pnorm5(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_qnorm5(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_rnorm(SEXP a, SEXP b); + +SEXP api_Rf_dlnorm(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_plnorm(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_qlnorm(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_rlnorm(SEXP a, SEXP b); + +SEXP api_Rf_dgamma(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_pgamma(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_qgamma(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_rgamma(SEXP a, SEXP b); + +SEXP api_Rf_dbeta(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_pbeta(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_qbeta(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_rbeta(SEXP a, SEXP b); + +SEXP api_Rf_df(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_pf(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_qf(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_rf(SEXP a, SEXP b); + +SEXP api_Rf_dt(SEXP a, SEXP b, SEXP c); + +SEXP api_Rf_pt(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_qt(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_rt(SEXP a); + +SEXP api_Rf_dbinom(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_pbinom(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_qbinom(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_rbinom(SEXP a, SEXP b); + +SEXP api_Rf_dcauchy(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_pcauchy(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_qcauchy(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_rcauchy(SEXP a, SEXP b); + +SEXP api_Rf_dexp(SEXP a, SEXP b, SEXP c); + +SEXP api_Rf_pexp(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_qexp(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_rexp(SEXP a); + +SEXP api_Rf_dgeom(SEXP a, SEXP b, SEXP c); + +SEXP api_Rf_pgeom(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_qgeom(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_rgeom(SEXP a); + +SEXP api_Rf_dhyper(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_phyper(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e, SEXP f); + +SEXP api_Rf_qhyper(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e, SEXP f); + +SEXP api_Rf_rhyper(SEXP a, SEXP b, SEXP c); + +SEXP api_Rf_dnbinom(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_pnbinom(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_qnbinom(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_rnbinom(SEXP a, SEXP b); + +SEXP api_Rf_dnbinom_mu(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_pnbinom_mu(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_qnbinom_mu(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_rnbinom_mu(SEXP a, SEXP b); + +SEXP api_Rf_dpois(SEXP a, SEXP b, SEXP c); + +SEXP api_Rf_ppois(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_qpois(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_rpois(SEXP a); + +SEXP api_Rf_dweibull(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_pweibull(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_qweibull(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_rweibull(SEXP a, SEXP b); + +SEXP api_Rf_dlogis(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_plogis(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_qlogis(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_rlogis(SEXP a, SEXP b); + +SEXP api_Rf_dnbeta(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_pnbeta(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e, SEXP f); + +SEXP api_Rf_qnbeta(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e, SEXP f); + +SEXP api_Rf_dnf(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_pnf(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e, SEXP f); + +SEXP api_Rf_qnf(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e, SEXP f); + +SEXP api_Rf_dnt(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_pnt(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_qnt(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_ptukey(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e, SEXP f); + +SEXP api_Rf_qtukey(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e, SEXP f); + +SEXP api_Rf_dwilcox(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_pwilcox(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_qwilcox(SEXP a, SEXP b, SEXP c, SEXP d, SEXP e); + +SEXP api_Rf_rwilcox(SEXP a, SEXP b); + +SEXP api_Rf_dsignrank(SEXP a, SEXP b, SEXP c); + +SEXP api_Rf_psignrank(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_qsignrank(SEXP a, SEXP b, SEXP c, SEXP d); + +SEXP api_Rf_rsignrank(SEXP a); + +SEXP api_Rf_ftrunc(SEXP a); + +SEXP api_Rf_namesgets(SEXP vec, SEXP val); + +SEXP api_Rf_copyMostAttrib(SEXP x, SEXP y); + +SEXP api_Rf_VectorToPairList(SEXP x); + +SEXP api_Rf_asCharacterFactor(SEXP x); + +SEXP api_Rf_match(SEXP itables, SEXP ix, SEXP nmatch); + +SEXP api_Rf_NonNullStringMatch(SEXP s, SEXP t); + +SEXP api_R_has_slot(SEXP container, SEXP name); + +SEXP api_Rf_PrintValue(SEXP value); + +SEXP api_OBJECT(SEXP x); + diff --git a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.c b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.c index 057eaa8954..0229801217 100644 --- a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.c +++ b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.c @@ -32,6 +32,7 @@ #include <R_ext/Connections.h> #include <R_ext/Parse.h> #include <string.h> +#include <stdint.h> #include "testrffi.h" #define K_RMULTINOM 4 @@ -95,7 +96,7 @@ SEXP createExternalPtr(SEXP addr, SEXP tag, SEXP prot) { } SEXP getExternalPtrAddr(SEXP eptr) { - return ScalarInteger((int) R_ExternalPtrAddr(eptr)); + return ScalarInteger((intptr_t) R_ExternalPtrAddr(eptr)); } SEXP invoke_TYPEOF(SEXP x) { @@ -374,7 +375,7 @@ SEXP test_isNAString(SEXP vec) { } SEXP test_getBytes(SEXP vec) { - char* bytes = R_CHAR(STRING_ELT(vec, 0)); + const char* bytes = R_CHAR(STRING_ELT(vec, 0)); SEXP result; PROTECT(result = allocVector(RAWSXP, Rf_length(STRING_ELT(vec, 0)))); unsigned char* resData = RAW(result); diff --git a/mx.fastr/suite.py b/mx.fastr/suite.py index e83bac692d..be8f7caa50 100644 --- a/mx.fastr/suite.py +++ b/mx.fastr/suite.py @@ -261,7 +261,7 @@ suite = { "sourceDirs" : ["src"], "checkstyle" : "com.oracle.truffle.r.runtime", "dependencies" : [ - "com.oracle.truffle.r.runtime" + "com.oracle.truffle.r.ffi.impl" ], "javaCompliance" : "1.8", "workingSets" : "FastR", -- GitLab