Commit Graph

303 Commits

Author SHA1 Message Date
Colin Walters
ff6b28c17b Bug 551738 - Associate classes with their structs
Inside glibtransformer, we now look at structures ending in "Class" and
see if they have an associated GlibObject (i.e. a structure of the same
name without the "Class" suffix).  If found, pair them up.

The .gir file for <class> gains an attribute denoting its associated
class struct.  Any <record> many now have a glib:is-class-struct-for
annotation which tells which (if any) <class> for which it defines the
layout.

In the .typelib, we record the association between the class and
its structure.  Generic structures however just have a boolean
saying whether they're a class struct.  (Going from a generic class
struct to its class should not be necessary).

Finally, we expose GIRepository APIs to access both bits of information
from the .typelib.

svn path=/trunk/; revision=1088
2009-02-06 18:37:13 +00:00
Colin Walters
1b22fa426f girnode.c: Fix copy & paste error
This line is almost certainly a copy & paste error.  It appears to be
harmless, but it's better to not have it.

svn path=/trunk/; revision=1085
2009-02-05 18:00:00 +00:00
Johan Dahlin
314ad462dc Add utility functions for invocing closures given a GICallableInfo using
2009-02-04  Johan Dahlin  <jdahlin@async.com.br>

    * girepository/Makefile.am:
    * girepository/girffi.c (g_callable_info_get_ffi_arg_types),
    (g_callable_info_get_ffi_return_type),
    (g_callable_info_prepare_closure), (g_callable_info_free_closure):
    * girepository/girffi.h:
    Add utility functions for invocing closures given a GICallableInfo
    using libffi.


svn path=/trunk/; revision=1084
2009-02-05 00:40:14 +00:00
Colin Walters
52d2251c82 Bug 555960 - Nested structs and unions (generation portion)
Patch from Andreas Rottmann <a.rottmann@gmx.at>.

	* tests/scanner/utility.h (UtilityTaggedValue): Make the union
	member anonymous.
	(UtilityByte): New union typedef with an unnamed struct in it.

	* giscanner/transformer.py (Transformer._create_struct): Create
	unnamed structs for symbols with a None ident.
	(Transformer._create_union): Likewise.

	* giscanner/girwriter.py (GIRWriter._write_record): Allow name
	being None.
	(GIRWriter._write_union): Likewise.

	* girepository/girparser.c (start_struct): Allow a NULL name for
	non-toplevel structs.
	(start_union): Likewise.

	* tests/scanner/utility.h (UtilityTaggedValue): New struct
	typedef, which has a nested union member.
	* tests/scanner/utility-expected.gir: Adapted.

	* giscanner/transformer.py (Transformer._create_member): Create
	struct/union members if appropriate.
	(Transformer._create_struct, Transformer._create_union): Allow for
	structs/unions without a C type.

	* giscanner/glibtransformer.py (GLibTransformer._resolve_field):
	We don't need to resolve non-typef'd
	(GLibTransformer._resolve_field): Add cases for non-typedef'd
	struct/union "fields".

	* giscanner/girwriter.py (GIRWriter._write_record): Allow for
	records without a C type.
	(GIRWriter._write_field): structs and unions may appear in places
	where fields do.

svn path=/trunk/; revision=1082
2009-02-04 00:48:24 +00:00
Colin Walters
8a0cdd96e9 Bug 555960 - nested structs and unions
Patch from Andreas Rottmann <a.rottmann@gmx.at>.

This change modifies the parser to hold a stack of nodes, instead of
a single concept of "current" node.  This allows the parser to recurse
into nested nodes.

svn path=/trunk/; revision=1081
2009-02-04 00:48:17 +00:00
Dan Winship
0ed02eb80b handle the special case for GObject, whose glib:get-type is listed as
* girepository/ginfo.c (g_registered_type_info_get_g_type): handle
	the special case for GObject, whose glib:get-type is listed as
	"intern".

svn path=/trunk/; revision=1080
2009-02-02 20:41:30 +00:00
Colin Walters
306ca05c5e Bug 569408, Bug 568680 - Scanner misses fields (at least in GObject.Object)
The scanner misses all fields of the GObject struct -- there
are no <field> children of the <class> element for GObject in the GIR. This of
course yields wrong field offsets for all derived objects.

