another Main.parse() cleanup to make sure a unicode error really comes from the parse...
authorStefan Behnel <scoder@users.berlios.de>
Thu, 1 May 2008 06:21:43 +0000 (08:21 +0200)
committerStefan Behnel <scoder@users.berlios.de>
Thu, 1 May 2008 06:21:43 +0000 (08:21 +0200)
Cython/Compiler/Main.py

index a488278656536e28567c6cde2c450225118fbfbb..a0e84cac2957ff175d844a4e2df2b2b18ad7727f 100644 (file)
@@ -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=<encoding-name> at top of source (%s)" % msg)
+            error((name, 0, 0), "Decoding error, missing or incorrect coding=<encoding-name> at top of source (%s)" % msg)
         if Errors.num_errors > 0:
             raise CompileError
         return tree