Code

Ticket #16971: jslex-speedup.patch

File jslex-speedup.patch, 1.7 KB (added by nedbatchelder, 3 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