diff options
author | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-10-03 21:06:50 +0000 |
---|---|---|
committer | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-10-03 21:06:50 +0000 |
commit | e342418e465844a38546ebc7d69e23405dc9eb42 (patch) | |
tree | 8c15ccc3c917ffe724580a8465004f24ac497347 /regexec.c | |
parent | 011e45c6ec2815bd3a481b4ffc5ecd501c051b1f (diff) |
* regexec.c (OPCODE_EXEC_HOOK): op is p-1 because p is already
incremented.
* regexec.c (OPCODE_EXEC_HOOK): use the exact end address.
* regexec.c (match_at): don't call OPCODE_EXEC_HOOK in CASE()
when it comes from goto fail.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56332 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'regexec.c')
-rw-r--r-- | regexec.c | 22 |
1 files changed, 13 insertions, 9 deletions
@@ -1613,12 +1613,13 @@ match_at(regex_t* reg, const UChar* str, const UChar* end, #ifdef ONIG_DEBUG_MATCH #define OPCODE_EXEC_HOOK \ if (s) { \ - UChar *q, *bp, buf[50]; \ + UChar *op, *q, *bp, buf[50]; \ int len; \ - fprintf(stderr, "%4"PRIdPTR"> \"", (*p == OP_FINISH) ? (ptrdiff_t )-1 : s - str); \ + op = p - 1; \ + fprintf(stderr, "%4"PRIdPTR"> \"", (*op == OP_FINISH) ? (ptrdiff_t )-1 : s - str); \ bp = buf; \ q = s; \ - if (*p != OP_FINISH) { /* s may not be a valid pointer if OP_FINISH. */ \ + if (*op != OP_FINISH) { /* s may not be a valid pointer if OP_FINISH. */ \ for (i = 0; i < 7 && q < end; i++) { \ len = enclen(encode, q, end); \ while (len-- > 0) *bp++ = *q++; \ @@ -1629,8 +1630,8 @@ match_at(regex_t* reg, const UChar* str, const UChar* end, *bp = 0; \ fputs((char* )buf, stderr); \ for (i = 0; i < 20 - (bp - buf); i++) fputc(' ', stderr); \ - fprintf(stderr, "%4"PRIdPTR":", (p == FinishCode) ? (ptrdiff_t )-1 : p - reg->p); \ - onig_print_compiled_byte_code(stderr, p, p + strlen((char *)p),NULL, encode); \ + fprintf(stderr, "%4"PRIdPTR":", (op == FinishCode) ? (ptrdiff_t )-1 : op - reg->p); \ + onig_print_compiled_byte_code(stderr, op, reg->p+reg->used, NULL, encode); \ fprintf(stderr, "\n"); \ } #else @@ -3064,10 +3065,13 @@ match_at(regex_t* reg, const UChar* str, const UChar* end, goto finish; NEXT; - fail: - MOP_OUT; - /* fall */ - CASE(OP_FAIL) MOP_IN(OP_FAIL); + CASE(OP_FAIL) + if (0) { + /* fall */ + fail: + MOP_OUT; + } + MOP_IN(OP_FAIL); STACK_POP; p = stk->u.state.pcode; s = stk->u.state.pstr; |