Commit Graph

323 Commits

Author SHA1 Message Date
Colin Walters
7299c89fc9 Bug 557383 - Virtual method support
Broadly speaking, this change adds the concept of <vfunc> to the .gir.
The typelib already had most of the infrastructure for virtual functions,
though there is one API addition.

The scanner assumes that any class callback slot that doesn't match
a signal name is a virtual.  In the .gir, we write out *both* the <method>
wrapper and a <vfunc>.  If we can determine an association between
them (based on the names matching, or a new Virtual: annotation),
then we notate that in the .gir.

The typelib gains an association from the vfunc to the function, if
it exists.  This will be useful for bindings since they already know
how to consume FunctionInfo.
2009-03-05 15:52:12 -05:00
Colin Walters
cd845500a5 Bug 571548 - Generic attributes
We now support an extensible mechanism where arbitrary key-value
pairs may be associated with almost all items, including objects,
methods, and properties.

These attributes appear in both the .gir and the .typelib.
2009-03-03 17:26:37 -05:00
Colin Walters
86587133cd Add a parent parmeter to g_ir_node_build_typelib
This will be useful for later changes which need to inspect the parent.
2009-02-27 19:12:24 -05:00
Colin Walters
9dbb0bf80f Bug 572434 - Associate interfaces with their C structures
Similar to GObject class structs, we pair up GInterfaces with
their C structures.

Also, move some GLib-specific things into glibast.py, and make
the naming more generic.
2009-02-25 17:31:49 -05:00
Johan Bilien
f13354f9ea Bug 572965 – Allow generic marshaller to be called without parameters
girepository/ginvoke.c: handle the case where n_param_values == 0.
tests/invoke/genericmarshaller.c: add a test case for this.
2009-02-24 15:22:59 +00:00
Colin Walters
86c1c58917 typelib building: Compress 5 arguments for g_ir_node_build_typelib
This makes it easier to add more over time without changing lots
of unrelated code.
2009-02-20 11:05:53 -05:00
Colin Walters
9a467b6cd8 Further cleanup for commented-out Union discriminator handling 2009-02-19 11:18:48 -05:00
Colin Walters
865ac8e510 Fix bad merge introduced in commit b006d50 2009-02-19 09:56:20 -05:00
Colin Walters
361de29ba0 Bug 571373 - Add padding to typelib objects
Expand various typelib objects to ensure we have at least 16 bits
left for each one to add another string indirection or directory offset,
and also that we have at least a few bits for more flags.
2009-02-18 21:54:04 -05:00
Colin Walters
8abbc0b2f9 Bug 571373 - Remove hardcoded sizes/offsets in girnode.c
Where appropriate we now use G_STRUCT_OFFSET and sizeof()
instead of hardcoded integers.  Add comments for some special
cases.
2009-02-18 21:54:03 -05:00
Colin Walters
b4d4ca5d38 Bug 571373 - Remove hardcoded offsets in ginfo.c
In a few places we had hardcoded sizes for accessing structure members
and computing into variable size arrays.  Remove those.
2009-02-18 21:54:03 -05:00
Colin Walters
83c0d9b93b Bug 571373 - Consistently use sizeof () inside gtypelib and girmodule
This not only makes it easier to change these structures, it becomes
clearer exactly what each magic number is just for reference.
2009-02-18 21:54:03 -05:00
Colin Walters
ff6c10e53c Bug 571373 - Move typelib docs from typelib-format.txt into girepository.h
typelib-format.txt was growing out of date; a good solution to this is
to move it closer to the code it's documenting.  By doing this we also
gain the ability to use gtk-doc on it.
2009-02-18 21:53:59 -05:00
Colin Walters
3333e4ed9e Merge branch 'master' of ssh://walters@git.gnome.org/git/gobject-introspection 2009-02-13 11:25:23 -05:00
Robert Carr
cd46d2fa0b Fix build 2009-02-12 09:51:16 -05:00
Johan Dahlin
fe8c6d34c4 Add gtk-doc support 2009-02-12 01:32:25 -02:00
Colin Walters
0a74fdfec0 Bug 567906 - Put pkg-config dependencies in .gir files
When generating a .gir file, we now first parse all of our .gir includes
to pick up their <package> headers.  Then, we merge that with the set of
--pkg arguments passed to us, run pkg-config to gather the arguments,
and finally save the merged pkg-config list to our new .gir file.

This is useful for software which needs to map from .gir to pkg-config
in a programmatic way.
2009-02-11 15:03:16 -05:00
Colin Walters
97a2e7f5fc Bug 571248 - Ignore unknown elements in girparser
We want the gir to be extensible.

svn path=/trunk/; revision=1096
2009-02-11 00:08:49 +00:00
Rober Carr
3490a56ba4 Bug 569633 – Typelib compiler fails with vararg callbacks
2009-02-10  Rober Carr <carrr@rpi.edu>

	Bug 569633 – Typelib compiler fails with vararg callbacks

	* girepository/girparser.c: Also filter out callback functions
	which take vararg arguments.

svn path=/trunk/; revision=1095
2009-02-10 23:34:04 +00:00
Johan Dahlin
8c2ef112b7 Rename namespace to namespace_ to make the header compilable with a C++ compiler
svn path=/trunk/; revision=1094
2009-02-10 21:01:08 +00:00
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