r = setup_tree(root, reg, 0, &scan_env);
if (r != 0) goto err_unset;
- set_parent_node_trav(root, NULL_NODE);
- r = set_empty_repeat_node_trav(root, NULL_NODE, &scan_env);
- if (r != 0) goto err_unset;
- set_empty_status_check_trav(root, &scan_env);
-
+ if (scan_env.backref_num != 0) {
+ set_parent_node_trav(root, NULL_NODE);
+ r = set_empty_repeat_node_trav(root, NULL_NODE, &scan_env);
+ if (r != 0) goto err_unset;
+ set_empty_status_check_trav(root, &scan_env);
+ }
#ifdef ONIG_DEBUG_PARSE
print_tree(stderr, root);
xmemset(env->mem_env_static, 0, sizeof(env->mem_env_static));
env->parse_depth = 0;
+ env->backref_num = 0;
env->keep_num = 0;
env->save_num = 0;
env->save_alloc_num = 0;
for (i = 0; i < back_num; i++)
p[i] = backrefs[i];
}
+
+ env->backref_num++;
return node;
}