Author: Armin Rigo <[email protected]>
Branch: reverse-debugger
Changeset: r85421:91e8176fb344
Date: 2016-06-28 13:23 +0200
http://bitbucket.org/pypy/pypy/changeset/91e8176fb344/

Log:    started pypy support: recognize in pyparser the syntax of a dollar
        sign followed by a decimal number

diff --git a/pypy/interpreter/pyparser/data/Grammar2.7 
b/pypy/interpreter/pyparser/data/Grammar2.7
--- a/pypy/interpreter/pyparser/data/Grammar2.7
+++ b/pypy/interpreter/pyparser/data/Grammar2.7
@@ -104,7 +104,7 @@
        '[' [listmaker] ']' |
        '{' [dictorsetmaker] '}' |
        '`' testlist1 '`' |
-       NAME | NUMBER | STRING+)
+       NAME | NUMBER | STRING+ | revdb_metavar)
 listmaker: test ( list_for | (',' test)* [','] )
 testlist_comp: test ( comp_for | (',' test)* [','] )
 lambdef: 'lambda' [varargslist] ':' test
@@ -141,3 +141,5 @@
 encoding_decl: NAME
 
 yield_expr: 'yield' [testlist]
+
+revdb_metavar: '$NUM'
diff --git a/pypy/interpreter/pyparser/genpytokenize.py 
b/pypy/interpreter/pyparser/genpytokenize.py
--- a/pypy/interpreter/pyparser/genpytokenize.py
+++ b/pypy/interpreter/pyparser/genpytokenize.py
@@ -140,7 +140,10 @@
     special = group(states,
                     makeEOL(),
                     groupStr(states, "@:;.,`"))
