void init_utils(JNIEnv *env) { curenv = env; RDataFactoryClass = checkFindClass(env, "com/oracle/truffle/r/runtime/data/RDataFactory"); CallRFFIHelperClass = checkFindClass(env, "com/oracle/truffle/r/runtime/ffi/jnr/CallRFFIHelper"); RRuntimeClass = checkFindClass(env, "com/oracle/truffle/r/runtime/RRuntime"); RInternalErrorClass = checkFindClass(env, "com/oracle/truffle/r/runtime/RInternalError"); unimplementedMethodID = checkGetMethodID(env, RInternalErrorClass, "unimplemented", "(Ljava/lang/String;)Ljava/lang/RuntimeException;", 1); createSymbolMethodID = checkGetMethodID(env, RDataFactoryClass, "createSymbolInterned", "(Ljava/lang/String;)Lcom/oracle/truffle/r/runtime/data/RSymbol;", 1); validateMethodID = checkGetMethodID(env, CallRFFIHelperClass, "validate", "(Ljava/lang/Object;)Ljava/lang/Object;", 1); for (int i = 0; i < CACHED_GLOBALREFS_TABLE_SIZE; i++) { cachedGlobalRefs[i] = NULL; } copiedVectors = malloc(sizeof(CopiedVector) * COPIED_VECTORS_INITIAL_SIZE); copiedVectorsLength = COPIED_VECTORS_INITIAL_SIZE; copiedVectorsIndex = 0; }
void init_pcre(JNIEnv *env) { JNI_PCRE_ResultClass = checkFindClass(env, "com/oracle/truffle/r/runtime/ffi/PCRERFFI$Result"); ResultClassConstructorID = checkGetMethodID(env, JNI_PCRE_ResultClass, "<init>", "(JLjava/lang/String;I)V", 0); }
void init_variables(JNIEnv *env, jobjectArray initialValues) { // initialValues is an array of enums jclass enumClass = (*env)->GetObjectClass(env, (*env)->GetObjectArrayElement(env, initialValues, 0)); jmethodID nameMethodID = checkGetMethodID(env, enumClass, "name", "()Ljava/lang/String;", 0); jmethodID ordinalMethodID = checkGetMethodID(env, enumClass, "ordinal", "()I", 0); jmethodID getValueMethodID = checkGetMethodID(env, enumClass, "getValue", "()Ljava/lang/Object;", 0); jclass doubleClass = checkFindClass(env, "java/lang/Double"); jclass intClass = checkFindClass(env, "java/lang/Integer"); jmethodID doubleValueMethodID = checkGetMethodID(env, doubleClass, "doubleValue", "()D", 0); jmethodID intValueMethodID = checkGetMethodID(env, intClass, "intValue", "()I", 0); R_GlobalEnvMethodID = checkGetMethodID(env, UpCallsRFFIClass, "R_GlobalEnv", "()Ljava/lang/Object;", 0); R_BaseEnvMethodID = checkGetMethodID(env, UpCallsRFFIClass, "R_BaseEnv", "()Ljava/lang/Object;", 0); R_BaseNamespaceMethodID = checkGetMethodID(env, UpCallsRFFIClass, "R_BaseNamespace", "()Ljava/lang/Object;", 0); R_NamespaceRegistryMethodID = checkGetMethodID(env, UpCallsRFFIClass, "R_NamespaceRegistry", "()Ljava/lang/Object;", 0); isInteractiveMethodID = checkGetMethodID(env, UpCallsRFFIClass, "isInteractive", "()I", 0); R_GlobalContextMethodID = checkGetMethodID(env, UpCallsRFFIClass, "R_GlobalContext", "()Ljava/lang/Object;", 0); int length = (*env)->GetArrayLength(env, initialValues); int index; for (index = 0; index < length; index++) { jobject variable = (*env)->GetObjectArrayElement(env, initialValues, index); jstring nameString = (*env)->CallObjectMethod(env, variable, nameMethodID); const char *nameChars = (*env)->GetStringUTFChars(env, nameString, NULL); jobject value = (*env)->CallObjectMethod(env, variable, getValueMethodID); if (value != NULL) { if (strcmp(nameChars, "R_Home") == 0) { R_Home = (*env)->GetStringUTFChars(env, value, NULL); } else if (strcmp(nameChars, "R_NaN") == 0) { R_NaN = (*env)->CallDoubleMethod(env, value, doubleValueMethodID); } else if (strcmp(nameChars, "R_PosInf") == 0) { R_PosInf = (*env)->CallDoubleMethod(env, value, doubleValueMethodID); } else if (strcmp(nameChars, "R_NegInf") == 0) { R_NegInf = (*env)->CallDoubleMethod(env, value, doubleValueMethodID); } else if (strcmp(nameChars, "R_NaReal") == 0) { R_NaReal = (*env)->CallDoubleMethod(env, value, doubleValueMethodID); } else if (strcmp(nameChars, "R_NaInt") == 0) { R_NaInt = (*env)->CallIntMethod(env, value, intValueMethodID); } else { SEXP ref = createGlobalRef(env, value, 1); if (strcmp(nameChars, "R_EmptyEnv") == 0) { R_EmptyEnv = ref; } else if (strcmp(nameChars, "R_NilValue") == 0) { R_NilValue = ref; } else if (strcmp(nameChars, "R_UnboundValue") == 0) { R_UnboundValue = ref; } else if (strcmp(nameChars, "R_MissingArg") == 0) { R_MissingArg = ref; } else if (strcmp(nameChars, "R_Bracket2Symbol") == 0) { R_Bracket2Symbol = ref; } else if (strcmp(nameChars, "R_BracketSymbol") == 0) { R_BracketSymbol = ref; } else if (strcmp(nameChars, "R_BraceSymbol") == 0) { R_BraceSymbol = ref; } else if (strcmp(nameChars, "R_ClassSymbol") == 0) { R_ClassSymbol = ref; } else if (strcmp(nameChars, "R_DeviceSymbol") == 0) { R_DeviceSymbol = ref; } else if (strcmp(nameChars, "R_DevicesSymbol") == 0) { R_DevicesSymbol = ref; } else if (strcmp(nameChars, "R_DimNamesSymbol") == 0) { R_DimNamesSymbol = ref; } else if (strcmp(nameChars, "R_DimSymbol") == 0) { R_DimSymbol = ref; } else if (strcmp(nameChars, "R_DollarSymbol") == 0) { R_DollarSymbol = ref; } else if (strcmp(nameChars, "R_DotsSymbol") == 0) { R_DotsSymbol = ref; } else if (strcmp(nameChars, "R_DropSymbol") == 0) { R_DropSymbol = ref; } else if (strcmp(nameChars, "R_LastvalueSymbol") == 0) { R_LastvalueSymbol = ref; } else if (strcmp(nameChars, "R_LevelsSymbol") == 0) { R_LevelsSymbol = ref; } else if (strcmp(nameChars, "R_ModeSymbol") == 0) { R_ModeSymbol = ref; } else if (strcmp(nameChars, "R_NameSymbol") == 0) { R_NameSymbol = ref; } else if (strcmp(nameChars, "R_NamesSymbol") == 0) { R_NamesSymbol = ref; } else if (strcmp(nameChars, "R_NaRmSymbol") == 0) { R_NaRmSymbol = ref; } else if (strcmp(nameChars, "R_PackageSymbol") == 0) { R_PackageSymbol = ref; } else if (strcmp(nameChars, "R_QuoteSymbol") == 0) { R_QuoteSymbol = ref; } else if (strcmp(nameChars, "R_RowNamesSymbol") == 0) { R_RowNamesSymbol = ref; } else if (strcmp(nameChars, "R_SeedsSymbol") == 0) { R_SeedsSymbol = ref; } else if (strcmp(nameChars, "R_SourceSymbol") == 0) { R_SourceSymbol = ref; } else if (strcmp(nameChars, "R_TspSymbol") == 0) { R_TspSymbol = ref; } else if (strcmp(nameChars, "R_dot_defined") == 0) { R_dot_defined = ref; } else if (strcmp(nameChars, "R_dot_Method") == 0) { R_dot_Method = ref; } else if (strcmp(nameChars, "R_dot_target") == 0) { R_dot_target = ref; } else if (strcmp(nameChars, "R_SrcfileSymbol") == 0) { R_SrcfileSymbol = ref; } else if (strcmp(nameChars, "R_SrcrefSymbol") == 0) { R_SrcrefSymbol = ref; } else if (strcmp(nameChars, "R_DimSymbol") == 0) { R_DimSymbol = ref; } else if (strcmp(nameChars, "R_DimNamesSymbol") == 0) { R_DimNamesSymbol = ref; } else if (strcmp(nameChars, "R_NaString") == 0) { R_NaString = ref; } else if (strcmp(nameChars, "R_BlankString") == 0) { R_BlankString = ref; } else if (strcmp(nameChars, "R_TrueValue") == 0) { R_TrueValue = ref; } else if (strcmp(nameChars, "R_FalseValue") == 0) { R_FalseValue = ref; } else if (strcmp(nameChars, "R_LogicalNAValue") == 0) { R_LogicalNAValue = ref; } else { char msg[128]; strcpy(msg, "non-null R variable not assigned: "); strcat(msg, nameChars); fatalError(msg); } } } } }
void init_internals(JNIEnv *env) { Rf_ScalarIntegerMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_ScalarInteger", "(I)Lcom/oracle/truffle/r/runtime/data/RIntVector;", 1); Rf_ScalarDoubleMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_ScalarDouble", "(D)Lcom/oracle/truffle/r/runtime/data/RDoubleVector;", 1); Rf_ScalarStringMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_ScalarString", "(Ljava/lang/String;)Lcom/oracle/truffle/r/runtime/data/RStringVector;", 1); Rf_ScalarLogicalMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_ScalarLogical", "(I)Lcom/oracle/truffle/r/runtime/data/RLogicalVector;", 1); Rf_consMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_cons", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", 1); Rf_evalMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_eval", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", 1); Rf_findfunMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_findfun", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", 1); Rf_defineVarMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_defineVar", "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V", 1); Rf_findVarMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_findVar", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", 1); Rf_findVarInFrameMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_findVarInFrame", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", 1); Rf_getAttribMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_getAttrib", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", 1); Rf_setAttribMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_setAttrib", "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V", 1); Rf_isStringMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_isString", "(Ljava/lang/Object;)I", 1); Rf_isNullMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_isNull", "(Ljava/lang/Object;)I", 1); Rf_warningMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_warning", "(Ljava/lang/String;)V", 1); Rf_warningcallMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_warningcall", "(Ljava/lang/Object;Ljava/lang/String;)V", 1); Rf_errorMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_error", "(Ljava/lang/String;)V", 1); Rf_allocateVectorMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_allocateVector", "(II)Ljava/lang/Object;", 1); Rf_allocateMatrixMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_allocateMatrix", "(III)Ljava/lang/Object;", 1); Rf_allocateArrayMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_allocateArray", "(ILjava/lang/Object;)Ljava/lang/Object;", 1); Rf_duplicateMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_duplicate", "(Ljava/lang/Object;)Ljava/lang/Object;", 1); Rf_NewHashedEnvMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_createNewEnv", "(Lcom/oracle/truffle/r/runtime/env/REnvironment;Ljava/lang/String;ZI)Lcom/oracle/truffle/r/runtime/env/REnvironment;", 1); RprintfMethodID = checkGetMethodID(env, CallRFFIHelperClass, "printf", "(Ljava/lang/String;)V", 1); R_FindNamespaceMethodID = checkGetMethodID(env, CallRFFIHelperClass, "R_FindNamespace", "(Ljava/lang/Object;)Ljava/lang/Object;", 1); Rf_GetOption1MethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_GetOption1", "(Ljava/lang/Object;)Ljava/lang/Object;", 1); Rf_gsetVarMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_gsetVar", "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V", 1); Rf_inheritsMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_inherits", "(Ljava/lang/Object;Ljava/lang/String;)I", 1); // Rf_rPsortMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_rPsort", "(Lcom/oracle/truffle/r/runtime/data/RDoubleVector;II)", 1); // Rf_iPsortMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_iPsort", "(Lcom/oracle/truffle/r/runtime/data/RIntVector;II)", 1); CADR_MethodID = checkGetMethodID(env, CallRFFIHelperClass, "CADR", "(Ljava/lang/Object;)Ljava/lang/Object;", 1); TAG_MethodID = checkGetMethodID(env, CallRFFIHelperClass, "TAG", "(Ljava/lang/Object;)Ljava/lang/Object;", 1); PRINTNAME_MethodID = checkGetMethodID(env, CallRFFIHelperClass, "PRINTNAME", "(Ljava/lang/Object;)Ljava/lang/Object;", 1); CAR_MethodID = checkGetMethodID(env, CallRFFIHelperClass, "CAR", "(Ljava/lang/Object;)Ljava/lang/Object;", 1); CDR_MethodID = checkGetMethodID(env, CallRFFIHelperClass, "CDR", "(Ljava/lang/Object;)Ljava/lang/Object;", 1); SET_TAG_MethodID = checkGetMethodID(env, CallRFFIHelperClass, "SET_TAG", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", 1); SETCAR_MethodID = checkGetMethodID(env, CallRFFIHelperClass, "SETCAR", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", 1); SETCDR_MethodID = checkGetMethodID(env, CallRFFIHelperClass, "SETCDR", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", 1); SET_STRING_ELT_MethodID = checkGetMethodID(env, CallRFFIHelperClass, "SET_STRING_ELT", "(Ljava/lang/Object;ILjava/lang/Object;)V", 1); SET_VECTOR_ELT_MethodID = checkGetMethodID(env, CallRFFIHelperClass, "SET_VECTOR_ELT", "(Ljava/lang/Object;ILjava/lang/Object;)V", 1); RAW_MethodID = checkGetMethodID(env, CallRFFIHelperClass, "RAW", "(Ljava/lang/Object;)[B", 1); REAL_MethodID = checkGetMethodID(env, CallRFFIHelperClass, "REAL", "(Ljava/lang/Object;)[D", 1); LOGICAL_MethodID = checkGetMethodID(env, CallRFFIHelperClass, "LOGICAL", "(Ljava/lang/Object;)[I", 1); INTEGER_MethodID = checkGetMethodID(env, CallRFFIHelperClass, "INTEGER", "(Ljava/lang/Object;)[I", 1); STRING_ELT_MethodID = checkGetMethodID(env, CallRFFIHelperClass, "STRING_ELT", "(Ljava/lang/Object;I)Ljava/lang/String;", 1); VECTOR_ELT_MethodID = checkGetMethodID(env, CallRFFIHelperClass, "VECTOR_ELT", "(Ljava/lang/Object;I)Ljava/lang/Object;", 1); LENGTH_MethodID = checkGetMethodID(env, CallRFFIHelperClass, "LENGTH", "(Ljava/lang/Object;)I", 1); Rf_asIntegerMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_asInteger", "(Ljava/lang/Object;)I", 1); // Rf_asRealMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_asReal", "(Ljava/lang/Object;)D", 1); Rf_asCharMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_asChar", "(Ljava/lang/Object;)Ljava/lang/String;", 1); Rf_asLogicalMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_asLogical", "(Ljava/lang/Object;)I", 1); Rf_PairToVectorListMethodID = checkGetMethodID(env, CallRFFIHelperClass, "Rf_PairToVectorList", "(Ljava/lang/Object;)Ljava/lang/Object;", 1); SEXPTYPEClass = checkFindClass(env, "com/oracle/truffle/r/runtime/gnur/SEXPTYPE"); gnuRCodeForObjectMethodID = checkGetMethodID(env, SEXPTYPEClass, "gnuRCodeForObject", "(Ljava/lang/Object;)I", 1); NAMED_MethodID = checkGetMethodID(env, CallRFFIHelperClass, "NAMED", "(Ljava/lang/Object;)I", 1); DUPLICATE_ATTRIB_MethodID = checkGetMethodID(env, CallRFFIHelperClass, "DUPLICATE_ATTRIB", "(Ljava/lang/Object;Ljava/lang/Object;)V", 1); iS4ObjectMethodID = checkGetMethodID(env, CallRFFIHelperClass, "isS4Object", "(Ljava/lang/Object;)I", 1); RExternalPtrClass = checkFindClass(env, "com/oracle/truffle/r/runtime/data/RExternalPtr"); createExternalPtrMethodID = checkGetMethodID(env, RDataFactoryClass, "createExternalPtr", "(JLjava/lang/Object;Ljava/lang/Object;)Lcom/oracle/truffle/r/runtime/data/RExternalPtr;", 1); externalPtrGetAddrMethodID = checkGetMethodID(env, RExternalPtrClass, "getAddr", "()J", 0); externalPtrGetTagMethodID = checkGetMethodID(env, RExternalPtrClass, "getTag", "()Ljava/lang/Object;", 0); externalPtrGetProtMethodID = checkGetMethodID(env, RExternalPtrClass, "getProt", "()Ljava/lang/Object;", 0); externalPtrSetAddrMethodID = checkGetMethodID(env, RExternalPtrClass, "setAddr", "(J)V", 0); externalPtrSetTagMethodID = checkGetMethodID(env, RExternalPtrClass, "setTag", "(Ljava/lang/Object;)V", 0); externalPtrSetProtMethodID = checkGetMethodID(env, RExternalPtrClass, "setProt", "(Ljava/lang/Object;)V", 0); }