Skip to content

Commit 300d000

Browse files
thirdwingeddelbuettel
authored andcommitted
Switching from Rcpp_eval to Rcpp_fast_eval. close #866 (#867)
* use Rcpp_fast_eval instead of Rcpp_eval * update * fix potential linking problems. In barrier.cpp, what we evaluate is 'getNamespace("Rcpp")'. Of course, it is better to call this in a try-catch manner. This will cause some potential linking problem.
1 parent ee7cbe9 commit 300d000

File tree

16 files changed

+46
-48
lines changed

16 files changed

+46
-48
lines changed

inst/examples/SugarPerformance/sugarBenchmarks.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ src <- sprintf( '
5353
5454
timer.Reset(); timer.Start();
5555
for (unsigned int i=0; i<runs; i++) {
56-
NumericVector res2 = Rcpp_eval( call, e ) ;
56+
NumericVector res2 = Rcpp_fast_eval( call, e ) ;
5757
}
5858
timer.Stop();
5959
double t3 = timer.ElapsedTime();

inst/include/Rcpp/DataFrame.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ namespace Rcpp{
132132
obj.attr( "names") = names ;
133133
Shield<SEXP> call( Rf_lang3(as_df_symb, obj, wrap( strings_as_factors ) ) ) ;
134134
SET_TAG( CDDR(call), strings_as_factors_symb ) ;
135-
Shield<SEXP> res( Rcpp_eval( call ) ) ;
135+
Shield<SEXP> res( Rcpp_fast_eval( call ) ) ;
136136
DataFrame_Impl out( res ) ;
137137
return out ;
138138

inst/include/Rcpp/Environment.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ namespace Rcpp{
3333
if( Rf_isEnvironment(x) ) return x ;
3434
SEXP asEnvironmentSym = Rf_install("as.environment");
3535
try {
36-
Shield<SEXP> res( Rcpp_eval( Rf_lang2( asEnvironmentSym, x ) ) );
36+
Shield<SEXP> res( Rcpp_fast_eval( Rf_lang2( asEnvironmentSym, x ) ) );
3737
return res ;
3838
} catch( const eval_error& ex) {
3939
const char* fmt = "Cannot convert object to an environment: "
@@ -249,7 +249,7 @@ namespace Rcpp{
249249
Shield<SEXP> call( Rf_lang2(internalSym,
250250
Rf_lang4(removeSym, Rf_mkString(name.c_str()), Storage::get__(), Rf_ScalarLogical( FALSE ))
251251
) );
252-
Rcpp_eval( call, R_GlobalEnv ) ;
252+
Rcpp_fast_eval( call, R_GlobalEnv ) ;
253253
}
254254
} else{
255255
throw no_such_binding(name) ;
@@ -374,7 +374,7 @@ namespace Rcpp{
374374
try{
375375
SEXP getNamespaceSym = Rf_install("getNamespace");
376376
Shield<SEXP> package_str( Rf_mkString(package.c_str()) );
377-
env = Rcpp_eval( Rf_lang2(getNamespaceSym, package_str) ) ;
377+
env = Rcpp_fast_eval( Rf_lang2(getNamespaceSym, package_str) ) ;
378378
} catch( ... ){
379379
throw no_such_namespace( package ) ;
380380
}
@@ -393,7 +393,7 @@ namespace Rcpp{
393393
*/
394394
Environment_Impl new_child(bool hashed) const {
395395
SEXP newEnvSym = Rf_install("new.env");
396-
return Environment_Impl( Rcpp_eval(Rf_lang3( newEnvSym, Rf_ScalarLogical(hashed), Storage::get__() )) );
396+
return Environment_Impl( Rcpp_fast_eval(Rf_lang3( newEnvSym, Rf_ScalarLogical(hashed), Storage::get__() )) );
397397
}
398398

399399

inst/include/Rcpp/Function.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ namespace Rcpp{
7979

8080
SEXP operator()() const {
8181
Shield<SEXP> call(Rf_lang1(Storage::get__()));
82-
return Rcpp_eval(call);
82+
return Rcpp_fast_eval(call);
8383
}
8484

8585
#include <Rcpp/generated/Function__operator.h>

inst/include/Rcpp/Language.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,14 +134,14 @@ namespace Rcpp{
134134
* eval this call in the global environment
135135
*/
136136
SEXP eval() const {
137-
return Rcpp_eval( Storage::get__(), R_GlobalEnv ) ;
137+
return Rcpp_fast_eval( Storage::get__(), R_GlobalEnv ) ;
138138
}
139139

140140
/**
141141
* eval this call in the requested environment
142142
*/
143143
SEXP eval(SEXP env) const {
144-
return Rcpp_eval( Storage::get__(), env ) ;
144+
return Rcpp_fast_eval( Storage::get__(), env ) ;
145145
}
146146

147147
SEXP fast_eval() const {

inst/include/Rcpp/Module.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@ static VARIABLE_IS_NOT_USED SEXP moduleSym = NULL;
454454
// this macro is called by code wanting to load a module -- see RInside's rinside_module_sample0.cpp
455455
#define LOAD_RCPP_MODULE(NAME) \
456456
Shield<SEXP> __load_module_call__( Rf_lang2( GET_MODULE_SYM, _rcpp_module_boot_##NAME() ) ); \
457-
Rcpp_eval( __load_module_call__, R_GlobalEnv );
457+
Rcpp_fast_eval( __load_module_call__, R_GlobalEnv );
458458

459459
#endif
460460

inst/include/Rcpp/Reference.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ namespace Rcpp{
5959
Reference_Impl( const std::string& klass ) {
6060
SEXP newSym = Rf_install("new");
6161
Shield<SEXP> call( Rf_lang2( newSym, Rf_mkString( klass.c_str() ) ) );
62-
Storage::set__( Rcpp_eval( call , Rcpp::internal::get_Rcpp_namespace()) );
62+
Storage::set__( Rcpp_fast_eval( call , Rcpp::internal::get_Rcpp_namespace()) );
6363
}
6464

6565
void update( SEXP x){

inst/include/Rcpp/exceptions.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ inline SEXP get_last_call(){
258258
SEXP sys_calls_symbol = Rf_install("sys.calls");
259259

260260
Rcpp::Shield<SEXP> sys_calls_expr(Rf_lang1(sys_calls_symbol));
261-
Rcpp::Shield<SEXP> calls(Rcpp_eval(sys_calls_expr, R_GlobalEnv));
261+
Rcpp::Shield<SEXP> calls(Rcpp_fast_eval(sys_calls_expr, R_GlobalEnv));
262262

263263
SEXP cur, prev;
264264
prev = cur = calls;

inst/include/Rcpp/generated/Function__operator.h

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -26,108 +26,108 @@
2626
2727
template <TYPENAMES>
2828
SEXP operator()(ARGUMENTS){
29-
return Rcpp_eval( Rf_lang2( Storage::get__(), pairlist(PARAMETERS) ) ) ;
29+
return Rcpp_fast_eval( Rf_lang2( Storage::get__(), pairlist(PARAMETERS) ) ) ;
3030
}
3131
3232
*/
3333
template <typename T1>
3434
SEXP operator()(const T1& t1) const {
35-
return Rcpp_eval( Rcpp_lcons( Storage::get__(), pairlist(t1) ) ) ;
35+
return Rcpp_fast_eval( Rcpp_lcons( Storage::get__(), pairlist(t1) ) ) ;
3636
}
3737

3838
template <typename T1, typename T2>
3939
SEXP operator()(const T1& t1, const T2& t2) const {
40-
return Rcpp_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2) ) ) ;
40+
return Rcpp_fast_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2) ) ) ;
4141
}
4242

4343
template <typename T1, typename T2, typename T3>
4444
SEXP operator()(const T1& t1, const T2& t2, const T3& t3) const {
45-
return Rcpp_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3) ) ) ;
45+
return Rcpp_fast_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3) ) ) ;
4646
}
4747

4848
template <typename T1, typename T2, typename T3, typename T4>
4949
SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4) const {
50-
return Rcpp_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4) ) ) ;
50+
return Rcpp_fast_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4) ) ) ;
5151
}
5252

5353
template <typename T1, typename T2, typename T3, typename T4, typename T5>
5454
SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5) const {
55-
return Rcpp_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5) ) ) ;
55+
return Rcpp_fast_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5) ) ) ;
5656
}
5757

5858
template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
5959
SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6) const {
60-
return Rcpp_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6) ) ) ;
60+
return Rcpp_fast_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6) ) ) ;
6161
}
6262

6363
template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
6464
SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7) const {
65-
return Rcpp_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7) ) ) ;
65+
return Rcpp_fast_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7) ) ) ;
6666
}
6767

6868
template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
6969
SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8) const {
70-
return Rcpp_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8) ) ) ;
70+
return Rcpp_fast_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8) ) ) ;
7171
}
7272

7373
template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
7474
SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9) const {
75-
return Rcpp_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9) ) ) ;
75+
return Rcpp_fast_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9) ) ) ;
7676
}
7777

7878
template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
7979
SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10) const {
80-
return Rcpp_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10) ) ) ;
80+
return Rcpp_fast_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10) ) ) ;
8181
}
8282

8383
template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11>
8484
SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11) const {
85-
return Rcpp_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11) ) ) ;
85+
return Rcpp_fast_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11) ) ) ;
8686
}
8787

8888
template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
8989
SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12) const {
90-
return Rcpp_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12) ) ) ;
90+
return Rcpp_fast_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12) ) ) ;
9191
}
9292

9393
template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
9494
SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13) const {
95-
return Rcpp_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13) ) ) ;
95+
return Rcpp_fast_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13) ) ) ;
9696
}
9797

9898
template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14>
9999
SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14) const {
100-
return Rcpp_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14) ) ) ;
100+
return Rcpp_fast_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14) ) ) ;
101101
}
102102

103103
template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15>
104104
SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15) const {
105-
return Rcpp_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15) ) ) ;
105+
return Rcpp_fast_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15) ) ) ;
106106
}
107107

108108
template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16>
109109
SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16) const {
110-
return Rcpp_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16) ) ) ;
110+
return Rcpp_fast_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16) ) ) ;
111111
}
112112

113113
template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17>
114114
SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17) const {
115-
return Rcpp_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17) ) ) ;
115+
return Rcpp_fast_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17) ) ) ;
116116
}
117117

118118
template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18>
119119
SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18) const {
120-
return Rcpp_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18) ) ) ;
120+
return Rcpp_fast_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18) ) ) ;
121121
}
122122

123123
template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19>
124124
SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19) const {
125-
return Rcpp_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19) ) ) ;
125+
return Rcpp_fast_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19) ) ) ;
126126
}
127127

128128
template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15, typename T16, typename T17, typename T18, typename T19, typename T20>
129129
SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20) const {
130-
return Rcpp_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20) ) ) ;
130+
return Rcpp_fast_eval( Rcpp_lcons( Storage::get__(), pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20) ) ) ;
131131
}
132132

133133
/* </code-bloat> */

inst/include/Rcpp/proxy/FieldProxy.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,12 @@ class FieldProxyPolicy {
4242

4343
SEXP get() const {
4444
Shield<SEXP> call( Rf_lang3( R_DollarSymbol, parent, Rf_mkString(field_name.c_str()) ) ) ;
45-
return Rcpp_eval( call, R_GlobalEnv ) ;
45+
return Rcpp_fast_eval( call, R_GlobalEnv ) ;
4646
}
4747
void set(SEXP x ) {
4848
SEXP dollarGetsSym = Rf_install( "$<-");
4949
Shield<SEXP> call( Rf_lang4( dollarGetsSym, parent, Rf_mkString(field_name.c_str()) , x ) ) ;
50-
parent.set__( Rcpp_eval( call, R_GlobalEnv ) );
50+
parent.set__( Rcpp_fast_eval( call, R_GlobalEnv ) );
5151
}
5252
} ;
5353

@@ -67,7 +67,7 @@ class FieldProxyPolicy {
6767

6868
SEXP get() const {
6969
Shield<SEXP> call( Rf_lang3( R_DollarSymbol, parent, Rf_mkString(field_name.c_str()) ) ) ;
70-
return Rcpp_eval( call, R_GlobalEnv ) ;
70+
return Rcpp_fast_eval( call, R_GlobalEnv ) ;
7171
}
7272
} ;
7373

0 commit comments

Comments
 (0)