From 763acec600d5d491cea33fbf59cc61a098d816b9 Mon Sep 17 00:00:00 2001 From: Thomas Robitaille Date: Fri, 9 Feb 2018 12:56:45 +0000 Subject: Added regression test for bug in Python 3 with reflags and optimize=True (in Python 3, re module flags are RegexFlags instances, not integers) --- test/lex_optimize4.py | 26 ++++++++++++++++++++++++++ test/testlex.py | 20 ++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 test/lex_optimize4.py diff --git a/test/lex_optimize4.py b/test/lex_optimize4.py new file mode 100644 index 0000000..cc6e2a9 --- /dev/null +++ b/test/lex_optimize4.py @@ -0,0 +1,26 @@ +# ----------------------------------------------------------------------------- +# lex_optimize4.py +# ----------------------------------------------------------------------------- +import re +import sys + +if ".." not in sys.path: sys.path.insert(0,"..") +import ply.lex as lex + +tokens = [ + "PLUS", + "MINUS", + "NUMBER", + ] + +t_PLUS = r'\+?' +t_MINUS = r'-' +t_NUMBER = r'(\d+)' + +def t_error(t): + pass + + +# Build the lexer +lex.lex(optimize=True, lextab="opt4tab", reflags=re.UNICODE) +lex.runmain(data="3+4") diff --git a/test/testlex.py b/test/testlex.py index 3880f6f..83070a7 100755 --- a/test/testlex.py +++ b/test/testlex.py @@ -514,6 +514,26 @@ class LexBuildOptionTests(unittest.TestCase): except OSError: pass + def test_lex_optimize4(self): + + # Regression test to make sure that reflags works correctly + # on Python 3. + + for extension in ['py', 'pyc']: + try: + os.remove("opt4tab.{0}".format(extension)) + except OSError: + pass + + run_import("lex_optimize4") + run_import("lex_optimize4") + + for extension in ['py', 'pyc']: + try: + os.remove("opt4tab.{0}".format(extension)) + except OSError: + pass + def test_lex_opt_alias(self): try: os.remove("aliastab.py") -- cgit v1.2.1 From e678d756427c72edd1b0107c55fd10640d8ffe2b Mon Sep 17 00:00:00 2001 From: Thomas Robitaille Date: Fri, 9 Feb 2018 13:06:16 +0000 Subject: Force reflags to be converted to an integer on Python 3 --- ply/lex.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ply/lex.py b/ply/lex.py index 65deefe..39f6d0d 100644 --- a/ply/lex.py +++ b/ply/lex.py @@ -180,7 +180,7 @@ class Lexer: tf.write('# %s.py. This file automatically created by PLY (version %s). Don\'t edit!\n' % (basetabmodule, __version__)) tf.write('_tabversion = %s\n' % repr(__tabversion__)) tf.write('_lextokens = set(%s)\n' % repr(tuple(self.lextokens))) - tf.write('_lexreflags = %s\n' % repr(self.lexreflags)) + tf.write('_lexreflags = %s\n' % repr(int(self.lexreflags))) tf.write('_lexliterals = %s\n' % repr(self.lexliterals)) tf.write('_lexstateinfo = %s\n' % repr(self.lexstateinfo)) -- cgit v1.2.1