diff -Nru r-cran-rlang-0.2.1/debian/changelog r-cran-rlang-0.2.2/debian/changelog --- r-cran-rlang-0.2.1/debian/changelog 2018-06-03 06:45:10.000000000 +0000 +++ r-cran-rlang-0.2.2/debian/changelog 2018-08-20 06:59:13.000000000 +0000 @@ -1,3 +1,10 @@ +r-cran-rlang (0.2.2-1) unstable; urgency=medium + + * New upstream version + * Standards-Version: 4.2.0 + + -- Andreas Tille Mon, 20 Aug 2018 08:59:13 +0200 + r-cran-rlang (0.2.1-1) unstable; urgency=medium * New upstream version diff -Nru r-cran-rlang-0.2.1/debian/control r-cran-rlang-0.2.2/debian/control --- r-cran-rlang-0.2.1/debian/control 2018-06-03 06:45:10.000000000 +0000 +++ r-cran-rlang-0.2.2/debian/control 2018-08-20 06:59:13.000000000 +0000 @@ -6,7 +6,7 @@ Build-Depends: debhelper (>= 11~), dh-r, r-base-dev -Standards-Version: 4.1.4 +Standards-Version: 4.2.0 Vcs-Browser: https://salsa.debian.org/r-pkg-team/r-cran-rlang Vcs-Git: https://salsa.debian.org/r-pkg-team/r-cran-rlang.git Homepage: https://cran.r-project.org/package=rlang diff -Nru r-cran-rlang-0.2.1/DESCRIPTION r-cran-rlang-0.2.2/DESCRIPTION --- r-cran-rlang-0.2.1/DESCRIPTION 2018-05-30 14:23:07.000000000 +0000 +++ r-cran-rlang-0.2.2/DESCRIPTION 2018-08-16 18:20:03.000000000 +0000 @@ -1,5 +1,5 @@ Package: rlang -Version: 0.2.1 +Version: 0.2.2 Title: Functions for Base Types and Core R and 'Tidyverse' Features Description: A toolbox for working with base types, core R features like the condition system, and core 'Tidyverse' features like tidy @@ -19,10 +19,10 @@ URL: http://rlang.tidyverse.org, https://github.com/r-lib/rlang BugReports: https://github.com/r-lib/rlang/issues NeedsCompilation: yes -Packaged: 2018-05-30 13:14:55 UTC; lionel +Packaged: 2018-08-14 17:56:07 UTC; lionel Author: Lionel Henry [aut, cre], Hadley Wickham [aut], RStudio [cph] Maintainer: Lionel Henry Repository: CRAN -Date/Publication: 2018-05-30 14:23:07 UTC +Date/Publication: 2018-08-16 18:20:03 UTC diff -Nru r-cran-rlang-0.2.1/MD5 r-cran-rlang-0.2.2/MD5 --- r-cran-rlang-0.2.1/MD5 2018-05-30 14:23:07.000000000 +0000 +++ r-cran-rlang-0.2.2/MD5 2018-08-16 18:20:03.000000000 +0000 @@ -1,6 +1,6 @@ -71407c1d03f289a82400d7c70d47238b *DESCRIPTION +7229c46f0c93b3e32f5027fffe8eae48 *DESCRIPTION 8986989469c97882d531b6b6505469fd *NAMESPACE -296beb2972cf1195c6ca65ec3f38350f *NEWS.md +d71765d80161768f00cfc5eb085931f6 *NEWS.md a8c92e452b5010861f5bf7e1ace18d3a *R/arg.R a9f036d8e6cf5329f46722c7eab184e2 *R/attr.R 66261d131eecf6bd7155675cee18fb10 *R/c-api.R @@ -200,7 +200,7 @@ 4276b74a748829a5d44c7bd030092a76 *man/with_handlers.Rd baef0a2bfaafceab310a424f60c0fd13 *man/with_restarts.Rd 05c8f3ee0da0505c57bf0a07c1b5e06d *src/Makevars -4207bede3a15215abaf8a36962c73457 *src/capture.c +0a70be5c69b043affb1b3f20eb42f0a8 *src/capture.c 372738f63854b1faa1e7dc2c3768a7b0 *src/export.c 424bca744cf6aa17004d54f07912b5d1 *src/export/exported-tests.c d30b5c981d24549cd979723001a5a17a *src/export/exported.c @@ -209,7 +209,7 @@ 87e61dd32ed6cb2def862f4df241125a *src/internal/arg.c 9cd0edce26bd2fcc0ac0ebe7c87e5b3d *src/internal/dots.c d4b0254f76d5196e0823dbbcfab66320 *src/internal/dots.h -780b52c10dcbae30104fd978850f214b *src/internal/eval-tidy.c +f09dbbe1fab487bcd653a05e20d74cb8 *src/internal/eval-tidy.c 4f59e263727c3af88c2dd0b9028673dc *src/internal/expr-interp-rotate.c d94334212a74d3d56e347d85675e5ea5 *src/internal/expr-interp-rotate.h 4fbe3b8804dadd9b06974ce38067329e *src/internal/expr-interp.c @@ -223,10 +223,10 @@ 43afc5909482baa8ebb7ad4e338c5c27 *src/lib.c beb904363b5b7873d995dbb16533224f *src/lib/attrs.c c7c852680c71570b08310d884734a3fd *src/lib/attrs.h -4270bddc21541809a41abb22ef1cfde0 *src/lib/cnd.c +61d9298e6850134971aafd5e5ead9443 *src/lib/cnd.c b0c4f991491e8541c9b9a1aa5c426075 *src/lib/cnd.h 61240b6e58497c4c6691df5db385d2d2 *src/lib/debug.h -b6fc14af43d3f2f840c85b2a3725098c *src/lib/env.c +7dafc396fa261a308e5f3a369bf288ab *src/lib/env.c bdf0965c55e458bbf408eb8c4bdac5d2 *src/lib/env.h 504c393f53f7aac9d951bfccd1abbdd5 *src/lib/eval.c bb39269899a1647fc0d5618ceada47c7 *src/lib/eval.h @@ -249,9 +249,9 @@ 0118530a4c06ff62d039985b4bb95cd2 *src/lib/rlang.h 3d22e89d63de6dbcb53c0352ca1f5bb7 *src/lib/sexp.c 7d11a7e40ecf953e1ef093ef3977159e *src/lib/sexp.h -1afb1bf096d7ee30850ab30618f9c6b9 *src/lib/squash.c +b85b18ee719026afdf7cc61096599ab5 *src/lib/squash.c b21ec8fa3f3599696fd677b27631ab92 *src/lib/squash.h -1bacf3a10138f51fad20f5ca9b8b7f94 *src/lib/stack.c +3fe630336e23e2eddf1699ca19774c5b *src/lib/stack.c ca5ec968a58e31753b06ac34eaa04132 *src/lib/stack.h 0b96cb0ff95091cf208b92a1a0b0f095 *src/lib/state.h bde789a0f2c185be4c1cea2413796697 *src/lib/sym-unescape.c diff -Nru r-cran-rlang-0.2.1/NEWS.md r-cran-rlang-0.2.2/NEWS.md --- r-cran-rlang-0.2.1/NEWS.md 2018-05-30 12:41:36.000000000 +0000 +++ r-cran-rlang-0.2.2/NEWS.md 2018-08-14 14:08:56.000000000 +0000 @@ -1,4 +1,10 @@ +# rlang 0.2.2 + +This is a maintenance release that fixes several garbage collection +protection issues. + + # rlang 0.2.1 This is a maintenance release that fixes several tidy evaluation diff -Nru r-cran-rlang-0.2.1/src/capture.c r-cran-rlang-0.2.2/src/capture.c --- r-cran-rlang-0.2.1/src/capture.c 2018-05-30 13:14:55.000000000 +0000 +++ r-cran-rlang-0.2.2/src/capture.c 2018-08-14 17:56:07.000000000 +0000 @@ -50,30 +50,45 @@ SEXP attribute_hidden rlang_capturearginfo(SEXP call, SEXP op, SEXP args, SEXP rho) { + int nProt = 0; + // Unwrap first layer of promise SEXP sym = findVarInFrame3(rho, install("x"), TRUE); + PROTECT(sym); ++nProt; // May be a literal if compiler did not wrap in a promise - if (TYPEOF(sym) == PROMSXP) - sym = PREXPR(sym); - else - return new_captured_literal(sym); + if (TYPEOF(sym) != PROMSXP) { + SEXP value = new_captured_literal(sym); + UNPROTECT(nProt); + return value; + } - if (TYPEOF(sym) != SYMSXP) + sym = PREXPR(sym); + + if (TYPEOF(sym) != SYMSXP) { + UNPROTECT(nProt); error(_("\"x\" must be an argument name")); + } SEXP frame = CAR(args); SEXP arg = findVar(sym, frame); + PROTECT(arg); ++nProt; - if (arg == R_UnboundValue) + if (arg == R_UnboundValue) { + UNPROTECT(nProt); error(_("object '%s' not found"), CHAR(PRINTNAME(sym))); + } + SEXP value; if (arg == R_MissingArg) - return new_captured_literal(arg); + value = new_captured_literal(arg); else if (TYPEOF(arg) == PROMSXP) - return new_captured_promise(arg, frame); + value = new_captured_promise(arg, frame); else - return new_captured_literal(arg); + value = new_captured_literal(arg); + + UNPROTECT(nProt); + return value; } SEXP capturedots(SEXP frame) { diff -Nru r-cran-rlang-0.2.1/src/internal/eval-tidy.c r-cran-rlang-0.2.2/src/internal/eval-tidy.c --- r-cran-rlang-0.2.1/src/internal/eval-tidy.c 2018-05-30 13:14:55.000000000 +0000 +++ r-cran-rlang-0.2.2/src/internal/eval-tidy.c 2018-08-14 17:56:07.000000000 +0000 @@ -348,10 +348,11 @@ // for quosure thunks. Otherwise we create a heavier data mask with // all the masking objects, data pronouns, etc. if (data == r_null) { - mask = new_quosure_mask(env); + mask = KEEP(new_quosure_mask(env)); } else { - mask = rlang_as_data_mask(data, env); + mask = KEEP(rlang_as_data_mask(data, env)); } + ++n_protect; sexp* out = r_eval(expr, mask); FREE(n_protect); diff -Nru r-cran-rlang-0.2.1/src/lib/cnd.c r-cran-rlang-0.2.2/src/lib/cnd.c --- r-cran-rlang-0.2.1/src/lib/cnd.c 2018-05-30 13:14:55.000000000 +0000 +++ r-cran-rlang-0.2.2/src/lib/cnd.c 2018-08-14 17:56:07.000000000 +0000 @@ -83,9 +83,9 @@ r_vec_poke_n(cnd, 1, data, 0, r_length(cnd) - 1); r_poke_names(cnd, KEEP(new_condition_names(data))); - r_poke_class(cnd, KEEP(chr_append(type, r_string("condition")))); + r_poke_class(cnd, KEEP(chr_append(type, KEEP(r_string("condition"))))); - FREE(3); + FREE(4); return cnd; } diff -Nru r-cran-rlang-0.2.1/src/lib/env.c r-cran-rlang-0.2.2/src/lib/env.c --- r-cran-rlang-0.2.1/src/lib/env.c 2018-05-30 13:14:55.000000000 +0000 +++ r-cran-rlang-0.2.2/src/lib/env.c 2018-08-14 17:56:07.000000000 +0000 @@ -21,14 +21,18 @@ return obj; } -sexp* rlang_ns_get(const char* name) { - return ns_env_get(r_ns_env("rlang"), name); -} sexp* r_base_ns_get(const char* name) { return ns_env_get(r_base_env, name); } +static sexp* rlang_ns_env = NULL; + +sexp* rlang_ns_get(const char* name) { + return ns_env_get(rlang_ns_env, name); +} + + static sexp* new_env_call = NULL; sexp* r_new_environment(sexp* parent, r_ssize_t size) { @@ -179,4 +183,6 @@ remove_call = r_new_call_node(r_base_ns_get("remove"), remove_args); r_mark_precious(remove_call); FREE(4); + + rlang_ns_env = r_ns_env("rlang"); } diff -Nru r-cran-rlang-0.2.1/src/lib/squash.c r-cran-rlang-0.2.2/src/lib/squash.c --- r-cran-rlang-0.2.1/src/lib/squash.c 2018-05-30 13:14:55.000000000 +0000 +++ r-cran-rlang-0.2.2/src/lib/squash.c 2018-08-14 17:56:07.000000000 +0000 @@ -164,7 +164,9 @@ sexp* out = KEEP(r_new_vector(kind, info.size)); if (info.named) { - r_poke_names(out, r_new_vector(STRSXP, info.size)); + sexp* nms = KEEP(r_new_vector(r_type_character, info.size)); + r_poke_names(out, nms); + FREE(1); } if (recursive) { diff -Nru r-cran-rlang-0.2.1/src/lib/stack.c r-cran-rlang-0.2.2/src/lib/stack.c --- r-cran-rlang-0.2.1/src/lib/stack.c 2018-05-30 13:14:55.000000000 +0000 +++ r-cran-rlang-0.2.2/src/lib/stack.c 2018-08-14 17:56:07.000000000 +0000 @@ -24,27 +24,37 @@ } -sexp* sys_frame_call = NULL; -sexp* sys_call_call = NULL; +static sexp* sys_frame_call = NULL; +static sexp* sys_call_call = NULL; -int* sys_frame_n_addr = NULL; -int* sys_call_n_addr = NULL; +static int* sys_frame_n_addr = NULL; +static int* sys_call_n_addr = NULL; sexp* r_sys_frame(int n, sexp* frame) { + int n_protect = 0; if (!frame) { frame = r_current_frame(); + KEEP_N(frame, n_protect); } *sys_frame_n_addr = n; - return r_eval(sys_frame_call, frame); + SEXP value = r_eval(sys_frame_call, frame); + + FREE(n_protect); + return value; } sexp* r_sys_call(int n, sexp* frame) { + int n_protect = 0; if (!frame) { frame = r_current_frame(); + KEEP_N(frame, n_protect); } *sys_call_n_addr = n; - return r_eval(sys_call_call, frame); + SEXP value = r_eval(sys_call_call, frame); + + FREE(n_protect); + return value; }