Eolian: function name part deduplication

This commit is contained in:
Kai Huuhko 2014-06-23 18:25:04 +03:00
parent 8e9827e8f2
commit 8bd6c3e778
1 changed files with 24 additions and 9 deletions

View File

@ -99,6 +99,16 @@ def conv_cls_name(name):
return name, name
def conv_func_name(prefix, func_name):
p = prefix.split("_")
f = func_name.split("_")
if p[-1] == f[0]:
p.pop()
prefix = "_".join(p)
func_name = "_".join(f)
return "_".join((prefix, func_name))
class Generator(object):
tab = " "
@ -234,9 +244,9 @@ class Method(object):
self.py_name += "_"
if self.eo_prefix:
self.c_name = "_".join((self.eo_prefix, func.name))
self.c_name = conv_func_name(self.eo_prefix, func.name)
elif self.legacy_prefix:
self.c_name = "_".join((self.legacy_prefix, func.name))
self.c_name = conv_func_name(self.legacy_prefix, func.name)
else:
raise ValueError("No prefix found for function %r" % (func))
@ -450,9 +460,11 @@ class Property(object):
m = self.setter = Method(eo_prefix, legacy_prefix)
m.py_name = "__set__"
if eo_prefix:
m.c_name = "_".join((eo_prefix, func.name, "set"))
fname = conv_func_name(eo_prefix, func.name)
m.c_name = "_".join((fname, "set"))
elif legacy_prefix:
m.c_name = "_".join((legacy_prefix, func.name, "set"))
fname = conv_func_name(legacy_prefix, func.name)
m.c_name = "_".join((fname, "set"))
else:
raise ValueError("No prefix found for %r" % (func))
py_params = []
@ -496,9 +508,11 @@ class Property(object):
m = self.getter = Method(eo_prefix, legacy_prefix)
m.py_name = "__get__"
if eo_prefix:
m.c_name = "_".join((eo_prefix, func.name, "get"))
fname = conv_func_name(eo_prefix, func.name)
m.c_name = "_".join((fname, "get"))
elif legacy_prefix:
m.c_name = "_".join((legacy_prefix, func.name, "get"))
fname = conv_func_name(legacy_prefix, func.name)
m.c_name = "_".join((fname, "get"))
else:
raise ValueError("No prefix found for %r" % (func))
for p in func.property_values_list:
@ -689,9 +703,9 @@ class Class(object):
eo_prefix = self.eo_prefix = cls.eo_prefix
legacy_prefix = self.legacy_prefix = cls.legacy_prefix
if eo_prefix:
if eo_prefix and eo_prefix != "null":
prefix = eo_prefix
elif legacy_prefix:
elif legacy_prefix and legacy_prefix != "null":
log.warn("Class %s has legacy prefix" % (cls.name))
prefix = legacy_prefix
else:
@ -732,7 +746,8 @@ class Class(object):
if eo_prefix:
self.default_ctor = EoDefaultConstructor(eo_prefix, None)
else:
self.default_ctor = LegacyDefaultConstructor(None, legacy_prefix)
self.default_ctor = LegacyDefaultConstructor(
None, legacy_prefix)
props = cls.functions_list_get(eolian.FunctionType.PROPERTY)
for prop in props: