def token(self):
if self.next_:<EOL><INDENT>t = self.next_<EOL>self.next_ = None<EOL>return t<EOL><DEDENT>while True:<EOL><INDENT>t = self.lexer.token()<EOL>if not t:<EOL><INDENT>return t<EOL><DEDENT>if t.type == '<STR_LIT>' and (<EOL>self.pretok or<EOL>(self.last and self.last.type not in self.significant_ws)):<EOL><INDENT>continue<EOL><DEDENT>self.pretok = False<EOL>if t.type == '<STR_LIT>' and self.last and self.last.type not in ['<STR_LIT>', '<STR_LIT>'] and self.last.type != '<STR_LIT>'and not (hasattr(t, '<STR_LIT>') and (t.lexer.lexstate == '<STR_LIT>' or t.lexer.lexstate == '<STR_LIT>')):<EOL><INDENT>self.next_ = t<EOL>tok = lex.LexToken()<EOL>tok.type = '<STR_LIT>'<EOL>tok.value = '<STR_LIT:;>'<EOL>tok.lineno = t.lineno<EOL>tok.lexpos = t.lexpos<EOL>self.last = tok<EOL>self.lexer.in_property_decl = False<EOL>return tok<EOL><DEDENT>self.last = t<EOL>break<EOL><DEDENT>return t<EOL>
Token function. Contains 2 hacks:
    1.  Injects ';' into blocks where the last property
        leaves out the ;
    2.  Strips out whitespace from nonsignificant locations
        to ease parsing.