1
1
from __future__ import absolute_import , division , print_function , unicode_literals
2
2
import sys , pythonparser .source , pythonparser .lexer , pythonparser .parser , pythonparser .diagnostic
3
3
4
+ def parse_buffer (buffer , mode = 'exec' , flags = [], version = None , engine = None ):
5
+ """
6
+ Like :meth:`parse`, but accepts a :class:`source.Buffer` instead of
7
+ source and filename."""
8
+
9
+ if version is None :
10
+ version = sys .version_info [0 :2 ]
11
+
12
+ if engine is None :
13
+ engine = pythonparser .diagnostic .Engine ()
14
+
15
+ lexer = pythonparser .lexer .Lexer (buffer , version , engine )
16
+ if mode in ('single' , 'eval' ):
17
+ lexer .interactive = True
18
+
19
+ parser = pythonparser .parser .Parser (lexer , version , engine )
20
+ parser .add_flags (flags )
21
+
22
+ if mode == 'exec' :
23
+ return parser .file_input ()
24
+ elif mode == 'single' :
25
+ return parser .single_input ()
26
+ elif mode == 'eval' :
27
+ return parser .eval_input ()
28
+
4
29
def parse (source , filename = '<unknown>' , mode = 'exec' ,
5
30
flags = [], version = None , engine = None ):
6
31
"""
@@ -24,24 +49,6 @@ def parse(source, filename='<unknown>', mode='exec',
24
49
:raise: :class:`diagnostic.Error`
25
50
if the source code is not well-formed
26
51
"""
27
- if version is None :
28
- version = sys .version_info [0 :2 ]
29
-
30
- if engine is None :
31
- engine = pythonparser .diagnostic .Engine ()
32
-
33
- buffer = pythonparser .source .Buffer (source , filename )
34
-
35
- lexer = pythonparser .lexer .Lexer (buffer , version , engine )
36
- if mode in ('single' , 'eval' ):
37
- lexer .interactive = True
52
+ return parse_buffer (pythonparser .source .Buffer (source , filename ),
53
+ mode , flags , version , engine )
38
54
39
- parser = pythonparser .parser .Parser (lexer , version , engine )
40
- parser .add_flags (flags )
41
-
42
- if mode == 'exec' :
43
- return parser .file_input ()
44
- elif mode == 'single' :
45
- return parser .single_input ()
46
- elif mode == 'eval' :
47
- return parser .eval_input ()
0 commit comments