aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2011-07-10 19:33:03 -0700
committerAlon Zakai <alonzakai@gmail.com>2011-07-10 19:33:03 -0700
commitd1dc23eff7315181a680eeca4ae28a35cdff9168 (patch)
tree3c4d52bf216c4c400449482beb1470c8c9f15f2d
parent9d870c216afd1af5dc724e944f26e22a2b2511f1 (diff)
bindings generator fixes
-rwxr-xr-xtools/bindings_generator.py37
1 files changed, 34 insertions, 3 deletions
diff --git a/tools/bindings_generator.py b/tools/bindings_generator.py
index 08bee810..62e1d646 100755
--- a/tools/bindings_generator.py
+++ b/tools/bindings_generator.py
@@ -84,6 +84,9 @@ def generate_class(generating_cname, cname, clazz):
inherited = generating_cname != cname
for method in clazz['methods']['public']:
+ if method['pure_virtual']: return # Nothing to generate for pure virtual classes
+
+ for method in clazz['methods']['public']:
print ' ', method['name'], method
mname = method['name']
@@ -91,10 +94,22 @@ def generate_class(generating_cname, cname, clazz):
constructor = mname == cname
if constructor and inherited: continue
+ if method['pure_virtual']: continue
+
+ skip = False
+ for i in range(len(args)):
+ if args[i]['name'] == '':
+ args[i]['name'] = 'arg' + str(i+1)
+ if '>' in args[i]['name']:
+ print 'WARNING: odd ">" in %s, skipping' % cname
+ skip = True
+ break
+ if skip:
+ continue
# C
- ret = (cname + ' *') if constructor else method['rtnType']
+ ret = ((cname + ' *') if constructor else method['rtnType']).replace('virtual ', '')
callprefix = 'new ' if constructor else 'self->'
typedargs = ', '.join( ([] if constructor else [cname + ' * self']) + map(lambda arg: arg['type'] + ' ' + arg['name'], args) )
justargs = ', '.join(map(lambda arg: arg['name'], args))
@@ -113,11 +128,27 @@ def generate_class(generating_cname, cname, clazz):
if constructor:
generating_cname_suffixed += suffix
+ actualmname = ''
+ if mname == '__operator___assignment_':
+ callprefix = '*self = '
+ continue # TODO
+ elif mname == '__operator____imult__':
+ callprefix = '*self * '
+ continue # TODO
+ elif mname == '__operator____iadd__':
+ callprefix = '*self + '
+ continue # TODO
+ elif mname == '__operator____isub__':
+ callprefix = '*self - '
+ continue # TODO
+ else:
+ actualmname = mname
+
gen_c.write('''
%s %s(%s) {
- return %s%s(%s);
+ %s%s%s(%s);
}
-''' % (ret, fullname, typedargs, callprefix, mname, justargs))
+''' % (ret, fullname, typedargs, 'return ' if ret.replace(' ', '') != 'void' else '', callprefix, actualmname, justargs))
# JS