svn path=/trunk/; revision=1079
2009-02-02 16:31:06 +00:00
Colin Walters
4e5037e0f3 Bug 563469 – Arrays not treated correctly in struct offset calculation
Arrays are currently not handled specially, and hence treated as pointers in
giroffsets.c:get_field_size_alignment(), which is (obviously) wrong.

svn path=/trunk/; revision=1078
2009-02-02 16:31:02 +00:00
Robert Carr
3353523d11 Undo revision 1075
svn path=/trunk/; revision=1077
2009-01-29 10:43:05 +00:00
Robert Carr
8ac6225faf post_filter_varargs_functions should also filter callbacks. Add tests of
* girepository/girparser.c: post_filter_varargs_functions
  should also filter callbacks.
* tests/scanner/foo.h: Add tests of varargs callbacks.

svn path=/trunk/; revision=1075
2009-01-29 10:32:25 +00:00
Johan Dahlin
a0a60f2601 Only unref the repository if it's actually set.
2009-01-26  Johan Dahlin  <jdahlin@async.com.br>

        * girepository/ginfo.c (g_base_info_unref):
        Only unref the repository if it's actually set.


svn path=/trunk/; revision=1068
2009-01-26 17:56:48 +00:00
Johan Dahlin
40e6b94790 add FT_Int32 add XftFont Report errors when an invalid type is encountered
2009-01-15  Johan Dahlin  <jdahlin@async.com.br>

	* gir/freetype2-2.0.gir: add FT_Int32
	* gir/xft-2.0.gir: add XftFont
	* girepository/gdump.c (g_irepository_dump):
	Report errors when an invalid type is encountered
	* giscanner/glibtransformer.py:
	Make the error message a bit nicer.

	Part of preparating for gir generating inside pango.


svn path=/trunk/; revision=1050
2009-01-16 00:42:22 +00:00
Johan Dahlin
9bf5ee61a4 Bug 567813 – Everything should be versioned
2009-01-15  Johan Dahlin  <jdahlin@async.com.br>

        Bug 567813 – Everything should be versioned

        * gir/Makefile.am:
        * girepository/Makefile.am:
        * girepository/girepository.c (init_globals):
        * girepository/girparser.c (locate_gir):
        * giscanner/dumper.py:
        * giscanner/transformer.py:
        * gobject-introspection-1.0.pc.in:
        * tests/everything/Makefile.am:
        * tests/invoke/Makefile.am:
        * tests/offsets/Makefile.am:
        * tests/repository/Makefile.am:
        * tests/scanner/Makefile.am:
        * tools/Makefile.am:


svn path=/trunk/; revision=1046
2009-01-15 22:31:07 +00:00
Colin Walters
3fff99dfcc Bug 562914: Order GI_TYPELIB_PATH before anything else
We want the environment variable to override so that people can
easily write scripts that run their programs uninstalled.

svn path=/trunk/; revision=1024
2009-01-12 21:42:58 +00:00
Colin Walters
2971e35fe6 Bug 567212: Exit after dumping
The intended use of g_irepository_get_option_group is that your
application more transparently supports --introspection-dump; we
should exit so that your app doesn't continue trying to launch.

svn path=/trunk/; revision=1023
2009-01-12 21:31:45 +00:00
Colin Walters
ca638d9ecf Bug 567087 - generic marshaller
Since GObject-Introspection depends on both ffi and GObject, it's
a convenient home for jdahlin's generic signal marshaller until
such time as GObject can directly depend on ffi.

When it gets added to GObject, we can simply point our marshaller
at that one.

