Skip to content

Commit f31788a

Browse files
committed
Rcpp 1.1.1-1 non-release CRAN testing courtesy dated 2026-04-02
1 parent bbbc018 commit f31788a

12 files changed

Lines changed: 81 additions & 73 deletions

File tree

ChangeLog

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
1+
2026-04-02 Dirk Eddelbuettel <edd@debian.org>
2+
3+
* DESCRIPTION (Date, Version): Hotfix non-release 1.1.1-1
4+
5+
* Rcpp/inst/include/Rcpp/api/meat/Rcpp_eval.h: Changes from PR 1466
6+
that address the sudden disappearance of R_UnboundValue
7+
* Rcpp/inst/include/Rcpp/Environment.h: Idem, also carried over one
8+
change from PR 1460
9+
* Rcpp/inst/include/Rcpp/Function.h: Idem, also R_getRegisteredNamespace
10+
* Rcpp/inst/include/Rcpp/Function.h: Idem
11+
112
2026-01-08 Dirk Eddelbuettel <edd@debian.org>
213

314
* DESCRIPTION (Date, Version): Release 1.1.1
@@ -9,7 +20,7 @@
920

1021
* vignettes/pdf/*: Rebuilt
1122

12-
* vignettes/rmd/Rcpp.bib: Updates to several URLs
23+
* vignettes/rmd/Rcpp.bib: Update to several URLs
1324
* inst/bib/Rcpp.bib: Idem
1425
* vignettes/rmd/*: Idem
1526
* README.md: Idem

DESCRIPTION

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Package: Rcpp
22
Title: Seamless R and C++ Integration
3-
Version: 1.1.1
4-
Date: 2026-01-07
3+
Version: 1.1.1-1
4+
Date: 2026-04-02
55
Authors@R: c(person("Dirk", "Eddelbuettel", role = c("aut", "cre"), email = "edd@debian.org",
66
comment = c(ORCID = "0000-0001-6419-907X")),
77
person("Romain", "Francois", role = "aut",
@@ -33,6 +33,19 @@ Suggests: tinytest, inline, rbenchmark, pkgKitten (>= 0.1.2)
3333
URL: https://www.rcpp.org, https://dirk.eddelbuettel.com/code/rcpp.html, https://github.com/RcppCore/Rcpp
3434
License: GPL (>= 2)
3535
BugReports: https://github.com/RcppCore/Rcpp/issues
36+
MailingList: rcpp-devel@lists.r-forge.r-project.org
3637
RoxygenNote: 6.1.1
3738
Encoding: UTF-8
3839
VignetteBuilder: Rcpp
40+
NeedsCompilation: yes
41+
Packaged: 2026-04-02 12:55:00 UTC; edd
42+
Author: Dirk Eddelbuettel [aut, cre] (ORCID: <https://orcid.org/0000-0001-6419-907X>),
43+
Romain Francois [aut] (ORCID: <https://orcid.org/0000-0002-2444-4226>),
44+
JJ Allaire [aut] (ORCID: <https://orcid.org/0000-0003-0174-9868>),
45+
Kevin Ushey [aut] (ORCID: <https://orcid.org/0000-0003-2880-7407>),
46+
Qiang Kou [aut] (ORCID: <https://orcid.org/0000-0001-6786-5453>),
47+
Nathan Russell [aut],
48+
Iñaki Ucar [aut] (ORCID: <https://orcid.org/0000-0001-6403-5550>),
49+
Doug Bates [aut] (ORCID: <https://orcid.org/0000-0001-8316-9503>),
50+
John Chambers [aut]
51+
Maintainer: Dirk Eddelbuettel <edd@debian.org>

README.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,11 @@ we cannot test on outdated versions of R or your OS.
166166

167167
### Support
168168

169-
The best place for questions is the [discussion section of the GitHub
170-
repo](https://github.com/RcppCore/Rcpp/discussions) as the previously used mailing list at R-forge
171-
is no longer operational.
169+
The best place for questions is the
170+
[Rcpp-devel](https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel)
171+
mailing list hosted at R-forge. Note that in order to keep spam down, you must
172+
be a subscriber in order to post. One can also consult the list archives to see
173+
if your question has been asked before.
172174

173175
The [issue tickets at the GitHub repo](https://github.com/RcppCore/Rcpp/issues)
174176
are the primary bug reporting interface. As with the other web resources,

inst/NEWS.Rd

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,15 @@
33
\newcommand{\ghpr}{\href{https://github.com/RcppCore/Rcpp/pull/#1}{##1}}
44
\newcommand{\ghit}{\href{https://github.com/RcppCore/Rcpp/issues/#1}{##1}}
55

6+
\section{Changes in Rcpp non-release version 1.1.1-1 (2026-04-02)}{
7+
\itemize{
8+
\item Please see pr \ghpr{1466} addressing \ghit{1465} for context (plus
9+
change from \ghpr{1460} closing \ghit{1459}, and R_getRegisteredNamespace)
10+
\item This is an unplanned, unscheduled and uncalled for non-release
11+
made solely to unplug CRAN from late-breaking changes in R 4.6.0
12+
}
13+
}
14+
615
\section{Changes in Rcpp release version 1.1.1 (2026-01-08)}{
716
\itemize{
817
\item Changes in Rcpp API:

inst/include/Rcpp/Environment.h

Lines changed: 20 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -95,20 +95,8 @@ namespace Rcpp{
9595
* @return a SEXP (possibly R_NilValue)
9696
*/
9797
SEXP get(const std::string& name) const {
98-
SEXP env = Storage::get__() ;
99-
SEXP nameSym = Rf_install(name.c_str());
100-
#if R_VERSION < R_Version(4,5,0)
101-
SEXP res = Rf_findVarInFrame( env, nameSym ) ;
102-
#else
103-
SEXP res = R_getVarEx(nameSym, env, FALSE, R_UnboundValue);
104-
#endif
105-
if( res == R_UnboundValue ) return R_NilValue ;
106-
107-
/* We need to evaluate if it is a promise */
108-
if( TYPEOF(res) == PROMSXP){
109-
res = internal::Rcpp_eval_impl( res, env ) ; // #nocov
110-
}
111-
return res ;
98+
Symbol nameSym = Rf_install(name.c_str());
99+
return get(nameSym);
112100
}
113101

