diff options
author | Benjamin Dauvergne <bdauvergne@entrouvert.com> | 2010-02-22 13:30:46 +0000 |
---|---|---|
committer | Benjamin Dauvergne <bdauvergne@entrouvert.com> | 2010-02-22 13:30:46 +0000 |
commit | 333aee05e42aa3179512dfbcb105c5fb45ad26a8 (patch) | |
tree | 2fcfaf6e6f1e8803015868bdc7ba86a59b31063b /bindings/python | |
parent | 008b8151943acb5b5c97b82fc5525ae9d0c03021 (diff) | |
download | lasso-333aee05e42aa3179512dfbcb105c5fb45ad26a8.tar.gz lasso-333aee05e42aa3179512dfbcb105c5fb45ad26a8.tar.xz lasso-333aee05e42aa3179512dfbcb105c5fb45ad26a8.zip |
Bindings python: use more accessors from utils.py
* binings/python/lang.py: remove direct access to type tuples in favor
of using accesors from utils.py.
Diffstat (limited to 'bindings/python')
-rw-r--r-- | bindings/python/lang.py | 72 |
1 files changed, 31 insertions, 41 deletions
diff --git a/bindings/python/lang.py b/bindings/python/lang.py index 5502ed05..9076f101 100644 --- a/bindings/python/lang.py +++ b/bindings/python/lang.py @@ -67,9 +67,6 @@ class Binding: self.binding_data = binding_data self.src_dir = os.path.dirname(__file__) - def is_pygobject(self, t): - return t and is_object((t,'',{})) and t not in self.binding_data.enums - def free_value(self, fd, type, name = None): if not name: name = arg_anme(type) @@ -326,14 +323,12 @@ if WSF_SUPPORT: if m.name == method_prefix + 'new': c_args = [] py_args = [] - for o in m.args: - type, aname, arg_options = o - py_args.append(get_python_arg_decl(o)) - - if self.is_pygobject(type): - c_args.append('%s and %s._cptr' % (aname, aname)) + for arg in m.args: + py_args.append(get_python_arg_decl(arg)) + if not is_int(arg, self.binding_data) and is_object(arg): + c_args.append('%(name)s and %(name)s._cptr' % { 'name' : arg_name(arg) }) else: - c_args.append(aname) + c_args.append(arg_name(arg)) py_args = remove_bad_optional(py_args) c_args = ', '.join(c_args) @@ -352,11 +347,11 @@ if WSF_SUPPORT: constructor_name = format_as_camelcase(m.name[len(method_prefix):]) c_args = [] py_args = [] - for o in m.args: - type, aname, arg_options = o - py_args.append(get_python_arg_decl(o)) + for arg in m.args: + aname = arg_name(arg) + py_args.append(get_python_arg_decl(arg)) - if self.is_pygobject(type): + if not is_int(arg, self.binding_data) and is_object(arg): c_args.append('%s and %s._cptr' % (aname, aname)) else: c_args.append(aname) @@ -392,7 +387,7 @@ if WSF_SUPPORT: pass elif is_xml_node(el_type): pass - elif is_object(element_type(m)): + elif is_object(el_type): print >> fd, ' if not t: return t' print >> fd, ' t = tuple([cptrToPy(x) for x in t])' else: @@ -456,21 +451,22 @@ if WSF_SUPPORT: py_args = [] c_args = [] outarg = None - for o in m.args[1:]: - type, aname, arg_options = o - if is_out(o): + for arg in m.args[1:]: + if is_out(arg): assert not outarg - outarg = o - outvar = '_%s_out' % aname + outarg = arg + outvar = '_%s_out' % arg_name(arg) else: - py_args.append(get_python_arg_decl(o)) + py_args.append(get_python_arg_decl(arg)) - if is_out(o): + if is_out(arg): c_args.append(outvar) - elif not self.is_pygobject(type): - c_args.append(aname) + elif is_xml_node(arg) or is_boolean(arg) or is_cstring(arg) or is_int(arg, self.binding_data) or is_glist(arg) or is_hashtable(arg) or is_time_t_pointer(arg): + c_args.append(arg_name(arg)) + elif is_object(arg): + c_args.append('%(name)s and %(name)s._cptr' % { 'name': arg_name(arg) }) else: - c_args.append('%s and %s._cptr' % (aname, aname)) + raise Exception('Does not handle argument of type: %s' % ((m, arg),)) # check py_args py_args = remove_bad_optional(py_args) opt = False @@ -731,19 +727,12 @@ register_constants(PyObject *d) print >> fd, '' print >> fd, ' if (! PyArg_ParseTuple(args, "O", &cvt_this)) return NULL;' print >> fd, ' this = (%s*)cvt_this->obj;' % klassname - - if is_cstring(m): - print >> fd, ' return_value = this->%s;' % arg_name(m) - elif is_object(m): - print >> fd, ' return_value = this->%s;' % m[1]; - else: - print >> fd, ' return_value = this->%s;' % m[1]; + print >> fd, ' return_value = this->%s;' % arg_name(m) try: self.return_value(fd, m) except: print >>sys.stderr, 'W: cannot make an assignment for', c, m raise - print >> fd, ' return return_pyvalue;' print >> fd, '}' print >> fd, '' @@ -888,26 +877,27 @@ register_constants(PyObject *d) parse_tuple_format = [] parse_tuple_args = [] for arg in m.args: - arg_type, aname, arg_options = arg + atype = arg_type(arg) + aname = arg_name(arg) arg_def = None python_cvt_def = None defval = None - if arg_options.get('optional'): + if is_optional(arg): if not '|' in parse_tuple_format: parse_tuple_format.append('|') - if arg_type in ('char*', 'const char*', 'gchar*', 'const gchar*'): - arg_type = arg_type.replace('const ', '') - if arg_options.get('optional'): + if is_cstring(arg): + atype = unconstify(atype) + if is_optional(arg): parse_tuple_format.append('z') else: parse_tuple_format.append('s') parse_tuple_args.append('&%s' % aname) arg_def = ' %s %s = NULL;' % (arg[0], arg[1]) - elif arg_type in ['GType', 'int', 'gint', 'gboolean', 'const gboolean', 'time_t'] + self.binding_data.enums: + elif is_int(arg, self.binding_data) or is_boolean(arg): parse_tuple_format.append('i') parse_tuple_args.append('&%s' % aname) - if arg_options.get('default'): - defval = arg_options.get('default') + if arg_default(arg): + defval = arg_default(arg) if defval.startswith('b:'): defval = defval[2:].upper() else: |