From 34ddf146e5806e8ed2167aa9b3b1de5f72ac2eba Mon Sep 17 00:00:00 2001 From: Tomas Stupka <tomas.stupka@oracle.com> Date: Wed, 4 Oct 2017 20:22:45 +0200 Subject: [PATCH] some minor fixes in java upcalls --- .../ffi/impl/common/JavaUpCallsRFFIImpl.java | 15 +- .../fficall/src/common/rffi_upcallsindex.h | 250 +++++++++--------- 2 files changed, 138 insertions(+), 127 deletions(-) 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 79b8172bce..7e6193122e 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 @@ -321,7 +321,11 @@ public abstract class JavaUpCallsRFFIImpl implements UpCallsRFFI { } nameAsString = Utils.intern(nameAsString); if (val == RNull.instance) { - removeAttr(attrObj, nameAsString); + if ("class" == nameAsString) { + removeClassAttr(attrObj); + } else { + removeAttr(attrObj, nameAsString); + } } else if ("class" == nameAsString) { attrObj.initAttributes().define(nameAsString, val); } else { @@ -338,6 +342,11 @@ public abstract class JavaUpCallsRFFIImpl implements UpCallsRFFI { a.removeAttr(name); } + @TruffleBoundary + private static void removeClassAttr(RAttributable a) { + a.setClassAttr(null); + } + public static RStringVector getClassHr(Object v) { return ClassHierarchyNode.getClassHierarchy(v); } @@ -644,7 +653,7 @@ public abstract class JavaUpCallsRFFIImpl implements UpCallsRFFI { @TruffleBoundary public long Rf_any_duplicated(Object x, int fromLast) { RAbstractVector vec = (RAbstractVector) x; - if (vec.getLength() == 0) { + if (vec.getLength() <= 1) { return 0; } else { return DuplicationHelper.analyze(vec, null, true, fromLast != 0).getIndex(); @@ -873,7 +882,7 @@ public abstract class JavaUpCallsRFFIImpl implements UpCallsRFFI { RFunction indenticalBuiltin = RContext.getInstance().lookupBuiltin("identical"); Object res = RContext.getEngine().evalFunction(indenticalBuiltin, null, null, true, null, x, y, RRuntime.asLogical((!((flags & 1) == 0))), RRuntime.asLogical((!((flags & 2) == 0))), RRuntime.asLogical((!((flags & 4) == 0))), RRuntime.asLogical((!((flags & 8) == 0))), RRuntime.asLogical((!((flags & 16) == 0)))); - return (int) res; + return RRuntime.logical2int((byte) res); } @Override 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 681477a7f7..c149521873 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 @@ -45,130 +45,132 @@ #define R_Home_x 40 #define R_HomeDir_x 41 #define R_Interactive_x 42 -#define R_MakeExternalPtr_x 43 -#define R_MethodsNamespace_x 44 -#define R_NamespaceRegistry_x 45 -#define R_NewHashedEnv_x 46 -#define R_ParseVector_x 47 -#define R_PreserveObject_x 48 -#define R_PromiseExpr_x 49 -#define R_ProtectWithIndex_x 50 -#define R_ReadConnection_x 51 -#define R_ReleaseObject_x 52 -#define R_Reprotect_x 53 -#define R_SetExternalPtrAddr_x 54 -#define R_SetExternalPtrProtected_x 55 -#define R_SetExternalPtrTag_x 56 -#define R_TempDir_x 57 -#define R_ToplevelExec_x 58 -#define R_WriteConnection_x 59 -#define R_alloc_x 60 -#define R_compute_identical_x 61 -#define R_do_MAKE_CLASS_x 62 -#define R_do_new_object_x 63 -#define R_do_slot_x 64 -#define R_do_slot_assign_x 65 -#define R_getClassDef_x 66 -#define R_getContextCall_x 67 -#define R_getContextEnv_x 68 -#define R_getContextFun_x 69 -#define R_getContextSrcRef_x 70 -#define R_getGlobalFunctionContext_x 71 -#define R_getParentFunctionContext_x 72 -#define R_has_slot_x 73 -#define R_insideBrowser_x 74 -#define R_isEqual_x 75 -#define R_isGlobal_x 76 -#define R_lsInternal3_x 77 -#define R_new_custom_connection_x 78 -#define R_tryEval_x 79 -#define Rf_GetOption1_x 80 -#define Rf_NonNullStringMatch_x 81 -#define Rf_PairToVectorList_x 82 -#define Rf_ScalarDouble_x 83 -#define Rf_ScalarInteger_x 84 -#define Rf_ScalarLogical_x 85 -#define Rf_ScalarString_x 86 -#define Rf_VectorToPairList_x 87 -#define Rf_allocArray_x 88 -#define Rf_allocMatrix_x 89 -#define Rf_allocVector_x 90 -#define Rf_any_duplicated_x 91 -#define Rf_asChar_x 92 -#define Rf_asCharacterFactor_x 93 -#define Rf_asInteger_x 94 -#define Rf_asLogical_x 95 -#define Rf_asReal_x 96 -#define Rf_classgets_x 97 -#define Rf_coerceVector_x 98 -#define Rf_cons_x 99 -#define Rf_copyListMatrix_x 100 -#define Rf_copyMatrix_x 101 -#define Rf_copyMostAttrib_x 102 -#define Rf_defineVar_x 103 -#define Rf_dunif_x 104 -#define Rf_duplicate_x 105 -#define Rf_error_x 106 -#define Rf_errorcall_x 107 -#define Rf_eval_x 108 -#define Rf_findFun_x 109 -#define Rf_findVar_x 110 -#define Rf_findVarInFrame_x 111 -#define Rf_findVarInFrame3_x 112 -#define Rf_getAttrib_x 113 -#define Rf_gsetVar_x 114 -#define Rf_inherits_x 115 -#define Rf_install_x 116 -#define Rf_installChar_x 117 -#define Rf_isNull_x 118 -#define Rf_isString_x 119 -#define Rf_lengthgets_x 120 -#define Rf_match_x 121 -#define Rf_mkCharLenCE_x 122 -#define Rf_namesgets_x 123 -#define Rf_ncols_x 124 -#define Rf_nrows_x 125 -#define Rf_protect_x 126 -#define Rf_punif_x 127 -#define Rf_qunif_x 128 -#define Rf_runif_x 129 -#define Rf_setAttrib_x 130 -#define Rf_str2type_x 131 -#define Rf_unprotect_x 132 -#define Rf_unprotect_ptr_x 133 -#define Rf_warning_x 134 -#define Rf_warningcall_x 135 -#define Rprintf_x 136 -#define SETCADR_x 137 -#define SETCAR_x 138 -#define SETCDR_x 139 -#define SET_NAMED_FASTR_x 140 -#define SET_RDEBUG_x 141 -#define SET_RSTEP_x 142 -#define SET_S4_OBJECT_x 143 -#define SET_STRING_ELT_x 144 -#define SET_SYMVALUE_x 145 -#define SET_TAG_x 146 -#define SET_TYPEOF_FASTR_x 147 -#define SET_VECTOR_ELT_x 148 -#define STRING_ELT_x 149 -#define SYMVALUE_x 150 -#define TAG_x 151 -#define TYPEOF_x 152 -#define UNSET_S4_OBJECT_x 153 -#define VECTOR_ELT_x 154 -#define forceSymbols_x 155 -#define getCCallable_x 156 -#define getConnectionClassString_x 157 -#define getOpenModeString_x 158 -#define getSummaryDescription_x 159 -#define isSeekable_x 160 -#define registerCCallable_x 161 -#define registerRoutines_x 162 -#define setDotSymbolValues_x 163 -#define unif_rand_x 164 -#define useDynamicSymbols_x 165 +#define R_LockBinding_x 43 +#define R_MakeExternalPtr_x 44 +#define R_MethodsNamespace_x 45 +#define R_NamespaceRegistry_x 46 +#define R_NewHashedEnv_x 47 +#define R_ParseVector_x 48 +#define R_PreserveObject_x 49 +#define R_PromiseExpr_x 50 +#define R_ProtectWithIndex_x 51 +#define R_ReadConnection_x 52 +#define R_ReleaseObject_x 53 +#define R_Reprotect_x 54 +#define R_SetExternalPtrAddr_x 55 +#define R_SetExternalPtrProtected_x 56 +#define R_SetExternalPtrTag_x 57 +#define R_TempDir_x 58 +#define R_ToplevelExec_x 59 +#define R_WriteConnection_x 60 +#define R_alloc_x 61 +#define R_compute_identical_x 62 +#define R_do_MAKE_CLASS_x 63 +#define R_do_new_object_x 64 +#define R_do_slot_x 65 +#define R_do_slot_assign_x 66 +#define R_getClassDef_x 67 +#define R_getContextCall_x 68 +#define R_getContextEnv_x 69 +#define R_getContextFun_x 70 +#define R_getContextSrcRef_x 71 +#define R_getGlobalFunctionContext_x 72 +#define R_getParentFunctionContext_x 73 +#define R_has_slot_x 74 +#define R_insideBrowser_x 75 +#define R_isEqual_x 76 +#define R_isGlobal_x 77 +#define R_lsInternal3_x 78 +#define R_new_custom_connection_x 79 +#define R_tryEval_x 80 +#define R_unLockBinding_x 81 +#define Rf_GetOption1_x 82 +#define Rf_NonNullStringMatch_x 83 +#define Rf_PairToVectorList_x 84 +#define Rf_ScalarDouble_x 85 +#define Rf_ScalarInteger_x 86 +#define Rf_ScalarLogical_x 87 +#define Rf_ScalarString_x 88 +#define Rf_VectorToPairList_x 89 +#define Rf_allocArray_x 90 +#define Rf_allocMatrix_x 91 +#define Rf_allocVector_x 92 +#define Rf_any_duplicated_x 93 +#define Rf_asChar_x 94 +#define Rf_asCharacterFactor_x 95 +#define Rf_asInteger_x 96 +#define Rf_asLogical_x 97 +#define Rf_asReal_x 98 +#define Rf_classgets_x 99 +#define Rf_coerceVector_x 100 +#define Rf_cons_x 101 +#define Rf_copyListMatrix_x 102 +#define Rf_copyMatrix_x 103 +#define Rf_copyMostAttrib_x 104 +#define Rf_defineVar_x 105 +#define Rf_dunif_x 106 +#define Rf_duplicate_x 107 +#define Rf_error_x 108 +#define Rf_errorcall_x 109 +#define Rf_eval_x 110 +#define Rf_findFun_x 111 +#define Rf_findVar_x 112 +#define Rf_findVarInFrame_x 113 +#define Rf_findVarInFrame3_x 114 +#define Rf_getAttrib_x 115 +#define Rf_gsetVar_x 116 +#define Rf_inherits_x 117 +#define Rf_install_x 118 +#define Rf_installChar_x 119 +#define Rf_isNull_x 120 +#define Rf_isString_x 121 +#define Rf_lengthgets_x 122 +#define Rf_match_x 123 +#define Rf_mkCharLenCE_x 124 +#define Rf_namesgets_x 125 +#define Rf_ncols_x 126 +#define Rf_nrows_x 127 +#define Rf_protect_x 128 +#define Rf_punif_x 129 +#define Rf_qunif_x 130 +#define Rf_runif_x 131 +#define Rf_setAttrib_x 132 +#define Rf_str2type_x 133 +#define Rf_unprotect_x 134 +#define Rf_unprotect_ptr_x 135 +#define Rf_warning_x 136 +#define Rf_warningcall_x 137 +#define Rprintf_x 138 +#define SETCADR_x 139 +#define SETCAR_x 140 +#define SETCDR_x 141 +#define SET_NAMED_FASTR_x 142 +#define SET_RDEBUG_x 143 +#define SET_RSTEP_x 144 +#define SET_S4_OBJECT_x 145 +#define SET_STRING_ELT_x 146 +#define SET_SYMVALUE_x 147 +#define SET_TAG_x 148 +#define SET_TYPEOF_FASTR_x 149 +#define SET_VECTOR_ELT_x 150 +#define STRING_ELT_x 151 +#define SYMVALUE_x 152 +#define TAG_x 153 +#define TYPEOF_x 154 +#define UNSET_S4_OBJECT_x 155 +#define VECTOR_ELT_x 156 +#define forceSymbols_x 157 +#define getCCallable_x 158 +#define getConnectionClassString_x 159 +#define getOpenModeString_x 160 +#define getSummaryDescription_x 161 +#define isSeekable_x 162 +#define registerCCallable_x 163 +#define registerRoutines_x 164 +#define setDotSymbolValues_x 165 +#define unif_rand_x 166 +#define useDynamicSymbols_x 167 -#define UPCALLS_TABLE_SIZE 166 +#define UPCALLS_TABLE_SIZE 168 #endif // RFFI_UPCALLSINDEX_H -- GitLab