-    funny = group(states, operator, bracket, special)
+    revdb_metavar = chain(states,
+                          groupStr(states, "$"),
+                          atleastonce(states, makeDigits()))
+    funny = group(states, operator, bracket, special, revdb_metavar)
     # ____________________________________________________________
     def makeStrPrefix ():
         return chain(states,
diff --git a/pypy/interpreter/pyparser/pytoken.py 
b/pypy/interpreter/pyparser/pytoken.py
--- a/pypy/interpreter/pyparser/pytoken.py
+++ b/pypy/interpreter/pyparser/pytoken.py
@@ -67,5 +67,6 @@
 # extra PyPy-specific tokens
 _add_tok("COMMENT")
 _add_tok("NL")
+_add_tok("REVDBMETAVAR", "$NUM")
 
 del _add_tok
diff --git a/pypy/interpreter/pyparser/pytokenize.py 
b/pypy/interpreter/pyparser/pytokenize.py
--- a/pypy/interpreter/pyparser/pytokenize.py
+++ b/pypy/interpreter/pyparser/pytokenize.py
@@ -25,37 +25,38 @@
 
 accepts = [True, True, True, True, True, True, True, True,
            True, True, False, True, True, True, True, False,
-           False, False, True, False, False, True, False,
-           False, True, False, True, False, True, False,
-           False, True, False, False, True, True, True,
-           False, False, True, False, False, False, True]
+           False, False, False, True, False, False, True,
+           False, False, True, False, True, True, False,
+           True, False, False, True, False, False, True,
+           True, True, False, False, True, False, False,
+           False, True]
 states = [
     # 0
     {'\t': 0, '\n': 13, '\x0c': 0,
-     '\r': 14, ' ': 0, '!': 10, '"': 16,
-     '#': 18, '%': 12, '&': 12, "'": 15,
-     '(': 13, ')': 13, '*': 7, '+': 12,
-     ',': 13, '-': 12, '.': 6, '/': 11,
-     '0': 4, '1': 5, '2': 5, '3': 5,
-     '4': 5, '5': 5, '6': 5, '7': 5,
-     '8': 5, '9': 5, ':': 13, ';': 13,
-     '<': 9, '=': 12, '>': 8, '@': 13,
-     'A': 1, 'B': 2, 'C': 1, 'D': 1,
-     'E': 1, 'F': 1, 'G': 1, 'H': 1,
-     'I': 1, 'J': 1, 'K': 1, 'L': 1,
-     'M': 1, 'N': 1, 'O': 1, 'P': 1,
-     'Q': 1, 'R': 3, 'S': 1, 'T': 1,
-     'U': 2, 'V': 1, 'W': 1, 'X': 1,
-     'Y': 1, 'Z': 1, '[': 13, '\\': 17,
-     ']': 13, '^': 12, '_': 1, '`': 13,
-     'a': 1, 'b': 2, 'c': 1, 'd': 1,
-     'e': 1, 'f': 1, 'g': 1, 'h': 1,
-     'i': 1, 'j': 1, 'k': 1, 'l': 1,
-     'm': 1, 'n': 1, 'o': 1, 'p': 1,
-     'q': 1, 'r': 3, 's': 1, 't': 1,
-     'u': 2, 'v': 1, 'w': 1, 'x': 1,
-     'y': 1, 'z': 1, '{': 13, '|': 12,
-     '}': 13, '~': 13},
+     '\r': 14, ' ': 0, '!': 10, '"': 17,
+     '#': 19, '$': 15, '%': 12, '&': 12,
+     "'": 16, '(': 13, ')': 13, '*': 7,
+     '+': 12, ',': 13, '-': 12, '.': 6,
+     '/': 11, '0': 4, '1': 5, '2': 5,
+     '3': 5, '4': 5, '5': 5, '6': 5,
+     '7': 5, '8': 5, '9': 5, ':': 13,
+     ';': 13, '<': 9, '=': 12, '>': 8,
+     '@': 13, 'A': 1, 'B': 2, 'C': 1,
+     'D': 1, 'E': 1, 'F': 1, 'G': 1,
+     'H': 1, 'I': 1, 'J': 1, 'K': 1,
+     'L': 1, 'M': 1, 'N': 1, 'O': 1,
+     'P': 1, 'Q': 1, 'R': 3, 'S': 1,
+     'T': 1, 'U': 2, 'V': 1, 'W': 1,
+     'X': 1, 'Y': 1, 'Z': 1, '[': 13,
+     '\\': 18, ']': 13, '^': 12, '_': 1,
+     '`': 13, 'a': 1, 'b': 2, 'c': 1,
+     'd': 1, 'e': 1, 'f': 1, 'g': 1,
+     'h': 1, 'i': 1, 'j': 1, 'k': 1,
+     'l': 1, 'm': 1, 'n': 1, 'o': 1,
+     'p': 1, 'q': 1, 'r': 3, 's': 1,
+     't': 1, 'u': 2, 'v': 1, 'w': 1,
+     'x': 1, 'y': 1, 'z': 1, '{': 13,
+     '|': 12, '}': 13, '~': 13},
     # 1
     {'0': 1, '1': 1, '2': 1, '3': 1,
      '4': 1, '5': 1, '6': 1, '7': 1,
@@ -74,7 +75,7 @@
      't': 1, 'u': 1, 'v': 1, 'w': 1,
      'x': 1, 'y': 1, 'z': 1},
     # 2
