On 24 March 2020 at 11:39, Lionel Henry wrote: | > Shield<SEXP> res(Rcpp_fast_eval(Rf_lang2(asEnvironmentSym, x), R_GlobalEnv)); | | The call should be protected before evaluation though. So more like: | | Shield<SEXP> call(Rf_lang2(asEnvironmentSym, x)); | return Rcpp_fast_eval(call, R_GlobalEnv);
Good catch. And recursive grep for Rf_lang2 in the Rcpp sources tree suggests this is as the common pattern in all other instances. Dirk edd@rob:~/git/rcpp(master)$ ag Rf_lang2 inst/include/ inst/include/Rcpp/exceptions.h 360: Rcpp::Shield<SEXP> simpleErrorExpr(Rf_lang2(::Rf_install("simpleError"), txt)); 365: Rcpp::Shield<SEXP> simpleErrorExpr( Rf_lang2(::Rf_install("simpleError"), tryError )); 388: Rcpp::Shield<SEXP> expr( Rf_lang2( stop_sym , condition ) ) ; 395: Rcpp::Shield<SEXP> expr( Rf_lang2( stop_sym , condition ) ) ; inst/include/Rcpp/Reference.h 62: Shield<SEXP> call(Rf_lang2(newSym, str)); inst/include/Rcpp/api/meat/Rcpp_eval.h 99: Shield<SEXP> conditionMessageCall(::Rf_lang2(::Rf_install("conditionMessage"), res)); inst/include/Rcpp/macros/macros.h 69: SEXP expr = PROTECT( Rf_lang2( stop_sym , rcpp_output_condition ) ) ; \ inst/include/Rcpp/Environment.h 36: Shield<SEXP> res(Rcpp_fast_eval(Rf_lang2(asEnvironmentSym, x), R_GlobalEnv)); 250: Shield<SEXP> call(Rf_lang2(internalSym, Rf_lang4(removeSym, str, Storage::get__(), Rf_ScalarLogical(FALSE)))); 376: Shield<SEXP> call( Rf_lang2(getNamespaceSym, package_str) ); inst/include/Rcpp/r_cast.h 34: Shield<SEXP> call(Rf_lang2(funSym, x)); 117: Shield<SEXP> call( Rf_lang2( Rf_install( "as.character" ), x ) ); inst/include/Rcpp/Module.h 456: Shield<SEXP> __load_module_call__( Rf_lang2( GET_MODULE_SYM, _rcpp_module_boot_##NAME() ) ); \ inst/include/Rcpp/lang.h 26:#define Rcpp_lang2 Rf_lang2 edd@rob:~/git/rcpp(master)$ -- http://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel