Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Feature/add more shields#1011

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
eddelbuettel merged 3 commits intomasterfromfeature/add_more_shields
Nov 4, 2019
Merged
Show file tree
Hide file tree
Changes from1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
PrevPrevious commit
NextNext commit
protect Rf_mkString inside Rf_lang2
  • Loading branch information
@eddelbuettel
eddelbuettel committedNov 2, 2019
commitdd7b0d23df22cf3b298e8842006d962d200abfcf
1 change: 1 addition & 0 deletionsChangeLog
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,6 +3,7 @@
* DESCRIPTION (Version, Date): Roll minor version

* inst/include/Rcpp/Reference.h: Shield Rf_mkstring inside Rf_lang2
* inst/include/Rcpp/Environment.h: Idem (inside Rf_lang4)
2019-10-31 Romain Francois <romain@rstudio.com>

* inst/include/Rcpp/DataFrame.h: Protect temporaries from gc
Expand Down
9 changes: 4 additions & 5 deletionsinst/include/Rcpp/Environment.h
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,8 +2,8 @@
//
// Environment.h: Rcpp R/C++ interface class library -- access R environments
//
// Copyright (C) 2009 - 2013Dirk Eddelbuettel and Romain Francois
// Copyright (C) 2014 Dirk Eddelbuettel, Romain Francois and Kevin Ushey
// Copyright (C) 2009 - 2013 Dirk Eddelbuettel and Romain Francois
// Copyright (C) 2014- 2019 Dirk Eddelbuettel, Romain Francois and Kevin Ushey
//
// This file is part of Rcpp.
//
Expand DownExpand Up@@ -246,9 +246,8 @@ namespace Rcpp{
we have to go back to R to do this operation */
SEXP internalSym = Rf_install( ".Internal" );
SEXP removeSym = Rf_install( "remove" );
Shield<SEXP> call( Rf_lang2(internalSym,
Rf_lang4(removeSym, Rf_mkString(name.c_str()), Storage::get__(), Rf_ScalarLogical( FALSE ))
) );
Shield<SEXP> str(Rf_mkString(name.c_str()));
Shield<SEXP> call(Rf_lang2(internalSym, Rf_lang4(removeSym, str, Storage::get__(), Rf_ScalarLogical(FALSE))));
Copy link
Contributor

@kevinusheykevinusheyNov 4, 2019
edited
Loading

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

It may also be worth pulling outRf_lang4() from this call and protecting that as well, since IIUC that will be an unprotected R object being passed intoRf_lang2(), and soin theory could be cleaned up by the GC when the pairlist created inRf_lang2() is allocated..

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Hmm, I might be wrong. IIUC, each of thelang* helper functions protects the arguments passed in, before the final call is created:

https://github.com/wch/r-source/blob/eafae2b2ed39b3383943cd6c36f92d78f966811e/src/include/Rinlinedfuns.h#L629-L677

So this pattern should in fact be safe.

Rcpp_fast_eval( call, R_GlobalEnv ) ;
}
} else{
Expand Down

[8]ページ先頭

©2009-2025 Movatter.jp