From 5a5460578775d8e44e15ad4df3cbcad2f0c3a808 Mon Sep 17 00:00:00 2001 From: Paul Pogonyshev Date: Mon, 8 Sep 2008 20:26:13 +0000 Subject: Bug 551056 – make codegen not import when corresponding argument types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2008-09-08 Paul Pogonyshev Bug 551056 – make codegen not import when corresponding argument types are not registered * codegen/override.py (import_pat): Add support for optional 'for' clause. (Overrides.__parse_override): Handle it. * codegen/codegen.py (SourceWriter.write_imports) (SourceWriter.write_object_imports): Adapt for changes in get_imports() return value. (is_registered_object): New function. svn path=/trunk/; revision=967 --- codegen/codegen.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'codegen/codegen.py') diff --git a/codegen/codegen.py b/codegen/codegen.py index fa4417a..ab9153c 100644 --- a/codegen/codegen.py +++ b/codegen/codegen.py @@ -1374,9 +1374,10 @@ typedef intobjargproc ssizeobjargproc; def write_imports(self): self.fp.write('/* ---------- types from other modules ---------- */\n') - for module, pyname, cname in self.overrides.get_imports(): - self.fp.write('static PyTypeObject *_%s;\n' % cname) - self.fp.write('#define %s (*_%s)\n' % (cname, cname)) + for module, pyname, cname, importing_for in self.overrides.get_imports(): + if importing_for is None or is_registered_object(importing_for): + self.fp.write('static PyTypeObject *_%s;\n' % cname) + self.fp.write('#define %s (*_%s)\n' % (cname, cname)) self.fp.write('\n\n') def write_type_declarations(self): @@ -1485,8 +1486,9 @@ typedef intobjargproc ssizeobjargproc; return bymod = {} - for module, pyname, cname in imports: - bymod.setdefault(module, []).append((pyname, cname)) + for module, pyname, cname, importing_for in imports: + if importing_for is None or is_registered_object(importing_for): + bymod.setdefault(module, []).append((pyname, cname)) self.fp.write(' PyObject *module;\n\n') for module in bymod: self.fp.write( @@ -1625,6 +1627,9 @@ typedef intobjargproc ssizeobjargproc; _objects = {} +def is_registered_object(c_name): + return c_name in _objects + def get_object_by_name(c_name): global _objects return _objects[c_name] -- cgit