[pypy-commit] pypy fix-literal-prev_digit-underscore: Fix a crash on literals like 0xffff_ffff_ff20_0000.
whitequark
pypy.commits at gmail.com
Sun May 12 23:38:29 EDT 2019
Author: whitequark <whitequark at whitequark.org>
Branch: fix-literal-prev_digit-underscore
Changeset: r96607:2c00b58bf83c
Date: 2019-05-13 03:34 +0000
http://bitbucket.org/pypy/pypy/changeset/2c00b58bf83c/
Log: Fix a crash on literals like 0xffff_ffff_ff20_0000.
diff --git a/pypy/interpreter/astcompiler/test/test_compiler.py b/pypy/interpreter/astcompiler/test/test_compiler.py
--- a/pypy/interpreter/astcompiler/test/test_compiler.py
+++ b/pypy/interpreter/astcompiler/test/test_compiler.py
@@ -126,6 +126,9 @@
for c in expressions.constants:
yield (self.simple_test, "x="+c, "x", eval(c))
+ def test_const_underscore(self):
+ yield (self.simple_test, "x=0xffff_ffff_ff20_0000", "x", 0xffffffffff200000)
+
def test_neg_sys_maxint(self):
import sys
stmt = "x = %s" % (-sys.maxint-1)
diff --git a/rpython/rlib/rstring.py b/rpython/rlib/rstring.py
--- a/rpython/rlib/rstring.py
+++ b/rpython/rlib/rstring.py
@@ -579,6 +579,11 @@
assert i >= 0
self.i = i
c = self.s[i]
+ if self.allow_underscores and c == '_':
+ i = self.i - 1
+ assert i >= 0
+ self.i = i
+ c = self.s[i]
digit = ord(c)
if '0' <= c <= '9':
digit -= ord('0')
More information about the pypy-commit
mailing list