aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2011-08-06 21:57:51 -0700
committerAlon Zakai <alonzakai@gmail.com>2011-08-06 21:57:51 -0700
commit4166d57ca729fdd55e89e284d5d047b2422ecaae (patch)
tree190b0701e4a109eafe8a061ad6e62c8b22d6858a
parentb2d49aa9a76305e9c50dafbc436c53099a27dd19 (diff)
generalize parents to classes in bindings generator
-rwxr-xr-xtools/bindings_generator.py20
1 files changed, 13 insertions, 7 deletions
diff --git a/tools/bindings_generator.py b/tools/bindings_generator.py
index fe230c43..9c3969d9 100755
--- a/tools/bindings_generator.py
+++ b/tools/bindings_generator.py
@@ -54,7 +54,7 @@ if '--' in sys.argv:
# First pass - read everything
classes = {}
-struct_parents = {}
+parents = {}
text = ''
for header in sys.argv[2:]:
@@ -70,8 +70,12 @@ for classname, clazz in parsed.classes.iteritems():
print 'zz see', classname
classes[classname] = clazz
clazz['methods'] = clazz['methods']['public'] # CppHeaderParser doesn't have 'public' etc. in structs. so equalize to that
+ if '::' in classname:
+ assert classname.count('::') == 1
+ parents[classname.split('::')[1]] = classname.split('::')[0]
+
for sname, struct in clazz._public_structs.iteritems():
- struct_parents[sname] = classname
+ parents[sname] = classname
classes[classname + '::' + sname] = struct
struct['name'] = sname # Missing in CppHeaderParser
print 'zz seen struct %s in %s' % (sname, classname)
@@ -92,6 +96,8 @@ for classname, clazz in classes.iteritems():
args[i]['type'] += '*'
if args[i]['reference'] and '&' not in args[i]['type']:
args[i]['type'] += '&'
+ #raw = args[i]['type'].replace('&', '').replace('*', '')
+ #if raw in classes:
default_param = len(args)+1
for i in range(len(args)):
@@ -214,15 +220,15 @@ def generate_class(generating_classname, classname, clazz): # TODO: deprecate ge
print 'WARNING: odd ">" in %s, skipping' % classname
skip = True
break
- #print 'c1', struct_parents.keys()
+ #print 'c1', parents.keys()
if args[i]['type'][-1] == '&':
sname = args[i]['type'][:-1]
if sname[-1] == ' ': sname = sname[:-1]
- if sname in struct_parents:
- args[i]['type'] = struct_parents[sname] + '::' + sname + '&'
- elif sname.replace('const ', '') in struct_parents:
+ if sname in parents:
+ args[i]['type'] = parents[sname] + '::' + sname + '&'
+ elif sname.replace('const ', '') in parents:
sname = sname.replace('const ', '')
- args[i]['type'] = 'const ' + struct_parents[sname] + '::' + sname + '&'
+ args[i]['type'] = 'const ' + parents[sname] + '::' + sname + '&'
#print 'POST arggggggg', classname, 'x', mname, 'x', args[i]['name'], 'x', args[i]['type']
if skip:
continue