1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* regparse.c: now handles many alternatives (over 500000) in regexp. [ruby-dev:24773]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7418 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
ksaito 2004-11-29 15:16:20 +00:00
parent af7418e5c4
commit cb32ebe81c
2 changed files with 24 additions and 4 deletions

View file

@ -1,3 +1,8 @@
Tue Nov 30 00:12:57 2004 Kazuo Saito <ksaito@uranus.dti.ne.jp>
* regparse.c: now handles many alternatives (over 500000)
in regexp. [ruby-dev:24773]
Mon Nov 29 16:06:04 2004 Nobuyoshi Nakada <nobu@ruby-lang.org> Mon Nov 29 16:06:04 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
* ext/stringio/stringio.c (strio_write): insufficiently filled string * ext/stringio/stringio.c (strio_write): insufficiently filled string

View file

@ -866,6 +866,7 @@ static FreeNode* FreeNodeList = (FreeNode* )NULL;
extern void extern void
onig_node_free(Node* node) onig_node_free(Node* node)
{ {
start:
if (IS_NULL(node)) return ; if (IS_NULL(node)) return ;
switch (NTYPE(node)) { switch (NTYPE(node)) {
@ -878,7 +879,23 @@ onig_node_free(Node* node)
case N_LIST: case N_LIST:
case N_ALT: case N_ALT:
onig_node_free(NCONS(node).left); onig_node_free(NCONS(node).left);
onig_node_free(NCONS(node).right); /* onig_node_free(NCONS(node).right); */
{
Node* next_node = NCONS(node).right;
#ifdef USE_RECYCLE_NODE
{
FreeNode* n = (FreeNode* )node;
n->next = FreeNodeList;
FreeNodeList = n;
}
#else
xfree(node);
#endif
node = next_node;
goto start;
}
break; break;
case N_CCLASS: case N_CCLASS:
@ -909,9 +926,7 @@ onig_node_free(Node* node)
#ifdef USE_RECYCLE_NODE #ifdef USE_RECYCLE_NODE
{ {
FreeNode* n; FreeNode* n = (FreeNode* )node;
n = (FreeNode* )node;
n->next = FreeNodeList; n->next = FreeNodeList;
FreeNodeList = n; FreeNodeList = n;
} }