diff options
| author | Jim Blandy | 1993-04-30 16:42:24 +0000 |
|---|---|---|
| committer | Jim Blandy | 1993-04-30 16:42:24 +0000 |
| commit | b0bef8c52f8f9605bef64093d1f3500bb4da4e06 (patch) | |
| tree | 5b78fc3954f35e30743a4416c0432c2ad96a8da5 /src/regex.c | |
| parent | d63887ade9a7784f4c913d92669cca78fc9f5dc6 (diff) | |
| download | emacs-b0bef8c52f8f9605bef64093d1f3500bb4da4e06.tar.gz emacs-b0bef8c52f8f9605bef64093d1f3500bb4da4e06.zip | |
*** empty log message ***
Diffstat (limited to 'src/regex.c')
| -rw-r--r-- | src/regex.c | 69 |
1 files changed, 46 insertions, 23 deletions
diff --git a/src/regex.c b/src/regex.c index 032b4d022e7..5bd4cf654d7 100644 --- a/src/regex.c +++ b/src/regex.c | |||
| @@ -543,6 +543,8 @@ print_partial_compiled_pattern (start, end) | |||
| 543 | /* Loop over pattern commands. */ | 543 | /* Loop over pattern commands. */ |
| 544 | while (p < pend) | 544 | while (p < pend) |
| 545 | { | 545 | { |
| 546 | printf ("%d:\t", p - start); | ||
| 547 | |||
| 546 | switch ((re_opcode_t) *p++) | 548 | switch ((re_opcode_t) *p++) |
| 547 | { | 549 | { |
| 548 | case no_op: | 550 | case no_op: |
| @@ -581,27 +583,45 @@ print_partial_compiled_pattern (start, end) | |||
| 581 | case charset: | 583 | case charset: |
| 582 | case charset_not: | 584 | case charset_not: |
| 583 | { | 585 | { |
| 584 | register int c; | 586 | register int c, last = -100; |
| 587 | register int in_range = 0; | ||
| 585 | 588 | ||
| 586 | printf ("/charset%s", | 589 | printf ("/charset [%s", |
| 587 | (re_opcode_t) *(p - 1) == charset_not ? "_not" : ""); | 590 | (re_opcode_t) *(p - 1) == charset_not ? "^" : ""); |
| 588 | 591 | ||
| 589 | assert (p + *p < pend); | 592 | assert (p + *p < pend); |
| 590 | 593 | ||
| 591 | for (c = 0; c < *p; c++) | 594 | for (c = 0; c < 256; c++) |
| 595 | if (c / 8 < *p | ||
| 596 | && (p[1 + (c/8)] & (1 << (c % 8)))) | ||
| 597 | { | ||
| 598 | /* Are we starting a range? */ | ||
| 599 | if (last + 1 == c && ! in_range) | ||
| 600 | { | ||
| 601 | putchar ('-'); | ||
| 602 | in_range = 1; | ||
| 603 | } | ||
| 604 | /* Have we broken a range? */ | ||
| 605 | else if (last + 1 != c && in_range) | ||
| 592 | { | 606 | { |
| 593 | unsigned bit; | 607 | printchar (last); |
| 594 | unsigned char map_byte = p[1 + c]; | 608 | in_range = 0; |
| 609 | } | ||
| 595 | 610 | ||
| 596 | putchar ('/'); | 611 | if (! in_range) |
| 612 | printchar (c); | ||
| 597 | 613 | ||
| 598 | for (bit = 0; bit < BYTEWIDTH; bit++) | 614 | last = c; |
| 599 | if (map_byte & (1 << bit)) | ||
| 600 | printchar (c * BYTEWIDTH + bit); | ||
| 601 | } | 615 | } |
| 616 | |||
| 617 | if (in_range) | ||
| 618 | printchar (last); | ||
| 619 | |||
| 620 | putchar (']'); | ||
| 621 | |||
| 602 | p += 1 + *p; | 622 | p += 1 + *p; |
| 603 | break; | ||
| 604 | } | 623 | } |
| 624 | break; | ||
| 605 | 625 | ||
| 606 | case begline: | 626 | case begline: |
| 607 | printf ("/begline"); | 627 | printf ("/begline"); |
| @@ -613,17 +633,17 @@ print_partial_compiled_pattern (start, end) | |||
| 613 | 633 | ||
| 614 | case on_failure_jump: | 634 | case on_failure_jump: |
| 615 | extract_number_and_incr (&mcnt, &p); | 635 | extract_number_and_incr (&mcnt, &p); |
| 616 | printf ("/on_failure_jump/0/%d", mcnt); | 636 | printf ("/on_failure_jump to %d", p + mcnt - start); |
| 617 | break; | 637 | break; |
| 618 | 638 | ||
| 619 | case on_failure_keep_string_jump: | 639 | case on_failure_keep_string_jump: |
| 620 | extract_number_and_incr (&mcnt, &p); | 640 | extract_number_and_incr (&mcnt, &p); |
| 621 | printf ("/on_failure_keep_string_jump/0/%d", mcnt); | 641 | printf ("/on_failure_keep_string_jump to %d", p + mcnt - start); |
| 622 | break; | 642 | break; |
| 623 | 643 | ||
| 624 | case dummy_failure_jump: | 644 | case dummy_failure_jump: |
| 625 | extract_number_and_incr (&mcnt, &p); | 645 | extract_number_and_incr (&mcnt, &p); |
| 626 | printf ("/dummy_failure_jump/0/%d", mcnt); | 646 | printf ("/dummy_failure_jump to %d", p + mcnt - start); |
| 627 | break; | 647 | break; |
| 628 | 648 | ||
| 629 | case push_dummy_failure: | 649 | case push_dummy_failure: |
| @@ -632,40 +652,40 @@ print_partial_compiled_pattern (start, end) | |||
| 632 | 652 | ||
| 633 | case maybe_pop_jump: | 653 | case maybe_pop_jump: |
| 634 | extract_number_and_incr (&mcnt, &p); | 654 | extract_number_and_incr (&mcnt, &p); |
| 635 | printf ("/maybe_pop_jump/0/%d", mcnt); | 655 | printf ("/maybe_pop_jump to %d", p + mcnt - start); |
| 636 | break; | 656 | break; |
| 637 | 657 | ||
| 638 | case pop_failure_jump: | 658 | case pop_failure_jump: |
| 639 | extract_number_and_incr (&mcnt, &p); | 659 | extract_number_and_incr (&mcnt, &p); |
| 640 | printf ("/pop_failure_jump/0/%d", mcnt); | 660 | printf ("/pop_failure_jump to %d", p + mcnt - start); |
| 641 | break; | 661 | break; |
| 642 | 662 | ||
| 643 | case jump_past_alt: | 663 | case jump_past_alt: |
| 644 | extract_number_and_incr (&mcnt, &p); | 664 | extract_number_and_incr (&mcnt, &p); |
| 645 | printf ("/jump_past_alt/0/%d", mcnt); | 665 | printf ("/jump_past_alt to %d", p + mcnt - start); |
| 646 | break; | 666 | break; |
| 647 | 667 | ||
| 648 | case jump: | 668 | case jump: |
| 649 | extract_number_and_incr (&mcnt, &p); | 669 | extract_number_and_incr (&mcnt, &p); |
| 650 | printf ("/jump/0/%d", mcnt); | 670 | printf ("/jump to %d", p + mcnt - start); |
| 651 | break; | 671 | break; |
| 652 | 672 | ||
| 653 | case succeed_n: | 673 | case succeed_n: |
| 654 | extract_number_and_incr (&mcnt, &p); | 674 | extract_number_and_incr (&mcnt, &p); |
| 655 | extract_number_and_incr (&mcnt2, &p); | 675 | extract_number_and_incr (&mcnt2, &p); |
| 656 | printf ("/succeed_n/0/%d/0/%d", mcnt, mcnt2); | 676 | printf ("/succeed_n to %d, %d times", p + mcnt - start, mcnt2); |
| 657 | break; | 677 | break; |
| 658 | 678 | ||
| 659 | case jump_n: | 679 | case jump_n: |
| 660 | extract_number_and_incr (&mcnt, &p); | 680 | extract_number_and_incr (&mcnt, &p); |
| 661 | extract_number_and_incr (&mcnt2, &p); | 681 | extract_number_and_incr (&mcnt2, &p); |
| 662 | printf ("/jump_n/0/%d/0/%d", mcnt, mcnt2); | 682 | printf ("/jump_n to %d, %d times", p + mcnt - start, mcnt2); |
| 663 | break; | 683 | break; |
| 664 | 684 | ||
| 665 | case set_number_at: | 685 | case set_number_at: |
| 666 | extract_number_and_incr (&mcnt, &p); | 686 | extract_number_and_incr (&mcnt, &p); |
| 667 | extract_number_and_incr (&mcnt2, &p); | 687 | extract_number_and_incr (&mcnt2, &p); |
| 668 | printf ("/set_number_at/0/%d/0/%d", mcnt, mcnt2); | 688 | printf ("/set_number_at location %d to %d", p + mcnt - start, mcnt2); |
| 669 | break; | 689 | break; |
| 670 | 690 | ||
| 671 | case wordbound: | 691 | case wordbound: |
| @@ -728,8 +748,11 @@ print_partial_compiled_pattern (start, end) | |||
| 728 | default: | 748 | default: |
| 729 | printf ("?%d", *(p-1)); | 749 | printf ("?%d", *(p-1)); |
| 730 | } | 750 | } |
| 751 | |||
| 752 | putchar ('\n'); | ||
| 731 | } | 753 | } |
| 732 | printf ("/\n"); | 754 | |
| 755 | printf ("%d:\tend of pattern.\n", p - start); | ||
| 733 | } | 756 | } |
| 734 | 757 | ||
| 735 | 758 | ||
| @@ -2058,7 +2081,7 @@ regex_compile (pattern, size, syntax, bufp) | |||
| 2058 | #ifdef DEBUG | 2081 | #ifdef DEBUG |
| 2059 | if (debug) | 2082 | if (debug) |
| 2060 | { | 2083 | { |
| 2061 | DEBUG_PRINT1 ("\nCompiled pattern: "); | 2084 | DEBUG_PRINT1 ("\nCompiled pattern: \n"); |
| 2062 | print_compiled_pattern (bufp); | 2085 | print_compiled_pattern (bufp); |
| 2063 | } | 2086 | } |
| 2064 | #endif /* DEBUG */ | 2087 | #endif /* DEBUG */ |