merged in latest cython-devel
authorStefan Behnel <scoder@users.berlios.de>
Mon, 4 May 2009 20:22:51 +0000 (22:22 +0200)
committerStefan Behnel <scoder@users.berlios.de>
Mon, 4 May 2009 20:22:51 +0000 (22:22 +0200)
Cython/Compiler/Parsing.py
Cython/Compiler/PyrexTypes.py

index 753e50d021f25cc6ee8296754e30966a8e641cf1..30baa1d98a8206793fadff1219a7d3c6869507e6 100644 (file)
@@ -1576,6 +1576,9 @@ def p_statement(s, ctx, first_statement = 0):
         decorators = p_decorators(s)
         if s.sy not in ('def', 'cdef', 'cpdef'):
             s.error("Decorators can only be followed by functions ")
+    elif s.sy == 'pass' and cdef_flag:
+        # empty cdef block
+        return p_pass_statement(s, with_newline = 1)
 
     overridable = 0
     if s.sy == 'cdef':
index d4500dc0c99ce4198fff7fe1320cc17921f0fa7c..2982df32c525a74610b4672cac248c40058a263e 100644 (file)
@@ -275,8 +275,14 @@ class BuiltinObjectType(PyObjectType):
     base_type = None
     module_name = '__builtin__'
 
+    alternative_name = None # used for str/bytes duality
+
     def __init__(self, name, cname):
         self.name = name
+        if name == 'str':
+            self.alternative_name = 'bytes'
+        elif name == 'bytes':
+            self.alternative_name = 'str'
         self.cname = cname
         self.typeptr_cname = "&" + cname
                                  
@@ -293,7 +299,9 @@ class BuiltinObjectType(PyObjectType):
         
     def assignable_from(self, src_type):
         if isinstance(src_type, BuiltinObjectType):
-            return src_type.name == self.name
+            return src_type.name == self.name or (
+                src_type.name == self.alternative_name and
+                src_type.name is not None)
         else:
             return not src_type.is_extension_type