diff options
author | Frederic Peters <fpeters@entrouvert.com> | 2008-04-29 12:05:55 +0000 |
---|---|---|
committer | Frederic Peters <fpeters@entrouvert.com> | 2008-04-29 12:05:55 +0000 |
commit | 5511b8b29d461e53008fd4f1b1ae548ff8d425cb (patch) | |
tree | 081244d085f1770b4f96e19aa5d849d1a75c48f4 /bindings/lang_php5_helpers/wrapper_source.py | |
parent | 8e660b7eb334db6ac26b472d858198ad12b9e695 (diff) | |
download | lasso-5511b8b29d461e53008fd4f1b1ae548ff8d425cb.tar.gz lasso-5511b8b29d461e53008fd4f1b1ae548ff8d425cb.tar.xz lasso-5511b8b29d461e53008fd4f1b1ae548ff8d425cb.zip |
[project @ fpeters@0d.be-20071115162508-ydcoj2rr8zkfxyvy]
merged Damien branch
Original author: Frederic Peters <fpeters@0d.be>
Date: 2007-11-15 17:25:08.524000+01:00
Diffstat (limited to 'bindings/lang_php5_helpers/wrapper_source.py')
-rw-r--r-- | bindings/lang_php5_helpers/wrapper_source.py | 63 |
1 files changed, 37 insertions, 26 deletions
diff --git a/bindings/lang_php5_helpers/wrapper_source.py b/bindings/lang_php5_helpers/wrapper_source.py index 5096877b..1dfef51a 100644 --- a/bindings/lang_php5_helpers/wrapper_source.py +++ b/bindings/lang_php5_helpers/wrapper_source.py @@ -31,7 +31,7 @@ class WrapperSource: self.functions_list = [] def is_object(self, t): - return t not in [None, 'char*', 'const char*', 'gchar*', 'const gchar*', 'GList*', 'GHashTable*', + return t not in ['char*', 'const char*', 'gchar*', 'const gchar*', 'GList*', 'GHashTable*', 'xmlNode*', 'int', 'gint', 'gboolean', 'const gboolean'] + self.binding_data.enums def generate(self): @@ -128,19 +128,22 @@ PHP_MSHUTDOWN_FUNCTION(lasso) } } ''' - elif vtype in ('GList*',) and options.get('elem_type') == 'char*': - print >> self.fd, '''\ - array_init(return_value); - for (item = g_list_first(return_c_value); item != NULL; item = g_list_next(item)) { - add_next_index_string(return_value, item->data, 1); - } + elif vtype == 'GList*': + if options.get('elem_type') == 'char*': + print >> self.fd, '''\ + set_array_from_list_of_strings(return_c_value, &return_value); ''' - elif vtype in ('GList*',) and options.get('elem_type') != 'char*': - print >> self.fd, ' RETURN_NULL();' - elif vtype in ('GHashTable*',) and options.get('elem_type') == 'char*': - print >> self.fd, ' RETURN_NULL();' - elif vtype in ('GHashTable*',) and options.get('elem_type') != 'char*': - print >> self.fd, '''\ + elif options.get('elem_type') == 'xmlNode*': + print >> self.fd, '''\ + set_array_from_list_of_xmlnodes(return_c_value, &return_value); +''' + else: + print >> self.fd, '''\ + set_array_from_list_of_objects(return_c_value, &return_value); +''' + elif vtype == 'GHashTable*': + if options.get('elem_type') not in ('char*', 'xmlNode*'): + print >> self.fd, '''\ set_array_from_hashtable_of_objects(return_c_value, &return_value); ''' else: @@ -168,12 +171,6 @@ PHP_MSHUTDOWN_FUNCTION(lasso) arg_type, arg_name, arg_options = arg if arg_type in ('char*', 'const char*', 'gchar*', 'const gchar*'): arg_type = arg_type.replace('const ', '') - #if arg_options.get('optional'): - # if not '|' in parse_tuple_format: - # parse_tuple_format.append('|') - # parse_tuple_format.append('z') - #else: - # parse_tuple_format.append('s') parse_tuple_format += 's' parse_tuple_args.append('&%s_str, &%s_len' % (arg_name, arg_name)) print >> self.fd, ' %s %s = NULL;' % ('char*', arg_name) @@ -195,7 +192,7 @@ PHP_MSHUTDOWN_FUNCTION(lasso) if m.return_type: print >> self.fd, ' %s return_c_value;' % m.return_type - if self.is_object(m.return_type): + if m.return_type is not None and self.is_object(m.return_type): print >> self.fd, ' PhpGObjectPtr *self;' print >> self.fd, '' @@ -236,7 +233,8 @@ PHP_MSHUTDOWN_FUNCTION(lasso) self.generate_setter(c.name, m_type, m_name, m_options) def generate_getter(self, klassname, m_type, m_name, m_options): - if m_type == 'GList*' and m_options.get('elem_type') != 'char*': + if m_type == 'GList*' and m_options.get('elem_type') not in ('char*', 'xmlNode*') \ + and not self.is_object(m_options.get('elem_type')): print >> sys.stderr, 'E: GList argument : %s of %s, with type : %s' % (m_name, klassname, m_options.get('elem_type')) return @@ -255,8 +253,6 @@ PHP_MSHUTDOWN_FUNCTION(lasso) print >> self.fd, ' PhpGObjectPtr *cvt_this;' if self.is_object(m_type): print >> self.fd, ' PhpGObjectPtr *self;' - elif m_type == 'GList*' and m_options.get('elem_type') == 'char*': - print >> self.fd, ' GList* item = NULL;' print >> self.fd, '' print >> self.fd, '''\ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zval_this) == FAILURE) { @@ -281,7 +277,8 @@ PHP_MSHUTDOWN_FUNCTION(lasso) def generate_setter(self, klassname, m_type, m_name, m_options): - if m_type == 'GList*' and m_options.get('elem_type') != 'char*': + if m_type == 'GList*' and m_options.get('elem_type') not in ('char*', 'xmlNode*') \ + and not self.is_object(m_options.get('elem_type')): print >> sys.stderr, 'E: GList argument : %s of %s, with type : %s' % (m_name, klassname, m_options.get('elem_type')) return @@ -350,13 +347,13 @@ PHP_MSHUTDOWN_FUNCTION(lasso) print >> self.fd, ' }' print >> self.fd, ' if (%s_str && strcmp(%s_str, "") != 0) {' % (m_name, m_name) if arg_type == 'xmlNode*': - print >> self.fd, ' this->%s = get_xml_node_from_string(%s_str);' % (m_name, m_name) + print >> self.fd, ' this->%s = get_xml_node_from_string(%s_str);' % (m_name, m_name) else: print >> self.fd, ' this->%s = estrndup(%s_str, %s_len);' % (m_name, m_name, m_name) print >> self.fd, ' } else {' print >> self.fd, ' this->%s = NULL;' % m_name print >> self.fd, ' }' - elif arg_type == 'GList*' and arg_options.get('elem_type') == 'char*': + elif arg_type == 'GList*': if m_options.get('elem_type') == 'char*': print >> self.fd, ''' if (this->%(name)s) { @@ -366,6 +363,20 @@ PHP_MSHUTDOWN_FUNCTION(lasso) } this->%(name)s = get_list_from_array_of_strings(zval_%(name)s); ''' % { 'name': m_name } + elif m_options.get('elem_type') == 'xmlNode*': + print >> self.fd, ''' + if (this->%(name)s) { + /* free existing list */ + g_list_foreach(this->%(name)s, (GFunc)xmlFreeNode, NULL); + g_list_free(this->%(name)s); + } + this->%(name)s = get_list_from_array_of_xmlnodes(zval_%(name)s); +''' % { 'name': m_name } + else: + print >> self.fd, ''' + /* FIXME: Free the existing list */ + this->%(name)s = get_list_from_array_of_objects(zval_%(name)s); +''' % { 'name': m_name } elif arg_type == 'GHashTable*' and arg_options.get('elem_type') != 'char*': print >> self.fd, '''\ /* FIXME: Free the existing hashtable */ |