And I'm seeing you pointed that out at the end of the README... so yes, we should probably just have our exception inherit from std::exception.
On Sun, Feb 6, 2022 at 9:31 AM Dirk Eddelbuettel <e...@debian.org> wrote: > > On 6 February 2022 at 18:18, Jeroen Ooms wrote: > | Well not really, this kind of misses my point that it the > | unwind-protect makes it impossible to meaningfully catch the R error > | in C++, handle it, and continue running the C++ code, without aborting > | the entire mission and throwing the user back in the console. > > I see. Well if we wanted to catch an R error on the R side, adding tryCatch > still works. Here are your initial R function, renamed, and a new one: > > callbackWithoutTry <- function() { > stop("Ouch from R") > } > > callback <- function() { > tryCatch(stop("Ouch from R"), > error = function(e) { cat("Well that went south\n") }, > finally = function(e) { cat("Normal end\n") } ) > } > > This (under UNWIND_PROTECT) behaves: > > edd@rob:/tmp/uptest(master)$ install.r . > * installing *source* package ‘uptest’ ... > ** using staged installation > ** libs > rm -f uptest.so RcppExports.o callback.o > ccache g++-11 -I"/usr/share/R/include" -DNDEBUG > -DRCPP_USE_UNWIND_PROTECT -I'/usr/local/lib/R/site-library/Rcpp/include' > -fpic -g -O3 -Wall -pipe -pedantic -c RcppExports.cpp -o RcppExports.o > ccache g++-11 -I"/usr/share/R/include" -DNDEBUG > -DRCPP_USE_UNWIND_PROTECT -I'/usr/local/lib/R/site-library/Rcpp/include' > -fpic -g -O3 -Wall -pipe -pedantic -c callback.cpp -o callback.o > ccache g++-11 -Wl,-S -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions > -flto=auto -Wl,-z,relro -o uptest.so RcppExports.o callback.o > -L/usr/lib/R/lib -lR > installing to > /usr/local/lib/R/site-library/00LOCK-uptest/00new/uptest/libs > ** R > ** byte-compile and prepare package for lazy loading > ** help > *** installing help indices > ** building package indices > ** testing if installed package can be loaded from temporary location > ** checking absolute paths in shared objects and dynamic libraries > ** testing if installed package can be loaded from final location > ** testing if installed package keeps a record of temporary installation > path > * DONE (uptest) > edd@rob:/tmp/uptest(master)$ R -q > > uptest::uptest() > Well that went south > [1] 42 > > > > So this catches the stop(), enters a designates block and resumes in the > C++ > function that called it all still returning the 42 we desired as The > Answer. > > Dirk > > -- > https://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org > _______________________________________________ > Rcpp-devel mailing list > Rcpp-devel@lists.r-forge.r-project.org > https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
_______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel