- In preparation for normalization of an official R API, references to non-API functions
DDVAL,Rf_findVarInFrame3,SET_TYPEOF,SET_BODY,SET_FORMALSandSET_CLOENVhave been removed. The calls to PROMSXP accessor functions remain, as they are central to this package's purpose and it is not yet clear what the official API will have in their place.
- Fix issues raised by CRAN:
- Always cast argument of
printf("%p", ...)to(void *)
- Always cast argument of
- The representation of quotations has been changed. Quotations are now represented as expressions with a class attribute. This means that you can
evala quotation and it will return the same value that a promise would return when forced. This also means that you canbquoteorsubstituteto place a quotation into an expression, and the resulting expression will evaluate hygienically. - The better to support hygiene,
arg*will check if there a quotation in the argument expression (as it would be if the call had been done withbquote) and transparently unwrap it. - Added method
is_forced_.name. - Added
arg_valueto peek at values of promises (without forcing). - Added
as.quoconversion methods for formulas andrlangquosures.
- Added some support for "weird" promises. These are created by primitive s3 methods dispatched from a generic like
c. These promises are forced (have a value, which was dispatched from) but still have an environment.
- Added memory protection calls where identified by
rchk. - Comply with
-Wstrict-prototypes.
- Implemented
all.equalmethod forquotationobjects. dotsandquotationobjects now print themselves in adeparse()-like style.is_*_()functions how have methods for promises/dots.set_andset_enclos_are added to help with making assignments.
- Fixed handling of missing arguments in
doandquo. donow passes arguments via a temporary binding of...in some cases. This should fix some cases wheresys.calls()returned naked promises, which made for confusing debugging. For R versions before 4.0 the old behavior is retained.- Fixed man pages which were not generated completely.
locate(fn, mode="function")now works in the case wherefnis a forced promise containing a function.
callernow correctly returns itsifnotfoundargument.
Initial CRAN Release.