Fix missing error when overriding final methods of cimported classes.
authorRobert Bradshaw <robertwb@gmail.com>
Fri, 20 Jul 2012 18:19:02 +0000 (11:19 -0700)
committerRobert Bradshaw <robertwb@gmail.com>
Sat, 21 Jul 2012 21:45:45 +0000 (14:45 -0700)
Cython/Compiler/ModuleNode.py
Cython/Compiler/Nodes.py
Cython/Compiler/Parsing.py
Demos/setup.py

index 5d71597..6b0ce5b 100644 (file)
@@ -812,10 +812,11 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
                 declaration = method_entry.type.declaration_code(
                     method_entry.final_func_cname)
                 if method_entry.func_modifiers:
-                    modifiers = "%s " % ' '.join(method_entry.func_modifiers).upper()
+                    modifiers = " %s " % ' '.join(method_entry.func_modifiers).upper()
+                    modifiers = modifiers.replace(" INLINE ", " CYTHON_INLINE ")
                 else:
-                    modifiers = ''
-                code.putln("static %s%s;" % (modifiers, declaration))
+                    modifiers = " "
+                code.putln("static%s%s;" % (modifiers, declaration))
 
     def generate_objstruct_predeclaration(self, type, code):
         if not type.scope:
index 8e31ef7..be4617e 100644 (file)
@@ -1057,6 +1057,7 @@ class CVarDefNode(StatNode):
     #  in_pxd        boolean
     #  api           boolean
     #  overridable   boolean        whether it is a cpdef
+    #  modifiers     ['inline']
 
     #  decorators    [cython.locals(...)] or None
     #  directive_locals { string : NameNode } locals defined by cython.locals(...)
@@ -1102,7 +1103,7 @@ class CVarDefNode(StatNode):
             if type.is_cfunction:
                 self.entry = dest_scope.declare_cfunction(name, type, declarator.pos,
                     cname = cname, visibility = self.visibility, in_pxd = self.in_pxd,
-                    api = self.api)
+                    api = self.api, modifiers = self.modifiers)
                 if self.entry is not None:
                     self.entry.is_overridable = self.overridable
                     self.entry.directive_locals = copy.copy(self.directive_locals)
index 2c0ad3b..a6dd21f 100644 (file)
@@ -2736,6 +2736,7 @@ def p_c_func_or_var_declaration(s, pos, ctx):
             declarators = declarators,
             in_pxd = ctx.level in ('module_pxd', 'c_class_pxd'),
             api = ctx.api,
+            modifiers = modifiers,
             overridable = ctx.overridable)
     return result
 
index 608f405..529158f 100644 (file)
@@ -8,7 +8,7 @@ from distutils.core import setup
 from distutils.extension import Extension
 from Cython.Build import cythonize
 
-ext_modules = cythonize("*.pyx", exclude="numpy_*.pyx")
+ext_modules = cythonize("**/*.pyx", exclude="numpy_*.pyx")
 
 # Only compile the following if numpy is installed.
 try: