Changeset 28165 in webkit


Ignore:
Timestamp:
Nov 29, 2007, 3:25:55 AM (17 years ago)
Author:
eric@webkit.org
Message:

2007-11-24 Eric Seidel <eric@webkit.org>

Reviewed by Sam.

Remove redundant eptrblock struct

  • pcre/pcre_exec.cpp: (MatchStack::pushNewFrame): (match):
Location:
trunk/JavaScriptCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r28164 r28165  
    1616
    1717        Section off MatchData arguments into args struct
     18
     19        * pcre/pcre_exec.cpp:
     20        (MatchStack::pushNewFrame):
     21        (match):
     22
     232007-11-24  Eric Seidel  <eric@webkit.org>
     24
     25        Reviewed by Sam.
     26
     27        Remove redundant eptrblock struct
    1828
    1929        * pcre/pcre_exec.cpp:
  • trunk/JavaScriptCore/pcre/pcre_exec.cpp

    r28164 r28165  
    6060#undef max
    6161
    62 /* Structure for building a chain of data that actually lives on the
    63 stack, for holding the values of the subject pointer at the start of each
    64 subpattern, so as to detect when an empty string has been matched by a
    65 subpattern - to break infinite loops. When NO_RECURSE is set, these blocks
    66 are on the heap, not on the stack. */
    67 
    68 struct eptrblock {
    69   struct eptrblock* epb_prev;
    70   const UChar* epb_saved_eptr;
    71 };
    72 
    73 /* Structure for remembering the local variables in a private frame */
    74 
    75 
    76 
    7762#ifndef USE_COMPUTED_GOTO_FOR_MATCH_RECURSION
    7863typedef int ReturnLocation;
     
    9075        const uschar* ecode;
    9176        int offset_top;
    92         eptrblock* eptrb;
     77        const UChar* subpatternStart;
    9378    } args;
    9479   
     
    117102        int save_offset3;
    118103       
    119         eptrblock newptrb;
     104        const UChar* subpatternStart;
    120105    } locals;
    121106};
     
    352337    }
    353338   
    354     inline void pushNewFrame(const uschar* ecode, eptrblock* eptrb, ReturnLocation returnLocation)
     339    inline void pushNewFrame(const uschar* ecode, const UChar* subpatternStart, ReturnLocation returnLocation)
    355340    {
    356341        MatchFrame* newframe = allocateNextFrame();
     
    360345        newframe->args.offset_top = currentFrame->args.offset_top;
    361346        newframe->args.ecode = ecode;
    362         newframe->args.eptrb = eptrb;
     347        newframe->args.subpatternStart = subpatternStart;
    363348        newframe->returnLocation = returnLocation;
    364349        size++;
     
    449434    stack.currentFrame->args.ecode = ecode;
    450435    stack.currentFrame->args.offset_top = offset_top;
    451     stack.currentFrame->args.eptrb = NULL;
     436    stack.currentFrame->args.subpatternStart = 0;
    452437   
    453438    /* This is where control jumps back to to effect "recursion" */
     
    468453     this stack. */
    469454   
    470     if (is_group_start) {
    471         stack.currentFrame->locals.newptrb.epb_prev = stack.currentFrame->args.eptrb;
    472         stack.currentFrame->locals.newptrb.epb_saved_eptr = stack.currentFrame->args.eptr;
    473         stack.currentFrame->args.eptrb = &stack.currentFrame->locals.newptrb;
    474     }
     455    if (is_group_start)
     456        stack.currentFrame->locals.subpatternStart = stack.currentFrame->args.subpatternStart;
    475457   
    476458    /* Now start processing the operations. */
     
    501483                DPRINTF(("start bracket 0\n"));
    502484                do {
    503                     RMATCH(2, stack.currentFrame->args.ecode + 1 + LINK_SIZE, stack.currentFrame->args.eptrb, match_isgroup);
     485                    RMATCH(2, stack.currentFrame->args.ecode + 1 + LINK_SIZE, stack.currentFrame->args.subpatternStart, match_isgroup);
    504486                    if (is_match)
    505487                        RRETURN;
     
    572554               
    573555                do {
    574                     RMATCH(9, stack.currentFrame->args.ecode + 1 + LINK_SIZE, stack.currentFrame->args.eptrb, match_isgroup);
     556                    RMATCH(9, stack.currentFrame->args.ecode + 1 + LINK_SIZE, stack.currentFrame->args.subpatternStart, match_isgroup);
    575557                    if (is_match)
    576558                        break;
     
    608590               
    609591                if (*stack.currentFrame->args.ecode == OP_KETRMIN) {
    610                     RMATCH(10, stack.currentFrame->args.ecode + 1 + LINK_SIZE, stack.currentFrame->args.eptrb, 0);
     592                    RMATCH(10, stack.currentFrame->args.ecode + 1 + LINK_SIZE, stack.currentFrame->args.subpatternStart, 0);
    611593                    if (is_match)
    612594                        RRETURN;
    613                     RMATCH(11, stack.currentFrame->locals.prev, stack.currentFrame->args.eptrb, match_isgroup);
     595                    RMATCH(11, stack.currentFrame->locals.prev, stack.currentFrame->args.subpatternStart, match_isgroup);
    614596                    if (is_match)
    615597                        RRETURN;
    616598                } else { /* OP_KETRMAX */
    617                     RMATCH(12, stack.currentFrame->locals.prev, stack.currentFrame->args.eptrb, match_isgroup);
     599                    RMATCH(12, stack.currentFrame->locals.prev, stack.currentFrame->args.subpatternStart, match_isgroup);
    618600                    if (is_match)
    619601                        RRETURN;
    620                     RMATCH(13, stack.currentFrame->args.ecode + 1 + LINK_SIZE, stack.currentFrame->args.eptrb, 0);
     602                    RMATCH(13, stack.currentFrame->args.ecode + 1 + LINK_SIZE, stack.currentFrame->args.subpatternStart, 0);
    621603                    if (is_match)
    622604                        RRETURN;
     
    640622                {
    641623                    stack.currentFrame->locals.next = stack.currentFrame->args.ecode + 1;
    642                     RMATCH(14, stack.currentFrame->locals.next, stack.currentFrame->args.eptrb, match_isgroup);
     624                    RMATCH(14, stack.currentFrame->locals.next, stack.currentFrame->args.subpatternStart, match_isgroup);
    643625                    if (is_match)
    644626                        RRETURN;
     
    652634                    stack.currentFrame->locals.next = stack.currentFrame->args.ecode + 1;
    653635                    moveOpcodePtrPastAnyAlternateBranches(stack.currentFrame->locals.next);
    654                     RMATCH(15, stack.currentFrame->locals.next + 1 + LINK_SIZE, stack.currentFrame->args.eptrb, match_isgroup);
     636                    RMATCH(15, stack.currentFrame->locals.next + 1 + LINK_SIZE, stack.currentFrame->args.subpatternStart, match_isgroup);
    655637                    if (is_match)
    656638                        RRETURN;
     
    668650                BEGIN_OPCODE(KETRMAX):
    669651                stack.currentFrame->locals.prev = stack.currentFrame->args.ecode - getOpcodeValueAtOffset(stack.currentFrame->args.ecode, 1);
    670                 stack.currentFrame->locals.saved_eptr = stack.currentFrame->args.eptrb->epb_saved_eptr;
    671                
    672                 /* Back up the stack of bracket start pointers. */
    673                
    674                 stack.currentFrame->args.eptrb = stack.currentFrame->args.eptrb->epb_prev;
    675                
     652                stack.currentFrame->args.subpatternStart = stack.currentFrame->locals.subpatternStart;
     653                stack.currentFrame->locals.subpatternStart = stack.currentFrame->previousFrame->args.subpatternStart;
     654
    676655                if (*stack.currentFrame->locals.prev == OP_ASSERT || *stack.currentFrame->locals.prev == OP_ASSERT_NOT || *stack.currentFrame->locals.prev == OP_ONCE) {
    677656                    md.end_match_ptr = stack.currentFrame->args.eptr;      /* For ONCE */
     
    731710               
    732711                if (*stack.currentFrame->args.ecode == OP_KETRMIN) {
    733                     RMATCH(16, stack.currentFrame->args.ecode + 1 + LINK_SIZE, stack.currentFrame->args.eptrb, 0);
     712                    RMATCH(16, stack.currentFrame->args.ecode + 1 + LINK_SIZE, stack.currentFrame->args.subpatternStart, 0);
    734713                    if (is_match)
    735714                        RRETURN;
    736                     RMATCH(17, stack.currentFrame->locals.prev, stack.currentFrame->args.eptrb, match_isgroup);
     715                    RMATCH(17, stack.currentFrame->locals.prev, stack.currentFrame->args.subpatternStart, match_isgroup);
    737716                    if (is_match)
    738717                        RRETURN;
    739718                } else { /* OP_KETRMAX */
    740                     RMATCH(18, stack.currentFrame->locals.prev, stack.currentFrame->args.eptrb, match_isgroup);
     719                    RMATCH(18, stack.currentFrame->locals.prev, stack.currentFrame->args.subpatternStart, match_isgroup);
    741720                    if (is_match)
    742721                        RRETURN;
    743                     RMATCH(19, stack.currentFrame->args.ecode + 1 + LINK_SIZE, stack.currentFrame->args.eptrb, 0);
     722                    RMATCH(19, stack.currentFrame->args.ecode + 1 + LINK_SIZE, stack.currentFrame->args.subpatternStart, 0);
    744723                    if (is_match)
    745724                        RRETURN;
     
    939918                if (minimize) {
    940919                    for (stack.currentFrame->locals.fi = min;; stack.currentFrame->locals.fi++) {
    941                         RMATCH(20, stack.currentFrame->args.ecode, stack.currentFrame->args.eptrb, 0);
     920                        RMATCH(20, stack.currentFrame->args.ecode, stack.currentFrame->args.subpatternStart, 0);
    942921                        if (is_match)
    943922                            RRETURN;
     
    959938                    }
    960939                    while (stack.currentFrame->args.eptr >= stack.currentFrame->locals.pp) {
    961                         RMATCH(21, stack.currentFrame->args.ecode, stack.currentFrame->args.eptrb, 0);
     940                        RMATCH(21, stack.currentFrame->args.ecode, stack.currentFrame->args.subpatternStart, 0);
    962941                        if (is_match)
    963942                            RRETURN;
     
    10391018                if (minimize) {
    10401019                    for (stack.currentFrame->locals.fi = min;; stack.currentFrame->locals.fi++) {
    1041                         RMATCH(22, stack.currentFrame->args.ecode, stack.currentFrame->args.eptrb, 0);
     1020                        RMATCH(22, stack.currentFrame->args.ecode, stack.currentFrame->args.subpatternStart, 0);
    10421021                        if (is_match)
    10431022                            RRETURN;
     
    10741053                    }
    10751054                    for (;;) {
    1076                         RMATCH(24, stack.currentFrame->args.ecode, stack.currentFrame->args.eptrb, 0);
     1055                        RMATCH(24, stack.currentFrame->args.ecode, stack.currentFrame->args.subpatternStart, 0);
    10771056                        if (is_match)
    10781057                            RRETURN;
     
    11431122                if (minimize) {
    11441123                    for (stack.currentFrame->locals.fi = min;; stack.currentFrame->locals.fi++) {
    1145                         RMATCH(26, stack.currentFrame->args.ecode, stack.currentFrame->args.eptrb, 0);
     1124                        RMATCH(26, stack.currentFrame->args.ecode, stack.currentFrame->args.subpatternStart, 0);
    11461125                        if (is_match)
    11471126                            RRETURN;
     
    11691148                    }
    11701149                    for(;;) {
    1171                         RMATCH(27, stack.currentFrame->args.ecode, stack.currentFrame->args.eptrb, 0);
     1150                        RMATCH(27, stack.currentFrame->args.ecode, stack.currentFrame->args.subpatternStart, 0);
    11721151                        if (is_match)
    11731152                            RRETURN;
     
    13141293                        stack.currentFrame->locals.repeat_othercase = othercase;
    13151294                        for (stack.currentFrame->locals.fi = min;; stack.currentFrame->locals.fi++) {
    1316                             RMATCH(28, stack.currentFrame->args.ecode, stack.currentFrame->args.eptrb, 0);
     1295                            RMATCH(28, stack.currentFrame->args.ecode, stack.currentFrame->args.subpatternStart, 0);
    13171296                            if (is_match)
    13181297                                RRETURN;
     
    13341313                        }
    13351314                        while (stack.currentFrame->args.eptr >= stack.currentFrame->locals.pp) {
    1336                             RMATCH(29, stack.currentFrame->args.ecode, stack.currentFrame->args.eptrb, 0);
     1315                            RMATCH(29, stack.currentFrame->args.ecode, stack.currentFrame->args.subpatternStart, 0);
    13371316                            if (is_match)
    13381317                                RRETURN;
     
    13591338                        for (stack.currentFrame->locals.fi = min;; stack.currentFrame->locals.fi++) {
    13601339                            int nc;
    1361                             RMATCH(30, stack.currentFrame->args.ecode, stack.currentFrame->args.eptrb, 0);
     1340                            RMATCH(30, stack.currentFrame->args.ecode, stack.currentFrame->args.subpatternStart, 0);
    13621341                            if (is_match)
    13631342                                RRETURN;
     
    13821361                        }
    13831362                        while (stack.currentFrame->args.eptr >= stack.currentFrame->locals.pp) {
    1384                             RMATCH(31, stack.currentFrame->args.ecode, stack.currentFrame->args.eptrb, 0);
     1363                            RMATCH(31, stack.currentFrame->args.ecode, stack.currentFrame->args.subpatternStart, 0);
    13851364                            if (is_match)
    13861365                                RRETURN;
     
    14851464                        int d;
    14861465                        for (stack.currentFrame->locals.fi = min;; stack.currentFrame->locals.fi++) {
    1487                             RMATCH(38, stack.currentFrame->args.ecode, stack.currentFrame->args.eptrb, 0);
     1466                            RMATCH(38, stack.currentFrame->args.ecode, stack.currentFrame->args.subpatternStart, 0);
    14881467                            if (is_match)
    14891468                                RRETURN;
     
    15161495                            }
    15171496                            for (;;) {
    1518                                 RMATCH(40, stack.currentFrame->args.ecode, stack.currentFrame->args.eptrb, 0);
     1497                                RMATCH(40, stack.currentFrame->args.ecode, stack.currentFrame->args.subpatternStart, 0);
    15191498                                if (is_match)
    15201499                                    RRETURN;
     
    15481527                        int d;
    15491528                        for (stack.currentFrame->locals.fi = min;; stack.currentFrame->locals.fi++) {
    1550                             RMATCH(42, stack.currentFrame->args.ecode, stack.currentFrame->args.eptrb, 0);
     1529                            RMATCH(42, stack.currentFrame->args.ecode, stack.currentFrame->args.subpatternStart, 0);
    15511530                            if (is_match)
    15521531                                RRETURN;
     
    15751554                            }
    15761555                            for (;;) {
    1577                                 RMATCH(44, stack.currentFrame->args.ecode, stack.currentFrame->args.eptrb, 0);
     1556                                RMATCH(44, stack.currentFrame->args.ecode, stack.currentFrame->args.subpatternStart, 0);
    15781557                                if (is_match)
    15791558                                    RRETURN;
     
    17151694                if (minimize) {
    17161695                    for (stack.currentFrame->locals.fi = min;; stack.currentFrame->locals.fi++) {
    1717                         RMATCH(48, stack.currentFrame->args.ecode, stack.currentFrame->args.eptrb, 0);
     1696                        RMATCH(48, stack.currentFrame->args.ecode, stack.currentFrame->args.subpatternStart, 0);
    17181697                        if (is_match)
    17191698                            RRETURN;
     
    18811860                   
    18821861                    for (;;) {
    1883                         RMATCH(52, stack.currentFrame->args.ecode, stack.currentFrame->args.eptrb, 0);
     1862                        RMATCH(52, stack.currentFrame->args.ecode, stack.currentFrame->args.subpatternStart, 0);
    18841863                        if (is_match)
    18851864                            RRETURN;
     
    19511930                   
    19521931                    do {
    1953                         RMATCH(1, stack.currentFrame->args.ecode + 1 + LINK_SIZE, stack.currentFrame->args.eptrb, match_isgroup);
     1932                        RMATCH(1, stack.currentFrame->args.ecode + 1 + LINK_SIZE, stack.currentFrame->args.subpatternStart, match_isgroup);
    19541933                        if (is_match)
    19551934                            RRETURN;
Note: See TracChangeset for help on using the changeset viewer.