svn path=/trunk/; revision=1022
2009-01-12 21:31:43 +00:00
Andreas Rottmann
b95d92aca0 Bug 556489 – callback annotations
2008-01-03  Andreas Rottmann  <a.rottmann@gmx.at>

	Bug 556489 – callback annotations
	
	* giscanner/transformer.py 

	* tools/generate.c (write_callable_info): Write out the new scope,
	closure and destroy attributes.

	* giscanner/transformer.py (Transformer._type_is_callback): New
	method, checking if a given type is a callback.
	(Transformer._augment_callback_params): New method; adds
	information (closure, destroy) to callback parameters.
	(Transformer._handle_closure, Transformer._handle_destroy): New methods, 
	auxiliary to _augment_callback_params.
	(Transformer._create_function): Call _augment_callback_params().
	(Transformer._create_parameter): Handle scope option.

	(Transformer._create_typedef_callback): New method, creates a
	callback, and registers it in the typedef namespace
	(Transformer._create_typedef): Use _create_typedef_callback()
	instead of the plain _create_callback().

	* giscanner/ast.py (Parameter): Added callback-related fields.
	* giscanner/girwriter.py: Write out new Parameter fields.

	* girepository/girnode.h (GIrNodeParam): Added fields scope, 
	closure and destroy.
	* girepository/gtypelib.h (ArgBlob): Ditto.
	* girepository/girparser.c (start_parameter): Handle new fields.

	* girepository/girmodule.c (g_ir_module_build_typelib): Adjust
	arg_blob_size, bump major version due to this change.
	* girepository/girnode.c (g_ir_node_get_full_size_internal)
	(g_ir_node_build_typelib)
	* girepository/gtypelib.c (g_typelib_check_sanity): ArgBlob size
	adjustments.
	(g_ir_node_build_typelib): Fill in new ArgBlob flags from param. 

	* girepository/girepository.h (GIScope): New enumeration, listing
	the different possible scopes for callbacks.

	* girepository/ginfo.c (g_arg_info_get_scope)
	(g_arg_info_get_closure, g_arg_info_get_destroy): Accessors for
	callback-related argument indices (callback scope, closure for a
	callback, destroy notification for a callback).

	* tests/scanner/: Added testcases for new features.

svn path=/trunk/; revision=998
2009-01-03 13:44:42 +00:00
Johan Bilien
bb9820839a Bug 563998 – Cache the GIBaseInfo for GTypes
2008-12-10  Johan Bilien  <jobi@via.ecp.fr>

	Bug 563998 – Cache the GIBaseInfo for GTypes

	* girepository/girepository.c (g_irepository_find_by_gtype):
	add a cache of GType -> GIBaseInfo.


svn path=/trunk/; revision=991
2008-12-10 17:53:09 +00:00
Colin Walters
9c62e9fc6e Fix memory leak; unref type info we created, not field info
We expect callers to own the FieldInfo, we should not unref it.  However
we should unref the type info we accessed.

svn path=/trunk/; revision=981
2008-12-01 17:05:37 +00:00
Colin Walters
74e22b307c Bug 559705 – Missing association between static methods and classes
2008-11-25  Colin Walters  <walters@verbum.org>

        Bug 559705 – Missing association between static methods and classes

        * docs/typelib-format.txt:
        * girepository/ginfo.c (g_function_info_get_flags):
        * girepository/girmodule.c (g_ir_module_build_typelib):
        * girepository/girnode.c (g_ir_node_get_size),
        (g_ir_node_build_typelib):
        * girepository/girparser.c (start_function):
        * girepository/gtypelib.c (g_typelib_check_sanity),
        (validate_header), (validate_function_blob):
        * girepository/gtypelib.h:
        * giscanner/ast.py:
        * giscanner/girwriter.py:
        * giscanner/glibtransformer.py:
        * tests/scanner/foo-1.0-expected.gir:
        * tests/scanner/foo-1.0-expected.tgir:
        * tests/scanner/foo.h:


svn path=/trunk/; revision=972
2008-11-25 22:29:20 +00:00
Colin Walters
e8718f0250 Remove debug print
svn path=/trunk/; revision=971
2008-11-25 21:48:38 +00:00
Colin Walters
a573a1c741 Bug 561137 - support multiple repositories
This change makes us stop calling g_irepository_get_default inside ginfo.c,
which won't work for non-default repositories.

Change GIBaseInfo to not only keep track of its source repository,
we hold a reference.  This makes memmgt much clearer.

svn path=/trunk/; revision=970
2008-11-25 21:48:34 +00:00
Johan Dahlin
d8cb1e0d2c Remove a warning, be less verbose on error on fundamental types.
2008-11-24  Johan Dahlin  <jdahlin@async.com.br>

	* girepository/gdump.c (dump_type): Remove a warning,
	be less verbose on error on fundamental types.


