From 7d76956310aeb6497e7349844fc99758a47dfa4b Mon Sep 17 00:00:00 2001 From: Stefan Behnel Date: Thu, 1 May 2008 08:21:43 +0200 Subject: [PATCH] another Main.parse() cleanup to make sure a unicode error really comes from the parser, not from the filename decoding --- Cython/Compiler/Main.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/Cython/Compiler/Main.py b/Cython/Compiler/Main.py index a4882786..a0e84cac 100644 --- a/Cython/Compiler/Main.py +++ b/Cython/Compiler/Main.py @@ -138,26 +138,27 @@ class Context: return scope def parse(self, source_filename, type_names, pxd, full_module_name): + try: + name = source_filename + if not isinstance(source_filename, unicode): + filename_encoding = sys.getfilesystemencoding() + if filename_encoding is None: + filename_encoding = sys.getdefaultencoding() + name = source_filename.decode(filename_encoding) + except UnicodeDecodeError: + pass + # Parse the given source file and return a parse tree. try: f = Utils.open_source_file(source_filename, "rU") - try: - if isinstance(source_filename, unicode): - name = source_filename - else: - filename_encoding = sys.getfilesystemencoding() - if filename_encoding is None: - filename_encoding = sys.getdefaultencoding() - name = source_filename.decode(filename_encoding) - s = PyrexScanner(f, name, source_encoding = f.encoding, type_names = type_names, context = self) tree = Parsing.p_module(s, pxd, full_module_name) finally: f.close() except UnicodeDecodeError, msg: - error((source_filename, 0, 0), "Decoding error, missing or incorrect coding= at top of source (%s)" % msg) + error((name, 0, 0), "Decoding error, missing or incorrect coding= at top of source (%s)" % msg) if Errors.num_errors > 0: raise CompileError return tree -- 2.26.2