From 8e3a92832db95100bd567e67b129176b20c1f497 Mon Sep 17 00:00:00 2001 From: Lukas Stadler <lukas.stadler@oracle.com> Date: Fri, 24 Aug 2018 14:08:11 +0200 Subject: [PATCH] add Rf_allocList and Rf_allocSExp --- .../ffi/impl/common/JavaUpCallsRFFIImpl.java | 25 + .../r/ffi/impl/upcalls/StdUpCallsRFFI.java | 6 + .../fficall/src/common/rffi_upcallsindex.h | 444 +++++++++--------- .../Rinternals_truffle_common.h | 10 +- 4 files changed, 261 insertions(+), 224 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 e0a7927923..560011c158 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 @@ -478,7 +478,32 @@ public abstract class JavaUpCallsRFFIImpl implements UpCallsRFFI { RAbstractVector result = (RAbstractVector) Rf_allocVector(mode, n); setDims(newDims, result); return result; + } + + @Override + @TruffleBoundary + public Object Rf_allocList(int length) { + Object result = RNull.instance; + for (int i = 0; i < length; i++) { + result = RDataFactory.createPairList(RNull.instance, result); + } + return result; + } + @Override + @TruffleBoundary + public Object Rf_allocSExp(int mode) { + SEXPTYPE type = SEXPTYPE.mapInt(mode); + switch (type) { + case ENVSXP: + return RDataFactory.createNewEnv(null); + case LISTSXP: + return RDataFactory.createPairList(RNull.instance, RNull.instance); + case LANGSXP: + return RDataFactory.createPairList(1, type); + default: + throw unimplemented("unexpected SEXPTYPE " + type); + } } @TruffleBoundary 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 3ba0e88f20..b8f664b9b6 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 @@ -246,6 +246,12 @@ public interface StdUpCallsRFFI { @RFFIRunGC Object Rf_allocMatrix(int mode, int nrow, int ncol); + @RFFIRunGC + Object Rf_allocList(int length); + + @RFFIRunGC + Object Rf_allocSExp(int type); + int Rf_nrows(Object x); int Rf_ncols(Object x); 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 e987c23a84..ea67f4bf47 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 @@ -131,227 +131,229 @@ #define Rf_ScalarString_x 102 #define Rf_VectorToPairList_x 103 #define Rf_allocArray_x 104 -#define Rf_allocMatrix_x 105 -#define Rf_allocVector_x 106 -#define Rf_any_duplicated_x 107 -#define Rf_any_duplicated3_x 108 -#define Rf_asChar_x 109 -#define Rf_asCharacterFactor_x 110 -#define Rf_asInteger_x 111 -#define Rf_asLogical_x 112 -#define Rf_asReal_x 113 -#define Rf_bessel_i_x 114 -#define Rf_bessel_i_ex_x 115 -#define Rf_bessel_j_x 116 -#define Rf_bessel_j_ex_x 117 -#define Rf_bessel_k_x 118 -#define Rf_bessel_k_ex_x 119 -#define Rf_bessel_y_x 120 -#define Rf_bessel_y_ex_x 121 -#define Rf_beta_x 122 -#define Rf_choose_x 123 -#define Rf_classgets_x 124 -#define Rf_coerceVector_x 125 -#define Rf_cons_x 126 -#define Rf_copyListMatrix_x 127 -#define Rf_copyMatrix_x 128 -#define Rf_copyMostAttrib_x 129 -#define Rf_cospi_x 130 -#define Rf_dbeta_x 131 -#define Rf_dbinom_x 132 -#define Rf_dcauchy_x 133 -#define Rf_dchisq_x 134 -#define Rf_defineVar_x 135 -#define Rf_dexp_x 136 -#define Rf_df_x 137 -#define Rf_dgamma_x 138 -#define Rf_dgeom_x 139 -#define Rf_dhyper_x 140 -#define Rf_digamma_x 141 -#define Rf_dlnorm_x 142 -#define Rf_dlogis_x 143 -#define Rf_dnbeta_x 144 -#define Rf_dnbinom_x 145 -#define Rf_dnbinom_mu_x 146 -#define Rf_dnchisq_x 147 -#define Rf_dnf_x 148 -#define Rf_dnorm4_x 149 -#define Rf_dnt_x 150 -#define Rf_dpois_x 151 -#define Rf_dpsifn_x 152 -#define Rf_dsignrank_x 153 -#define Rf_dt_x 154 -#define Rf_dunif_x 155 -#define Rf_duplicate_x 156 -#define Rf_dweibull_x 157 -#define Rf_dwilcox_x 158 -#define Rf_error_x 159 -#define Rf_errorcall_x 160 -#define Rf_eval_x 161 -#define Rf_findFun_x 162 -#define Rf_findVar_x 163 -#define Rf_findVarInFrame_x 164 -#define Rf_findVarInFrame3_x 165 -#define Rf_fprec_x 166 -#define Rf_ftrunc_x 167 -#define Rf_gammafn_x 168 -#define Rf_getAttrib_x 169 -#define Rf_gsetVar_x 170 -#define Rf_inherits_x 171 -#define Rf_install_x 172 -#define Rf_installChar_x 173 -#define Rf_isNull_x 174 -#define Rf_isObject_x 175 -#define Rf_isString_x 176 -#define Rf_lbeta_x 177 -#define Rf_lchoose_x 178 -#define Rf_lengthgets_x 179 -#define Rf_lgamma1p_x 180 -#define Rf_lgammafn_x 181 -#define Rf_lgammafn_sign_x 182 -#define Rf_log1pexp_x 183 -#define Rf_log1pmx_x 184 -#define Rf_logspace_add_x 185 -#define Rf_logspace_sub_x 186 -#define Rf_match_x 187 -#define Rf_mkCharLenCE_x 188 -#define Rf_namesgets_x 189 -#define Rf_ncols_x 190 -#define Rf_nrows_x 191 -#define Rf_pbeta_x 192 -#define Rf_pbinom_x 193 -#define Rf_pcauchy_x 194 -#define Rf_pchisq_x 195 -#define Rf_pentagamma_x 196 -#define Rf_pexp_x 197 -#define Rf_pf_x 198 -#define Rf_pgamma_x 199 -#define Rf_pgeom_x 200 -#define Rf_phyper_x 201 -#define Rf_plnorm_x 202 -#define Rf_plogis_x 203 -#define Rf_pnbeta_x 204 -#define Rf_pnbinom_x 205 -#define Rf_pnbinom_mu_x 206 -#define Rf_pnchisq_x 207 -#define Rf_pnf_x 208 -#define Rf_pnorm5_x 209 -#define Rf_pnorm_both_x 210 -#define Rf_pnt_x 211 -#define Rf_ppois_x 212 -#define Rf_protect_x 213 -#define Rf_psigamma_x 214 -#define Rf_psignrank_x 215 -#define Rf_pt_x 216 -#define Rf_ptukey_x 217 -#define Rf_punif_x 218 -#define Rf_pweibull_x 219 -#define Rf_pwilcox_x 220 -#define Rf_qbeta_x 221 -#define Rf_qbinom_x 222 -#define Rf_qcauchy_x 223 -#define Rf_qchisq_x 224 -#define Rf_qexp_x 225 -#define Rf_qf_x 226 -#define Rf_qgamma_x 227 -#define Rf_qgeom_x 228 -#define Rf_qhyper_x 229 -#define Rf_qlnorm_x 230 -#define Rf_qlogis_x 231 -#define Rf_qnbeta_x 232 -#define Rf_qnbinom_x 233 -#define Rf_qnbinom_mu_x 234 -#define Rf_qnchisq_x 235 -#define Rf_qnf_x 236 -#define Rf_qnorm5_x 237 -#define Rf_qnt_x 238 -#define Rf_qpois_x 239 -#define Rf_qsignrank_x 240 -#define Rf_qt_x 241 -#define Rf_qtukey_x 242 -#define Rf_qunif_x 243 -#define Rf_qweibull_x 244 -#define Rf_qwilcox_x 245 -#define Rf_rbeta_x 246 -#define Rf_rbinom_x 247 -#define Rf_rcauchy_x 248 -#define Rf_rchisq_x 249 -#define Rf_rexp_x 250 -#define Rf_rf_x 251 -#define Rf_rgamma_x 252 -#define Rf_rgeom_x 253 -#define Rf_rhyper_x 254 -#define Rf_rlnorm_x 255 -#define Rf_rlogis_x 256 -#define Rf_rmultinom_x 257 -#define Rf_rnbinom_x 258 -#define Rf_rnbinom_mu_x 259 -#define Rf_rnchisq_x 260 -#define Rf_rnorm_x 261 -#define Rf_rpois_x 262 -#define Rf_rsignrank_x 263 -#define Rf_rt_x 264 -#define Rf_runif_x 265 -#define Rf_rweibull_x 266 -#define Rf_rwilcox_x 267 -#define Rf_setAttrib_x 268 -#define Rf_sign_x 269 -#define Rf_sinpi_x 270 -#define Rf_str2type_x 271 -#define Rf_tanpi_x 272 -#define Rf_tetragamma_x 273 -#define Rf_trigamma_x 274 -#define Rf_unprotect_x 275 -#define Rf_unprotect_ptr_x 276 -#define Rf_warning_x 277 -#define Rf_warningcall_x 278 -#define Rprintf_x 279 -#define SETCAD4R_x 280 -#define SETCADDDR_x 281 -#define SETCADDR_x 282 -#define SETCADR_x 283 -#define SETCAR_x 284 -#define SETCDR_x 285 -#define SETLENGTH_x 286 -#define SETLEVELS_x 287 -#define SET_ATTRIB_x 288 -#define SET_BODY_x 289 -#define SET_CLOENV_x 290 -#define SET_ENCLOS_x 291 -#define SET_FORMALS_x 292 -#define SET_NAMED_FASTR_x 293 -#define SET_OBJECT_x 294 -#define SET_RDEBUG_x 295 -#define SET_RSTEP_x 296 -#define SET_S4_OBJECT_x 297 -#define SET_STRING_ELT_x 298 -#define SET_SYMVALUE_x 299 -#define SET_TAG_x 300 -#define SET_TRUELENGTH_x 301 -#define SET_TYPEOF_x 302 -#define SET_VECTOR_ELT_x 303 -#define STRING_ELT_x 304 -#define SYMVALUE_x 305 -#define TAG_x 306 -#define TRUELENGTH_x 307 -#define TYPEOF_x 308 -#define UNSET_S4_OBJECT_x 309 -#define VECTOR_ELT_x 310 -#define forceSymbols_x 311 -#define getCCallable_x 312 -#define getConnectionClassString_x 313 -#define getEmbeddingDLLInfo_x 314 -#define getOpenModeString_x 315 -#define getSummaryDescription_x 316 -#define isSeekable_x 317 -#define octsize_x 318 -#define registerCCallable_x 319 -#define registerRoutines_x 320 -#define restoreHandlerStacks_x 321 -#define setDotSymbolValues_x 322 -#define unif_rand_x 323 -#define useDynamicSymbols_x 324 +#define Rf_allocList_x 105 +#define Rf_allocMatrix_x 106 +#define Rf_allocSExp_x 107 +#define Rf_allocVector_x 108 +#define Rf_any_duplicated_x 109 +#define Rf_any_duplicated3_x 110 +#define Rf_asChar_x 111 +#define Rf_asCharacterFactor_x 112 +#define Rf_asInteger_x 113 +#define Rf_asLogical_x 114 +#define Rf_asReal_x 115 +#define Rf_bessel_i_x 116 +#define Rf_bessel_i_ex_x 117 +#define Rf_bessel_j_x 118 +#define Rf_bessel_j_ex_x 119 +#define Rf_bessel_k_x 120 +#define Rf_bessel_k_ex_x 121 +#define Rf_bessel_y_x 122 +#define Rf_bessel_y_ex_x 123 +#define Rf_beta_x 124 +#define Rf_choose_x 125 +#define Rf_classgets_x 126 +#define Rf_coerceVector_x 127 +#define Rf_cons_x 128 +#define Rf_copyListMatrix_x 129 +#define Rf_copyMatrix_x 130 +#define Rf_copyMostAttrib_x 131 +#define Rf_cospi_x 132 +#define Rf_dbeta_x 133 +#define Rf_dbinom_x 134 +#define Rf_dcauchy_x 135 +#define Rf_dchisq_x 136 +#define Rf_defineVar_x 137 +#define Rf_dexp_x 138 +#define Rf_df_x 139 +#define Rf_dgamma_x 140 +#define Rf_dgeom_x 141 +#define Rf_dhyper_x 142 +#define Rf_digamma_x 143 +#define Rf_dlnorm_x 144 +#define Rf_dlogis_x 145 +#define Rf_dnbeta_x 146 +#define Rf_dnbinom_x 147 +#define Rf_dnbinom_mu_x 148 +#define Rf_dnchisq_x 149 +#define Rf_dnf_x 150 +#define Rf_dnorm4_x 151 +#define Rf_dnt_x 152 +#define Rf_dpois_x 153 +#define Rf_dpsifn_x 154 +#define Rf_dsignrank_x 155 +#define Rf_dt_x 156 +#define Rf_dunif_x 157 +#define Rf_duplicate_x 158 +#define Rf_dweibull_x 159 +#define Rf_dwilcox_x 160 +#define Rf_error_x 161 +#define Rf_errorcall_x 162 +#define Rf_eval_x 163 +#define Rf_findFun_x 164 +#define Rf_findVar_x 165 +#define Rf_findVarInFrame_x 166 +#define Rf_findVarInFrame3_x 167 +#define Rf_fprec_x 168 +#define Rf_ftrunc_x 169 +#define Rf_gammafn_x 170 +#define Rf_getAttrib_x 171 +#define Rf_gsetVar_x 172 +#define Rf_inherits_x 173 +#define Rf_install_x 174 +#define Rf_installChar_x 175 +#define Rf_isNull_x 176 +#define Rf_isObject_x 177 +#define Rf_isString_x 178 +#define Rf_lbeta_x 179 +#define Rf_lchoose_x 180 +#define Rf_lengthgets_x 181 +#define Rf_lgamma1p_x 182 +#define Rf_lgammafn_x 183 +#define Rf_lgammafn_sign_x 184 +#define Rf_log1pexp_x 185 +#define Rf_log1pmx_x 186 +#define Rf_logspace_add_x 187 +#define Rf_logspace_sub_x 188 +#define Rf_match_x 189 +#define Rf_mkCharLenCE_x 190 +#define Rf_namesgets_x 191 +#define Rf_ncols_x 192 +#define Rf_nrows_x 193 +#define Rf_pbeta_x 194 +#define Rf_pbinom_x 195 +#define Rf_pcauchy_x 196 +#define Rf_pchisq_x 197 +#define Rf_pentagamma_x 198 +#define Rf_pexp_x 199 +#define Rf_pf_x 200 +#define Rf_pgamma_x 201 +#define Rf_pgeom_x 202 +#define Rf_phyper_x 203 +#define Rf_plnorm_x 204 +#define Rf_plogis_x 205 +#define Rf_pnbeta_x 206 +#define Rf_pnbinom_x 207 +#define Rf_pnbinom_mu_x 208 +#define Rf_pnchisq_x 209 +#define Rf_pnf_x 210 +#define Rf_pnorm5_x 211 +#define Rf_pnorm_both_x 212 +#define Rf_pnt_x 213 +#define Rf_ppois_x 214 +#define Rf_protect_x 215 +#define Rf_psigamma_x 216 +#define Rf_psignrank_x 217 +#define Rf_pt_x 218 +#define Rf_ptukey_x 219 +#define Rf_punif_x 220 +#define Rf_pweibull_x 221 +#define Rf_pwilcox_x 222 +#define Rf_qbeta_x 223 +#define Rf_qbinom_x 224 +#define Rf_qcauchy_x 225 +#define Rf_qchisq_x 226 +#define Rf_qexp_x 227 +#define Rf_qf_x 228 +#define Rf_qgamma_x 229 +#define Rf_qgeom_x 230 +#define Rf_qhyper_x 231 +#define Rf_qlnorm_x 232 +#define Rf_qlogis_x 233 +#define Rf_qnbeta_x 234 +#define Rf_qnbinom_x 235 +#define Rf_qnbinom_mu_x 236 +#define Rf_qnchisq_x 237 +#define Rf_qnf_x 238 +#define Rf_qnorm5_x 239 +#define Rf_qnt_x 240 +#define Rf_qpois_x 241 +#define Rf_qsignrank_x 242 +#define Rf_qt_x 243 +#define Rf_qtukey_x 244 +#define Rf_qunif_x 245 +#define Rf_qweibull_x 246 +#define Rf_qwilcox_x 247 +#define Rf_rbeta_x 248 +#define Rf_rbinom_x 249 +#define Rf_rcauchy_x 250 +#define Rf_rchisq_x 251 +#define Rf_rexp_x 252 +#define Rf_rf_x 253 +#define Rf_rgamma_x 254 +#define Rf_rgeom_x 255 +#define Rf_rhyper_x 256 +#define Rf_rlnorm_x 257 +#define Rf_rlogis_x 258 +#define Rf_rmultinom_x 259 +#define Rf_rnbinom_x 260 +#define Rf_rnbinom_mu_x 261 +#define Rf_rnchisq_x 262 +#define Rf_rnorm_x 263 +#define Rf_rpois_x 264 +#define Rf_rsignrank_x 265 +#define Rf_rt_x 266 +#define Rf_runif_x 267 +#define Rf_rweibull_x 268 +#define Rf_rwilcox_x 269 +#define Rf_setAttrib_x 270 +#define Rf_sign_x 271 +#define Rf_sinpi_x 272 +#define Rf_str2type_x 273 +#define Rf_tanpi_x 274 +#define Rf_tetragamma_x 275 +#define Rf_trigamma_x 276 +#define Rf_unprotect_x 277 +#define Rf_unprotect_ptr_x 278 +#define Rf_warning_x 279 +#define Rf_warningcall_x 280 +#define Rprintf_x 281 +#define SETCAD4R_x 282 +#define SETCADDDR_x 283 +#define SETCADDR_x 284 +#define SETCADR_x 285 +#define SETCAR_x 286 +#define SETCDR_x 287 +#define SETLENGTH_x 288 +#define SETLEVELS_x 289 +#define SET_ATTRIB_x 290 +#define SET_BODY_x 291 +#define SET_CLOENV_x 292 +#define SET_ENCLOS_x 293 +#define SET_FORMALS_x 294 +#define SET_NAMED_FASTR_x 295 +#define SET_OBJECT_x 296 +#define SET_RDEBUG_x 297 +#define SET_RSTEP_x 298 +#define SET_S4_OBJECT_x 299 +#define SET_STRING_ELT_x 300 +#define SET_SYMVALUE_x 301 +#define SET_TAG_x 302 +#define SET_TRUELENGTH_x 303 +#define SET_TYPEOF_x 304 +#define SET_VECTOR_ELT_x 305 +#define STRING_ELT_x 306 +#define SYMVALUE_x 307 +#define TAG_x 308 +#define TRUELENGTH_x 309 +#define TYPEOF_x 310 +#define UNSET_S4_OBJECT_x 311 +#define VECTOR_ELT_x 312 +#define forceSymbols_x 313 +#define getCCallable_x 314 +#define getConnectionClassString_x 315 +#define getEmbeddingDLLInfo_x 316 +#define getOpenModeString_x 317 +#define getSummaryDescription_x 318 +#define isSeekable_x 319 +#define octsize_x 320 +#define registerCCallable_x 321 +#define registerRoutines_x 322 +#define restoreHandlerStacks_x 323 +#define setDotSymbolValues_x 324 +#define unif_rand_x 325 +#define useDynamicSymbols_x 326 -#define UPCALLS_TABLE_SIZE 325 +#define UPCALLS_TABLE_SIZE 327 #endif // RFFI_UPCALLSINDEX_H 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 5d7b516f78..1b03bf8538 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 @@ -364,14 +364,18 @@ SEXP Rf_allocMatrix(SEXPTYPE mode, int nrow, int ncol) { return result; } -SEXP Rf_allocList(int x) { +SEXP Rf_allocList(int length) { TRACE0(); - return UNIMPLEMENTED; + SEXP result = ((call_Rf_allocList) callbacks[Rf_allocList_x])(length); + checkExitCall(); + return result; } SEXP Rf_allocSExp(SEXPTYPE t) { TRACE0(); - return UNIMPLEMENTED; + SEXP result = ((call_Rf_allocSExp) callbacks[Rf_allocSExp_x])(t); + checkExitCall(); + return result; } void Rf_defineVar(SEXP symbol, SEXP value, SEXP rho) { -- GitLab