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/override.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'codegen/override.py') diff --git a/codegen/override.py b/codegen/override.py index c4d5ffa..bba5e42 100644 --- a/codegen/override.py +++ b/codegen/override.py @@ -19,7 +19,10 @@ def class2cname(klass, method): c_name += c return c_name[1:] + '_' + method -import_pat = re.compile(r'\s*import\s+(\S+)\.([^\s.]+)\s+as\s+(\S+)') +# import python_type as c_name [for arg_type] +# Last ('for') clause is optional. If present, the type will be +# imported only if given 'arg_type' is registered. +import_pat = re.compile(r'\s*import\s+(\S+)\.([^\s.]+)\s+as\s+(\S+)(\s+for\s+(\S+))?') class Overrides: def __init__(self, filename=None): @@ -166,7 +169,8 @@ class Overrides: for line in string.split(buffer, '\n'): match = import_pat.match(line) if match: - self.imports.append(match.groups()) + module, pyname, cname, conditional, importing_for = match.groups() + self.imports.append((module, pyname, cname, importing_for or None)) elif command == 'define': "define funcname [kwargs|noargs|onearg] [classmethod|staticmethod]" "define Class.method [kwargs|noargs|onearg] [classmethod|staticmethod]" -- cgit