2008-05-31 Johan Dahlin <jdahlin@async.com.br>
+ * giscanner/xmlwriter.py:
+ Improve error reporting when trying to quote None.
+ * giscanner/girparser.py:
+ Do not print warnings when including more complete .gir files
+ * giscanner/girwriter.py:
+ Do not require a name for parameters, add a todo for singletons
+ * giscanner/glibtransformer.py:
+ Refactor the way structs are done, add a couple of hacks to allow
+ us to get further.
+ * giscanner/transformer.py:
+ Add enough hacks so cairo, atk and pango.gir can be parsed properly
+ * gobject-introspection-1.0.pc.in:
+ Export girdir, so we can access gobject-2.0.gir from outside
+
+2008-05-31 Johan Dahlin <jdahlin@async.com.br>
+
* tools/g-ir-scanner:
* tests/parser/Makefile.am:
Update sys.path before running the parser so we don't have
for child in ns.getchildren():
if child.tag == _corens('class'):
self._parse_object(child)
+ elif child.tag in [_corens('callback'),
+ _corens('function'),
+ _corens('record')]:
+ continue
else:
print 'PARSER: Unhandled %s' % (child.tag,)
from __future__ import with_statement
-from .ast import (Callback, Class, Enum, Function, Interface, Sequence,
- Struct)
+from .ast import (Callback, Class, Enum, Function, Interface, Member,
+ Sequence, Struct)
from .glibast import (GLibBoxed, GLibEnum, GLibEnumMember,
GLibFlags, GLibObject, GLibInterface)
from .xmlwriter import XMLWriter
self._write_callback(node)
elif isinstance(node, Struct):
self._write_record(node)
+ elif isinstance(node, Member):
+ # FIXME: atk_misc_instance singleton
+ pass
else:
print 'WRITER: Unhandled node', node
self._write_parameter(parameter)
def _write_parameter(self, parameter):
- attrs = [('name', parameter.name)]
+ attrs = []
+ if parameter.name is not None:
+ attrs.append(('name', parameter.name))
if parameter.direction != 'in':
attrs.append(('direction', parameter.direction))
if parameter.transfer:
from . import cgobject
from .odict import odict
-from .ast import (Callback, Enum, Function, Namespace, Parameter, Property,
- Return, Sequence, Struct, Type)
+from .ast import (Callback, Enum, Function, Member, Namespace, Parameter,
+ Property, Return, Sequence, Struct, Type)
from .glibast import (GLibBoxed, GLibEnum, GLibEnumMember, GLibFlags,
GLibInterface, GLibObject, GLibSignal)
self._parse_struct(node)
elif isinstance(node, Callback):
self._parse_callback(node)
+ elif isinstance(node, Member):
+ # FIXME: atk_misc_instance singletons
+ pass
else:
print 'GOBJECT BUILDER: Unhandled node:', node
from giscanner.ast import (Callback, Enum, Function, Namespace, Member,
Parameter, Return, Sequence, Struct, Type)
from giscanner.sourcescanner import (
- SourceSymbol, symbol_type_name, CTYPE_POINTER, CTYPE_TYPEDEF, CTYPE_VOID,
- CTYPE_BASIC_TYPE, CTYPE_FUNCTION, CTYPE_STRUCT, CSYMBOL_TYPE_FUNCTION,
+ SourceSymbol, ctype_name, symbol_type_name, CTYPE_POINTER,
+ CTYPE_BASIC_TYPE, CTYPE_UNION,
+ CTYPE_TYPEDEF, CTYPE_VOID, CTYPE_BASIC_TYPE, CTYPE_ENUM,
+ CTYPE_FUNCTION, CTYPE_STRUCT, CSYMBOL_TYPE_FUNCTION,
CSYMBOL_TYPE_TYPEDEF, CSYMBOL_TYPE_STRUCT, CSYMBOL_TYPE_ENUM,
CSYMBOL_TYPE_UNION, CSYMBOL_TYPE_OBJECT)
if stype == CSYMBOL_TYPE_FUNCTION:
return self._create_function(symbol)
elif stype == CSYMBOL_TYPE_TYPEDEF:
- if (symbol.base_type.type == CTYPE_POINTER and
- symbol.base_type.base_type.type == CTYPE_FUNCTION):
- node = self._create_callback(symbol)
- elif symbol.base_type.type == CTYPE_STRUCT:
- node = self._create_typedef_struct(symbol)
- # This prevents an infinite recursion when scanning structures with
- # private types not exposed in headers.
- elif symbol.base_type.type == CSYMBOL_TYPE_TYPEDEF:
- return
- else:
- node = self._traverse_one(symbol, symbol.base_type.type)
- return node
+ return self._create_typedef(symbol)
elif stype == CSYMBOL_TYPE_STRUCT:
return self._create_struct(symbol)
elif stype == CSYMBOL_TYPE_ENUM:
pass
else:
raise NotImplementedError(
- 'Transformer: unhandled symbol: %r of type %r'
+ 'Transformer: unhandled symbol: %r of type %s'
% (symbol.ident, symbol_type_name(stype)))
def _create_enum(self, symbol):
elif source_type.type == CTYPE_POINTER:
value = self._create_source_type(source_type.base_type) + '*'
else:
- print 'BUILDER: Unhandled source type: %d' % (source_type.type,)
+ print 'BUILDER: Unhandled source type %s' % (
+ ctype_name(source_type.type),)
value = '???'
return value
yield self._create_parameter(
child, options.get(child.ident, []))
+ def _create_typedef(self, symbol):
+ ctype = symbol.base_type.type
+ if (ctype == CTYPE_POINTER and
+ symbol.base_type.base_type.type == CTYPE_FUNCTION):
+ node = self._create_callback(symbol)
+ elif ctype == CTYPE_STRUCT:
+ node = self._create_typedef_struct(symbol)
+ elif ctype == CTYPE_ENUM:
+ return self._create_enum(symbol)
+ elif ctype in (CTYPE_TYPEDEF,
+ CTYPE_POINTER,
+ CTYPE_BASIC_TYPE,
+ CTYPE_UNION):
+ return
+ else:
+ raise NotImplementedError(
+ "symbol %r of type %s" % (symbol.ident, ctype_name(ctype)))
+ return node
+
def _create_type(self, source_type):
type_name = self._create_source_type(source_type)
return Type(type_name)
struct = Struct(name, symbol.ident)
for child in symbol.base_type.child_list:
- field = self._traverse_one(child, child.base_type.type)
+ # FIXME: This is obviously wrong, we're sending in data
+ # of the wrong type to _traverse_one
+ try:
+ field = self._traverse_one(child, child.base_type.type)
+ except NotImplementedError:
+ continue
+
if field:
struct.fields.append(field)
return -1
attr_length = 0
for attr, value in attributes:
+ if value is None:
+ raise ValueError(
+ "value for attribute %r cannot be None" % (attr,))
attr_length += 2 + len(attr) + len(quoteattr(value))
return attr_length + indent
for attr, value in attributes:
if indent_len and not first:
attr_value += '\n%s' % (self._indent_char * indent_len)
- assert value is not None, attr
+ if value is None:
+ raise ValueError(
+ "value for attribute %r cannot be None" % (attr,))
attr_value += ' %s=%s' % (attr, quoteattr(value))
if first:
first = False
includedir=@includedir@
g_ir_scanner=${bindir}/g-ir-scanner
+girdir=${prefix}/share/gir
# FIXME: These needs to be ported to the GIR format first
# g_idl_generator=${bindir}/g-idl-generator