|
11 | 11 | if sys.version_info[0] == 3: |
12 | 12 | unichr = chr |
13 | 13 | byte = lambda x: bytes([x]) |
| 14 | + long = int |
14 | 15 | else: |
15 | 16 | byte = chr |
16 | 17 |
|
@@ -335,33 +336,24 @@ def _refill(self, eof_token): |
335 | 336 | self.queue.append(Token(tok_range, "complex", int(match.group(7)) * 1j)) |
336 | 337 |
|
337 | 338 | elif match.group(8) is not None: # integer literal, dec |
338 | | - literal = match.group(8) |
339 | | - self._check_long_literal(tok_range, match.group(1)) |
340 | | - self.queue.append(Token(tok_range, "int", int(literal))) |
| 339 | + self.queue.append(self._make_int_token(tok_range, match.group(1), 10)) |
341 | 340 |
|
342 | 341 | elif match.group(9) is not None: # integer literal, oct |
343 | | - literal = match.group(9) |
344 | | - self._check_long_literal(tok_range, match.group(1)) |
345 | | - self.queue.append(Token(tok_range, "int", int(literal, 8))) |
| 342 | + self.queue.append(self._make_int_token(tok_range, match.group(1), 8)) |
346 | 343 |
|
347 | 344 | elif match.group(10) is not None: # integer literal, hex |
348 | | - literal = match.group(10) |
349 | | - self._check_long_literal(tok_range, match.group(1)) |
350 | | - self.queue.append(Token(tok_range, "int", int(literal, 16))) |
| 345 | + self.queue.append(self._make_int_token(tok_range, match.group(1), 16)) |
351 | 346 |
|
352 | 347 | elif match.group(11) is not None: # integer literal, bin |
353 | | - literal = match.group(11) |
354 | | - self._check_long_literal(tok_range, match.group(1)) |
355 | | - self.queue.append(Token(tok_range, "int", int(literal, 2))) |
| 348 | + self.queue.append(self._make_int_token(tok_range, match.group(1), 2)) |
356 | 349 |
|
357 | 350 | elif match.group(12) is not None: # integer literal, bare oct |
358 | | - literal = match.group(12) |
359 | | - if len(literal) > 1 and self.version >= (3, 0): |
| 351 | + if len(match.group(12)) > 1 and self.version >= (3, 0): |
360 | 352 | error = diagnostic.Diagnostic( |
361 | 353 | "error", "in Python 3, decimal literals must not start with a zero", {}, |
362 | 354 | source.Range(self.source_buffer, tok_range.begin_pos, tok_range.begin_pos + 1)) |
363 | 355 | self.diagnostic_engine.process(error) |
364 | | - self.queue.append(Token(tok_range, "int", int(literal, 8))) |
| 356 | + self.queue.append(self._make_int_token(tok_range, match.group(1), 8)) |
365 | 357 |
|
366 | 358 | elif match.group(14) is not None: # long string literal |
367 | 359 | self._string_literal( |
@@ -546,12 +538,15 @@ def _replace_escape_bytes(self, value): |
546 | 538 |
|
547 | 539 | return b"".join(chunks) |
548 | 540 |
|
549 | | - def _check_long_literal(self, range, literal): |
550 | | - if literal[-1] in "lL" and self.version >= (3, 0): |
| 541 | + def _make_int_token(self, tok_range, literal, base): |
| 542 | + if literal[-1] not in "lL": |
| 543 | + return Token(tok_range, "int", int(literal, base)) |
| 544 | + if self.version >= (3, 0): |
551 | 545 | error = diagnostic.Diagnostic( |
552 | 546 | "error", "in Python 3, long integer literals were removed", {}, |
553 | | - source.Range(self.source_buffer, range.end_pos - 1, range.end_pos)) |
| 547 | + source.Range(self.source_buffer, tok_range.end_pos - 1, tok_range.end_pos)) |
554 | 548 | self.diagnostic_engine.process(error) |
| 549 | + return Token(tok_range, "long", long(literal[:-1], base)) |
555 | 550 |
|
556 | 551 | def _match_pair_delim(self, range, kwop): |
557 | 552 | if kwop == "(": |
|
0 commit comments