Ticket #16971: jslex-speedup.patch

File jslex-speedup.patch, 1.7 KB (added by nedbatchelder, 4 years ago)

The patch!

  • AUTHORS

     
    222222    Janos Guljas
    223223    Thomas Güttler <hv@tbz-pariv.de>
    224224    Horst Gutmann <zerok@zerokspot.com>
     225    Antti Haapala <antti@industrialwebandmagic.com>
    225226    Scot Hacker <shacker@birdhouse.org>
    226227    dAniel hAhler
    227228    hambaloney
  • django/utils/jslex.py

     
    5151
    5252        Yields pairs (`name`, `tokentext`).
    5353        """
    54         while text:
    55             eaten = 0
    56             for match in self.regexes[self.state].finditer(text):
    57                 for name, toktext in match.groupdict().iteritems():
    58                     if toktext is not None:
    59                         tok = self.toks[name]
    60                         new_state = tok.next
    61                         eaten += len(toktext)
    62                         yield (tok.name, toktext)
    63                 if new_state:
    64                     self.state = new_state
     54        end = len(text)
     55        state = self.state
     56        regexes = self.regexes
     57        toks = self.toks
     58        start = 0
     59
     60        while start < end:
     61            for match in regexes[state].finditer(text, start):
     62                name = match.lastgroup
     63                tok = toks[name]
     64                toktext = match.group(name)
     65                start += len(toktext)
     66                yield (tok.name, toktext)
     67
     68                if tok.next:
     69                    state = tok.next
    6570                    break
    66             text = text[eaten:]
    6771
     72        self.state = state
    6873
     74
    6975class JsLexer(Lexer):
    7076    """
    7177    A Javascript lexer
Back to Top