-    {'"': 16, "'": 15, '0': 1, '1': 1,
+    {'"': 17, "'": 16, '0': 1, '1': 1,
      '2': 1, '3': 1, '4': 1, '5': 1,
      '6': 1, '7': 1, '8': 1, '9': 1,
      'A': 1, 'B': 1, 'C': 1, 'D': 1,
@@ -92,7 +93,7 @@
      'v': 1, 'w': 1, 'x': 1, 'y': 1,
      'z': 1},
     # 3
-    {'"': 16, "'": 15, '0': 1, '1': 1,
+    {'"': 17, "'": 16, '0': 1, '1': 1,
      '2': 1, '3': 1, '4': 1, '5': 1,
      '6': 1, '7': 1, '8': 1, '9': 1,
      'A': 1, 'B': 1, 'C': 1, 'D': 1,
@@ -110,22 +111,22 @@
      'v': 1, 'w': 1, 'x': 1, 'y': 1,
      'z': 1},
     # 4
-    {'.': 24, '0': 21, '1': 21, '2': 21,
-     '3': 21, '4': 21, '5': 21, '6': 21,
-     '7': 21, '8': 23, '9': 23, 'B': 22,
-     'E': 25, 'J': 13, 'L': 13, 'O': 20,
-     'X': 19, 'b': 22, 'e': 25, 'j': 13,
-     'l': 13, 'o': 20, 'x': 19},
+    {'.': 25, '0': 22, '1': 22, '2': 22,
+     '3': 22, '4': 22, '5': 22, '6': 22,
+     '7': 22, '8': 24, '9': 24, 'B': 23,
+     'E': 26, 'J': 13, 'L': 13, 'O': 21,
+     'X': 20, 'b': 23, 'e': 26, 'j': 13,
+     'l': 13, 'o': 21, 'x': 20},
     # 5
-    {'.': 24, '0': 5, '1': 5, '2': 5,
+    {'.': 25, '0': 5, '1': 5, '2': 5,
      '3': 5, '4': 5, '5': 5, '6': 5,
-     '7': 5, '8': 5, '9': 5, 'E': 25,
-     'J': 13, 'L': 13, 'e': 25, 'j': 13,
+     '7': 5, '8': 5, '9': 5, 'E': 26,
+     'J': 13, 'L': 13, 'e': 26, 'j': 13,
      'l': 13},
     # 6
-    {'0': 26, '1': 26, '2': 26, '3': 26,
-     '4': 26, '5': 26, '6': 26, '7': 26,
-     '8': 26, '9': 26},
+    {'0': 27, '1': 27, '2': 27, '3': 27,
+     '4': 27, '5': 27, '6': 27, '7': 27,
+     '8': 27, '9': 27},
     # 7
     {'*': 12, '=': 13},
     # 8
@@ -143,107 +144,115 @@
     # 14
     {'\n': 13},
     # 15
-    {automata.DEFAULT: 30, '\n': 27,
-     '\r': 27, "'": 28, '\\': 29},
+    {'0': 28, '1': 28, '2': 28, '3': 28,
+     '4': 28, '5': 28, '6': 28, '7': 28,
+     '8': 28, '9': 28},
     # 16
-    {automata.DEFAULT: 33, '\n': 27,
-     '\r': 27, '"': 31, '\\': 32},
+    {automata.DEFAULT: 32, '\n': 29,
+     '\r': 29, "'": 30, '\\': 31},
     # 17
+    {automata.DEFAULT: 35, '\n': 29,
+     '\r': 29, '"': 33, '\\': 34},
+    # 18
     {'\n': 13, '\r': 14},
-    # 18
-    {automata.DEFAULT: 18, '\n': 27, '\r': 27},
     # 19
-    {'0': 34, '1': 34, '2': 34, '3': 34,
-     '4': 34, '5': 34, '6': 34, '7': 34,
-     '8': 34, '9': 34, 'A': 34, 'B': 34,
-     'C': 34, 'D': 34, 'E': 34, 'F': 34,
-     'a': 34, 'b': 34, 'c': 34, 'd': 34,
-     'e': 34, 'f': 34},
+    {automata.DEFAULT: 19, '\n': 29, '\r': 29},
     # 20
-    {'0': 35, '1': 35, '2': 35, '3': 35,
-     '4': 35, '5': 35, '6': 35, '7': 35},
+    {'0': 36, '1': 36, '2': 36, '3': 36,
+     '4': 36, '5': 36, '6': 36, '7': 36,
+     '8': 36, '9': 36, 'A': 36, 'B': 36,
+     'C': 36, 'D': 36, 'E': 36, 'F': 36,
+     'a': 36, 'b': 36, 'c': 36, 'd': 36,
+     'e': 36, 'f': 36},
     # 21
-    {'.': 24, '0': 21, '1': 21, '2': 21,
-     '3': 21, '4': 21, '5': 21, '6': 21,
-     '7': 21, '8': 23, '9': 23, 'E': 25,
-     'J': 13, 'L': 13, 'e': 25, 'j': 13,
+    {'0': 37, '1': 37, '2': 37, '3': 37,
+     '4': 37, '5': 37, '6': 37, '7': 37},
+    # 22
+    {'.': 25, '0': 22, '1': 22, '2': 22,
+     '3': 22, '4': 22, '5': 22, '6': 22,
+     '7': 22, '8': 24, '9': 24, 'E': 26,
+     'J': 13, 'L': 13, 'e': 26, 'j': 13,
      'l': 13},
-    # 22
-    {'0': 36, '1': 36},
     # 23
-    {'.': 24, '0': 23, '1': 23, '2': 23,
-     '3': 23, '4': 23, '5': 23, '6': 23,
-     '7': 23, '8': 23, '9': 23, 'E': 25,
-     'J': 13, 'e': 25, 'j': 13},
+    {'0': 38, '1': 38},
     # 24
-    {'0': 24, '1': 24, '2': 24, '3': 24,
-     '4': 24, '5': 24, '6': 24, '7': 24,
-     '8': 24, '9': 24, 'E': 37, 'J': 13,
-     'e': 37, 'j': 13},
+    {'.': 25, '0': 24, '1': 24, '2': 24,
+     '3': 24, '4': 24, '5': 24, '6': 24,
+     '7': 24, '8': 24, '9': 24, 'E': 26,
+     'J': 13, 'e': 26, 'j': 13},
     # 25
-    {'+': 38, '-': 38, '0': 39, '1': 39,
-     '2': 39, '3': 39, '4': 39, '5': 39,
-     '6': 39, '7': 39, '8': 39, '9': 39},
+    {'0': 25, '1': 25, '2': 25, '3': 25,
+     '4': 25, '5': 25, '6': 25, '7': 25,
+     '8': 25, '9': 25, 'E': 39, 'J': 13,
+     'e': 39, 'j': 13},
     # 26
-    {'0': 26, '1': 26, '2': 26, '3': 26,
-     '4': 26, '5': 26, '6': 26, '7': 26,
-     '8': 26, '9': 26, 'E': 37, 'J': 13,
-     'e': 37, 'j': 13},
+    {'+': 40, '-': 40, '0': 41, '1': 41,
+     '2': 41, '3': 41, '4': 41, '5': 41,
+     '6': 41, '7': 41, '8': 41, '9': 41},
     # 27
+    {'0': 27, '1': 27, '2': 27, '3': 27,
+     '4': 27, '5': 27, '6': 27, '7': 27,
+     '8': 27, '9': 27, 'E': 39, 'J': 13,
+     'e': 39, 'j': 13},
+    # 28
+    {'0': 28, '1': 28, '2': 28, '3': 28,
+     '4': 28, '5': 28, '6': 28, '7': 28,
+     '8': 28, '9': 28},
+    # 29
     {},
-    # 28
+    # 30
     {"'": 13},
-    # 29
-    {automata.DEFAULT: 40, '\n': 13, '\r': 14},
-    # 30
-    {automata.DEFAULT: 30, '\n': 27,
-     '\r': 27, "'": 13, '\\': 29},
     # 31
+    {automata.DEFAULT: 42, '\n': 13, '\r': 14},
+    # 32
+    {automata.DEFAULT: 32, '\n': 29,
+     '\r': 29, "'": 13, '\\': 31},
+    # 33
     {'"': 13},
-    # 32
-    {automata.DEFAULT: 41, '\n': 13, '\r': 14},
-    # 33
-    {automata.DEFAULT: 33, '\n': 27,
-     '\r': 27, '"': 13, '\\': 32},
     # 34
-    {'0': 34, '1': 34, '2': 34, '3': 34,
-     '4': 34, '5': 34, '6': 34, '7': 34,
-     '8': 34, '9': 34, 'A': 34, 'B': 34,
-     'C': 34, 'D': 34, 'E': 34, 'F': 34,
-     'L': 13, 'a': 34, 'b': 34, 'c': 34,
-     'd': 34, 'e': 34, 'f': 34, 'l': 13},
+    {automata.DEFAULT: 43, '\n': 13, '\r': 14},
     # 35
-    {'0': 35, '1': 35, '2': 35, '3': 35,
-     '4': 35, '5': 35, '6': 35, '7': 35,
+    {automata.DEFAULT: 35, '\n': 29,
+     '\r': 29, '"': 13, '\\': 34},
+    # 36
+    {'0': 36, '1': 36, '2': 36, '3': 36,
+     '4': 36, '5': 36, '6': 36, '7': 36,
+     '8': 36, '9': 36, 'A': 36, 'B': 36,
+     'C': 36, 'D': 36, 'E': 36, 'F': 36,
+     'L': 13, 'a': 36, 'b': 36, 'c': 36,
+     'd': 36, 'e': 36, 'f': 36, 'l': 13},
+    # 37
+    {'0': 37, '1': 37, '2': 37, '3': 37,
+     '4': 37, '5': 37, '6': 37, '7': 37,
      'L': 13, 'l': 13},
-    # 36
-    {'0': 36, '1': 36, 'L': 13, 'l': 13},
-    # 37
-    {'+': 42, '-': 42, '0': 43, '1': 43,
-     '2': 43, '3': 43, '4': 43, '5': 43,
-     '6': 43, '7': 43, '8': 43, '9': 43},
     # 38
-    {'0': 39, '1': 39, '2': 39, '3': 39,
-     '4': 39, '5': 39, '6': 39, '7': 39,
-     '8': 39, '9': 39},
+    {'0': 38, '1': 38, 'L': 13, 'l': 13},
     # 39
-    {'0': 39, '1': 39, '2': 39, '3': 39,
-     '4': 39, '5': 39, '6': 39, '7': 39,
-     '8': 39, '9': 39, 'J': 13, 'j': 13},
+    {'+': 44, '-': 44, '0': 45, '1': 45,
+     '2': 45, '3': 45, '4': 45, '5': 45,
+     '6': 45, '7': 45, '8': 45, '9': 45},
     # 40
-    {automata.DEFAULT: 40, '\n': 27,
-     '\r': 27, "'": 13, '\\': 29},
+    {'0': 41, '1': 41, '2': 41, '3': 41,
+     '4': 41, '5': 41, '6': 41, '7': 41,
+     '8': 41, '9': 41},
     # 41
-    {automata.DEFAULT: 41, '\n': 27,
-     '\r': 27, '"': 13, '\\': 32},
+    {'0': 41, '1': 41, '2': 41, '3': 41,
+     '4': 41, '5': 41, '6': 41, '7': 41,
+     '8': 41, '9': 41, 'J': 13, 'j': 13},
     # 42
-    {'0': 43, '1': 43, '2': 43, '3': 43,
-     '4': 43, '5': 43, '6': 43, '7': 43,
-     '8': 43, '9': 43},
+    {automata.DEFAULT: 42, '\n': 29,
+     '\r': 29, "'": 13, '\\': 31},
     # 43
-    {'0': 43, '1': 43, '2': 43, '3': 43,
-     '4': 43, '5': 43, '6': 43, '7': 43,
-     '8': 43, '9': 43, 'J': 13, 'j': 13},
+    {automata.DEFAULT: 43, '\n': 29,
+     '\r': 29, '"': 13, '\\': 34},
+    # 44
+    {'0': 45, '1': 45, '2': 45, '3': 45,
+     '4': 45, '5': 45, '6': 45, '7': 45,
+     '8': 45, '9': 45},
+    # 45
+    {'0': 45, '1': 45, '2': 45, '3': 45,
+     '4': 45, '5': 45, '6': 45, '7': 45,
+     '8': 45, '9': 45, 'J': 13, 'j': 13},
     ]
 pseudoDFA = automata.DFA(states, accepts)
 
diff --git a/pypy/interpreter/pyparser/pytokenizer.py 
b/pypy/interpreter/pyparser/pytokenizer.py
--- a/pypy/interpreter/pyparser/pytokenizer.py
+++ b/pypy/interpreter/pyparser/pytokenizer.py
@@ -220,6 +220,10 @@
                     last_comment = ''
                 elif initial == '\\':                      # continued stmt
                     continued = 1
+                elif initial == '$':
+                    token_list.append((tokens.REVDBMETAVAR, token,
+                                       lnum, start, line))
+                    last_comment = ''
                 else:
                     if initial in '([{':
                         if parenlev == 0:
diff --git a/pypy/interpreter/pyparser/test/test_pyparse.py 
b/pypy/interpreter/pyparser/test/test_pyparse.py
--- a/pypy/interpreter/pyparser/test/test_pyparse.py
+++ b/pypy/interpreter/pyparser/test/test_pyparse.py
@@ -165,3 +165,12 @@
         for linefeed in ["\r\n","\r"]:
             tree = self.parse(fmt % linefeed)
             assert expected_tree == tree
+
+    def test_revdb_dollar_num(self):
+        self.parse('$0')
+        self.parse('$5')
+        self.parse('$42')
+        self.parse('2+$42.attrname')
+        py.test.raises(SyntaxError, self.parse, '$')
+        py.test.raises(SyntaxError, self.parse, '$a')
+        py.test.raises(SyntaxError, self.parse, '$.5')
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to