Exemple #1
0
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;
}
Exemple #2
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);
}
Exemple #3
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);
				}
			}
		}
	}
}
Exemple #4
0
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);
}