114102
/**
@@ -122,16 +110,12 @@ namespace Rcpp{
122110
SEXP env = Storage::get__() ;
123111
#if R_VERSION < R_Version(4,5,0)
124112
SEXP res = Rf_findVarInFrame( env, name ) ;
113+
if (res == R_UnboundValue) return R_NilValue;
114+
if (TYPEOF(res) == PROMSXP)
115+
res = internal::Rcpp_eval_impl(res, env);
125116
#else
126-
SEXP res = R_getVarEx(name, env, FALSE, R_UnboundValue);
117+
SEXP res = R_getVarEx(name, env, FALSE, R_NilValue);
127118
#endif
128-
129-
if( res == R_UnboundValue ) return R_NilValue ;
130-
131-
/* We need to evaluate if it is a promise */
132-
if( TYPEOF(res) == PROMSXP){
133-
res = internal::Rcpp_eval_impl( res, env ) ;
134-
}
135119
return res ;
136120
}
137121

@@ -144,21 +128,8 @@ namespace Rcpp{
144128
*
145129
*/
146130
SEXP find( const std::string& name) const{
147-
SEXP env = Storage::get__() ;
148-
SEXP nameSym = Rf_install(name.c_str());
149-
#if R_VERSION < R_Version(4,5,0)
150-
SEXP res = Rf_findVar( nameSym, env ) ;
151-
#else
152-
SEXP res = R_getVarEx(nameSym, env, TRUE, R_UnboundValue);
153-
#endif
154-
155-
if( res == R_UnboundValue ) throw binding_not_found(name) ;
156-
157-
/* We need to evaluate if it is a promise */
158-
if( TYPEOF(res) == PROMSXP){
159-
res = internal::Rcpp_eval_impl( res, env ) ;
160-
}
161-
return res ;
131+
Symbol nameSym = Rf_install(name.c_str());
132+
return find(nameSym);
162133
}
163134

164135
/**
@@ -171,19 +142,13 @@ namespace Rcpp{
171142
SEXP env = Storage::get__() ;
172143
#if R_VERSION < R_Version(4,5,0)
173144
SEXP res = Rf_findVar( name, env ) ;
145+
if (res == R_UnboundValue) throw binding_not_found(name.c_str());
146+
if (TYPEOF(res) == PROMSXP)
147+
res = internal::Rcpp_eval_impl(res, env);
174148
#else
175-
SEXP res = R_getVarEx(name, env, TRUE, R_UnboundValue);
149+
SEXP res = R_getVarEx(name, env, TRUE, NULL);
150+
if (res == NULL) throw binding_not_found(name.c_str());
176151
#endif
177-
if( res == R_UnboundValue ) {
178-
// Pass on the const char* to the RCPP_EXCEPTION_CLASS's
179-
// const std::string& requirement
180-
throw binding_not_found(name.c_str()) ;
181-
}
182-
183-
/* We need to evaluate if it is a promise */
184-
if( TYPEOF(res) == PROMSXP){
185-
res = internal::Rcpp_eval_impl( res, env ) ;
186-
}
187152
return res ;
188153
}
189154

