- Fix protection issues from rchk reports.

This is a maintenance release. The lazyeval package is no longer developed as the tidyverse is switching to tidy evaluation.

Use new registration system.

Switch from

`SET_NAMED()`

to`MARK_NOT_MUTABLE()`

in prevision of an API change in R coreNo longer check the type of the sides of the formula.

Lazyeval has a new system for lazy-eval based on formulas, described
in depth in the new `lazyeval`

vignette. This system is still
a little experimental - it hasn’t seen much use outside of the vignette,
so it certainly may change a little in the future. However, long-term
goal is to use these tools across all of my packages (ggplot2, tidyr,
dplyr, etc), and I am fairly confident that this is a robust system that
won’t need major changes.

There are three key components:

`f_eval()`

evaluates a formula in the environment where it was defined. If supplied, values are first looked for in an optional`data`

argument. Pronouns`.data`

and`.env`

can be used to resolve ambiguity in this case. (#43). Longer forms`f_eval_rhs()`

and`f_eval_lhs()`

emphasise the side of the formula that you want to evaluate (#64).`f_interp()`

provides a full quasiquoting system using`uq()`

for unquote and`uqs()`

for unquote-splice (#36).`f_capture()`

and`dots_capture()`

make it easy to turn promises and`...`

into explicit formulas. These should be used sparingly, as generally lazy-eval is preferred to non-standard eval.For functions that work with

`...`

,`f_list()`

and`as_f_list()`

make it possible to use the evaluated LHS of a formula to name the elements of a list (#59).

The core components are accompanied by a number of helper functions:

Identify a formula with

`is_formula()`

.Create a formula from a quoted call and an environment with

`f_new()`

.“Unwrap” a formula removing one level from the stack of parent environments with

`f_unwrap()`

.Get or set either side of a formula with

`f_rhs()`

or`f_lhs()`

, and the environment with`f_env()`

.Convert to text/label with

`f_text()`

and`f_label()`

.

I’ve also added `expr_find()`

, `expr_text()`

and `expr_label()`

explicitly to find the expression
associated with a function argument, and label it for output (#58). This
is one of the primary uses cases for NSE. `expr_env()`

is a
similar helper that returns the environment associated with a promise
(#67).

`lazy_dots()`

gains`.ignore_empty`

argument to drop extra arguments (#32).`interp.formula()`

only accepts single-sided formulas (#37).`interp()`

accepts an environment in`.values`

(#35).`interp.character()`

always produes a single string, regardless of input length (#27).Fixed an infinite loop in

`lazy_dots(.follow_symbols = TRUE)`

(#22, #24)`lazy()`

now fails with an informative error when it is applied on an object that has already been evaluated (#23, @lionel-).`lazy()`

no longer follows the expressions of lazily loaded objects (#18, @lionel-).

`as.lazy_dots()`

gains a method for NULL, returning a zero-length list.`auto_names()`

no longer truncates symbols (#19, #20)