specs: Handle overloaded methods/functions.
diff --git a/specs/stdapi.py b/specs/stdapi.py
index c72c264..de0cc93 100644
--- a/specs/stdapi.py
+++ b/specs/stdapi.py
@@ -26,6 +26,8 @@
"""C basic types"""
+import sys
+
import debug
@@ -372,7 +374,7 @@
class Function:
- def __init__(self, type, name, args, call = '', fail = None, sideeffects=True, internal=False):
+ def __init__(self, type, name, args, call = '', fail = None, sideeffects=True, internal=False, overloaded=False):
self.type = type
self.name = name
@@ -394,6 +396,7 @@
self.fail = fail
self.sideeffects = sideeffects
self.internal = internal
+ self.overloaded = overloaded
def prototype(self, name=None):
if name is not None:
@@ -414,6 +417,17 @@
s += ")"
return s
+ def sigName(self):
+ name = self.name
+ if self.overloaded:
+ # suffix used to make overloaded functions/methods unique
+ suffix = ','.join([str(arg.type) for arg in self.args])
+ suffix = suffix.replace(' *', '*')
+ suffix = suffix.replace(' &', '&')
+ suffix = '(' + suffix + ')'
+ name += suffix
+ return name
+
def argNames(self):
return [arg.name for arg in self.args]
@@ -489,9 +503,9 @@
class Method(Function):
- def __init__(self, type, name, args, call = '', const=False, sideeffects=True):
+ def __init__(self, type, name, args, call = '', const=False, sideeffects=True, overloaded=False):
assert call == '__stdcall'
- Function.__init__(self, type, name, args, call = call, sideeffects=sideeffects)
+ Function.__init__(self, type, name, args, call = call, sideeffects=sideeffects, overloaded=overloaded)
for index in range(len(self.args)):
self.args[index].index = index + 1
self.const = const
@@ -792,7 +806,7 @@
def visitReference(self, reference):
# Strip out references
- return reference.type
+ return self.visit(reference.type)
class Traverser(Visitor):