diff --git a/src/rlang/node.c b/src/rlang/node.c index c733b67ef..49c313f29 100644 --- a/src/rlang/node.c +++ b/src/rlang/node.c @@ -52,17 +52,6 @@ r_obj* r_node_tree_clone(r_obj* x) { return x; } -r_obj* r_pairlist_find(r_obj* node, r_obj* tag) { - while (node != r_null) { - if (r_node_tag(node) == tag) { - return node; - } - node = r_node_cdr(node); - } - - return r_null; -} - r_obj* r_pairlist_rev(r_obj* node) { if (node == r_null) { return node; diff --git a/src/rlang/node.h b/src/rlang/node.h index 381ff9c88..c61d71e87 100644 --- a/src/rlang/node.h +++ b/src/rlang/node.h @@ -37,9 +37,21 @@ r_obj* r_new_pairlist(const struct r_pair* args, int n, r_obj** tail); #define r_pairlist4 Rf_list4 #define r_pairlist5 Rf_list5 -r_obj* r_pairlist_find(r_obj* node, r_obj* tag); r_obj* r_pairlist_rev(r_obj* node); +// Used by `r_attrib_get()` via `r_pairlist_get()`, +// so we want it to be fully inlined +static inline +r_obj* r_pairlist_find(r_obj* node, r_obj* tag) { + while (node != r_null) { + if (r_node_tag(node) == tag) { + return node; + } + node = r_node_cdr(node); + } + return r_null; +} + static inline r_obj* r_pairlist_get(r_obj* node, r_obj* tag) { return r_node_car(r_pairlist_find(node, tag));