diff options
author | Alon Zakai <alonzakai@gmail.com> | 2011-07-10 19:33:03 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2011-07-10 19:33:03 -0700 |
commit | d1dc23eff7315181a680eeca4ae28a35cdff9168 (patch) | |
tree | 3c4d52bf216c4c400449482beb1470c8c9f15f2d | |
parent | 9d870c216afd1af5dc724e944f26e22a2b2511f1 (diff) |
bindings generator fixes
-rwxr-xr-x | tools/bindings_generator.py | 37 |
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 |