svn path=/trunk/; revision=963
2008-11-24 16:22:16 +00:00
Colin Walters
52072b6bbf Use sizeof() instead of hard-coding struct sizes
svn path=/trunk/; revision=946
2008-11-18 18:42:36 +00:00
Colin Walters
d4d832bf9a Add a comment about keeping hardcoded numbers in g_typelib_check_sanity
svn path=/trunk/; revision=945
2008-11-18 18:42:32 +00:00
Owen Taylor
05d5158001 Add "storage type" to the typelib data for enums
In order to set and get enum and flag fields in structures, we need
to know the integral type that the enumeration is stored as. We are already
computing that at compile time in order to compute struct offsets, so the
easiest thing to do is to save that in the typelib.

* docs/typelib-format.txt girepository/girnode.[ch] girepository/giroffsets.c
girepository/gtypelib.h: Add 'storage_type' to the typelib format for EnumBlob
and compute and save it at compile time.

* girepository/girepository.h girepository/ginfo.c:
Add g_enum_info_get_storage_type().

* girepository/gfield.c: Implement reading and writing enum and flags fields
based on the storage type.

http://bugzilla.gnome.org/show_bug.cgi?id=561296

svn path=/trunk/; revision=944
2008-11-18 12:29:10 +00:00
Colin Walters
e6cf04484d Ensure we always call init_globals
svn path=/trunk/; revision=938
2008-11-17 00:49:58 +00:00
Colin Walters
b87284dac2 g_irepository_get_default is (transfer none)
svn path=/trunk/; revision=937
2008-11-17 00:39:46 +00:00
Colin Walters
6c74aba6b6 Bug 559706 - Interface prerequisites
svn path=/trunk/; revision=936
2008-11-17 00:27:46 +00:00
Colin Walters
44b1fde2db Add test for interface prereq
svn path=/trunk/; revision=935
2008-11-17 00:27:44 +00:00
Colin Walters
7916f49e55 Bug 559706 - interface prequisites
svn path=/trunk/; revision=932
2008-11-17 00:27:37 +00:00
Owen Taylor
c10269cf2d Respect is_pointer in serialize_type()
Add a '*' to the serialization for the cases where we set is_pointer
in the type blob we write out depending on node->is_pointer. Don't
add the '*' in the cases where is_pointer is set or not set in a
fixed fashion.

http://bugzilla.gnome.org/show_bug.cgi?id=561087

svn path=/trunk/; revision=931
2008-11-16 21:20:26 +00:00
Owen Taylor
6cb96533b9 Bug 560825 – Add size and alignment to typelib
Include the size and alignment of structures and unions in the typelib,
and add getter methods to retrieve them from GIStructInfo/GIUnionInfo.

* docs/typelib-format.txt girepository/gtypelib.h girepository/girnode.c
girepository/girmodule.c girepository/gtypelib.c: Add size and alignment
to StructBlob and UnionBlob.

* girepository/ginfo.c girepository/girepository.h:
Add g_[struct|union]_get[size|alignment]().

* test/offsets/gen-gitestoffsets: Test overall structure size and alignment.

svn path=/trunk/; revision=930
2008-11-16 21:15:54 +00:00
Owen Taylor
c7ae662dbe Bug 552371 – implement struct field get/set
Add convenience functions g_field_info_set_field() and
g_field_info_get_field() to set and get fields based on the offsets
in GIFieldInfo.

svn path=/trunk/; revision=929
2008-11-16 21:14:19 +00:00
Colin Walters
5a1f29d1c9 Bug 560241 - Out-arguments should not be marked as being pointers in all cases
svn path=/trunk/; revision=928
2008-11-16 20:58:35 +00:00
Colin Walters
02020aeb20 Bug 557788 - Return types for constructors in generated typelib bogus
svn path=/trunk/; revision=920
2008-11-13 22:56:15 +00:00
Owen Taylor
3b0bf76d21 girepository/girffi.c: Fix "Unexpected time for time_t" message.
svn path=/trunk/; revision=919
2008-11-13 21:38:42 +00:00
Colin Walters
fd1fe6c0b6 Remove processing msg
svn path=/trunk/; revision=915
2008-11-13 20:21:05 +00:00
Colin Walters
a610d8cbb4 Add new files from last commit
svn path=/trunk/; revision=913
2008-11-13 20:13:39 +00:00
Colin Walters
1ffeeab3d4 g_irepository_dump implementation
svn path=/trunk/; revision=911
2008-11-13 19:57:09 +00:00
Owen Taylor
7fa1ffa6e7 Bug 560419 – Cache includes when parsing
Keep track of all modules parsed within a GIrParser, and when a
module is referenced a second time, use the existing parsed copy
instead of reparsing.

