From: Stefan Behnel Date: Thu, 1 May 2008 06:21:43 +0000 (+0200) Subject: another Main.parse() cleanup to make sure a unicode error really comes from the parse... X-Git-Tag: 0.9.6.14~1 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=7d76956310aeb6497e7349844fc99758a47dfa4b;p=cython.git another Main.parse() cleanup to make sure a unicode error really comes from the parser, not from the filename decoding --- 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