@@ -199,10 +164,11 @@ namespace Rcpp{
199164
SEXP nameSym = Rf_install(name.c_str());
200165
#if R_VERSION < R_Version(4,5,0)
201166
SEXP res = Rf_findVarInFrame( Storage::get__() , nameSym ) ;
167+
return res != R_UnboundValue;
202168
#else
203-
SEXP res = R_getVarEx(nameSym, Storage::get__(), FALSE, R_UnboundValue);
169+
SEXP res = R_getVarEx(nameSym, Storage::get__(), FALSE, NULL);
170+
return res != NULL;
204171
#endif
205-
return res != R_UnboundValue ;
206172
}
207173

208174
/**
@@ -389,7 +355,11 @@ namespace Rcpp{
389355
* The parent environment of this environment
390356
*/
391357
Environment_Impl parent() const {
358+
#if R_VERSION < R_Version(4,5,0)
392359
return Environment_Impl( ENCLOS(Storage::get__()) ) ;
360+
#else
361+
return Environment_Impl(R_ParentEnv(Storage::get__()));
362+
#endif
393363
}
394364

395365
/**

inst/include/Rcpp/Function.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,15 @@ namespace Rcpp{
6969
}
7070

7171
Function_Impl(const std::string& name, const std::string& ns) {
72-
#if R_VERSION < R_Version(4,5,0)
72+
#if R_VERSION < R_Version(4,6,0)
7373
Shield<SEXP> env(Rf_findVarInFrame(R_NamespaceRegistry, Rf_install(ns.c_str())));
74+
if (env == R_UnboundValue)
75+
stop("there is no namespace called \"%s\"", ns);
7476
#else
75-
Shield<SEXP> env(R_getVarEx(Rf_install(ns.c_str()), R_NamespaceRegistry, FALSE, R_UnboundValue));
76-
#endif
77-
if (env == R_UnboundValue) {
77+
Shield<SEXP> env(R_getRegisteredNamespace(ns.c_str()));
78+
if (env == R_NilValue)
7879
stop("there is no namespace called \"%s\"", ns);
79-
}
80+
#endif
8081
get_function(name, env);
8182
}
8283

inst/include/Rcpp/Promise.h

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,18 @@ namespace Rcpp{
4848
* Return the result of the PRVALUE macro on the promise
4949
*/
5050
SEXP value() const{
51-
SEXP val = PRVALUE( Storage::get__() ) ;
52-
if( val == R_UnboundValue ) throw unevaluated_promise() ;
53-
return val ;
51+
if (!was_evaluated()) throw unevaluated_promise();
52+
return PRVALUE(Storage::get__());
5453
}
5554

5655
bool was_evaluated() const {
56+
#if R_VERSION < R_Version(4,6,0)
5757
return PRVALUE(Storage::get__()) != R_UnboundValue ;
58+
#else
59+
SEXP env = environment();
60+
R_BindingType_t bt = R_GetBindingType(Storage::get__(), env);
61+
return bt != R_BindingTypeUnbound;
62+
#endif
5863
}
5964

6065
/**

inst/include/Rcpp/api/meat/Rcpp_eval.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,6 @@ inline SEXP Rcpp_eval(SEXP expr, SEXP env) {
5656
// 'identity' function used to capture errors, interrupts
5757
Shield<SEXP> identity(Rf_findFun(::Rf_install("identity"), R_BaseNamespace));
5858

59-
if (identity == R_UnboundValue) {
60-
stop("Failed to find 'base::identity()'");
61-
}
62-
6359
// define the evalq call -- the actual R evaluation we want to execute
6460
Shield<SEXP> evalqCall(Rf_lang3(::Rf_install("evalq"), expr, env));
6561

inst/include/Rcpp/config.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
#define RCPP_VERSION_STRING "1.1.1"
3232

3333
// the current source snapshot (using four components, if a fifth is used in DESCRIPTION we ignore it)
34-
#define RCPP_DEV_VERSION RcppDevVersion(1,1,1,0)
35-
#define RCPP_DEV_VERSION_STRING "1.1.1.0"
34+
#define RCPP_DEV_VERSION RcppDevVersion(1,1,1,1)
35+
#define RCPP_DEV_VERSION_STRING "1.1.1-1"
3636

3737
#endif

src/Makevars.win

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
PKG_CPPFLAGS = -I../inst/include/
2-
1+
PKG_CPPFLAGS = -I../inst/include/
2+

0 commit comments

Comments
 (0)