Glib-Object-Introspection
view release on metacpan or search on metacpan
GObjectIntrospection.xs view on Meta::CPAN
const gchar *package
PREINIT:
GIRepository *repository;
gint number, i;
AV *constants;
AV *global_functions;
HV *namespaced_functions;
HV *fields;
AV *interfaces;
AV *objects_with_vfuncs;
PPCODE:
repository = g_irepository_get_default ();
constants = newAV ();
global_functions = newAV ();
namespaced_functions = newHV ();
fields = newHV ();
interfaces = newAV ();
objects_with_vfuncs = newAV ();
number = g_irepository_get_n_infos (repository, namespace);
GObjectIntrospection.xs view on Meta::CPAN
_find_non_perl_parents (class, basename, object_name, target_package)
const gchar *basename
const gchar *object_name
const gchar *target_package
PREINIT:
GIRepository *repository;
GIObjectInfo *info;
GType gtype, object_gtype;
/* FIXME: we should export gperl_type_reg_quark from Glib */
GQuark reg_quark = g_quark_from_static_string ("__gperl_type_reg");
PPCODE:
repository = g_irepository_get_default ();
info = g_irepository_find_by_name (repository, basename, object_name);
g_assert (info && GI_IS_OBJECT_INFO (info));
gtype = gperl_object_type_from_package (target_package);
object_gtype = get_gtype (info);
/* find all non-Perl parents up to and including the object type */
while ((gtype = g_type_parent (gtype))) {
if (!g_type_get_qdata (gtype, reg_quark)) {
const gchar *package = gperl_object_package_from_type (gtype);
XPUSHs (sv_2mortal (newSVpv (package, 0)));
GObjectIntrospection.xs view on Meta::CPAN
void
_find_vfuncs_with_implementation (class, object_package, target_package)
const gchar *object_package
const gchar *target_package
PREINIT:
GIRepository *repository;
GType object_gtype, target_gtype;
gpointer object_klass, target_klass;
GIObjectInfo *object_info;
gint n_vfuncs, i;
PPCODE:
repository = g_irepository_get_default ();
target_gtype = gperl_object_type_from_package (target_package);
object_gtype = gperl_object_type_from_package (object_package);
g_assert (target_gtype && object_gtype);
target_klass = g_type_class_peek (target_gtype);
object_klass = g_type_class_peek (object_gtype);
g_assert (target_klass && object_klass);
object_info = g_irepository_find_by_gtype (repository, object_gtype);
g_assert (object_info && GI_IS_OBJECT_INFO (object_info));
n_vfuncs = g_object_info_get_n_vfuncs (object_info);
GObjectIntrospection.xs view on Meta::CPAN
const gchar *target_package
PREINIT:
UV internal_stack_offset = 4;
GIRepository *repository;
GIObjectInfo *info;
GType gtype;
gpointer klass;
GIVFuncInfo *vfunc_info;
gint field_offset;
gpointer func_pointer;
PPCODE:
dwarn ("%s::%s, target = %s\n",
vfunc_package, vfunc_name, target_package);
gtype = gperl_object_type_from_package (target_package);
klass = g_type_class_peek (gtype);
g_assert (klass);
repository = g_irepository_get_default ();
info = g_irepository_find_by_gtype (
repository, gperl_object_type_from_package (vfunc_package));
g_assert (info && GI_IS_OBJECT_INFO (info));
vfunc_info = g_object_info_find_vfunc (info, vfunc_name);
GObjectIntrospection.xs view on Meta::CPAN
invoke (class, basename, namespace, function, ...)
const gchar *basename
const gchar_ornull *namespace
const gchar *function
PREINIT:
UV internal_stack_offset = 4;
GIRepository *repository;
GIFunctionInfo *info;
gpointer func_pointer = NULL;
const gchar *symbol = NULL;
PPCODE:
repository = g_irepository_get_default ();
info = get_function_info (repository, basename, namespace, function);
symbol = g_function_info_get_symbol (info);
if (!g_typelib_symbol (g_base_info_get_typelib((GIBaseInfo *) info),
symbol, &func_pointer))
{
g_base_info_unref ((GIBaseInfo *) info);
ccroak ("Could not locate symbol %s", symbol);
}
invoke_c_code (info, func_pointer,
GObjectIntrospection.xs view on Meta::CPAN
# --------------------------------------------------------------------------- #
MODULE = Glib::Object::Introspection PACKAGE = Glib::Object::Introspection::_FuncWrapper
void
_invoke (SV *code, ...)
PREINIT:
GPerlI11nCCallbackInfo *wrapper;
UV internal_stack_offset = 1;
PPCODE:
wrapper = INT2PTR (GPerlI11nCCallbackInfo*, SvIV (SvRV (code)));
if (!wrapper || !wrapper->func)
ccroak ("invalid reference encountered");
invoke_c_code (wrapper->interface, wrapper->func,
sp, ax, mark, items,
internal_stack_offset,
NULL, NULL, NULL);
/* SPAGAIN since invoke_c_code probably modified the stack
* pointer. so we need to make sure that our local variable
* 'sp' is correct before the implicit PUTBACK happens. */
( run in 0.521 second using v1.01-cache-2.11-cpan-5511b514fd6 )