summaryrefslogtreecommitdiffstats
path: root/bindings/php5/php_code.py
diff options
context:
space:
mode:
authorBenjamin Dauvergne <bdauvergne@entrouvert.com>2010-01-04 09:13:36 +0000
committerBenjamin Dauvergne <bdauvergne@entrouvert.com>2010-01-04 09:13:36 +0000
commit5224c7cf675d6c8b2df9b3f4b43f8cd8d4eb8184 (patch)
treefc571c8d011bd0b73d932601e0b026f338e5d675 /bindings/php5/php_code.py
parent42062ff986a344f3f33a4465e106fede10aeaa6a (diff)
downloadlasso-5224c7cf675d6c8b2df9b3f4b43f8cd8d4eb8184.tar.gz
lasso-5224c7cf675d6c8b2df9b3f4b43f8cd8d4eb8184.tar.xz
lasso-5224c7cf675d6c8b2df9b3f4b43f8cd8d4eb8184.zip
Bindings: make the binding infrastructure understand GObject-introspections annotations
* bindings/bindings.py * bindings/utils.py: add convenience function to treat arguments tuple: (type,name,{annotations}). introduce new argument options, fix that arguments are 3-tuple of the form (type,name,annotations), where annotations is a dictionary. Key of this dictionnary can be: - optional, wheter the argument is necessary, it means it has a default value. - out, means that the pointer is a pointer of pointer, for bindings that can return exceptions, it will be returned instead of the integer error code, the only way to access error codes will be exceptions. - element-type, contained type of a list or an array, - key-type, value-type, type of respectively the key and value of a GHashTable. - transfer, wheter a the callee(for arguments)/caller(for return values) owns the values passed, it can be none,container(if the callee/caller only owns the container not the contained value) or full. doc.parameters is now a 3-tuple of (attribute-name, attribute-description, attribute-annotations) where attribute-annotations is a string of the form '(option1)(option2 option-arguments) etc.'. - add predicates for xml, list and time_t values. improve predicates for cstring and const modifier. * bindings/overrides.xml: 'out' arguments are not well supported for java, so skip functions using them. * bindings/java/lang.py bindings/php5/php_code.py bindings/php5/wrapper_source.py bindings/python/lang.py: - update language specifig binding generators for handling new annotations. - improve python method declaration, handle optional arguments with default values, factorize this chode in two methods, get_python_arg_decl and defval_to_python_value. * bindings/python/tests/Makefile.am bindings/python/tests/idwsf1_tests.py bindings/python/tests/idwsf2_tests.py: make test work with out of source build dir.
Diffstat (limited to 'bindings/php5/php_code.py')
-rw-r--r--bindings/php5/php_code.py21
1 files changed, 15 insertions, 6 deletions
diff --git a/bindings/php5/php_code.py b/bindings/php5/php_code.py
index 76bae23d..64439778 100644
--- a/bindings/php5/php_code.py
+++ b/bindings/php5/php_code.py
@@ -22,7 +22,7 @@
import re
import sys
-import utils
+from utils import *
class PhpCode:
def __init__(self, binding_data, fd):
@@ -135,7 +135,7 @@ function lassoRegisterIdWsf2DstService($prefix, $href) {
print >> self.fd, ''
def generate_constructors(self, klass):
- method_prefix = utils.format_as_underscored(klass.name) + '_'
+ method_prefix = format_as_underscored(klass.name) + '_'
for m in self.binding_data.functions:
if m.name == method_prefix + 'new':
php_args = []
@@ -183,7 +183,7 @@ function lassoRegisterIdWsf2DstService($prefix, $href) {
for m in klass.members:
mtype = m[0]
- mname = utils.format_as_camelcase(m[1])
+ mname = format_as_camelcase(m[1])
options = m[2]
# Getters
@@ -253,7 +253,7 @@ function lassoRegisterIdWsf2DstService($prefix, $href) {
except IndexError:
setter = None
mname = re.match(r'lasso_.*_get_(\w+)', meth_name).group(1)
- mname =utils.format_as_camelcase(mname)
+ mname = format_as_camelcase(mname)
print >> self.fd, ' /**'
print >> self.fd, ' * @return %s' % self.get_docstring_return_type(m.return_type)
@@ -278,7 +278,7 @@ function lassoRegisterIdWsf2DstService($prefix, $href) {
print >> self.fd, ''
# second pass on methods, real methods
- method_prefix = utils.format_as_underscored(klass.name) + '_'
+ method_prefix = format_as_underscored(klass.name) + '_'
for m in methods:
if m.name.endswith('_new') or m.name.endswith('_new_from_dump') or \
m.name.endswith('_new_full'):
@@ -295,9 +295,13 @@ function lassoRegisterIdWsf2DstService($prefix, $href) {
mname = mname[len(method_prefix):]
php_args = []
c_args = []
+ outarg = None
for arg in m.args[1:]:
arg_type, arg_name, arg_options = arg
arg_name = '$' + arg_name
+ if is_out(arg):
+ assert not outarg
+ outarg = arg
if arg_options.get('optional'):
if arg_options.get('default'):
defval = arg_options.get('default')
@@ -318,6 +322,11 @@ function lassoRegisterIdWsf2DstService($prefix, $href) {
c_args.append(arg_name)
else:
c_args.append('%s._cptr' % arg_name)
+ if is_out(arg):
+ php_args.pop()
+ php_args.append(arg_name)
+ c_args.pop()
+ c_args.append(arg_name)
if php_args:
php_args = ', '.join(php_args)
@@ -331,7 +340,7 @@ function lassoRegisterIdWsf2DstService($prefix, $href) {
if m.docstring:
print >> self.fd, self.generate_docstring(m, mname, 4)
print >> self.fd, ' public function %s(%s) {' % (
- utils.format_underscore_as_camelcase(mname), php_args)
+ format_underscore_as_camelcase(mname), php_args)
if m.return_type == 'void':
print >> self.fd, ' %s($this->_cptr%s);' % (cname, c_args)
elif m.return_type in ('gint', 'int'):