summaryrefslogtreecommitdiff
path: root/giscanner/glibtransformer.py
diff options
context:
space:
mode:
Diffstat (limited to 'giscanner/glibtransformer.py')
-rw-r--r--giscanner/glibtransformer.py36
1 files changed, 11 insertions, 25 deletions
diff --git a/giscanner/glibtransformer.py b/giscanner/glibtransformer.py
index aacaa508..ee39862e 100644
--- a/giscanner/glibtransformer.py
+++ b/giscanner/glibtransformer.py
@@ -28,7 +28,7 @@ import subprocess
from .ast import (Callback, Constant, Enum, Function, Member, Namespace,
Parameter, Property, Return, Struct, Type, Alias,
Union, Field, type_name_from_ctype,
- default_array_types, TYPE_UINT8, PARAM_DIRECTION_IN)
+ default_array_types, TYPE_UINT8, PARAM_TRANSFER_FULL)
from .transformer import Names
from .glibast import (GLibBoxed, GLibEnum, GLibEnumMember, GLibFlags,
GLibInterface, GLibObject, GLibSignal, GLibBoxedStruct,
@@ -85,8 +85,6 @@ class GLibTransformer(object):
def __init__(self, transformer, noclosure=False):
self._transformer = transformer
self._noclosure = noclosure
- self._transformer.set_container_types(['GList*', 'GSList*'],
- ['GHashTable*'])
self._namespace_name = None
self._names = Names()
self._uscore_type_names = {}
@@ -99,6 +97,7 @@ class GLibTransformer(object):
self._validating = False
# Public API
+
def set_introspection_binary(self, binary):
self._binary = binary
@@ -165,6 +164,7 @@ class GLibTransformer(object):
return namespace
# Private
+
def _add_attribute(self, node, replace=False):
node_name = node.name
if (not replace) and node_name in self._names.names:
@@ -203,6 +203,7 @@ class GLibTransformer(object):
self._uscore_type_names[no_uscore_prefixed] = node
# Helper functions
+
def _resolve_gtypename(self, gtype_name):
try:
return self._transformer.gtypename_to_giname(gtype_name,
@@ -254,6 +255,7 @@ class GLibTransformer(object):
self._register_internal_type(type_name, gnode)
# Parser
+
def _parse_node(self, node):
if isinstance(node, Enum):
self._parse_enum(node)
@@ -345,6 +347,7 @@ class GLibTransformer(object):
self._remove_attribute(func.name)
func.name = methname
target_klass.static_methods.append(func)
+ func.is_method = True
return func
def _parse_method(self, func):
@@ -431,6 +434,7 @@ class GLibTransformer(object):
# We don't need the "this" parameter
del func.parameters[0]
klass.methods.append(func)
+ func.is_method = True
else:
klass.constructors.append(func)
return func
@@ -512,6 +516,7 @@ class GLibTransformer(object):
del self._names.names[maybe_class.name]
# Introspection
+
def _introspect_type(self, xmlnode):
if xmlnode.tag in ('enum', 'flags'):
self._introspect_enum(xmlnode)
@@ -627,7 +632,7 @@ class GLibTransformer(object):
rctype = signal_info.attrib['return']
rtype = Type(self._transformer.parse_ctype(rctype), rctype)
return_ = Return(rtype, signal_info.attrib['return'])
- return_.transfer = 'full'
+ return_.transfer = PARAM_TRANSFER_FULL
signal = GLibSignal(signal_info.attrib['name'], return_)
for i, parameter in enumerate(signal_info.findall('param')):
if i == 0:
@@ -642,6 +647,7 @@ class GLibTransformer(object):
node.signals.append(signal)
# Resolver
+
def _resolve_type_name(self, type_name, ctype=None):
# Workaround glib bug #548689, to be included in 2.18.0
if type_name == "GParam":
@@ -784,25 +790,6 @@ class GLibTransformer(object):
def _resolve_property(self, prop):
prop.type = self._resolve_param_type(prop.type, allow_invalid=False)
- def _adjust_transfer(self, param):
- if not (param.transfer is None or param.transfer_inferred):
- return
-
- # Do GLib/GObject-specific type transformations here
- node = self._lookup_node(param.type.name)
- if node is None:
- return
-
- if isinstance(param, Parameter):
- if param.direction != PARAM_DIRECTION_IN:
- transfer = 'full'
- else:
- transfer = 'none'
- else:
- transfer = 'full'
-
- param.transfer = transfer
-
def _adjust_throws(self, func):
if func.parameters == []:
return
@@ -820,12 +807,10 @@ class GLibTransformer(object):
self._resolve_parameters(func.parameters)
func.retval.type = self._resolve_param_type(func.retval.type)
self._adjust_throws(func)
- self._adjust_transfer(func.retval)
def _resolve_parameters(self, parameters):
for parameter in parameters:
parameter.type = self._resolve_param_type(parameter.type)
- self._adjust_transfer(parameter)
def _resolve_field(self, field):
if isinstance(field, Callback):
@@ -837,6 +822,7 @@ class GLibTransformer(object):
alias.target = self._resolve_type_name(alias.target, alias.target)
# Validation
+
def _validate(self, nodes):
nodes = list(self._names.names.itervalues())
i = 0