Example #1
0
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;
}
Example #2
0
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;
}