Skip to content

Commit f42856c

Browse files
committed
Remove SET_CLOENV() usage
1 parent afd322d commit f42856c

File tree

2 files changed

+10
-9
lines changed

2 files changed

+10
-9
lines changed

src/internal/eval-tidy.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,14 +144,15 @@ static r_obj* mask_sym = NULL;
144144

145145
static r_obj* tilde_fn = NULL;
146146
static r_obj* restore_mask_fn = NULL;
147+
static r_obj* restore_mask_formals = NULL;
148+
static r_obj* restore_mask_body = NULL;
147149

148150
static void on_exit_restore_lexical_env(r_obj* mask, r_obj* old, r_obj* frame) {
149-
r_obj* fn = KEEP(r_clone(restore_mask_fn));
150-
151151
r_obj* env = KEEP(r_alloc_environment(2, r_envs.base));
152152
r_env_poke(env, mask_sym, mask);
153153
r_env_poke(env, old_sym, old);
154-
r_fn_poke_env(fn, env);
154+
155+
r_obj* fn = KEEP(r_new_function(restore_mask_formals, restore_mask_body, env));
155156

156157
r_obj* call = KEEP(r_new_call(fn, r_null));
157158
r_on_exit(call, frame);
@@ -600,5 +601,11 @@ void rlang_init_eval_tidy(void) {
600601
);
601602
r_preserve(restore_mask_fn);
602603

604+
restore_mask_formals = r_fn_formals(restore_mask_fn);
605+
r_preserve(restore_mask_formals);
606+
607+
restore_mask_body = r_fn_body(restore_mask_fn);
608+
r_preserve(restore_mask_body);
609+
603610
FREE(1);
604611
}

src/rlang/fn.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,6 @@ r_obj* r_fn_env(r_obj* fn) {
3131
#endif
3232
}
3333

34-
// TODO: C API compliance
35-
static inline
36-
void r_fn_poke_env(r_obj* fn, r_obj* env) {
37-
SET_CLOENV(fn, env);
38-
}
39-
4034
static inline
4135
r_obj* r_new_function(r_obj* formals, r_obj* body, r_obj* env) {
4236
#if R_VERSION >= R_Version(4, 5, 0)

0 commit comments

Comments
 (0)