diff -ru Pyrex-0.9.3.1/Pyrex/Compiler/Code.py Pyrex-0.9.3.1-SB/Pyrex/Compiler/Code.py --- Pyrex-0.9.3.1/Pyrex/Compiler/Code.py 2005-09-13 19:49:53.000000000 +1000 +++ Pyrex-0.9.3.1-SB/Pyrex/Compiler/Code.py 2005-11-21 17:56:04.000000000 +1100 @@ -272,7 +272,7 @@ self.level = 0 def putln(self, code): - self.f.write("%s%s\n" % (" " * self.level, code)) + self.f.write("%s%s\n" % (" " * self.level, code)) def indent(self): self.level += 1 diff -ru Pyrex-0.9.3.1/Pyrex/Compiler/Nodes.py Pyrex-0.9.3.1-SB/Pyrex/Compiler/Nodes.py --- Pyrex-0.9.3.1/Pyrex/Compiler/Nodes.py 2005-09-13 19:35:22.000000000 +1000 +++ Pyrex-0.9.3.1-SB/Pyrex/Compiler/Nodes.py 2005-11-21 18:56:31.000000000 +1100 @@ -127,6 +127,7 @@ if entry.visibility == 'public': public_extension_types.append(entry) if public_vars_and_funcs or public_extension_types: + import os.path #import os #outname_base, _ = os.path.splitext(result.c_file) #result.h_file = outname_base + ".h" @@ -135,6 +136,9 @@ result.i_file = replace_suffix(result.c_file, ".pxi") h_code = Code.CCodeWriter(result.h_file) i_code = Code.PyrexCodeWriter(result.i_file) + hfilename = os.path.basename( result.h_file ) + i_code.putln('cdef extern from "%s":' % hfilename) + i_code.indent() for entry in public_vars_and_funcs: h_code.putln("extern %s;" % entry.type.declaration_code( @@ -143,8 +147,9 @@ entry.type.declaration_code(entry.cname, pyrex = 1)) for entry in public_extension_types: self.generate_cclass_header_code(entry.type, h_code) - self.generate_cclass_include_code(entry.type, i_code) + self.generate_cclass_include_code(entry.type, i_code, h_code) h_code.putln("extern DL_IMPORT(void) init%s(void);" % env.module_name) + i_code.dedent() #result.h_file_generated = 1 #result.i_file_generated = 1 @@ -152,13 +157,18 @@ h_code.putln("extern DL_IMPORT(PyTypeObject) %s;" % type.typeobj_cname) self.generate_obj_struct_definition(type, h_code) - def generate_cclass_include_code(self, type, i_code): - i_code.putln("cdef extern class %s.%s:" % ( - type.module_name, type.name)) + def generate_cclass_include_code(self, type, i_code, h_code): + inherit_str = "" + if type.base_type is not None: + inherit_str = "(%s)"%type.base_type.name + i_code.putln("cdef extern class %s.%s%s [ object %s ]:" % ( + type.module_name, type.name, inherit_str, type.objstruct_cname )) i_code.indent() for entry in type.scope.var_entries: i_code.putln("cdef %s" % entry.type.declaration_code(entry.cname, pyrex = 1)) + if not type.scope.var_entries: + i_code.putln("pass") i_code.dedent() def generate_c_code(self, env, result): diff -ru Pyrex-0.9.3.1/Pyrex/Compiler/Symtab.py Pyrex-0.9.3.1-SB/Pyrex/Compiler/Symtab.py --- Pyrex-0.9.3.1/Pyrex/Compiler/Symtab.py 2004-07-11 17:26:22.000000000 +1000 +++ Pyrex-0.9.3.1-SB/Pyrex/Compiler/Symtab.py 2005-11-21 17:12:50.000000000 +1100 @@ -685,7 +685,8 @@ entry.pos = pos # the .pyx file and not the .pxd file if entry.visibility <> visibility: error(pos, "Declaration of '%s' as '%s' conflicts with previous " - "declaration as '%s'" % (class_name, visibility, entry.visibility)) +# "declaration as '%s'" % (class_name, visibility, entry.visibility)) + "declaration as '%s'" % ("???", visibility, entry.visibility)) if objstruct_cname: if type.objstruct_cname and type.objstruct_cname <> objstruct_cname: error(pos, "Object struct name differs from previous declaration")