From 72fc9e34e508926f979bea981ea2d7b5553d8ec4 Mon Sep 17 00:00:00 2001 From: Stefan Behnel Date: Mon, 24 Nov 2008 12:47:22 +0100 Subject: [PATCH] support parentheses around import-from names --- Cython/Compiler/Parsing.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Cython/Compiler/Parsing.py b/Cython/Compiler/Parsing.py index b79615c9..98cc2d7a 100644 --- a/Cython/Compiler/Parsing.py +++ b/Cython/Compiler/Parsing.py @@ -42,6 +42,10 @@ class Ctx(object): d.update(kwds) return ctx +def eat_newlines(s): + while s.sy == 'NEWLINE': + s.next() + def p_ident(s, message = "Expected an identifier"): if s.sy == 'IDENT': name = s.systring @@ -1022,14 +1026,27 @@ def p_from_import_statement(s, first_statement = 0): else: s.error("Expected 'import' or 'cimport'") is_cimport = kind == 'cimport' + is_parenthesized = False if s.sy == '*': imported_names = [(s.position(), "*", None, None)] s.next() else: + if s.sy == '(': + is_parenthesized = True + s.next() + eat_newlines(s) imported_names = [p_imported_name(s, is_cimport)] + if is_parenthesized: + eat_newlines(s) while s.sy == ',': s.next() + if is_parenthesized: + eat_newlines(s) imported_names.append(p_imported_name(s, is_cimport)) + if is_parenthesized: + eat_newlines(s) + if is_parenthesized: + s.expect(')') dotted_name = EncodedString(dotted_name) if dotted_name == '__future__': if not first_statement: -- 2.26.2