static NODE* rewrite_cref_stack(NODE *node, VALUE old_klass, VALUE new_klass) { NODE *new_node; if (!node) { return NULL; } if (node->nd_clss == old_klass) { new_node = NEW_CREF(new_klass); new_node->nd_next = node->nd_next; } else { new_node = NEW_CREF(node->nd_clss); new_node->nd_next = rewrite_cref_stack(node->nd_next, old_klass, new_klass); } return new_node; }
static void rewrite_cref_stack(NODE *node, VALUE old_klass, VALUE new_klass, NODE **new_cref_ptr) { NODE *new_node; while (node) { if (node->nd_clss == old_klass) { new_node = NEW_CREF(new_klass); RB_OBJ_WRITE(new_node, &new_node->nd_next, node->nd_next); *new_cref_ptr = new_node; return; } new_node = NEW_CREF(node->nd_clss); node = node->nd_next; *new_cref_ptr = new_node; new_cref_ptr = &new_node->nd_next; } *new_cref_ptr = NULL; }