svn path=/trunk/; revision=906
2008-11-12 17:17:15 +00:00
Owen Taylor
9a36a18939 Fix management of ParseContext.includes_modules (#560419)
Fix some trivial bugs in managing the list of include modules.
(Add to module's list twice, not initialized to NULL, not freed.)

svn path=/trunk/; revision=905
2008-11-12 17:17:08 +00:00
Owen Taylor
b1c6e64049 Keep aliases and disguised_structures local to each module (#560419)
When parsing, keep keep a separate hash tables of aliases and
'disguised' flags for each module, and store that on the module.

After parsing an include merge the aliases/disguised flags to the
including module.

Remove 'prefix_aliases' flag and always prefix aliases/disguised
structure types when parsing; this simplifies the code considerably.

svn path=/trunk/; revision=904
2008-11-12 17:17:01 +00:00
Owen Taylor
102e08428b Only allow one <namespace/> element per <repository/> (#560419)
The logic in girparser.c didn't work very well if there were multiple
<namespace/> nodes within a single <repository/> (context->namespace
was always the overall filename and not the the name specified in the
<namespace/> element for one thing; this would cause aliases to
be mis-prefixed in include modules.) Also check that the "name" in
the <namespace/> node matches the filename.

svn path=/trunk/; revision=902
2008-11-12 17:16:49 +00:00
Owen Taylor
0faf142d0a Add a GirParser object to hold the state of a compilation
Add a toplevel GirParser object to hold state that is global across
a compilation. Currently just holds the include path, but will
eventually also keep a cached list of parsed modules.

svn path=/trunk/; revision=901
2008-11-12 17:16:42 +00:00
Tommi Komulainen
092901f3ab Fix minor memory leak.
2008-11-12  Tommi Komulainen  <tommi.komulainen@iki.fi>

	* girepository/girepository.c (find_namespace_latest): Fix
	minor memory leak.

svn path=/trunk/; revision=899
2008-11-12 14:42:13 +00:00
Johan Dahlin
afe696cafd Change the element type from utf8 to filename Special case filename
2008-11-12  Johan Dahlin  <jdahlin@async.com.br>

        * girepository/girepository.c:
        Change the element type from utf8 to filename
        * girepository/girnode.c (g_ir_node_build_typelib):
        Special case filename equally to utf8 here.


svn path=/trunk/; revision=895
2008-11-12 12:59:01 +00:00
Johan Dahlin
bc1f9c5bbb Add a g_irepository_get_search_path, so we can access the search paths
2008-11-12  Johan Dahlin  <jdahlin@async.com.br>

        * girepository/girepository.c (g_irepository_get_search_path):
        * girepository/girepository.h:
        Add a g_irepository_get_search_path, so we can access the search
        paths from runtime.


svn path=/trunk/; revision=893
2008-11-12 12:40:34 +00:00
Johan Bilien
7bada628b9 Bug 560474 – g-ir-compiler crashes when compiling the glib gir
2008-11-12  Johan Bilien  <jobi@via.ecp.fr>

	Bug 560474 – g-ir-compiler crashes when compiling the glib gir

	* girepository/girparser.c: avoid freeing an uninitialized pointer


svn path=/trunk/; revision=891
2008-11-12 12:12:04 +00:00
Owen Taylor
744f3a3004 Bug 560404 – Prefix types when resolving aliases in included modules
* girepository/girparser.c: When resolving aliases in an included
module, prefix types before looking them up.

svn path=/trunk/; revision=889
2008-11-11 22:02:37 +00:00