File tree Expand file tree Collapse file tree 2 files changed +10
-9
lines changed Expand file tree Collapse file tree 2 files changed +10
-9
lines changed Original file line number Diff line number Diff line change @@ -144,14 +144,15 @@ static r_obj* mask_sym = NULL;
144144
145145static r_obj * tilde_fn = NULL ;
146146static r_obj * restore_mask_fn = NULL ;
147+ static r_obj * restore_mask_formals = NULL ;
148+ static r_obj * restore_mask_body = NULL ;
147149
148150static 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}
Original file line number Diff line number Diff 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-
4034static inline
4135r_obj * r_new_function (r_obj * formals , r_obj * body , r_obj * env ) {
4236#if R_VERSION >= R_Version (4 , 5 , 0 )
You can’t perform that action at this time.
0 commit comments