# Python module
pkgpyexecdir = $(pkglibdir)/giscanner
pkgpyexec_LTLIBRARIES = _giscanner.la
-pkgpyexec_PYTHON = \
+pkgpyexec_PYTHON = \
giscanner/__init__.py \
giscanner/annotationmain.py \
giscanner/annotationparser.py \
giscanner/ast.py \
giscanner/cachestore.py \
giscanner/codegen.py \
- giscanner/docmain.py \
+ giscanner/docmain.py \
giscanner/docwriter.py \
giscanner/dumper.py \
giscanner/introspectablepass.py \
giscanner/girwriter.py \
giscanner/gdumpparser.py \
giscanner/libtoolimporter.py \
- giscanner/odict.py \
giscanner/maintransformer.py \
giscanner/message.py \
giscanner/shlibs.py \
giscanner/utils.py \
giscanner/xmlwriter.py
+collectionsdir = $(pkgpyexecdir)/collections
+collections_PYTHON = \
+ giscanner/collections/__init__.py \
+ giscanner/collections/ordereddict.py
+
templatedir = $(pkglibdir)
nobase_dist_template_DATA = \
giscanner/doctemplates/base.tmpl \
SUBDIRS = . docs tests build
DIST_SUBDIRS = m4 $(SUBDIRS)
-DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
+DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-doctool
man_MANS += \
docs/g-ir-compiler.1 \
misc/pep8.py \
misc/pyflakes.py
+# Default pep8.py --exclude + emacs backup files
+PEP8_EXCLUDES=--exclude='.svn,CVS,.bzr,.hg,.git,__pycache__,.\#*'
+
check-local:
gtester --verbose $(GTESTER_PROGS)
@echo "TEST: PEP-8 INQUISITION"
- @find $(top_srcdir)/giscanner -name \*.py | sort | uniq | xargs $(PYTHON) $(top_srcdir)/misc/pep8.py --repeat --exclude=config.py
+ @find $(top_srcdir)/giscanner -name \*.py | sort | uniq | xargs \
+ $(PYTHON) $(top_srcdir)/misc/pep8.py --max-line-length=99 --ignore=E128 $(PEP8_EXCLUDES)
+ @find $(top_srcdir)/tests -name \*.py | sort | uniq | xargs \
+ $(PYTHON) $(top_srcdir)/misc/pep8.py --ignore=E127,E501 $(PEP8_EXCLUDES)
@echo "TEST: Annotation pattern programs"
PYTHONPATH="$(top_builddir):$(top_srcdir)" $(PYTHON) $(top_srcdir)/tests/scanner/annotationparser/test_patterns.py
@echo "TEST: GTK-Doc Annotation Parser"
PYTHONPATH="$(top_builddir):$(top_srcdir)" $(PYTHON) $(top_srcdir)/tests/scanner/annotationparser/test_parser.py
- @touch $(top_builddir)/.make-check-passed
check-pyflakes:
@echo " CHECK Pyflakes"
$(srcdir)/gobject-introspection-no-export-1.0.pc.in \
$(srcdir)/config.h.win32.in scannerlexer.c scannerparser.h \
scannerparser.c $(top_srcdir)/build-aux/depcomp \
- $(top_srcdir)/build-aux/ylwrap $(pkgpyexec_PYTHON) \
- $(top_srcdir)/build-aux/py-compile $(dist_make_DATA) \
- $(nobase_dist_template_DATA) $(girepo_HEADERS) AUTHORS COPYING \
- ChangeLog NEWS README TODO build-aux/compile \
- build-aux/config.guess build-aux/config.sub build-aux/depcomp \
- build-aux/install-sh build-aux/missing build-aux/py-compile \
- build-aux/ylwrap build-aux/ltmain.sh \
+ $(top_srcdir)/build-aux/ylwrap $(collections_PYTHON) \
+ $(pkgpyexec_PYTHON) $(top_srcdir)/build-aux/py-compile \
+ $(dist_make_DATA) $(nobase_dist_template_DATA) \
+ $(girepo_HEADERS) AUTHORS COPYING ChangeLog NEWS README TODO \
+ build-aux/compile build-aux/config.guess build-aux/config.sub \
+ build-aux/depcomp build-aux/install-sh build-aux/missing \
+ build-aux/py-compile build-aux/ylwrap build-aux/ltmain.sh \
$(top_srcdir)/build-aux/compile \
$(top_srcdir)/build-aux/config.guess \
$(top_srcdir)/build-aux/config.sub \
}
am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgpyexecdir)" \
"$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" \
- "$(DESTDIR)$(pkgpyexecdir)" "$(DESTDIR)$(man1dir)" \
- "$(DESTDIR)$(makedir)" "$(DESTDIR)$(gdumpdir)" \
- "$(DESTDIR)$(girdir)" "$(DESTDIR)$(m4dir)" \
- "$(DESTDIR)$(templatedir)" "$(DESTDIR)$(pkgconfigdir)" \
- "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(girepodir)"
+ "$(DESTDIR)$(collectionsdir)" "$(DESTDIR)$(pkgpyexecdir)" \
+ "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(makedir)" \
+ "$(DESTDIR)$(gdumpdir)" "$(DESTDIR)$(girdir)" \
+ "$(DESTDIR)$(m4dir)" "$(DESTDIR)$(templatedir)" \
+ "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(typelibsdir)" \
+ "$(DESTDIR)$(girepodir)"
LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) \
$(pkgpyexec_LTLIBRARIES)
am__DEPENDENCIES_1 =
giscanner/ast.py \
giscanner/cachestore.py \
giscanner/codegen.py \
- giscanner/docmain.py \
+ giscanner/docmain.py \
giscanner/docwriter.py \
giscanner/dumper.py \
giscanner/introspectablepass.py \
giscanner/girwriter.py \
giscanner/gdumpparser.py \
giscanner/libtoolimporter.py \
- giscanner/odict.py \
giscanner/maintransformer.py \
giscanner/message.py \
giscanner/shlibs.py \
giscanner/utils.py \
giscanner/xmlwriter.py
+collectionsdir = $(pkgpyexecdir)/collections
+collections_PYTHON = \
+ giscanner/collections/__init__.py \
+ giscanner/collections/ordereddict.py
+
templatedir = $(pkglibdir)
nobase_dist_template_DATA = \
giscanner/doctemplates/base.tmpl \
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
SUBDIRS = . docs tests build
DIST_SUBDIRS = m4 $(SUBDIRS)
-DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
+DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-doctool
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = gobject-introspection-1.0.pc gobject-introspection-no-export-1.0.pc
m4dir = $(datadir)/aclocal
makedir = $(datadir)/gobject-introspection-1.0
dist_make_DATA = Makefile.introspection
+# Default pep8.py --exclude + emacs backup files
+PEP8_EXCLUDES = --exclude='.svn,CVS,.bzr,.hg,.git,__pycache__,.\#*'
+
# Colin's handy Makefile bits for:
# 1) stuffing tarballs with pre-generated scripts from your workstation
# 2) bumping configure.ac version post-release
distclean-libtool:
-rm -f libtool config.lt
+install-collectionsPYTHON: $(collections_PYTHON)
+ @$(NORMAL_INSTALL)
+ @list='$(collections_PYTHON)'; dlist=; list2=; test -n "$(collectionsdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(collectionsdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(collectionsdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \
+ if test -f $$b$$p; then \
+ $(am__strip_dir) \
+ dlist="$$dlist $$f"; \
+ list2="$$list2 $$b$$p"; \
+ else :; fi; \
+ done; \
+ for file in $$list2; do echo $$file; done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(collectionsdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(collectionsdir)" || exit $$?; \
+ done || exit $$?; \
+ if test -n "$$dlist"; then \
+ $(am__py_compile) --destdir "$(DESTDIR)" \
+ --basedir "$(collectionsdir)" $$dlist; \
+ else :; fi
+
+uninstall-collectionsPYTHON:
+ @$(NORMAL_UNINSTALL)
+ @list='$(collections_PYTHON)'; test -n "$(collectionsdir)" || list=; \
+ py_files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$py_files" || exit 0; \
+ dir='$(DESTDIR)$(collectionsdir)'; \
+ pyc_files=`echo "$$py_files" | sed 's|$$|c|'`; \
+ pyo_files=`echo "$$py_files" | sed 's|$$|o|'`; \
+ py_files_pep3147=`echo "$$py_files" | $(am__pep3147_tweak)`; \
+ echo "$$py_files_pep3147";\
+ pyc_files_pep3147=`echo "$$py_files_pep3147" | sed 's|$$|c|'`; \
+ pyo_files_pep3147=`echo "$$py_files_pep3147" | sed 's|$$|o|'`; \
+ st=0; \
+ for files in \
+ "$$py_files" \
+ "$$pyc_files" \
+ "$$pyo_files" \
+ "$$pyc_files_pep3147" \
+ "$$pyo_files_pep3147" \
+ ; do \
+ $(am__uninstall_files_from_dir) || st=$$?; \
+ done; \
+ exit $$st
install-pkgpyexecPYTHON: $(pkgpyexec_PYTHON)
@$(NORMAL_INSTALL)
@list='$(pkgpyexec_PYTHON)'; dlist=; list2=; test -n "$(pkgpyexecdir)" || list=; \
installdirs: installdirs-recursive
installdirs-am:
- for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgpyexecdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgpyexecdir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(makedir)" "$(DESTDIR)$(gdumpdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(m4dir)" "$(DESTDIR)$(templatedir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(girepodir)"; do \
+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgpyexecdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(collectionsdir)" "$(DESTDIR)$(pkgpyexecdir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(makedir)" "$(DESTDIR)$(gdumpdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(m4dir)" "$(DESTDIR)$(templatedir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(girepodir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: $(BUILT_SOURCES)
info-am:
-install-data-am: install-dist_makeDATA install-gdumpDATA \
- install-girDATA install-girepoHEADERS install-m4DATA \
- install-man install-nobase_dist_templateDATA \
+install-data-am: install-collectionsPYTHON install-dist_makeDATA \
+ install-gdumpDATA install-girDATA install-girepoHEADERS \
+ install-m4DATA install-man install-nobase_dist_templateDATA \
install-pkgconfigDATA install-typelibsDATA
install-dvi: install-dvi-recursive
ps-am:
uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \
- uninstall-dist_makeDATA uninstall-gdumpDATA uninstall-girDATA \
- uninstall-girepoHEADERS uninstall-libLTLIBRARIES \
- uninstall-m4DATA uninstall-man \
+ uninstall-collectionsPYTHON uninstall-dist_makeDATA \
+ uninstall-gdumpDATA uninstall-girDATA uninstall-girepoHEADERS \
+ uninstall-libLTLIBRARIES uninstall-m4DATA uninstall-man \
uninstall-nobase_dist_templateDATA uninstall-pkgconfigDATA \
uninstall-pkgpyexecLTLIBRARIES uninstall-pkgpyexecPYTHON \
uninstall-typelibsDATA
distclean-libtool distclean-tags distcleancheck distdir \
distuninstallcheck dvi dvi-am html html-am info info-am \
install install-am install-binPROGRAMS install-binSCRIPTS \
- install-data install-data-am install-dist_makeDATA install-dvi \
- install-dvi-am install-exec install-exec-am install-gdumpDATA \
- install-girDATA install-girepoHEADERS install-html \
- install-html-am install-info install-info-am \
- install-libLTLIBRARIES install-m4DATA install-man install-man1 \
+ install-collectionsPYTHON install-data install-data-am \
+ install-dist_makeDATA install-dvi install-dvi-am install-exec \
+ install-exec-am install-gdumpDATA install-girDATA \
+ install-girepoHEADERS install-html install-html-am \
+ install-info install-info-am install-libLTLIBRARIES \
+ install-m4DATA install-man install-man1 \
install-nobase_dist_templateDATA install-pdf install-pdf-am \
install-pkgconfigDATA install-pkgpyexecLTLIBRARIES \
install-pkgpyexecPYTHON install-ps install-ps-am install-strip \
mostlyclean mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
uninstall-am uninstall-binPROGRAMS uninstall-binSCRIPTS \
- uninstall-dist_makeDATA uninstall-gdumpDATA uninstall-girDATA \
- uninstall-girepoHEADERS uninstall-libLTLIBRARIES \
- uninstall-m4DATA uninstall-man uninstall-man1 \
- uninstall-nobase_dist_templateDATA uninstall-pkgconfigDATA \
- uninstall-pkgpyexecLTLIBRARIES uninstall-pkgpyexecPYTHON \
- uninstall-typelibsDATA
+ uninstall-collectionsPYTHON uninstall-dist_makeDATA \
+ uninstall-gdumpDATA uninstall-girDATA uninstall-girepoHEADERS \
+ uninstall-libLTLIBRARIES uninstall-m4DATA uninstall-man \
+ uninstall-man1 uninstall-nobase_dist_templateDATA \
+ uninstall-pkgconfigDATA uninstall-pkgpyexecLTLIBRARIES \
+ uninstall-pkgpyexecPYTHON uninstall-typelibsDATA
# Make sure the required variables are set, these should under normal
check-local:
gtester --verbose $(GTESTER_PROGS)
@echo "TEST: PEP-8 INQUISITION"
- @find $(top_srcdir)/giscanner -name \*.py | sort | uniq | xargs $(PYTHON) $(top_srcdir)/misc/pep8.py --repeat --exclude=config.py
+ @find $(top_srcdir)/giscanner -name \*.py | sort | uniq | xargs \
+ $(PYTHON) $(top_srcdir)/misc/pep8.py --max-line-length=99 --ignore=E128 $(PEP8_EXCLUDES)
+ @find $(top_srcdir)/tests -name \*.py | sort | uniq | xargs \
+ $(PYTHON) $(top_srcdir)/misc/pep8.py --ignore=E127,E501 $(PEP8_EXCLUDES)
@echo "TEST: Annotation pattern programs"
PYTHONPATH="$(top_builddir):$(top_srcdir)" $(PYTHON) $(top_srcdir)/tests/scanner/annotationparser/test_patterns.py
@echo "TEST: GTK-Doc Annotation Parser"
PYTHONPATH="$(top_builddir):$(top_srcdir)" $(PYTHON) $(top_srcdir)/tests/scanner/annotationparser/test_parser.py
- @touch $(top_builddir)/.make-check-passed
check-pyflakes:
@echo " CHECK Pyflakes"
;;
ppc64) basic_machine=powerpc64-unknown
;;
- ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
ppc64le | powerpc64little | ppc64-le | powerpc64-little)
basic_machine=powerpc64le-unknown
PACKAGE=libtool
VERSION=2.4.2
TIMESTAMP=""
+: ${DD=dd}
package_revision=1.3337
# Be Bourne compatible
## Main. ##
## ----------- ##
+# func_try_sizelim file n
+# try to write at most the first N bytes from FILE to the standard output when
+# possible, otherwise put whole file
+func_try_sizelim ()
+{
+ if test -n "$DD"; then
+ $DD if="$1" bs=$2 count=1 2>/dev/null
+ if test $? -eq 127; then
+ cat "$1" 2>/dev/null
+ fi
+ else
+ cat "$1" 2>/dev/null
+ fi
+}
+
# func_lalib_p file
# True iff FILE is a libtool `.la' library or `.lo' object file.
# This function is only a basic sanity check; it will hardly flush out
func_lalib_p ()
{
test -f "$1" &&
- $SED -e 4q "$1" 2>/dev/null \
+ func_try_sizelim "$1" 4096 | $SED -e 4q 2>/dev/null \
| $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
}
copy ..\..\..\giscanner\girwriter.py $(CopyDir)\lib\gobject-introspection\giscanner
copy ..\..\..\giscanner\gdumpparser.py $(CopyDir)\lib\gobject-introspection\giscanner
copy ..\..\..\giscanner\libtoolimporter.py $(CopyDir)\lib\gobject-introspection\giscanner
-copy ..\..\..\giscanner\odict.py $(CopyDir)\lib\gobject-introspection\giscanner
copy ..\..\..\giscanner\maintransformer.py $(CopyDir)\lib\gobject-introspection\giscanner
copy ..\..\..\giscanner\message.py $(CopyDir)\lib\gobject-introspection\giscanner
copy ..\..\..\giscanner\shlibs.py $(CopyDir)\lib\gobject-introspection\giscanner
copy ..\..\..\giscanner\girwriter.py $(CopyDir)\lib\gobject-introspection\giscanner

copy ..\..\..\giscanner\gdumpparser.py $(CopyDir)\lib\gobject-introspection\giscanner

copy ..\..\..\giscanner\libtoolimporter.py $(CopyDir)\lib\gobject-introspection\giscanner

-copy ..\..\..\giscanner\odict.py $(CopyDir)\lib\gobject-introspection\giscanner

copy ..\..\..\giscanner\maintransformer.py $(CopyDir)\lib\gobject-introspection\giscanner

copy ..\..\..\giscanner\message.py $(CopyDir)\lib\gobject-introspection\giscanner

copy ..\..\..\giscanner\shlibs.py $(CopyDir)\lib\gobject-introspection\giscanner

#define PACKAGE_NAME "gobject-introspection"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "gojbect-introspection 1.36.0"
+#define PACKAGE_STRING "gojbect-introspection 1.37.1"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "gobject-introspection"
#define PACKAGE_URL ""
/* Define to the version of this package. */
-#define PACKAGE_VERSION "1.36.0"
+#define PACKAGE_VERSION "1.37.1"
/* Define to the platform's shared library suffix */
#define SHLIB_SUFFIX ".dll"
#define STDC_HEADERS 1
/* Version number of package */
-#define VERSION "1.36.0"
+#define VERSION "1.37.1"
/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
`char[]'. */
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for gobject-introspection 1.36.0.
+# Generated by GNU Autoconf 2.69 for gobject-introspection 1.37.1.
#
# Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=glib&component=introspection>.
#
# Identity of this package.
PACKAGE_NAME='gobject-introspection'
PACKAGE_TARNAME='gobject-introspection'
-PACKAGE_VERSION='1.36.0'
-PACKAGE_STRING='gobject-introspection 1.36.0'
+PACKAGE_VERSION='1.37.1'
+PACKAGE_STRING='gobject-introspection 1.37.1'
PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=glib&component=introspection'
PACKAGE_URL=''
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures gobject-introspection 1.36.0 to adapt to many kinds of systems.
+\`configure' configures gobject-introspection 1.37.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of gobject-introspection 1.36.0:";;
+ short | recursive ) echo "Configuration of gobject-introspection 1.37.1:";;
esac
cat <<\_ACEOF
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-gobject-introspection configure 1.36.0
+gobject-introspection configure 1.37.1
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by gobject-introspection $as_me 1.36.0, which was
+It was created by gobject-introspection $as_me 1.37.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
# Define the identity of the package.
PACKAGE='gobject-introspection'
- VERSION='1.36.0'
+ VERSION='1.37.1'
cat >>confdefs.h <<_ACEOF
if test -n "$PYTHON"; then
# If the user set $PYTHON, use it and don't search something else.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON version is >= 2.5" >&5
-$as_echo_n "checking whether $PYTHON version is >= 2.5... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON version is >= 2.6" >&5
+$as_echo_n "checking whether $PYTHON version is >= 2.6... " >&6; }
prog="import sys
# split strings by '.' and convert to numeric. Append some zeros
# because we need at least 4 digits for the hex conversion.
# map returns an iterator in Python 3.0 and a list in 2.x
-minver = list(map(int, '2.5'.split('.'))) + [0, 0, 0]
+minver = list(map(int, '2.6'.split('.'))) + [0, 0, 0]
minverhex = 0
# xrange is not present in Python 3.0 and range returns an iterator
for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i]
else
# Otherwise, try each interpreter until we find one that satisfies
# VERSION.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a Python interpreter with version >= 2.5" >&5
-$as_echo_n "checking for a Python interpreter with version >= 2.5... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a Python interpreter with version >= 2.6" >&5
+$as_echo_n "checking for a Python interpreter with version >= 2.6... " >&6; }
if ${am_cv_pathless_PYTHON+:} false; then :
$as_echo_n "(cached) " >&6
else
# split strings by '.' and convert to numeric. Append some zeros
# because we need at least 4 digits for the hex conversion.
# map returns an iterator in Python 3.0 and a list in 2.x
-minver = list(map(int, '2.5'.split('.'))) + [0, 0, 0]
+minver = list(map(int, '2.6'.split('.'))) + [0, 0, 0]
minverhex = 0
# xrange is not present in Python 3.0 and range returns an iterator
for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i]
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libraries required to link against libpython" >&5
$as_echo_n "checking for libraries required to link against libpython... " >&6; }
-if test "x$PYTHON_LIBS" == x; then
+if test "x$PYTHON_LIBS" = x; then
PYTHON_LIBS=`$PYTHON-config --ldflags --libs`
fi
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by gobject-introspection $as_me 1.36.0, which was
+This file was extended by gobject-introspection $as_me 1.37.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-gobject-introspection config.status 1.36.0
+gobject-introspection config.status 1.37.1
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi
-
-echo "
- gobject-introspection $VERSION
- ===============
-
- tests: ${enable_tests}
-"
dnl the gi version number
m4_define(gi_major_version, 1)
-m4_define(gi_minor_version, 36)
-m4_define(gi_micro_version, 0)
+m4_define(gi_minor_version, 37)
+m4_define(gi_micro_version, 1)
m4_define(gi_version, gi_major_version.gi_minor_version.gi_micro_version)
AC_PREREQ([2.63])
AC_CHECK_FUNCS([backtrace backtrace_symbols])
# Python
-AM_PATH_PYTHON([2.5])
+AM_PATH_PYTHON([2.6])
case "$host" in
*-*-mingw*)
# Change backslashes to forward slashes in pyexecdir to avoid
build/win32/vs9/Makefile
build/win32/vs10/Makefile])
AC_OUTPUT
-
-echo "
- gobject-introspection $VERSION
- ===============
-
- tests: ${enable_tests}
-"
/**
+ * GBytesIcon:bytes:
+ *
+ * The bytes containing the icon.
+ */
+
+
+/**
* GCancellable::cancelled:
* @cancellable: a #GCancellable.
*
/**
+ * GProxyAddressEnumerator:default-port:
+ *
+ * The default port to use if #GProxyAddressEnumerator:uri does not
+ * specify one.
+ *
+ * Since: 2.38
+ */
+
+
+/**
* GProxyAddressEnumerator:proxy-resolver:
*
* The proxy resolver to use.
/**
+ * SECTION:_GFreedesktopDBus
+ * @title: _GFreedesktopDBus
+ * @short_description: Generated C code for the org.freedesktop.DBus D-Bus interface
+ *
+ * This section contains code for working with the <link linkend="gdbus-interface-org-freedesktop-DBus.top_of_page">org.freedesktop.DBus</link> D-Bus interface in C.
+ */
+
+
+/**
* SECTION:extensionpoints
* @short_description: Extension Points
* @include: gio.h
/**
+ * SECTION:gbytesicon
+ * @short_description: An icon stored in memory as a #GBytes
+ * @include: gio/gio.h
+ * @see_also: #GIcon, #GLoadableIcon, #GBytes
+ *
+ * #GBytesIcon specifies an image held in memory in a common format (usually
+ * png) to be used as icon.
+ *
+ * Since: 2.38
+ */
+
+
+/**
* SECTION:gcancellable
* @short_description: Thread-safe Operation Cancellation Stack
* @include: gio/gio.h
*
* To check if two #GIcons are equal, see g_icon_equal().
*
- * For serializing a #GIcon, use g_icon_to_string() and
- * g_icon_new_for_string().
+ * For serializing a #GIcon, use g_icon_serialize() and
+ * g_icon_deserialize().
+ *
+ * If you want to consume #GIcon (for example, in a toolkit) you must
+ * be prepared to handle at least the three following cases:
+ * #GLoadableIcon, #GThemedIcon and #GEmblemedIcon. It may also make
+ * sense to have fast-paths for other cases (like handling #GdkPixbuf
+ * directly, for example) but all compliant #GIcon implementations
+ * outside of GIO must implement #GLoadableIcon.
*
* If your application or library provides one or more #GIcon
- * implementations you need to ensure that each #GType is registered
- * with the type system prior to calling g_icon_new_for_string().
+ * implementations you need to ensure that your new implementation also
+ * implements #GLoadableIcon. Additionally, you must provide an
+ * implementation of g_icon_serialize() that gives a result that is
+ * understood by g_icon_deserialize(), yielding one of the built-in icon
+ * types.
*/
* GSocketAddress *sockaddr;
* GError *conn_error = NULL;
*
- * addr = g_network_address_new ("www.gnome.org", 80);
+ * addr = g_network_address_new (hostname, port);
* enumerator = g_socket_connectable_enumerate (addr);
* g_object_unref (addr);
*
* @include: gio/gio.h
*
* #GTlsFileDatabase is implemented by #GTlsDatabase objects which load
- * their certificate information from a file. It is in interface which
+ * their certificate information from a file. It is an interface which
* TLS library specific subtypes implement.
*
* Since: 2.30
/**
- * SECTION:gunixsocketaddress
- * @short_description: UNIX GSocketAddress
- * @include: gio/gunixsocketaddress.h
+ * SECTION:gunixsocketaddress
+ * @short_description: UNIX GSocketAddress
+ * @include: gio/gunixsocketaddress.h
+ *
+ * Support for UNIX-domain (also known as local) sockets.
+ *
+ * UNIX domain sockets are generally visible in the filesystem.
+ * However, some systems support abstract socket names which are not
+ * visible in the filesystem and not affected by the filesystem
+ * permissions, visibility, etc. Currently this is only supported
+ * under Linux. If you attempt to use abstract sockets on other
+ * systems, function calls may return %G_IO_ERROR_NOT_SUPPORTED
+ * errors. You can use g_unix_socket_address_abstract_names_supported()
+ * to see if abstract names are supported.
+ *
+ * Note that <filename><gio/gunixsocketaddress.h></filename> belongs to
+ * the UNIX-specific GIO interfaces, thus you have to use the
+ * <filename>gio-unix-2.0.pc</filename> pkg-config file when using it.
+ */
+
+
+/**
+ * SECTION:gvfs
+ * @short_description: Virtual File System
+ * @include: gio/gio.h
+ *
+ * Entry point for using GIO functionality.
+ */
+
+
+/**
+ * SECTION:gvolume
+ * @short_description: Volume management
+ * @include: gio/gio.h
+ *
+ * The #GVolume interface represents user-visible objects that can be
+ * mounted. Note, when porting from GnomeVFS, #GVolume is the moral
+ * equivalent of #GnomeVFSDrive.
+ *
+ * Mounting a #GVolume instance is an asynchronous operation. For more
+ * information about asynchronous operations, see #GAsyncResult and
+ * #GTask. To mount a #GVolume, first call g_volume_mount() with (at
+ * least) the #GVolume instance, optionally a #GMountOperation object
+ * and a #GAsyncReadyCallback.
+ *
+ * Typically, one will only want to pass %NULL for the
+ * #GMountOperation if automounting all volumes when a desktop session
+ * starts since it's not desirable to put up a lot of dialogs asking
+ * for credentials.
+ *
+ * The callback will be fired when the operation has resolved (either
+ * with success or failure), and a #GAsyncReady structure will be
+ * passed to the callback. That callback should then call
+ * g_volume_mount_finish() with the #GVolume instance and the
+ * #GAsyncReady data to see if the operation was completed
+ * successfully. If an @error is present when g_volume_mount_finish()
+ * is called, then it will be filled with any error information.
+ *
+ * <para id="volume-identifier">
+ * It is sometimes necessary to directly access the underlying
+ * operating system object behind a volume (e.g. for passing a volume
+ * to an application via the commandline). For this purpose, GIO
+ * allows to obtain an 'identifier' for the volume. There can be
+ * different kinds of identifiers, such as Hal UDIs, filesystem labels,
+ * traditional Unix devices (e.g. <filename>/dev/sda2</filename>),
+ * uuids. GIO uses predefind strings as names for the different kinds
+ * of identifiers: #G_VOLUME_IDENTIFIER_KIND_HAL_UDI,
+ * #G_VOLUME_IDENTIFIER_KIND_LABEL, etc. Use g_volume_get_identifier()
+ * to obtain an identifier for a volume.
+ * </para>
+ *
+ * Note that #G_VOLUME_IDENTIFIER_KIND_HAL_UDI will only be available
+ * when the gvfs hal volume monitor is in use. Other volume monitors
+ * will generally be able to provide the #G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE
+ * identifier, which can be used to obtain a hal device by means of
+ * libhal_manager_find_device_string_match().
+ */
+
+
+/**
+ * SECTION:gvolumemonitor
+ * @short_description: Volume Monitor
+ * @include: gio/gio.h
+ * @see_also: #GFileMonitor
+ *
+ * #GVolumeMonitor is for listing the user interesting devices and volumes
+ * on the computer. In other words, what a file selector or file manager
+ * would show in a sidebar.
+ *
+ * #GVolumeMonitor is not <link
+ * linkend="g-main-context-push-thread-default">thread-default-context
+ * aware</link>, and so should not be used other than from the main
+ * thread, with no thread-default-context active.
+ */
+
+
+/**
+ * SECTION:gwin32inputstream
+ * @short_description: Streaming input operations for Windows file handles
+ * @include: gio/gwin32inputstream.h
+ * @see_also: #GInputStream
+ *
+ * #GWin32InputStream implements #GInputStream for reading from a
+ * Windows file handle.
+ *
+ * Note that <filename><gio/gwin32inputstream.h></filename> belongs
+ * to the Windows-specific GIO interfaces, thus you have to use the
+ * <filename>gio-windows-2.0.pc</filename> pkg-config file when using it.
+ */
+
+
+/**
+ * SECTION:gwin32outputstream
+ * @short_description: Streaming output operations for Windows file handles
+ * @include: gio/gwin32outputstream.h
+ * @see_also: #GOutputStream
+ *
+ * #GWin32OutputStream implements #GOutputStream for writing to a
+ * Windows file handle.
+ *
+ * Note that <filename><gio/gwin32outputstream.h></filename> belongs
+ * to the Windows-specific GIO interfaces, thus you have to use the
+ * <filename>gio-windows-2.0.pc</filename> pkg-config file when using it.
+ */
+
+
+/**
+ * SECTION:gzcompressor
+ * @short_description: Zlib compressor
+ * @include: gio/gio.h
+ *
+ * #GZlibCompressor is an implementation of #GConverter that
+ * compresses data using zlib.
+ */
+
+
+/**
+ * SECTION:gzdecompressor
+ * @short_description: Zlib decompressor
+ * @include: gio/gio.h
+ *
+ * #GZlibDecompressor is an implementation of #GConverter that
+ * decompresses data compressed with zlib.
+ */
+
+
+/**
+ * _GFreedesktopDBus:
+ *
+ * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-freedesktop-DBus.top_of_page">org.freedesktop.DBus</link>.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-add-match:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_rule: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.AddMatch">AddMatch()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_add_match() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-get-connection-selinux-security-context:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_name: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionSELinuxSecurityContext">GetConnectionSELinuxSecurityContext()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_get_connection_selinux_security_context() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-get-connection-unix-process-id:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_name: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionUnixProcessID">GetConnectionUnixProcessID()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_get_connection_unix_process_id() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-get-connection-unix-user:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_name: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionUnixUser">GetConnectionUnixUser()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_get_connection_unix_user() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-get-id:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.GetId">GetId()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_get_id() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-get-name-owner:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_name: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.GetNameOwner">GetNameOwner()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_get_name_owner() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-hello:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.Hello">Hello()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_hello() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-list-activatable-names:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.ListActivatableNames">ListActivatableNames()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_list_activatable_names() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-list-names:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.ListNames">ListNames()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_list_names() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-list-queued-owners:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_name: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.ListQueuedOwners">ListQueuedOwners()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_list_queued_owners() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-name-has-owner:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_name: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.NameHasOwner">NameHasOwner()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_name_has_owner() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-release-name:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_name: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.ReleaseName">ReleaseName()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_release_name() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-reload-config:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.ReloadConfig">ReloadConfig()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_reload_config() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-remove-match:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_rule: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.RemoveMatch">RemoveMatch()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_remove_match() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-request-name:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_name: Argument passed by remote caller.
+ * @arg_flags: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.RequestName">RequestName()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_request_name() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-start-service-by-name:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_name: Argument passed by remote caller.
+ * @arg_flags: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.StartServiceByName">StartServiceByName()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_start_service_by_name() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-update-activation-environment:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_environment: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.UpdateActivationEnvironment">UpdateActivationEnvironment()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_update_activation_environment() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::name-acquired:
+ * @object: A #_GFreedesktopDBus.
+ * @arg_name: Argument.
+ *
+ * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-freedesktop-DBus.NameAcquired">"NameAcquired"</link> is received.
+ *
+ * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal.
+ */
+
+
+/**
+ * _GFreedesktopDBus::name-lost:
+ * @object: A #_GFreedesktopDBus.
+ * @arg_name: Argument.
+ *
+ * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-freedesktop-DBus.NameLost">"NameLost"</link> is received.
+ *
+ * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal.
+ */
+
+
+/**
+ * _GFreedesktopDBus::name-owner-changed:
+ * @object: A #_GFreedesktopDBus.
+ * @arg_name: Argument.
+ * @arg_old_owner: Argument.
+ * @arg_new_owner: Argument.
+ *
+ * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-freedesktop-DBus.NameOwnerChanged">"NameOwnerChanged"</link> is received.
+ *
+ * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal.
+ */
+
+
+/**
+ * _GFreedesktopDBusIface:
+ * @parent_iface: The parent interface.
+ * @handle_add_match: Handler for the #_GFreedesktopDBus::handle-add-match signal.
+ * @handle_get_connection_selinux_security_context: Handler for the #_GFreedesktopDBus::handle-get-connection-selinux-security-context signal.
+ * @handle_get_connection_unix_process_id: Handler for the #_GFreedesktopDBus::handle-get-connection-unix-process-id signal.
+ * @handle_get_connection_unix_user: Handler for the #_GFreedesktopDBus::handle-get-connection-unix-user signal.
+ * @handle_get_id: Handler for the #_GFreedesktopDBus::handle-get-id signal.
+ * @handle_get_name_owner: Handler for the #_GFreedesktopDBus::handle-get-name-owner signal.
+ * @handle_hello: Handler for the #_GFreedesktopDBus::handle-hello signal.
+ * @handle_list_activatable_names: Handler for the #_GFreedesktopDBus::handle-list-activatable-names signal.
+ * @handle_list_names: Handler for the #_GFreedesktopDBus::handle-list-names signal.
+ * @handle_list_queued_owners: Handler for the #_GFreedesktopDBus::handle-list-queued-owners signal.
+ * @handle_name_has_owner: Handler for the #_GFreedesktopDBus::handle-name-has-owner signal.
+ * @handle_release_name: Handler for the #_GFreedesktopDBus::handle-release-name signal.
+ * @handle_reload_config: Handler for the #_GFreedesktopDBus::handle-reload-config signal.
+ * @handle_remove_match: Handler for the #_GFreedesktopDBus::handle-remove-match signal.
+ * @handle_request_name: Handler for the #_GFreedesktopDBus::handle-request-name signal.
+ * @handle_start_service_by_name: Handler for the #_GFreedesktopDBus::handle-start-service-by-name signal.
+ * @handle_update_activation_environment: Handler for the #_GFreedesktopDBus::handle-update-activation-environment signal.
+ * @name_acquired: Handler for the #_GFreedesktopDBus::name-acquired signal.
+ * @name_lost: Handler for the #_GFreedesktopDBus::name-lost signal.
+ * @name_owner_changed: Handler for the #_GFreedesktopDBus::name-owner-changed signal.
+ *
+ * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-freedesktop-DBus.top_of_page">org.freedesktop.DBus</link>.
+ */
+
+
+/**
+ * _GFreedesktopDBusProxy:
+ *
+ * The #_GFreedesktopDBusProxy structure contains only private data and should only be accessed using the provided API.
+ */
+
+
+/**
+ * _GFreedesktopDBusProxyClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #_GFreedesktopDBusProxy.
+ */
+
+
+/**
+ * _GFreedesktopDBusSkeleton:
+ *
+ * The #_GFreedesktopDBusSkeleton structure contains only private data and should only be accessed using the provided API.
+ */
+
+
+/**
+ * _GFreedesktopDBusSkeletonClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #_GFreedesktopDBusSkeleton.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_add_match:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_rule: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.AddMatch">AddMatch()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_add_match_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_add_match_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_add_match_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_add_match().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_add_match().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_add_match_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_rule: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.AddMatch">AddMatch()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_add_match() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_connection_selinux_security_context:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionSELinuxSecurityContext">GetConnectionSELinuxSecurityContext()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_get_connection_selinux_security_context_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_get_connection_selinux_security_context_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_connection_selinux_security_context_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_security_context: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_get_connection_selinux_security_context().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_get_connection_selinux_security_context().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_connection_selinux_security_context_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @out_security_context: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionSELinuxSecurityContext">GetConnectionSELinuxSecurityContext()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_get_connection_selinux_security_context() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_connection_unix_process_id:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionUnixProcessID">GetConnectionUnixProcessID()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_get_connection_unix_process_id_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_get_connection_unix_process_id_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_connection_unix_process_id_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_pid: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_get_connection_unix_process_id().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_get_connection_unix_process_id().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_connection_unix_process_id_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @out_pid: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionUnixProcessID">GetConnectionUnixProcessID()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_get_connection_unix_process_id() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_connection_unix_user:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionUnixUser">GetConnectionUnixUser()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_get_connection_unix_user_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_get_connection_unix_user_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_connection_unix_user_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_uid: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_get_connection_unix_user().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_get_connection_unix_user().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_connection_unix_user_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @out_uid: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionUnixUser">GetConnectionUnixUser()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_get_connection_unix_user() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_id:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.GetId">GetId()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_get_id_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_get_id_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_id_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_unique_id: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_get_id().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_get_id().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_id_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_unique_id: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.GetId">GetId()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_get_id() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_name_owner:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.GetNameOwner">GetNameOwner()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_get_name_owner_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_get_name_owner_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_name_owner_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_unique_name: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_get_name_owner().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_get_name_owner().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_name_owner_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @out_unique_name: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.GetNameOwner">GetNameOwner()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_get_name_owner() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_hello:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.Hello">Hello()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_hello_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_hello_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_hello_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_assigned_name: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_hello().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_hello().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_hello_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_assigned_name: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.Hello">Hello()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_hello() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_list_activatable_names:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.ListActivatableNames">ListActivatableNames()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_list_activatable_names_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_list_activatable_names_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_list_activatable_names_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_activatable_names: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_list_activatable_names().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_list_activatable_names().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_list_activatable_names_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_activatable_names: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.ListActivatableNames">ListActivatableNames()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_list_activatable_names() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_list_names:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.ListNames">ListNames()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_list_names_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_list_names_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_list_names_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_names: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_list_names().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_list_names().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_list_names_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_names: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.ListNames">ListNames()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_list_names() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_list_queued_owners:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.ListQueuedOwners">ListQueuedOwners()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_list_queued_owners_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_list_queued_owners_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_list_queued_owners_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_queued_owners: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_list_queued_owners().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_list_queued_owners().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_list_queued_owners_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @out_queued_owners: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.ListQueuedOwners">ListQueuedOwners()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_list_queued_owners() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_name_has_owner:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.NameHasOwner">NameHasOwner()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_name_has_owner_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_name_has_owner_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_name_has_owner_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_has_owner: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_name_has_owner().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_name_has_owner().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_name_has_owner_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @out_has_owner: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.NameHasOwner">NameHasOwner()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_name_has_owner() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_release_name:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.ReleaseName">ReleaseName()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_release_name_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_release_name_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_release_name_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_value: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_release_name().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_release_name().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_release_name_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @out_value: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.ReleaseName">ReleaseName()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_release_name() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_reload_config:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.ReloadConfig">ReloadConfig()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_reload_config_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_reload_config_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_reload_config_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_reload_config().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_reload_config().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_reload_config_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.ReloadConfig">ReloadConfig()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_reload_config() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_remove_match:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_rule: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.RemoveMatch">RemoveMatch()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_remove_match_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_remove_match_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_remove_match_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_remove_match().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_remove_match().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_remove_match_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_rule: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.RemoveMatch">RemoveMatch()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_remove_match() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_request_name:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @arg_flags: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.RequestName">RequestName()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_request_name_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_request_name_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_request_name_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_value: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_request_name().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_request_name().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_request_name_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @arg_flags: Argument to pass with the method invocation.
+ * @out_value: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.RequestName">RequestName()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_request_name() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_start_service_by_name:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @arg_flags: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.StartServiceByName">StartServiceByName()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_start_service_by_name_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_start_service_by_name_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_start_service_by_name_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_value: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_start_service_by_name().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_start_service_by_name().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_start_service_by_name_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @arg_flags: Argument to pass with the method invocation.
+ * @out_value: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.StartServiceByName">StartServiceByName()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_start_service_by_name() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_update_activation_environment:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_environment: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.UpdateActivationEnvironment">UpdateActivationEnvironment()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_update_activation_environment_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_update_activation_environment_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_update_activation_environment_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_update_activation_environment().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_update_activation_environment().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_update_activation_environment_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_environment: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.UpdateActivationEnvironment">UpdateActivationEnvironment()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_update_activation_environment() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_add_match:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.AddMatch">AddMatch()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_get_connection_selinux_security_context:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @security_context: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionSELinuxSecurityContext">GetConnectionSELinuxSecurityContext()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_get_connection_unix_process_id:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @pid: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionUnixProcessID">GetConnectionUnixProcessID()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_get_connection_unix_user:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @uid: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionUnixUser">GetConnectionUnixUser()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_get_id:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @unique_id: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.GetId">GetId()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_get_name_owner:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @unique_name: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.GetNameOwner">GetNameOwner()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_hello:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @assigned_name: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.Hello">Hello()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_list_activatable_names:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @activatable_names: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.ListActivatableNames">ListActivatableNames()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_list_names:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @names: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.ListNames">ListNames()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_list_queued_owners:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @queued_owners: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.ListQueuedOwners">ListQueuedOwners()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_name_has_owner:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @has_owner: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.NameHasOwner">NameHasOwner()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_release_name:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @value: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.ReleaseName">ReleaseName()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_reload_config:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.ReloadConfig">ReloadConfig()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_remove_match:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.RemoveMatch">RemoveMatch()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_request_name:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @value: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.RequestName">RequestName()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_start_service_by_name:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @value: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.StartServiceByName">StartServiceByName()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_update_activation_environment:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.UpdateActivationEnvironment">UpdateActivationEnvironment()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_emit_name_acquired:
+ * @object: A #_GFreedesktopDBus.
+ * @arg_name: Argument to pass with the signal.
+ *
+ * Emits the <link linkend="gdbus-signal-org-freedesktop-DBus.NameAcquired">"NameAcquired"</link> D-Bus signal.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_emit_name_lost:
+ * @object: A #_GFreedesktopDBus.
+ * @arg_name: Argument to pass with the signal.
+ *
+ * Emits the <link linkend="gdbus-signal-org-freedesktop-DBus.NameLost">"NameLost"</link> D-Bus signal.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_emit_name_owner_changed:
+ * @object: A #_GFreedesktopDBus.
+ * @arg_name: Argument to pass with the signal.
+ * @arg_old_owner: Argument to pass with the signal.
+ * @arg_new_owner: Argument to pass with the signal.
+ *
+ * Emits the <link linkend="gdbus-signal-org-freedesktop-DBus.NameOwnerChanged">"NameOwnerChanged"</link> D-Bus signal.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_interface_info:
+ *
+ * Gets a machine-readable description of the <link linkend="gdbus-interface-org-freedesktop-DBus.top_of_page">org.freedesktop.DBus</link> D-Bus interface.
+ *
+ * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_override_properties:
+ * @klass: The class structure for a #GObject<!-- -->-derived class.
+ * @property_id_begin: The property id to assign to the first overridden property.
+ *
+ * Overrides all #GObject properties in the #_GFreedesktopDBus interface for a concrete class.
+ * The properties are overridden in the order they are defined.
+ *
+ * Returns: The last property id.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-freedesktop-DBus.top_of_page">org.freedesktop.DBus</link>. See g_dbus_proxy_new() for more details.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_proxy_new_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_proxy_new_sync() for the synchronous, blocking version of this constructor.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_proxy_new_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_proxy_new().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_proxy_new().
+ *
+ * Returns: (transfer full) (type _GFreedesktopDBusProxy): The constructed proxy object or %NULL if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like _g_freedesktop_dbus_proxy_new() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_proxy_new_for_bus_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_proxy_new_for_bus_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_proxy_new_for_bus().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_proxy_new_for_bus().
+ *
+ * Returns: (transfer full) (type _GFreedesktopDBusProxy): The constructed proxy object or %NULL if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Like _g_freedesktop_dbus_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_proxy_new_for_bus() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type _GFreedesktopDBusProxy): The constructed proxy object or %NULL if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-freedesktop-DBus.top_of_page">org.freedesktop.DBus</link>. See g_dbus_proxy_new_sync() for more details.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_proxy_new() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type _GFreedesktopDBusProxy): The constructed proxy object or %NULL if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_skeleton_new:
+ *
+ * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-freedesktop-DBus.top_of_page">org.freedesktop.DBus</link>.
+ *
+ * Returns: (transfer full) (type _GFreedesktopDBusSkeleton): The skeleton object.
+ */
+
+
+/**
+ * _GFreedesktopDBus:
+ *
+ * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-freedesktop-DBus.top_of_page">org.freedesktop.DBus</link>.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-add-match:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_rule: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.AddMatch">AddMatch()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_add_match() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-get-connection-selinux-security-context:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_name: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionSELinuxSecurityContext">GetConnectionSELinuxSecurityContext()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_get_connection_selinux_security_context() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-get-connection-unix-process-id:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_name: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionUnixProcessID">GetConnectionUnixProcessID()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_get_connection_unix_process_id() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-get-connection-unix-user:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_name: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionUnixUser">GetConnectionUnixUser()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_get_connection_unix_user() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-get-id:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.GetId">GetId()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_get_id() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-get-name-owner:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_name: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.GetNameOwner">GetNameOwner()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_get_name_owner() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-hello:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.Hello">Hello()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_hello() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-list-activatable-names:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.ListActivatableNames">ListActivatableNames()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_list_activatable_names() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-list-names:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.ListNames">ListNames()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_list_names() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-list-queued-owners:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_name: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.ListQueuedOwners">ListQueuedOwners()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_list_queued_owners() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-name-has-owner:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_name: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.NameHasOwner">NameHasOwner()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_name_has_owner() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-release-name:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_name: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.ReleaseName">ReleaseName()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_release_name() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-reload-config:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.ReloadConfig">ReloadConfig()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_reload_config() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-remove-match:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_rule: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.RemoveMatch">RemoveMatch()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_remove_match() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-request-name:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_name: Argument passed by remote caller.
+ * @arg_flags: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.RequestName">RequestName()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_request_name() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-start-service-by-name:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_name: Argument passed by remote caller.
+ * @arg_flags: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.StartServiceByName">StartServiceByName()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_start_service_by_name() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::handle-update-activation-environment:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_environment: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-DBus.UpdateActivationEnvironment">UpdateActivationEnvironment()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call _g_freedesktop_dbus_complete_update_activation_environment() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+
+
+/**
+ * _GFreedesktopDBus::name-acquired:
+ * @object: A #_GFreedesktopDBus.
+ * @arg_name: Argument.
+ *
+ * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-freedesktop-DBus.NameAcquired">"NameAcquired"</link> is received.
+ *
+ * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal.
+ */
+
+
+/**
+ * _GFreedesktopDBus::name-lost:
+ * @object: A #_GFreedesktopDBus.
+ * @arg_name: Argument.
+ *
+ * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-freedesktop-DBus.NameLost">"NameLost"</link> is received.
+ *
+ * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal.
+ */
+
+
+/**
+ * _GFreedesktopDBus::name-owner-changed:
+ * @object: A #_GFreedesktopDBus.
+ * @arg_name: Argument.
+ * @arg_old_owner: Argument.
+ * @arg_new_owner: Argument.
+ *
+ * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-freedesktop-DBus.NameOwnerChanged">"NameOwnerChanged"</link> is received.
+ *
+ * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal.
+ */
+
+
+/**
+ * _GFreedesktopDBusIface:
+ * @parent_iface: The parent interface.
+ * @handle_add_match: Handler for the #_GFreedesktopDBus::handle-add-match signal.
+ * @handle_get_connection_selinux_security_context: Handler for the #_GFreedesktopDBus::handle-get-connection-selinux-security-context signal.
+ * @handle_get_connection_unix_process_id: Handler for the #_GFreedesktopDBus::handle-get-connection-unix-process-id signal.
+ * @handle_get_connection_unix_user: Handler for the #_GFreedesktopDBus::handle-get-connection-unix-user signal.
+ * @handle_get_id: Handler for the #_GFreedesktopDBus::handle-get-id signal.
+ * @handle_get_name_owner: Handler for the #_GFreedesktopDBus::handle-get-name-owner signal.
+ * @handle_hello: Handler for the #_GFreedesktopDBus::handle-hello signal.
+ * @handle_list_activatable_names: Handler for the #_GFreedesktopDBus::handle-list-activatable-names signal.
+ * @handle_list_names: Handler for the #_GFreedesktopDBus::handle-list-names signal.
+ * @handle_list_queued_owners: Handler for the #_GFreedesktopDBus::handle-list-queued-owners signal.
+ * @handle_name_has_owner: Handler for the #_GFreedesktopDBus::handle-name-has-owner signal.
+ * @handle_release_name: Handler for the #_GFreedesktopDBus::handle-release-name signal.
+ * @handle_reload_config: Handler for the #_GFreedesktopDBus::handle-reload-config signal.
+ * @handle_remove_match: Handler for the #_GFreedesktopDBus::handle-remove-match signal.
+ * @handle_request_name: Handler for the #_GFreedesktopDBus::handle-request-name signal.
+ * @handle_start_service_by_name: Handler for the #_GFreedesktopDBus::handle-start-service-by-name signal.
+ * @handle_update_activation_environment: Handler for the #_GFreedesktopDBus::handle-update-activation-environment signal.
+ * @name_acquired: Handler for the #_GFreedesktopDBus::name-acquired signal.
+ * @name_lost: Handler for the #_GFreedesktopDBus::name-lost signal.
+ * @name_owner_changed: Handler for the #_GFreedesktopDBus::name-owner-changed signal.
+ *
+ * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-freedesktop-DBus.top_of_page">org.freedesktop.DBus</link>.
+ */
+
+
+/**
+ * _GFreedesktopDBusProxy:
+ *
+ * The #_GFreedesktopDBusProxy structure contains only private data and should only be accessed using the provided API.
+ */
+
+
+/**
+ * _GFreedesktopDBusProxyClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #_GFreedesktopDBusProxy.
+ */
+
+
+/**
+ * _GFreedesktopDBusSkeleton:
+ *
+ * The #_GFreedesktopDBusSkeleton structure contains only private data and should only be accessed using the provided API.
+ */
+
+
+/**
+ * _GFreedesktopDBusSkeletonClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #_GFreedesktopDBusSkeleton.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_add_match:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_rule: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.AddMatch">AddMatch()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_add_match_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_add_match_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_add_match_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_add_match().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_add_match().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_add_match_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_rule: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.AddMatch">AddMatch()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_add_match() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_connection_selinux_security_context:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionSELinuxSecurityContext">GetConnectionSELinuxSecurityContext()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_get_connection_selinux_security_context_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_get_connection_selinux_security_context_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_connection_selinux_security_context_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_security_context: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_get_connection_selinux_security_context().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_get_connection_selinux_security_context().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_connection_selinux_security_context_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @out_security_context: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionSELinuxSecurityContext">GetConnectionSELinuxSecurityContext()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_get_connection_selinux_security_context() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_connection_unix_process_id:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionUnixProcessID">GetConnectionUnixProcessID()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_get_connection_unix_process_id_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_get_connection_unix_process_id_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_connection_unix_process_id_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_pid: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_get_connection_unix_process_id().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_get_connection_unix_process_id().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_connection_unix_process_id_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @out_pid: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionUnixProcessID">GetConnectionUnixProcessID()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_get_connection_unix_process_id() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_connection_unix_user:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionUnixUser">GetConnectionUnixUser()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_get_connection_unix_user_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_get_connection_unix_user_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_connection_unix_user_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_uid: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_get_connection_unix_user().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_get_connection_unix_user().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_connection_unix_user_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @out_uid: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionUnixUser">GetConnectionUnixUser()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_get_connection_unix_user() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_id:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.GetId">GetId()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_get_id_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_get_id_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_id_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_unique_id: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_get_id().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_get_id().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_id_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_unique_id: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.GetId">GetId()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_get_id() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_name_owner:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.GetNameOwner">GetNameOwner()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_get_name_owner_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_get_name_owner_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_name_owner_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_unique_name: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_get_name_owner().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_get_name_owner().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_get_name_owner_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @out_unique_name: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.GetNameOwner">GetNameOwner()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_get_name_owner() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_hello:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.Hello">Hello()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_hello_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_hello_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_hello_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_assigned_name: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_hello().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_hello().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_hello_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_assigned_name: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.Hello">Hello()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_hello() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_list_activatable_names:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.ListActivatableNames">ListActivatableNames()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_list_activatable_names_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_list_activatable_names_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_list_activatable_names_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_activatable_names: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_list_activatable_names().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_list_activatable_names().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_list_activatable_names_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_activatable_names: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.ListActivatableNames">ListActivatableNames()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_list_activatable_names() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_list_names:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.ListNames">ListNames()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_list_names_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_list_names_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_list_names_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_names: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_list_names().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_list_names().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_list_names_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_names: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.ListNames">ListNames()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_list_names() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_list_queued_owners:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.ListQueuedOwners">ListQueuedOwners()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_list_queued_owners_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_list_queued_owners_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_list_queued_owners_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_queued_owners: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_list_queued_owners().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_list_queued_owners().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_list_queued_owners_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @out_queued_owners: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.ListQueuedOwners">ListQueuedOwners()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_list_queued_owners() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_name_has_owner:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.NameHasOwner">NameHasOwner()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_name_has_owner_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_name_has_owner_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_name_has_owner_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_has_owner: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_name_has_owner().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_name_has_owner().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_name_has_owner_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @out_has_owner: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.NameHasOwner">NameHasOwner()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_name_has_owner() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_release_name:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.ReleaseName">ReleaseName()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_release_name_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_release_name_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_release_name_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_value: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_release_name().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_release_name().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_release_name_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @out_value: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.ReleaseName">ReleaseName()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_release_name() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_reload_config:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.ReloadConfig">ReloadConfig()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_reload_config_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_reload_config_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_reload_config_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_reload_config().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_reload_config().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_reload_config_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.ReloadConfig">ReloadConfig()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_reload_config() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_remove_match:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_rule: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.RemoveMatch">RemoveMatch()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_remove_match_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_remove_match_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_remove_match_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_remove_match().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_remove_match().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_remove_match_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_rule: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.RemoveMatch">RemoveMatch()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_remove_match() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_request_name:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @arg_flags: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.RequestName">RequestName()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_request_name_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_request_name_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_request_name_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_value: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_request_name().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_request_name().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_request_name_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @arg_flags: Argument to pass with the method invocation.
+ * @out_value: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.RequestName">RequestName()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_request_name() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_start_service_by_name:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @arg_flags: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.StartServiceByName">StartServiceByName()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_start_service_by_name_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_start_service_by_name_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_start_service_by_name_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @out_value: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_start_service_by_name().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_start_service_by_name().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_start_service_by_name_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_name: Argument to pass with the method invocation.
+ * @arg_flags: Argument to pass with the method invocation.
+ * @out_value: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.StartServiceByName">StartServiceByName()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_start_service_by_name() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_update_activation_environment:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_environment: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.UpdateActivationEnvironment">UpdateActivationEnvironment()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_call_update_activation_environment_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_call_update_activation_environment_sync() for the synchronous, blocking version of this method.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_update_activation_environment_finish:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_call_update_activation_environment().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with _g_freedesktop_dbus_call_update_activation_environment().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_call_update_activation_environment_sync:
+ * @proxy: A #_GFreedesktopDBusProxy.
+ * @arg_environment: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-DBus.UpdateActivationEnvironment">UpdateActivationEnvironment()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_call_update_activation_environment() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_add_match:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.AddMatch">AddMatch()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_get_connection_selinux_security_context:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @security_context: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionSELinuxSecurityContext">GetConnectionSELinuxSecurityContext()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_get_connection_unix_process_id:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @pid: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionUnixProcessID">GetConnectionUnixProcessID()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_get_connection_unix_user:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @uid: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.GetConnectionUnixUser">GetConnectionUnixUser()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_get_id:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @unique_id: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.GetId">GetId()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_get_name_owner:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @unique_name: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.GetNameOwner">GetNameOwner()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_hello:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @assigned_name: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.Hello">Hello()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_list_activatable_names:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @activatable_names: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.ListActivatableNames">ListActivatableNames()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_list_names:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @names: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.ListNames">ListNames()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_list_queued_owners:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @queued_owners: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.ListQueuedOwners">ListQueuedOwners()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_name_has_owner:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @has_owner: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.NameHasOwner">NameHasOwner()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_release_name:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @value: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.ReleaseName">ReleaseName()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_reload_config:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.ReloadConfig">ReloadConfig()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_remove_match:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.RemoveMatch">RemoveMatch()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_request_name:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @value: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.RequestName">RequestName()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_start_service_by_name:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @value: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.StartServiceByName">StartServiceByName()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_complete_update_activation_environment:
+ * @object: A #_GFreedesktopDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-DBus.UpdateActivationEnvironment">UpdateActivationEnvironment()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_emit_name_acquired:
+ * @object: A #_GFreedesktopDBus.
+ * @arg_name: Argument to pass with the signal.
+ *
+ * Emits the <link linkend="gdbus-signal-org-freedesktop-DBus.NameAcquired">"NameAcquired"</link> D-Bus signal.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_emit_name_lost:
+ * @object: A #_GFreedesktopDBus.
+ * @arg_name: Argument to pass with the signal.
+ *
+ * Emits the <link linkend="gdbus-signal-org-freedesktop-DBus.NameLost">"NameLost"</link> D-Bus signal.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_emit_name_owner_changed:
+ * @object: A #_GFreedesktopDBus.
+ * @arg_name: Argument to pass with the signal.
+ * @arg_old_owner: Argument to pass with the signal.
+ * @arg_new_owner: Argument to pass with the signal.
*
- * Support for UNIX-domain (also known as local) sockets.
+ * Emits the <link linkend="gdbus-signal-org-freedesktop-DBus.NameOwnerChanged">"NameOwnerChanged"</link> D-Bus signal.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_interface_info:
*
- * UNIX domain sockets are generally visible in the filesystem.
- * However, some systems support abstract socket names which are not
- * visible in the filesystem and not affected by the filesystem
- * permissions, visibility, etc. Currently this is only supported
- * under Linux. If you attempt to use abstract sockets on other
- * systems, function calls may return %G_IO_ERROR_NOT_SUPPORTED
- * errors. You can use g_unix_socket_address_abstract_names_supported()
- * to see if abstract names are supported.
+ * Gets a machine-readable description of the <link linkend="gdbus-interface-org-freedesktop-DBus.top_of_page">org.freedesktop.DBus</link> D-Bus interface.
*
- * Note that <filename><gio/gunixsocketaddress.h></filename> belongs to
- * the UNIX-specific GIO interfaces, thus you have to use the
- * <filename>gio-unix-2.0.pc</filename> pkg-config file when using it.
+ * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.
*/
/**
- * SECTION:gvfs
- * @short_description: Virtual File System
- * @include: gio/gio.h
+ * _g_freedesktop_dbus_override_properties:
+ * @klass: The class structure for a #GObject<!-- -->-derived class.
+ * @property_id_begin: The property id to assign to the first overridden property.
*
- * Entry point for using GIO functionality.
+ * Overrides all #GObject properties in the #_GFreedesktopDBus interface for a concrete class.
+ * The properties are overridden in the order they are defined.
+ *
+ * Returns: The last property id.
*/
/**
- * SECTION:gvolume
- * @short_description: Volume management
- * @include: gio/gio.h
- *
- * The #GVolume interface represents user-visible objects that can be
- * mounted. Note, when porting from GnomeVFS, #GVolume is the moral
- * equivalent of #GnomeVFSDrive.
+ * _g_freedesktop_dbus_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
*
- * Mounting a #GVolume instance is an asynchronous operation. For more
- * information about asynchronous operations, see #GAsyncResult and
- * #GTask. To mount a #GVolume, first call g_volume_mount() with (at
- * least) the #GVolume instance, optionally a #GMountOperation object
- * and a #GAsyncReadyCallback.
+ * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-freedesktop-DBus.top_of_page">org.freedesktop.DBus</link>. See g_dbus_proxy_new() for more details.
*
- * Typically, one will only want to pass %NULL for the
- * #GMountOperation if automounting all volumes when a desktop session
- * starts since it's not desirable to put up a lot of dialogs asking
- * for credentials.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_proxy_new_finish() to get the result of the operation.
*
- * The callback will be fired when the operation has resolved (either
- * with success or failure), and a #GAsyncReady structure will be
- * passed to the callback. That callback should then call
- * g_volume_mount_finish() with the #GVolume instance and the
- * #GAsyncReady data to see if the operation was completed
- * successfully. If an @error is present when g_volume_mount_finish()
- * is called, then it will be filled with any error information.
+ * See _g_freedesktop_dbus_proxy_new_sync() for the synchronous, blocking version of this constructor.
+ */
+
+
+/**
+ * _g_freedesktop_dbus_proxy_new_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_proxy_new().
+ * @error: Return location for error or %NULL
*
- * <para id="volume-identifier">
- * It is sometimes necessary to directly access the underlying
- * operating system object behind a volume (e.g. for passing a volume
- * to an application via the commandline). For this purpose, GIO
- * allows to obtain an 'identifier' for the volume. There can be
- * different kinds of identifiers, such as Hal UDIs, filesystem labels,
- * traditional Unix devices (e.g. <filename>/dev/sda2</filename>),
- * uuids. GIO uses predefind strings as names for the different kinds
- * of identifiers: #G_VOLUME_IDENTIFIER_KIND_HAL_UDI,
- * #G_VOLUME_IDENTIFIER_KIND_LABEL, etc. Use g_volume_get_identifier()
- * to obtain an identifier for a volume.
- * </para>
+ * Finishes an operation started with _g_freedesktop_dbus_proxy_new().
*
- * Note that #G_VOLUME_IDENTIFIER_KIND_HAL_UDI will only be available
- * when the gvfs hal volume monitor is in use. Other volume monitors
- * will generally be able to provide the #G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE
- * identifier, which can be used to obtain a hal device by means of
- * libhal_manager_find_device_string_match().
+ * Returns: (transfer full) (type _GFreedesktopDBusProxy): The constructed proxy object or %NULL if @error is set.
*/
/**
- * SECTION:gvolumemonitor
- * @short_description: Volume Monitor
- * @include: gio/gio.h
- * @see_also: #GFileMonitor
+ * _g_freedesktop_dbus_proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
*
- * #GVolumeMonitor is for listing the user interesting devices and volumes
- * on the computer. In other words, what a file selector or file manager
- * would show in a sidebar.
+ * Like _g_freedesktop_dbus_proxy_new() but takes a #GBusType instead of a #GDBusConnection.
*
- * #GVolumeMonitor is not <link
- * linkend="g-main-context-push-thread-default">thread-default-context
- * aware</link>, and so should not be used other than from the main
- * thread, with no thread-default-context active.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call _g_freedesktop_dbus_proxy_new_for_bus_finish() to get the result of the operation.
+ *
+ * See _g_freedesktop_dbus_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor.
*/
/**
- * SECTION:gwin32inputstream
- * @short_description: Streaming input operations for Windows file handles
- * @include: gio/gwin32inputstream.h
- * @see_also: #GInputStream
+ * _g_freedesktop_dbus_proxy_new_for_bus_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to _g_freedesktop_dbus_proxy_new_for_bus().
+ * @error: Return location for error or %NULL
*
- * #GWin32InputStream implements #GInputStream for reading from a
- * Windows file handle.
+ * Finishes an operation started with _g_freedesktop_dbus_proxy_new_for_bus().
*
- * Note that <filename><gio/gwin32inputstream.h></filename> belongs
- * to the Windows-specific GIO interfaces, thus you have to use the
- * <filename>gio-windows-2.0.pc</filename> pkg-config file when using it.
+ * Returns: (transfer full) (type _GFreedesktopDBusProxy): The constructed proxy object or %NULL if @error is set.
*/
/**
- * SECTION:gwin32outputstream
- * @short_description: Streaming output operations for Windows file handles
- * @include: gio/gwin32outputstream.h
- * @see_also: #GOutputStream
+ * _g_freedesktop_dbus_proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
*
- * #GWin32OutputStream implements #GOutputStream for writing to a
- * Windows file handle.
+ * Like _g_freedesktop_dbus_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection.
*
- * Note that <filename><gio/gwin32outputstream.h></filename> belongs
- * to the Windows-specific GIO interfaces, thus you have to use the
- * <filename>gio-windows-2.0.pc</filename> pkg-config file when using it.
+ * The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_proxy_new_for_bus() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type _GFreedesktopDBusProxy): The constructed proxy object or %NULL if @error is set.
*/
/**
- * SECTION:gzcompressor
- * @short_description: Zlib compressor
- * @include: gio/gio.h
+ * _g_freedesktop_dbus_proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
*
- * #GZlibCompressor is an implementation of #GConverter that
- * compresses data using zlib.
+ * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-freedesktop-DBus.top_of_page">org.freedesktop.DBus</link>. See g_dbus_proxy_new_sync() for more details.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See _g_freedesktop_dbus_proxy_new() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type _GFreedesktopDBusProxy): The constructed proxy object or %NULL if @error is set.
*/
/**
- * SECTION:gzdecompressor
- * @short_description: Zlib decompressor
- * @include: gio/gio.h
+ * _g_freedesktop_dbus_skeleton_new:
*
- * #GZlibDecompressor is an implementation of #GConverter that
- * decompresses data compressed with zlib.
+ * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-freedesktop-DBus.top_of_page">org.freedesktop.DBus</link>.
+ *
+ * Returns: (transfer full) (type _GFreedesktopDBusSkeleton): The skeleton object.
*/
* the parameter type given at construction time). If the parameter
* type was %NULL then @parameter must also be %NULL.
*
+ * If the @parameter GVariant is floating, it is consumed.
+ *
* Since: 2.28
*/
/**
+ * g_action_parse_detailed_name:
+ * @detailed_name: a detailed action name
+ * @action_name: (out): the action name
+ * @target_value: (out): the target value, or %NULL for no target
+ * @error: a pointer to a %NULL #GError, or %NULL
+ *
+ * Parses a detailed action name into its separate name and target
+ * components.
+ *
+ * Detailed action names can have three formats.
+ *
+ * The first format is used to represent an action name with no target
+ * value and consists of just an action name containing no whitespace
+ * nor the characters ':', '(' or ')'. For example: "app.action".
+ *
+ * The second format is used to represent an action with a string-typed
+ * target value. The action name and target value are separated by a
+ * double colon ("::"). For example: "app.action::target".
+ *
+ * The third format is used to represent an action with an
+ * arbitrarily-typed target value. The target value follows the action
+ * name, surrounded in parens. For example: "app.action(42)". The
+ * target value is parsed using g_variant_parse(). If a tuple-typed
+ * value is desired, it must be specified in the same way, resulting in
+ * two sets of parens, for example: "app.action((1,2,3))".
+ *
+ * Returns: %TRUE if successful, else %FALSE with @error set
+ * Since: 2.38
+ */
+
+
+/**
* g_app_info_add_supports_type:
* @appinfo: a #GAppInfo.
* @content_type: a string.
/**
+ * g_application_mark_busy:
+ * @application: a #GApplication
+ *
+ * Increases the busy count of @application.
+ *
+ * Use this function to indicate that the application is busy, for instance
+ * while a long running operation is pending.
+ *
+ * The busy state will be exposed to other processes, so a session shell will
+ * use that information to indicate the state to the user (e.g. with a
+ * spinner).
+ *
+ * To cancel the busy indication, use g_application_unmark_busy().
+ *
+ * Since: 2.38
+ */
+
+
+/**
* g_application_new:
* @application_id: (allow-none): the application id
* @flags: the application flags
/**
+ * g_application_unmark_busy:
+ * @application: a #GApplication
+ *
+ * Decreases the busy count of @application.
+ *
+ * When the busy count reaches zero, the new state will be propagated
+ * to other processes.
+ *
+ * This function must only be called to cancel the effect of a previous
+ * call to g_application_mark_busy().
+ *
+ * Since: 2.38
+ */
+
+
+/**
* g_async_initable_init_async:
* @initable: a #GAsyncInitable.
* @io_priority: the <link linkend="io-priority">I/O priority</link> of the operation.
/**
+ * g_bytes_icon_get_bytes:
+ * @icon: a #GIcon.
+ *
+ * Gets the #GBytes associated with the given @icon.
+ *
+ * Returns: (transfer none): a #GBytes, or %NULL.
+ * Since: 2.38
+ */
+
+
+/**
+ * g_bytes_icon_new:
+ * @bytes: a #GBytes.
+ *
+ * Creates a new icon for a bytes.
+ *
+ * Returns: (transfer full) (type GBytesIcon): a #GIcon for the given @bytes, or %NULL on error.
+ * Since: 2.38
+ */
+
+
+/**
* g_cancellable_cancel:
* @cancellable: a #GCancellable object.
*
* tracking the name owner of the well-known name and use that when
* processing the received signal.
*
+ * If one of %G_DBUS_SIGNAL_FLAGS_MATCH_ARG0_NAMESPACE or
+ * %G_DBUS_SIGNAL_FLAGS_MATCH_ARG0_PATH are given, @arg0 is
+ * interpreted as part of a namespace or path. The first argument
+ * of a signal is matched against that part as specified by D-Bus.
+ *
* Returns: A subscription identifier that can be used with g_dbus_connection_signal_unsubscribe().
* Since: 2.26
*/
* Finishes deleting a file started with g_file_delete_async().
*
* Virtual: delete_file_finish
+ * Returns: %TRUE if the file was deleted. %FALSE otherwise.
* Since: 2.34
*/
/**
+ * g_file_make_directory_async:
+ * @file: input #GFile
+ * @io_priority: the <link linkend="io-priority">I/O priority</link> of the request
+ * @cancellable: (allow-none): optional #GCancellable object, %NULL to ignore
+ * @callback: a #GAsyncReadyCallback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ *
+ * Asynchronously creates a directory.
+ *
+ * Virtual: make_directory_async
+ * Since: 2.38
+ */
+
+
+/**
+ * g_file_make_directory_finish:
+ * @file: input #GFile
+ * @result: a #GAsyncResult
+ * @error: a #GError, or %NULL
+ *
+ * Finishes an asynchronous directory creation, started with
+ * g_file_make_directory_async().
+ *
+ * Virtual: make_directory_finish
+ * Returns: %TRUE on successful directory creation, %FALSE otherwise.
+ * Since: 2.38
+ */
+
+
+/**
* g_file_make_directory_with_parents:
* @file: input #GFile
* @cancellable: (allow-none): optional #GCancellable object, %NULL to ignore
* triggering the cancellable object from another thread. If the operation
* was cancelled, the error %G_IO_ERROR_CANCELLED will be returned.
*
+ * Virtual: trash
+ * Returns: %TRUE on successful trash, %FALSE otherwise.
+ */
+
+
+/**
+ * g_file_trash_async:
+ * @file: input #GFile
+ * @io_priority: the <link linkend="io-priority">I/O priority</link> of the request
+ * @cancellable: (allow-none): optional #GCancellable object, %NULL to ignore
+ * @callback: a #GAsyncReadyCallback to call when the request is satisfied
+ * @user_data: the data to pass to callback function
+ *
+ * Asynchronously sends @file to the Trash location, if possible.
+ *
+ * Virtual: trash_async
+ * Since: 2.38
+ */
+
+
+/**
+ * g_file_trash_finish:
+ * @file: input #GFile
+ * @result: a #GAsyncResult
+ * @error: a #GError, or %NULL
+ *
+ * Finishes an asynchronous file trashing operation, started with
+ * g_file_trash_async().
+ *
+ * Virtual: trash_finish
* Returns: %TRUE on successful trash, %FALSE otherwise.
+ * Since: 2.38
*/
/**
+ * g_icon_deserialize:
+ * @value: a #GVariant created with g_icon_serialize()
+ *
+ * Deserializes a #GIcon previously serialized using g_icon_serialize().
+ *
+ * Returns: (transfer full): a #GIcon, or %NULL when deserialization fails.
+ * Since: 2.38
+ */
+
+
+/**
* g_icon_equal:
* @icon1: (allow-none): pointer to the first #GIcon.
* @icon2: (allow-none): pointer to the second #GIcon.
/**
+ * g_icon_serialize:
+ * @icon: a #GIcon
+ *
+ * Serializes a #GIcon into a #GVariant. An equivalent #GIcon can be retrieved
+ * back by calling g_icon_deserialize() on the returned value.
+ * As serialization will avoid using raw icon data when possible, it only
+ * makes sense to transfer the #GVariant between processes on the same machine,
+ * (as opposed to over the network), and within the same file system namespace.
+ *
+ * Returns: (transfer full): a #GVariant, or %NULL when serialization fails.
+ * Since: 2.38
+ */
+
+
+/**
* g_icon_to_string:
* @icon: a #GIcon.
*
*
* Sets the "action" and possibly the "target" attribute of @menu_item.
*
- * If @detailed_action contains a double colon ("::") then it is used as
- * a separator between an action name and a target string. In this
- * case, this call is equivalent to calling
- * g_menu_item_set_action_and_target() with the part before the "::" and
- * with a string-type #GVariant containing the part following the "::".
- *
- * If @detailed_action doesn't contain "::" then the action is set to
- * the given string (verbatim) and the target value is unset.
+ * The format of @detailed_action is the same format parsed by
+ * g_action_parse_detailed_name().
*
* See g_menu_item_set_action_and_target() or
* g_menu_item_set_action_and_target_value() for more flexible (but
/**
+ * g_menu_item_set_icon:
+ * @menu_item: a #GMenuItem
+ * @icon: a #GIcon, or %NULL
+ *
+ * Sets (or unsets) the icon on @menu_item.
+ *
+ * This call is the same as calling g_icon_serialize() and using the
+ * result as the value to g_menu_item_set_attribute_value() for
+ * %G_MENU_ATTRIBUTE_ICON.
+ *
+ * This API is only intended for use with "noun" menu items; things like
+ * bookmarks or applications in an "Open With" menu. Don't use it on
+ * menu items corresponding to verbs (eg: stock icons for 'Save' or
+ * 'Quit').
+ *
+ * If @icon is %NULL then the icon is unset.
+ *
+ * Since: 2.38
+ */
+
+
+/**
* g_menu_item_set_label:
* @menu_item: a #GMenuItem
* @label: (allow-none): the label to set, or %NULL to unset
/**
+ * g_menu_remove_all:
+ * @menu: a #GMenu
+ *
+ * Removes all items in the menu.
+ *
+ * Since: 2.38
+ */
+
+
+/**
* g_mount_can_eject:
* @mount: a #GMount.
*
* property. Instead, they should call g_action_change_state() to
* request the change.
*
+ * If the @value GVariant is floating, it is consumed.
+ *
* Since: 2.30
*/
* @G_FILE_ERROR_NFILE: There are too many distinct file openings in the entire system.
* @G_FILE_ERROR_BADF: Bad file descriptor; for example, I/O on a descriptor that has been closed or reading from a descriptor open only for writing (or vice versa).
* @G_FILE_ERROR_INVAL: Invalid argument. This is used to indicate various kinds of problems with passing the wrong argument to a library function.
- * @G_FILE_ERROR_PIPE: Broken pipe; there is no process reading from the other end of a pipe. Every library function that returns this error code also generates a `SIGPIPE' signal; this signal terminates the program if not handled or blocked. Thus, your program will never actually see this code unless it has handled or blocked `SIGPIPE'.
+ * @G_FILE_ERROR_PIPE: Broken pipe; there is no process reading from the other end of a pipe. Every library function that returns this error code also generates a 'SIGPIPE' signal; this signal terminates the program if not handled or blocked. Thus, your program will never actually see this code unless it has handled or blocked 'SIGPIPE'.
* @G_FILE_ERROR_AGAIN: Resource temporarily unavailable; the call might work if you try again later.
* @G_FILE_ERROR_INTR: Interrupted function call; an asynchronous signal occurred and prevented completion of the call. When this happens, you should try the call again.
* @G_FILE_ERROR_IO: Input/output error; usually used for physical read or write errors. i.e. the disk or other physical device hardware is returning errors.
/**
+ * GTestSubprocessFlags:
+ * @G_TEST_SUBPROCESS_INHERIT_STDIN: If this flag is given, the child process will inherit the parent's stdin. Otherwise, the child's stdin is redirected to <filename>/dev/null</filename>.
+ * @G_TEST_SUBPROCESS_INHERIT_STDOUT: If this flag is given, the child process will inherit the parent's stdout. Otherwise, the child's stdout will not be visible, but it will be captured to allow later tests with g_test_trap_assert_stdout().
+ * @G_TEST_SUBPROCESS_INHERIT_STDERR: If this flag is given, the child process will inherit the parent's stderr. Otherwise, the child's stderr will not be visible, but it will be captured to allow later tests with g_test_trap_assert_stderr().
+ *
+ * Flags to pass to g_test_trap_subprocess() to control input and output.
+ *
+ * Note that in contrast with g_test_trap_fork(), the default is to
+ * not show stdout and stderr.
+ */
+
+
+/**
* GTestSuite:
*
* An opaque structure representing a test suite.
* GTestTrapFlags:
* @G_TEST_TRAP_SILENCE_STDOUT: Redirect stdout of the test child to <filename>/dev/null</filename> so it cannot be observed on the console during test runs. The actual output is still captured though to allow later tests with g_test_trap_assert_stdout().
* @G_TEST_TRAP_SILENCE_STDERR: Redirect stderr of the test child to <filename>/dev/null</filename> so it cannot be observed on the console during test runs. The actual output is still captured though to allow later tests with g_test_trap_assert_stderr().
- * @G_TEST_TRAP_INHERIT_STDIN: If this flag is given, stdin of the forked child process is shared with stdin of its parent process. It is redirected to <filename>/dev/null</filename> otherwise.
+ * @G_TEST_TRAP_INHERIT_STDIN: If this flag is given, stdin of the child process is shared with stdin of its parent process. It is redirected to <filename>/dev/null</filename> otherwise.
*
* Test traps are guards around forked tests.
* These flags determine what traps to set.
+ *
+ * Deprecated: #GTestTrapFlags is used only with g_test_trap_fork(), which is deprecated. g_test_trap_subprocess() uses #GTestTrapSubprocessFlags.
*/
/**
* GTimeZone:
*
- * #GDateTime is an opaque structure whose members cannot be accessed
+ * #GTimeZone is an opaque structure whose members cannot be accessed
* directly.
*
* Since: 2.26
* format function the same as they would have been for the unmodified
* string).
*
- * Place the attribute after the function declaration, just after the
+ * Place the attribute after the function declaration, just before the
* semicolon.
*
* See the GNU C documentation for more details.
* @bookmark: a #GBookmarkFile
* @uri: a valid URI
* @name: an application's name
- * @exec: (allow-none): location for the command line of the application, or %NULL
- * @count: (allow-none): return location for the registration count, or %NULL
- * @stamp: (allow-none): return location for the last registration time, or %NULL
+ * @exec: (allow-none) (out): return location for the command line of the application, or %NULL
+ * @count: (allow-none) (out): return location for the registration count, or %NULL
+ * @stamp: (allow-none) (out): return location for the last registration time, or %NULL
* @error: return location for a #GError, or %NULL
*
* Gets the registration informations of @app_name for the bookmark for
* g_bookmark_file_get_applications:
* @bookmark: a #GBookmarkFile
* @uri: a valid URI
- * @length: (allow-none): return location of the length of the returned list, or %NULL
+ * @length: (allow-none) (out): return location of the length of the returned list, or %NULL
* @error: return location for a #GError, or %NULL
*
* Retrieves the names of the applications that have registered the
* In the event the URI cannot be found, %NULL is returned and
* @error is set to #G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND.
*
- * Returns: a newly allocated %NULL-terminated array of strings. Use g_strfreev() to free it.
+ * Returns: (array length=length) (transfer full): a newly allocated %NULL-terminated array of strings. Use g_strfreev() to free it.
* Since: 2.12
*/
* g_bookmark_file_get_groups:
* @bookmark: a #GBookmarkFile
* @uri: a valid URI
- * @length: (allow-none): return location for the length of the returned string, or %NULL
+ * @length: (allow-none) (out): return location for the length of the returned string, or %NULL
* @error: return location for a #GError, or %NULL
*
* Retrieves the list of group names of the bookmark for @uri.
* The returned array is %NULL terminated, so @length may optionally
* be %NULL.
*
- * Returns: a newly allocated %NULL-terminated array of group names. Use g_strfreev() to free it.
+ * Returns: (array length=length) (transfer full): a newly allocated %NULL-terminated array of group names. Use g_strfreev() to free it.
* Since: 2.12
*/
* g_bookmark_file_get_icon:
* @bookmark: a #GBookmarkFile
* @uri: a valid URI
- * @href: (allow-none): return location for the icon's location or %NULL
- * @mime_type: (allow-none): return location for the icon's MIME type or %NULL
+ * @href: (allow-none) (out): return location for the icon's location or %NULL
+ * @mime_type: (allow-none) (out): return location for the icon's MIME type or %NULL
* @error: return location for a #GError or %NULL
*
* Gets the icon of the bookmark for @uri.
/**
* g_bookmark_file_get_uris:
* @bookmark: a #GBookmarkFile
- * @length: (allow-none): return location for the number of returned URIs, or %NULL
+ * @length: (allow-none) (out): return location for the number of returned URIs, or %NULL
*
* Returns all URIs of the bookmarks in the bookmark file @bookmark.
* The array of returned URIs will be %NULL-terminated, so @length may
* optionally be %NULL.
*
- * Returns: a newly allocated %NULL-terminated array of strings. Use g_strfreev() to free it.
+ * Returns: (array length=length) (transfer full): a newly allocated %NULL-terminated array of strings. Use g_strfreev() to free it.
* Since: 2.12
*/
/**
* g_bookmark_file_to_data:
* @bookmark: a #GBookmarkFile
- * @length: (allow-none): return location for the length of the returned string, or %NULL
+ * @length: (allow-none) (out): return location for the length of the returned string, or %NULL
* @error: return location for a #GError, or %NULL
*
* This function outputs @bookmark as a string.
* slash-separated portions of @testpath. The @test_data argument
* will be passed as first argument to @test_func.
*
+ * If @testpath includes the component "subprocess" anywhere in it,
+ * the test will be skipped by default, and only run if explicitly
+ * required via the <option>-p</option> command-line option or
+ * g_test_trap_subprocess().
+ *
* Since: 2.16
*/
* created on the fly and added to the root fixture, based on the
* slash-separated portions of @testpath.
*
+ * If @testpath includes the component "subprocess" anywhere in it,
+ * the test will be skipped by default, and only run if explicitly
+ * required via the <option>-p</option> command-line option or
+ * g_test_trap_subprocess().
+ *
* Since: 2.16
*/
*
* Note that you cannot use this to test g_error() messages, since
* g_error() intentionally never returns even if the program doesn't
- * abort; use g_test_trap_fork() in this case.
+ * abort; use g_test_trap_subprocess() in this case.
*
* Since: 2.34
*/
* <term><option>-p <replaceable>TESTPATH</replaceable></option></term>
* <listitem><para>
* Execute all tests matching <replaceable>TESTPATH</replaceable>.
+ * This can also be used to force a test to run that would otherwise
+ * be skipped (ie, a test whose name contains "/subprocess").
* </para></listitem>
* </varlistentry>
* <varlistentry>
* <term>undefined</term>
* <listitem><para>
* Tests for undefined behaviour, may provoke programming errors
- * under g_test_trap_fork() to check that appropriate assertions
- * or warnings are given
+ * under g_test_trap_subprocess() or g_test_expect_messages() to check
+ * that appropriate assertions or warnings are given
* </para></listitem>
* </varlistentry>
* <varlistentry>
/**
+ * g_test_subprocess:
+ *
+ * Returns %TRUE (after g_test_init() has been called) if the test
+ * program is running under g_test_trap_subprocess().
+ *
+ * Returns: %TRUE if the test program is running under g_test_trap_subprocess().
+ * Since: 2.38
+ */
+
+
+/**
* g_test_suite_add:
* @suite: a #GTestSuite
* @test_case: a #GTestCase
/**
* g_test_trap_assert_failed:
*
- * Assert that the last forked test failed.
- * See g_test_trap_fork().
+ * Assert that the last test subprocess failed.
+ * See g_test_trap_subprocess().
*
* This is sometimes used to test situations that are formally considered to
* be undefined behaviour, like inputs that fail a g_return_if_fail()
* check. In these situations you should skip the entire test, including the
- * call to g_test_trap_fork(), unless g_test_undefined() returns %TRUE
+ * call to g_test_trap_subprocess(), unless g_test_undefined() returns %TRUE
* to indicate that undefined behaviour may be tested.
*
* Since: 2.16
/**
* g_test_trap_assert_passed:
*
- * Assert that the last forked test passed.
- * See g_test_trap_fork().
+ * Assert that the last test subprocess passed.
+ * See g_test_trap_subprocess().
*
* Since: 2.16
*/
* g_test_trap_assert_stderr:
* @serrpattern: a glob-style <link linkend="glib-Glob-style-pattern-matching">pattern</link>
*
- * Assert that the stderr output of the last forked test
- * matches @serrpattern. See g_test_trap_fork().
+ * Assert that the stderr output of the last test subprocess
+ * matches @serrpattern. See g_test_trap_subprocess().
*
- * This is sometimes used to test situations that are formally considered to
- * be undefined behaviour, like inputs that fail a g_return_if_fail()
- * check. In these situations you should skip the entire test, including the
- * call to g_test_trap_fork(), unless g_test_undefined() returns %TRUE
- * to indicate that undefined behaviour may be tested.
+ * This is sometimes used to test situations that are formally
+ * considered to be undefined behaviour, like code that hits a
+ * g_assert() or g_error(). In these situations you should skip the
+ * entire test, including the call to g_test_trap_subprocess(), unless
+ * g_test_undefined() returns %TRUE to indicate that undefined
+ * behaviour may be tested.
*
* Since: 2.16
*/
* g_test_trap_assert_stderr_unmatched:
* @serrpattern: a glob-style <link linkend="glib-Glob-style-pattern-matching">pattern</link>
*
- * Assert that the stderr output of the last forked test
- * does not match @serrpattern. See g_test_trap_fork().
+ * Assert that the stderr output of the last test subprocess
+ * does not match @serrpattern. See g_test_trap_subprocess().
*
* Since: 2.16
*/
* g_test_trap_assert_stdout:
* @soutpattern: a glob-style <link linkend="glib-Glob-style-pattern-matching">pattern</link>
*
- * Assert that the stdout output of the last forked test matches
- * @soutpattern. See g_test_trap_fork().
+ * Assert that the stdout output of the last test subprocess matches
+ * @soutpattern. See g_test_trap_subprocess().
*
* Since: 2.16
*/
* g_test_trap_assert_stdout_unmatched:
* @soutpattern: a glob-style <link linkend="glib-Glob-style-pattern-matching">pattern</link>
*
- * Assert that the stdout output of the last forked test
- * does not match @soutpattern. See g_test_trap_fork().
+ * Assert that the stdout output of the last test subprocess
+ * does not match @soutpattern. See g_test_trap_subprocess().
*
* Since: 2.16
*/
* @test_trap_flags: Flags to modify forking behaviour.
*
* Fork the current test program to execute a test case that might
- * not return or that might abort. The forked test case is aborted
- * and considered failing if its run time exceeds @usec_timeout.
+ * not return or that might abort.
+ *
+ * If @usec_timeout is non-0, the forked test case is aborted and
+ * considered failing if its run time exceeds it.
*
* The forking behavior can be configured with the #GTestTrapFlags flags.
*
* g_printerr ("some stderr text: semagic43\n");
* exit (0); /* successful test run */
* }
- * g_test_trap_assert_passed();
+ * g_test_trap_assert_passed ();
* g_test_trap_assert_stdout ("*somagic17*");
* g_test_trap_assert_stderr ("*semagic43*");
* }
* ]|
*
- * This function is implemented only on Unix platforms.
- *
* Returns: %TRUE for the forked child and %FALSE for the executing parent process.
* Since: 2.16
+ * Deprecated: This function is implemented only on Unix platforms, and is not always reliable due to problems inherent in fork-without-exec. Use g_test_trap_subprocess() instead.
*/
/**
* g_test_trap_has_passed:
*
- * Check the result of the last g_test_trap_fork() call.
+ * Check the result of the last g_test_trap_subprocess() call.
*
- * Returns: %TRUE if the last forked child terminated successfully.
+ * Returns: %TRUE if the last test subprocess terminated successfully.
* Since: 2.16
*/
/**
* g_test_trap_reached_timeout:
*
- * Check the result of the last g_test_trap_fork() call.
+ * Check the result of the last g_test_trap_subprocess() call.
*
- * Returns: %TRUE if the last forked child got killed due to a fork timeout.
+ * Returns: %TRUE if the last test subprocess got killed due to a timeout.
* Since: 2.16
*/
/**
+ * g_test_trap_subprocess:
+ * @test_name: Test to run in a subprocess
+ * @usec_timeout: Timeout for the subprocess test in micro seconds.
+ * @test_flags: Flags to modify subprocess behaviour.
+ *
+ * Respawns the test program to run only @test_name in a subprocess.
+ * This can be used for a test case that might not return, or that
+ * might abort. @test_name will normally be the name of the parent
+ * test, followed by "<literal>/subprocess/</literal>" and then a name
+ * for the specific subtest (or just ending with
+ * "<literal>/subprocess</literal>" if the test only has one child
+ * test); tests with names of this form will automatically be skipped
+ * in the parent process.
+ *
+ * If @usec_timeout is non-0, the test subprocess is aborted and
+ * considered failing if its run time exceeds it.
+ *
+ * The subprocess behavior can be configured with the
+ * #GTestSubprocessFlags flags.
+ *
+ * You can use methods such as g_test_trap_assert_passed(),
+ * g_test_trap_assert_failed(), and g_test_trap_assert_stderr() to
+ * check the results of the subprocess. (But note that
+ * g_test_trap_assert_stdout() and g_test_trap_assert_stderr()
+ * cannot be used if @test_flags specifies that the child should
+ * inherit the parent stdout/stderr.)
+ *
+ * If your <literal>main ()</literal> needs to behave differently in
+ * the subprocess, you can call g_test_subprocess() (after calling
+ * g_test_init()) to see whether you are in a subprocess.
+ *
+ * The following example tests that calling
+ * <literal>my_object_new(1000000)</literal> will abort with an error
+ * message.
+ *
+ * |[
+ * static void
+ * test_create_large_object_subprocess (void)
+ * {
+ * my_object_new (1000000);
+ * }
+ *
+ * static void
+ * test_create_large_object (void)
+ * {
+ * g_test_trap_subprocess ("/myobject/create_large_object/subprocess", 0, 0);
+ * g_test_trap_assert_failed ();
+ * g_test_trap_assert_stderr ("*ERROR*too large*");
+ * }
+ *
+ * int
+ * main (int argc, char **argv)
+ * {
+ * g_test_init (&argc, &argv, NULL);
+ *
+ * g_test_add_func ("/myobject/create_large_object",
+ * test_create_large_object);
+ * /* Because of the '/subprocess' in the name, this test will
+ * * not be run by the g_test_run () call below.
+ * */
+ * g_test_add_func ("/myobject/create_large_object/subprocess",
+ * test_create_large_object_subprocess);
+ *
+ * return g_test_run ();
+ * }
+ * ]|
+ *
+ * Since: 2.38
+ */
+
+
+/**
* g_test_undefined:
*
* Returns %TRUE if tests may provoke assertions and other formally-undefined
- * behaviour under g_test_trap_fork(), to verify that appropriate warnings
- * are given. It can be useful to turn this off if running tests under
- * valgrind.
+ * behaviour, to verify that appropriate warnings are given. It might, in some
+ * cases, be useful to turn this off if running tests under valgrind.
*
* Returns: %TRUE if tests may provoke programming errors
*/
*
* A reference is taken on @bytes.
*
- * Returns: a new #GVariant with a floating reference
+ * Returns: (transfer none): a new #GVariant with a floating reference
* Since: 2.36
*/
/**
+ * g_variant_new_take_string: (skip)
+ * @string: a normal utf8 nul-terminated string
+ *
+ * Creates a string #GVariant with the contents of @string.
+ *
+ * @string must be valid utf8.
+ *
+ * This function consumes @string. g_free() will be called on @string
+ * when it is no longer required.
+ *
+ * You must not modify or access @string in any other way after passing
+ * it to this function. It is even possible that @string is immediately
+ * freed.
+ *
+ * Returns: (transfer none): a floating reference to a new string #GVariant instance
+ * Since: 2.38
+ */
+
+
+/**
* g_variant_new_tuple:
* @children: (array length=n_children): the items to make the tuple out of
* @n_children: the length of @children
* either one of the #GObject instances it refers to are finalized, or when
* the #GBinding instance loses its last reference.
*
+ * <note><para>Bindings for languages with garbage collection can use
+ * g_binding_unbind() to explicitly release a binding between the source
+ * and target properties, instead of relying on the last reference on the
+ * binding, source, and target instances to drop.</para></note>
+ *
* #GBinding is available since GObject 2.26
*/
/**
+ * g_binding_unbind:
+ * @binding: a #GBinding
+ *
+ * Explicitly releases the binding between the source and the target
+ * property expressed by @binding.
+ *
+ * This function does not change the reference count of @binding.
+ *
+ * Since: 2.38
+ */
+
+
+/**
* g_boxed_copy:
* @boxed_type: The type of @src_boxed.
* @src_boxed: The boxed structure to be copied.
/**
+ * g_param_get_default_value:
+ * @param: a #GParamSpec
+ *
+ * Gets the default value of @param as a pointer to a #GValue.
+ *
+ * The #GValue will remain value for the life of @param.
+ *
+ * Returns: a pointer to a #GValue which must not be modified
+ * Since: 2.38
+ */
+
+
+/**
* g_param_spec_boolean:
* @name: canonical name of the property specified
* @nick: nick name for the property specified
/**
+ * g_type_class_get_instance_private_offset: (skip)
+ * @g_class: a #GTypeClass
+ *
+ * Gets the offset of the private data for instances of @g_class.
+ *
+ * This is how many bytes you should add to the instance pointer of a
+ * class in order to get the private data for the type represented by
+ * @g_class.
+ *
+ * You can only call this function after you have registered a private
+ * data area for @g_class using g_type_class_add_private().
+ *
+ * Returns: the offset, in bytes
+ * Since: 2.38
+ */
+
+
+/**
* g_type_class_peek:
* @type: Type ID of a classed type.
*
* Sort @value_array using @compare_func to compare the elements according to
* the semantics of #GCompareFunc.
*
- * The current implementation uses Quick-Sort as sorting algorithm.
+ * The current implementation uses the same sorting algorithm as standard
+ * C qsort() function.
*
* Returns: (transfer none): the #GValueArray passed in as @value_array
* Deprecated: 2.32: Use #GArray and g_array_sort().
* Sort @value_array using @compare_func to compare the elements according
* to the semantics of #GCompareDataFunc.
*
- * The current implementation uses Quick-Sort as sorting algorithm.
+ * The current implementation uses the same sorting algorithm as standard
+ * C qsort() function.
*
* Rename to: g_value_array_sort
* Returns: (transfer none): the #GValueArray passed in as @value_array
#include <string.h>
static void
+escaped_printf (GOutputStream *out, const char *fmt, ...) G_GNUC_PRINTF (2, 3);
+
+static void
escaped_printf (GOutputStream *out, const char *fmt, ...)
{
char *str;
GIRealInfo *rinfo = (GIRealInfo*)info;
g_assert (rinfo->ref_count != INVALID_REFCOUNT);
- ((GIRealInfo*)info)->ref_count++;
+ g_atomic_int_inc (&rinfo->ref_count);
return info;
}
GIRealInfo *rinfo = (GIRealInfo*)info;
g_assert (rinfo->ref_count > 0 && rinfo->ref_count != INVALID_REFCOUNT);
- rinfo->ref_count--;
- if (!rinfo->ref_count)
- {
- if (rinfo->container && ((GIRealInfo *) rinfo->container)->ref_count != INVALID_REFCOUNT)
- g_base_info_unref (rinfo->container);
+ if (!g_atomic_int_dec_and_test (&rinfo->ref_count))
+ return;
- if (rinfo->repository)
- g_object_unref (rinfo->repository);
+ if (rinfo->container && ((GIRealInfo *) rinfo->container)->ref_count != INVALID_REFCOUNT)
+ g_base_info_unref (rinfo->container);
- if (rinfo->type == GI_INFO_TYPE_UNRESOLVED)
- g_slice_free (GIUnresolvedInfo, (GIUnresolvedInfo *) rinfo);
- else
- g_slice_free (GIRealInfo, rinfo);
- }
+ if (rinfo->repository)
+ g_object_unref (rinfo->repository);
+
+ if (rinfo->type == GI_INFO_TYPE_UNRESOLVED)
+ g_slice_free (GIUnresolvedInfo, (GIUnresolvedInfo *) rinfo);
+ else
+ g_slice_free (GIRealInfo, rinfo);
}
/**
typedef struct _GIRealInfo GIRealInfo;
+/* We changed a gint32 -> gint in the structure below, which should be
+ * valid everywhere we care about.
+ */
+G_STATIC_ASSERT (sizeof (int) == sizeof (gint32));
+
/*
* We just use one structure for all of the info object
* types; in general, we should be reading data directly
{
/* Keep this part in sync with GIUnresolvedInfo below */
gint32 type;
- gint32 ref_count;
+ volatile gint ref_count;
GIRepository *repository;
GIBaseInfo *container;
{
/* Keep this part in sync with GIBaseInfo above */
gint32 type;
- gint32 ref_count;
+ volatile gint ref_count;
GIRepository *repository;
GIBaseInfo *container;
}
typedef struct {
- GIRepository *repository;
- GType type;
-
- gboolean fastpass;
+ const gchar *gtype_name;
GITypelib *result_typelib;
- DirEntry *result;
+ gboolean found_prefix;
} FindByGTypeData;
-static void
-find_by_gtype_foreach (gpointer key,
- gpointer value,
- gpointer datap)
+static DirEntry *
+find_by_gtype (GHashTable *table, FindByGTypeData *data, gboolean check_prefix)
{
- GITypelib *typelib = (GITypelib*)value;
- FindByGTypeData *data = datap;
+ GHashTableIter iter;
+ gpointer key, value;
+ DirEntry *ret;
- if (data->result != NULL)
- return;
+ g_hash_table_iter_init (&iter, table);
+ while (g_hash_table_iter_next (&iter, &key, &value))
+ {
+ GITypelib *typelib = (GITypelib*)value;
+ if (check_prefix)
+ {
+ if (!g_typelib_matches_gtype_name_prefix (typelib, data->gtype_name))
+ continue;
- data->result = g_typelib_get_dir_entry_by_gtype (typelib, data->fastpass, data->type);
- if (data->result)
- data->result_typelib = typelib;
+ data->found_prefix = TRUE;
+ }
+
+ ret = g_typelib_get_dir_entry_by_gtype_name (typelib, data->gtype_name);
+ if (ret)
+ {
+ data->result_typelib = typelib;
+ return ret;
+ }
+ }
+
+ return NULL;
}
/**
{
FindByGTypeData data;
GIBaseInfo *cached;
+ DirEntry *entry;
repository = get_repository (repository);
if (cached != NULL)
return g_base_info_ref (cached);
- data.repository = repository;
- data.fastpass = TRUE;
- data.type = gtype;
+ data.gtype_name = g_type_name (gtype);
data.result_typelib = NULL;
- data.result = NULL;
+ data.found_prefix = FALSE;
+
+ /* There is a corner case regarding GdkRectangle. GdkRectangle is a
+ * boxed type, but it is just an alias to boxed struct
+ * CairoRectangleInt. Scanner automatically converts all references
+ * to GdkRectangle to CairoRectangleInt, so GdkRectangle does not
+ * appear in the typelibs at all, although user code might query it.
+ * So if we get such query, we also change it to lookup of
+ * CairoRectangleInt.
+ * https://bugzilla.gnome.org/show_bug.cgi?id=655423
+ */
+ if (G_UNLIKELY (!strcmp (data.gtype_name, "GdkRectangle")))
+ data.gtype_name = "CairoRectangleInt";
+
+ /* Inside each typelib, we include the "C prefix" which acts as
+ * a namespace mechanism. For GtkTreeView, the C prefix is Gtk.
+ * Given the assumption that GTypes for a library also use the
+ * C prefix, we know we can skip examining a typelib if our
+ * target type does not have this typelib's C prefix. Use this
+ * assumption as our first attempt at locating the DirEntry.
+ */
+ entry = find_by_gtype (repository->priv->typelibs, &data, TRUE);
+ if (entry == NULL)
+ entry = find_by_gtype (repository->priv->lazy_typelibs, &data, TRUE);
- g_hash_table_foreach (repository->priv->typelibs, find_by_gtype_foreach, &data);
- if (data.result == NULL)
- g_hash_table_foreach (repository->priv->lazy_typelibs, find_by_gtype_foreach, &data);
+ /* If we have no result, but we did find a typelib claiming to
+ * offer bindings for such a prefix, bail out now on the assumption
+ * that a more exhaustive search would not produce any results.
+ */
+ if (entry == NULL && data.found_prefix)
+ return NULL;
- /* We do two passes; see comment in find_interface */
- if (data.result == NULL)
- {
- data.fastpass = FALSE;
- g_hash_table_foreach (repository->priv->typelibs, find_by_gtype_foreach, &data);
- }
- if (data.result == NULL)
- g_hash_table_foreach (repository->priv->lazy_typelibs, find_by_gtype_foreach, &data);
+ /* Not ever class library necessarily specifies a correct c_prefix,
+ * so take a second pass. This time we will try a global lookup,
+ * ignoring prefixes.
+ * See http://bugzilla.gnome.org/show_bug.cgi?id=564016
+ */
+ if (entry == NULL)
+ entry = find_by_gtype (repository->priv->typelibs, &data, FALSE);
+ if (entry == NULL)
+ entry = find_by_gtype (repository->priv->lazy_typelibs, &data, FALSE);
- if (data.result != NULL)
+ if (entry != NULL)
{
- cached = _g_info_new_full (data.result->blob_type,
+ cached = _g_info_new_full (entry->blob_type,
repository,
- NULL, data.result_typelib, data.result->offset);
+ NULL, data.result_typelib, entry->offset);
g_hash_table_insert (repository->priv->info_by_gtype,
(gpointer) gtype,
version = find_attribute ("version", attribute_names, attribute_values);
shared_library = find_attribute ("shared-library", attribute_names, attribute_values);
cprefix = find_attribute ("c:identifier-prefixes", attribute_names, attribute_values);
+ /* Backwards compatibility; vala currently still generates this */
+ if (cprefix == NULL)
+ cprefix = find_attribute ("c:prefix", attribute_names, attribute_values);
if (name == NULL)
MISSING_ATTRIBUTE (context, error, element_name, "name");
DirEntry *g_typelib_get_dir_entry_by_name (GITypelib *typelib,
const char *name);
-DirEntry *g_typelib_get_dir_entry_by_gtype (GITypelib *typelib,
- gboolean fastpass,
- GType gtype);
+DirEntry *g_typelib_get_dir_entry_by_gtype_name (GITypelib *typelib,
+ const gchar *gtype_name);
DirEntry *g_typelib_get_dir_entry_by_error_domain (GITypelib *typelib,
GQuark error_domain);
+gboolean g_typelib_matches_gtype_name_prefix (GITypelib *typelib,
+ const gchar *gtype_name);
+
void g_typelib_check_sanity (void);
#define g_typelib_get_string(typelib,offset) ((const gchar*)&(typelib->data)[(offset)])
}
DirEntry *
-g_typelib_get_dir_entry_by_gtype (GITypelib *typelib,
- gboolean fastpass,
- GType gtype)
+g_typelib_get_dir_entry_by_gtype_name (GITypelib *typelib,
+ const gchar *gtype_name)
{
Header *header = (Header *)typelib->data;
- guint n_entries = header->n_local_entries;
- const char *gtype_name = g_type_name (gtype);
- DirEntry *entry;
guint i;
- const char *c_prefix;
- /* There is a corner case regarding GdkRectangle. GdkRectangle is a
- boxed type, but it is just an alias to boxed struct
- CairoRectangleInt. Scanner automatically converts all references
- to GdkRectangle to CairoRectangleInt, so GdkRectangle does not
- appear in the typelibs at all, although user code might query it.
- So if we get such query, we also change it to lookup of
- CairoRectangleInt.
- https://bugzilla.gnome.org/show_bug.cgi?id=655423 */
- if (!fastpass && !strcmp (gtype_name, "GdkRectangle"))
- gtype_name = "CairoRectangleInt";
-
- /* Inside each typelib, we include the "C prefix" which acts as
- * a namespace mechanism. For GtkTreeView, the C prefix is Gtk.
- * Given the assumption that GTypes for a library also use the
- * C prefix, we know we can skip examining a typelib if our
- * target type does not have this typelib's C prefix.
- *
- * However, not every class library necessarily conforms to this,
- * e.g. Clutter has Cogl inside it. So, we split this into two
- * passes. First we try a lookup, skipping things which don't
- * have the prefix. If that fails then we try a global lookup,
- * ignoring the prefix.
- *
- * See http://bugzilla.gnome.org/show_bug.cgi?id=564016
- */
- c_prefix = g_typelib_get_string (typelib, header->c_prefix);
- if (fastpass && c_prefix != NULL)
- {
- if (g_ascii_strncasecmp (c_prefix, gtype_name, strlen (c_prefix)) != 0)
- return NULL;
- }
-
- for (i = 1; i <= n_entries; i++)
+ for (i = 1; i <= header->n_local_entries; i++)
{
RegisteredTypeBlob *blob;
const char *type;
-
- entry = g_typelib_get_dir_entry (typelib, i);
+ DirEntry *entry = g_typelib_get_dir_entry (typelib, i);
if (!BLOB_IS_REGISTERED_TYPE (entry))
continue;
return NULL;
}
+typedef struct {
+ const char *s;
+ const char *separator;
+ gsize sep_len;
+ GString buf;
+} StrSplitIter;
+
+static void
+strsplit_iter_init (StrSplitIter *iter,
+ const char *s,
+ const char *separator)
+{
+ iter->s = s;
+ iter->separator = separator;
+ iter->sep_len = strlen (separator);
+ iter->buf.str = NULL;
+ iter->buf.len = 0;
+ iter->buf.allocated_len = 0;
+}
+
+static gboolean
+strsplit_iter_next (StrSplitIter *iter,
+ char **out_val)
+{
+ const char *s = iter->s;
+ const char *next;
+ gsize len;
+
+ if (!s)
+ return FALSE;
+ next = strstr (s, iter->separator);
+ if (next)
+ {
+ iter->s = next + iter->sep_len;
+ len = next - s;
+ }
+ else
+ {
+ iter->s = NULL;
+ len = strlen (s);
+ }
+ if (len == 0)
+ {
+ *out_val = "";
+ }
+ else
+ {
+ g_string_overwrite_len (&iter->buf, 0, s, (gssize)len);
+ *out_val = iter->buf.str;
+ }
+ return TRUE;
+}
+
+static void
+strsplit_iter_clear (StrSplitIter *iter)
+{
+ g_free (iter->buf.str);
+}
+
+gboolean
+g_typelib_matches_gtype_name_prefix (GITypelib *typelib,
+ const gchar *gtype_name)
+{
+ Header *header = (Header *)typelib->data;
+ const char *c_prefix;
+ gchar *prefix;
+ gboolean ret = FALSE;
+ StrSplitIter split_iter;
+ gsize gtype_name_len;
+
+ c_prefix = g_typelib_get_string (typelib, header->c_prefix);
+ if (c_prefix == NULL || strlen (c_prefix) == 0)
+ return FALSE;
+
+ gtype_name_len = strlen (gtype_name);
+
+ /* c_prefix is a comma separated string of supported prefixes
+ * in the typelib.
+ * We match the specified gtype_name if the gtype_name starts
+ * with the prefix, and is followed by a capital letter.
+ * For example, a typelib offering the 'Gdk' prefix does match
+ * GdkX11Cursor, however a typelib offering the 'G' prefix does not.
+ */
+ strsplit_iter_init (&split_iter, c_prefix, ",");
+ while (strsplit_iter_next (&split_iter, &prefix))
+ {
+ size_t len = strlen (prefix);
+
+ if (gtype_name_len < len)
+ continue;
+
+ if (strncmp (prefix, gtype_name, len) != 0)
+ continue;
+
+ if (g_ascii_isupper (gtype_name[len]))
+ {
+ ret = TRUE;
+ break;
+ }
+ }
+ strsplit_iter_clear (&split_iter);
+ return ret;
+}
+
DirEntry *
g_typelib_get_dir_entry_by_error_domain (GITypelib *typelib,
GQuark error_domain)
create_source_scanner,
process_packages)
+
def annotation_main(args):
parser = optparse.OptionParser('%prog [options] sources')
import re
from . import message
-from .odict import odict
+from .collections import OrderedDict
# GTK-Doc comment block parts
# Program matching the start of a comment block.
#
# Results in 0 symbolic groups.
-COMMENT_START_RE = re.compile(r'''
+COMMENT_START_RE = re.compile(
+ r'''
^ # start
[^\S\n\r]* # 0 or more whitespace characters
/ # 1 forward slash character
#
# Results in 1 symbolic group:
# - group 1 = description
-COMMENT_END_RE = re.compile(r'''
+COMMENT_END_RE = re.compile(
+ r'''
^ # start
[^\S\n\r]* # 0 or more whitespace characters
(?P<description>.*?) # description text
# line inside a comment block.
#
# Results in 0 symbolic groups.
-COMMENT_ASTERISK_RE = re.compile(r'''
+COMMENT_ASTERISK_RE = re.compile(
+ r'''
^ # start
[^\S\n\r]* # 0 or more whitespace characters
\* # 1 asterisk character
#
# Results in 1 symbolic group:
# - group 1 = indentation
-COMMENT_INDENTATION_RE = re.compile(r'''
+COMMENT_INDENTATION_RE = re.compile(
+ r'''
^
(?P<indentation>[^\S\n\r]*) # 0 or more whitespace characters
.*
# Program matching an empty line.
#
# Results in 0 symbolic groups.
-EMPTY_LINE_RE = re.compile(r'''
+EMPTY_LINE_RE = re.compile(
+ r'''
^ # start
[^\S\n\r]* # 0 or more whitespace characters
$ # end
# Results in 2 symbolic groups:
# - group 1 = colon
# - group 2 = section_name
-SECTION_RE = re.compile(r'''
+SECTION_RE = re.compile(
+ r'''
^ # start
[^\S\n\r]* # 0 or more whitespace characters
SECTION # SECTION
# - group 1 = symbol_name
# - group 2 = colon
# - group 3 = annotations
-SYMBOL_RE = re.compile(r'''
+SYMBOL_RE = re.compile(
+ r'''
^ # start
[^\S\n\r]* # 0 or more whitespace characters
(?P<symbol_name>[\w-]*\w) # symbol name
# - group 2 = property_name
# - group 3 = colon
# - group 4 = annotations
-PROPERTY_RE = re.compile(r'''
+PROPERTY_RE = re.compile(
+ r'''
^ # start
[^\S\n\r]* # 0 or more whitespace characters
(?P<class_name>[\w]+) # class name
# - group 2 = signal_name
# - group 3 = colon
# - group 4 = annotations
-SIGNAL_RE = re.compile(r'''
+SIGNAL_RE = re.compile(
+ r'''
^ # start
[^\S\n\r]* # 0 or more whitespace characters
(?P<class_name>[\w]+) # class name
# - group 2 = annotations
# - group 3 = colon
# - group 4 = description
-PARAMETER_RE = re.compile(r'''
+PARAMETER_RE = re.compile(
+ r'''
^ # start
[^\S\n\r]* # 0 or more whitespace characters
@ # @ character
# - group 3 = colon
# - group 4 = description
_all_tags = '|'.join(_ALL_TAGS).replace(' ', '\\ ')
-TAG_RE = re.compile(r'''
+TAG_RE = re.compile(
+ r'''
^ # start
[^\S\n\r]* # 0 or more whitespace characters
(?P<tag_name>''' + _all_tags + r''') # tag name
# - group 2 = annotations
# - group 3 = colon
# - group 4 = description
-MULTILINE_ANNOTATION_CONTINUATION_RE = re.compile(r'''
+MULTILINE_ANNOTATION_CONTINUATION_RE = re.compile(
+ r'''
^ # start
[^\S\n\r]* # 0 or more whitespace characters
(?P<annotations>(?:\(.*?\)[^\S\n\r]*)*) # annotations
self.name = name
self.options = DocOptions()
self.value = None
- self.tags = odict()
+ self.tags = OrderedDict()
self.comment = None
- self.params = odict()
+ self.params = OrderedDict()
self.position = None
def __cmp__(self, other):
def __repr__(self):
return '<DocBlock %r %r>' % (self.name, self.options)
- def get_tag(self, name):
- return self.tags.get(name)
-
- def get_param(self, name):
- return self.params.get(name)
-
def to_gtk_doc(self):
options = ''
if self.options:
s = 'one value'
else:
s = '%d values' % (n_params, )
- if ((n_params > 0 and (value is None or value.length() != n_params)) or
- n_params == 0 and value is not None):
+ if ((n_params > 0 and (value is None or value.length() != n_params))
+ or n_params == 0 and value is not None):
if value is None:
length = 0
else:
if value is not None and value.length() > 1:
message.warn(
'closure takes at most 1 value, %d given' % (
- value.length()), self.position)
+ value.length(), ), self.position)
def _validate_element_type(self, option, value):
self._validate_option(option, value, required=True)
if value.length() > 2:
message.warn(
'element-type takes at most 2 values, %d given' % (
- value.length()), self.position)
+ value.length(), ), self.position)
return
def _validate_out(self, option, value):
if value.length() > 1:
message.warn(
'out annotation takes at most 1 value, %d given' % (
- value.length()), self.position)
+ value.length(), ), self.position)
return
value_str = value.one()
if value_str not in [OPT_OUT_CALLEE_ALLOCATES,
OPT_OUT_CALLER_ALLOCATES]:
message.warn("out annotation value is invalid: %r" % (
- value_str), self.position)
+ value_str, ), self.position)
return
def _get_gtk_doc_value(self):
def __init__(self, tag, option):
self.tag = tag
self._array = []
- self._dict = odict()
+ self._dict = OrderedDict()
# (annotation option1=value1 option2=value2) etc
for p in option.split(' '):
if '=' in p:
# emit a warning.
if comment_block.name in comment_blocks:
message.warn("multiple comment blocks documenting '%s:' identifier." %
- (comment_block.name),
+ (comment_block.name, ),
comment_block.position)
comment_blocks[comment_block.name] = comment_block
if description:
comment_lines[-1] = (line_offset, description)
position = message.Position(filename, lineno + line_offset)
- marker = ' '*result.end('description') + '^'
+ marker = ' ' * result.end('description') + '^'
message.warn("Comments should end with */ on a new line:\n%s\n%s" %
(line, marker),
position)
result = SECTION_RE.match(line)
if result:
identifier = IDENTIFIER_SECTION
- identifier_name = 'SECTION:%s' % (result.group('section_name'))
+ identifier_name = 'SECTION:%s' % (result.group('section_name'), )
column = result.start('section_name') + column_offset
if not identifier:
result = SYMBOL_RE.match(line)
if result:
identifier = IDENTIFIER_SYMBOL
- identifier_name = '%s' % (result.group('symbol_name'))
+ identifier_name = '%s' % (result.group('symbol_name'), )
column = result.start('symbol_name') + column_offset
if not identifier:
if 'colon' in result.groupdict() and result.group('colon') != ':':
colon_start = result.start('colon')
colon_column = column_offset + colon_start
- marker = ' '*colon_column + '^'
+ marker = ' ' * colon_column + '^'
message.warn("missing ':' at column %s:\n%s\n%s" %
(colon_column + 1, original_line, marker),
position)
# right thing to do because sooner or later some long
# descriptions will contain something matching an identifier
# pattern by accident.
- marker = ' '*column_offset + '^'
+ marker = ' ' * column_offset + '^'
message.warn('ignoring unrecognized GTK-Doc comment block, identifier not '
'found:\n%s\n%s' % (original_line, marker),
position)
if in_part != PART_PARAMETERS:
column = result.start('parameter_name') + column_offset
- marker = ' '*column + '^'
+ marker = ' ' * column + '^'
message.warn("'@%s' parameter unexpected at this location:\n%s\n%s" %
(param_name, original_line, marker),
position)
returns_seen = True
else:
message.warn("encountered multiple 'Returns' parameters or tags for "
- "'%s'." % (comment_block.name),
+ "'%s'." % (comment_block.name, ),
position)
elif param_name in comment_block.params.keys():
column = result.start('parameter_name') + column_offset
- marker = ' '*column + '^'
+ marker = ' ' * column + '^'
message.warn("multiple '@%s' parameters for identifier '%s':\n%s\n%s" %
(param_name, comment_block.name, original_line, marker),
position)
# identifier (when there are no parameters) and encounter an empty
# line, we must be parsing the comment block description.
####################################################################
- if (EMPTY_LINE_RE.match(line)
- and in_part in [PART_IDENTIFIER, PART_PARAMETERS]):
+ if (EMPTY_LINE_RE.match(line) and in_part in [PART_IDENTIFIER, PART_PARAMETERS]):
in_part = PART_DESCRIPTION
part_indent = line_indent
continue
tag_annotations = result.group('annotations')
tag_description = result.group('description')
- marker = ' '*(result.start('tag_name') + column_offset) + '^'
+ marker = ' ' * (result.start('tag_name') + column_offset) + '^'
# Deprecated GTK-Doc Description: tag
if tag_name.lower() == TAG_DESCRIPTION:
if in_part != PART_TAGS:
column = result.start('tag_name') + column_offset
- marker = ' '*column + '^'
+ marker = ' ' * column + '^'
message.warn("'%s:' tag unexpected at this location:\n%s\n%s" %
(tag_name, original_line, marker),
position)
returns_seen = True
else:
message.warn("encountered multiple 'Returns' parameters or tags for "
- "'%s'." % (comment_block.name),
+ "'%s'." % (comment_block.name, ),
position)
tag = DocTag(comment_block, TAG_RETURNS)
else:
if tag_name.lower() in comment_block.tags.keys():
column = result.start('tag_name') + column_offset
- marker = ' '*column + '^'
+ marker = ' ' * column + '^'
message.warn("multiple '%s:' tags for identifier '%s':\n%s\n%s" %
(tag_name, comment_block.name, original_line, marker),
position)
tag.options = self.parse_options(tag, tag_annotations)
else:
message.warn("annotations not supported for tag '%s:'." %
- (tag_name),
+ (tag_name, ),
position)
comment_block.tags[tag_name.lower()] = tag
current_tag = tag
part.value = ''
def _validate_multiline_annotation_continuation(self, line, original_line,
- column_offset, position):
+ column_offset, position):
'''
Validate parameters and tags (except the first line) and generate
warnings about invalid annotations spanning multiple lines.
result = MULTILINE_ANNOTATION_CONTINUATION_RE.match(line)
if result:
column = result.start('annotations') + column_offset
- marker = ' '*column + '^'
+ marker = ' ' * column + '^'
message.warn('ignoring invalid multiline annotation continuation:\n'
'%s\n%s' % (original_line, marker),
position)
for i, c in enumerate(value):
if c == '(' and opened == -1:
- opened = i+1
+ opened = i + 1
if c == ')' and opened != -1:
segment = value[opened:i]
parts = segment.split(' ', 1)
from . import message
+from .collections import OrderedDict
from .message import Position
-from .odict import odict
from .utils import to_underscores
+
class Type(object):
- """A Type can be either:
-* A reference to a node (target_giname)
-* A reference to a "fundamental" type like 'utf8'
-* A "foreign" type - this can be any string."
-If none are specified, then it's in an "unresolved" state. An
-unresolved type can have two data sources; a "ctype" which comes
-from a C type string, or a gtype_name (from g_type_name()).
-""" # '''
+ """
+ A Type can be either:
+ * A reference to a node (target_giname)
+ * A reference to a "fundamental" type like 'utf8'
+ * A "foreign" type - this can be any string."
+ If none are specified, then it's in an "unresolved" state. An
+ unresolved type can have two data sources; a "ctype" which comes
+ from a C type string, or a gtype_name (from g_type_name()).
+ """
def __init__(self,
ctype=None,
def __cmp__(self, other):
if self.target_fundamental:
return cmp(self.target_fundamental, other.target_fundamental)
- if self.target_giname:
+ elif self.target_giname:
return cmp(self.target_giname, other.target_giname)
- if self.target_foreign:
+ elif self.target_foreign:
return cmp(self.target_foreign, other.target_foreign)
- return cmp(self.ctype, other.ctype)
+ else:
+ return cmp(self.ctype, other.ctype)
def is_equiv(self, typeval):
"""Return True if the specified types are compatible at
data = ''
return '%s(%sctype=%s)' % (self.__class__.__name__, data, self.ctype)
+
class TypeUnknown(Type):
def __init__(self):
Type.__init__(self, _target_unknown=True)
class Namespace(object):
- def __init__(self, name, version,
- identifier_prefixes=None,
- symbol_prefixes=None):
+ def __init__(self, name, version, identifier_prefixes=None, symbol_prefixes=None):
self.name = name
self.version = version
if identifier_prefixes is not None:
self.symbol_prefixes = [to_underscores(p).lower() for p in ps]
# cache upper-cased versions
self._ucase_symbol_prefixes = [p.upper() for p in self.symbol_prefixes]
- self.names = odict() # Maps from GIName -> node
- self.aliases = {} # Maps from GIName -> GIName
- self.type_names = {} # Maps from GTName -> node
- self.ctypes = {} # Maps from CType -> node
- self.symbols = {} # Maps from function symbols -> Function
- self.includes = set() # Include
- self.shared_libraries = [] # str
- self.c_includes = [] # str
- self.exported_packages = [] # str
+ self.names = OrderedDict() # Maps from GIName -> node
+ self.aliases = {} # Maps from GIName -> GIName
+ self.type_names = {} # Maps from GTName -> node
+ self.ctypes = {} # Maps from CType -> node
+ self.symbols = {} # Maps from function symbols -> Function
+ self.includes = set() # Include
+ self.shared_libraries = [] # str
+ self.c_includes = [] # str
+ self.exported_packages = [] # str
def type_from_name(self, name, ctype=None):
"""Backwards compatibility method for older .gir files, which
if isinstance(node, (Class, Interface)):
for m in chain(node.signals, node.properties):
m.namespace = self
- if isinstance(node, Enum) or isinstance(node, Bitfield):
+ if isinstance(node, (Enum, Bitfield)):
for fn in node.static_methods:
if not isinstance(fn, Function):
continue
for node in self.itervalues():
node.walk(callback, [])
+
class Include(object):
def __init__(self, name, version):
def __str__(self):
return '%s-%s' % (self.name, self.version)
+
class Annotated(object):
"""An object which has a few generic metadata
properties."""
self.version = None
self.skip = False
self.introspectable = True
- self.attributes = [] # (key, value)*
+ self.attributes = [] # (key, value)*
self.stability = None
self.deprecated = None
self.deprecated_version = None
self.doc = None
+
class Node(Annotated):
"""A node is a type of object which is uniquely identified by its
(namespace, name) pair. When combined with a ., this is called a
def __init__(self, name=None):
Annotated.__init__(self)
- self.namespace = None # Should be set later by Namespace.append()
+ self.namespace = None # Should be set later by Namespace.append()
self.name = name
self.foreign = False
self.file_positions = set()
self.retval = retval
self.parameters = parameters
self.throws = not not throws
- self.instance_parameter = None # Parameter
- self.parent = None # A Class or Interface
+ self.instance_parameter = None # Parameter
+ self.parent = None # A Class or Interface
# Returns all parameters, including the instance parameter
@property
self.symbol = symbol
self.is_method = False
self.is_constructor = False
- self.shadowed_by = None # C symbol string
- self.shadows = None # C symbol string
- self.moved_to = None # namespaced function name string
- self.internal_skipped = False # if True, this func will not be written to GIR
+ self.shadowed_by = None # C symbol string
+ self.shadows = None # C symbol string
+ self.moved_to = None # namespaced function name string
+ self.internal_skipped = False # if True, this func will not be written to GIR
def clone(self):
clone = copy.copy(self)
def is_type_meta_function(self):
# Named correctly
- if not (self.name.endswith('_get_type') or
- self.name.endswith('_get_gtype')):
+ if not (self.name.endswith('_get_type') or self.name.endswith('_get_gtype')):
return False
# Doesn't have any parameters
# Returns GType
rettype = self.retval.type
- if (not rettype.is_equiv(TYPE_GTYPE) and
- rettype.target_giname != 'Gtk.Type'):
- message.warn("function '%s' returns '%r', not a GType" %
- (self.name, rettype))
+ if (not rettype.is_equiv(TYPE_GTYPE) and rettype.target_giname != 'Gtk.Type'):
+ message.warn("function '%s' returns '%r', not a GType" % (self.name, rettype))
return False
return True
+
class ErrorQuarkFunction(Function):
def __init__(self, name, retval, parameters, throws, symbol, error_domain):
return obj
-
class Varargs(Type):
def __init__(self):
arr.size = self.size
return arr
+
class List(Type):
def __init__(self, name, element_type, **kwargs):
def clone(self):
return List(self.name, self.element_type)
+
class Map(Type):
def __init__(self, key_type, value_type, **kwargs):
def clone(self):
return Map(self.key_type, self.value_type)
+
class Alias(Node):
def __init__(self, name, target, ctype=None):
if field.anonymous_node is not None:
field.anonymous_node.walk(callback, chain)
+
class Field(Annotated):
def __init__(self, name, typenode, readable, writable, bits=None,
self.bits = bits
self.anonymous_node = anonymous_node
self.private = False
- self.parent = None # a compound
+ self.parent = None # a compound
def __cmp__(self, other):
return cmp(self.name, other.name)
self.transfer = PARAM_TRANSFER_NONE
else:
self.transfer = transfer
- self.parent = None # A Class or Interface
+ self.parent = None # A Class or Interface
class Callback(Callable):
_CACHE_VERSION_FILENAME = '.cache-version'
+
def _get_versionhash():
toplevel = os.path.dirname(giscanner.__file__)
# Use pyc instead of py to avoid extra IO
mtimes = (str(os.stat(source).st_mtime) for source in sources)
return hashlib.sha1(''.join(mtimes)).hexdigest()
+
def _get_cachedir():
if 'GI_SCANNER_DISABLE_CACHE' in os.environ:
return None
def __init__(self):
try:
self._directory = _get_cachedir()
- except OSError, e:
+ except OSError as e:
if e.errno != errno.EPERM:
raise
self._directory = None
version = os.path.join(self._directory, _CACHE_VERSION_FILENAME)
try:
cache_hash = open(version).read()
- except IOError, e:
+ except IOError as e:
# File does not exist
if e.errno == errno.ENOENT:
cache_hash = 0
self._clean()
try:
fp = open(version, 'w')
- except IOError, e:
+ except IOError as e:
# Permission denied
if e.errno == errno.EACCES:
return
def _remove_filename(self, filename):
try:
os.unlink(filename)
- except IOError, e:
+ except IOError as e:
# Permission denied
if e.errno == errno.EACCES:
return
else:
raise
- except OSError, e:
+ except OSError as e:
# File does not exist
if e.errno == errno.ENOENT:
return
if store_filename is None:
return
- if (os.path.exists(store_filename) and
- self._cache_is_valid(store_filename, filename)):
+ if (os.path.exists(store_filename) and self._cache_is_valid(store_filename, filename)):
return None
tmp_fd, tmp_filename = tempfile.mkstemp(prefix='g-ir-scanner-cache-')
try:
cPickle.dump(data, os.fdopen(tmp_fd, 'w'))
- except IOError, e:
+ except IOError as e:
# No space left on device
if e.errno == errno.ENOSPC:
self._remove_filename(tmp_filename)
try:
shutil.move(tmp_filename, store_filename)
- except IOError, e:
+ except IOError as e:
# Permission denied
if e.errno == errno.EACCES:
self._remove_filename(tmp_filename)
return
try:
fd = open(store_filename)
- except IOError, e:
+ except IOError as e:
if e.errno == errno.ENOENT:
return None
else:
from . import ast
+
class CCodeGenerator(object):
def __init__(self, namespace, out_h_filename, out_c_filename):
self.out_h_filename = out_h_filename
return '%s_%s' % (self.namespace.symbol_prefixes[0], name)
def _typecontainer_to_ctype(self, param):
- if (isinstance(param, ast.Parameter) and
- param.direction in (ast.PARAM_DIRECTION_OUT,
- ast.PARAM_DIRECTION_INOUT)):
+ if (isinstance(param, ast.Parameter)
+ and param.direction in (ast.PARAM_DIRECTION_OUT, ast.PARAM_DIRECTION_INOUT)):
suffix = '*'
else:
suffix = ''
- if (param.type.is_equiv((ast.TYPE_STRING, ast.TYPE_FILENAME)) and
- param.transfer == ast.PARAM_TRANSFER_NONE):
+
+ if (param.type.is_equiv((ast.TYPE_STRING, ast.TYPE_FILENAME))
+ and param.transfer == ast.PARAM_TRANSFER_NONE):
return "const gchar*" + suffix
+
return param.type.ctype + suffix
def _write_prelude(self, out, func):
--- /dev/null
+# -*- Mode: Python -*-
+# GObject-Introspection - a framework for introspecting GObject libraries
+# Copyright (C) 2013 Dieter Verfaillie <dieterv@optionexplicit.be>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+
+
+from .ordereddict import OrderedDict
--- /dev/null
+# -*- Mode: Python -*-
+# GObject-Introspection - a framework for introspecting GObject libraries
+# Copyright (C) 2008 Johan Dahlin
+# Copyright (C) 2013 Dieter Verfaillie <dieterv@optionexplicit.be>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+
+# Borrowed from:
+# http://hg.sqlalchemy.org/sqlalchemy/raw-file/77e2264283d4/lib/sqlalchemy/util/_collections.py
+# http://hg.sqlalchemy.org/sqlalchemy/raw-file/77e2264283d4/AUTHORS
+#
+# util/_collections.py
+# Copyright (C) 2005-2012 the SQLAlchemy authors and contributors <see AUTHORS file>
+#
+# This module is part of SQLAlchemy and is released under
+# the MIT License: http://www.opensource.org/licenses/mit-license.php
+
+
+class OrderedDict(dict):
+ """A dict that returns keys/values/items in the order they were added."""
+
+ def __init__(self, ____sequence=None, **kwargs):
+ self._list = []
+ if ____sequence is None:
+ if kwargs:
+ self.update(**kwargs)
+ else:
+ self.update(____sequence, **kwargs)
+
+ def clear(self):
+ self._list = []
+ dict.clear(self)
+
+ def copy(self):
+ return self.__copy__()
+
+ def __copy__(self):
+ return OrderedDict(self)
+
+ def sort(self, *arg, **kw):
+ self._list.sort(*arg, **kw)
+
+ def update(self, ____sequence=None, **kwargs):
+ if ____sequence is not None:
+ if hasattr(____sequence, 'keys'):
+ for key in ____sequence.keys():
+ self.__setitem__(key, ____sequence[key])
+ else:
+ for key, value in ____sequence:
+ self[key] = value
+ if kwargs:
+ self.update(kwargs)
+
+ def setdefault(self, key, value):
+ if key not in self:
+ self.__setitem__(key, value)
+ return value
+ else:
+ return self.__getitem__(key)
+
+ def __iter__(self):
+ return iter(self._list)
+
+ def values(self):
+ return [self[key] for key in self._list]
+
+ def itervalues(self):
+ return iter([self[key] for key in self._list])
+
+ def keys(self):
+ return list(self._list)
+
+ def iterkeys(self):
+ return iter(self.keys())
+
+ def items(self):
+ return [(key, self[key]) for key in self.keys()]
+
+ def iteritems(self):
+ return iter(self.items())
+
+ def __setitem__(self, key, obj):
+ if key not in self:
+ try:
+ self._list.append(key)
+ except AttributeError:
+ # work around Python pickle loads() with
+ # dict subclass (seems to ignore __setstate__?)
+ self._list = [key]
+ dict.__setitem__(self, key, obj)
+
+ def __delitem__(self, key):
+ dict.__delitem__(self, key)
+ self._list.remove(key)
+
+ def pop(self, key, *default):
+ present = key in self
+ value = dict.pop(self, key, *default)
+ if present:
+ self._list.remove(key)
+ return value
+
+ def popitem(self):
+ item = dict.popitem(self)
+ self._list.remove(item[0])
+ return item
from .docwriter import DocWriter
from .transformer import Transformer
+
def doc_main(args):
parser = optparse.OptionParser('%prog [options] GIR-file')
from . import ast, xmlwriter
from .utils import to_underscores
+
def make_page_id(node, recursive=False):
if isinstance(node, ast.Namespace):
if recursive:
else:
return '%s.%s' % (make_page_id(parent, recursive=True), node.name)
+
def get_node_kind(node):
if isinstance(node, ast.Namespace):
node_kind = 'namespace'
return node_kind
+
class TemplatedScanner(object):
def __init__(self, specs):
self.specs = self.unmangle_specs(specs)
if pos < len(text):
yield ('other', text[pos:], None)
+
class DocstringScanner(TemplatedScanner):
def __init__(self):
specs = [
super(DocstringScanner, self).__init__(specs)
+
class DocFormatter(object):
def __init__(self, transformer):
self._transformer = transformer
try:
prop = self._find_thing(type_node.properties, props['property_name'])
- except (AttributeError, KeyError), e:
+ except (AttributeError, KeyError):
return match
return self.format_xref(prop)
try:
signal = self._find_thing(type_node.signals, props['signal_name'])
- except (AttributeError, KeyError), e:
+ except (AttributeError, KeyError):
return match
return self.format_xref(signal)
def _process_parameter(self, node, match, props):
try:
parameter = node.get_parameter(props['param_name'])
- except (AttributeError, ValueError), e:
+ except (AttributeError, ValueError):
return match
return '<code>%s</code>' % (self.format_parameter_name(node, parameter), )
parent_chain.reverse()
return parent_chain
+
class DocFormatterC(DocFormatter):
language = "C"
mime_type = "text/x-csrc"
return getattr(node, 'ctype')
def format_function_name(self, func):
- if isinstance(func, (ast.Function)):
+ if isinstance(func, ast.Function):
return func.symbol
else:
return func.name
def get_parameters(self, node):
return node.all_parameters
+
class DocFormatterIntrospectableBase(DocFormatter):
def should_render_node(self, node):
if isinstance(node, ast.Record) and node.is_gtype_struct_for is not None:
return super(DocFormatterIntrospectableBase, self).should_render_node(node)
+
class DocFormatterPython(DocFormatterIntrospectableBase):
language = "Python"
mime_type = "text/python"
if getattr(node, "is_method", False):
return True
- if isinstance(node, (ast.VFunction)):
+ if isinstance(node, ast.VFunction):
return True
return False
"GParam": "GLib.Param",
"PyObject": "object",
"GStrv": "[str]",
- "GVariant": "GLib.Variant",
- }
+ "GVariant": "GLib.Variant"}
return fundamental_types.get(name, name)
def get_parameters(self, node):
return node.all_parameters
+
class DocFormatterGjs(DocFormatterIntrospectableBase):
language = "Gjs"
mime_type = "text/x-gjs"
if getattr(node, "is_method", False):
return True
- if isinstance(node, (ast.VFunction)):
+ if isinstance(node, ast.VFunction):
return True
return False
"GParam": "GLib.Param",
"PyObject": "Object",
"GStrv": "[String]",
- "GVariant": "GLib.Variant",
- }
+ "GVariant": "GLib.Variant"}
return fundamental_types.get(name, name)
params.append(param)
return params
+
LANGUAGES = {
"c": DocFormatterC,
"python": DocFormatterPython,
"gjs": DocFormatterGjs,
}
+
class DocWriter(object):
def __init__(self, transformer, language):
self._transformer = transformer
# Enable the --msvc-syntax pkg-config flag when
# the Microsoft compiler is used
# (This is the other way to check whether Visual C++ is used subsequently)
- if 'cl' in self._compiler_cmd:
- self._pkgconfig_msvc_flags = '--msvc-syntax'
+ if 'clang' not in self._compiler_cmd:
+ if 'cl' in self._compiler_cmd:
+ self._pkgconfig_msvc_flags = '--msvc-syntax'
self._uninst_srcdir = os.environ.get(
'UNINSTALLED_INTROSPECTION_SRCDIR')
self._packages = ['gio-2.0 gmodule-2.0']
try:
self._compile(o_path, c_path)
- except CompilerError, e:
+ except CompilerError as e:
if not utils.have_debug_flag('save-temps'):
shutil.rmtree(tmpdir)
raise SystemExit('compilation of temporary binary failed:' + str(e))
try:
self._link(bin_path, o_path)
- except LinkerError, e:
+ except LinkerError as e:
if not utils.have_debug_flag('save-temps'):
shutil.rmtree(tmpdir)
raise SystemExit('linking of temporary binary failed: ' + str(e))
# The Microsoft compiler uses different option flags for
# compilation result output
if self._pkgconfig_msvc_flags:
- args.extend(['-c', '-Fe'+output, '-Fo'+output])
+ args.extend(['-c', '-Fe' + output, '-Fo' + output])
else:
args.extend(['-c', '-o', output])
for source in sources:
sys.stdout.flush()
try:
subprocess.check_call(args)
- except subprocess.CalledProcessError, e:
+ except subprocess.CalledProcessError as e:
raise CompilerError(e)
def _link(self, output, *sources):
# We can use -o for the Microsoft compiler/linker,
# but it is considered deprecated usage with that
if self._pkgconfig_msvc_flags:
- args.extend(['-Fe'+output])
+ args.extend(['-Fe' + output])
else:
args.extend(['-o', output])
if libtool:
sys.stdout.flush()
try:
subprocess.check_call(args)
- except subprocess.CalledProcessError, e:
+ except subprocess.CalledProcessError as e:
raise LinkerError(e)
def _add_link_internal_args(self, args, libtool):
if self._options.namespace_version:
args.append(str.lower(self._options.namespace_name) +
'-' +
- self._options.namespace_version+'.lib')
+ self._options.namespace_version + '.lib')
else:
- args.append(str.lower(self._options.namespace_name)+'.lib')
+ args.append(str.lower(self._options.namespace_name) + '.lib')
else:
args.append('-Wl,-rpath=.')
+ # Ensure libraries are always linked as we are going to use ldd to work
+ # out their names later
+ if not libtool and self._pkgconfig_msvc_flags == '':
+ args.append('-Wl,--no-as-needed')
+
for library in self._options.libraries:
# Visual C++: We have the needed .lib files now, and we need to link
# to .lib files, not the .dll as the --library option specifies the
# .dll(s) the .gir file refers to
if self._pkgconfig_msvc_flags == '':
- if library.endswith(".la"): # explicitly specified libtool library
+ if library.endswith(".la"): # explicitly specified libtool library
args.append(library)
else:
args.append('-l' + library)
# The --library option on Windows pass in the .dll file(s) the
# .gir files refer to, so don't link to them on Visual C++
if self._pkgconfig_msvc_flags == '':
- if library.endswith(".la"): # explicitly specified libtool library
+ if library.endswith(".la"): # explicitly specified libtool library
args.append(library)
else:
args.append('-l' + library)
+
def compile_introspection_binary(options, get_type_functions,
error_quark_functions):
dc = DumpCompiler(options, get_type_functions, error_quark_functions)
try:
try:
subprocess.check_call(args, stdout=sys.stdout, stderr=sys.stderr)
- except subprocess.CalledProcessError, e:
+ except subprocess.CalledProcessError as e:
# Clean up temporaries
raise SystemExit(e)
return parse(out_path)
def _initparse_gobject_record(self, record):
if (record.name.startswith('ParamSpec')
- and not record.name in ('ParamSpecPool', 'ParamSpecClass',
- 'ParamSpecTypeInfo')):
+ and not record.name in ('ParamSpecPool', 'ParamSpecClass', 'ParamSpecTypeInfo')):
parent = None
if record.name != 'ParamSpec':
parent = ast.Type(target_giname='GObject.ParamSpec')
(get_type, c_symbol_prefix) = self._split_type_and_symbol_prefix(xmlnode)
try:
enum_name = self._transformer.strip_identifier(type_name)
- except TransformerException, e:
+ except TransformerException as e:
message.fatal(e)
# The scanned member values are more accurate than the values that the
member.attrib['name'],
member.attrib['nick']))
-
if xmlnode.tag == 'flags':
klass = ast.Bitfield
else:
(get_type, c_symbol_prefix) = self._split_type_and_symbol_prefix(xmlnode)
try:
object_name = self._transformer.strip_identifier(type_name)
- except TransformerException, e:
+ except TransformerException as e:
message.fatal(e)
node = ast.Class(object_name, None,
gtype_name=type_name,
(get_type, c_symbol_prefix) = self._split_type_and_symbol_prefix(xmlnode)
try:
interface_name = self._transformer.strip_identifier(type_name)
- except TransformerException, e:
+ except TransformerException as e:
message.fatal(e)
node = ast.Interface(interface_name, None,
gtype_name=type_name,
try:
name = self._transformer.strip_identifier(type_name)
- except TransformerException, e:
+ except TransformerException as e:
message.fatal(e)
# This one doesn't go in the main namespace; we associate it with
# the struct or union
if i == 0:
argname = 'object'
else:
- argname = 'p%s' % (i-1, )
+ argname = 'p%s' % (i - 1, )
pctype = parameter.attrib['type']
ptype = ast.Type.create_from_gtype_name(pctype)
param = ast.Parameter(argname, ptype)
(get_type, c_symbol_prefix) = self._split_type_and_symbol_prefix(xmlnode)
try:
fundamental_name = self._transformer.strip_identifier(type_name)
- except TransformerException, e:
+ except TransformerException as e:
message.warn(e)
return
def _pair_boxed_type(self, boxed):
try:
name = self._transformer.strip_identifier(boxed.gtype_name)
- except TransformerException, e:
+ except TransformerException as e:
message.fatal(e)
pair_node = self._namespace.get(name)
if not pair_node:
return False
def _strip_class_suffix(self, name):
- if (name.endswith('Class') or
- name.endswith('Iface')):
+ if (name.endswith('Class') or name.endswith('Iface')):
return name[:-5]
elif name.endswith('Interface'):
return name[:-9]
assert root.tag == _corens('repository')
version = root.attrib['version']
if version != COMPATIBLE_GIR_VERSION:
- raise SystemExit("%s: Incompatible version %s (supported: %s)" \
- % (self._get_current_file(),
- version, COMPATIBLE_GIR_VERSION))
+ raise SystemExit("%s: Incompatible version %s (supported: %s)" %
+ (self._get_current_file(), version, COMPATIBLE_GIR_VERSION))
for node in root.getchildren():
if node.tag == _corens('include'):
if symbol_prefixes:
symbol_prefixes = symbol_prefixes.split(',')
self._namespace = ast.Namespace(ns.attrib['name'],
- ns.attrib['version'],
- identifier_prefixes=identifier_prefixes,
- symbol_prefixes=symbol_prefixes)
+ ns.attrib['version'],
+ identifier_prefixes=identifier_prefixes,
+ symbol_prefixes=symbol_prefixes)
if 'shared-library' in ns.attrib:
self._namespace.shared_libraries = ns.attrib['shared-library'].split(',')
self._namespace.includes = self._includes
_corens('interface'): self._parse_object_interface,
_corens('record'): self._parse_record,
_corens('union'): self._parse_union,
- _glibns('boxed'): self._parse_boxed,
- }
+ _glibns('boxed'): self._parse_boxed}
if not self._types_only:
parser_methods[_corens('constant')] = self._parse_constant
method(node)
def _parse_include(self, node):
- include = ast.Include(node.attrib['name'],
- node.attrib['version'])
+ include = ast.Include(node.attrib['name'], node.attrib['version'])
self._includes.add(include)
def _parse_pkgconfig_package(self, node):
def _parse_alias(self, node):
typeval = self._parse_type(node)
- alias = ast.Alias(node.attrib['name'],
- typeval,
- node.attrib.get(_cns('type')))
+ alias = ast.Alias(node.attrib['name'], typeval, node.attrib.get(_cns('type')))
self._parse_generic_attribs(node, alias)
self._namespace.append(alias)
return ast.Type(ctype=ctype)
elif name in ['GLib.List', 'GLib.SList']:
subchild = self._find_first_child(typenode,
- map(_corens, ('callback', 'array', 'varargs', 'type')))
+ map(_corens, ('callback', 'array',
+ 'varargs', 'type')))
if subchild is not None:
element_type = self._parse_type(typenode)
else:
subchildren_types = map(self._parse_type_simple, subchildren)
while len(subchildren_types) < 2:
subchildren_types.append(ast.TYPE_ANY)
- return ast.Map(subchildren_types[0],
- subchildren_types[1],
- ctype=ctype)
+ return ast.Map(subchildren_types[0], subchildren_types[1], ctype=ctype)
else:
return self._namespace.type_from_name(name, ctype)
else:
lenidx = typenode.attrib.get('length')
if lenidx is not None:
idx = int(lenidx)
- assert idx < len(parent.parameters), "%r %d >= %d" \
- % (parent, idx, len(parent.parameters))
+ assert idx < len(parent.parameters), "%r %d >= %d" % (parent, idx,
+ len(parent.parameters))
typeval.length_param_name = parent.parameters[idx].argname
def _parse_boxed(self, node):
assert node.tag == _corens('field'), node.tag
type_node = self._parse_type(node)
field = ast.Field(node.attrib.get('name'),
- type_node,
- node.attrib.get('readable') != '0',
- node.attrib.get('writable') == '1',
- node.attrib.get('bits'),
- anonymous_node=anonymous_node)
+ type_node,
+ node.attrib.get('readable') != '0',
+ node.attrib.get('writable') == '1',
+ node.attrib.get('bits'),
+ anonymous_node=anonymous_node)
field.private = node.attrib.get('private') == '1'
field.parent = parent
self._parse_generic_attribs(node, field)
def _parse_property(self, node, parent):
prop = ast.Property(node.attrib['name'],
- self._parse_type(node),
- node.attrib.get('readable') != '0',
- node.attrib.get('writable') == '1',
- node.attrib.get('construct') == '1',
- node.attrib.get('construct-only') == '1',
- node.attrib.get('transfer-ownership'))
+ self._parse_type(node),
+ node.attrib.get('readable') != '0',
+ node.attrib.get('writable') == '1',
+ node.attrib.get('construct') == '1',
+ node.attrib.get('construct-only') == '1',
+ node.attrib.get('transfer-ownership'))
self._parse_generic_attribs(node, prop)
prop.parent = parent
return prop
# Compatible changes we just make inline
COMPATIBLE_GIR_VERSION = '1.2'
+
class GIRWriter(XMLWriter):
def __init__(self, namespace):
super(GIRWriter, self).__init__()
self.write_comment(
-'''This file was automatically generated from C sources - DO NOT EDIT!
-To affect the contents of this file, edit the original C definitions,
-and/or use gtk-doc annotations. ''')
+ 'This file was automatically generated from C sources - DO NOT EDIT!\n'
+ 'To affect the contents of this file, edit the original C definitions,\n'
+ 'and/or use gtk-doc annotations. ')
self._write_repository(namespace)
def _write_repository(self, namespace):
('version', COMPATIBLE_GIR_VERSION),
('xmlns', 'http://www.gtk.org/introspection/core/1.0'),
('xmlns:c', 'http://www.gtk.org/introspection/c/1.0'),
- ('xmlns:glib', 'http://www.gtk.org/introspection/glib/1.0'),
- ]
+ ('xmlns:glib', 'http://www.gtk.org/introspection/glib/1.0')]
with self.tagcontext('repository', attrs):
for include in sorted(namespace.includes):
self._write_include(include)
for key, value in node.attributes:
self.write_tag('attribute', [('name', key), ('value', value)])
if hasattr(node, 'doc') and node.doc:
- self.write_tag('doc', [('xml:whitespace', 'preserve')],
+ self.write_tag('doc', [('xml:space', 'preserve')],
node.doc)
def _append_node_generic(self, node, attrs):
attrs.append(('fixed-size', '%d' % (ntype.size, )))
if ntype.length_param_name is not None:
assert function
- attrs.insert(0, ('length', '%d'
- % (function.get_parameter_index(ntype.length_param_name, ))))
+ length = function.get_parameter_index(ntype.length_param_name)
+ attrs.insert(0, ('length', '%d' % (length, )))
with self.tagcontext('array', attrs):
self._write_type(ntype.element_type)
attrs = list(extra_attrs)
if record.name is not None:
attrs.append(('name', record.name))
- if record.ctype is not None: # the record might be anonymous
+ if record.ctype is not None: # the record might be anonymous
attrs.append(('c:type', record.ctype))
if record.disguised:
attrs.append(('disguised', '1'))
attrs = []
if union.name is not None:
attrs.append(('name', union.name))
- if union.ctype is not None: # the union might be anonymous
+ if union.ctype is not None: # the union might be anonymous
attrs.append(('c:type', union.ctype))
self._append_version(union, attrs)
self._append_node_generic(union, attrs)
elif isinstance(field.anonymous_node, ast.Union):
self._write_union(field.anonymous_node)
else:
- raise AssertionError("Unknown field anonymous: %r" \
- % (field.anonymous_node, ))
+ raise AssertionError("Unknown field anonymous: %r" % (field.anonymous_node, ))
else:
attrs = [('name', field.name)]
self._append_node_generic(field, attrs)
goto out;
}
- if (!PyTuple_Size (tuple) == 2)
+ if (PyTuple_Size (tuple) != 2)
{
PyErr_SetString(PyExc_IndexError,
"attribute item must be a tuple of length 2");
from . import message
from .annotationparser import TAG_RETURNS
+
class IntrospectablePass(object):
def __init__(self, transformer, blocks):
else:
context = "return value: "
if block:
- return_tag = block.get_tag(TAG_RETURNS)
+ return_tag = block.tags.get(TAG_RETURNS)
if return_tag:
position = return_tag.position
message.warn_node(parent, prefix + context + text,
if not node.type.resolved:
self._parameter_warning(parent, node,
-"Unresolved type: %r" % (node.type.unresolved_string, ))
+ "Unresolved type: %r" % (node.type.unresolved_string, ))
parent.introspectable = False
return
return
if (isinstance(node.type, (ast.List, ast.Array))
- and node.type.element_type == ast.TYPE_ANY):
+ and node.type.element_type == ast.TYPE_ANY):
self._parameter_warning(parent, node, "Missing (element-type) annotation")
parent.introspectable = False
return
if (is_parameter
- and isinstance(target, ast.Callback)
- and not node.type.target_giname in ('GLib.DestroyNotify',
- 'Gio.AsyncReadyCallback')
- and node.scope is None):
- self._parameter_warning(parent, node,
- ("Missing (scope) annotation for callback" +
- " without GDestroyNotify (valid: %s, %s)")
- % (ast.PARAM_SCOPE_CALL, ast.PARAM_SCOPE_ASYNC))
- parent.introspectable = False
- return
+ and isinstance(target, ast.Callback)
+ and not node.type.target_giname in ('GLib.DestroyNotify', 'Gio.AsyncReadyCallback')
+ and node.scope is None):
+ self._parameter_warning(
+ parent,
+ node,
+ "Missing (scope) annotation for callback without "
+ "GDestroyNotify (valid: %s, %s)" % (ast.PARAM_SCOPE_CALL, ast.PARAM_SCOPE_ASYNC))
+
+ parent.introspectable = False
+ return
if is_return and isinstance(target, ast.Callback):
self._parameter_warning(parent, node, "Callbacks cannot be return values; use (skip)")
return
if (is_return
- and isinstance(target, (ast.Record, ast.Union))
- and target.get_type is None
- and not target.foreign):
+ and isinstance(target, (ast.Record, ast.Union))
+ and target.get_type is None
+ and not target.foreign):
if node.transfer != ast.PARAM_TRANSFER_NONE:
- self._parameter_warning(parent, node,
-"Invalid non-constant return of bare structure or union; register as boxed type or (skip)")
+ self._parameter_warning(
+ parent, node,
+ "Invalid non-constant return of bare structure or union; "
+ "register as boxed type or (skip)")
parent.introspectable = False
return
# These are not introspectable pending us adding
# larger type tags to the typelib (in theory these could
# be 128 bit or larger)
- if typeval.is_equiv((ast.TYPE_LONG_LONG, ast.TYPE_LONG_ULONG,
- ast.TYPE_LONG_DOUBLE)):
+ elif typeval.is_equiv((ast.TYPE_LONG_LONG, ast.TYPE_LONG_ULONG, ast.TYPE_LONG_DOUBLE)):
return False
- return True
+ else:
+ return True
target = self._transformer.lookup_typenode(typeval)
if not target:
return False
sys.meta_path.append(cls)
@classmethod
- def __exit__(cls, type, value, traceback):
+ def __exit__(cls, exc_type, exc_val, exc_tb):
sys.meta_path.remove(cls)
OPT_ARRAY_LENGTH, OPT_ARRAY_ZERO_TERMINATED,
OPT_CONSTRUCTOR, OPT_METHOD,
OPT_TRANSFER_NONE, OPT_TRANSFER_FLOATING)
-from .annotationparser import AnnotationParser
-from .transformer import TransformerException
-from .utils import to_underscores, to_underscores_noprefix
+from .utils import to_underscores_noprefix
+
class MainTransformer(object):
# Public API
def transform(self):
- contents = list(self._namespace.itervalues())
- if len(contents) == 0:
- message.fatal("""Namespace is empty; likely causes are:
-* Not including .h files to be scanned
-* Broken --identifier-prefix
-""")
+ if not self._namespace.names:
+ message.fatal('Namespace is empty; likely causes are:\n'
+ '* Not including .h files to be scanned\n'
+ '* Broken --identifier-prefix')
# Some initial namespace surgery
self._namespace.walk(self._pass_fixup_hidden_fields)
def _pass_fixup_hidden_fields(self, node, chain):
"""Hide all callbacks starting with _; the typical
-usage is void (*_gtk_reserved1)(void);"""
- if not isinstance(node, (ast.Class, ast.Interface,
- ast.Record, ast.Union)):
- return True
- for field in node.fields:
- if field is None:
- continue
- if (field.name.startswith('_')
+ usage is void (*_gtk_reserved1)(void);"""
+ if isinstance(node, (ast.Class, ast.Interface, ast.Record, ast.Union)):
+ for field in node.fields:
+ if (field
+ and field.name.startswith('_')
and field.anonymous_node is not None
and isinstance(field.anonymous_node, ast.Callback)):
- field.introspectable = False
+ field.introspectable = False
return True
def _get_validate_parameter_name(self, parent, param_name, origin):
def _apply_annotation_rename_to(self, node, chain, block):
if not block:
return
- rename_to = block.get_tag(TAG_RENAME_TO)
+ rename_to = block.tags.get(TAG_RENAME_TO)
if not rename_to:
return
rename_to = rename_to.value
if isinstance(node, ast.Function):
self._apply_annotations_function(node, chain)
if isinstance(node, ast.Callback):
- self._apply_annotations_callable(node, chain, block = self._get_block(node))
+ self._apply_annotations_callable(node, chain, block=self._get_block(node))
if isinstance(node, (ast.Class, ast.Interface, ast.Union, ast.Enum,
ast.Bitfield, ast.Callback)):
self._apply_annotations_annotated(node, self._get_block(node))
if isinstance(node, ast.Class):
block = self._get_block(node)
if block:
- tag = block.get_tag(TAG_UNREF_FUNC)
+ tag = block.tags.get(TAG_UNREF_FUNC)
node.unref_func = tag.value if tag else None
- tag = block.get_tag(TAG_REF_FUNC)
+ tag = block.tags.get(TAG_REF_FUNC)
node.ref_func = tag.value if tag else None
- tag = block.get_tag(TAG_SET_VALUE_FUNC)
+ tag = block.tags.get(TAG_SET_VALUE_FUNC)
node.set_value_func = tag.value if tag else None
- tag = block.get_tag(TAG_GET_VALUE_FUNC)
+ tag = block.tags.get(TAG_GET_VALUE_FUNC)
node.get_value_func = tag.value if tag else None
if isinstance(node, ast.Constant):
self._apply_annotations_constant(node)
Use resolver() on each identifier, and combiner() on the parts of
each complete type. (top_combiner is used on the top-most type.)"""
bits = re.split(r'([,<>()])', type_str, 1)
- first, sep, rest = [bits[0], '', ''] if (len(bits)==1) else bits
+ first, sep, rest = [bits[0], '', ''] if (len(bits) == 1) else bits
args = [resolver(first)]
if sep == '<' or sep == '(':
lastsep = '>' if (sep == '<') else ')'
else:
rest = sep + rest
return top_combiner(*args), rest
+
def resolver(ident):
res = self._transformer.create_type_from_user_string(ident)
return res
+
def combiner(base, *rest):
if not rest:
return base
message.warn(
"Too many parameters in type specification %r" % (type_str, ))
return base
+
def top_combiner(base, *rest):
if type_node is not None and isinstance(type_node, ast.Type):
base.is_const = type_node.is_const
return block.position
def _check_array_element_type(self, array, options):
+ array_type = array.array_type
+ element_type = array.element_type
+
# GPtrArrays are allowed to contain non basic types
# (except enums and flags) or basic types that are
# as big as a gpointer
- if array.array_type == ast.Array.GLIB_PTRARRAY and \
- ((array.element_type in ast.BASIC_GIR_TYPES
- and not array.element_type in ast.POINTER_TYPES) or
- isinstance(array.element_type, ast.Enum) or
- isinstance(array.element_type, ast.Bitfield)):
- message.warn("invalid (element-type) for a GPtrArray, "
- "must be a pointer", options.position)
+ if array_type == ast.Array.GLIB_PTRARRAY:
+ if ((element_type in ast.BASIC_GIR_TYPES and not element_type in ast.POINTER_TYPES)
+ or isinstance(element_type, (ast.Enum, ast.Bitfield))):
+ message.warn("invalid (element-type) for a GPtrArray, "
+ "must be a pointer", options.position)
# GByteArrays have (element-type) guint8 by default
- if array.array_type == ast.Array.GLIB_BYTEARRAY:
- if array.element_type == ast.TYPE_ANY:
+ if array_type == ast.Array.GLIB_BYTEARRAY:
+ if element_type == ast.TYPE_ANY:
array.element_type = ast.TYPE_UINT8
- elif not array.element_type in [ast.TYPE_UINT8,
- ast.TYPE_INT8,
- ast.TYPE_CHAR]:
+ elif not element_type in [ast.TYPE_UINT8, ast.TYPE_INT8, ast.TYPE_CHAR]:
message.warn("invalid (element-type) for a GByteArray, "
"must be one of guint8, gint8 or gchar",
options.position)
def _get_transfer_default_returntype_basic(self, typeval):
if (typeval.is_equiv(ast.BASIC_GIR_TYPES)
- or typeval.is_const
- or typeval.is_equiv(ast.TYPE_NONE)):
+ or typeval.is_const
+ or typeval.is_equiv(ast.TYPE_NONE)):
return ast.PARAM_TRANSFER_NONE
elif typeval.is_equiv(ast.TYPE_STRING):
# Non-const strings default to FULL
caller_allocates = False
annotated_direction = None
- if (OPT_INOUT in options or
- OPT_INOUT_ALT in options):
+ if (OPT_INOUT in options or OPT_INOUT_ALT in options):
annotated_direction = ast.PARAM_DIRECTION_INOUT
elif OPT_OUT in options:
subtype = options[OPT_OUT]
self._adjust_container_type(parent, node, options)
- if (OPT_ALLOW_NONE in options or
- node.type.target_giname == 'Gio.AsyncReadyCallback' or
- node.type.target_giname == 'Gio.Cancellable'):
+ if (OPT_ALLOW_NONE in options
+ or node.type.target_giname == 'Gio.AsyncReadyCallback'
+ or node.type.target_giname == 'Gio.Cancellable'):
node.allow_none = True
if tag is not None and tag.comment is not None:
node.doc = block.comment if block.comment else ''
- since_tag = block.get_tag(TAG_SINCE)
+ since_tag = block.tags.get(TAG_SINCE)
if since_tag is not None:
node.version = since_tag.value
- deprecated_tag = block.get_tag(TAG_DEPRECATED)
+ deprecated_tag = block.tags.get(TAG_DEPRECATED)
if deprecated_tag is not None:
value = deprecated_tag.value
if ': ' in value:
colon = value.find(': ')
version = value[:colon]
- desc = value[colon+2:]
+ desc = value[colon + 2:]
else:
desc = value
version = None
if version is not None:
node.deprecated_version = version
- stability_tag = block.get_tag(TAG_STABILITY)
+ stability_tag = block.tags.get(TAG_STABILITY)
if stability_tag is not None:
stability = stability_tag.value.capitalize()
if stability in ["Stable", "Unstable", "Private", "Internal"]:
message.warn('unknown value "%s" for Stability tag' % (
stability_tag.value), stability_tag.position)
- annos_tag = block.get_tag(TAG_ATTRIBUTES)
+ annos_tag = block.tags.get(TAG_ATTRIBUTES)
if annos_tag is not None:
for key, value in annos_tag.options.items():
if value:
def _apply_annotations_return(self, parent, return_, block):
if block:
- tag = block.get_tag(TAG_RETURNS)
+ tag = block.tags.get(TAG_RETURNS)
else:
tag = None
self._apply_annotations_param_ret_common(parent, return_, tag)
declparams.add(parent.instance_parameter.argname)
for param in params:
if block:
- tag = block.get_param(param.argname)
+ tag = block.params.get(param.argname)
else:
tag = None
self._apply_annotations_param(parent, param, tag)
(param, ) = unused
text = ', should be %r' % (param, )
else:
- text = ', should be one of %s' % (
- ', '.join(repr(p) for p in unused), )
+ text = ', should be one of %s' % (', '.join(repr(p) for p in unused), )
- tag = block.get_param(doc_name)
+ tag = block.params.get(doc_name)
message.warn(
'%s: unknown parameter %r in documentation comment%s' % (
block.name, doc_name, text),
def _apply_annotations_field(self, parent, block, field):
if not block:
return
- tag = block.get_param(field.name)
+ tag = block.params.get(field.name)
if not tag:
return
t = tag.options.get(OPT_TYPE)
self._apply_annotations_annotated(prop, block)
if not block:
return
- transfer_tag = block.get_tag(TAG_TRANSFER)
+ transfer_tag = block.tags.get(TAG_TRANSFER)
if transfer_tag is not None:
transfer = transfer_tag.value
if transfer == OPT_TRANSFER_FLOATING:
prop.transfer = transfer
else:
prop.transfer = self._get_transfer_default(parent, prop)
- type_tag = block.get_tag(TAG_TYPE)
+ type_tag = block.tags.get(TAG_TYPE)
if type_tag:
prop.type = self._resolve_toplevel(type_tag.value, prop.type, prop, parent)
def _apply_annotations_signal(self, parent, signal):
+ names = []
prefix = self._get_annotation_name(parent)
block = self._blocks.get('%s::%s' % (prefix, signal.name))
- self._apply_annotations_annotated(signal, block)
- # We're only attempting to name the signal parameters if
- # the number of parameters (@foo) is the same or greater
- # than the number of signal parameters
- if block and len(block.params) > len(signal.parameters):
- names = block.params.items()
- # Resolve real parameter names early, so that in later
- # phase we can refer to them while resolving annotations.
- for i, param in enumerate(signal.parameters):
- param.argname, tag = names[i+1]
- else:
- names = []
+
+ if block:
+ self._apply_annotations_annotated(signal, block)
+
+ # We're only attempting to name the signal parameters if
+ # the number of parameters (@foo) is the same or greater
+ # than the number of signal parameters
+ if len(block.params) > len(signal.parameters):
+ names = block.params.items()
+ # Resolve real parameter names early, so that in later
+ # phase we can refer to them while resolving annotations.
+ for i, param in enumerate(signal.parameters):
+ param.argname, tag = names[i + 1]
+ elif len(signal.parameters) != 0:
+ # Only warn about missing params if there are actually parameters
+ # besides implicit self.
+ message.warn("incorrect number of parameters in comment block, "
+ "parameter annotations will be ignored.", block.position)
+
for i, param in enumerate(signal.parameters):
if names:
- name, tag = names[i+1]
+ name, tag = names[i + 1]
options = getattr(tag, 'options', {})
param_type = options.get(OPT_TYPE)
if param_type:
self._apply_annotations_annotated(node, block)
- tag = block.get_tag(TAG_VALUE)
+ tag = block.tags.get(TAG_VALUE)
if tag:
node.value = tag.value
def _pass_read_annotations2(self, node, chain):
if isinstance(node, ast.Function):
- self._apply_annotations2_function(node, chain)
+ block = self._blocks.get(node.symbol)
+
+ self._apply_annotation_rename_to(node, chain, block)
+
+ # Handle virtual invokers
+ parent = chain[-1] if chain else None
+ if (block and parent):
+ virtual_annotation = block.tags.get(TAG_VFUNC)
+ if virtual_annotation:
+ invoker_name = virtual_annotation.value
+ matched = False
+ for vfunc in parent.virtual_methods:
+ if vfunc.name == invoker_name:
+ matched = True
+ vfunc.invoker = node.name
+ # Also merge in annotations
+ self._apply_annotations_callable(vfunc, [parent], block)
+ break
+ if not matched:
+ message.warn_node(node,
+ "Virtual slot %r not found for %r annotation" % (invoker_name,
+ TAG_VFUNC))
return True
- def _apply_annotations2_function(self, node, chain):
- block = self._blocks.get(node.symbol)
-
- self._apply_annotation_rename_to(node, chain, block)
-
- # Handle virtual invokers
- parent = chain[-1] if chain else None
- if not (block and parent):
- return
- virtual = block.get_tag(TAG_VFUNC)
- if not virtual:
- return
- invoker_name = virtual.value
- matched = False
- for vfunc in parent.virtual_methods:
- if vfunc.name == invoker_name:
- matched = True
- vfunc.invoker = node.name
- # Also merge in annotations
- self._apply_annotations_callable(vfunc, [parent], block)
- break
- if not matched:
- message.warn_node(node,
- "Virtual slot %r not found for %r annotation" % (invoker_name, TAG_VFUNC))
-
def _resolve_and_filter_type_list(self, typelist):
"""Given a list of Type instances, return a new list of types with
the ones that failed to resolve removed."""
origin_node = self._get_constructor_class(func, subsymbol)
if origin_node is None:
if func.is_constructor:
- message.warn_node(func,
- "Can't find matching type for constructor; symbol=%r" \
- % (func.symbol, ))
+ message.warn_node(
+ func,
+ "Can't find matching type for constructor; symbol=%r" % (func.symbol, ))
return False
# Some sanity checks; only objects and boxeds can have ctors
return '%s:' % (filename, )
def offset(self, offset):
- return Position(self.filename, self.line+offset, self.column)
+ return Position(self.filename, self.line + offset, self.column)
class MessageLogger(object):
elif log_type == FATAL:
error_type = "Fatal"
if prefix:
- text = (
-'''%s: %s: %s: %s: %s\n''' % (last_position, error_type, self._namespace.name,
- prefix, text))
+ text = ('%s: %s: %s: %s: %s\n' % (last_position, error_type,
+ self._namespace.name, prefix, text))
else:
if self._namespace:
- text = (
-'''%s: %s: %s: %s\n''' % (last_position, error_type, self._namespace.name, text))
+ text = ('%s: %s: %s: %s\n' % (last_position, error_type,
+ self._namespace.name, text))
else:
- text = (
-'''%s: %s: %s\n''' % (last_position, error_type, text))
+ text = ('%s: %s: %s\n' % (last_position, error_type, text))
self._output.write(text)
if log_type == FATAL:
ml = MessageLogger.get()
ml.log_node(log_type, node, text, context=context, positions=positions)
+
def warn(text, positions=None, prefix=None):
ml = MessageLogger.get()
ml.log(WARNING, text, positions, prefix)
+
def warn_node(node, text, context=None, positions=None):
log_node(WARNING, node, text, context=context, positions=positions)
+
def warn_symbol(symbol, text):
ml = MessageLogger.get()
ml.log_symbol(WARNING, symbol, text)
+
def fatal(text, positions=None, prefix=None):
ml = MessageLogger.get()
ml.log(FATAL, text, positions, prefix)
+++ /dev/null
-# -*- Mode: Python -*-
-# GObject-Introspection - a framework for introspecting GObject libraries
-# Copyright (C) 2008 Johan Dahlin
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the
-# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-#
-
-"""odict - an ordered dictionary"""
-
-try:
- # Starting with Python 2.7 we can use collections.OrderedDict
- from collections import OrderedDict as odict
-except ImportError:
- # But we still support Python 2.5 and 2.6
- from UserDict import DictMixin
-
-
- class odict(DictMixin):
-
- def __init__(self):
- self._items = {}
- self._keys = []
-
- def __setitem__(self, key, value):
- if key not in self._items:
- self._keys.append(key)
- self._items[key] = value
-
- def __getitem__(self, key):
- return self._items[key]
-
- def __delitem__(self, key):
- del self._items[key]
- self._keys.remove(key)
-
- def keys(self):
- return self._keys[:]
extern int yylex (GISourceScanner *scanner);
#define YY_DECL int yylex (GISourceScanner *scanner)
static int yywrap (void);
+static void parse_gtk_doc_comment (GISourceScanner *scanner);
static void parse_comment (GISourceScanner *scanner);
static void parse_trigraph (GISourceScanner *scanner);
static void process_linemarks (GISourceScanner *scanner);
++lineno;
}
"\\\n" { ++lineno; }
+
[\t\f\v\r ]+ { /* Ignore whitespace. */ }
+"/**" { parse_gtk_doc_comment(scanner); }
"/*" { parse_comment(scanner); }
"/*"[\t ]?<[\t ,=A-Za-z0-9_]+>[\t ]?"*/" { parse_trigraph(scanner); }
"//".* { /* Ignore C++ style comments. */ }
"," { return ','; }
"->" { return ARROW; }
+"__asm"[\t\f\v\r ]+"volatile" { if (!parse_ignored_macro()) REJECT; }
+"__asm__"[\t\f\v\r ]+"volatile" { if (!parse_ignored_macro()) REJECT; }
"__asm" { if (!parse_ignored_macro()) REJECT; }
"__asm__" { if (!parse_ignored_macro()) REJECT; }
"__attribute__" { if (!parse_ignored_macro()) REJECT; }
"__signed__" { return SIGNED; }
"__restrict" { return RESTRICT; }
"__typeof" { if (!parse_ignored_macro()) REJECT; }
+"__volatile" { if (!parse_ignored_macro()) REJECT; }
+"__volatile__" { if (!parse_ignored_macro()) REJECT; }
"_Bool" { return BOOL; }
"G_GINT64_CONSTANT" { return INTL_CONST; }
"if" { return IF; }
"inline" { return INLINE; }
"int" { return INT; }
+"__uint128_t" { return INT; }
+"__int128_t" { return INT; }
+"__uint128" { return INT; }
+"__int128" { return INT; }
"long" { return LONG; }
"register" { return REGISTER; }
"restrict" { return RESTRICT; }
return 1;
}
-
static void
-parse_comment (GISourceScanner *scanner)
+parse_gtk_doc_comment (GISourceScanner *scanner)
{
GString *string = NULL;
int c1, c2;
(GCompareFunc)g_strcmp0)) {
skip = TRUE;
} else {
- string = g_string_new ("/*");
+ string = g_string_new (yytext);
}
c1 = input();
comment);
}
+static void
+parse_comment (GISourceScanner *scanner)
+{
+ int c1, c2;
+
+ c1 = input();
+ c2 = input();
+
+ while (c2 != EOF && !(c1 == '*' && c2 == '/'))
+ {
+ if (c1 == '\n')
+ lineno++;
+
+ c1 = c2;
+ c2 = input();
+ }
+
+ return;
+}
+
static int
check_identifier (GISourceScanner *scanner,
const char *s)
from giscanner.girwriter import GIRWriter
from giscanner.maintransformer import MainTransformer
from giscanner.shlibs import resolve_shlibs
-from giscanner.sourcescanner import SourceScanner
+from giscanner.sourcescanner import SourceScanner, ALL_EXTS
from giscanner.transformer import Transformer
from . import utils
+
def process_cflags_begin(option, opt, value, parser):
cflags = getattr(parser.values, option.dest)
while len(parser.rargs) > 0 and parser.rargs[0] != '--cflags-end':
cflags.append(parser.rargs.pop(0))
+
def process_cflags_end(option, opt, value, parser):
pass
+
def get_preprocessor_option_group(parser):
group = optparse.OptionGroup(parser, "Preprocessor options")
group.add_option("", "--cflags-begin",
group.add_option("-p", dest="", help="Ignored")
return group
+
def get_windows_option_group(parser):
group = optparse.OptionGroup(parser, "Machine Dependent Options")
group.add_option("-m", help="some machine dependent option",
return group
+
def _get_option_parser():
parser = optparse.OptionParser('%prog [options] sources')
parser.add_option('', "--quiet",
action="store_true", dest="quiet",
default=False,
- help="If passed, do not print details of normal" \
- + " operation")
+ help="If passed, do not print details of normal operation")
parser.add_option("", "--format",
action="store", dest="format",
default="gir",
def _error(msg):
raise SystemExit('ERROR: %s' % (msg, ))
+
def passthrough_gir(path, f):
parser = GIRParser()
parser.parse(path)
writer = GIRWriter(parser.get_namespace())
f.write(writer.get_xml())
+
def test_codegen(optstring):
(namespace, out_h_filename, out_c_filename) = optstring.split(',')
if namespace == 'Everything':
_error("Invaild namespace %r" % (namespace, ))
return 0
+
def process_options(output, allowed_flags):
for option in output.split():
for flag in allowed_flags:
yield option
break
+
def process_packages(options, packages):
args = ['pkg-config', '--cflags']
args.extend(packages)
options.cpp_defines.extend(pkg_options.cpp_defines)
options.cpp_undefines.extend(pkg_options.cpp_undefines)
+
def extract_filenames(args):
filenames = []
for arg in args:
# We don't support real C++ parsing yet, but we should be able
# to understand C API implemented in C++ files.
- if (arg.endswith('.c') or arg.endswith('.cpp') or
- arg.endswith('.cc') or arg.endswith('.cxx') or
- arg.endswith('.h') or arg.endswith('.hpp') or
- arg.endswith('.hxx')):
+ if os.path.splitext(arg)[1] in ALL_EXTS:
if not os.path.exists(arg):
_error('%s: no such a file or directory' % (arg, ))
# Make absolute, because we do comparisons inside scannerparser.c
filenames.append(os.path.abspath(arg))
return filenames
+
def extract_filelist(options):
filenames = []
if not os.path.exists(options.filelist):
# We don't support real C++ parsing yet, but we should be able
# to understand C API implemented in C++ files.
filename = line.strip()
- if (filename.endswith('.c') or filename.endswith('.cpp') or
- filename.endswith('.cc') or filename.endswith('.cxx') or
- filename.endswith('.h') or filename.endswith('.hpp') or
- filename.endswith('.hxx')):
+ if (filename.endswith('.c') or filename.endswith('.cpp')
+ or filename.endswith('.cc') or filename.endswith('.cxx')
+ or filename.endswith('.h') or filename.endswith('.hpp')
+ or filename.endswith('.hxx')):
if not os.path.exists(filename):
_error('%s: Invalid filelist entry-no such file or directory' % (line, ))
# Make absolute, because we do comparisons inside scannerparser.c
filenames.append(os.path.abspath(filename))
return filenames
+
def create_namespace(options):
if options.strip_prefix:
print """g-ir-scanner: warning: Option --strip-prefix has been deprecated;
identifier_prefixes=identifier_prefixes,
symbol_prefixes=symbol_prefixes)
+
def create_transformer(namespace, options):
transformer = Transformer(namespace,
accept_unprefixed=options.accept_unprefixed)
return transformer
+
def create_binary(transformer, options, args):
# Transform the C AST nodes into higher level
# GLib/GObject nodes
gdump_parser.init_parse()
if options.program:
- args=[options.program]
+ args = [options.program]
args.extend(options.program_args)
binary = IntrospectionBinary(args)
else:
gdump_parser.parse()
return shlibs
+
def create_source_scanner(options, args):
if hasattr(options, 'filelist') and options.filelist:
filenames = extract_filelist(options)
ss.parse_macros(filenames)
return ss
+
def write_output(data, options):
if options.output == "-":
output = sys.stdout
os.unlink(temp_f_name)
try:
shutil.move(main_f_name, options.output)
- except OSError, e:
+ except OSError as e:
if e.errno == errno.EPERM:
os.unlink(main_f_name)
return 0
else:
try:
output = open(options.output, "w")
- except IOError, e:
+ except IOError as e:
_error("opening output for writing: %s" % (e.strerror, ))
try:
output.write(data)
- except IOError, e:
+ except IOError as e:
_error("while writing output: %s" % (e.strerror, ))
+
def scanner_main(args):
parser = _get_option_parser()
(options, args) = parser.parse_args(args)
blocks = ap.parse(ss.get_comments())
# Transform the C symbols into AST nodes
- transformer.set_annotations(blocks)
transformer.parse(ss.get_symbols())
if not options.header_only:
#
import re
-import sys
-class SectionFile(object):
+
+class SectionsFile(object):
def __init__(self, sections):
self.sections = sections
+
class Section(object):
def __init__(self):
self.file = None
self.title = None
- self.main_subsection = Subsection(None)
+ self.includes = None
self.subsections = []
+
class Subsection(object):
def __init__(self, name):
self.name = name
self.symbols = []
+
def parse_sections_file(lines):
sections = []
current_section = None
if line == "<SECTION>":
current_section = Section()
sections.append(current_section)
- current_subsection = current_section.main_subsection
+ current_subsection = Subsection(None)
+ current_section.subsections.append(current_subsection)
continue
if line == "</SECTION>":
current_section = None
continue
- match = re.match(line, r"<FILE>(?P<contents>.*)</FILE>")
+ match = re.match(r"<FILE>(?P<contents>.*)</FILE>", line)
if match:
current_section.file = match.groupdict['contents']
continue
- match = re.match(line, r"<TITLE>(?P<contents>.*)</TITLE>")
+ match = re.match(r"<TITLE>(?P<contents>.*)</TITLE>", line)
if match:
current_section.title = match.groupdict['contents']
continue
- match = re.match(line, r"<SUBSECTION (?P<name>).*>")
+ match = re.match(r"<INCLUDE>(?P<contents>.*)</INCLUDE>", line)
if match:
- current_subsection = Section(match.groupdict['name'])
+ current_section.includes = match.groupdict['contents']
+ continue
+
+ match = re.match(r"<SUBSECTION(?: (?P<name>.*))?>", line)
+ if match:
+ current_subsection = Subsection(match.groupdict.get('name', None))
current_section.subsections.append(current_subsection)
continue
+ if line.startswith("<") and line.endswith(">"):
+ # Other directive to gtk-doc, not a symbol.
+ continue
+
current_subsection.symbols.append(line)
- return SectionFile(sections)
+ return SectionsFile(sections)
from .utils import get_libtool_command, extract_libtool_shlib
+
# For .la files, the situation is easy.
def _resolve_libtool(options, binary, libraries):
shlibs = []
return shlibs
+
# Assume ldd output is something vaguely like
#
# libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0x006c1000)
return re.compile("(?<![A-Za-z0-9_-])(lib*%s[^A-Za-z0-9_-][^\s\(\)]*)"
% re.escape(library_name))
+
# This is a what we do for non-la files. We assume that we are on an
# ELF-like system where ldd exists and the soname extracted with ldd is
# a filename that can be opened with dlopen().
if not libraries:
return []
- if os.name == 'OpenBSD':
+ if platform.platform().startswith('OpenBSD'):
# Hack for OpenBSD when using the ports' libtool which uses slightly
# different directories to store the libraries in. So rewite binary.args[0]
# by inserting '.libs/'.
return shlibs
+
# We want to resolve a set of library names (the <foo> of -l<foo>)
# against a library to find the shared library name. The shared
# library name is suppose to be what you pass to dlopen() (or
else:
from giscanner._giscanner import SourceScanner as CSourceScanner
+HEADER_EXTS = ['.h', '.hpp', '.hxx']
+SOURCE_EXTS = ['.c', '.cpp', '.cc', '.cxx']
+ALL_EXTS = SOURCE_EXTS + HEADER_EXTS
+
(CSYMBOL_TYPE_INVALID,
CSYMBOL_TYPE_ELLIPSIS,
CSYMBOL_TYPE_CONST,
CSYMBOL_TYPE_UNION: 'union',
CSYMBOL_TYPE_ENUM: 'enum',
CSYMBOL_TYPE_TYPEDEF: 'typedef',
- CSYMBOL_TYPE_MEMBER: 'member',
- }.get(symbol_type)
+ CSYMBOL_TYPE_MEMBER: 'member'}.get(symbol_type)
def ctype_name(ctype):
CTYPE_ENUM: 'enum',
CTYPE_POINTER: 'pointer',
CTYPE_ARRAY: 'array',
- CTYPE_FUNCTION: 'function',
- }.get(ctype)
+ CTYPE_FUNCTION: 'function'}.get(ctype)
class SourceType(object):
headers = []
for filename in filenames:
- if (filename.endswith('.c') or filename.endswith('.cpp') or
- filename.endswith('.cc') or filename.endswith('.cxx')):
+ if os.path.splitext(filename)[1] in SOURCE_EXTS:
filename = os.path.abspath(filename)
self._scanner.lex_filename(filename)
else:
return self._scanner.get_comments()
def dump(self):
- print '-'*30
+ print '-' * 30
for symbol in self._scanner.get_symbols():
print symbol.ident, symbol.base_type.name, symbol.type
defines = ['__GI_SCANNER__']
undefs = []
- cpp_exec = os.environ.get('CC', 'cc').split()
- # The Microsoft compiler/preprocessor (cl) does not accept
- # source input from stdin (the '-' flag), so we need
- # some help from gcc from MinGW/Cygwin or so.
- # Note that the generated dumper program is
- # still built and linked by Visual C++.
- if 'cl' in cpp_exec:
- cpp_args = 'gcc'.split()
- else:
- cpp_args = cpp_exec
+ cpp_args = os.environ.get('CC', 'cc').split() # support CC="ccache gcc"
+ if 'cl' in cpp_args:
+ # The Microsoft compiler/preprocessor (cl) does not accept
+ # source input from stdin (the '-' flag), so we need
+ # some help from gcc from MinGW/Cygwin or so.
+ # Note that the generated dumper program is
+ # still built and linked by Visual C++.
+ cpp_args = ['gcc']
cpp_args += ['-E', '-C', '-I.', '-']
-
cpp_args += self._cpp_options
+
proc = subprocess.Popen(cpp_args,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE)
proc.stdin.write('#include <%s>\n' % (filename, ))
proc.stdin.close()
- tmp = tempfile.mktemp()
- fp = open(tmp, 'w+')
+ tmp_fd, tmp_name = tempfile.mkstemp()
+ fp = os.fdopen(tmp_fd, 'w+b')
while True:
data = proc.stdout.read(4096)
if data is None:
self._scanner.parse_file(fp.fileno())
fp.close()
- os.unlink(tmp)
+ os.unlink(tmp_name)
ast.TYPE_FILENAME: '""',
ast.TYPE_GTYPE: 'g_object_get_type ()'}
+
def get_default_for_typeval(typeval):
default = DEFAULT_C_VALUES.get(typeval)
if default:
return default
return "0"
+
def uscore_from_type(typeval):
if typeval.target_fundamental:
return typeval.target_fundamental.replace(' ', '_')
else:
assert False, typeval
+
class EverythingCodeGenerator(object):
def __init__(self, out_h_filename, out_c_filename):
CSYMBOL_TYPE_MEMBER, CSYMBOL_TYPE_ELLIPSIS, CSYMBOL_TYPE_CONST,
TYPE_QUALIFIER_CONST, TYPE_QUALIFIER_VOLATILE)
+
class TransformerException(Exception):
pass
self._namespace = namespace
self._pkg_config_packages = set()
self._typedefs_ns = {}
- self._parsed_includes = {} # <string namespace -> Namespace>
+ self._parsed_includes = {} # <string namespace -> Namespace>
self._includepaths = []
self._passthrough_mode = False
- self._annotations = {}
def get_pkgconfig_packages(self):
return self._pkg_config_packages
def set_passthrough_mode(self):
self._passthrough_mode = True
- def set_annotations(self, annotations):
- self._annotations = annotations
-
def _append_new_node(self, node):
original = self._namespace.get(node.name)
# Special case constants here; we allow duplication to sort-of
if not ns_compound:
ns_compound = self._namespace.get('_' + compound.name)
if (not ns_compound and isinstance(compound, (ast.Record, ast.Union))
- and len(compound.fields) == 0):
+ and len(compound.fields) == 0):
disguised = ast.Record(compound.name, typedef, disguised=True)
self._namespace.append(disguised)
elif not ns_compound:
def register_include_uninstalled(self, include_path):
basename = os.path.basename(include_path)
if not basename.endswith('.gir'):
- raise SystemExit(
-"Include path %r must be a filename path ending in .gir" % (include_path, ))
+ raise SystemExit("Include path %r must be a filename path "
+ "ending in .gir" % (include_path, ))
girname = basename[:-4]
include = ast.Include.from_string(girname)
if include in self._namespace.includes:
path = os.path.join(d, girname)
if os.path.exists(path):
return path
- sys.stderr.write("Couldn't find include %r (search path: %r)\n"\
- % (girname, searchdirs))
+ sys.stderr.write("Couldn't find include %r (search path: %r)\n" % (girname, searchdirs))
sys.exit(1)
@classmethod
def _split_c_string_for_namespace_matches(self, name, is_identifier=False):
matches = [] # Namespaces which might contain this name
- unprefixed_namespaces = [] # Namespaces with no prefix, last resort
+ unprefixed_namespaces = [] # Namespaces with no prefix, last resort
for ns in self._iter_namespaces():
if is_identifier:
prefixes = ns.identifier_prefixes
ident = ident[1:]
try:
matches = self.split_ctype_namespaces(ident)
- except ValueError, e:
+ except ValueError as e:
raise TransformerException(str(e))
for ns, name in matches:
if ns is self._namespace:
ident = ident[1:]
try:
(ns, name) = self.split_csymbol(ident)
- except ValueError, e:
+ except ValueError as e:
raise TransformerException(str(e))
if ns != self._namespace:
raise TransformerException(
# prefix.
try:
name = self._strip_symbol(child)
- except TransformerException, e:
+ except TransformerException as e:
message.warn_symbol(symbol, e)
return None
members.append(ast.Member(name.lower(),
try:
enum_name = self.strip_identifier(symbol.ident)
- except TransformerException, e:
+ except TransformerException as e:
message.warn_symbol(symbol, e)
return None
if symbol.base_type.is_bitfield:
return_ = self._create_return(symbol.base_type.base_type)
try:
name = self._strip_symbol(symbol)
- except TransformerException, e:
+ except TransformerException as e:
message.warn_symbol(symbol, e)
return None
func = ast.Function(name, return_, parameters, False, symbol.ident)
def _create_member(self, symbol, parent_symbol=None):
source_type = symbol.base_type
- if (source_type.type == CTYPE_POINTER and
- symbol.base_type.base_type.type == CTYPE_FUNCTION):
+ if (source_type.type == CTYPE_POINTER
+ and symbol.base_type.base_type.type == CTYPE_FUNCTION):
node = self._create_callback(symbol, member=True)
elif source_type.type == CTYPE_STRUCT and source_type.name is None:
node = self._create_struct(symbol, anonymous=True)
# to be able to properly calculate the size of the compound
# type (e.g. GValue) that contains this array, see
# <https://bugzilla.gnome.org/show_bug.cgi?id=657040>.
- if (source_type.base_type.type == CTYPE_UNION and
- source_type.base_type.name is None):
+ if (source_type.base_type.type == CTYPE_UNION
+ and source_type.base_type.name is None):
synthesized_type = self._synthesize_union_type(symbol, parent_symbol)
ftype = ast.Array(None, synthesized_type, complete_ctype=complete_ctype)
else:
def _create_typedef(self, symbol):
ctype = symbol.base_type.type
- if (ctype == CTYPE_POINTER and
- symbol.base_type.base_type.type == CTYPE_FUNCTION):
+ if (ctype == CTYPE_POINTER and symbol.base_type.base_type.type == CTYPE_FUNCTION):
node = self._create_typedef_callback(symbol)
- elif (ctype == CTYPE_POINTER and
- symbol.base_type.base_type.type == CTYPE_STRUCT):
+ elif (ctype == CTYPE_POINTER and symbol.base_type.base_type.type == CTYPE_STRUCT):
node = self._create_typedef_struct(symbol, disguised=True)
elif ctype == CTYPE_STRUCT:
node = self._create_typedef_struct(symbol)
CTYPE_VOID):
try:
name = self.strip_identifier(symbol.ident)
- except TransformerException, e:
+ except TransformerException as e:
message.warn(e)
return None
if symbol.base_type.name:
derefed_typename = canonical.replace('*', '')
# Preserve "pointerness" of struct/union members
- if (is_member and canonical.endswith('*') and
- derefed_typename in ast.basic_type_names):
+ if (is_member and canonical.endswith('*') and derefed_typename in ast.basic_type_names):
return 'gpointer'
else:
return derefed_typename
# Don't create constants for non-public things
# http://bugzilla.gnome.org/show_bug.cgi?id=572790
- if (symbol.source_filename is None or
- not symbol.source_filename.endswith('.h')):
+ if (symbol.source_filename is None or not symbol.source_filename.endswith('.h')):
return None
try:
name = self._strip_symbol(symbol)
- except TransformerException, e:
+ except TransformerException as e:
message.warn_symbol(symbol, e)
return None
if symbol.const_string is not None:
if isinstance(target, ast.Type):
unaliased = target
if unaliased == ast.TYPE_UINT64:
- value = str(symbol.const_int % 2**64)
+ value = str(symbol.const_int % 2 ** 64)
elif unaliased == ast.TYPE_UINT32:
- value = str(symbol.const_int % 2**32)
+ value = str(symbol.const_int % 2 ** 32)
elif unaliased == ast.TYPE_UINT16:
- value = str(symbol.const_int % 2**16)
+ value = str(symbol.const_int % 2 ** 16)
elif unaliased == ast.TYPE_UINT8:
- value = str(symbol.const_int % 2**16)
+ value = str(symbol.const_int % 2 ** 16)
else:
value = str(symbol.const_int)
elif symbol.const_double is not None:
def _create_typedef_struct(self, symbol, disguised=False):
try:
name = self.strip_identifier(symbol.ident)
- except TransformerException, e:
+ except TransformerException as e:
message.warn_symbol(symbol, e)
return None
struct = ast.Record(name, symbol.ident, disguised=disguised)
def _create_typedef_union(self, symbol):
try:
name = self.strip_identifier(symbol.ident)
- except TransformerException, e:
+ except TransformerException as e:
message.warn(e)
return None
union = ast.Union(name, symbol.ident)
else:
try:
name = self.strip_identifier(symbol.ident)
- except TransformerException, e:
+ except TransformerException as e:
message.warn(e)
return None
compound = klass(name, symbol.ident)
# Mark the 'user_data' arguments
for i, param in enumerate(parameters):
- if (param.type.target_fundamental == 'gpointer' and
- param.argname == 'user_data'):
+ if (param.type.target_fundamental == 'gpointer' and param.argname == 'user_data'):
param.closure_name = param.argname
if member:
elif symbol.ident.find('_') > 0:
try:
name = self._strip_symbol(symbol)
- except TransformerException, e:
+ except TransformerException as e:
message.warn_symbol(symbol, e)
return None
else:
try:
name = self.strip_identifier(symbol.ident)
- except TransformerException, e:
+ except TransformerException as e:
message.warn(e)
return None
callback = ast.Callback(name, retval, parameters, False,
import os
import subprocess
+
_debugflags = None
+
+
def have_debug_flag(flag):
"""Check for whether a specific debugging feature is enabled.
Well-known flags:
_debugflags.remove('')
return flag in _debugflags
+
def break_on_debug_flag(flag):
if have_debug_flag(flag):
import pdb
name = _upperstr_pat2.sub(r'\1_\2', name)
return name
+
_libtool_pat = re.compile("dlname='([A-z0-9\.\-\+]+)'\n")
+
def _extract_dlname_field(la_file):
f = open(la_file)
data = f.read()
else:
return None
+
# Returns the name that we would pass to dlopen() the library
# corresponding to this .la file
def extract_libtool_shlib(la_file):
# a path rather than the raw dlname
return os.path.basename(dlname)
+
def extract_libtool(la_file):
dlname = _extract_dlname_field(la_file)
if dlname is None:
libname = libname.replace('.libs/.libs', '.libs')
return libname
+
# Returns arguments for invoking libtool, if applicable, otherwise None
def get_libtool_command(options):
libtool_infection = not options.nolibtool
return attr_length + indent + self_indent
-def collect_attributes(tag_name, attributes, self_indent,
- self_indent_char, indent=-1):
+def collect_attributes(tag_name, attributes, self_indent, self_indent_char, indent=-1):
if not attributes:
return ''
if _calc_attrs_length(attributes, indent, self_indent) > 79:
first = False
return attr_value
+
def build_xml_tag(tag_name, attributes=None, data=None, self_indent=0,
self_indent_char=' '):
if attributes is None:
len(prefix) + len(suffix))
return prefix + attrs + suffix
+
with LibtoolImporter(None, None):
if 'UNINSTALLED_INTROSPECTION_SRCDIR' in os.environ:
from _giscanner import collect_attributes
def _open_tag(self, tag_name, attributes=None):
if attributes is None:
attributes = []
- attrs = collect_attributes(
- tag_name, attributes, self._indent,
- self._indent_char,
- len(tag_name) + 2)
+ attrs = collect_attributes(tag_name, attributes,
+ self._indent, self._indent_char, len(tag_name) + 2)
self.write_line(u'<%s%s>' % (tag_name, attrs))
def _close_tag(self, tag_name):
line = line.decode('utf-8')
assert isinstance(line, unicode)
if do_escape:
- line = escape(line.encode('utf-8')).decode('utf-8')
+ line = escape(line)
if indent:
- self._data.write('%s%s%s' % (
- self._indent_char * self._indent,
- line.encode('utf-8'),
- self._newline_char))
+ self._data.write('%s%s%s' % (self._indent_char * self._indent,
+ line.encode('utf-8'),
+ self._newline_char))
else:
self._data.write('%s%s' % (line.encode('utf-8'), self._newline_char))
-prefix=/usr/local
+prefix=/src/build/jhbuild
exec_prefix=${prefix}
-libdir=${exec_prefix}/lib
+libdir=/src/build/jhbuild/lib64
bindir=${exec_prefix}/bin
datarootdir=${prefix}/share
datadir=${datarootdir}
Name: gobject-introspection
Description: GObject Introspection
-Version: 1.36.0
+Version: 1.37.1
-prefix=/usr/local
+prefix=/src/build/jhbuild
exec_prefix=${prefix}
-libdir=${exec_prefix}/lib
+libdir=/src/build/jhbuild/lib64
bindir=${exec_prefix}/bin
datarootdir=${prefix}/share
datadir=${datarootdir}
Name: gobject-introspection
Description: GObject Introspection
-Version: 1.36.0
+Version: 1.37.1
[AC_REQUIRE([AM_CHECK_PYTHON_HEADERS])
AC_MSG_CHECKING(for libraries required to link against libpython)
dnl deduce PYTHON_LIBS
-if test "x$PYTHON_LIBS" == x; then
+if test "x$PYTHON_LIBS" = x; then
PYTHON_LIBS=`$PYTHON-config --ldflags --libs`
fi
AC_SUBST(PYTHON_LIBS)
-#!/usr/bin/python
+#!/usr/bin/env python
# pep8.py - Check Python source code formatting, according to PEP 8
-# Copyright (C) 2006 Johann C. Rocholl <johann@browsershots.org>
+# Copyright (C) 2006-2009 Johann C. Rocholl <johann@rocholl.net>
+# Copyright (C) 2009-2013 Florent Xicluna <florent.xicluna@gmail.com>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
-"""
+r"""
Check Python source code formatting, according to PEP 8:
http://www.python.org/dev/peps/pep-0008/
$ python pep8.py -h
This program and its regression test suite live here:
-http://svn.browsershots.org/trunk/devtools/pep8/
-http://trac.browsershots.org/browser/trunk/devtools/pep8/
+http://github.com/jcrocholl/pep8
Groups of errors and warnings:
E errors
500 line length
600 deprecation
700 statements
-
-You can add checks to this program by writing plugins. Each plugin is
-a simple function that is called for each line of source code, either
-physical or logical.
-
-Physical line:
-- Raw line of text from the input file.
-
-Logical line:
-- Multi-line statements converted to a single line.
-- Stripped left and right.
-- Contents of strings replaced with 'xxx' of same length.
-- Comments removed.
-
-The check function requests physical or logical lines by the name of
-the first argument:
-
-def maximum_line_length(physical_line)
-def extraneous_whitespace(logical_line)
-def blank_lines(logical_line, blank_lines, indent_level, line_number)
-
-The last example above demonstrates how check plugins can request
-additional information with extra arguments. All attributes of the
-Checker object are available. Some examples:
-
-lines: a list of the raw lines from the input file
-tokens: the tokens that contribute to this logical line
-line_number: line number in the input file
-blank_lines: blank lines before this one
-indent_char: first indentation character in this file (' ' or '\t')
-indent_level: indentation (with tabs expanded to multiples of 8)
-previous_indent_level: indentation on previous line
-previous_logical: previous logical line
-
-The docstring of each check function shall be the relevant part of
-text from PEP 8. It is printed if the user enables --show-pep8.
-
+900 syntax error
"""
+__version__ = '1.4.5'
import os
import sys
import re
import time
import inspect
+import keyword
import tokenize
from optparse import OptionParser
-from keyword import iskeyword
from fnmatch import fnmatch
-
-__version__ = '0.2.0'
-__revision__ = '$Rev$'
-
-default_exclude = '.svn,CVS,*.pyc,*.pyo'
-
-indent_match = re.compile(r'([ \t]*)').match
-raise_comma_match = re.compile(r'raise\s+\w+\s*(,)').match
-
-operators = """
-+ - * / % ^ & | = < > >> <<
-+= -= *= /= %= ^= &= |= == <= >= >>= <<=
-!= <> :
-in is or not and
-""".split()
-
-options = None
-args = None
+try:
+ from configparser import RawConfigParser
+ from io import TextIOWrapper
+except ImportError:
+ from ConfigParser import RawConfigParser
+
+DEFAULT_EXCLUDE = '.svn,CVS,.bzr,.hg,.git,__pycache__'
+DEFAULT_IGNORE = 'E226,E24'
+if sys.platform == 'win32':
+ DEFAULT_CONFIG = os.path.expanduser(r'~\.pep8')
+else:
+ DEFAULT_CONFIG = os.path.join(os.getenv('XDG_CONFIG_HOME') or
+ os.path.expanduser('~/.config'), 'pep8')
+PROJECT_CONFIG = ('.pep8', 'tox.ini', 'setup.cfg')
+TESTSUITE_PATH = os.path.join(os.path.dirname(__file__), 'testsuite')
+MAX_LINE_LENGTH = 79
+REPORT_FORMAT = {
+ 'default': '%(path)s:%(row)d:%(col)d: %(code)s %(text)s',
+ 'pylint': '%(path)s:%(row)d: [%(code)s] %(text)s',
+}
+
+PyCF_ONLY_AST = 1024
+SINGLETONS = frozenset(['False', 'None', 'True'])
+KEYWORDS = frozenset(keyword.kwlist + ['print']) - SINGLETONS
+UNARY_OPERATORS = frozenset(['>>', '**', '*', '+', '-'])
+ARITHMETIC_OP = frozenset(['**', '*', '/', '//', '+', '-'])
+WS_OPTIONAL_OPERATORS = ARITHMETIC_OP.union(['^', '&', '|', '<<', '>>', '%'])
+WS_NEEDED_OPERATORS = frozenset([
+ '**=', '*=', '/=', '//=', '+=', '-=', '!=', '<>', '<', '>',
+ '%=', '^=', '&=', '|=', '==', '<=', '>=', '<<=', '>>=', '='])
+WHITESPACE = frozenset(' \t')
+SKIP_TOKENS = frozenset([tokenize.COMMENT, tokenize.NL, tokenize.NEWLINE,
+ tokenize.INDENT, tokenize.DEDENT])
+BENCHMARK_KEYS = ['directories', 'files', 'logical lines', 'physical lines']
+
+INDENT_REGEX = re.compile(r'([ \t]*)')
+RAISE_COMMA_REGEX = re.compile(r'raise\s+\w+\s*,')
+RERAISE_COMMA_REGEX = re.compile(r'raise\s+\w+\s*,\s*\w+\s*,\s*\w+')
+ERRORCODE_REGEX = re.compile(r'\b[A-Z]\d{3}\b')
+DOCSTRING_REGEX = re.compile(r'u?r?["\']')
+EXTRANEOUS_WHITESPACE_REGEX = re.compile(r'[[({] | []}),;:]')
+WHITESPACE_AFTER_COMMA_REGEX = re.compile(r'[,;:]\s*(?: |\t)')
+COMPARE_SINGLETON_REGEX = re.compile(r'([=!]=)\s*(None|False|True)')
+COMPARE_TYPE_REGEX = re.compile(r'(?:[=!]=|is(?:\s+not)?)\s*type(?:s.\w+Type'
+ r'|\s*\(\s*([^)]*[^ )])\s*\))')
+KEYWORD_REGEX = re.compile(r'(\s*)\b(?:%s)\b(\s*)' % r'|'.join(KEYWORDS))
+OPERATOR_REGEX = re.compile(r'(?:[^,\s])(\s*)(?:[-+*/|!<=>%&^]+)(\s*)')
+LAMBDA_REGEX = re.compile(r'\blambda\b')
+HUNK_REGEX = re.compile(r'^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@.*$')
+
+# Work around Python < 2.6 behaviour, which does not generate NL after
+# a comment which is on a line by itself.
+COMMENT_WITH_NL = tokenize.generate_tokens(['#\n'].pop).send(None)[1] == '#\n'
##############################################################################
def tabs_or_spaces(physical_line, indent_char):
- """
+ r"""
Never mix tabs and spaces.
The most popular way of indenting Python is with spaces only. The
invoking the Python command line interpreter with the -t option, it issues
warnings about code that illegally mixes tabs and spaces. When using -tt
these warnings become errors. These options are highly recommended!
+
+ Okay: if a == 0:\n a = 1\n b = 1
+ E101: if a == 0:\n a = 1\n\tb = 1
"""
- indent = indent_match(physical_line).group(1)
+ indent = INDENT_REGEX.match(physical_line).group(1)
for offset, char in enumerate(indent):
if char != indent_char:
return offset, "E101 indentation contains mixed spaces and tabs"
def tabs_obsolete(physical_line):
- """
+ r"""
For new projects, spaces-only are strongly recommended over tabs. Most
editors have features that make this easy to do.
+
+ Okay: if True:\n return
+ W191: if True:\n\treturn
"""
- indent = indent_match(physical_line).group(1)
- if indent.count('\t'):
+ indent = INDENT_REGEX.match(physical_line).group(1)
+ if '\t' in indent:
return indent.index('\t'), "W191 indentation contains tabs"
def trailing_whitespace(physical_line):
- """
+ r"""
JCR: Trailing whitespace is superfluous.
+ FBM: Except when it occurs as part of a blank line (i.e. the line is
+ nothing but whitespace). According to Python docs[1] a line with only
+ whitespace is considered a blank line, and is to be ignored. However,
+ matching a blank line to its indentation level avoids mistakenly
+ terminating a multi-line statement (e.g. class declaration) when
+ pasting code into the standard Python interpreter.
+
+ [1] http://docs.python.org/reference/lexical_analysis.html#blank-lines
+
+ The warning returned varies on whether the line itself is blank, for easier
+ filtering for those who want to indent their blank lines.
+
+ Okay: spam(1)\n#
+ W291: spam(1) \n#
+ W293: class Foo(object):\n \n bang = 12
"""
- physical_line = physical_line.rstrip('\n') # chr(10), newline
- physical_line = physical_line.rstrip('\r') # chr(13), carriage return
- physical_line = physical_line.rstrip('\x0c') # chr(12), form feed, ^L
- stripped = physical_line.rstrip()
+ physical_line = physical_line.rstrip('\n') # chr(10), newline
+ physical_line = physical_line.rstrip('\r') # chr(13), carriage return
+ physical_line = physical_line.rstrip('\x0c') # chr(12), form feed, ^L
+ stripped = physical_line.rstrip(' \t\v')
if physical_line != stripped:
- return len(stripped), "W291 trailing whitespace"
+ if stripped:
+ return len(stripped), "W291 trailing whitespace"
+ else:
+ return 0, "W293 blank line contains whitespace"
def trailing_blank_lines(physical_line, lines, line_number):
- """
+ r"""
JCR: Trailing blank lines are superfluous.
+
+ Okay: spam(1)
+ W391: spam(1)\n
"""
- if physical_line.strip() == '' and line_number == len(lines):
+ if not physical_line.rstrip() and line_number == len(lines):
return 0, "W391 blank line at end of file"
def missing_newline(physical_line):
"""
JCR: The last line should have a newline.
+
+ Reports warning W292.
"""
if physical_line.rstrip() == physical_line:
return len(physical_line), "W292 no newline at end of file"
-def maximum_line_length(physical_line):
+def maximum_line_length(physical_line, max_line_length):
"""
Limit all lines to a maximum of 79 characters.
ugly. Therefore, please limit all lines to a maximum of 79 characters.
For flowing long blocks of text (docstrings or comments), limiting the
length to 72 characters is recommended.
+
+ Reports error E501.
"""
- length = len(physical_line.rstrip())
- if length > 99:
- return 79, "E501 line too long (%d characters)" % length
+ line = physical_line.rstrip()
+ length = len(line)
+ if length > max_line_length:
+ if noqa(line):
+ return
+ if hasattr(line, 'decode'): # Python 2
+ # The line could contain multi-byte characters
+ try:
+ length = len(line.decode('utf-8'))
+ except UnicodeError:
+ pass
+ if length > max_line_length:
+ return (max_line_length, "E501 line too long "
+ "(%d > %d characters)" % (length, max_line_length))
##############################################################################
##############################################################################
+def blank_lines(logical_line, blank_lines, indent_level, line_number,
+ previous_logical, previous_indent_level):
+ r"""
+ Separate top-level function and class definitions with two blank lines.
+
+ Method definitions inside a class are separated by a single blank line.
+
+ Extra blank lines may be used (sparingly) to separate groups of related
+ functions. Blank lines may be omitted between a bunch of related
+ one-liners (e.g. a set of dummy implementations).
+
+ Use blank lines in functions, sparingly, to indicate logical sections.
+
+ Okay: def a():\n pass\n\n\ndef b():\n pass
+ Okay: def a():\n pass\n\n\n# Foo\n# Bar\n\ndef b():\n pass
+
+ E301: class Foo:\n b = 0\n def bar():\n pass
+ E302: def a():\n pass\n\ndef b(n):\n pass
+ E303: def a():\n pass\n\n\n\ndef b(n):\n pass
+ E303: def a():\n\n\n\n pass
+ E304: @decorator\n\ndef a():\n pass
+ """
+ if line_number < 3 and not previous_logical:
+ return # Don't expect blank lines before the first line
+ if previous_logical.startswith('@'):
+ if blank_lines:
+ yield 0, "E304 blank lines found after function decorator"
+ elif blank_lines > 2 or (indent_level and blank_lines == 2):
+ yield 0, "E303 too many blank lines (%d)" % blank_lines
+ elif logical_line.startswith(('def ', 'class ', '@')):
+ if indent_level:
+ if not (blank_lines or previous_indent_level < indent_level or
+ DOCSTRING_REGEX.match(previous_logical)):
+ yield 0, "E301 expected 1 blank line, found 0"
+ elif blank_lines != 2:
+ yield 0, "E302 expected 2 blank lines, found %d" % blank_lines
+
+
def extraneous_whitespace(logical_line):
"""
Avoid extraneous whitespace in the following situations:
- Immediately inside parentheses, brackets or braces.
- Immediately before a comma, semicolon, or colon.
+
+ Okay: spam(ham[1], {eggs: 2})
+ E201: spam( ham[1], {eggs: 2})
+ E201: spam(ham[ 1], {eggs: 2})
+ E201: spam(ham[1], { eggs: 2})
+ E202: spam(ham[1], {eggs: 2} )
+ E202: spam(ham[1 ], {eggs: 2})
+ E202: spam(ham[1], {eggs: 2 })
+
+ E203: if x == 4: print x, y; x, y = y , x
+ E203: if x == 4: print x, y ; x, y = y, x
+ E203: if x == 4 : print x, y; x, y = y, x
"""
line = logical_line
- for char in '([{':
- found = line.find(char + ' ')
- if found > -1:
- return found + 1, "E201 whitespace after '%s'" % char
- for char in '}])':
- found = line.find(' ' + char)
- if found > -1 and line[found - 1] != ',':
- return found, "E202 whitespace before '%s'" % char
- for char in ',;:':
- found = line.find(' ' + char)
- if found > -1:
- return found, "E203 whitespace before '%s'" % char
+ for match in EXTRANEOUS_WHITESPACE_REGEX.finditer(line):
+ text = match.group()
+ char = text.strip()
+ found = match.start()
+ if text == char + ' ':
+ # assert char in '([{'
+ yield found + 1, "E201 whitespace after '%s'" % char
+ elif line[found - 1] != ',':
+ code = ('E202' if char in '}])' else 'E203') # if char in ',;:'
+ yield found, "%s whitespace before '%s'" % (code, char)
+
+
+def whitespace_around_keywords(logical_line):
+ r"""
+ Avoid extraneous whitespace around keywords.
+
+ Okay: True and False
+ E271: True and False
+ E272: True and False
+ E273: True and\tFalse
+ E274: True\tand False
+ """
+ for match in KEYWORD_REGEX.finditer(logical_line):
+ before, after = match.groups()
+
+ if '\t' in before:
+ yield match.start(1), "E274 tab before keyword"
+ elif len(before) > 1:
+ yield match.start(1), "E272 multiple spaces before keyword"
+
+ if '\t' in after:
+ yield match.start(2), "E273 tab after keyword"
+ elif len(after) > 1:
+ yield match.start(2), "E271 multiple spaces after keyword"
def missing_whitespace(logical_line):
"""
JCR: Each comma, semicolon or colon should be followed by whitespace.
+
+ Okay: [a, b]
+ Okay: (3,)
+ Okay: a[1:4]
+ Okay: a[:4]
+ Okay: a[1:]
+ Okay: a[1:4:2]
+ E231: ['a','b']
+ E231: foo(bar,baz)
+ E231: [{'a':'b'}]
"""
line = logical_line
for index in range(len(line) - 1):
char = line[index]
- if char in ',;:' and line[index + 1] != ' ':
+ if char in ',;:' and line[index + 1] not in WHITESPACE:
before = line[:index]
- if char == ':' and before.count('[') > before.count(']'):
- continue # Slice syntax, no space required
- return index, "E231 missing whitespace after '%s'" % char
+ if char == ':' and before.count('[') > before.count(']') and \
+ before.rfind('{') < before.rfind('['):
+ continue # Slice syntax, no space required
+ if char == ',' and line[index + 1] == ')':
+ continue # Allow tuple with only one element: (3,)
+ yield index, "E231 missing whitespace after '%s'" % char
def indentation(logical_line, previous_logical, indent_char,
indent_level, previous_indent_level):
- """
+ r"""
Use 4 spaces per indentation level.
For really old code that you don't want to mess up, you can continue to
use 8-space tabs.
+
+ Okay: a = 1
+ Okay: if a == 0:\n a = 1
+ E111: a = 1
+
+ Okay: for item in items:\n pass
+ E112: for item in items:\npass
+
+ Okay: a = 1\nb = 2
+ E113: a = 1\n b = 2
"""
if indent_char == ' ' and indent_level % 4:
- return 0, "E111 indentation is not a multiple of four"
+ yield 0, "E111 indentation is not a multiple of four"
indent_expect = previous_logical.endswith(':')
if indent_expect and indent_level <= previous_indent_level:
- return 0, "E112 expected an indented block"
+ yield 0, "E112 expected an indented block"
if indent_level > previous_indent_level and not indent_expect:
- return 0, "E113 unexpected indentation"
+ yield 0, "E113 unexpected indentation"
+
+
+def continuation_line_indentation(logical_line, tokens, indent_level, verbose):
+ r"""
+ Continuation lines should align wrapped elements either vertically using
+ Python's implicit line joining inside parentheses, brackets and braces, or
+ using a hanging indent.
+
+ When using a hanging indent the following considerations should be applied:
+
+ - there should be no arguments on the first line, and
+
+ - further indentation should be used to clearly distinguish itself as a
+ continuation line.
+
+ Okay: a = (\n)
+ E123: a = (\n )
+
+ Okay: a = (\n 42)
+ E121: a = (\n 42)
+ E122: a = (\n42)
+ E123: a = (\n 42\n )
+ E124: a = (24,\n 42\n)
+ E125: if (a or\n b):\n pass
+ E126: a = (\n 42)
+ E127: a = (24,\n 42)
+ E128: a = (24,\n 42)
+ """
+ first_row = tokens[0][2][0]
+ nrows = 1 + tokens[-1][2][0] - first_row
+ if nrows == 1 or noqa(tokens[0][4]):
+ return
+
+ # indent_next tells us whether the next block is indented; assuming
+ # that it is indented by 4 spaces, then we should not allow 4-space
+ # indents on the final continuation line; in turn, some other
+ # indents are allowed to have an extra 4 spaces.
+ indent_next = logical_line.endswith(':')
+
+ row = depth = 0
+ # remember how many brackets were opened on each line
+ parens = [0] * nrows
+ # relative indents of physical lines
+ rel_indent = [0] * nrows
+ # visual indents
+ indent_chances = {}
+ last_indent = tokens[0][2]
+ indent = [last_indent[1]]
+ if verbose >= 3:
+ print(">>> " + tokens[0][4].rstrip())
+
+ for token_type, text, start, end, line in tokens:
+
+ newline = row < start[0] - first_row
+ if newline:
+ row = start[0] - first_row
+ newline = (not last_token_multiline and
+ token_type not in (tokenize.NL, tokenize.NEWLINE))
+
+ if newline:
+ # this is the beginning of a continuation line.
+ last_indent = start
+ if verbose >= 3:
+ print("... " + line.rstrip())
+
+ # record the initial indent.
+ rel_indent[row] = expand_indent(line) - indent_level
+
+ if depth:
+ # a bracket expression in a continuation line.
+ # find the line that it was opened on
+ for open_row in range(row - 1, -1, -1):
+ if parens[open_row]:
+ break
+ else:
+ # an unbracketed continuation line (ie, backslash)
+ open_row = 0
+ hang = rel_indent[row] - rel_indent[open_row]
+ visual_indent = indent_chances.get(start[1])
+
+ if token_type == tokenize.OP and text in ']})':
+ # this line starts with a closing bracket
+ if indent[depth]:
+ if start[1] != indent[depth]:
+ yield (start, "E124 closing bracket does not match "
+ "visual indentation")
+ elif hang:
+ yield (start, "E123 closing bracket does not match "
+ "indentation of opening bracket's line")
+ elif visual_indent is True:
+ # visual indent is verified
+ if not indent[depth]:
+ indent[depth] = start[1]
+ elif visual_indent in (text, str):
+ # ignore token lined up with matching one from a previous line
+ pass
+ elif indent[depth] and start[1] < indent[depth]:
+ # visual indent is broken
+ yield (start, "E128 continuation line "
+ "under-indented for visual indent")
+ elif hang == 4 or (indent_next and rel_indent[row] == 8):
+ # hanging indent is verified
+ pass
+ else:
+ # indent is broken
+ if hang <= 0:
+ error = "E122", "missing indentation or outdented"
+ elif indent[depth]:
+ error = "E127", "over-indented for visual indent"
+ elif hang % 4:
+ error = "E121", "indentation is not a multiple of four"
+ else:
+ error = "E126", "over-indented for hanging indent"
+ yield start, "%s continuation line %s" % error
+
+ # look for visual indenting
+ if (parens[row] and token_type not in (tokenize.NL, tokenize.COMMENT)
+ and not indent[depth]):
+ indent[depth] = start[1]
+ indent_chances[start[1]] = True
+ if verbose >= 4:
+ print("bracket depth %s indent to %s" % (depth, start[1]))
+ # deal with implicit string concatenation
+ elif (token_type in (tokenize.STRING, tokenize.COMMENT) or
+ text in ('u', 'ur', 'b', 'br')):
+ indent_chances[start[1]] = str
+ # special case for the "if" statement because len("if (") == 4
+ elif not indent_chances and not row and not depth and text == 'if':
+ indent_chances[end[1] + 1] = True
+
+ # keep track of bracket depth
+ if token_type == tokenize.OP:
+ if text in '([{':
+ depth += 1
+ indent.append(0)
+ parens[row] += 1
+ if verbose >= 4:
+ print("bracket depth %s seen, col %s, visual min = %s" %
+ (depth, start[1], indent[depth]))
+ elif text in ')]}' and depth > 0:
+ # parent indents should not be more than this one
+ prev_indent = indent.pop() or last_indent[1]
+ for d in range(depth):
+ if indent[d] > prev_indent:
+ indent[d] = 0
+ for ind in list(indent_chances):
+ if ind >= prev_indent:
+ del indent_chances[ind]
+ depth -= 1
+ if depth:
+ indent_chances[indent[depth]] = True
+ for idx in range(row, -1, -1):
+ if parens[idx]:
+ parens[idx] -= 1
+ break
+ assert len(indent) == depth + 1
+ if start[1] not in indent_chances:
+ # allow to line up tokens
+ indent_chances[start[1]] = text
+
+ last_token_multiline = (start[0] != end[0])
+
+ if indent_next and rel_indent[-1] == 4:
+ yield (last_indent, "E125 continuation line does not distinguish "
+ "itself from next logical line")
def whitespace_before_parameters(logical_line, tokens):
- Immediately before the open parenthesis that starts an indexing or
slicing.
+
+ Okay: spam(1)
+ E211: spam (1)
+
+ Okay: dict['key'] = list[index]
+ E211: dict ['key'] = list[index]
+ E211: dict['key'] = list [index]
"""
prev_type = tokens[0][0]
prev_text = tokens[0][1]
if (token_type == tokenize.OP and
text in '([' and
start != prev_end and
- prev_type == tokenize.NAME and
+ (prev_type == tokenize.NAME or prev_text in '}])') and
+ # Syntax "class A (B):" is allowed, but avoid it
(index < 2 or tokens[index - 2][1] != 'class') and
- (not iskeyword(prev_text))):
- return prev_end, "E211 whitespace before '%s'" % text
+ # Allow "return (a.foo for a in range(5))"
+ not keyword.iskeyword(prev_text)):
+ yield prev_end, "E211 whitespace before '%s'" % text
prev_type = token_type
prev_text = text
prev_end = end
def whitespace_around_operator(logical_line):
- """
+ r"""
Avoid extraneous whitespace in the following situations:
- More than one space around an assignment (or other) operator to
align it with another.
+
+ Okay: a = 12 + 3
+ E221: a = 4 + 5
+ E222: a = 4 + 5
+ E223: a = 4\t+ 5
+ E224: a = 4 +\t5
"""
- line = logical_line
- for operator in operators:
- found = line.find(' ' + operator)
- if found > -1:
- return found, "E221 multiple spaces before operator"
- found = line.find(operator + ' ')
- if found > -1:
- return found, "E222 multiple spaces after operator"
- found = line.find('\t' + operator)
- if found > -1:
- return found, "E223 tab before operator"
- found = line.find(operator + '\t')
- if found > -1:
- return found, "E224 tab after operator"
+ for match in OPERATOR_REGEX.finditer(logical_line):
+ before, after = match.groups()
+
+ if '\t' in before:
+ yield match.start(1), "E223 tab before operator"
+ elif len(before) > 1:
+ yield match.start(1), "E221 multiple spaces before operator"
+
+ if '\t' in after:
+ yield match.start(2), "E224 tab after operator"
+ elif len(after) > 1:
+ yield match.start(2), "E222 multiple spaces after operator"
+
+
+def missing_whitespace_around_operator(logical_line, tokens):
+ r"""
+ - Always surround these binary operators with a single space on
+ either side: assignment (=), augmented assignment (+=, -= etc.),
+ comparisons (==, <, >, !=, <>, <=, >=, in, not in, is, is not),
+ Booleans (and, or, not).
+
+ - Use spaces around arithmetic operators.
+
+ Okay: i = i + 1
+ Okay: submitted += 1
+ Okay: x = x * 2 - 1
+ Okay: hypot2 = x * x + y * y
+ Okay: c = (a + b) * (a - b)
+ Okay: foo(bar, key='word', *args, **kwargs)
+ Okay: alpha[:-i]
+
+ E225: i=i+1
+ E225: submitted +=1
+ E225: x = x /2 - 1
+ E225: z = x **y
+ E226: c = (a+b) * (a-b)
+ E226: hypot2 = x*x + y*y
+ E227: c = a|b
+ E228: msg = fmt%(errno, errmsg)
+ """
+ parens = 0
+ need_space = False
+ prev_type = tokenize.OP
+ prev_text = prev_end = None
+ for token_type, text, start, end, line in tokens:
+ if token_type in (tokenize.NL, tokenize.NEWLINE, tokenize.ERRORTOKEN):
+ # ERRORTOKEN is triggered by backticks in Python 3
+ continue
+ if text in ('(', 'lambda'):
+ parens += 1
+ elif text == ')':
+ parens -= 1
+ if need_space:
+ if start != prev_end:
+ # Found a (probably) needed space
+ if need_space is not True and not need_space[1]:
+ yield (need_space[0],
+ "E225 missing whitespace around operator")
+ need_space = False
+ elif text == '>' and prev_text in ('<', '-'):
+ # Tolerate the "<>" operator, even if running Python 3
+ # Deal with Python 3's annotated return value "->"
+ pass
+ else:
+ if need_space is True or need_space[1]:
+ # A needed trailing space was not found
+ yield prev_end, "E225 missing whitespace around operator"
+ else:
+ code, optype = 'E226', 'arithmetic'
+ if prev_text == '%':
+ code, optype = 'E228', 'modulo'
+ elif prev_text not in ARITHMETIC_OP:
+ code, optype = 'E227', 'bitwise or shift'
+ yield (need_space[0], "%s missing whitespace "
+ "around %s operator" % (code, optype))
+ need_space = False
+ elif token_type == tokenize.OP and prev_end is not None:
+ if text == '=' and parens:
+ # Allow keyword args or defaults: foo(bar=None).
+ pass
+ elif text in WS_NEEDED_OPERATORS:
+ need_space = True
+ elif text in UNARY_OPERATORS:
+ # Check if the operator is being used as a binary operator
+ # Allow unary operators: -123, -x, +1.
+ # Allow argument unpacking: foo(*args, **kwargs).
+ if prev_type == tokenize.OP:
+ binary_usage = (prev_text in '}])')
+ elif prev_type == tokenize.NAME:
+ binary_usage = (prev_text not in KEYWORDS)
+ else:
+ binary_usage = (prev_type not in SKIP_TOKENS)
+
+ if binary_usage:
+ need_space = None
+ elif text in WS_OPTIONAL_OPERATORS:
+ need_space = None
+
+ if need_space is None:
+ # Surrounding space is optional, but ensure that
+ # trailing space matches opening space
+ need_space = (prev_end, start != prev_end)
+ elif need_space and start == prev_end:
+ # A needed opening space was not found
+ yield prev_end, "E225 missing whitespace around operator"
+ need_space = False
+ prev_type = token_type
+ prev_text = text
+ prev_end = end
def whitespace_around_comma(logical_line):
- """
+ r"""
Avoid extraneous whitespace in the following situations:
- More than one space around an assignment (or other) operator to
align it with another.
- JCR: This should also be applied around comma etc.
+ Note: these checks are disabled by default
+
+ Okay: a = (1, 2)
+ E241: a = (1, 2)
+ E242: a = (1,\t2)
"""
line = logical_line
- for separator in ',;:':
- found = line.find(separator + ' ')
- if found > -1:
- return found + 1, "E241 multiple spaces after '%s'" % separator
- found = line.find(separator + '\t')
- if found > -1:
- return found + 1, "E242 tab after '%s'" % separator
+ for m in WHITESPACE_AFTER_COMMA_REGEX.finditer(line):
+ found = m.start() + 1
+ if '\t' in m.group():
+ yield found, "E242 tab after '%s'" % m.group()[0]
+ else:
+ yield found, "E241 multiple spaces after '%s'" % m.group()[0]
-def imports_on_separate_lines(logical_line):
+def whitespace_around_named_parameter_equals(logical_line, tokens):
+ """
+ Don't use spaces around the '=' sign when used to indicate a
+ keyword argument or a default parameter value.
+
+ Okay: def complex(real, imag=0.0):
+ Okay: return magic(r=real, i=imag)
+ Okay: boolean(a == b)
+ Okay: boolean(a != b)
+ Okay: boolean(a <= b)
+ Okay: boolean(a >= b)
+
+ E251: def complex(real, imag = 0.0):
+ E251: return magic(r = real, i = imag)
+ """
+ parens = 0
+ no_space = False
+ prev_end = None
+ message = "E251 unexpected spaces around keyword / parameter equals"
+ for token_type, text, start, end, line in tokens:
+ if no_space:
+ no_space = False
+ if start != prev_end:
+ yield (prev_end, message)
+ elif token_type == tokenize.OP:
+ if text == '(':
+ parens += 1
+ elif text == ')':
+ parens -= 1
+ elif parens and text == '=':
+ no_space = True
+ if start != prev_end:
+ yield (prev_end, message)
+ prev_end = end
+
+
+def whitespace_before_inline_comment(logical_line, tokens):
+ """
+ Separate inline comments by at least two spaces.
+
+ An inline comment is a comment on the same line as a statement. Inline
+ comments should be separated by at least two spaces from the statement.
+ They should start with a # and a single space.
+
+ Okay: x = x + 1 # Increment x
+ Okay: x = x + 1 # Increment x
+ E261: x = x + 1 # Increment x
+ E262: x = x + 1 #Increment x
+ E262: x = x + 1 # Increment x
"""
+ prev_end = (0, 0)
+ for token_type, text, start, end, line in tokens:
+ if token_type == tokenize.COMMENT:
+ if not line[:start[1]].strip():
+ continue
+ if prev_end[0] == start[0] and start[1] < prev_end[1] + 2:
+ yield (prev_end,
+ "E261 at least two spaces before inline comment")
+ symbol, sp, comment = text.partition(' ')
+ if symbol not in ('#', '#:') or comment[:1].isspace():
+ yield start, "E262 inline comment should start with '# '"
+ elif token_type != tokenize.NL:
+ prev_end = end
+
+
+def imports_on_separate_lines(logical_line):
+ r"""
Imports should usually be on separate lines.
+
+ Okay: import os\nimport sys
+ E401: import sys, os
+
+ Okay: from subprocess import Popen, PIPE
+ Okay: from myclas import MyClass
+ Okay: from foo.bar.yourclass import YourClass
+ Okay: import myclass
+ Okay: import foo.bar.yourclass
"""
line = logical_line
if line.startswith('import '):
found = line.find(',')
- if found > -1:
- return found, "E401 multiple imports on one line"
+ if -1 < found and ';' not in line[:found]:
+ yield found, "E401 multiple imports on one line"
def compound_statements(logical_line):
- """
+ r"""
Compound statements (multiple statements on the same line) are
generally discouraged.
+
+ While sometimes it's okay to put an if/for/while with a small body
+ on the same line, never do this for multi-clause statements. Also
+ avoid folding such long lines!
+
+ Okay: if foo == 'blah':\n do_blah_thing()
+ Okay: do_one()
+ Okay: do_two()
+ Okay: do_three()
+
+ E701: if foo == 'blah': do_blah_thing()
+ E701: for x in lst: total += x
+ E701: while t < 10: t = delay()
+ E701: if foo == 'blah': do_blah_thing()
+ E701: else: do_non_blah_thing()
+ E701: try: something()
+ E701: finally: cleanup()
+ E701: if foo == 'blah': one(); two(); three()
+
+ E702: do_one(); do_two(); do_three()
+ E703: do_four(); # useless semicolon
"""
line = logical_line
+ last_char = len(line) - 1
found = line.find(':')
- if -1 < found < len(line) - 1:
+ if -1 < found < last_char:
before = line[:found]
- if (before.count('{') <= before.count('}') and # {'a': 1} (dict)
- before.count('[') <= before.count(']') and # [1:2] (slice)
- not re.search(r'\blambda\b', before)): # lambda x: x
- return found, "E701 multiple statements on one line (colon)"
+ if (before.count('{') <= before.count('}') and # {'a': 1} (dict)
+ before.count('[') <= before.count(']') and # [1:2] (slice)
+ before.count('(') <= before.count(')') and # (Python 3 annotation)
+ not LAMBDA_REGEX.search(before)): # lambda x: x
+ yield found, "E701 multiple statements on one line (colon)"
found = line.find(';')
if -1 < found:
- return found, "E702 multiple statements on one line (semicolon)"
+ if found < last_char:
+ yield found, "E702 multiple statements on one line (semicolon)"
+ else:
+ yield found, "E703 statement ends with a semicolon"
-def python_3000_has_key(logical_line):
+def explicit_line_join(logical_line, tokens):
+ r"""
+ Avoid explicit line join between brackets.
+
+ The preferred way of wrapping long lines is by using Python's implied line
+ continuation inside parentheses, brackets and braces. Long lines can be
+ broken over multiple lines by wrapping expressions in parentheses. These
+ should be used in preference to using a backslash for line continuation.
+
+ E502: aaa = [123, \\n 123]
+ E502: aaa = ("bbb " \\n "ccc")
+
+ Okay: aaa = [123,\n 123]
+ Okay: aaa = ("bbb "\n "ccc")
+ Okay: aaa = "bbb " \\n "ccc"
+ """
+ prev_start = prev_end = parens = 0
+ for token_type, text, start, end, line in tokens:
+ if start[0] != prev_start and parens and backslash:
+ yield backslash, "E502 the backslash is redundant between brackets"
+ if end[0] != prev_end:
+ if line.rstrip('\r\n').endswith('\\'):
+ backslash = (end[0], len(line.splitlines()[-1]) - 1)
+ else:
+ backslash = None
+ prev_start = prev_end = end[0]
+ else:
+ prev_start = start[0]
+ if token_type == tokenize.OP:
+ if text in '([{':
+ parens += 1
+ elif text in ')]}':
+ parens -= 1
+
+
+def comparison_to_singleton(logical_line):
+ """
+ Comparisons to singletons like None should always be done
+ with "is" or "is not", never the equality operators.
+
+ Okay: if arg is not None:
+ E711: if arg != None:
+ E712: if arg == True:
+
+ Also, beware of writing if x when you really mean if x is not None --
+ e.g. when testing whether a variable or argument that defaults to None was
+ set to some other value. The other value might have a type (such as a
+ container) that could be false in a boolean context!
+ """
+ match = COMPARE_SINGLETON_REGEX.search(logical_line)
+ if match:
+ same = (match.group(1) == '==')
+ singleton = match.group(2)
+ msg = "'if cond is %s:'" % (('' if same else 'not ') + singleton)
+ if singleton in ('None',):
+ code = 'E711'
+ else:
+ code = 'E712'
+ nonzero = ((singleton == 'True' and same) or
+ (singleton == 'False' and not same))
+ msg += " or 'if %scond:'" % ('' if nonzero else 'not ')
+ yield match.start(1), ("%s comparison to %s should be %s" %
+ (code, singleton, msg))
+
+
+def comparison_type(logical_line):
"""
- The {}.has_key() method will be removed in the future version of
- Python. Use the 'in' operation instead, like:
- d = {"a": 1, "b": 2}
- if "b" in d:
- print d["b"]
+ Object type comparisons should always use isinstance() instead of
+ comparing types directly.
+
+ Okay: if isinstance(obj, int):
+ E721: if type(obj) is type(1):
+
+ When checking if an object is a string, keep in mind that it might be a
+ unicode string too! In Python 2.3, str and unicode have a common base
+ class, basestring, so you can do:
+
+ Okay: if isinstance(obj, basestring):
+ Okay: if type(a1) is type(b1):
+ """
+ match = COMPARE_TYPE_REGEX.search(logical_line)
+ if match:
+ inst = match.group(1)
+ if inst and isidentifier(inst) and inst not in SINGLETONS:
+ return # Allow comparison for types which are not obvious
+ yield match.start(), "E721 do not compare types, use 'isinstance()'"
+
+
+def python_3000_has_key(logical_line):
+ r"""
+ The {}.has_key() method is removed in the Python 3.
+ Use the 'in' operation instead.
+
+ Okay: if "alph" in d:\n print d["alph"]
+ W601: assert d.has_key('alph')
"""
pos = logical_line.find('.has_key(')
if pos > -1:
- return pos, "W601 .has_key() is deprecated, use 'in'"
+ yield pos, "W601 .has_key() is deprecated, use 'in'"
def python_3000_raise_comma(logical_line):
The paren-using form is preferred because when the exception arguments
are long or include string formatting, you don't need to use line
continuation characters thanks to the containing parentheses. The older
- form will be removed in Python 3000.
+ form is removed in Python 3.
+
+ Okay: raise DummyError("Message")
+ W602: raise DummyError, "Message"
"""
- match = raise_comma_match(logical_line)
- if match:
- return match.start(1), "W602 deprecated form of raising exception"
+ match = RAISE_COMMA_REGEX.match(logical_line)
+ if match and not RERAISE_COMMA_REGEX.match(logical_line):
+ yield match.end() - 1, "W602 deprecated form of raising exception"
+
+
+def python_3000_not_equal(logical_line):
+ """
+ != can also be written <>, but this is an obsolete usage kept for
+ backwards compatibility only. New code should always use !=.
+ The older syntax is removed in Python 3.
+
+ Okay: if a != 'no':
+ W603: if a <> 'no':
+ """
+ pos = logical_line.find('<>')
+ if pos > -1:
+ yield pos, "W603 '<>' is deprecated, use '!='"
+
+
+def python_3000_backticks(logical_line):
+ """
+ Backticks are removed in Python 3.
+ Use repr() instead.
+
+ Okay: val = repr(1 + 2)
+ W604: val = `1 + 2`
+ """
+ pos = logical_line.find('`')
+ if pos > -1:
+ yield pos, "W604 backticks are deprecated, use 'repr()'"
##############################################################################
##############################################################################
+if '' == ''.encode():
+ # Python 2: implicit encoding.
+ def readlines(filename):
+ f = open(filename)
+ try:
+ return f.readlines()
+ finally:
+ f.close()
+
+ isidentifier = re.compile(r'[a-zA-Z_]\w*').match
+ stdin_get_value = sys.stdin.read
+else:
+ # Python 3
+ def readlines(filename):
+ f = open(filename, 'rb')
+ try:
+ coding, lines = tokenize.detect_encoding(f.readline)
+ f = TextIOWrapper(f, coding, line_buffering=True)
+ return [l.decode(coding) for l in lines] + f.readlines()
+ except (LookupError, SyntaxError, UnicodeError):
+ f.close()
+ # Fall back if files are improperly declared
+ f = open(filename, encoding='latin-1')
+ return f.readlines()
+ finally:
+ f.close()
+
+ isidentifier = str.isidentifier
+
+ def stdin_get_value():
+ return TextIOWrapper(sys.stdin.buffer, errors='ignore').read()
+readlines.__doc__ = " Read the source code."
+noqa = re.compile(r'# no(?:qa|pep8)\b', re.I).search
+
+
def expand_indent(line):
- """
+ r"""
Return the amount of indentation.
Tabs are expanded to the next multiple of 8.
>>> expand_indent(' ')
4
- >>> expand_indent('\\t')
+ >>> expand_indent('\t')
8
- >>> expand_indent(' \\t')
+ >>> expand_indent(' \t')
8
- >>> expand_indent(' \\t')
+ >>> expand_indent(' \t')
8
- >>> expand_indent(' \\t')
+ >>> expand_indent(' \t')
16
"""
+ if '\t' not in line:
+ return len(line) - len(line.lstrip())
result = 0
for char in line:
if char == '\t':
- result = result / 8 * 8 + 8
+ result = result // 8 * 8 + 8
elif char == ' ':
result += 1
else:
return result
-##############################################################################
-# Framework to run all checks
-##############################################################################
-
-
-def message(text):
- """Print a message."""
- # print >> sys.stderr, options.prog + ': ' + text
- # print >> sys.stderr, text
- print text
-
-
-def find_checks(argument_name):
- """
- Find all globally visible functions where the first argument name
- starts with argument_name.
- """
- checks = []
- function_type = type(find_checks)
- for name, function in globals().iteritems():
- if type(function) is function_type:
- args = inspect.getargspec(function)[0]
- if len(args) >= 1 and args[0].startswith(argument_name):
- checks.append((name, function, args))
- checks.sort()
- return checks
-
-
def mute_string(text):
"""
Replace contents with 'xxx' to prevent syntax matching.
>>> mute_string("r'abc'")
"r'xxx'"
"""
- start = 1
- end = len(text) - 1
# String modifiers (e.g. u or r)
- if text.endswith('"'):
- start += text.index('"')
- elif text.endswith("'"):
- start += text.index("'")
+ start = text.index(text[-1]) + 1
+ end = len(text) - 1
# Triple quotes
- if text.endswith('"""') or text.endswith("'''"):
+ if text[-3:] in ('"""', "'''"):
start += 2
end -= 2
return text[:start] + 'x' * (end - start) + text[end:]
-class Checker:
+def parse_udiff(diff, patterns=None, parent='.'):
+ """Return a dictionary of matching lines."""
+ # For each file of the diff, the entry key is the filename,
+ # and the value is a set of row numbers to consider.
+ rv = {}
+ path = nrows = None
+ for line in diff.splitlines():
+ if nrows:
+ if line[:1] != '-':
+ nrows -= 1
+ continue
+ if line[:3] == '@@ ':
+ hunk_match = HUNK_REGEX.match(line)
+ row, nrows = [int(g or '1') for g in hunk_match.groups()]
+ rv[path].update(range(row, row + nrows))
+ elif line[:3] == '+++':
+ path = line[4:].split('\t', 1)[0]
+ if path[:2] == 'b/':
+ path = path[2:]
+ rv[path] = set()
+ return dict([(os.path.join(parent, path), rows)
+ for (path, rows) in rv.items()
+ if rows and filename_match(path, patterns)])
+
+
+def filename_match(filename, patterns, default=True):
+ """
+ Check if patterns contains a pattern that matches filename.
+ If patterns is unspecified, this always returns True.
+ """
+ if not patterns:
+ return default
+ return any(fnmatch(filename, pattern) for pattern in patterns)
+
+
+##############################################################################
+# Framework to run all checks
+##############################################################################
+
+
+_checks = {'physical_line': {}, 'logical_line': {}, 'tree': {}}
+
+
+def register_check(check, codes=None):
+ """
+ Register a new check object.
+ """
+ def _add_check(check, kind, codes, args):
+ if check in _checks[kind]:
+ _checks[kind][check][0].extend(codes or [])
+ else:
+ _checks[kind][check] = (codes or [''], args)
+ if inspect.isfunction(check):
+ args = inspect.getargspec(check)[0]
+ if args and args[0] in ('physical_line', 'logical_line'):
+ if codes is None:
+ codes = ERRORCODE_REGEX.findall(check.__doc__ or '')
+ _add_check(check, args[0], codes, args)
+ elif inspect.isclass(check):
+ if inspect.getargspec(check.__init__)[0][:2] == ['self', 'tree']:
+ _add_check(check, 'tree', codes, None)
+
+
+def init_checks_registry():
+ """
+ Register all globally visible functions where the first argument name
+ is 'physical_line' or 'logical_line'.
+ """
+ mod = inspect.getmodule(register_check)
+ for (name, function) in inspect.getmembers(mod, inspect.isfunction):
+ register_check(function)
+init_checks_registry()
+
+
+class Checker(object):
"""
Load a Python source file, tokenize it, check coding style.
"""
- def __init__(self, filename):
+ def __init__(self, filename=None, lines=None,
+ options=None, report=None, **kwargs):
+ if options is None:
+ options = StyleGuide(kwargs).options
+ else:
+ assert not kwargs
+ self._io_error = None
+ self._physical_checks = options.physical_checks
+ self._logical_checks = options.logical_checks
+ self._ast_checks = options.ast_checks
+ self.max_line_length = options.max_line_length
+ self.verbose = options.verbose
self.filename = filename
- self.lines = file(filename).readlines()
- self.physical_checks = find_checks('physical_line')
- self.logical_checks = find_checks('logical_line')
- options.counters['physical lines'] = \
- options.counters.get('physical lines', 0) + len(self.lines)
+ if filename is None:
+ self.filename = 'stdin'
+ self.lines = lines or []
+ elif filename == '-':
+ self.filename = 'stdin'
+ self.lines = stdin_get_value().splitlines(True)
+ elif lines is None:
+ try:
+ self.lines = readlines(filename)
+ except IOError:
+ exc_type, exc = sys.exc_info()[:2]
+ self._io_error = '%s: %s' % (exc_type.__name__, exc)
+ self.lines = []
+ else:
+ self.lines = lines
+ self.report = report or options.report
+ self.report_error = self.report.error
+
+ def report_invalid_syntax(self):
+ exc_type, exc = sys.exc_info()[:2]
+ offset = exc.args[1]
+ if len(offset) > 2:
+ offset = offset[1:3]
+ self.report_error(offset[0], offset[1] or 0,
+ 'E901 %s: %s' % (exc_type.__name__, exc.args[0]),
+ self.report_invalid_syntax)
+ report_invalid_syntax.__doc__ = " Check if the syntax is valid."
def readline(self):
"""
Run all physical checks on a raw input line.
"""
self.physical_line = line
- if self.indent_char is None and len(line) and line[0] in ' \t':
+ if self.indent_char is None and line[:1] in WHITESPACE:
self.indent_char = line[0]
- for name, check, argument_names in self.physical_checks:
+ for name, check, argument_names in self._physical_checks:
result = self.run_check(check, argument_names)
if result is not None:
offset, text = result
previous = None
for token in self.tokens:
token_type, text = token[0:2]
- if token_type in (tokenize.COMMENT, tokenize.NL,
- tokenize.INDENT, tokenize.DEDENT,
- tokenize.NEWLINE):
+ if token_type in SKIP_TOKENS:
continue
if token_type == tokenize.STRING:
text = mute_string(text)
if previous:
- end_line, end = previous[3]
- start_line, start = token[2]
- if end_line != start_line: # different row
- if self.lines[end_line - 1][end - 1] not in '{[(':
+ end_row, end = previous[3]
+ start_row, start = token[2]
+ if end_row != start_row: # different row
+ prev_text = self.lines[end_row - 1][end - 1]
+ if prev_text == ',' or (prev_text not in '{[('
+ and text not in '}])'):
logical.append(' ')
length += 1
- elif end != start: # different column
- fill = self.lines[end_line - 1][end:start]
+ elif end != start: # different column
+ fill = self.lines[end_row - 1][end:start]
logical.append(fill)
length += len(fill)
self.mapping.append((length, token))
length += len(text)
previous = token
self.logical_line = ''.join(logical)
- assert self.logical_line.lstrip() == self.logical_line
- assert self.logical_line.rstrip() == self.logical_line
+ # With Python 2, if the line ends with '\r\r\n' the assertion fails
+ # assert self.logical_line.strip() == self.logical_line
def check_logical(self):
"""
Build a line from tokens and run all logical checks on it.
"""
- options.counters['logical lines'] = \
- options.counters.get('logical lines', 0) + 1
self.build_tokens_line()
+ self.report.increment_logical_line()
first_line = self.lines[self.mapping[0][1][2][0] - 1]
indent = first_line[:self.mapping[0][1][2][1]]
self.previous_indent_level = self.indent_level
self.indent_level = expand_indent(indent)
- if options.verbose >= 2:
- print self.logical_line[:80].rstrip()
- for name, check, argument_names in self.logical_checks:
- if options.verbose >= 3:
- print ' ', name
- result = self.run_check(check, argument_names)
- if result is not None:
+ if self.verbose >= 2:
+ print(self.logical_line[:80].rstrip())
+ for name, check, argument_names in self._logical_checks:
+ if self.verbose >= 4:
+ print(' ' + name)
+ for result in self.run_check(check, argument_names):
offset, text = result
- if type(offset) is tuple:
- original_number, original_offset = offset
+ if isinstance(offset, tuple):
+ orig_number, orig_offset = offset
else:
for token_offset, token in self.mapping:
if offset >= token_offset:
- original_number = token[2][0]
- original_offset = (token[2][1]
- + offset - token_offset)
- self.report_error(original_number, original_offset,
- text, check)
+ orig_number = token[2][0]
+ orig_offset = (token[2][1] + offset - token_offset)
+ self.report_error(orig_number, orig_offset, text, check)
self.previous_logical = self.logical_line
- def check_all(self):
+ def check_ast(self):
+ try:
+ tree = compile(''.join(self.lines), '', 'exec', PyCF_ONLY_AST)
+ except SyntaxError:
+ return self.report_invalid_syntax()
+ for name, cls, _ in self._ast_checks:
+ checker = cls(tree, self.filename)
+ for lineno, offset, text, check in checker.run():
+ if not noqa(self.lines[lineno - 1]):
+ self.report_error(lineno, offset, text, check)
+
+ def generate_tokens(self):
+ if self._io_error:
+ self.report_error(1, 0, 'E902 %s' % self._io_error, readlines)
+ tokengen = tokenize.generate_tokens(self.readline_check_physical)
+ try:
+ for token in tokengen:
+ yield token
+ except (SyntaxError, tokenize.TokenError):
+ self.report_invalid_syntax()
+
+ def check_all(self, expected=None, line_offset=0):
"""
Run all checks on the input file.
"""
- self.file_errors = 0
+ self.report.init_file(self.filename, self.lines, expected, line_offset)
+ if self._ast_checks:
+ self.check_ast()
self.line_number = 0
self.indent_char = None
self.indent_level = 0
self.previous_logical = ''
- self.blank_lines = 0
self.tokens = []
+ self.blank_lines = blank_lines_before_comment = 0
parens = 0
- for token in tokenize.generate_tokens(self.readline_check_physical):
- # print tokenize.tok_name[token[0]], repr(token)
+ for token in self.generate_tokens():
self.tokens.append(token)
token_type, text = token[0:2]
- if token_type == tokenize.OP and text in '([{':
- parens += 1
- if token_type == tokenize.OP and text in '}])':
- parens -= 1
- if token_type == tokenize.NEWLINE and not parens:
- self.check_logical()
- self.blank_lines = 0
- self.tokens = []
- if token_type == tokenize.NL and not parens:
- self.blank_lines += 1
- self.tokens = []
- if token_type == tokenize.COMMENT:
- source_line = token[4]
- token_start = token[2][1]
- if source_line[:token_start].strip() == '':
+ if self.verbose >= 3:
+ if token[2][0] == token[3][0]:
+ pos = '[%s:%s]' % (token[2][1] or '', token[3][1])
+ else:
+ pos = 'l.%s' % token[3][0]
+ print('l.%s\t%s\t%s\t%r' %
+ (token[2][0], pos, tokenize.tok_name[token[0]], text))
+ if token_type == tokenize.OP:
+ if text in '([{':
+ parens += 1
+ elif text in '}])':
+ parens -= 1
+ elif not parens:
+ if token_type == tokenize.NEWLINE:
+ if self.blank_lines < blank_lines_before_comment:
+ self.blank_lines = blank_lines_before_comment
+ self.check_logical()
+ self.tokens = []
+ self.blank_lines = blank_lines_before_comment = 0
+ elif token_type == tokenize.NL:
+ if len(self.tokens) == 1:
+ # The physical line contains only this token.
+ self.blank_lines += 1
+ self.tokens = []
+ elif token_type == tokenize.COMMENT and len(self.tokens) == 1:
+ if blank_lines_before_comment < self.blank_lines:
+ blank_lines_before_comment = self.blank_lines
self.blank_lines = 0
- return self.file_errors
+ if COMMENT_WITH_NL:
+ # The comment also ends a physical line
+ self.tokens = []
+ return self.report.get_file_results()
+
+
+class BaseReport(object):
+ """Collect the results of the checks."""
+ print_filename = False
+
+ def __init__(self, options):
+ self._benchmark_keys = options.benchmark_keys
+ self._ignore_code = options.ignore_code
+ # Results
+ self.elapsed = 0
+ self.total_errors = 0
+ self.counters = dict.fromkeys(self._benchmark_keys, 0)
+ self.messages = {}
+
+ def start(self):
+ """Start the timer."""
+ self._start_time = time.time()
+
+ def stop(self):
+ """Stop the timer."""
+ self.elapsed = time.time() - self._start_time
+
+ def init_file(self, filename, lines, expected, line_offset):
+ """Signal a new file."""
+ self.filename = filename
+ self.lines = lines
+ self.expected = expected or ()
+ self.line_offset = line_offset
+ self.file_errors = 0
+ self.counters['files'] += 1
+ self.counters['physical lines'] += len(lines)
- def report_error(self, line_number, offset, text, check):
- """
- Report an error, according to options.
- """
- if options.quiet == 1 and not self.file_errors:
- message(self.filename)
- self.file_errors += 1
+ def increment_logical_line(self):
+ """Signal a new logical line."""
+ self.counters['logical lines'] += 1
+
+ def error(self, line_number, offset, text, check):
+ """Report an error, according to options."""
code = text[:4]
- options.counters[code] = options.counters.get(code, 0) + 1
- options.messages[code] = text[5:]
- if options.quiet:
+ if self._ignore_code(code):
return
- if options.testsuite:
- base = os.path.basename(self.filename)[:4]
- if base == code:
- return
- if base[0] == 'E' and code[0] == 'W':
- return
- if ignore_code(code):
+ if code in self.counters:
+ self.counters[code] += 1
+ else:
+ self.counters[code] = 1
+ self.messages[code] = text[5:]
+ # Don't care about expected errors or warnings
+ if code in self.expected:
return
- if options.counters[code] == 1 or options.repeat:
- message("%s:%s:%d: %s" %
- (self.filename, line_number, offset + 1, text))
- if options.show_source:
- line = self.lines[line_number - 1]
- message(line.rstrip())
- message(' ' * offset + '^')
- if options.show_pep8:
- message(check.__doc__.lstrip('\n').rstrip())
-
-
-def input_file(filename):
- """
- Run all checks on a Python source file.
- """
- if excluded(filename) or not filename_match(filename):
- return 0
- if options.verbose:
- message('checking ' + filename)
- options.counters['files'] = options.counters.get('files', 0) + 1
- errors = Checker(filename).check_all()
- if options.testsuite and not errors:
- message("%s: %s" % (filename, "no errors found"))
- return errors
-
-
-def input_dir(dirname):
- """
- Check all Python source files in this directory and all subdirectories.
- """
- dirname = dirname.rstrip('/')
- if excluded(dirname):
- return 0
- errors = 0
- for root, dirs, files in os.walk(dirname):
- if options.verbose:
- message('directory ' + root)
- options.counters['directories'] = \
- options.counters.get('directories', 0) + 1
- dirs.sort()
- for subdir in dirs:
- if excluded(subdir):
- dirs.remove(subdir)
- files.sort()
- for filename in files:
- errors += input_file(os.path.join(root, filename))
- return errors
-
-
-def excluded(filename):
- """
- Check if options.exclude contains a pattern that matches filename.
- """
- basename = os.path.basename(filename)
- for pattern in options.exclude:
- if fnmatch(basename, pattern):
- # print basename, 'excluded because it matches', pattern
- return True
-
-
-def filename_match(filename):
- """
- Check if options.filename contains a pattern that matches filename.
- If options.filename is unspecified, this always returns True.
- """
- if not options.filename:
- return True
- for pattern in options.filename:
- if fnmatch(filename, pattern):
- return True
-
-
-def ignore_code(code):
- """
- Check if options.ignore contains a prefix of the error code.
- """
- for ignore in options.ignore:
- if code.startswith(ignore):
- return True
-
-
-def get_error_statistics():
- """Get error statistics."""
- return get_statistics("E")
+ if self.print_filename and not self.file_errors:
+ print(self.filename)
+ self.file_errors += 1
+ self.total_errors += 1
+ return code
+ def get_file_results(self):
+ """Return the count of errors and warnings for this file."""
+ return self.file_errors
-def get_warning_statistics():
- """Get warning statistics."""
- return get_statistics("W")
+ def get_count(self, prefix=''):
+ """Return the total count of errors and warnings."""
+ return sum([self.counters[key]
+ for key in self.messages if key.startswith(prefix)])
+ def get_statistics(self, prefix=''):
+ """
+ Get statistics for message codes that start with the prefix.
-def get_statistics(prefix=''):
- """
- Get statistics for message codes that start with the prefix.
+ prefix='' matches all errors and warnings
+ prefix='E' matches all errors
+ prefix='W' matches all warnings
+ prefix='E4' matches all errors that have to do with imports
+ """
+ return ['%-7s %s %s' % (self.counters[key], key, self.messages[key])
+ for key in sorted(self.messages) if key.startswith(prefix)]
+
+ def print_statistics(self, prefix=''):
+ """Print overall statistics (number of errors and warnings)."""
+ for line in self.get_statistics(prefix):
+ print(line)
+
+ def print_benchmark(self):
+ """Print benchmark numbers."""
+ print('%-7.2f %s' % (self.elapsed, 'seconds elapsed'))
+ if self.elapsed:
+ for key in self._benchmark_keys:
+ print('%-7d %s per second (%d total)' %
+ (self.counters[key] / self.elapsed, key,
+ self.counters[key]))
+
+
+class FileReport(BaseReport):
+ """Collect the results of the checks and print only the filenames."""
+ print_filename = True
+
+
+class StandardReport(BaseReport):
+ """Collect and print the results of the checks."""
+
+ def __init__(self, options):
+ super(StandardReport, self).__init__(options)
+ self._fmt = REPORT_FORMAT.get(options.format.lower(),
+ options.format)
+ self._repeat = options.repeat
+ self._show_source = options.show_source
+ self._show_pep8 = options.show_pep8
+
+ def init_file(self, filename, lines, expected, line_offset):
+ """Signal a new file."""
+ self._deferred_print = []
+ return super(StandardReport, self).init_file(
+ filename, lines, expected, line_offset)
+
+ def error(self, line_number, offset, text, check):
+ """Report an error, according to options."""
+ code = super(StandardReport, self).error(line_number, offset,
+ text, check)
+ if code and (self.counters[code] == 1 or self._repeat):
+ self._deferred_print.append(
+ (line_number, offset, code, text[5:], check.__doc__))
+ return code
+
+ def get_file_results(self):
+ """Print the result and return the overall count for this file."""
+ self._deferred_print.sort()
+ for line_number, offset, code, text, doc in self._deferred_print:
+ print(self._fmt % {
+ 'path': self.filename,
+ 'row': self.line_offset + line_number, 'col': offset + 1,
+ 'code': code, 'text': text,
+ })
+ if self._show_source:
+ if line_number > len(self.lines):
+ line = ''
+ else:
+ line = self.lines[line_number - 1]
+ print(line.rstrip())
+ print(' ' * offset + '^')
+ if self._show_pep8 and doc:
+ print(doc.lstrip('\n').rstrip())
+ return self.file_errors
- prefix='' matches all errors and warnings
- prefix='E' matches all errors
- prefix='W' matches all warnings
- prefix='E4' matches all errors that have to do with imports
- """
- stats = []
- keys = options.messages.keys()
- keys.sort()
- for key in keys:
- if key.startswith(prefix):
- stats.append('%-7s %s %s' %
- (options.counters[key], key, options.messages[key]))
- return stats
+class DiffReport(StandardReport):
+ """Collect and print the results for the changed lines only."""
-def print_statistics(prefix=''):
- """Print overall statistics (number of errors and warnings)."""
- for line in get_statistics(prefix):
- print line
+ def __init__(self, options):
+ super(DiffReport, self).__init__(options)
+ self._selected = options.selected_lines
+ def error(self, line_number, offset, text, check):
+ if line_number not in self._selected[self.filename]:
+ return
+ return super(DiffReport, self).error(line_number, offset, text, check)
+
+
+class StyleGuide(object):
+ """Initialize a PEP-8 instance with few options."""
+
+ def __init__(self, *args, **kwargs):
+ # build options from the command line
+ self.checker_class = kwargs.pop('checker_class', Checker)
+ parse_argv = kwargs.pop('parse_argv', False)
+ config_file = kwargs.pop('config_file', None)
+ parser = kwargs.pop('parser', None)
+ options, self.paths = process_options(
+ parse_argv=parse_argv, config_file=config_file, parser=parser)
+ if args or kwargs:
+ # build options from dict
+ options_dict = dict(*args, **kwargs)
+ options.__dict__.update(options_dict)
+ if 'paths' in options_dict:
+ self.paths = options_dict['paths']
+
+ self.runner = self.input_file
+ self.options = options
+
+ if not options.reporter:
+ options.reporter = BaseReport if options.quiet else StandardReport
+
+ for index, value in enumerate(options.exclude):
+ options.exclude[index] = value.rstrip('/')
+ options.select = tuple(options.select or ())
+ if not (options.select or options.ignore or
+ options.testsuite or options.doctest) and DEFAULT_IGNORE:
+ # The default choice: ignore controversial checks
+ options.ignore = tuple(DEFAULT_IGNORE.split(','))
+ else:
+ # Ignore all checks which are not explicitly selected
+ options.ignore = tuple(options.ignore or options.select and ('',))
+ options.benchmark_keys = BENCHMARK_KEYS[:]
+ options.ignore_code = self.ignore_code
+ options.physical_checks = self.get_checks('physical_line')
+ options.logical_checks = self.get_checks('logical_line')
+ options.ast_checks = self.get_checks('tree')
+ self.init_report()
+
+ def init_report(self, reporter=None):
+ """Initialize the report instance."""
+ self.options.report = (reporter or self.options.reporter)(self.options)
+ return self.options.report
+
+ def check_files(self, paths=None):
+ """Run all checks on the paths."""
+ if paths is None:
+ paths = self.paths
+ report = self.options.report
+ runner = self.runner
+ report.start()
+ try:
+ for path in paths:
+ if os.path.isdir(path):
+ self.input_dir(path)
+ elif not self.excluded(path):
+ runner(path)
+ except KeyboardInterrupt:
+ print('... stopped')
+ report.stop()
+ return report
+
+ def input_file(self, filename, lines=None, expected=None, line_offset=0):
+ """Run all checks on a Python source file."""
+ if self.options.verbose:
+ print('checking %s' % filename)
+ fchecker = self.checker_class(
+ filename, lines=lines, options=self.options)
+ return fchecker.check_all(expected=expected, line_offset=line_offset)
+
+ def input_dir(self, dirname):
+ """Check all files in this directory and all subdirectories."""
+ dirname = dirname.rstrip('/')
+ if self.excluded(dirname):
+ return 0
+ counters = self.options.report.counters
+ verbose = self.options.verbose
+ filepatterns = self.options.filename
+ runner = self.runner
+ for root, dirs, files in os.walk(dirname):
+ if verbose:
+ print('directory ' + root)
+ counters['directories'] += 1
+ for subdir in sorted(dirs):
+ if self.excluded(os.path.join(root, subdir)):
+ dirs.remove(subdir)
+ for filename in sorted(files):
+ # contain a pattern that matches?
+ if ((filename_match(filename, filepatterns) and
+ not self.excluded(filename))):
+ runner(os.path.join(root, filename))
+
+ def excluded(self, filename):
+ """
+ Check if options.exclude contains a pattern that matches filename.
+ """
+ basename = os.path.basename(filename)
+ return any((filename_match(filename, self.options.exclude,
+ default=False),
+ filename_match(basename, self.options.exclude,
+ default=False)))
-def print_benchmark(elapsed):
- """
- Print benchmark numbers.
- """
- print '%-7.2f %s' % (elapsed, 'seconds elapsed')
- keys = ['directories', 'files',
- 'logical lines', 'physical lines']
- for key in keys:
- if key in options.counters:
- print '%-7d %s per second (%d total)' % (
- options.counters[key] / elapsed, key,
- options.counters[key])
+ def ignore_code(self, code):
+ """
+ Check if the error code should be ignored.
+ If 'options.select' contains a prefix of the error code,
+ return False. Else, if 'options.ignore' contains a prefix of
+ the error code, return True.
+ """
+ return (code.startswith(self.options.ignore) and
+ not code.startswith(self.options.select))
-def process_options(arglist=None):
- """
- Process options passed either via arglist or via command line args.
- """
- global options, args
- usage = "%prog [options] input ..."
- parser = OptionParser(usage)
+ def get_checks(self, argument_name):
+ """
+ Find all globally visible functions where the first argument name
+ starts with argument_name and which contain selected tests.
+ """
+ checks = []
+ for check, attrs in _checks[argument_name].items():
+ (codes, args) = attrs
+ if any(not (code and self.ignore_code(code)) for code in codes):
+ checks.append((check.__name__, check, args))
+ return sorted(checks)
+
+
+def get_parser(prog='pep8', version=__version__):
+ parser = OptionParser(prog=prog, version=version,
+ usage="%prog [options] input ...")
+ parser.config_options = [
+ 'exclude', 'filename', 'select', 'ignore', 'max-line-length', 'count',
+ 'format', 'quiet', 'show-pep8', 'show-source', 'statistics', 'verbose']
parser.add_option('-v', '--verbose', default=0, action='count',
help="print status messages, or debug with -vv")
parser.add_option('-q', '--quiet', default=0, action='count',
help="report only file names, or nothing with -qq")
- parser.add_option('--exclude', metavar='patterns', default=default_exclude,
- help="skip matches (default %s)" % default_exclude)
- parser.add_option('--filename', metavar='patterns',
- help="only check matching files (e.g. *.py)")
+ parser.add_option('-r', '--repeat', default=True, action='store_true',
+ help="(obsolete) show all occurrences of the same error")
+ parser.add_option('--first', action='store_false', dest='repeat',
+ help="show first occurrence of each error")
+ parser.add_option('--exclude', metavar='patterns', default=DEFAULT_EXCLUDE,
+ help="exclude files or directories which match these "
+ "comma separated patterns (default: %default)")
+ parser.add_option('--filename', metavar='patterns', default='*.py',
+ help="when parsing directories, only check filenames "
+ "matching these comma separated patterns "
+ "(default: %default)")
+ parser.add_option('--select', metavar='errors', default='',
+ help="select errors and warnings (e.g. E,W6)")
parser.add_option('--ignore', metavar='errors', default='',
help="skip errors and warnings (e.g. E4,W)")
- parser.add_option('--repeat', action='store_true',
- help="show all occurrences of the same error")
parser.add_option('--show-source', action='store_true',
help="show source code for each error")
parser.add_option('--show-pep8', action='store_true',
- help="show text of PEP 8 for each error")
+ help="show text of PEP 8 for each error "
+ "(implies --first)")
parser.add_option('--statistics', action='store_true',
help="count errors and warnings")
- parser.add_option('--benchmark', action='store_true',
- help="measure processing speed")
- parser.add_option('--testsuite', metavar='dir',
- help="run regression tests from dir")
- parser.add_option('--doctest', action='store_true',
- help="run doctest on myself")
+ parser.add_option('--count', action='store_true',
+ help="print total number of errors and warnings "
+ "to standard error and set exit code to 1 if "
+ "total is not null")
+ parser.add_option('--max-line-length', type='int', metavar='n',
+ default=MAX_LINE_LENGTH,
+ help="set maximum allowed line length "
+ "(default: %default)")
+ parser.add_option('--format', metavar='format', default='default',
+ help="set the error format [default|pylint|<custom>]")
+ parser.add_option('--diff', action='store_true',
+ help="report only lines changed according to the "
+ "unified diff received on STDIN")
+ group = parser.add_option_group("Testing Options")
+ if os.path.exists(TESTSUITE_PATH):
+ group.add_option('--testsuite', metavar='dir',
+ help="run regression tests from dir")
+ group.add_option('--doctest', action='store_true',
+ help="run doctest on myself")
+ group.add_option('--benchmark', action='store_true',
+ help="measure processing speed")
+ return parser
+
+
+def read_config(options, args, arglist, parser):
+ """Read both user configuration and local configuration."""
+ config = RawConfigParser()
+
+ user_conf = options.config
+ if user_conf and os.path.isfile(user_conf):
+ if options.verbose:
+ print('user configuration: %s' % user_conf)
+ config.read(user_conf)
+
+ parent = tail = args and os.path.abspath(os.path.commonprefix(args))
+ while tail:
+ for name in PROJECT_CONFIG:
+ local_conf = os.path.join(parent, name)
+ if os.path.isfile(local_conf):
+ break
+ else:
+ parent, tail = os.path.split(parent)
+ continue
+ if options.verbose:
+ print('local configuration: %s' % local_conf)
+ config.read(local_conf)
+ break
+
+ pep8_section = parser.prog
+ if config.has_section(pep8_section):
+ option_list = dict([(o.dest, o.type or o.action)
+ for o in parser.option_list])
+
+ # First, read the default values
+ new_options, _ = parser.parse_args([])
+
+ # Second, parse the configuration
+ for opt in config.options(pep8_section):
+ if options.verbose > 1:
+ print(" %s = %s" % (opt, config.get(pep8_section, opt)))
+ if opt.replace('_', '-') not in parser.config_options:
+ print("Unknown option: '%s'\n not in [%s]" %
+ (opt, ' '.join(parser.config_options)))
+ sys.exit(1)
+ normalized_opt = opt.replace('-', '_')
+ opt_type = option_list[normalized_opt]
+ if opt_type in ('int', 'count'):
+ value = config.getint(pep8_section, opt)
+ elif opt_type == 'string':
+ value = config.get(pep8_section, opt)
+ else:
+ assert opt_type in ('store_true', 'store_false')
+ value = config.getboolean(pep8_section, opt)
+ setattr(new_options, normalized_opt, value)
+
+ # Third, overwrite with the command-line options
+ options, _ = parser.parse_args(arglist, values=new_options)
+ options.doctest = options.testsuite = False
+ return options
+
+
+def process_options(arglist=None, parse_argv=False, config_file=None,
+ parser=None):
+ """Process options passed either via arglist or via command line args."""
+ if not arglist and not parse_argv:
+ # Don't read the command line if the module is used as a library.
+ arglist = []
+ if not parser:
+ parser = get_parser()
+ if not parser.has_option('--config'):
+ if config_file is True:
+ config_file = DEFAULT_CONFIG
+ group = parser.add_option_group("Configuration", description=(
+ "The project options are read from the [%s] section of the "
+ "tox.ini file or the setup.cfg file located in any parent folder "
+ "of the path(s) being processed. Allowed options are: %s." %
+ (parser.prog, ', '.join(parser.config_options))))
+ group.add_option('--config', metavar='path', default=config_file,
+ help="user config file location (default: %default)")
options, args = parser.parse_args(arglist)
- if options.testsuite:
+ options.reporter = None
+
+ if options.ensure_value('testsuite', False):
args.append(options.testsuite)
- if len(args) == 0:
- parser.error('input not specified')
- options.prog = os.path.basename(sys.argv[0])
- options.exclude = options.exclude.split(',')
- for index in range(len(options.exclude)):
- options.exclude[index] = options.exclude[index].rstrip('/')
+ elif not options.ensure_value('doctest', False):
+ if parse_argv and not args:
+ if options.diff or any(os.path.exists(name)
+ for name in PROJECT_CONFIG):
+ args = ['.']
+ else:
+ parser.error('input not specified')
+ options = read_config(options, args, arglist, parser)
+ options.reporter = parse_argv and options.quiet == 1 and FileReport
+
if options.filename:
options.filename = options.filename.split(',')
+ options.exclude = options.exclude.split(',')
+ if options.select:
+ options.select = options.select.split(',')
if options.ignore:
options.ignore = options.ignore.split(',')
- else:
- options.ignore = []
- options.counters = {}
- options.messages = {}
+
+ if options.diff:
+ options.reporter = DiffReport
+ stdin = stdin_get_value()
+ options.selected_lines = parse_udiff(stdin, options.filename, args[0])
+ args = sorted(options.selected_lines)
return options, args
def _main():
- """
- Parse options and run checks on Python source.
- """
- options, args = process_options()
- if options.doctest:
- import doctest
- return doctest.testmod()
- start_time = time.time()
- errors = 0
- for path in args:
- # skip emacs backups
- if path.startswith(".#"):
- continue
- if os.path.isdir(path):
- errors += input_dir(path)
- else:
- errors += input_file(path)
- elapsed = time.time() - start_time
+ """Parse options and run checks on Python source."""
+ pep8style = StyleGuide(parse_argv=True, config_file=True)
+ options = pep8style.options
+ if options.doctest or options.testsuite:
+ from testsuite.support import run_tests
+ report = run_tests(pep8style)
+ else:
+ report = pep8style.check_files()
if options.statistics:
- print_statistics()
+ report.print_statistics()
if options.benchmark:
- print_benchmark(elapsed)
- return errors > 0
+ report.print_benchmark()
+ if options.testsuite and not options.quiet:
+ report.print_results()
+ if report.total_errors:
+ if options.count:
+ sys.stderr.write(str(report.total_errors) + '\n')
+ sys.exit(1)
if __name__ == '__main__':
- sys.exit(_main())
+ _main()
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 36
+#define YY_FLEX_SUBMINOR_VERSION 37
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif
*yy_cp = '\0'; \
(yy_c_buf_p) = yy_cp;
-#define YY_NUM_RULES 123
-#define YY_END_OF_BUFFER 124
+#define YY_NUM_RULES 132
+#define YY_END_OF_BUFFER 133
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static yyconst flex_int16_t yy_acclist[779] =
+static yyconst flex_int16_t yy_acclist[838] =
{ 0,
- 124, 122, 123, 3, 122, 123, 1, 123, 36, 122,
- 123, 122, 123, 11, 122, 123, 31, 122, 123, 33,
- 122, 123, 122, 123, 20, 122, 123, 21, 122, 123,
- 29, 122, 123, 27, 122, 123, 60, 122, 123, 28,
- 122, 123, 26, 122, 123, 30, 122, 123, 115, 122,
- 123, 115, 122, 123, 23, 122, 123, 22, 122, 123,
- 38, 122, 123, 37, 122, 123, 39, 122, 123, 25,
- 122, 123, 76, 112, 122, 123, 76, 112, 122, 123,
- 76, 112, 122, 123, 16, 122, 123, 122, 123, 18,
- 122, 123, 32, 122, 123, 76, 112, 122, 123, 76,
-
- 112, 122, 123, 76, 112, 122, 123, 76, 112, 122,
- 123, 76, 112, 122, 123, 76, 112, 122, 123, 76,
- 112, 122, 123, 76, 112, 122, 123, 76, 112, 122,
- 123, 76, 112, 122, 123, 76, 112, 122, 123, 76,
- 112, 122, 123, 76, 112, 122, 123, 76, 112, 122,
- 123, 76, 112, 122, 123, 76, 112, 122, 123, 12,
- 122, 123, 34, 122, 123, 14, 122, 123, 35, 122,
- 123, 3, 1, 53, 120, 44, 15, 56, 46, 118,
- 42, 58, 40, 59, 41, 61, 116, 4, 6, 43,
- 116, 114, 115, 115, 115, 115, 19, 13, 17, 48,
-
- 54, 52, 55, 49, 76, 112, 76, 112, 2, 45,
- 76, 112, 76, 112, 76, 112, 76, 112, 76, 112,
- 76, 112, 76, 112, 76, 112, 76, 112, 76, 85,
- 112, 76, 112, 76, 112, 76, 112, 76, 112, 76,
- 112, 76, 112, 76, 93, 112, 76, 112, 76, 112,
- 76, 112, 76, 112, 76, 112, 76, 112, 76, 112,
- 76, 112, 76, 112, 76, 112, 76, 112, 47, 57,
- 24, 116, 6, 114, 115, 114, 115, 117, 115, 115,
- 115, 113, 50, 51, 76, 112, 121, 119, 76, 112,
- 76, 112, 76, 112, 76, 112, 76, 112, 76, 112,
-
- 76, 112, 76, 112, 76, 112, 76, 77, 112, 76,
- 112, 76, 112, 76, 112, 76, 112, 76, 112, 76,
- 112, 76, 112, 76, 112, 76, 112, 76, 112, 76,
- 112, 76, 91, 112, 76, 112, 76, 112, 76, 95,
- 112, 76, 112, 76, 112, 76, 112, 76, 112, 76,
- 112, 76, 112, 76, 112, 76, 112, 76, 112, 76,
- 112, 76, 112, 76, 112, 76, 112, 76, 112, 76,
- 112, 76, 112, 116, 114, 115, 114, 115, 114, 115,
- 117, 115, 113, 113, 76, 112, 76, 112, 76, 112,
- 76, 112, 76, 112, 76, 112, 76, 112, 76, 112,
-
- 76, 112, 76, 112, 76, 112, 76, 112, 76, 78,
- 112, 76, 112, 76, 80, 112, 76, 81, 112, 76,
- 112, 76, 112, 76, 112, 76, 112, 76, 87, 112,
- 76, 88, 112, 76, 112, 76, 112, 76, 92, 112,
- 76, 112, 76, 96, 112, 76, 112, 76, 112, 76,
- 112, 76, 112, 76, 112, 76, 112, 76, 112, 76,
- 112, 76, 112, 76, 112, 76, 112, 76, 112, 76,
- 109, 112, 76, 112, 76, 112, 10, 114, 115, 113,
- 113, 113, 76, 112, 76, 112, 73, 76, 112, 62,
- 76, 112, 76, 112, 76, 112, 76, 112, 76, 112,
-
- 76, 112, 76, 112, 76, 112, 76, 112, 76, 79,
- 112, 76, 82, 112, 76, 112, 76, 112, 76, 112,
- 76, 112, 76, 90, 112, 76, 112, 76, 112, 76,
- 112, 76, 112, 76, 100, 112, 76, 112, 76, 112,
- 76, 112, 76, 112, 76, 112, 76, 112, 76, 107,
- 112, 76, 112, 76, 112, 76, 111, 112, 113, 76,
- 112, 76, 112, 76, 112, 76, 112, 76, 112, 76,
- 112, 76, 112, 76, 112, 76, 112, 76, 112, 76,
- 112, 76, 112, 76, 112, 76, 86, 112, 76, 89,
- 112, 76, 94, 112, 76, 112, 76, 112, 76, 99,
-
- 112, 76, 101, 112, 76, 102, 112, 76, 103, 112,
- 76, 104, 112, 76, 105, 112, 76, 112, 76, 112,
- 76, 112, 5, 76, 112, 76, 112, 63, 76, 112,
- 76, 112, 66, 76, 112, 76, 112, 76, 112, 76,
- 112, 76, 112, 76, 112, 76, 112, 76, 112, 76,
- 84, 112, 76, 112, 76, 112, 76, 106, 112, 76,
- 112, 76, 112, 76, 112, 76, 112, 76, 112, 76,
- 112, 68, 76, 112, 76, 112, 76, 112, 76, 112,
- 72, 76, 112, 76, 83, 112, 76, 97, 112, 76,
- 98, 112, 76, 108, 112, 76, 110, 112, 8, 9,
-
- 76, 112, 76, 112, 76, 112, 76, 112, 69, 76,
- 112, 76, 112, 76, 112, 7, 8, 76, 112, 76,
- 112, 76, 112, 76, 112, 71, 76, 112, 70, 76,
- 112, 76, 112, 76, 112, 65, 76, 112, 76, 112,
- 76, 112, 76, 112, 76, 112, 76, 112, 76, 112,
- 76, 112, 64, 76, 112, 67, 76, 112, 76, 112,
- 76, 112, 76, 112, 76, 112, 76, 112, 76, 112,
- 74, 76, 112, 76, 112, 75, 76, 112
+ 133, 131, 132, 3, 131, 132, 1, 132, 37, 131,
+ 132, 131, 132, 12, 131, 132, 32, 131, 132, 34,
+ 131, 132, 131, 132, 21, 131, 132, 22, 131, 132,
+ 30, 131, 132, 28, 131, 132, 61, 131, 132, 29,
+ 131, 132, 27, 131, 132, 31, 131, 132, 124, 131,
+ 132, 124, 131, 132, 24, 131, 132, 23, 131, 132,
+ 39, 131, 132, 38, 131, 132, 40, 131, 132, 26,
+ 131, 132, 81, 121, 131, 132, 81, 121, 131, 132,
+ 81, 121, 131, 132, 17, 131, 132, 131, 132, 19,
+ 131, 132, 33, 131, 132, 81, 121, 131, 132, 81,
+
+ 121, 131, 132, 81, 121, 131, 132, 81, 121, 131,
+ 132, 81, 121, 131, 132, 81, 121, 131, 132, 81,
+ 121, 131, 132, 81, 121, 131, 132, 81, 121, 131,
+ 132, 81, 121, 131, 132, 81, 121, 131, 132, 81,
+ 121, 131, 132, 81, 121, 131, 132, 81, 121, 131,
+ 132, 81, 121, 131, 132, 81, 121, 131, 132, 13,
+ 131, 132, 35, 131, 132, 15, 131, 132, 36, 131,
+ 132, 3, 1, 54, 129, 45, 16, 57, 47, 127,
+ 43, 59, 41, 60, 42, 62, 125, 5, 7, 44,
+ 125, 123, 124, 124, 124, 124, 20, 14, 18, 49,
+
+ 55, 53, 56, 50, 81, 121, 81, 121, 2, 46,
+ 81, 121, 81, 121, 81, 121, 81, 121, 81, 121,
+ 81, 121, 81, 121, 81, 121, 81, 121, 81, 90,
+ 121, 81, 121, 81, 121, 81, 121, 81, 121, 81,
+ 121, 81, 121, 81, 98, 121, 81, 121, 81, 121,
+ 81, 121, 81, 121, 81, 121, 81, 121, 81, 121,
+ 81, 121, 81, 121, 81, 121, 81, 121, 48, 58,
+ 25, 125, 4, 7, 123, 124, 123, 124, 126, 124,
+ 124, 124, 122, 51, 52, 81, 121, 130, 128, 81,
+ 121, 81, 121, 81, 121, 81, 121, 81, 121, 81,
+
+ 121, 81, 121, 81, 121, 81, 121, 81, 121, 81,
+ 121, 81, 82, 121, 81, 121, 81, 121, 81, 121,
+ 81, 121, 81, 121, 81, 121, 81, 121, 81, 121,
+ 81, 121, 81, 121, 81, 121, 81, 96, 121, 81,
+ 121, 81, 121, 81, 100, 121, 81, 121, 81, 121,
+ 81, 121, 81, 121, 81, 121, 81, 121, 81, 121,
+ 81, 121, 81, 121, 81, 121, 81, 121, 81, 121,
+ 81, 121, 81, 121, 81, 121, 81, 121, 125, 123,
+ 124, 123, 124, 123, 124, 126, 124, 122, 122, 81,
+ 121, 81, 121, 81, 121, 81, 121, 81, 121, 81,
+
+ 121, 81, 121, 81, 121, 81, 121, 81, 121, 81,
+ 121, 81, 121, 81, 121, 81, 121, 81, 83, 121,
+ 81, 121, 81, 85, 121, 81, 86, 121, 81, 121,
+ 81, 121, 81, 121, 81, 121, 81, 92, 121, 81,
+ 93, 121, 81, 121, 81, 121, 81, 97, 121, 81,
+ 121, 81, 105, 121, 81, 121, 81, 121, 81, 121,
+ 81, 121, 81, 121, 81, 121, 81, 121, 81, 121,
+ 81, 121, 81, 121, 81, 121, 81, 121, 81, 118,
+ 121, 81, 121, 81, 121, 11, 123, 124, 122, 122,
+ 122, 81, 121, 81, 121, 78, 81, 121, 65, 81,
+
+ 121, 81, 121, 81, 121, 81, 121, 81, 121, 81,
+ 121, 81, 121, 81, 121, 81, 121, 81, 121, 81,
+ 121, 81, 121, 81, 84, 121, 81, 87, 121, 81,
+ 121, 81, 121, 81, 121, 81, 121, 81, 95, 121,
+ 81, 121, 81, 121, 81, 121, 81, 121, 81, 109,
+ 121, 81, 121, 81, 121, 81, 121, 81, 121, 81,
+ 121, 81, 121, 81, 116, 121, 81, 121, 81, 121,
+ 81, 120, 121, 122, 81, 121, 81, 121, 81, 121,
+ 81, 121, 81, 121, 81, 121, 81, 121, 81, 121,
+ 81, 121, 81, 121, 81, 121, 81, 121, 81, 121,
+
+ 81, 121, 81, 121, 81, 121, 81, 91, 121, 81,
+ 94, 121, 81, 99, 121, 81, 121, 81, 121, 81,
+ 108, 121, 81, 110, 121, 81, 111, 121, 81, 112,
+ 121, 81, 113, 121, 81, 114, 121, 81, 121, 81,
+ 121, 81, 121, 6, 81, 121, 81, 121, 66, 81,
+ 121, 81, 121, 69, 81, 121, 81, 121, 81, 121,
+ 81, 121, 81, 121, 81, 121, 81, 121, 81, 121,
+ 81, 121, 81, 121, 81, 121, 81, 89, 121, 81,
+ 121, 81, 121, 81, 115, 121, 81, 121, 81, 121,
+ 81, 121, 81, 121, 81, 121, 81, 121, 71, 81,
+
+ 121, 81, 104, 121, 81, 121, 81, 121, 81, 121,
+ 75, 81, 121, 81, 121, 81, 121, 81, 88, 121,
+ 81, 106, 121, 81, 107, 121, 81, 117, 121, 81,
+ 119, 121, 9, 10, 81, 121, 81, 121, 81, 121,
+ 81, 121, 81, 121, 72, 81, 121, 81, 121, 81,
+ 121, 81, 103, 121, 81, 121, 8, 9, 81, 121,
+ 81, 121, 81, 121, 81, 121, 81, 102, 121, 74,
+ 81, 121, 73, 81, 121, 81, 121, 76, 81, 121,
+ 81, 121, 81, 121, 68, 81, 121, 81, 121, 81,
+ 101, 121, 81, 121, 81, 121, 81, 121, 81, 121,
+
+ 81, 121, 77, 81, 121, 81, 121, 81, 121, 67,
+ 81, 121, 70, 81, 121, 81, 121, 81, 121, 63,
+ 81, 121, 81, 121, 81, 121, 81, 121, 64, 79,
+ 81, 121, 81, 121, 80, 81, 121
} ;
-static yyconst flex_int16_t yy_accept[409] =
+static yyconst flex_int16_t yy_accept[453] =
{ 0,
1, 1, 1, 2, 4, 7, 9, 12, 14, 17,
20, 23, 25, 28, 31, 34, 37, 40, 43, 46,
225, 227, 229, 232, 234, 236, 238, 240, 242, 244,
247, 249, 251, 253, 255, 257, 259, 261, 263, 265,
267, 269, 270, 271, 271, 271, 271, 272, 272, 273,
- 273, 273, 274, 276, 278, 278, 279, 280, 281, 282,
- 283, 284, 285, 287, 287, 288, 288, 288, 289, 289,
- 291, 293, 295, 297, 299, 301, 303, 305, 307, 310,
- 312, 314, 316, 318, 320, 322, 324, 326, 328, 330,
- 332, 335, 337, 339, 342, 344, 346, 348, 350, 352,
- 354, 356, 358, 360, 362, 364, 366, 368, 370, 372,
-
- 374, 374, 374, 374, 374, 375, 375, 377, 379, 381,
- 382, 383, 384, 385, 387, 389, 391, 393, 395, 397,
- 399, 401, 403, 405, 407, 409, 412, 414, 417, 420,
- 422, 424, 426, 428, 431, 434, 436, 438, 441, 443,
- 446, 448, 450, 452, 454, 456, 458, 460, 462, 464,
- 466, 468, 470, 473, 475, 477, 477, 478, 478, 478,
- 478, 480, 481, 482, 483, 485, 487, 490, 493, 495,
- 497, 499, 501, 503, 505, 507, 509, 512, 515, 517,
- 519, 521, 523, 526, 528, 530, 532, 534, 537, 539,
- 541, 543, 545, 547, 549, 552, 554, 556, 559, 559,
-
- 559, 559, 559, 560, 562, 564, 566, 568, 570, 572,
- 574, 576, 578, 580, 582, 584, 586, 589, 592, 595,
- 597, 599, 602, 605, 608, 611, 614, 617, 619, 621,
- 623, 623, 623, 624, 626, 628, 631, 633, 636, 638,
- 640, 642, 644, 646, 648, 650, 653, 655, 657, 660,
- 662, 664, 664, 664, 666, 668, 670, 672, 675, 677,
- 679, 681, 684, 687, 690, 693, 696, 699, 700, 700,
- 701, 703, 705, 707, 709, 712, 714, 716, 717, 718,
- 720, 722, 724, 726, 729, 732, 734, 736, 739, 741,
- 743, 745, 747, 749, 751, 753, 756, 759, 761, 763,
-
- 765, 767, 769, 771, 774, 776, 779, 779
+ 273, 274, 274, 275, 277, 279, 279, 280, 281, 282,
+ 283, 284, 285, 286, 288, 288, 289, 289, 289, 290,
+ 290, 292, 294, 296, 298, 300, 302, 304, 306, 308,
+ 310, 312, 315, 317, 319, 321, 323, 325, 327, 329,
+ 331, 333, 335, 337, 340, 342, 344, 347, 349, 351,
+ 353, 355, 357, 359, 361, 363, 365, 367, 369, 371,
+
+ 373, 375, 377, 379, 379, 379, 379, 379, 380, 380,
+ 382, 384, 386, 387, 388, 389, 390, 392, 394, 396,
+ 398, 400, 402, 404, 406, 408, 410, 412, 414, 416,
+ 418, 421, 423, 426, 429, 431, 433, 435, 437, 440,
+ 443, 445, 447, 450, 452, 455, 457, 459, 461, 463,
+ 465, 467, 469, 471, 473, 475, 477, 479, 482, 484,
+ 486, 486, 487, 487, 487, 487, 489, 490, 491, 492,
+ 494, 496, 499, 502, 504, 506, 508, 510, 512, 514,
+ 516, 518, 520, 522, 524, 527, 530, 532, 534, 536,
+ 538, 541, 543, 545, 547, 549, 552, 554, 556, 558,
+
+ 560, 562, 564, 567, 569, 571, 574, 574, 574, 574,
+ 574, 575, 577, 579, 579, 581, 583, 585, 587, 589,
+ 591, 593, 595, 597, 599, 601, 603, 605, 607, 610,
+ 613, 616, 618, 620, 623, 626, 629, 632, 635, 638,
+ 640, 642, 644, 644, 644, 645, 647, 649, 649, 652,
+ 654, 657, 659, 661, 663, 665, 667, 669, 671, 673,
+ 675, 677, 680, 682, 684, 687, 689, 691, 691, 691,
+ 693, 695, 695, 695, 697, 699, 702, 705, 707, 709,
+ 711, 714, 716, 718, 721, 724, 727, 730, 733, 734,
+ 734, 735, 737, 739, 739, 739, 741, 743, 745, 748,
+
+ 750, 752, 755, 757, 758, 759, 761, 763, 763, 763,
+ 765, 767, 770, 773, 776, 778, 781, 783, 785, 785,
+ 785, 788, 790, 793, 795, 797, 799, 799, 799, 801,
+ 803, 806, 808, 810, 810, 810, 813, 816, 818, 820,
+ 821, 821, 823, 825, 825, 827, 829, 830, 833, 835,
+ 838, 838
} ;
static yyconst flex_int32_t yy_ec[256] =
4, 4, 4, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 5, 6, 7, 8, 1, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 21,
- 21, 22, 21, 23, 21, 24, 24, 25, 26, 27,
- 28, 29, 30, 1, 31, 32, 33, 34, 35, 36,
- 37, 38, 39, 38, 38, 40, 38, 41, 42, 38,
- 38, 38, 43, 44, 45, 38, 38, 46, 38, 38,
- 47, 48, 49, 50, 51, 1, 52, 53, 54, 55,
-
- 56, 57, 58, 59, 60, 38, 61, 62, 63, 64,
- 65, 66, 38, 67, 68, 69, 70, 71, 72, 73,
- 74, 75, 76, 77, 78, 79, 1, 1, 1, 1,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 23, 25, 23, 26, 27, 28, 29, 30,
+ 31, 32, 33, 1, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 41, 41, 43, 41, 44, 45, 41,
+ 41, 41, 46, 47, 48, 41, 41, 49, 41, 41,
+ 50, 51, 52, 53, 54, 1, 55, 56, 57, 58,
+
+ 59, 60, 61, 62, 63, 41, 64, 65, 66, 67,
+ 68, 69, 41, 70, 71, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 81, 82, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1
} ;
-static yyconst flex_int32_t yy_meta[80] =
+static yyconst flex_int32_t yy_meta[83] =
{ 0,
1, 2, 3, 1, 2, 1, 1, 1, 1, 1,
1, 4, 1, 1, 1, 2, 1, 1, 1, 5,
- 5, 5, 5, 5, 1, 1, 1, 2, 1, 1,
- 6, 6, 6, 6, 6, 6, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 1, 1, 1, 1,
- 7, 6, 6, 6, 6, 6, 6, 7, 7, 7,
+ 5, 5, 5, 5, 5, 5, 5, 1, 1, 1,
+ 2, 1, 1, 6, 6, 6, 6, 6, 6, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 1,
+ 1, 1, 1, 7, 6, 6, 6, 6, 6, 6,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 1, 1, 1, 1
+ 7, 7, 7, 7, 7, 7, 7, 7, 1, 1,
+ 1, 1
} ;
-static yyconst flex_int16_t yy_base[421] =
+static yyconst flex_int16_t yy_base[465] =
{ 0,
- 0, 0, 618, 619, 78, 0, 589, 74, 79, 57,
- 77, 77, 619, 619, 588, 74, 619, 75, 73, 87,
- 128, 87, 586, 619, 89, 586, 71, 619, 0, 562,
- 112, 619, 609, 619, 583, 79, 50, 543, 72, 56,
- 65, 70, 544, 79, 543, 551, 95, 532, 541, 539,
- 544, 619, 62, 619, 619, 154, 0, 619, 121, 619,
- 599, 155, 545, 533, 619, 619, 619, 619, 133, 619,
- 596, 619, 619, 619, 619, 619, 619, 580, 171, 160,
- 0, 619, 194, 126, 0, 220, 140, 121, 0, 619,
- 619, 619, 569, 619, 619, 619, 568, 0, 558, 134,
-
- 175, 619, 619, 529, 193, 530, 523, 535, 522, 537,
- 524, 530, 516, 517, 514, 514, 517, 514, 511, 0,
- 78, 515, 151, 513, 95, 90, 517, 510, 129, 143,
- 515, 619, 619, 243, 517, 521, 619, 253, 619, 545,
- 0, 0, 238, 160, 264, 269, 168, 619, 164, 254,
- 619, 619, 186, 232, 619, 568, 210, 619, 567, 504,
- 186, 503, 494, 502, 500, 508, 503, 488, 0, 496,
- 508, 503, 491, 203, 505, 503, 499, 491, 497, 500,
- 0, 486, 490, 0, 491, 488, 478, 476, 478, 480,
- 487, 473, 471, 471, 483, 473, 477, 481, 483, 472,
-
- 530, 472, 473, 290, 297, 501, 234, 619, 184, 619,
- 619, 282, 219, 488, 489, 465, 463, 456, 460, 454,
- 460, 457, 452, 461, 452, 0, 456, 0, 0, 447,
- 455, 444, 451, 0, 0, 445, 442, 0, 446, 0,
- 441, 441, 440, 437, 449, 439, 443, 448, 447, 445,
- 435, 440, 0, 428, 440, 492, 619, 430, 430, 293,
- 619, 258, 619, 261, 448, 450, 0, 439, 422, 420,
- 431, 426, 421, 415, 419, 426, 0, 0, 417, 418,
- 423, 414, 0, 421, 407, 415, 410, 0, 418, 415,
- 417, 401, 410, 412, 0, 403, 406, 0, 409, 412,
-
- 449, 443, 619, 438, 416, 408, 398, 388, 392, 391,
- 384, 386, 396, 386, 380, 380, 0, 0, 0, 392,
- 393, 0, 0, 0, 0, 0, 0, 389, 389, 382,
- 438, 437, 619, 419, 417, 0, 386, 0, 370, 381,
- 374, 375, 379, 376, 353, 0, 341, 317, 0, 307,
- 302, 0, 354, 305, 333, 283, 291, 0, 288, 295,
- 297, 0, 0, 0, 0, 0, 0, 335, 343, 619,
- 312, 292, 273, 276, 0, 271, 288, 619, 326, 294,
- 302, 278, 268, 0, 0, 289, 287, 274, 264, 263,
- 261, 246, 245, 238, 226, 0, 0, 221, 192, 191,
-
- 181, 164, 85, 0, 69, 0, 619, 359, 366, 373,
- 376, 383, 386, 392, 399, 405, 412, 414, 421, 425
+ 0, 0, 706, 707, 81, 0, 674, 77, 82, 57,
+ 80, 80, 707, 707, 673, 77, 707, 78, 76, 93,
+ 134, 193, 671, 707, 95, 671, 74, 707, 0, 647,
+ 106, 707, 697, 707, 668, 79, 45, 628, 67, 62,
+ 67, 71, 629, 60, 628, 636, 75, 617, 626, 624,
+ 629, 707, 62, 707, 707, 144, 0, 707, 112, 707,
+ 687, 144, 630, 618, 707, 707, 707, 707, 130, 707,
+ 684, 707, 707, 707, 707, 707, 707, 668, 247, 171,
+ 0, 707, 0, 157, 0, 222, 131, 110, 0, 707,
+ 707, 707, 654, 707, 707, 707, 653, 0, 643, 137,
+
+ 151, 707, 707, 614, 221, 615, 608, 620, 607, 622,
+ 609, 615, 601, 602, 599, 599, 602, 599, 596, 0,
+ 115, 600, 123, 598, 125, 142, 602, 595, 127, 126,
+ 600, 707, 707, 276, 602, 606, 707, 293, 707, 630,
+ 707, 0, 0, 186, 185, 301, 309, 184, 707, 195,
+ 294, 707, 707, 179, 202, 707, 656, 212, 707, 655,
+ 589, 153, 588, 579, 587, 585, 593, 588, 573, 586,
+ 580, 0, 579, 591, 586, 574, 183, 588, 586, 582,
+ 574, 580, 583, 0, 569, 573, 0, 574, 571, 561,
+ 559, 561, 563, 570, 556, 554, 554, 566, 556, 560,
+
+ 564, 566, 555, 616, 555, 556, 355, 363, 584, 192,
+ 707, 218, 707, 707, 295, 239, 571, 572, 548, 546,
+ 539, 543, 537, 274, 541, 536, 545, 536, 537, 538,
+ 0, 538, 0, 0, 529, 537, 526, 533, 0, 0,
+ 527, 524, 0, 528, 0, 523, 523, 522, 519, 531,
+ 521, 525, 530, 529, 527, 517, 522, 0, 510, 522,
+ 577, 707, 512, 512, 339, 707, 214, 707, 246, 530,
+ 532, 0, 345, 505, 503, 514, 509, 550, 503, 497,
+ 501, 508, 494, 510, 0, 0, 497, 498, 503, 494,
+ 0, 501, 487, 495, 490, 0, 498, 495, 497, 481,
+
+ 490, 492, 0, 483, 486, 0, 489, 492, 532, 526,
+ 707, 519, 496, 352, 488, 478, 468, 472, 471, 515,
+ 463, 465, 475, 465, 511, 459, 457, 457, 0, 0,
+ 0, 469, 470, 0, 0, 0, 0, 0, 0, 466,
+ 466, 459, 518, 517, 707, 497, 495, 451, 359, 462,
+ 0, 446, 457, 466, 426, 406, 387, 381, 418, 376,
+ 379, 0, 367, 364, 0, 377, 375, 0, 430, 378,
+ 407, 365, 368, 356, 364, 0, 371, 359, 365, 367,
+ 0, 394, 354, 0, 0, 0, 0, 0, 406, 414,
+ 707, 380, 361, 359, 345, 340, 343, 338, 0, 337,
+
+ 354, 353, 346, 707, 392, 358, 365, 328, 333, 338,
+ 329, 0, 0, 0, 323, 340, 349, 347, 328, 316,
+ 312, 311, 0, 308, 312, 311, 286, 273, 286, 255,
+ 0, 258, 233, 218, 212, 0, 0, 230, 209, 707,
+ 170, 182, 174, 133, 131, 101, 707, 0, 68, 0,
+ 707, 442, 449, 456, 459, 466, 469, 475, 482, 488,
+ 495, 497, 504, 508
} ;
-static yyconst flex_int16_t yy_def[421] =
+static yyconst flex_int16_t yy_def[465] =
{ 0,
- 407, 1, 407, 407, 407, 408, 407, 409, 407, 407,
- 407, 410, 407, 407, 407, 407, 407, 407, 407, 407,
- 407, 21, 407, 407, 407, 407, 407, 407, 411, 411,
- 411, 407, 407, 407, 407, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411, 411, 411,
- 411, 407, 407, 407, 407, 407, 408, 407, 409, 407,
- 409, 407, 407, 407, 407, 407, 407, 407, 410, 407,
- 410, 407, 407, 407, 407, 407, 407, 407, 407, 407,
- 412, 407, 407, 21, 22, 407, 407, 407, 413, 407,
- 407, 407, 407, 407, 407, 407, 407, 411, 411, 414,
-
- 415, 407, 407, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411, 411, 411,
- 411, 407, 407, 407, 407, 407, 407, 407, 407, 407,
- 416, 412, 407, 407, 407, 407, 407, 407, 407, 413,
- 407, 407, 411, 414, 407, 414, 415, 407, 415, 411,
- 411, 411, 411, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411, 411, 411,
-
- 417, 407, 407, 407, 407, 416, 407, 407, 407, 407,
- 407, 407, 407, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 417, 407, 407, 407, 407,
- 407, 407, 407, 407, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411, 407, 407,
-
- 407, 407, 407, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411, 411, 411,
- 407, 407, 407, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411, 411, 411,
- 411, 418, 419, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 420, 419, 407,
- 411, 411, 411, 411, 411, 411, 411, 407, 420, 411,
- 411, 411, 411, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411, 411, 411,
-
- 411, 411, 411, 411, 411, 411, 0, 407, 407, 407,
- 407, 407, 407, 407, 407, 407, 407, 407, 407, 407
+ 451, 1, 451, 451, 451, 452, 451, 453, 451, 451,
+ 451, 454, 451, 451, 451, 451, 451, 451, 451, 451,
+ 451, 451, 451, 451, 451, 451, 451, 451, 455, 455,
+ 455, 451, 451, 451, 451, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 451, 451, 451, 451, 451, 452, 451, 453, 451,
+ 453, 451, 451, 451, 451, 451, 451, 451, 454, 451,
+ 454, 451, 451, 451, 451, 451, 451, 451, 451, 451,
+ 456, 451, 79, 21, 22, 451, 451, 451, 457, 451,
+ 451, 451, 451, 451, 451, 451, 451, 455, 455, 458,
+
+ 459, 451, 451, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 451, 451, 451, 451, 451, 451, 451, 451, 451,
+ 451, 460, 456, 451, 451, 451, 451, 451, 451, 451,
+ 457, 451, 451, 455, 458, 451, 458, 459, 451, 459,
+ 455, 455, 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455, 455, 455,
+
+ 455, 455, 455, 461, 451, 451, 451, 451, 460, 451,
+ 451, 451, 451, 451, 451, 451, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455, 455, 455,
+ 461, 451, 451, 451, 451, 451, 451, 451, 451, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455, 455, 455,
+
+ 455, 455, 455, 455, 455, 455, 451, 451, 451, 451,
+ 451, 455, 455, 451, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 451, 451, 451, 455, 455, 451, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 462, 463, 455,
+ 455, 451, 451, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455, 464, 463,
+ 451, 455, 455, 451, 451, 455, 455, 455, 455, 455,
+
+ 455, 455, 455, 451, 464, 455, 455, 451, 451, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455, 451, 451,
+ 455, 455, 455, 455, 455, 455, 451, 451, 455, 455,
+ 455, 455, 455, 451, 451, 455, 455, 455, 455, 451,
+ 451, 455, 455, 451, 455, 455, 451, 455, 455, 455,
+ 0, 451, 451, 451, 451, 451, 451, 451, 451, 451,
+ 451, 451, 451, 451
} ;
-static yyconst flex_int16_t yy_nxt[699] =
+static yyconst flex_int16_t yy_nxt[790] =
{ 0,
4, 5, 6, 5, 5, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 22, 22, 22, 23, 24, 25, 26, 27, 28,
- 29, 29, 29, 29, 29, 29, 30, 29, 29, 31,
- 29, 29, 29, 29, 29, 29, 32, 33, 34, 35,
- 36, 37, 38, 39, 40, 41, 42, 43, 29, 44,
- 29, 45, 29, 29, 29, 29, 46, 47, 48, 49,
- 50, 51, 29, 29, 29, 52, 53, 54, 55, 56,
- 60, 56, 56, 62, 65, 66, 67, 70, 73, 132,
- 78, 75, 79, 79, 79, 79, 79, 91, 96, 97,
-
- 80, 74, 76, 77, 68, 81, 85, 85, 85, 85,
- 104, 112, 406, 92, 82, 93, 94, 106, 100, 107,
- 113, 61, 101, 109, 71, 405, 114, 60, 115, 105,
- 110, 117, 407, 63, 118, 120, 111, 116, 133, 183,
- 155, 192, 121, 70, 64, 83, 184, 84, 84, 84,
- 84, 85, 190, 124, 125, 56, 193, 56, 56, 407,
- 149, 140, 86, 126, 140, 143, 127, 87, 61, 191,
- 144, 407, 88, 89, 134, 134, 134, 134, 134, 147,
- 71, 156, 149, 86, 148, 158, 141, 143, 196, 87,
- 79, 79, 79, 79, 79, 144, 197, 88, 407, 209,
-
- 89, 147, 198, 211, 199, 138, 139, 404, 186, 148,
- 139, 403, 148, 79, 79, 79, 79, 79, 187, 188,
- 158, 209, 159, 261, 214, 211, 138, 139, 138, 139,
- 215, 402, 139, 139, 145, 401, 145, 148, 155, 146,
- 146, 146, 146, 146, 161, 261, 162, 201, 163, 138,
- 139, 400, 164, 217, 218, 139, 165, 159, 264, 166,
- 167, 168, 134, 134, 134, 134, 134, 204, 399, 204,
- 230, 231, 205, 205, 205, 205, 205, 207, 208, 156,
- 264, 398, 208, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 146, 212, 301, 397, 396, 301, 213, 207,
-
- 303, 395, 263, 208, 210, 394, 302, 208, 210, 205,
- 205, 205, 205, 205, 393, 212, 205, 205, 205, 205,
- 205, 262, 303, 213, 392, 210, 263, 263, 391, 390,
- 210, 389, 139, 388, 387, 386, 139, 378, 385, 384,
- 383, 382, 381, 262, 380, 370, 378, 377, 376, 375,
- 374, 263, 373, 139, 372, 371, 370, 367, 139, 57,
- 57, 366, 57, 57, 57, 57, 59, 59, 59, 59,
- 59, 59, 59, 69, 69, 69, 69, 69, 69, 69,
- 98, 98, 98, 142, 142, 365, 142, 142, 142, 142,
- 150, 150, 154, 154, 154, 154, 154, 154, 154, 157,
-
- 157, 157, 157, 157, 157, 157, 206, 364, 363, 206,
- 206, 206, 256, 256, 256, 256, 256, 256, 256, 368,
- 368, 369, 369, 369, 369, 369, 369, 369, 379, 379,
- 379, 379, 362, 361, 360, 359, 358, 357, 356, 355,
- 354, 353, 352, 351, 350, 349, 348, 347, 346, 345,
- 344, 343, 342, 341, 340, 339, 338, 337, 336, 335,
- 334, 333, 302, 332, 331, 330, 329, 328, 327, 326,
- 325, 324, 323, 322, 321, 320, 319, 318, 317, 316,
- 315, 314, 313, 312, 311, 310, 309, 308, 307, 306,
- 305, 304, 300, 299, 257, 298, 297, 296, 295, 294,
-
- 293, 292, 291, 290, 289, 288, 287, 286, 285, 284,
- 283, 282, 281, 280, 279, 278, 277, 276, 275, 274,
- 273, 272, 271, 270, 269, 268, 267, 266, 265, 260,
- 259, 258, 257, 255, 254, 253, 252, 251, 250, 249,
- 248, 247, 246, 245, 244, 243, 242, 241, 240, 239,
- 238, 237, 236, 235, 234, 233, 232, 229, 228, 227,
- 226, 225, 224, 223, 222, 221, 220, 219, 216, 407,
- 407, 141, 203, 202, 200, 195, 194, 189, 185, 182,
- 181, 180, 179, 178, 177, 176, 175, 174, 173, 172,
- 171, 170, 169, 160, 153, 152, 151, 137, 407, 136,
-
- 135, 407, 131, 130, 129, 128, 123, 122, 119, 108,
- 103, 102, 99, 95, 90, 72, 58, 407, 3, 407,
- 407, 407, 407, 407, 407, 407, 407, 407, 407, 407,
- 407, 407, 407, 407, 407, 407, 407, 407, 407, 407,
- 407, 407, 407, 407, 407, 407, 407, 407, 407, 407,
- 407, 407, 407, 407, 407, 407, 407, 407, 407, 407,
- 407, 407, 407, 407, 407, 407, 407, 407, 407, 407,
- 407, 407, 407, 407, 407, 407, 407, 407, 407, 407,
- 407, 407, 407, 407, 407, 407, 407, 407, 407, 407,
- 407, 407, 407, 407, 407, 407, 407, 407
-
+ 22, 22, 22, 22, 22, 22, 22, 23, 24, 25,
+ 26, 27, 28, 29, 29, 29, 29, 29, 29, 30,
+ 29, 29, 31, 29, 29, 29, 29, 29, 29, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+ 43, 29, 44, 29, 45, 29, 29, 29, 29, 46,
+ 47, 48, 49, 50, 51, 29, 29, 29, 52, 53,
+ 54, 55, 56, 60, 56, 56, 62, 65, 66, 67,
+ 70, 73, 132, 78, 75, 79, 79, 79, 79, 79,
+
+ 79, 79, 79, 91, 96, 97, 80, 74, 76, 77,
+ 68, 81, 100, 104, 450, 106, 101, 107, 60, 120,
+ 112, 109, 92, 82, 93, 94, 121, 61, 110, 113,
+ 71, 114, 105, 115, 111, 117, 124, 125, 118, 63,
+ 70, 133, 116, 156, 449, 56, 126, 56, 56, 127,
+ 64, 83, 150, 84, 84, 84, 84, 84, 84, 85,
+ 85, 159, 61, 134, 134, 134, 134, 134, 134, 134,
+ 134, 86, 140, 148, 150, 140, 87, 448, 149, 186,
+ 71, 88, 89, 189, 141, 193, 187, 157, 201, 199,
+ 202, 447, 86, 190, 191, 148, 195, 200, 87, 144,
+
+ 142, 160, 194, 149, 145, 451, 88, 446, 156, 89,
+ 83, 196, 85, 85, 85, 85, 85, 85, 85, 85,
+ 217, 144, 159, 220, 221, 445, 218, 212, 210, 145,
+ 86, 149, 451, 211, 444, 87, 146, 214, 146, 211,
+ 88, 147, 147, 147, 147, 147, 147, 147, 147, 212,
+ 210, 86, 157, 235, 236, 443, 149, 87, 211, 214,
+ 266, 268, 160, 442, 211, 88, 79, 79, 79, 79,
+ 79, 79, 79, 79, 441, 162, 440, 163, 439, 164,
+ 204, 269, 266, 165, 138, 139, 268, 166, 311, 139,
+ 167, 168, 169, 170, 171, 134, 134, 134, 134, 134,
+
+ 134, 134, 134, 269, 438, 138, 139, 207, 437, 207,
+ 311, 139, 208, 208, 208, 208, 208, 208, 208, 208,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 147, 147, 147, 147, 147, 147, 215, 267, 277, 436,
+ 309, 216, 268, 309, 435, 278, 314, 213, 314, 314,
+ 434, 213, 310, 314, 433, 314, 314, 432, 215, 267,
+ 373, 431, 373, 373, 430, 429, 216, 268, 213, 373,
+ 428, 373, 373, 213, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
+ 427, 426, 425, 424, 423, 422, 421, 420, 315, 419,
+
+ 418, 139, 417, 404, 416, 139, 415, 414, 413, 412,
+ 411, 410, 409, 408, 407, 406, 391, 404, 403, 402,
+ 401, 400, 139, 399, 398, 348, 397, 139, 396, 394,
+ 393, 392, 391, 388, 387, 386, 385, 384, 383, 382,
+ 381, 395, 57, 57, 380, 57, 57, 57, 57, 59,
+ 59, 59, 59, 59, 59, 59, 69, 69, 69, 69,
+ 69, 69, 69, 98, 98, 98, 143, 143, 379, 143,
+ 143, 143, 143, 151, 151, 155, 155, 155, 155, 155,
+ 155, 155, 158, 158, 158, 158, 158, 158, 158, 209,
+ 378, 377, 209, 209, 209, 261, 261, 261, 261, 261,
+
+ 261, 261, 389, 389, 390, 390, 390, 390, 390, 390,
+ 390, 405, 405, 405, 405, 376, 375, 374, 372, 371,
+ 370, 369, 368, 367, 366, 365, 364, 363, 362, 361,
+ 360, 359, 358, 357, 356, 355, 354, 353, 352, 351,
+ 350, 349, 347, 346, 345, 310, 344, 343, 342, 341,
+ 340, 339, 338, 337, 336, 335, 334, 333, 332, 331,
+ 330, 329, 328, 327, 326, 325, 324, 323, 322, 321,
+ 320, 319, 318, 317, 316, 313, 312, 308, 307, 262,
+ 306, 305, 304, 303, 302, 301, 300, 299, 298, 297,
+ 296, 295, 294, 293, 292, 291, 290, 289, 288, 287,
+
+ 286, 285, 284, 283, 282, 281, 280, 279, 276, 275,
+ 274, 273, 272, 271, 270, 265, 264, 263, 262, 260,
+ 259, 258, 257, 256, 255, 254, 253, 252, 251, 250,
+ 249, 248, 247, 246, 245, 244, 243, 242, 241, 240,
+ 239, 238, 237, 234, 233, 232, 231, 230, 229, 228,
+ 227, 226, 225, 224, 223, 222, 219, 451, 451, 142,
+ 206, 205, 203, 198, 197, 192, 188, 185, 184, 183,
+ 182, 181, 180, 179, 178, 177, 176, 175, 174, 173,
+ 172, 161, 154, 153, 152, 137, 451, 136, 135, 451,
+ 131, 130, 129, 128, 123, 122, 119, 108, 103, 102,
+
+ 99, 95, 90, 72, 58, 451, 3, 451, 451, 451,
+ 451, 451, 451, 451, 451, 451, 451, 451, 451, 451,
+ 451, 451, 451, 451, 451, 451, 451, 451, 451, 451,
+ 451, 451, 451, 451, 451, 451, 451, 451, 451, 451,
+ 451, 451, 451, 451, 451, 451, 451, 451, 451, 451,
+ 451, 451, 451, 451, 451, 451, 451, 451, 451, 451,
+ 451, 451, 451, 451, 451, 451, 451, 451, 451, 451,
+ 451, 451, 451, 451, 451, 451, 451, 451, 451, 451,
+ 451, 451, 451, 451, 451, 451, 451, 451, 451
} ;
-static yyconst flex_int16_t yy_chk[699] =
+static yyconst flex_int16_t yy_chk[790] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 5,
- 8, 5, 5, 9, 10, 10, 11, 12, 16, 53,
- 19, 18, 19, 19, 19, 19, 19, 25, 27, 27,
-
- 20, 16, 18, 18, 11, 20, 22, 22, 22, 22,
- 36, 40, 405, 25, 20, 25, 25, 37, 31, 37,
- 40, 8, 31, 39, 12, 403, 41, 59, 41, 36,
- 39, 42, 22, 9, 42, 44, 39, 41, 53, 121,
- 100, 126, 44, 69, 9, 21, 121, 21, 21, 21,
- 21, 21, 125, 47, 47, 56, 126, 56, 56, 22,
- 88, 80, 21, 47, 80, 84, 47, 21, 59, 125,
- 84, 84, 21, 21, 62, 62, 62, 62, 62, 87,
- 69, 100, 88, 21, 87, 101, 80, 84, 129, 21,
- 79, 79, 79, 79, 79, 84, 129, 21, 84, 144,
-
- 21, 87, 130, 149, 130, 79, 79, 402, 123, 87,
- 79, 401, 147, 83, 83, 83, 83, 83, 123, 123,
- 157, 144, 101, 209, 153, 149, 79, 79, 83, 83,
- 153, 400, 79, 83, 86, 399, 86, 147, 154, 86,
- 86, 86, 86, 86, 105, 209, 105, 134, 105, 83,
- 83, 398, 105, 161, 161, 83, 105, 157, 213, 105,
- 105, 105, 134, 134, 134, 134, 134, 138, 395, 138,
- 174, 174, 138, 138, 138, 138, 138, 143, 207, 154,
- 213, 394, 143, 145, 145, 145, 145, 145, 146, 146,
- 146, 146, 146, 150, 260, 393, 392, 260, 150, 143,
-
- 264, 391, 262, 207, 146, 390, 260, 143, 146, 204,
- 204, 204, 204, 204, 389, 150, 205, 205, 205, 205,
- 205, 212, 264, 150, 388, 146, 212, 262, 387, 386,
- 146, 383, 205, 382, 381, 380, 205, 379, 377, 376,
- 374, 373, 372, 212, 371, 369, 368, 361, 360, 359,
- 357, 212, 356, 205, 355, 354, 353, 351, 205, 408,
- 408, 350, 408, 408, 408, 408, 409, 409, 409, 409,
- 409, 409, 409, 410, 410, 410, 410, 410, 410, 410,
- 411, 411, 411, 412, 412, 348, 412, 412, 412, 412,
- 413, 413, 414, 414, 414, 414, 414, 414, 414, 415,
-
- 415, 415, 415, 415, 415, 415, 416, 347, 345, 416,
- 416, 416, 417, 417, 417, 417, 417, 417, 417, 418,
- 418, 419, 419, 419, 419, 419, 419, 419, 420, 420,
- 420, 420, 344, 343, 342, 341, 340, 339, 337, 335,
- 334, 332, 331, 330, 329, 328, 321, 320, 316, 315,
- 314, 313, 312, 311, 310, 309, 308, 307, 306, 305,
- 304, 302, 301, 300, 299, 297, 296, 294, 293, 292,
- 291, 290, 289, 287, 286, 285, 284, 282, 281, 280,
- 279, 276, 275, 274, 273, 272, 271, 270, 269, 268,
- 266, 265, 259, 258, 256, 255, 254, 252, 251, 250,
-
- 249, 248, 247, 246, 245, 244, 243, 242, 241, 239,
- 237, 236, 233, 232, 231, 230, 227, 225, 224, 223,
- 222, 221, 220, 219, 218, 217, 216, 215, 214, 206,
- 203, 202, 201, 200, 199, 198, 197, 196, 195, 194,
- 193, 192, 191, 190, 189, 188, 187, 186, 185, 183,
- 182, 180, 179, 178, 177, 176, 175, 173, 172, 171,
- 170, 168, 167, 166, 165, 164, 163, 162, 160, 159,
- 156, 140, 136, 135, 131, 128, 127, 124, 122, 119,
- 118, 117, 116, 115, 114, 113, 112, 111, 110, 109,
- 108, 107, 106, 104, 99, 97, 93, 78, 71, 64,
-
- 63, 61, 51, 50, 49, 48, 46, 45, 43, 38,
- 35, 33, 30, 26, 23, 15, 7, 3, 407, 407,
- 407, 407, 407, 407, 407, 407, 407, 407, 407, 407,
- 407, 407, 407, 407, 407, 407, 407, 407, 407, 407,
- 407, 407, 407, 407, 407, 407, 407, 407, 407, 407,
- 407, 407, 407, 407, 407, 407, 407, 407, 407, 407,
- 407, 407, 407, 407, 407, 407, 407, 407, 407, 407,
- 407, 407, 407, 407, 407, 407, 407, 407, 407, 407,
- 407, 407, 407, 407, 407, 407, 407, 407, 407, 407,
- 407, 407, 407, 407, 407, 407, 407, 407
-
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 5, 8, 5, 5, 9, 10, 10, 11,
+ 12, 16, 53, 19, 18, 19, 19, 19, 19, 19,
+
+ 19, 19, 19, 25, 27, 27, 20, 16, 18, 18,
+ 11, 20, 31, 36, 449, 37, 31, 37, 59, 44,
+ 40, 39, 25, 20, 25, 25, 44, 8, 39, 40,
+ 12, 41, 36, 41, 39, 42, 47, 47, 42, 9,
+ 69, 53, 41, 100, 446, 56, 47, 56, 56, 47,
+ 9, 21, 88, 21, 21, 21, 21, 21, 21, 21,
+ 21, 101, 59, 62, 62, 62, 62, 62, 62, 62,
+ 62, 21, 80, 87, 88, 80, 21, 445, 87, 121,
+ 69, 21, 21, 123, 80, 125, 121, 100, 130, 129,
+ 130, 444, 21, 123, 123, 87, 126, 129, 21, 84,
+
+ 80, 101, 125, 87, 84, 84, 21, 443, 155, 21,
+ 22, 126, 22, 22, 22, 22, 22, 22, 22, 22,
+ 154, 84, 158, 162, 162, 442, 154, 145, 144, 84,
+ 22, 148, 84, 144, 441, 22, 86, 150, 86, 210,
+ 22, 86, 86, 86, 86, 86, 86, 86, 86, 145,
+ 144, 22, 155, 177, 177, 439, 148, 22, 144, 150,
+ 212, 267, 158, 438, 210, 22, 79, 79, 79, 79,
+ 79, 79, 79, 79, 435, 105, 434, 105, 433, 105,
+ 134, 216, 212, 105, 79, 79, 267, 105, 269, 79,
+ 105, 105, 105, 105, 105, 134, 134, 134, 134, 134,
+
+ 134, 134, 134, 216, 432, 79, 79, 138, 430, 138,
+ 269, 79, 138, 138, 138, 138, 138, 138, 138, 138,
+ 146, 146, 146, 146, 146, 146, 146, 146, 147, 147,
+ 147, 147, 147, 147, 147, 147, 151, 215, 224, 429,
+ 265, 151, 215, 265, 428, 224, 273, 147, 273, 273,
+ 427, 147, 265, 314, 426, 314, 314, 425, 151, 215,
+ 349, 424, 349, 349, 422, 421, 151, 215, 147, 373,
+ 420, 373, 373, 147, 207, 207, 207, 207, 207, 207,
+ 207, 207, 208, 208, 208, 208, 208, 208, 208, 208,
+ 419, 418, 417, 416, 415, 411, 410, 409, 273, 408,
+
+ 407, 208, 406, 405, 403, 208, 402, 401, 400, 398,
+ 397, 396, 395, 394, 393, 392, 390, 389, 383, 382,
+ 380, 379, 208, 378, 377, 314, 375, 208, 374, 372,
+ 371, 370, 369, 367, 366, 364, 363, 361, 360, 359,
+ 358, 373, 452, 452, 357, 452, 452, 452, 452, 453,
+ 453, 453, 453, 453, 453, 453, 454, 454, 454, 454,
+ 454, 454, 454, 455, 455, 455, 456, 456, 356, 456,
+ 456, 456, 456, 457, 457, 458, 458, 458, 458, 458,
+ 458, 458, 459, 459, 459, 459, 459, 459, 459, 460,
+ 355, 354, 460, 460, 460, 461, 461, 461, 461, 461,
+
+ 461, 461, 462, 462, 463, 463, 463, 463, 463, 463,
+ 463, 464, 464, 464, 464, 353, 352, 350, 348, 347,
+ 346, 344, 343, 342, 341, 340, 333, 332, 328, 327,
+ 326, 325, 324, 323, 322, 321, 320, 319, 318, 317,
+ 316, 315, 313, 312, 310, 309, 308, 307, 305, 304,
+ 302, 301, 300, 299, 298, 297, 295, 294, 293, 292,
+ 290, 289, 288, 287, 284, 283, 282, 281, 280, 279,
+ 278, 277, 276, 275, 274, 271, 270, 264, 263, 261,
+ 260, 259, 257, 256, 255, 254, 253, 252, 251, 250,
+ 249, 248, 247, 246, 244, 242, 241, 238, 237, 236,
+
+ 235, 232, 230, 229, 228, 227, 226, 225, 223, 222,
+ 221, 220, 219, 218, 217, 209, 206, 205, 204, 203,
+ 202, 201, 200, 199, 198, 197, 196, 195, 194, 193,
+ 192, 191, 190, 189, 188, 186, 185, 183, 182, 181,
+ 180, 179, 178, 176, 175, 174, 173, 171, 170, 169,
+ 168, 167, 166, 165, 164, 163, 161, 160, 157, 140,
+ 136, 135, 131, 128, 127, 124, 122, 119, 118, 117,
+ 116, 115, 114, 113, 112, 111, 110, 109, 108, 107,
+ 106, 104, 99, 97, 93, 78, 71, 64, 63, 61,
+ 51, 50, 49, 48, 46, 45, 43, 38, 35, 33,
+
+ 30, 26, 23, 15, 7, 3, 451, 451, 451, 451,
+ 451, 451, 451, 451, 451, 451, 451, 451, 451, 451,
+ 451, 451, 451, 451, 451, 451, 451, 451, 451, 451,
+ 451, 451, 451, 451, 451, 451, 451, 451, 451, 451,
+ 451, 451, 451, 451, 451, 451, 451, 451, 451, 451,
+ 451, 451, 451, 451, 451, 451, 451, 451, 451, 451,
+ 451, 451, 451, 451, 451, 451, 451, 451, 451, 451,
+ 451, 451, 451, 451, 451, 451, 451, 451, 451, 451,
+ 451, 451, 451, 451, 451, 451, 451, 451, 451
} ;
extern int yy_flex_debug;
extern int yylex (GISourceScanner *scanner);
#define YY_DECL int yylex (GISourceScanner *scanner)
static int yywrap (void);
+static void parse_gtk_doc_comment (GISourceScanner *scanner);
static void parse_comment (GISourceScanner *scanner);
static void parse_trigraph (GISourceScanner *scanner);
static void process_linemarks (GISourceScanner *scanner);
static int check_identifier (GISourceScanner *scanner, const char *);
static int parse_ignored_macro (void);
-#line 888 "scannerlexer.c"
+#line 930 "scannerlexer.c"
#define INITIAL 0
register char *yy_cp, *yy_bp;
register int yy_act;
-#line 65 "giscanner/scannerlexer.l"
+#line 66 "giscanner/scannerlexer.l"
-#line 1071 "scannerlexer.c"
+#line 1113 "scannerlexer.c"
if ( !(yy_init) )
{
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 408 )
+ if ( yy_current_state >= 452 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
*(yy_state_ptr)++ = yy_current_state;
++yy_cp;
}
- while ( yy_base[yy_current_state] != 619 );
+ while ( yy_base[yy_current_state] != 707 );
yy_find_action:
yy_current_state = *--(yy_state_ptr);
case 1:
/* rule 1 can match eol */
YY_RULE_SETUP
-#line 67 "giscanner/scannerlexer.l"
+#line 68 "giscanner/scannerlexer.l"
{ strncpy(linebuf, yytext+1, sizeof(linebuf)); /* save the next line */
linebuf[sizeof(linebuf)-1]='\0';
/* printf("%4d:%s\n",lineno,linebuf); */
case 2:
/* rule 2 can match eol */
YY_RULE_SETUP
-#line 73 "giscanner/scannerlexer.l"
+#line 74 "giscanner/scannerlexer.l"
{ ++lineno; }
YY_BREAK
case 3:
YY_RULE_SETUP
-#line 74 "giscanner/scannerlexer.l"
+#line 76 "giscanner/scannerlexer.l"
{ /* Ignore whitespace. */ }
YY_BREAK
case 4:
YY_RULE_SETUP
-#line 76 "giscanner/scannerlexer.l"
-{ parse_comment(scanner); }
+#line 78 "giscanner/scannerlexer.l"
+{ parse_gtk_doc_comment(scanner); }
YY_BREAK
case 5:
YY_RULE_SETUP
-#line 77 "giscanner/scannerlexer.l"
-{ parse_trigraph(scanner); }
+#line 79 "giscanner/scannerlexer.l"
+{ parse_comment(scanner); }
YY_BREAK
case 6:
YY_RULE_SETUP
-#line 78 "giscanner/scannerlexer.l"
-{ /* Ignore C++ style comments. */ }
+#line 80 "giscanner/scannerlexer.l"
+{ parse_trigraph(scanner); }
YY_BREAK
case 7:
YY_RULE_SETUP
-#line 80 "giscanner/scannerlexer.l"
-{ yyless (yyleng - 1); return FUNCTION_MACRO; }
+#line 81 "giscanner/scannerlexer.l"
+{ /* Ignore C++ style comments. */ }
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 81 "giscanner/scannerlexer.l"
-{ return OBJECT_MACRO; }
+#line 83 "giscanner/scannerlexer.l"
+{ yyless (yyleng - 1); return FUNCTION_MACRO; }
YY_BREAK
case 9:
-/* rule 9 can match eol */
YY_RULE_SETUP
-#line 82 "giscanner/scannerlexer.l"
-{ /* Ignore pragma. */ }
+#line 84 "giscanner/scannerlexer.l"
+{ return OBJECT_MACRO; }
YY_BREAK
case 10:
/* rule 10 can match eol */
YY_RULE_SETUP
-#line 84 "giscanner/scannerlexer.l"
-{ process_linemarks(scanner); }
+#line 85 "giscanner/scannerlexer.l"
+{ /* Ignore pragma. */ }
YY_BREAK
case 11:
+/* rule 11 can match eol */
YY_RULE_SETUP
-#line 85 "giscanner/scannerlexer.l"
-{ }
+#line 87 "giscanner/scannerlexer.l"
+{ process_linemarks(scanner); }
YY_BREAK
case 12:
YY_RULE_SETUP
-#line 86 "giscanner/scannerlexer.l"
-{ return '{'; }
+#line 88 "giscanner/scannerlexer.l"
+{ }
YY_BREAK
case 13:
YY_RULE_SETUP
-#line 87 "giscanner/scannerlexer.l"
+#line 89 "giscanner/scannerlexer.l"
{ return '{'; }
YY_BREAK
case 14:
YY_RULE_SETUP
-#line 88 "giscanner/scannerlexer.l"
-{ return '}'; }
+#line 90 "giscanner/scannerlexer.l"
+{ return '{'; }
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 89 "giscanner/scannerlexer.l"
+#line 91 "giscanner/scannerlexer.l"
{ return '}'; }
YY_BREAK
case 16:
YY_RULE_SETUP
-#line 90 "giscanner/scannerlexer.l"
-{ return '['; }
+#line 92 "giscanner/scannerlexer.l"
+{ return '}'; }
YY_BREAK
case 17:
YY_RULE_SETUP
-#line 91 "giscanner/scannerlexer.l"
+#line 93 "giscanner/scannerlexer.l"
{ return '['; }
YY_BREAK
case 18:
YY_RULE_SETUP
-#line 92 "giscanner/scannerlexer.l"
-{ return ']'; }
+#line 94 "giscanner/scannerlexer.l"
+{ return '['; }
YY_BREAK
case 19:
YY_RULE_SETUP
-#line 93 "giscanner/scannerlexer.l"
+#line 95 "giscanner/scannerlexer.l"
{ return ']'; }
YY_BREAK
case 20:
YY_RULE_SETUP
-#line 94 "giscanner/scannerlexer.l"
-{ return '('; }
+#line 96 "giscanner/scannerlexer.l"
+{ return ']'; }
YY_BREAK
case 21:
YY_RULE_SETUP
-#line 95 "giscanner/scannerlexer.l"
-{ return ')'; }
+#line 97 "giscanner/scannerlexer.l"
+{ return '('; }
YY_BREAK
case 22:
YY_RULE_SETUP
-#line 96 "giscanner/scannerlexer.l"
-{ return ';'; }
+#line 98 "giscanner/scannerlexer.l"
+{ return ')'; }
YY_BREAK
case 23:
YY_RULE_SETUP
-#line 97 "giscanner/scannerlexer.l"
-{ return ':'; }
+#line 99 "giscanner/scannerlexer.l"
+{ return ';'; }
YY_BREAK
case 24:
YY_RULE_SETUP
-#line 98 "giscanner/scannerlexer.l"
-{ return ELLIPSIS; }
+#line 100 "giscanner/scannerlexer.l"
+{ return ':'; }
YY_BREAK
case 25:
YY_RULE_SETUP
-#line 99 "giscanner/scannerlexer.l"
-{ return '?'; }
+#line 101 "giscanner/scannerlexer.l"
+{ return ELLIPSIS; }
YY_BREAK
case 26:
YY_RULE_SETUP
-#line 100 "giscanner/scannerlexer.l"
-{ return '.'; }
+#line 102 "giscanner/scannerlexer.l"
+{ return '?'; }
YY_BREAK
case 27:
YY_RULE_SETUP
-#line 101 "giscanner/scannerlexer.l"
-{ return '+'; }
+#line 103 "giscanner/scannerlexer.l"
+{ return '.'; }
YY_BREAK
case 28:
YY_RULE_SETUP
-#line 102 "giscanner/scannerlexer.l"
-{ return '-'; }
+#line 104 "giscanner/scannerlexer.l"
+{ return '+'; }
YY_BREAK
case 29:
YY_RULE_SETUP
-#line 103 "giscanner/scannerlexer.l"
-{ return '*'; }
+#line 105 "giscanner/scannerlexer.l"
+{ return '-'; }
YY_BREAK
case 30:
YY_RULE_SETUP
-#line 104 "giscanner/scannerlexer.l"
-{ return '/'; }
+#line 106 "giscanner/scannerlexer.l"
+{ return '*'; }
YY_BREAK
case 31:
YY_RULE_SETUP
-#line 105 "giscanner/scannerlexer.l"
-{ return '%'; }
+#line 107 "giscanner/scannerlexer.l"
+{ return '/'; }
YY_BREAK
case 32:
YY_RULE_SETUP
-#line 106 "giscanner/scannerlexer.l"
-{ return '^'; }
+#line 108 "giscanner/scannerlexer.l"
+{ return '%'; }
YY_BREAK
case 33:
YY_RULE_SETUP
-#line 107 "giscanner/scannerlexer.l"
-{ return '&'; }
+#line 109 "giscanner/scannerlexer.l"
+{ return '^'; }
YY_BREAK
case 34:
YY_RULE_SETUP
-#line 108 "giscanner/scannerlexer.l"
-{ return '|'; }
+#line 110 "giscanner/scannerlexer.l"
+{ return '&'; }
YY_BREAK
case 35:
YY_RULE_SETUP
-#line 109 "giscanner/scannerlexer.l"
-{ return '~'; }
+#line 111 "giscanner/scannerlexer.l"
+{ return '|'; }
YY_BREAK
case 36:
YY_RULE_SETUP
-#line 110 "giscanner/scannerlexer.l"
-{ return '!'; }
+#line 112 "giscanner/scannerlexer.l"
+{ return '~'; }
YY_BREAK
case 37:
YY_RULE_SETUP
-#line 111 "giscanner/scannerlexer.l"
-{ return '='; }
+#line 113 "giscanner/scannerlexer.l"
+{ return '!'; }
YY_BREAK
case 38:
YY_RULE_SETUP
-#line 112 "giscanner/scannerlexer.l"
-{ return '<'; }
+#line 114 "giscanner/scannerlexer.l"
+{ return '='; }
YY_BREAK
case 39:
YY_RULE_SETUP
-#line 113 "giscanner/scannerlexer.l"
-{ return '>'; }
+#line 115 "giscanner/scannerlexer.l"
+{ return '<'; }
YY_BREAK
case 40:
YY_RULE_SETUP
-#line 114 "giscanner/scannerlexer.l"
-{ return ADDEQ; }
+#line 116 "giscanner/scannerlexer.l"
+{ return '>'; }
YY_BREAK
case 41:
YY_RULE_SETUP
-#line 115 "giscanner/scannerlexer.l"
-{ return SUBEQ; }
+#line 117 "giscanner/scannerlexer.l"
+{ return ADDEQ; }
YY_BREAK
case 42:
YY_RULE_SETUP
-#line 116 "giscanner/scannerlexer.l"
-{ return MULEQ; }
+#line 118 "giscanner/scannerlexer.l"
+{ return SUBEQ; }
YY_BREAK
case 43:
YY_RULE_SETUP
-#line 117 "giscanner/scannerlexer.l"
-{ return DIVEQ; }
+#line 119 "giscanner/scannerlexer.l"
+{ return MULEQ; }
YY_BREAK
case 44:
YY_RULE_SETUP
-#line 118 "giscanner/scannerlexer.l"
-{ return MODEQ; }
+#line 120 "giscanner/scannerlexer.l"
+{ return DIVEQ; }
YY_BREAK
case 45:
YY_RULE_SETUP
-#line 119 "giscanner/scannerlexer.l"
-{ return XOREQ; }
+#line 121 "giscanner/scannerlexer.l"
+{ return MODEQ; }
YY_BREAK
case 46:
YY_RULE_SETUP
-#line 120 "giscanner/scannerlexer.l"
-{ return ANDEQ; }
+#line 122 "giscanner/scannerlexer.l"
+{ return XOREQ; }
YY_BREAK
case 47:
YY_RULE_SETUP
-#line 121 "giscanner/scannerlexer.l"
-{ return OREQ; }
+#line 123 "giscanner/scannerlexer.l"
+{ return ANDEQ; }
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 122 "giscanner/scannerlexer.l"
-{ return SL; }
+#line 124 "giscanner/scannerlexer.l"
+{ return OREQ; }
YY_BREAK
case 49:
YY_RULE_SETUP
-#line 123 "giscanner/scannerlexer.l"
-{ return SR; }
+#line 125 "giscanner/scannerlexer.l"
+{ return SL; }
YY_BREAK
case 50:
YY_RULE_SETUP
-#line 124 "giscanner/scannerlexer.l"
-{ return SLEQ; }
+#line 126 "giscanner/scannerlexer.l"
+{ return SR; }
YY_BREAK
case 51:
YY_RULE_SETUP
-#line 125 "giscanner/scannerlexer.l"
-{ return SREQ; }
+#line 127 "giscanner/scannerlexer.l"
+{ return SLEQ; }
YY_BREAK
case 52:
YY_RULE_SETUP
-#line 126 "giscanner/scannerlexer.l"
-{ return EQ; }
+#line 128 "giscanner/scannerlexer.l"
+{ return SREQ; }
YY_BREAK
case 53:
YY_RULE_SETUP
-#line 127 "giscanner/scannerlexer.l"
-{ return NOTEQ; }
+#line 129 "giscanner/scannerlexer.l"
+{ return EQ; }
YY_BREAK
case 54:
YY_RULE_SETUP
-#line 128 "giscanner/scannerlexer.l"
-{ return LTEQ; }
+#line 130 "giscanner/scannerlexer.l"
+{ return NOTEQ; }
YY_BREAK
case 55:
YY_RULE_SETUP
-#line 129 "giscanner/scannerlexer.l"
-{ return GTEQ; }
+#line 131 "giscanner/scannerlexer.l"
+{ return LTEQ; }
YY_BREAK
case 56:
YY_RULE_SETUP
-#line 130 "giscanner/scannerlexer.l"
-{ return ANDAND; }
+#line 132 "giscanner/scannerlexer.l"
+{ return GTEQ; }
YY_BREAK
case 57:
YY_RULE_SETUP
-#line 131 "giscanner/scannerlexer.l"
-{ return OROR; }
+#line 133 "giscanner/scannerlexer.l"
+{ return ANDAND; }
YY_BREAK
case 58:
YY_RULE_SETUP
-#line 132 "giscanner/scannerlexer.l"
-{ return PLUSPLUS; }
+#line 134 "giscanner/scannerlexer.l"
+{ return OROR; }
YY_BREAK
case 59:
YY_RULE_SETUP
-#line 133 "giscanner/scannerlexer.l"
-{ return MINUSMINUS; }
+#line 135 "giscanner/scannerlexer.l"
+{ return PLUSPLUS; }
YY_BREAK
case 60:
YY_RULE_SETUP
-#line 134 "giscanner/scannerlexer.l"
-{ return ','; }
+#line 136 "giscanner/scannerlexer.l"
+{ return MINUSMINUS; }
YY_BREAK
case 61:
YY_RULE_SETUP
-#line 135 "giscanner/scannerlexer.l"
-{ return ARROW; }
+#line 137 "giscanner/scannerlexer.l"
+{ return ','; }
YY_BREAK
case 62:
YY_RULE_SETUP
-#line 137 "giscanner/scannerlexer.l"
-{ if (!parse_ignored_macro()) REJECT; }
+#line 138 "giscanner/scannerlexer.l"
+{ return ARROW; }
YY_BREAK
case 63:
YY_RULE_SETUP
-#line 138 "giscanner/scannerlexer.l"
+#line 140 "giscanner/scannerlexer.l"
{ if (!parse_ignored_macro()) REJECT; }
YY_BREAK
case 64:
YY_RULE_SETUP
-#line 139 "giscanner/scannerlexer.l"
+#line 141 "giscanner/scannerlexer.l"
{ if (!parse_ignored_macro()) REJECT; }
YY_BREAK
case 65:
YY_RULE_SETUP
-#line 140 "giscanner/scannerlexer.l"
+#line 142 "giscanner/scannerlexer.l"
{ if (!parse_ignored_macro()) REJECT; }
YY_BREAK
case 66:
YY_RULE_SETUP
-#line 141 "giscanner/scannerlexer.l"
-{ return CONST; }
+#line 143 "giscanner/scannerlexer.l"
+{ if (!parse_ignored_macro()) REJECT; }
YY_BREAK
case 67:
YY_RULE_SETUP
-#line 142 "giscanner/scannerlexer.l"
-{ return EXTENSION; }
+#line 144 "giscanner/scannerlexer.l"
+{ if (!parse_ignored_macro()) REJECT; }
YY_BREAK
case 68:
YY_RULE_SETUP
-#line 143 "giscanner/scannerlexer.l"
-{ return INLINE; }
+#line 145 "giscanner/scannerlexer.l"
+{ if (!parse_ignored_macro()) REJECT; }
YY_BREAK
case 69:
YY_RULE_SETUP
-#line 144 "giscanner/scannerlexer.l"
-{ if (!parse_ignored_macro()) REJECT; }
+#line 146 "giscanner/scannerlexer.l"
+{ return CONST; }
YY_BREAK
case 70:
YY_RULE_SETUP
-#line 145 "giscanner/scannerlexer.l"
-{ return SIGNED; }
+#line 147 "giscanner/scannerlexer.l"
+{ return EXTENSION; }
YY_BREAK
case 71:
YY_RULE_SETUP
-#line 146 "giscanner/scannerlexer.l"
-{ return RESTRICT; }
+#line 148 "giscanner/scannerlexer.l"
+{ return INLINE; }
YY_BREAK
case 72:
YY_RULE_SETUP
-#line 147 "giscanner/scannerlexer.l"
+#line 149 "giscanner/scannerlexer.l"
{ if (!parse_ignored_macro()) REJECT; }
YY_BREAK
case 73:
YY_RULE_SETUP
-#line 148 "giscanner/scannerlexer.l"
-{ return BOOL; }
+#line 150 "giscanner/scannerlexer.l"
+{ return SIGNED; }
YY_BREAK
case 74:
YY_RULE_SETUP
-#line 150 "giscanner/scannerlexer.l"
-{ return INTL_CONST; }
+#line 151 "giscanner/scannerlexer.l"
+{ return RESTRICT; }
YY_BREAK
case 75:
YY_RULE_SETUP
-#line 151 "giscanner/scannerlexer.l"
-{ return INTUL_CONST; }
+#line 152 "giscanner/scannerlexer.l"
+{ if (!parse_ignored_macro()) REJECT; }
YY_BREAK
case 76:
YY_RULE_SETUP
-#line 152 "giscanner/scannerlexer.l"
-{ if (scanner->macro_scan) return check_identifier(scanner, yytext); else REJECT; }
+#line 153 "giscanner/scannerlexer.l"
+{ if (!parse_ignored_macro()) REJECT; }
YY_BREAK
case 77:
YY_RULE_SETUP
case 78:
YY_RULE_SETUP
#line 155 "giscanner/scannerlexer.l"
-{ return AUTO; }
+{ return BOOL; }
YY_BREAK
case 79:
YY_RULE_SETUP
-#line 156 "giscanner/scannerlexer.l"
-{ return BREAK; }
+#line 157 "giscanner/scannerlexer.l"
+{ return INTL_CONST; }
YY_BREAK
case 80:
YY_RULE_SETUP
-#line 157 "giscanner/scannerlexer.l"
-{ return CASE; }
+#line 158 "giscanner/scannerlexer.l"
+{ return INTUL_CONST; }
YY_BREAK
case 81:
YY_RULE_SETUP
-#line 158 "giscanner/scannerlexer.l"
-{ return CHAR; }
+#line 159 "giscanner/scannerlexer.l"
+{ if (scanner->macro_scan) return check_identifier(scanner, yytext); else REJECT; }
YY_BREAK
case 82:
YY_RULE_SETUP
-#line 159 "giscanner/scannerlexer.l"
-{ return CONST; }
+#line 161 "giscanner/scannerlexer.l"
+{ if (!parse_ignored_macro()) REJECT; }
YY_BREAK
case 83:
YY_RULE_SETUP
-#line 160 "giscanner/scannerlexer.l"
-{ return CONTINUE; }
+#line 162 "giscanner/scannerlexer.l"
+{ return AUTO; }
YY_BREAK
case 84:
YY_RULE_SETUP
-#line 161 "giscanner/scannerlexer.l"
-{ return DEFAULT; }
+#line 163 "giscanner/scannerlexer.l"
+{ return BREAK; }
YY_BREAK
case 85:
YY_RULE_SETUP
-#line 162 "giscanner/scannerlexer.l"
-{ return DO; }
+#line 164 "giscanner/scannerlexer.l"
+{ return CASE; }
YY_BREAK
case 86:
YY_RULE_SETUP
-#line 163 "giscanner/scannerlexer.l"
-{ return DOUBLE; }
+#line 165 "giscanner/scannerlexer.l"
+{ return CHAR; }
YY_BREAK
case 87:
YY_RULE_SETUP
-#line 164 "giscanner/scannerlexer.l"
-{ return ELSE; }
+#line 166 "giscanner/scannerlexer.l"
+{ return CONST; }
YY_BREAK
case 88:
YY_RULE_SETUP
-#line 165 "giscanner/scannerlexer.l"
-{ return ENUM; }
+#line 167 "giscanner/scannerlexer.l"
+{ return CONTINUE; }
YY_BREAK
case 89:
YY_RULE_SETUP
-#line 166 "giscanner/scannerlexer.l"
-{ return EXTERN; }
+#line 168 "giscanner/scannerlexer.l"
+{ return DEFAULT; }
YY_BREAK
case 90:
YY_RULE_SETUP
-#line 167 "giscanner/scannerlexer.l"
-{ return FLOAT; }
+#line 169 "giscanner/scannerlexer.l"
+{ return DO; }
YY_BREAK
case 91:
YY_RULE_SETUP
-#line 168 "giscanner/scannerlexer.l"
-{ return FOR; }
+#line 170 "giscanner/scannerlexer.l"
+{ return DOUBLE; }
YY_BREAK
case 92:
YY_RULE_SETUP
-#line 169 "giscanner/scannerlexer.l"
-{ return GOTO; }
+#line 171 "giscanner/scannerlexer.l"
+{ return ELSE; }
YY_BREAK
case 93:
YY_RULE_SETUP
-#line 170 "giscanner/scannerlexer.l"
-{ return IF; }
+#line 172 "giscanner/scannerlexer.l"
+{ return ENUM; }
YY_BREAK
case 94:
YY_RULE_SETUP
-#line 171 "giscanner/scannerlexer.l"
-{ return INLINE; }
+#line 173 "giscanner/scannerlexer.l"
+{ return EXTERN; }
YY_BREAK
case 95:
YY_RULE_SETUP
-#line 172 "giscanner/scannerlexer.l"
-{ return INT; }
+#line 174 "giscanner/scannerlexer.l"
+{ return FLOAT; }
YY_BREAK
case 96:
YY_RULE_SETUP
-#line 173 "giscanner/scannerlexer.l"
-{ return LONG; }
+#line 175 "giscanner/scannerlexer.l"
+{ return FOR; }
YY_BREAK
case 97:
YY_RULE_SETUP
-#line 174 "giscanner/scannerlexer.l"
-{ return REGISTER; }
+#line 176 "giscanner/scannerlexer.l"
+{ return GOTO; }
YY_BREAK
case 98:
YY_RULE_SETUP
-#line 175 "giscanner/scannerlexer.l"
-{ return RESTRICT; }
+#line 177 "giscanner/scannerlexer.l"
+{ return IF; }
YY_BREAK
case 99:
YY_RULE_SETUP
-#line 176 "giscanner/scannerlexer.l"
-{ return RETURN; }
+#line 178 "giscanner/scannerlexer.l"
+{ return INLINE; }
YY_BREAK
case 100:
YY_RULE_SETUP
-#line 177 "giscanner/scannerlexer.l"
-{ return SHORT; }
+#line 179 "giscanner/scannerlexer.l"
+{ return INT; }
YY_BREAK
case 101:
YY_RULE_SETUP
-#line 178 "giscanner/scannerlexer.l"
-{ return SIGNED; }
+#line 180 "giscanner/scannerlexer.l"
+{ return INT; }
YY_BREAK
case 102:
YY_RULE_SETUP
-#line 179 "giscanner/scannerlexer.l"
-{ return SIZEOF; }
+#line 181 "giscanner/scannerlexer.l"
+{ return INT; }
YY_BREAK
case 103:
YY_RULE_SETUP
-#line 180 "giscanner/scannerlexer.l"
-{ return STATIC; }
+#line 182 "giscanner/scannerlexer.l"
+{ return INT; }
YY_BREAK
case 104:
YY_RULE_SETUP
-#line 181 "giscanner/scannerlexer.l"
-{ return STRUCT; }
+#line 183 "giscanner/scannerlexer.l"
+{ return INT; }
YY_BREAK
case 105:
YY_RULE_SETUP
-#line 182 "giscanner/scannerlexer.l"
-{ return SWITCH; }
+#line 184 "giscanner/scannerlexer.l"
+{ return LONG; }
YY_BREAK
case 106:
YY_RULE_SETUP
-#line 183 "giscanner/scannerlexer.l"
-{ return TYPEDEF; }
+#line 185 "giscanner/scannerlexer.l"
+{ return REGISTER; }
YY_BREAK
case 107:
YY_RULE_SETUP
-#line 184 "giscanner/scannerlexer.l"
-{ return UNION; }
+#line 186 "giscanner/scannerlexer.l"
+{ return RESTRICT; }
YY_BREAK
case 108:
YY_RULE_SETUP
-#line 185 "giscanner/scannerlexer.l"
-{ return UNSIGNED; }
+#line 187 "giscanner/scannerlexer.l"
+{ return RETURN; }
YY_BREAK
case 109:
YY_RULE_SETUP
-#line 186 "giscanner/scannerlexer.l"
-{ return VOID; }
+#line 188 "giscanner/scannerlexer.l"
+{ return SHORT; }
YY_BREAK
case 110:
YY_RULE_SETUP
-#line 187 "giscanner/scannerlexer.l"
-{ return VOLATILE; }
+#line 189 "giscanner/scannerlexer.l"
+{ return SIGNED; }
YY_BREAK
case 111:
YY_RULE_SETUP
-#line 188 "giscanner/scannerlexer.l"
-{ return WHILE; }
+#line 190 "giscanner/scannerlexer.l"
+{ return SIZEOF; }
YY_BREAK
case 112:
YY_RULE_SETUP
-#line 190 "giscanner/scannerlexer.l"
-{ return check_identifier(scanner, yytext); }
+#line 191 "giscanner/scannerlexer.l"
+{ return STATIC; }
YY_BREAK
case 113:
YY_RULE_SETUP
#line 192 "giscanner/scannerlexer.l"
-{ return INTEGER; }
+{ return STRUCT; }
YY_BREAK
case 114:
YY_RULE_SETUP
#line 193 "giscanner/scannerlexer.l"
-{ return INTEGER; }
+{ return SWITCH; }
YY_BREAK
case 115:
YY_RULE_SETUP
#line 194 "giscanner/scannerlexer.l"
-{ return INTEGER; }
+{ return TYPEDEF; }
YY_BREAK
case 116:
YY_RULE_SETUP
-#line 196 "giscanner/scannerlexer.l"
-{ return FLOATING; }
+#line 195 "giscanner/scannerlexer.l"
+{ return UNION; }
YY_BREAK
case 117:
YY_RULE_SETUP
-#line 197 "giscanner/scannerlexer.l"
-{ return FLOATING; }
+#line 196 "giscanner/scannerlexer.l"
+{ return UNSIGNED; }
YY_BREAK
case 118:
-/* rule 118 can match eol */
YY_RULE_SETUP
-#line 199 "giscanner/scannerlexer.l"
-{ return CHARACTER; }
+#line 197 "giscanner/scannerlexer.l"
+{ return VOID; }
YY_BREAK
case 119:
-/* rule 119 can match eol */
YY_RULE_SETUP
-#line 200 "giscanner/scannerlexer.l"
-{ return CHARACTER; }
+#line 198 "giscanner/scannerlexer.l"
+{ return VOLATILE; }
YY_BREAK
case 120:
-/* rule 120 can match eol */
YY_RULE_SETUP
-#line 202 "giscanner/scannerlexer.l"
-{ return STRING; }
+#line 199 "giscanner/scannerlexer.l"
+{ return WHILE; }
YY_BREAK
case 121:
-/* rule 121 can match eol */
YY_RULE_SETUP
-#line 203 "giscanner/scannerlexer.l"
-{ return STRING; }
+#line 201 "giscanner/scannerlexer.l"
+{ return check_identifier(scanner, yytext); }
YY_BREAK
case 122:
YY_RULE_SETUP
-#line 205 "giscanner/scannerlexer.l"
-{ if (yytext[0]) fprintf(stderr, "%s:%d: unexpected character `%c'\n", scanner->current_filename, lineno, yytext[0]); }
+#line 203 "giscanner/scannerlexer.l"
+{ return INTEGER; }
YY_BREAK
case 123:
YY_RULE_SETUP
+#line 204 "giscanner/scannerlexer.l"
+{ return INTEGER; }
+ YY_BREAK
+case 124:
+YY_RULE_SETUP
+#line 205 "giscanner/scannerlexer.l"
+{ return INTEGER; }
+ YY_BREAK
+case 125:
+YY_RULE_SETUP
#line 207 "giscanner/scannerlexer.l"
+{ return FLOATING; }
+ YY_BREAK
+case 126:
+YY_RULE_SETUP
+#line 208 "giscanner/scannerlexer.l"
+{ return FLOATING; }
+ YY_BREAK
+case 127:
+/* rule 127 can match eol */
+YY_RULE_SETUP
+#line 210 "giscanner/scannerlexer.l"
+{ return CHARACTER; }
+ YY_BREAK
+case 128:
+/* rule 128 can match eol */
+YY_RULE_SETUP
+#line 211 "giscanner/scannerlexer.l"
+{ return CHARACTER; }
+ YY_BREAK
+case 129:
+/* rule 129 can match eol */
+YY_RULE_SETUP
+#line 213 "giscanner/scannerlexer.l"
+{ return STRING; }
+ YY_BREAK
+case 130:
+/* rule 130 can match eol */
+YY_RULE_SETUP
+#line 214 "giscanner/scannerlexer.l"
+{ return STRING; }
+ YY_BREAK
+case 131:
+YY_RULE_SETUP
+#line 216 "giscanner/scannerlexer.l"
+{ if (yytext[0]) fprintf(stderr, "%s:%d: unexpected character `%c'\n", scanner->current_filename, lineno, yytext[0]); }
+ YY_BREAK
+case 132:
+YY_RULE_SETUP
+#line 218 "giscanner/scannerlexer.l"
ECHO;
YY_BREAK
-#line 1791 "scannerlexer.c"
+#line 1878 "scannerlexer.c"
case YY_STATE_EOF(INITIAL):
yyterminate();
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 408 )
+ if ( yy_current_state >= 452 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 408 )
+ if ( yy_current_state >= 452 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- yy_is_jam = (yy_current_state == 407);
+ yy_is_jam = (yy_current_state == 451);
if ( ! yy_is_jam )
*(yy_state_ptr)++ = yy_current_state;
#define YYTABLES_NAME "yytables"
-#line 207 "giscanner/scannerlexer.l"
+#line 218 "giscanner/scannerlexer.l"
return 1;
}
-
static void
-parse_comment (GISourceScanner *scanner)
+parse_gtk_doc_comment (GISourceScanner *scanner)
{
GString *string = NULL;
int c1, c2;
(GCompareFunc)g_strcmp0)) {
skip = TRUE;
} else {
- string = g_string_new ("/*");
+ string = g_string_new (yytext);
}
c1 = input();
comment);
}
+static void
+parse_comment (GISourceScanner *scanner)
+{
+ int c1, c2;
+
+ c1 = input();
+ c2 = input();
+
+ while (c2 != EOF && !(c1 == '*' && c2 == '/'))
+ {
+ if (c1 == '\n')
+ lineno++;
+
+ c1 = c2;
+ c2 = input();
+ }
+
+ return;
+}
+
static int
check_identifier (GISourceScanner *scanner,
const char *s)
-/* A Bison parser, made by GNU Bison 2.6.1. */
+/* A Bison parser, made by GNU Bison 2.6.4. */
/* Bison implementation for Yacc-like parsers in C
#define YYBISON 1
/* Bison version. */
-#define YYBISON_VERSION "2.6.1"
+#define YYBISON_VERSION "2.6.4"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
/* Copy the first part of user declarations. */
-/* Line 336 of yacc.c */
+/* Line 358 of yacc.c */
#line 29 "giscanner/scannerparser.y"
#include <stdio.h>
}
-/* Line 336 of yacc.c */
+/* Line 358 of yacc.c */
#line 172 "scannerparser.c"
# ifndef YY_NULL
/* In a future release of Bison, this section will be replaced
by #include "y.tab.h". */
-#ifndef YY_SCANNERPARSER_H
-# define YY_SCANNERPARSER_H
+#ifndef YY_YY_SCANNERPARSER_H_INCLUDED
+# define YY_YY_SCANNERPARSER_H_INCLUDED
/* Enabling traces. */
#ifndef YYDEBUG
# define YYDEBUG 1
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE
{
-/* Line 350 of yacc.c */
+/* Line 374 of yacc.c */
#line 134 "giscanner/scannerparser.y"
char *str;
UnaryOperator unary_operator;
-/* Line 350 of yacc.c */
+/* Line 374 of yacc.c */
#line 367 "scannerparser.c"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
#endif
#endif /* ! YYPARSE_PARAM */
-#endif /* !YY_SCANNERPARSER_H */
+#endif /* !YY_YY_SCANNERPARSER_H_INCLUDED */
/* Copy the second part of user declarations. */
-/* Line 353 of yacc.c */
+/* Line 377 of yacc.c */
#line 395 "scannerparser.c"
#ifdef short
# if defined YYENABLE_NLS && YYENABLE_NLS
# if ENABLE_NLS
# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-# define YY_(msgid) dgettext ("bison-runtime", msgid)
+# define YY_(Msgid) dgettext ("bison-runtime", Msgid)
# endif
# endif
# ifndef YY_
-# define YY_(msgid) msgid
+# define YY_(Msgid) Msgid
# endif
#endif
/* Suppress unused-variable warnings by "using" E. */
#if ! defined lint || defined __GNUC__
-# define YYUSE(e) ((void) (e))
+# define YYUSE(E) ((void) (E))
#else
-# define YYUSE(e) /* empty */
+# define YYUSE(E) /* empty */
#endif
/* Identity function, used to suppress warnings about constant conditions. */
#ifndef lint
-# define YYID(n) (n)
+# define YYID(N) (N)
#else
#if (defined __STDC__ || defined __C99__FUNC__ \
|| defined __cplusplus || defined _MSC_VER)
20, 0, 0, 22, 23, 24, 25
};
-#define yypact_value_is_default(yystate) \
- ((yystate) == (-228))
+#define yypact_value_is_default(Yystate) \
+ (!!((Yystate) == (-228)))
-#define yytable_value_is_error(yytable_value) \
+#define yytable_value_is_error(Yytable_value) \
YYID (0)
static const yytype_int16 yycheck[] =
/* The lookahead symbol. */
int yychar;
+
+#ifndef YYLVAL_INITIALIZE
+# define YYLVAL_INITIALIZE()
+#endif
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#endif
+
/* The semantic value of the lookahead symbol. */
YYSTYPE yylval;
int yyn;
int yyresult;
/* Lookahead token as an internal (translated) token number. */
- int yytoken;
+ int yytoken = 0;
/* The variables used to return semantic value and location from the
action routines. */
YYSTYPE yyval;
Keep to zero when no symbol should be popped. */
int yylen = 0;
- yytoken = 0;
yyss = yyssa;
yyvs = yyvsa;
yystacksize = YYINITDEPTH;
The wasted elements are never initialized. */
yyssp = yyss;
yyvsp = yyvs;
+
+ YYLVAL_INITIALIZE ();
goto yysetstate;
/*------------------------------------------------------------.
yychar = YYEMPTY;
yystate = yyn;
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
*++yyvsp = yylval;
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
goto yynewstate;
switch (yyn)
{
case 2:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 225 "giscanner/scannerparser.y"
{
(yyval.symbol) = g_hash_table_lookup (const_table, (yyvsp[(1) - (1)].str));
break;
case 3:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 234 "giscanner/scannerparser.y"
{
char *rest;
break;
case 4:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 250 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_CONST, scanner->current_filename, lineno);
break;
case 5:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 256 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_CONST, scanner->current_filename, lineno);
break;
case 7:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 264 "giscanner/scannerparser.y"
{
(yyval.symbol) = (yyvsp[(2) - (3)].symbol);
break;
case 8:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 268 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, scanner->current_filename, lineno);
break;
case 9:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 276 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_CONST, scanner->current_filename, lineno);
break;
case 10:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 291 "giscanner/scannerparser.y"
{
char *strings, *string2;
break;
case 11:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 305 "giscanner/scannerparser.y"
{
(yyval.str) = g_strdup (yytext);
break;
case 15:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 318 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, scanner->current_filename, lineno);
break;
case 16:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 322 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, scanner->current_filename, lineno);
break;
case 17:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 326 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, scanner->current_filename, lineno);
break;
case 18:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 330 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, scanner->current_filename, lineno);
break;
case 19:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 334 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, scanner->current_filename, lineno);
break;
case 20:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 338 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, scanner->current_filename, lineno);
break;
case 21:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 342 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, scanner->current_filename, lineno);
break;
case 25:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 355 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, scanner->current_filename, lineno);
break;
case 26:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 359 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, scanner->current_filename, lineno);
break;
case 27:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 363 "giscanner/scannerparser.y"
{
switch ((yyvsp[(1) - (2)].unary_operator)) {
break;
case 28:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 386 "giscanner/scannerparser.y"
{
(yyval.symbol) = (yyvsp[(3) - (4)].symbol);
break;
case 29:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 393 "giscanner/scannerparser.y"
{
(yyval.symbol) = (yyvsp[(3) - (4)].symbol);
break;
case 30:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 400 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, scanner->current_filename, lineno);
break;
case 31:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 404 "giscanner/scannerparser.y"
{
ctype_free ((yyvsp[(3) - (4)].ctype));
break;
case 32:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 412 "giscanner/scannerparser.y"
{
(yyval.unary_operator) = UNARY_ADDRESS_OF;
break;
case 33:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 416 "giscanner/scannerparser.y"
{
(yyval.unary_operator) = UNARY_POINTER_INDIRECTION;
break;
case 34:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 420 "giscanner/scannerparser.y"
{
(yyval.unary_operator) = UNARY_PLUS;
break;
case 35:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 424 "giscanner/scannerparser.y"
{
(yyval.unary_operator) = UNARY_MINUS;
break;
case 36:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 428 "giscanner/scannerparser.y"
{
(yyval.unary_operator) = UNARY_BITWISE_COMPLEMENT;
break;
case 37:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 432 "giscanner/scannerparser.y"
{
(yyval.unary_operator) = UNARY_LOGICAL_NEGATION;
break;
case 39:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 440 "giscanner/scannerparser.y"
{
(yyval.symbol) = (yyvsp[(4) - (4)].symbol);
break;
case 41:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 453 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_CONST, scanner->current_filename, lineno);
break;
case 42:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 459 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_CONST, scanner->current_filename, lineno);
break;
case 43:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 467 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_CONST, scanner->current_filename, lineno);
break;
case 45:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 479 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_CONST, scanner->current_filename, lineno);
break;
case 46:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 485 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_CONST, scanner->current_filename, lineno);
break;
case 48:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 495 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_CONST, scanner->current_filename, lineno);
break;
case 49:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 507 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_CONST, scanner->current_filename, lineno);
break;
case 51:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 517 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_CONST, scanner->current_filename, lineno);
break;
case 52:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 523 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_CONST, scanner->current_filename, lineno);
break;
case 53:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 529 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_CONST, scanner->current_filename, lineno);
break;
case 54:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 535 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_CONST, scanner->current_filename, lineno);
break;
case 56:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 545 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_CONST, scanner->current_filename, lineno);
break;
case 57:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 551 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_CONST, scanner->current_filename, lineno);
break;
case 59:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 561 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_CONST, scanner->current_filename, lineno);
break;
case 61:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 571 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_CONST, scanner->current_filename, lineno);
break;
case 63:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 581 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_CONST, scanner->current_filename, lineno);
break;
case 65:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 591 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_CONST, scanner->current_filename, lineno);
break;
case 67:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 603 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_CONST, scanner->current_filename, lineno);
break;
case 69:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 615 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_get_const_boolean ((yyvsp[(1) - (5)].symbol)) ? (yyvsp[(3) - (5)].symbol) : (yyvsp[(5) - (5)].symbol);
break;
case 71:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 623 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, scanner->current_filename, lineno);
break;
case 85:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 646 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, scanner->current_filename, lineno);
break;
case 87:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 659 "giscanner/scannerparser.y"
{
GList *l;
break;
case 88:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 677 "giscanner/scannerparser.y"
{
ctype_free ((yyvsp[(1) - (2)].ctype));
break;
case 89:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 684 "giscanner/scannerparser.y"
{
(yyval.ctype) = (yyvsp[(2) - (2)].ctype);
break;
case 90:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 689 "giscanner/scannerparser.y"
{
(yyval.ctype) = gi_source_type_new (CTYPE_INVALID);
break;
case 91:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 694 "giscanner/scannerparser.y"
{
(yyval.ctype) = (yyvsp[(1) - (2)].ctype);
break;
case 93:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 708 "giscanner/scannerparser.y"
{
(yyval.ctype) = (yyvsp[(2) - (2)].ctype);
break;
case 94:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 713 "giscanner/scannerparser.y"
{
(yyval.ctype) = gi_source_type_new (CTYPE_INVALID);
break;
case 95:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 718 "giscanner/scannerparser.y"
{
(yyval.ctype) = (yyvsp[(2) - (2)].ctype);
break;
case 96:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 723 "giscanner/scannerparser.y"
{
(yyval.ctype) = gi_source_type_new (CTYPE_INVALID);
break;
case 97:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 731 "giscanner/scannerparser.y"
{
(yyval.list) = g_list_append (NULL, (yyvsp[(1) - (1)].symbol));
break;
case 98:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 735 "giscanner/scannerparser.y"
{
(yyval.list) = g_list_append ((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].symbol));
break;
case 101:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 747 "giscanner/scannerparser.y"
{
(yyval.storage_class_specifier) = STORAGE_CLASS_TYPEDEF;
break;
case 102:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 751 "giscanner/scannerparser.y"
{
(yyval.storage_class_specifier) = STORAGE_CLASS_EXTERN;
break;
case 103:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 755 "giscanner/scannerparser.y"
{
(yyval.storage_class_specifier) = STORAGE_CLASS_STATIC;
break;
case 104:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 759 "giscanner/scannerparser.y"
{
(yyval.storage_class_specifier) = STORAGE_CLASS_AUTO;
break;
case 105:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 763 "giscanner/scannerparser.y"
{
(yyval.storage_class_specifier) = STORAGE_CLASS_REGISTER;
break;
case 106:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 770 "giscanner/scannerparser.y"
{
(yyval.ctype) = gi_source_type_new (CTYPE_VOID);
break;
case 107:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 774 "giscanner/scannerparser.y"
{
(yyval.ctype) = gi_source_basic_type_new ("char");
break;
case 108:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 778 "giscanner/scannerparser.y"
{
(yyval.ctype) = gi_source_basic_type_new ("short");
break;
case 109:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 782 "giscanner/scannerparser.y"
{
(yyval.ctype) = gi_source_basic_type_new ("int");
break;
case 110:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 786 "giscanner/scannerparser.y"
{
(yyval.ctype) = gi_source_basic_type_new ("long");
break;
case 111:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 790 "giscanner/scannerparser.y"
{
(yyval.ctype) = gi_source_basic_type_new ("float");
break;
case 112:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 794 "giscanner/scannerparser.y"
{
(yyval.ctype) = gi_source_basic_type_new ("double");
break;
case 113:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 798 "giscanner/scannerparser.y"
{
(yyval.ctype) = gi_source_basic_type_new ("signed");
break;
case 114:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 802 "giscanner/scannerparser.y"
{
(yyval.ctype) = gi_source_basic_type_new ("unsigned");
break;
case 115:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 806 "giscanner/scannerparser.y"
{
(yyval.ctype) = gi_source_basic_type_new ("bool");
break;
case 118:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 812 "giscanner/scannerparser.y"
{
(yyval.ctype) = gi_source_typedef_new ((yyvsp[(1) - (1)].str));
break;
case 119:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 820 "giscanner/scannerparser.y"
{
GISourceSymbol *sym;
break;
case 120:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 840 "giscanner/scannerparser.y"
{
(yyval.ctype) = (yyvsp[(1) - (4)].ctype);
break;
case 121:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 845 "giscanner/scannerparser.y"
{
(yyval.ctype) = (yyvsp[(1) - (2)].ctype);
break;
case 122:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 853 "giscanner/scannerparser.y"
{
scanner->private = FALSE;
break;
case 123:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 858 "giscanner/scannerparser.y"
{
scanner->private = FALSE;
break;
case 125:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 867 "giscanner/scannerparser.y"
{
(yyval.list) = g_list_concat ((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].list));
break;
case 126:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 874 "giscanner/scannerparser.y"
{
GList *l;
break;
case 127:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 894 "giscanner/scannerparser.y"
{
(yyval.ctype) = (yyvsp[(1) - (2)].ctype);
break;
case 129:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 900 "giscanner/scannerparser.y"
{
(yyval.ctype) = (yyvsp[(2) - (2)].ctype);
break;
case 130:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 905 "giscanner/scannerparser.y"
{
(yyval.ctype) = gi_source_type_new (CTYPE_INVALID);
break;
case 131:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 913 "giscanner/scannerparser.y"
{
(yyval.list) = g_list_append (NULL, (yyvsp[(1) - (1)].symbol));
break;
case 132:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 917 "giscanner/scannerparser.y"
{
(yyval.list) = g_list_append ((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].symbol));
break;
case 133:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 924 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, scanner->current_filename, lineno);
break;
case 135:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 929 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, scanner->current_filename, lineno);
break;
case 136:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 933 "giscanner/scannerparser.y"
{
(yyval.symbol) = (yyvsp[(1) - (3)].symbol);
break;
case 137:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 944 "giscanner/scannerparser.y"
{
(yyval.ctype) = gi_source_enum_new ((yyvsp[(2) - (5)].str));
break;
case 138:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 951 "giscanner/scannerparser.y"
{
(yyval.ctype) = gi_source_enum_new (NULL);
break;
case 139:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 958 "giscanner/scannerparser.y"
{
(yyval.ctype) = gi_source_enum_new ((yyvsp[(2) - (6)].str));
break;
case 140:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 965 "giscanner/scannerparser.y"
{
(yyval.ctype) = gi_source_enum_new (NULL);
break;
case 141:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 972 "giscanner/scannerparser.y"
{
(yyval.ctype) = gi_source_enum_new ((yyvsp[(2) - (2)].str));
break;
case 142:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 979 "giscanner/scannerparser.y"
{
scanner->flags = FALSE;
break;
case 143:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 987 "giscanner/scannerparser.y"
{
/* reset flag before the first enum value */
break;
case 144:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 992 "giscanner/scannerparser.y"
{
(yyvsp[(2) - (2)].symbol)->private = scanner->private;
break;
case 145:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 997 "giscanner/scannerparser.y"
{
(yyvsp[(3) - (3)].symbol)->private = scanner->private;
break;
case 146:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1005 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_OBJECT, scanner->current_filename, lineno);
break;
case 147:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1013 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_OBJECT, scanner->current_filename, lineno);
break;
case 148:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1025 "giscanner/scannerparser.y"
{
(yyval.type_qualifier) = TYPE_QUALIFIER_CONST;
break;
case 149:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1029 "giscanner/scannerparser.y"
{
(yyval.type_qualifier) = TYPE_QUALIFIER_RESTRICT;
break;
case 150:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1033 "giscanner/scannerparser.y"
{
(yyval.type_qualifier) = TYPE_QUALIFIER_EXTENSION;
break;
case 151:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1037 "giscanner/scannerparser.y"
{
(yyval.type_qualifier) = TYPE_QUALIFIER_VOLATILE;
break;
case 152:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1044 "giscanner/scannerparser.y"
{
(yyval.function_specifier) = FUNCTION_INLINE;
break;
case 153:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1051 "giscanner/scannerparser.y"
{
(yyval.symbol) = (yyvsp[(2) - (2)].symbol);
break;
case 155:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1060 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, scanner->current_filename, lineno);
break;
case 156:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1065 "giscanner/scannerparser.y"
{
(yyval.symbol) = (yyvsp[(2) - (3)].symbol);
break;
case 157:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1069 "giscanner/scannerparser.y"
{
(yyval.symbol) = (yyvsp[(1) - (4)].symbol);
break;
case 158:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1074 "giscanner/scannerparser.y"
{
(yyval.symbol) = (yyvsp[(1) - (3)].symbol);
break;
case 159:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1079 "giscanner/scannerparser.y"
{
GISourceType *func = gi_source_function_new ();
break;
case 160:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1089 "giscanner/scannerparser.y"
{
GISourceType *func = gi_source_function_new ();
break;
case 161:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1096 "giscanner/scannerparser.y"
{
GISourceType *func = gi_source_function_new ();
break;
case 162:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1105 "giscanner/scannerparser.y"
{
(yyval.ctype) = gi_source_pointer_new (NULL);
break;
case 163:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1110 "giscanner/scannerparser.y"
{
(yyval.ctype) = gi_source_pointer_new (NULL);
break;
case 164:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1114 "giscanner/scannerparser.y"
{
GISourceType **base = &((yyvsp[(3) - (3)].ctype)->base_type);
break;
case 165:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1125 "giscanner/scannerparser.y"
{
GISourceType **base = &((yyvsp[(2) - (2)].ctype)->base_type);
break;
case 167:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1139 "giscanner/scannerparser.y"
{
(yyval.type_qualifier) = (yyvsp[(1) - (2)].type_qualifier) | (yyvsp[(2) - (2)].type_qualifier);
break;
case 168:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1146 "giscanner/scannerparser.y"
{
(yyval.list) = g_list_append (NULL, (yyvsp[(1) - (1)].symbol));
break;
case 169:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1150 "giscanner/scannerparser.y"
{
(yyval.list) = g_list_append ((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].symbol));
break;
case 170:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1157 "giscanner/scannerparser.y"
{
(yyval.symbol) = (yyvsp[(2) - (2)].symbol);
break;
case 171:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1162 "giscanner/scannerparser.y"
{
(yyval.symbol) = (yyvsp[(2) - (2)].symbol);
break;
case 172:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1167 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, scanner->current_filename, lineno);
break;
case 173:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1172 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_ELLIPSIS, scanner->current_filename, lineno);
break;
case 174:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1179 "giscanner/scannerparser.y"
{
GISourceSymbol *sym = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, scanner->current_filename, lineno);
break;
case 175:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1185 "giscanner/scannerparser.y"
{
GISourceSymbol *sym = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, scanner->current_filename, lineno);
break;
case 178:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1199 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, scanner->current_filename, lineno);
break;
case 180:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1205 "giscanner/scannerparser.y"
{
(yyval.symbol) = (yyvsp[(2) - (2)].symbol);
break;
case 181:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1213 "giscanner/scannerparser.y"
{
(yyval.symbol) = (yyvsp[(2) - (3)].symbol);
break;
case 182:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1217 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, scanner->current_filename, lineno);
break;
case 183:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1222 "giscanner/scannerparser.y"
{
(yyval.symbol) = gi_source_symbol_new (CSYMBOL_TYPE_INVALID, scanner->current_filename, lineno);
break;
case 184:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1227 "giscanner/scannerparser.y"
{
(yyval.symbol) = (yyvsp[(1) - (3)].symbol);
break;
case 185:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1232 "giscanner/scannerparser.y"
{
(yyval.symbol) = (yyvsp[(1) - (4)].symbol);
break;
case 186:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1237 "giscanner/scannerparser.y"
{
GISourceType *func = gi_source_function_new ();
break;
case 187:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1243 "giscanner/scannerparser.y"
{
GISourceType *func = gi_source_function_new ();
break;
case 188:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1253 "giscanner/scannerparser.y"
{
GISourceType *func = gi_source_function_new ();
break;
case 189:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1259 "giscanner/scannerparser.y"
{
GISourceType *func = gi_source_function_new ();
break;
case 190:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1272 "giscanner/scannerparser.y"
{
(yyval.str) = g_strdup (yytext);
break;
case 240:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1379 "giscanner/scannerparser.y"
{
(yyval.str) = g_strdup (yytext + strlen ("#define "));
break;
case 241:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1386 "giscanner/scannerparser.y"
{
(yyval.str) = g_strdup (yytext + strlen ("#define "));
break;
case 243:
-/* Line 1787 of yacc.c */
+/* Line 1813 of yacc.c */
#line 1397 "giscanner/scannerparser.y"
{
if ((yyvsp[(2) - (2)].symbol)->const_int_set || (yyvsp[(2) - (2)].symbol)->const_double_set || (yyvsp[(2) - (2)].symbol)->const_string != NULL) {
break;
-/* Line 1787 of yacc.c */
-#line 3858 "scannerparser.c"
+/* Line 1813 of yacc.c */
+#line 3870 "scannerparser.c"
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
YY_STACK_PRINT (yyss, yyssp);
}
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
*++yyvsp = yylval;
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
/* Shift the error token. */
}
-/* Line 2048 of yacc.c */
+/* Line 2076 of yacc.c */
#line 1412 "giscanner/scannerparser.y"
static void
return TRUE;
}
-
-/* A Bison parser, made by GNU Bison 2.6.1. */
+/* A Bison parser, made by GNU Bison 2.6.4. */
/* Bison interface for Yacc-like parsers in C
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */
-#ifndef YY_SCANNERPARSER_H
-# define YY_SCANNERPARSER_H
+#ifndef YY_YY_SCANNERPARSER_H_INCLUDED
+# define YY_YY_SCANNERPARSER_H_INCLUDED
/* Enabling traces. */
#ifndef YYDEBUG
# define YYDEBUG 1
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE
{
-/* Line 2049 of yacc.c */
+/* Line 2077 of yacc.c */
#line 134 "giscanner/scannerparser.y"
char *str;
UnaryOperator unary_operator;
-/* Line 2049 of yacc.c */
+/* Line 2077 of yacc.c */
#line 209 "scannerparser.h"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
#endif
#endif /* ! YYPARSE_PARAM */
-#endif /* !YY_SCANNERPARSER_H */
+#endif /* !YY_YY_SCANNERPARSER_H_INCLUDED */
CLEANFILES += \
$(BUILT_SOURCES) \
everything-stamp.h \
+ Everything-1.0.gir \
Everything-1.0.typelib \
+ GIMarshallingTests-1.0.gir \
GIMarshallingTests-1.0.typelib
everything-stamp.h: Makefile
SUBDIRS = . scanner repository offsets warn
EXTRA_DIST = gimarshallingtests.h
BUILT_SOURCES = everything.c everything.h
-CLEANFILES = $(BUILT_SOURCES) everything-stamp.h \
- Everything-1.0.typelib GIMarshallingTests-1.0.typelib
+CLEANFILES = $(BUILT_SOURCES) everything-stamp.h Everything-1.0.gir \
+ Everything-1.0.typelib GIMarshallingTests-1.0.gir \
+ GIMarshallingTests-1.0.typelib
AM_CFLAGS = $(GOBJECT_CFLAGS)
LIBADD = $(GOBJECT_LIBS)
testsdir = $(datadir)/gobject-introspection-1.0/tests
/**
* GIMarshallingTestsObjectClass::vfunc_return_enum:
*/
- GIMarshallingTestsFlags (* vfunc_return_enum) (GIMarshallingTestsObject *self);
+ GIMarshallingTestsEnum (* vfunc_return_enum) (GIMarshallingTestsObject *self);
/**
* GIMarshallingTestsObjectClass::vfunc_out_enum:
void gi_marshalling_tests_object_none_inout (GIMarshallingTestsObject **object);
void gi_marshalling_tests_object_full_inout (GIMarshallingTestsObject **object);
-void gi_marshalling_tests_object_inout_same (GIMarshallingTestsObject **object);
void gi_marshalling_tests_object_int8_in (GIMarshallingTestsObject *object, gint8 in);
void gi_marshalling_tests_object_int8_out (GIMarshallingTestsObject *object, gint8 *out);
</constructor>
<function name="nonmeta2_get_type"
c:identifier="gettype_object_nonmeta2_get_type">
- <doc xml:whitespace="preserve">This shouldn't be scanned as a *_get_type function because it doesn't return
+ <doc xml:space="preserve">This shouldn't be scanned as a *_get_type function because it doesn't return
a GType. It will generate a warning.</doc>
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">true</doc>
+ <doc xml:space="preserve">true</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
</function>
<function name="nonmeta_get_gtype"
c:identifier="gettype_object_nonmeta_get_gtype">
- <doc xml:whitespace="preserve">This shouldn't be scanned as a *_get_type function because it doesn't return
+ <doc xml:space="preserve">This shouldn't be scanned as a *_get_type function because it doesn't return
a GType. It will generate a warning.</doc>
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">true</doc>
+ <doc xml:space="preserve">true</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
</function>
<method name="nonmeta1_get_type"
c:identifier="gettype_object_nonmeta1_get_type">
- <doc xml:whitespace="preserve">This shouldn't be scanned as a *_get_type function because it takes
+ <doc xml:space="preserve">This shouldn't be scanned as a *_get_type function because it takes
arguments.</doc>
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">0</doc>
+ <doc xml:space="preserve">0</doc>
<type name="GType" c:type="GType"/>
</return-value>
<parameters>
<instance-parameter name="obj" transfer-ownership="none">
- <doc xml:whitespace="preserve">self</doc>
+ <doc xml:space="preserve">self</doc>
<type name="Object" c:type="GetTypeObject*"/>
</instance-parameter>
</parameters>
endif
EXTRA_DIST += headeronly.h
+CLEANFILES += Headeronly-1.0.gir
Headeronly-1.0.gir: headeronly.h
$(AM_V_GEN) $(INTROSPECTION_SCANNER) $(INTROSPECTION_SCANNER_ARGS) --warn-all --warn-error --reparse-validate --namespace=Headeronly --nsversion=1.0 --header-only --output=$@ $<
DOCGIRS = Regress-1.0.gir
CHECKDOCS = $(DOCGIRS:.gir=-C.page.check) $(DOCGIRS:.gir=-Python.page.check) $(DOCGIRS:.gir=-Gjs.page.check)
MALLARD_DIRS = $(DOCGIRS:.gir=-C) $(DOCGIRS:.gir=-Python) $(DOCGIRS:.gir=-Gjs)
+MALLARD_CLEAN = $(DOCGIRS:.gir=-C)/* $(DOCGIRS:.gir=-Python)/* $(DOCGIRS:.gir=-Gjs)/*
EXPECTED_MALLARD_DIRS = $(MALLARD_DIRS:=-expected)
+CLEANFILES += $(MALLARD_CLEAN)
%-C: %.gir
$(AM_V_GEN)
- $(AM_V_at)rm -f $*-C/*.page
- $(AM_V_at)$(INTROSPECTION_DOCTOOL) $(INTROSPECTION_DOCTOOL_ARGS) --language C $*.gir -o $*-C/
+ $(AM_V_at)-rm -rf $(builddir)/$*-C
+ $(AM_V_at)$(INTROSPECTION_DOCTOOL) $(INTROSPECTION_DOCTOOL_ARGS) --language C $*.gir -o $(builddir)/$*-C/
%-Python: %.gir
$(AM_V_GEN)
- $(AM_V_at)rm -f $*-Python/*.page
- $(AM_V_at)$(INTROSPECTION_DOCTOOL) $(INTROSPECTION_DOCTOOL_ARGS) --language Python $*.gir -o $*-Python/
+ $(AM_V_at)-rm -rf $(builddir)/$*-Python
+ $(AM_V_at)$(INTROSPECTION_DOCTOOL) $(INTROSPECTION_DOCTOOL_ARGS) --language Python $*.gir -o $(builddir)/$*-Python/
%-Gjs: %.gir
$(AM_V_GEN)
- $(AM_V_at)rm -f $*-Gjs/*.page
- $(AM_V_at)$(INTROSPECTION_DOCTOOL) $(INTROSPECTION_DOCTOOL_ARGS) --language Gjs $*.gir -o $*-Gjs/
+ $(AM_V_at)-rm -rf $(builddir)/$*-Gjs
+ $(AM_V_at)$(INTROSPECTION_DOCTOOL) $(INTROSPECTION_DOCTOOL_ARGS) --language Gjs $*.gir -o $(builddir)/$*-Gjs/
%-C.page.check: %-C
- @diff -u -w -B -U 10 $(srcdir)/$*-C-expected $*-C && echo " TEST $*-C"
+ @diff -r -u -w -B -U 10 $(srcdir)/$*-C-expected $(builddir)/$*-C && echo " TEST $*-C"
%-Python.page.check: %-Python
- @diff -u -w -B -U 10 $(srcdir)/$*-Python-expected $*-Python && echo " TEST $*-Python"
+ @diff -r -u -w -B -U 10 $(srcdir)/$*-Python-expected $(builddir)/$*-Python && echo " TEST $*-Python"
%-Gjs.page.check: %-Gjs
- @diff -u -w -B -U 10 $(srcdir)/$*-Gjs-expected $*-Gjs && echo " TEST $*-Gjs"
+ @diff -r -u -w -B -U 10 $(srcdir)/$*-Gjs-expected $(builddir)/$*-Gjs && echo " TEST $*-Gjs"
else
CHECKDOCS =
endif
@HAVE_CAIRO_TRUE@am__append_5 = cairo-1.0
@OS_WIN32_FALSE@check_PROGRAMS = barapp$(EXEEXT)
@OS_WIN32_FALSE@am__append_6 = Bar-1.0.gir
+@BUILD_DOCTOOL_TRUE@am__append_7 = $(MALLARD_CLEAN)
subdir = tests/scanner
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \
CHECKGIRS = $(GIRS:.gir=.gir.check)
EXPECTEDGIRS = $(GIRS:.gir=-expected.gir)
INTROSPECTION_GIRS = $(GIRS)
-CLEANFILES = $(TYPELIBS) $(GIRS)
+CLEANFILES = $(TYPELIBS) $(GIRS) Headeronly-1.0.gir $(am__append_7)
EXTRA_DIST = $(EXPECTEDGIRS) headeronly.h annotationparser/README \
annotationparser/test_parser.py \
annotationparser/test_patterns.py \
@BUILD_DOCTOOL_FALSE@CHECKDOCS =
@BUILD_DOCTOOL_TRUE@CHECKDOCS = $(DOCGIRS:.gir=-C.page.check) $(DOCGIRS:.gir=-Python.page.check) $(DOCGIRS:.gir=-Gjs.page.check)
@BUILD_DOCTOOL_TRUE@MALLARD_DIRS = $(DOCGIRS:.gir=-C) $(DOCGIRS:.gir=-Python) $(DOCGIRS:.gir=-Gjs)
+@BUILD_DOCTOOL_TRUE@MALLARD_CLEAN = $(DOCGIRS:.gir=-C)/* $(DOCGIRS:.gir=-Python)/* $(DOCGIRS:.gir=-Gjs)/*
@BUILD_DOCTOOL_TRUE@EXPECTED_MALLARD_DIRS = $(MALLARD_DIRS:=-expected)
all: all-am
@BUILD_DOCTOOL_TRUE@%-C: %.gir
@BUILD_DOCTOOL_TRUE@ $(AM_V_GEN)
-@BUILD_DOCTOOL_TRUE@ $(AM_V_at)rm -f $*-C/*.page
-@BUILD_DOCTOOL_TRUE@ $(AM_V_at)$(INTROSPECTION_DOCTOOL) $(INTROSPECTION_DOCTOOL_ARGS) --language C $*.gir -o $*-C/
+@BUILD_DOCTOOL_TRUE@ $(AM_V_at)-rm -rf $(builddir)/$*-C
+@BUILD_DOCTOOL_TRUE@ $(AM_V_at)$(INTROSPECTION_DOCTOOL) $(INTROSPECTION_DOCTOOL_ARGS) --language C $*.gir -o $(builddir)/$*-C/
@BUILD_DOCTOOL_TRUE@%-Python: %.gir
@BUILD_DOCTOOL_TRUE@ $(AM_V_GEN)
-@BUILD_DOCTOOL_TRUE@ $(AM_V_at)rm -f $*-Python/*.page
-@BUILD_DOCTOOL_TRUE@ $(AM_V_at)$(INTROSPECTION_DOCTOOL) $(INTROSPECTION_DOCTOOL_ARGS) --language Python $*.gir -o $*-Python/
+@BUILD_DOCTOOL_TRUE@ $(AM_V_at)-rm -rf $(builddir)/$*-Python
+@BUILD_DOCTOOL_TRUE@ $(AM_V_at)$(INTROSPECTION_DOCTOOL) $(INTROSPECTION_DOCTOOL_ARGS) --language Python $*.gir -o $(builddir)/$*-Python/
@BUILD_DOCTOOL_TRUE@%-Gjs: %.gir
@BUILD_DOCTOOL_TRUE@ $(AM_V_GEN)
-@BUILD_DOCTOOL_TRUE@ $(AM_V_at)rm -f $*-Gjs/*.page
-@BUILD_DOCTOOL_TRUE@ $(AM_V_at)$(INTROSPECTION_DOCTOOL) $(INTROSPECTION_DOCTOOL_ARGS) --language Gjs $*.gir -o $*-Gjs/
+@BUILD_DOCTOOL_TRUE@ $(AM_V_at)-rm -rf $(builddir)/$*-Gjs
+@BUILD_DOCTOOL_TRUE@ $(AM_V_at)$(INTROSPECTION_DOCTOOL) $(INTROSPECTION_DOCTOOL_ARGS) --language Gjs $*.gir -o $(builddir)/$*-Gjs/
@BUILD_DOCTOOL_TRUE@%-C.page.check: %-C
-@BUILD_DOCTOOL_TRUE@ @diff -u -w -B -U 10 $(srcdir)/$*-C-expected $*-C && echo " TEST $*-C"
+@BUILD_DOCTOOL_TRUE@ @diff -r -u -w -B -U 10 $(srcdir)/$*-C-expected $(builddir)/$*-C && echo " TEST $*-C"
@BUILD_DOCTOOL_TRUE@%-Python.page.check: %-Python
-@BUILD_DOCTOOL_TRUE@ @diff -u -w -B -U 10 $(srcdir)/$*-Python-expected $*-Python && echo " TEST $*-Python"
+@BUILD_DOCTOOL_TRUE@ @diff -r -u -w -B -U 10 $(srcdir)/$*-Python-expected $(builddir)/$*-Python && echo " TEST $*-Python"
@BUILD_DOCTOOL_TRUE@%-Gjs.page.check: %-Gjs
-@BUILD_DOCTOOL_TRUE@ @diff -u -w -B -U 10 $(srcdir)/$*-Gjs-expected $*-Gjs && echo " TEST $*-Gjs"
+@BUILD_DOCTOOL_TRUE@ @diff -r -u -w -B -U 10 $(srcdir)/$*-Gjs-expected $(builddir)/$*-Gjs && echo " TEST $*-Gjs"
check-local: Headeronly-1.0.gir $(CHECKGIRS) $(CHECKDOCS) $(TYPELIBS)
- <p>This is a property regress_annotation intentionally indented with a mix
+ <p>This is a property annotation intentionally indented with a mix
of tabs and strings to test the tab handling capabilities of the scanner.</p>
- <p>This is an object used to test regress_annotations.</p>
+ <p>This is an object used to test annotations.</p>
</code></synopsis>
- <p>Test overriding via the "Rename To" regress_annotation.</p>
+ <p>Test overriding via the "Rename To" annotation.</p>
--- /dev/null
+<?xml version="1.0"?>
+<page id="Regress.LikeXklConfigItem"
+ type="topic"
+ style="record"
+ xmlns="http://projectmallard.org/1.0/"
+ xmlns:api="http://projectmallard.org/experimental/api/"
+ xmlns:ui="http://projectmallard.org/1.0/ui/">
+ <info>
+
+ <link xref="index" group="record" type="guide"/>
+
+ </info>
+ <title>Regress.LikeXklConfigItem</title>
+
+
+
+
+
+
+
+
+
+
+
+</page>
--- /dev/null
+<?xml version="1.0"?>
+<page id="Regress.LikeXklConfigItem.set_name"
+ type="topic"
+ style="method"
+ xmlns="http://projectmallard.org/1.0/"
+ xmlns:api="http://projectmallard.org/experimental/api/"
+ xmlns:ui="http://projectmallard.org/1.0/ui/">
+ <info>
+
+ <link xref="Regress.LikeXklConfigItem" group="method" type="guide"/>
+ <api:function>
+ <api:returns>
+ <api:type>void</api:type>
+ </api:returns>
+ <api:name>regress_like_xkl_config_item_set_name</api:name>
+ <api:arg>
+ <api:type>RegressLikeXklConfigItem*</api:type>
+ <api:name>self</api:name>
+ </api:arg>
+ <api:arg>
+ <api:type>const char*</api:type>
+ <api:name>name</api:name>
+ </api:arg>
+ </api:function>
+
+ </info>
+ <title>regress_like_xkl_config_item_set_name</title>
+
+<synopsis><code mime="text/x-csrc">
+void regress_like_xkl_config_item_set_name (RegressLikeXklConfigItem* self,
+ const char* name);
+</code></synopsis>
+
+
+
+
+
+
+
+<terms>
+<item>
+<title><code>self</code></title>
+
+</item>
+<item>
+<title><code>name</code></title>
+
+</item>
+<item>
+<title><code>Returns</code></title>
+
+</item>
+</terms>
+
+
+
+</page>
<p>Test messing up the heuristic of closure/destroy-notification
-detection, and fixing it via regress_annotations.</p>
+detection, and fixing it via annotations.</p>
</code></synopsis>
- <p>This is a property regress_annotation intentionally indented with a mix
+ <p>This is a property annotation intentionally indented with a mix
of tabs and strings to test the tab handling capabilities of the scanner.</p>
</code></synopsis>
- <p>This is an object used to test regress_annotations.</p>
+ <p>This is an object used to test annotations.</p>
</code></synopsis>
- <p>Test overriding via the "Rename To" regress_annotation.</p>
+ <p>Test overriding via the "Rename To" annotation.</p>
--- /dev/null
+<?xml version="1.0"?>
+<page id="Regress.LikeXklConfigItem"
+ type="guide"
+ style="record"
+ xmlns="http://projectmallard.org/1.0/"
+ xmlns:api="http://projectmallard.org/experimental/api/"
+ xmlns:ui="http://projectmallard.org/1.0/ui/">
+ <info>
+
+ <link xref="index" group="record" type="guide"/>
+
+ </info>
+ <title>Regress.LikeXklConfigItem</title>
+
+
+
+
+
+
+
+
+
+
+
+</page>
--- /dev/null
+<?xml version="1.0"?>
+<page id="Regress.LikeXklConfigItem.set_name"
+ type="topic"
+ style="method"
+ xmlns="http://projectmallard.org/1.0/"
+ xmlns:api="http://projectmallard.org/experimental/api/"
+ xmlns:ui="http://projectmallard.org/1.0/ui/">
+ <info>
+
+ <link xref="Regress.LikeXklConfigItem" group="method" type="guide"/>
+ <api:function>
+ <api:returns>
+ <api:type>void</api:type>
+ </api:returns>
+ <api:name>regress_like_xkl_config_item_set_name</api:name>
+ <api:arg>
+ <api:type>String</api:type>
+ <api:name>name</api:name>
+ </api:arg>
+ </api:function>
+
+ </info>
+ <title>Regress.LikeXklConfigItem.prototype.set_name</title>
+
+<synopsis><code mime="text/x-gjs">
+function set_name(name:String):void {
+ // Gjs wrapper for regress_like_xkl_config_item_set_name()
+}
+</code></synopsis>
+
+
+
+
+
+
+
+<terms>
+<item>
+<title><code>name</code></title>
+
+</item>
+</terms>
+
+
+
+</page>
<p>Test messing up the heuristic of closure/destroy-notification
-detection, and fixing it via regress_annotations.</p>
+detection, and fixing it via annotations.</p>
</code></synopsis>
- <p>This is a property regress_annotation intentionally indented with a mix
+ <p>This is a property annotation intentionally indented with a mix
of tabs and strings to test the tab handling capabilities of the scanner.</p>
annotation_object = Regress.AnnotationObject(<link xref='Regress.AnnotationObject-function-property'>function_property</link>=value, <link xref='Regress.AnnotationObject-string-property'>string_property</link>=value, <link xref='Regress.AnnotationObject-tab-property'>tab_property</link>=value) </code></synopsis>
- <p>This is an object used to test regress_annotations.</p>
+ <p>This is an object used to test annotations.</p>
</code></synopsis>
- <p>Test overriding via the "Rename To" regress_annotation.</p>
+ <p>Test overriding via the "Rename To" annotation.</p>
--- /dev/null
+<?xml version="1.0"?>
+<page id="Regress.LikeXklConfigItem"
+ type="guide"
+ style="record"
+ xmlns="http://projectmallard.org/1.0/"
+ xmlns:api="http://projectmallard.org/experimental/api/"
+ xmlns:ui="http://projectmallard.org/1.0/ui/">
+ <info>
+
+ <link xref="index" group="record" type="guide"/>
+
+ </info>
+ <title>Regress.LikeXklConfigItem</title>
+
+
+
+
+
+
+
+
+
+
+
+</page>
--- /dev/null
+<?xml version="1.0"?>
+<page id="Regress.LikeXklConfigItem.set_name"
+ type="topic"
+ style="method"
+ xmlns="http://projectmallard.org/1.0/"
+ xmlns:api="http://projectmallard.org/experimental/api/"
+ xmlns:ui="http://projectmallard.org/1.0/ui/">
+ <info>
+
+ <link xref="Regress.LikeXklConfigItem" group="method" type="guide"/>
+ <api:function>
+ <api:returns>
+ <api:type>none</api:type>
+ </api:returns>
+ <api:name>regress_like_xkl_config_item_set_name</api:name>
+ <api:arg>
+ <api:type>Regress.LikeXklConfigItem</api:type>
+ <api:name>self</api:name>
+ </api:arg>
+ <api:arg>
+ <api:type>unicode</api:type>
+ <api:name>name</api:name>
+ </api:arg>
+ </api:function>
+
+ </info>
+ <title>Regress.LikeXklConfigItem.set_name</title>
+
+<synopsis><code mime="text/x-python">
+@accepts(Regress.LikeXklConfigItem, unicode)
+@returns(none)
+def set_name(self, name):
+ # Python wrapper for regress_like_xkl_config_item_set_name()
+</code></synopsis>
+
+
+
+
+
+
+
+<terms>
+<item>
+<title><code>self</code></title>
+
+</item>
+<item>
+<title><code>name</code></title>
+
+</item>
+</terms>
+
+
+
+</page>
<p>Test messing up the heuristic of closure/destroy-notification
-detection, and fixing it via regress_annotations.</p>
+detection, and fixing it via annotations.</p>
c:identifier-prefixes="Regress"
c:symbol-prefixes="regress">
<alias name="AliasedTestBoxed" c:type="RegressAliasedTestBoxed">
- <doc xml:whitespace="preserve">Typedef TestBoxed to test caller-allocates correctness</doc>
+ <doc xml:space="preserve">Typedef TestBoxed to test caller-allocates correctness</doc>
<type name="TestBoxed" c:type="RegressTestBoxed"/>
</alias>
<alias name="FooObjectCookie" c:type="RegressFooObjectCookie">
<type name="gpointer" c:type="gpointer"/>
</alias>
<alias name="IntSet" c:type="RegressIntSet" introspectable="0">
- <doc xml:whitespace="preserve">Compatibility typedef, like telepathy-glib's TpIntSet</doc>
+ <doc xml:space="preserve">Compatibility typedef, like telepathy-glib's TpIntSet</doc>
<type name="Intset" c:type="RegressIntset"/>
</alias>
<alias name="PtrArrayAlias" c:type="RegressPtrArrayAlias">
- <doc xml:whitespace="preserve">Typedef'd GPtrArray for some reason</doc>
+ <doc xml:space="preserve">Typedef'd GPtrArray for some reason</doc>
<type name="GLib.PtrArray" c:type="GPtrArray"/>
</alias>
<alias name="TestTypeGUInt64" c:type="RegressTestTypeGUInt64">
<type name="guint64" c:type="guint64"/>
</alias>
<alias name="VaListAlias" c:type="RegressVaListAlias" introspectable="0">
- <doc xml:whitespace="preserve">Typedef'd va_list for additional reasons</doc>
+ <doc xml:space="preserve">Typedef'd va_list for additional reasons</doc>
<type name="va_list" c:type="va_list"/>
</alias>
<constant name="ANNOTATION_CALCULATED_DEFINE"
value="10000000000UL"
c:type="REGRESS_ANNOTATION_CALCULATED_LARGE"
version="1.4">
- <doc xml:whitespace="preserve">Constant to define a calculated large value</doc>
+ <doc xml:space="preserve">Constant to define a calculated large value</doc>
<type name="gint" c:type="gint"/>
</constant>
<constant name="ANNOTATION_CALCULATED_LARGE_DIV"
value="1000000UL"
c:type="REGRESS_ANNOTATION_CALCULATED_LARGE_DIV">
- <doc xml:whitespace="preserve">Constant to define a calculated large value</doc>
+ <doc xml:space="preserve">Constant to define a calculated large value</doc>
<type name="gint" c:type="gint"/>
</constant>
<enumeration name="ATestError"
</member>
</bitfield>
<callback name="AnnotationCallback" c:type="RegressAnnotationCallback">
- <doc xml:whitespace="preserve">This is a callback.</doc>
+ <doc xml:space="preserve">This is a callback.</doc>
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">array of ints</doc>
+ <doc xml:space="preserve">array of ints</doc>
<type name="gint" c:type="const gint*"/>
</return-value>
<parameters>
<parameter name="in" transfer-ownership="none">
- <doc xml:whitespace="preserve">array of ints</doc>
+ <doc xml:space="preserve">array of ints</doc>
<type name="gint" c:type="const gint*"/>
</parameter>
</parameters>
</callback>
<callback name="AnnotationListCallback"
c:type="RegressAnnotationListCallback">
- <doc xml:whitespace="preserve">This is a callback taking a list.</doc>
+ <doc xml:space="preserve">This is a callback taking a list.</doc>
<return-value transfer-ownership="container">
- <doc xml:whitespace="preserve">list of strings</doc>
+ <doc xml:space="preserve">list of strings</doc>
<type name="GLib.List" c:type="GList*">
<type name="utf8"/>
</type>
</return-value>
<parameters>
<parameter name="in" transfer-ownership="none">
- <doc xml:whitespace="preserve">list of strings</doc>
+ <doc xml:space="preserve">list of strings</doc>
<type name="GLib.List" c:type="GList*">
<type name="utf8"/>
</type>
</parameters>
</callback>
<callback name="AnnotationNotifyFunc" c:type="RegressAnnotationNotifyFunc">
- <doc xml:whitespace="preserve">This is a callback with a 'closure' argument that is not named
+ <doc xml:space="preserve">This is a callback with a 'closure' argument that is not named
'user_data' and hence has to be annotated.</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<parameter name="data" transfer-ownership="none" closure="0">
- <doc xml:whitespace="preserve">The user data</doc>
+ <doc xml:space="preserve">The user data</doc>
<type name="gpointer" c:type="gpointer"/>
</parameter>
</parameters>
glib:get-type="regress_annotation_object_get_type"
glib:type-struct="AnnotationObjectClass">
<attribute name="org.example.Test" value="cows"/>
- <doc xml:whitespace="preserve">This is an object used to test regress_annotations.</doc>
+ <doc xml:space="preserve">This is an object used to test annotations.</doc>
<method name="allow_none"
c:identifier="regress_annotation_object_allow_none">
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">%NULL always</doc>
+ <doc xml:space="preserve">%NULL always</doc>
<type name="GObject.Object" c:type="GObject*"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #GObject</doc>
+ <doc xml:space="preserve">a #GObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
<parameter name="somearg" transfer-ownership="none" allow-none="1">
</method>
<method name="calleeowns"
c:identifier="regress_annotation_object_calleeowns">
- <doc xml:whitespace="preserve">This is a test for out arguments; GObject defaults to transfer</doc>
+ <doc xml:space="preserve">This is a test for out arguments; GObject defaults to transfer</doc>
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">an int</doc>
+ <doc xml:space="preserve">an int</doc>
<type name="gint" c:type="gint"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #GObject</doc>
+ <doc xml:space="preserve">a #GObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
<parameter name="toown"
direction="out"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">a #GObject</doc>
+ <doc xml:space="preserve">a #GObject</doc>
<type name="GObject.Object" c:type="GObject**"/>
</parameter>
</parameters>
</method>
<method name="calleesowns"
c:identifier="regress_annotation_object_calleesowns">
- <doc xml:whitespace="preserve">This is a test for out arguments, one transferred, other not</doc>
+ <doc xml:space="preserve">This is a test for out arguments, one transferred, other not</doc>
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">an int</doc>
+ <doc xml:space="preserve">an int</doc>
<type name="gint" c:type="gint"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #GObject</doc>
+ <doc xml:space="preserve">a #GObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
<parameter name="toown1"
direction="out"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">a #GObject</doc>
+ <doc xml:space="preserve">a #GObject</doc>
<type name="GObject.Object" c:type="GObject**"/>
</parameter>
<parameter name="toown2"
direction="out"
caller-allocates="0"
transfer-ownership="none">
- <doc xml:whitespace="preserve">a #GObject</doc>
+ <doc xml:space="preserve">a #GObject</doc>
<type name="GObject.Object" c:type="GObject**"/>
</parameter>
</parameters>
</method>
<method name="compute_sum"
c:identifier="regress_annotation_object_compute_sum">
- <doc xml:whitespace="preserve">Test taking a zero-terminated array</doc>
+ <doc xml:space="preserve">Test taking a zero-terminated array</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #GObject</doc>
+ <doc xml:space="preserve">a #GObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
<parameter name="nums" transfer-ownership="none">
- <doc xml:whitespace="preserve">Sequence of numbers</doc>
+ <doc xml:space="preserve">Sequence of numbers</doc>
<array zero-terminated="0" c:type="int*">
<type name="gint" c:type="int"/>
</array>
</method>
<method name="compute_sum_n"
c:identifier="regress_annotation_object_compute_sum_n">
- <doc xml:whitespace="preserve">Test taking an array with length parameter</doc>
+ <doc xml:space="preserve">Test taking an array with length parameter</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #GObject</doc>
+ <doc xml:space="preserve">a #GObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
<parameter name="nums" transfer-ownership="none">
- <doc xml:whitespace="preserve">Sequence of numbers that are zero-terminated</doc>
+ <doc xml:space="preserve">Sequence of numbers that are zero-terminated</doc>
<array length="1" zero-terminated="0" c:type="int*">
<type name="gint" c:type="int"/>
</array>
</parameter>
<parameter name="n_nums" transfer-ownership="none">
- <doc xml:whitespace="preserve">Length of number array</doc>
+ <doc xml:space="preserve">Length of number array</doc>
<type name="gint" c:type="int"/>
</parameter>
</parameters>
</method>
<method name="compute_sum_nz"
c:identifier="regress_annotation_object_compute_sum_nz">
- <doc xml:whitespace="preserve">Test taking a zero-terminated array with length parameter</doc>
+ <doc xml:space="preserve">Test taking a zero-terminated array with length parameter</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #RegressAnnotationObject</doc>
+ <doc xml:space="preserve">a #RegressAnnotationObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
<parameter name="nums" transfer-ownership="none">
- <doc xml:whitespace="preserve">Sequence of numbers that are zero-terminated</doc>
+ <doc xml:space="preserve">Sequence of numbers that are zero-terminated</doc>
<array length="1" zero-terminated="1" c:type="int*">
<type name="gint" c:type="int"/>
</array>
</parameter>
<parameter name="n_nums" transfer-ownership="none">
- <doc xml:whitespace="preserve">Length of number array</doc>
+ <doc xml:space="preserve">Length of number array</doc>
<type name="gint" c:type="int"/>
</parameter>
</parameters>
</method>
<method name="create_object"
c:identifier="regress_annotation_object_create_object">
- <doc xml:whitespace="preserve">Test returning a caller-owned object</doc>
+ <doc xml:space="preserve">Test returning a caller-owned object</doc>
<return-value transfer-ownership="full">
- <doc xml:whitespace="preserve">The object</doc>
+ <doc xml:space="preserve">The object</doc>
<type name="GObject.Object" c:type="GObject*"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #GObject</doc>
+ <doc xml:space="preserve">a #GObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
</parameters>
deprecated="Use regress_annotation_object_create_object() instead."
deprecated-version="0.12">
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">%NULL always</doc>
+ <doc xml:space="preserve">%NULL always</doc>
<type name="GObject.Object" c:type="GObject*"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #GObject</doc>
+ <doc xml:space="preserve">a #GObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
</parameters>
</parameters>
</method>
<method name="foreach" c:identifier="regress_annotation_object_foreach">
- <doc xml:whitespace="preserve">Test taking a call-scoped callback</doc>
+ <doc xml:space="preserve">Test taking a call-scoped callback</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #RegressAnnotationObject</doc>
+ <doc xml:space="preserve">a #RegressAnnotationObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
<parameter name="func"
transfer-ownership="none"
scope="call"
closure="1">
- <doc xml:whitespace="preserve">Callback to invoke</doc>
+ <doc xml:space="preserve">Callback to invoke</doc>
<type name="AnnotationForeachFunc"
c:type="RegressAnnotationForeachFunc"/>
</parameter>
<parameter name="user_data" transfer-ownership="none">
- <doc xml:whitespace="preserve">Callback user data</doc>
+ <doc xml:space="preserve">Callback user data</doc>
<type name="gpointer" c:type="gpointer"/>
</parameter>
</parameters>
</method>
<method name="get_hash"
c:identifier="regress_annotation_object_get_hash">
- <doc xml:whitespace="preserve">This is a test for returning a hash table mapping strings to
+ <doc xml:space="preserve">This is a test for returning a hash table mapping strings to
objects.</doc>
<return-value transfer-ownership="full">
- <doc xml:whitespace="preserve">hash table</doc>
+ <doc xml:space="preserve">hash table</doc>
<type name="GLib.HashTable" c:type="GHashTable*">
<type name="utf8"/>
<type name="GObject.Object"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #GObject</doc>
+ <doc xml:space="preserve">a #GObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
</parameters>
</method>
<method name="get_objects"
c:identifier="regress_annotation_object_get_objects">
- <doc xml:whitespace="preserve">This is a test for returning a list of objects.
+ <doc xml:space="preserve">This is a test for returning a list of objects.
The list itself should be freed, but not the internal objects,
intentionally similar example to gtk_container_get_children</doc>
<return-value transfer-ownership="container">
- <doc xml:whitespace="preserve">list of objects</doc>
+ <doc xml:space="preserve">list of objects</doc>
<type name="GLib.SList" c:type="GSList*">
<type name="AnnotationObject"/>
</type>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #GObject</doc>
+ <doc xml:space="preserve">a #GObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
</parameters>
</method>
<method name="get_strings"
c:identifier="regress_annotation_object_get_strings">
- <doc xml:whitespace="preserve">This is a test for returning a list of strings, where
+ <doc xml:space="preserve">This is a test for returning a list of strings, where
each string needs to be freed.</doc>
<return-value transfer-ownership="full">
- <doc xml:whitespace="preserve">list of strings</doc>
+ <doc xml:space="preserve">list of strings</doc>
<type name="GLib.List" c:type="GList*">
<type name="utf8"/>
</type>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #GObject</doc>
+ <doc xml:space="preserve">a #GObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
</parameters>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">A #RegressAnnotationObject</doc>
+ <doc xml:space="preserve">A #RegressAnnotationObject</doc>
<type name="AnnotationObject" c:type="gpointer"/>
</instance-parameter>
</parameters>
</method>
<method name="in" c:identifier="regress_annotation_object_in">
- <doc xml:whitespace="preserve">This is a test for in arguments</doc>
+ <doc xml:space="preserve">This is a test for in arguments</doc>
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">an int</doc>
+ <doc xml:space="preserve">an int</doc>
<type name="gint" c:type="gint"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #GObject</doc>
+ <doc xml:space="preserve">a #GObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
<parameter name="inarg" transfer-ownership="none">
- <doc xml:whitespace="preserve">This is an argument test</doc>
+ <doc xml:space="preserve">This is an argument test</doc>
<type name="gint" c:type="int*"/>
</parameter>
</parameters>
</method>
<method name="inout" c:identifier="regress_annotation_object_inout">
- <doc xml:whitespace="preserve">This is a test for out arguments</doc>
+ <doc xml:space="preserve">This is a test for out arguments</doc>
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">an int</doc>
+ <doc xml:space="preserve">an int</doc>
<type name="gint" c:type="gint"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #GObject</doc>
+ <doc xml:space="preserve">a #GObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
<parameter name="inoutarg"
direction="inout"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">This is an argument test</doc>
+ <doc xml:space="preserve">This is an argument test</doc>
<type name="gint" c:type="int*"/>
</parameter>
</parameters>
</method>
<method name="inout2" c:identifier="regress_annotation_object_inout2">
- <doc xml:whitespace="preserve">This is a second test for out arguments</doc>
+ <doc xml:space="preserve">This is a second test for out arguments</doc>
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">an int</doc>
+ <doc xml:space="preserve">an int</doc>
<type name="gint" c:type="gint"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #GObject</doc>
+ <doc xml:space="preserve">a #GObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
<parameter name="inoutarg"
direction="inout"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">This is an argument test</doc>
+ <doc xml:space="preserve">This is an argument test</doc>
<type name="gint" c:type="int*"/>
</parameter>
</parameters>
</method>
<method name="inout3" c:identifier="regress_annotation_object_inout3">
- <doc xml:whitespace="preserve">This is a 3th test for out arguments</doc>
+ <doc xml:space="preserve">This is a 3th test for out arguments</doc>
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">an int</doc>
+ <doc xml:space="preserve">an int</doc>
<type name="gint" c:type="gint"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #GObject</doc>
+ <doc xml:space="preserve">a #GObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
<parameter name="inoutarg"
caller-allocates="0"
transfer-ownership="full"
allow-none="1">
- <doc xml:whitespace="preserve">This is an argument test</doc>
+ <doc xml:space="preserve">This is an argument test</doc>
<type name="gint" c:type="int*"/>
</parameter>
</parameters>
</method>
<method name="method" c:identifier="regress_annotation_object_method">
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">an int</doc>
+ <doc xml:space="preserve">an int</doc>
<type name="gint" c:type="gint"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #GObject</doc>
+ <doc xml:space="preserve">a #GObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
</parameters>
</method>
<method name="notrans" c:identifier="regress_annotation_object_notrans">
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">An object, not referenced</doc>
+ <doc xml:space="preserve">An object, not referenced</doc>
<type name="GObject.Object" c:type="GObject*"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #GObject</doc>
+ <doc xml:space="preserve">a #GObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
</parameters>
</method>
<method name="out" c:identifier="regress_annotation_object_out">
- <doc xml:whitespace="preserve">This is a test for out arguments</doc>
+ <doc xml:space="preserve">This is a test for out arguments</doc>
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">an int</doc>
+ <doc xml:space="preserve">an int</doc>
<type name="gint" c:type="gint"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #GObject</doc>
+ <doc xml:space="preserve">a #GObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
<parameter name="outarg"
direction="out"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">This is an argument test</doc>
+ <doc xml:space="preserve">This is an argument test</doc>
<type name="gint" c:type="int*"/>
</parameter>
</parameters>
</method>
<method name="parse_args"
c:identifier="regress_annotation_object_parse_args">
- <doc xml:whitespace="preserve">Test taking a zero-terminated array with length parameter</doc>
+ <doc xml:space="preserve">Test taking a zero-terminated array with length parameter</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #RegressAnnotationObject</doc>
+ <doc xml:space="preserve">a #RegressAnnotationObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
<parameter name="argc"
direction="inout"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">Length of the argument vector</doc>
+ <doc xml:space="preserve">Length of the argument vector</doc>
<type name="gint" c:type="int*"/>
</parameter>
<parameter name="argv"
direction="inout"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">Argument vector</doc>
+ <doc xml:space="preserve">Argument vector</doc>
<array length="0" zero-terminated="1" c:type="char***">
<type name="utf8" c:type="char**"/>
</array>
</method>
<method name="set_data"
c:identifier="regress_annotation_object_set_data">
- <doc xml:whitespace="preserve">Test taking a guchar * with a length.</doc>
+ <doc xml:space="preserve">Test taking a guchar * with a length.</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #RegressAnnotationObject</doc>
+ <doc xml:space="preserve">a #RegressAnnotationObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
<parameter name="data" transfer-ownership="none">
- <doc xml:whitespace="preserve">The data</doc>
+ <doc xml:space="preserve">The data</doc>
<array length="1" zero-terminated="0" c:type="guchar*">
<type name="guint8" c:type="guchar"/>
</array>
</parameter>
<parameter name="length" transfer-ownership="none">
- <doc xml:whitespace="preserve">Length of the data</doc>
+ <doc xml:space="preserve">Length of the data</doc>
<type name="gsize" c:type="gsize"/>
</parameter>
</parameters>
</method>
<method name="set_data2"
c:identifier="regress_annotation_object_set_data2">
- <doc xml:whitespace="preserve">Test taking a gchar * with a length.</doc>
+ <doc xml:space="preserve">Test taking a gchar * with a length.</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #RegressAnnotationObject</doc>
+ <doc xml:space="preserve">a #RegressAnnotationObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
<parameter name="data" transfer-ownership="none">
- <doc xml:whitespace="preserve">The data</doc>
+ <doc xml:space="preserve">The data</doc>
<array length="1" zero-terminated="0" c:type="gchar*">
<type name="gint8"/>
</array>
</parameter>
<parameter name="length" transfer-ownership="none">
- <doc xml:whitespace="preserve">Length of the data</doc>
+ <doc xml:space="preserve">Length of the data</doc>
<type name="gsize" c:type="gsize"/>
</parameter>
</parameters>
</method>
<method name="set_data3"
c:identifier="regress_annotation_object_set_data3">
- <doc xml:whitespace="preserve">Test taking a gchar * with a length, overriding the array element
+ <doc xml:space="preserve">Test taking a gchar * with a length, overriding the array element
type.</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #RegressAnnotationObject</doc>
+ <doc xml:space="preserve">a #RegressAnnotationObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
<parameter name="data" transfer-ownership="none">
- <doc xml:whitespace="preserve">The data</doc>
+ <doc xml:space="preserve">The data</doc>
<array length="1" zero-terminated="0" c:type="gpointer">
<type name="guint8"/>
</array>
</parameter>
<parameter name="length" transfer-ownership="none">
- <doc xml:whitespace="preserve">Length of the data</doc>
+ <doc xml:space="preserve">Length of the data</doc>
<type name="gsize" c:type="gsize"/>
</parameter>
</parameters>
</method>
<method name="string_out"
c:identifier="regress_annotation_object_string_out">
- <doc xml:whitespace="preserve">Test returning a string as an out parameter</doc>
+ <doc xml:space="preserve">Test returning a string as an out parameter</doc>
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">some boolean</doc>
+ <doc xml:space="preserve">some boolean</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #RegressAnnotationObject</doc>
+ <doc xml:space="preserve">a #RegressAnnotationObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
<parameter name="str_out"
direction="out"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">string return value</doc>
+ <doc xml:space="preserve">string return value</doc>
<type name="utf8" c:type="char**"/>
</parameter>
</parameters>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #GObject</doc>
+ <doc xml:space="preserve">a #GObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
<parameter name="bytes" transfer-ownership="none">
c:identifier="regress_annotation_object_watch"
shadowed-by="watch_full"
introspectable="0">
- <doc xml:whitespace="preserve">This is here just for the sake of being overriden by its
+ <doc xml:space="preserve">This is here just for the sake of being overriden by its
regress_annotation_object_watch_full().</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">A #RegressAnnotationObject</doc>
+ <doc xml:space="preserve">A #RegressAnnotationObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
<parameter name="func" transfer-ownership="none" closure="1">
- <doc xml:whitespace="preserve">The callback</doc>
+ <doc xml:space="preserve">The callback</doc>
<type name="AnnotationForeachFunc"
c:type="RegressAnnotationForeachFunc"/>
</parameter>
<parameter name="user_data" transfer-ownership="none">
- <doc xml:whitespace="preserve">The callback data</doc>
+ <doc xml:space="preserve">The callback data</doc>
<type name="gpointer" c:type="gpointer"/>
</parameter>
</parameters>
<method name="watch_full"
c:identifier="regress_annotation_object_watch_full"
shadows="watch">
- <doc xml:whitespace="preserve">Test overriding via the "Rename To" regress_annotation.</doc>
+ <doc xml:space="preserve">Test overriding via the "Rename To" annotation.</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">A #RegressAnnotationObject</doc>
+ <doc xml:space="preserve">A #RegressAnnotationObject</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
<parameter name="func"
scope="notified"
closure="1"
destroy="2">
- <doc xml:whitespace="preserve">The callback</doc>
+ <doc xml:space="preserve">The callback</doc>
<type name="AnnotationForeachFunc"
c:type="RegressAnnotationForeachFunc"/>
</parameter>
<parameter name="user_data" transfer-ownership="none">
- <doc xml:whitespace="preserve">The callback data</doc>
+ <doc xml:space="preserve">The callback data</doc>
<type name="gpointer" c:type="gpointer"/>
</parameter>
<parameter name="destroy" transfer-ownership="none" scope="async">
- <doc xml:whitespace="preserve">Destroy notification</doc>
+ <doc xml:space="preserve">Destroy notification</doc>
<type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
</parameter>
</parameters>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</instance-parameter>
<parameter name="data" transfer-ownership="none">
- <doc xml:whitespace="preserve">Opaque pointer handle</doc>
+ <doc xml:space="preserve">Opaque pointer handle</doc>
<type name="gpointer" c:type="void*"/>
</parameter>
</parameters>
writable="1"
construct="1"
transfer-ownership="none">
- <doc xml:whitespace="preserve">This is a property which is a string</doc>
+ <doc xml:space="preserve">This is a property which is a string</doc>
<type name="utf8" c:type="gchar*"/>
</property>
<property name="tab-property"
writable="1"
construct="1"
transfer-ownership="none">
- <doc xml:whitespace="preserve">This is a property regress_annotation intentionally indented with a mix
+ <doc xml:space="preserve">This is a property annotation intentionally indented with a mix
of tabs and strings to test the tab handling capabilities of the scanner.</doc>
<type name="utf8" c:type="gchar*"/>
</property>
<type name="GObject.Object" c:type="GObject"/>
</field>
<glib:signal name="attribute-signal" when="last">
- <doc xml:whitespace="preserve">This signal tests a signal with attributes.</doc>
+ <doc xml:space="preserve">This signal tests a signal with attributes.</doc>
<return-value transfer-ownership="full">
- <attribute name="some.regress_annotation.foo3" value="val3"/>
- <doc xml:whitespace="preserve">the return value</doc>
+ <attribute name="some.annotation.foo3" value="val3"/>
+ <doc xml:space="preserve">the return value</doc>
<type name="utf8" c:type="gchar*"/>
</return-value>
<parameters>
<parameter name="arg1" transfer-ownership="none">
- <attribute name="some.regress_annotation.foo1" value="val1"/>
- <doc xml:whitespace="preserve">a value</doc>
+ <attribute name="some.annotation.foo1" value="val1"/>
+ <doc xml:space="preserve">a value</doc>
<type name="utf8" c:type="gchar*"/>
</parameter>
<parameter name="arg2" transfer-ownership="none">
- <attribute name="some.regress_annotation.foo2" value="val2"/>
- <doc xml:whitespace="preserve">another value</doc>
+ <attribute name="some.annotation.foo2" value="val2"/>
+ <doc xml:space="preserve">another value</doc>
<type name="utf8" c:type="gchar*"/>
</parameter>
</parameters>
</glib:signal>
<glib:signal name="doc-empty-arg-parsing" when="last">
- <doc xml:whitespace="preserve">This signal tests an empty document argument (@arg1)</doc>
+ <doc xml:space="preserve">This signal tests an empty document argument (@arg1)</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
</parameters>
</glib:signal>
<glib:signal name="list-signal" when="last">
- <doc xml:whitespace="preserve">This is a signal which takes a list of strings, but it's not
+ <doc xml:space="preserve">This is a signal which takes a list of strings, but it's not
known by GObject as it's only marked as G_TYPE_POINTER</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<parameter name="list" transfer-ownership="container">
- <doc xml:whitespace="preserve">a list of strings</doc>
+ <doc xml:space="preserve">a list of strings</doc>
<type name="GLib.List" c:type="gpointer">
<type name="utf8"/>
</type>
version="1.0"
deprecated="Use other-signal instead"
deprecated-version="1.2">
- <doc xml:whitespace="preserve">This is a signal which has a broken signal handler,
+ <doc xml:space="preserve">This is a signal which has a broken signal handler,
it says it's pointer but it's actually a string.</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<parameter name="string" transfer-ownership="none">
- <doc xml:whitespace="preserve">a string</doc>
+ <doc xml:space="preserve">a string</doc>
<type name="utf8" c:type="gpointer"/>
</parameter>
</parameters>
</field>
</record>
<record name="AnnotationStruct" c:type="RegressAnnotationStruct">
- <doc xml:whitespace="preserve">This is a test of an array of object in an field of a struct.</doc>
+ <doc xml:space="preserve">This is a test of an array of object in an field of a struct.</doc>
<field name="objects" writable="1">
<array zero-terminated="0"
c:type="RegressAnnotationObject"
</function>
<function name="get_default"
c:identifier="regress_foo_object_get_default">
- <doc xml:whitespace="preserve">This function is intended to match clutter_stage_get_default which
+ <doc xml:space="preserve">This function is intended to match clutter_stage_get_default which
uses a C sugar return type.</doc>
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">The global #RegressFooSubobject</doc>
+ <doc xml:space="preserve">The global #RegressFooSubobject</doc>
<type name="FooSubobject" c:type="RegressFooObject*"/>
</return-value>
</function>
</return-value>
</function>
<virtual-method name="read_fn" invoker="read">
- <doc xml:whitespace="preserve">Read some stuff.</doc>
+ <doc xml:space="preserve">Read some stuff.</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<type name="FooObject" c:type="RegressFooObject*"/>
</instance-parameter>
<parameter name="offset" transfer-ownership="none">
- <doc xml:whitespace="preserve">offset</doc>
+ <doc xml:space="preserve">offset</doc>
<type name="gint" c:type="int"/>
</parameter>
<parameter name="length" transfer-ownership="none">
- <doc xml:whitespace="preserve">length</doc>
+ <doc xml:space="preserve">length</doc>
<type name="gint" c:type="int"/>
</parameter>
</parameters>
</virtual-method>
<method name="append_new_stack_layer"
c:identifier="regress_foo_object_append_new_stack_layer">
- <doc xml:whitespace="preserve">This shouldn't be scanned as a constructor.</doc>
+ <doc xml:space="preserve">This shouldn't be scanned as a constructor.</doc>
<return-value transfer-ownership="none">
<type name="FooOtherObject" c:type="RegressFooOtherObject*"/>
</return-value>
<method name="external_type"
c:identifier="regress_foo_object_external_type">
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">%NULL always</doc>
+ <doc xml:space="preserve">%NULL always</doc>
<type name="Utility.Object" c:type="UtilityObject*"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #RegressFooObject</doc>
+ <doc xml:space="preserve">a #RegressFooObject</doc>
<type name="FooObject" c:type="RegressFooObject*"/>
</instance-parameter>
</parameters>
<method name="new_cookie"
c:identifier="regress_foo_object_new_cookie"
introspectable="0">
- <doc xml:whitespace="preserve">Not sure why this test is here...</doc>
+ <doc xml:space="preserve">Not sure why this test is here...</doc>
<return-value>
<type name="FooObjectCookie" c:type="RegressFooObjectCookie"/>
</return-value>
</parameters>
</method>
<method name="read" c:identifier="regress_foo_object_read">
- <doc xml:whitespace="preserve">Read some stuff.</doc>
+ <doc xml:space="preserve">Read some stuff.</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">obj</doc>
+ <doc xml:space="preserve">obj</doc>
<type name="FooObject" c:type="RegressFooObject*"/>
</instance-parameter>
<parameter name="offset" transfer-ownership="none">
- <doc xml:whitespace="preserve">offset</doc>
+ <doc xml:space="preserve">offset</doc>
<type name="gint" c:type="int"/>
</parameter>
<parameter name="length" transfer-ownership="none">
- <doc xml:whitespace="preserve">length</doc>
+ <doc xml:space="preserve">length</doc>
<type name="gint" c:type="int"/>
</parameter>
</parameters>
<method name="skipped_method"
c:identifier="regress_foo_object_skipped_method"
introspectable="0">
- <doc xml:whitespace="preserve">This is only useful from C.</doc>
+ <doc xml:space="preserve">This is only useful from C.</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">obj</doc>
+ <doc xml:space="preserve">obj</doc>
<type name="FooObject" c:type="RegressFooObject*"/>
</instance-parameter>
</parameters>
<type name="FooObject" c:type="RegressFooObject*"/>
</parameter>
<parameter name="offset" transfer-ownership="none">
- <doc xml:whitespace="preserve">offset</doc>
+ <doc xml:space="preserve">offset</doc>
<type name="gint" c:type="int"/>
</parameter>
<parameter name="length" transfer-ownership="none">
- <doc xml:whitespace="preserve">length</doc>
+ <doc xml:space="preserve">length</doc>
<type name="gint" c:type="int"/>
</parameter>
</parameters>
direction="inout"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">add to this rect</doc>
+ <doc xml:space="preserve">add to this rect</doc>
<type name="FooRectangle" c:type="RegressFooRectangle*"/>
</instance-parameter>
<parameter name="r2" transfer-ownership="none">
- <doc xml:whitespace="preserve">source rectangle</doc>
+ <doc xml:space="preserve">source rectangle</doc>
<type name="FooRectangle" c:type="const RegressFooRectangle*"/>
</parameter>
</parameters>
<function name="new"
c:identifier="regress_foo_rectangle_new"
introspectable="0">
- <doc xml:whitespace="preserve">This is a C convenience constructor; we have to (skip)
+ <doc xml:space="preserve">This is a C convenience constructor; we have to (skip)
it because it's not a boxed type.</doc>
<return-value>
<type name="FooRectangle" c:type="RegressFooRectangle*"/>
<enumeration name="FooSkippable"
introspectable="0"
c:type="RegressFooSkippable">
- <doc xml:whitespace="preserve">Some type that is only interesting from C and should not be
+ <doc xml:space="preserve">Some type that is only interesting from C and should not be
exposed to language bindings.</doc>
<member name="one" value="0" c:identifier="REGRESS_FOO_SKIPPABLE_ONE">
- <doc xml:whitespace="preserve">a skippable enum value</doc>
+ <doc xml:space="preserve">a skippable enum value</doc>
</member>
<member name="two" value="1" c:identifier="REGRESS_FOO_SKIPPABLE_TWO">
- <doc xml:whitespace="preserve">another skippable enum value</doc>
+ <doc xml:space="preserve">another skippable enum value</doc>
</member>
</enumeration>
<enumeration name="FooStackLayer" c:type="RegressFooStackLayer">
<type name="gint" c:type="gint"/>
</constant>
<record name="Intset" c:type="RegressIntset" disguised="1">
- <doc xml:whitespace="preserve">Like telepathy-glib's TpIntset.</doc>
+ <doc xml:space="preserve">Like telepathy-glib's TpIntset.</doc>
</record>
<constant name="LONG_STRING_CONSTANT"
value="TYPE,VALUE,ENCODING,CHARSET,LANGUAGE,DOM,INTL,POSTAL,PARCEL,HOME,WORK,PREF,VOICE,FAX,MSG,CELL,PAGER,BBS,MODEM,CAR,ISDN,VIDEO,AOL,APPLELINK,ATTMAIL,CIS,EWORLD,INTERNET,IBMMAIL,MCIMAIL,POWERSHARE,PRODIGY,TLX,X400,GIF,CGM,WMF,BMP,MET,PMB,DIB,PICT,TIFF,PDF,PS,JPEG,QTIME,MPEG,MPEG2,AVI,WAVE,AIFF,PCM,X509,PGP"
<type name="gdouble" c:type="double"/>
</field>
</record>
+ <record name="LikeXklConfigItem" c:type="RegressLikeXklConfigItem">
+ <field name="name" writable="1">
+ <array zero-terminated="0" c:type="gchar" fixed-size="32">
+ <type name="gchar" c:type="gchar"/>
+ </array>
+ </field>
+ <method name="set_name"
+ c:identifier="regress_like_xkl_config_item_set_name">
+ <return-value transfer-ownership="none">
+ <type name="none" c:type="void"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="self" transfer-ownership="none">
+ <type name="LikeXklConfigItem" c:type="RegressLikeXklConfigItem*"/>
+ </instance-parameter>
+ <parameter name="name" transfer-ownership="none">
+ <type name="utf8" c:type="const char*"/>
+ </parameter>
+ </parameters>
+ </method>
+ </record>
<constant name="MAXUINT64"
value="18446744073709551615"
c:type="REGRESS_MAXUINT64">
<record name="SkippedStructure"
c:type="RegressSkippedStructure"
introspectable="0">
- <doc xml:whitespace="preserve">This should be skipped, and moreover, all function which
+ <doc xml:space="preserve">This should be skipped, and moreover, all function which
use it should be.</doc>
<field name="x" writable="1">
<type name="gint" c:type="int"/>
</return-value>
<parameters>
<parameter name="foo" transfer-ownership="none">
- <doc xml:whitespace="preserve">the investment rate</doc>
+ <doc xml:space="preserve">the investment rate</doc>
<type name="gint" c:type="int"/>
</parameter>
<parameter name="bar" transfer-ownership="none">
- <doc xml:whitespace="preserve">how much money</doc>
+ <doc xml:space="preserve">how much money</doc>
<type name="gdouble" c:type="double"/>
</parameter>
<parameter name="path" transfer-ownership="none">
- <doc xml:whitespace="preserve">Path to file</doc>
+ <doc xml:space="preserve">Path to file</doc>
<type name="filename" c:type="char*"/>
</parameter>
</parameters>
</return-value>
<parameters>
<parameter name="data" transfer-ownership="none">
- <doc xml:whitespace="preserve">a hash table; will be modified</doc>
+ <doc xml:space="preserve">a hash table; will be modified</doc>
<type name="GLib.HashTable" c:type="GHashTable*">
<type name="utf8"/>
<type name="gint"/>
</return-value>
<parameters>
<parameter name="error" transfer-ownership="full">
- <doc xml:whitespace="preserve">GError instance; must be freed by the callback</doc>
+ <doc xml:space="preserve">GError instance; must be freed by the callback</doc>
<type name="GLib.Error" c:type="GError*"/>
</parameter>
</parameters>
glib:type-name="RegressTestEnum"
glib:get-type="regress_test_enum_get_type"
c:type="RegressTestEnum">
- <doc xml:whitespace="preserve">By purpose, not all members have documentation</doc>
+ <doc xml:space="preserve">By purpose, not all members have documentation</doc>
<member name="value1"
value="0"
c:identifier="REGRESS_TEST_VALUE1"
glib:nick="value1">
- <doc xml:whitespace="preserve">value 1</doc>
+ <doc xml:space="preserve">value 1</doc>
</member>
<member name="value2"
value="1"
c:identifier="REGRESS_TEST_VALUE2"
glib:nick="value2">
- <doc xml:whitespace="preserve">value 2</doc>
+ <doc xml:space="preserve">value 2</doc>
</member>
<member name="value3"
value="-1"
glib:type-struct="TestFloatingClass">
<constructor name="new" c:identifier="regress_test_floating_new">
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">A new floating #RegressTestFloating</doc>
+ <doc xml:space="preserve">A new floating #RegressTestFloating</doc>
<type name="TestFloating" c:type="RegressTestFloating*"/>
</return-value>
</constructor>
glib:get-value-func="regress_test_value_get_fundamental_object">
<method name="ref" c:identifier="regress_test_fundamental_object_ref">
<return-value transfer-ownership="full">
- <doc xml:whitespace="preserve">A new #RegressTestFundamentalObject</doc>
+ <doc xml:space="preserve">A new #RegressTestFundamentalObject</doc>
<type name="TestFundamentalObject"
c:type="RegressTestFundamentalObject*"/>
</return-value>
</return-value>
<parameters>
<parameter name="obj" transfer-ownership="none">
- <doc xml:whitespace="preserve">A #RegressTestObj</doc>
+ <doc xml:space="preserve">A #RegressTestObj</doc>
<type name="TestObj" c:type="RegressTestObj*"/>
</parameter>
</parameters>
caller-allocates="0"
transfer-ownership="full"
allow-none="1">
- <doc xml:whitespace="preserve">A #RegressTestObj</doc>
+ <doc xml:space="preserve">A #RegressTestObj</doc>
<type name="TestObj" c:type="RegressTestObj**"/>
</parameter>
</parameters>
<type name="TestObj" c:type="RegressTestObj*"/>
</instance-parameter>
<parameter name="two" transfer-ownership="none" allow-none="1">
- <doc xml:whitespace="preserve">Another object</doc>
+ <doc xml:space="preserve">Another object</doc>
<type name="TestObj" c:type="RegressTestObj*"/>
</parameter>
</parameters>
</virtual-method>
<virtual-method name="matrix" invoker="do_matrix">
- <doc xml:whitespace="preserve">This method is virtual. Notably its name differs from the virtual
+ <doc xml:space="preserve">This method is virtual. Notably its name differs from the virtual
slot name, which makes it useful for testing bindings handle this
case.</doc>
<return-value transfer-ownership="none">
<type name="TestObj" c:type="RegressTestObj*"/>
</instance-parameter>
<parameter name="somestr" transfer-ownership="none">
- <doc xml:whitespace="preserve">Meaningless string</doc>
+ <doc xml:space="preserve">Meaningless string</doc>
<type name="utf8" c:type="const char*"/>
</parameter>
</parameters>
</virtual-method>
<method name="do_matrix" c:identifier="regress_test_obj_do_matrix">
- <doc xml:whitespace="preserve">This method is virtual. Notably its name differs from the virtual
+ <doc xml:space="preserve">This method is virtual. Notably its name differs from the virtual
slot name, which makes it useful for testing bindings handle this
case.</doc>
<return-value transfer-ownership="none">
</return-value>
<parameters>
<instance-parameter name="obj" transfer-ownership="none">
- <doc xml:whitespace="preserve">A #RegressTestObj</doc>
+ <doc xml:space="preserve">A #RegressTestObj</doc>
<type name="TestObj" c:type="RegressTestObj*"/>
</instance-parameter>
<parameter name="somestr" transfer-ownership="none">
- <doc xml:whitespace="preserve">Meaningless string</doc>
+ <doc xml:space="preserve">Meaningless string</doc>
<type name="utf8" c:type="const char*"/>
</parameter>
</parameters>
</return-value>
<parameters>
<instance-parameter name="obj" transfer-ownership="none">
- <doc xml:whitespace="preserve">A #RegressTestObj</doc>
+ <doc xml:space="preserve">A #RegressTestObj</doc>
<type name="TestObj" c:type="RegressTestObj*"/>
</instance-parameter>
</parameters>
<method name="skip_inout_param"
c:identifier="regress_test_obj_skip_inout_param"
throws="1">
- <doc xml:whitespace="preserve">Check that the out value is skipped</doc>
+ <doc xml:space="preserve">Check that the out value is skipped</doc>
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">%TRUE if the call succeeds, %FALSE if @error is set.</doc>
+ <doc xml:space="preserve">%TRUE if the call succeeds, %FALSE if @error is set.</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
<instance-parameter name="obj" transfer-ownership="none">
- <doc xml:whitespace="preserve">A #RegressTestObj.</doc>
+ <doc xml:space="preserve">A #RegressTestObj.</doc>
<type name="TestObj" c:type="RegressTestObj*"/>
</instance-parameter>
<parameter name="a" transfer-ownership="none">
- <doc xml:whitespace="preserve">Parameter.</doc>
+ <doc xml:space="preserve">Parameter.</doc>
<type name="gint" c:type="gint"/>
</parameter>
<parameter name="out_b"
direction="out"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">Return value.</doc>
+ <doc xml:space="preserve">Return value.</doc>
<type name="gint" c:type="gint*"/>
</parameter>
<parameter name="c" transfer-ownership="none">
- <doc xml:whitespace="preserve">Other parameter.</doc>
+ <doc xml:space="preserve">Other parameter.</doc>
<type name="gdouble" c:type="gdouble"/>
</parameter>
<parameter name="inout_d"
caller-allocates="0"
transfer-ownership="full"
skip="1">
- <doc xml:whitespace="preserve">Will be incremented.</doc>
+ <doc xml:space="preserve">Will be incremented.</doc>
<type name="gint" c:type="gint*"/>
</parameter>
<parameter name="out_sum"
direction="out"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">Return value.</doc>
+ <doc xml:space="preserve">Return value.</doc>
<type name="gint" c:type="gint*"/>
</parameter>
<parameter name="num1" transfer-ownership="none">
- <doc xml:whitespace="preserve">Number.</doc>
+ <doc xml:space="preserve">Number.</doc>
<type name="gint" c:type="gint"/>
</parameter>
<parameter name="num2" transfer-ownership="none">
- <doc xml:whitespace="preserve">Number.</doc>
+ <doc xml:space="preserve">Number.</doc>
<type name="gint" c:type="gint"/>
</parameter>
</parameters>
<method name="skip_out_param"
c:identifier="regress_test_obj_skip_out_param"
throws="1">
- <doc xml:whitespace="preserve">Check that the out value is skipped</doc>
+ <doc xml:space="preserve">Check that the out value is skipped</doc>
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">%TRUE if the call succeeds, %FALSE if @error is set.</doc>
+ <doc xml:space="preserve">%TRUE if the call succeeds, %FALSE if @error is set.</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
<instance-parameter name="obj" transfer-ownership="none">
- <doc xml:whitespace="preserve">A #RegressTestObj.</doc>
+ <doc xml:space="preserve">A #RegressTestObj.</doc>
<type name="TestObj" c:type="RegressTestObj*"/>
</instance-parameter>
<parameter name="a" transfer-ownership="none">
- <doc xml:whitespace="preserve">Parameter.</doc>
+ <doc xml:space="preserve">Parameter.</doc>
<type name="gint" c:type="gint"/>
</parameter>
<parameter name="out_b"
caller-allocates="0"
transfer-ownership="full"
skip="1">
- <doc xml:whitespace="preserve">Return value.</doc>
+ <doc xml:space="preserve">Return value.</doc>
<type name="gint" c:type="gint*"/>
</parameter>
<parameter name="c" transfer-ownership="none">
- <doc xml:whitespace="preserve">Other parameter.</doc>
+ <doc xml:space="preserve">Other parameter.</doc>
<type name="gdouble" c:type="gdouble"/>
</parameter>
<parameter name="inout_d"
direction="inout"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">Will be incremented.</doc>
+ <doc xml:space="preserve">Will be incremented.</doc>
<type name="gint" c:type="gint*"/>
</parameter>
<parameter name="out_sum"
direction="out"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">Return value.</doc>
+ <doc xml:space="preserve">Return value.</doc>
<type name="gint" c:type="gint*"/>
</parameter>
<parameter name="num1" transfer-ownership="none">
- <doc xml:whitespace="preserve">Number.</doc>
+ <doc xml:space="preserve">Number.</doc>
<type name="gint" c:type="gint"/>
</parameter>
<parameter name="num2" transfer-ownership="none">
- <doc xml:whitespace="preserve">Number.</doc>
+ <doc xml:space="preserve">Number.</doc>
<type name="gint" c:type="gint"/>
</parameter>
</parameters>
<method name="skip_param"
c:identifier="regress_test_obj_skip_param"
throws="1">
- <doc xml:whitespace="preserve">Check that a parameter is skipped</doc>
+ <doc xml:space="preserve">Check that a parameter is skipped</doc>
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">%TRUE if the call succeeds, %FALSE if @error is set.</doc>
+ <doc xml:space="preserve">%TRUE if the call succeeds, %FALSE if @error is set.</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
<instance-parameter name="obj" transfer-ownership="none">
- <doc xml:whitespace="preserve">A #RegressTestObj.</doc>
+ <doc xml:space="preserve">A #RegressTestObj.</doc>
<type name="TestObj" c:type="RegressTestObj*"/>
</instance-parameter>
<parameter name="a" transfer-ownership="none">
- <doc xml:whitespace="preserve">Parameter.</doc>
+ <doc xml:space="preserve">Parameter.</doc>
<type name="gint" c:type="gint"/>
</parameter>
<parameter name="out_b"
direction="out"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">Return value.</doc>
+ <doc xml:space="preserve">Return value.</doc>
<type name="gint" c:type="gint*"/>
</parameter>
<parameter name="c" transfer-ownership="none" skip="1">
- <doc xml:whitespace="preserve">Other parameter.</doc>
+ <doc xml:space="preserve">Other parameter.</doc>
<type name="gdouble" c:type="gdouble"/>
</parameter>
<parameter name="inout_d"
direction="inout"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">Will be incremented.</doc>
+ <doc xml:space="preserve">Will be incremented.</doc>
<type name="gint" c:type="gint*"/>
</parameter>
<parameter name="out_sum"
direction="out"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">Return value.</doc>
+ <doc xml:space="preserve">Return value.</doc>
<type name="gint" c:type="gint*"/>
</parameter>
<parameter name="num1" transfer-ownership="none">
- <doc xml:whitespace="preserve">Number.</doc>
+ <doc xml:space="preserve">Number.</doc>
<type name="gint" c:type="gint"/>
</parameter>
<parameter name="num2" transfer-ownership="none">
- <doc xml:whitespace="preserve">Number.</doc>
+ <doc xml:space="preserve">Number.</doc>
<type name="gint" c:type="gint"/>
</parameter>
</parameters>
<method name="skip_return_val"
c:identifier="regress_test_obj_skip_return_val"
throws="1">
- <doc xml:whitespace="preserve">Check that the return value is skipped</doc>
+ <doc xml:space="preserve">Check that the return value is skipped</doc>
<return-value transfer-ownership="none" skip="1">
- <doc xml:whitespace="preserve">%TRUE if the call succeeds, %FALSE if @error is set.</doc>
+ <doc xml:space="preserve">%TRUE if the call succeeds, %FALSE if @error is set.</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
<instance-parameter name="obj" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #RegressTestObj</doc>
+ <doc xml:space="preserve">a #RegressTestObj</doc>
<type name="TestObj" c:type="RegressTestObj*"/>
</instance-parameter>
<parameter name="a" transfer-ownership="none">
- <doc xml:whitespace="preserve">Parameter.</doc>
+ <doc xml:space="preserve">Parameter.</doc>
<type name="gint" c:type="gint"/>
</parameter>
<parameter name="out_b"
direction="out"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">A return value.</doc>
+ <doc xml:space="preserve">A return value.</doc>
<type name="gint" c:type="gint*"/>
</parameter>
<parameter name="c" transfer-ownership="none">
- <doc xml:whitespace="preserve">Other parameter.</doc>
+ <doc xml:space="preserve">Other parameter.</doc>
<type name="gdouble" c:type="gdouble"/>
</parameter>
<parameter name="inout_d"
direction="inout"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">Will be incremented.</doc>
+ <doc xml:space="preserve">Will be incremented.</doc>
<type name="gint" c:type="gint*"/>
</parameter>
<parameter name="out_sum"
direction="out"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">Return value.</doc>
+ <doc xml:space="preserve">Return value.</doc>
<type name="gint" c:type="gint*"/>
</parameter>
<parameter name="num1" transfer-ownership="none">
- <doc xml:whitespace="preserve">Number.</doc>
+ <doc xml:space="preserve">Number.</doc>
<type name="gint" c:type="gint"/>
</parameter>
<parameter name="num2" transfer-ownership="none">
- <doc xml:whitespace="preserve">Number.</doc>
+ <doc xml:space="preserve">Number.</doc>
<type name="gint" c:type="gint"/>
</parameter>
</parameters>
<method name="skip_return_val_no_out"
c:identifier="regress_test_obj_skip_return_val_no_out"
throws="1">
- <doc xml:whitespace="preserve">Check that the return value is skipped. Succeed if a is nonzero, otherwise
+ <doc xml:space="preserve">Check that the return value is skipped. Succeed if a is nonzero, otherwise
raise an error.</doc>
<return-value transfer-ownership="none" skip="1">
- <doc xml:whitespace="preserve">%TRUE if the call succeeds, %FALSE if @error is set.</doc>
+ <doc xml:space="preserve">%TRUE if the call succeeds, %FALSE if @error is set.</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
<instance-parameter name="obj" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #RegressTestObj</doc>
+ <doc xml:space="preserve">a #RegressTestObj</doc>
<type name="TestObj" c:type="RegressTestObj*"/>
</instance-parameter>
<parameter name="a" transfer-ownership="none">
- <doc xml:whitespace="preserve">Parameter.</doc>
+ <doc xml:space="preserve">Parameter.</doc>
<type name="gint" c:type="gint"/>
</parameter>
</parameters>
</return-value>
<parameters>
<instance-parameter name="obj" transfer-ownership="none">
- <doc xml:whitespace="preserve">A #RegressTestObj</doc>
+ <doc xml:space="preserve">A #RegressTestObj</doc>
<type name="TestObj" c:type="RegressTestObj*"/>
</instance-parameter>
<parameter name="x" transfer-ownership="none">
<method name="torture_signature_1"
c:identifier="regress_test_obj_torture_signature_1"
throws="1">
- <doc xml:whitespace="preserve">This function throws an error if m is odd.</doc>
+ <doc xml:space="preserve">This function throws an error if m is odd.</doc>
<return-value transfer-ownership="none">
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
<instance-parameter name="obj" transfer-ownership="none">
- <doc xml:whitespace="preserve">A #RegressTestObj</doc>
+ <doc xml:space="preserve">A #RegressTestObj</doc>
<type name="TestObj" c:type="RegressTestObj*"/>
</instance-parameter>
<parameter name="x" transfer-ownership="none">
</return-value>
</glib:signal>
<glib:signal name="sig-with-array-len-prop" when="last">
- <doc xml:whitespace="preserve">This test signal similar to GSettings::change-event</doc>
+ <doc xml:space="preserve">This test signal similar to GSettings::change-event</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<parameter name="arr" transfer-ownership="none" allow-none="1">
- <doc xml:whitespace="preserve">numbers, or %NULL</doc>
+ <doc xml:space="preserve">numbers, or %NULL</doc>
<array length="1" zero-terminated="0" c:type="gpointer">
<type name="guint"/>
</array>
</parameter>
<parameter name="len" transfer-ownership="none">
- <doc xml:whitespace="preserve">length of @arr, or 0</doc>
+ <doc xml:space="preserve">length of @arr, or 0</doc>
<type name="gint" c:type="gint"/>
</parameter>
</parameters>
</glib:signal>
<glib:signal name="sig-with-array-prop" when="last">
- <doc xml:whitespace="preserve">This test signal is like TelepathyGlib's
+ <doc xml:space="preserve">This test signal is like TelepathyGlib's
TpChannel:: group-members-changed-detailed:</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<parameter name="arr" transfer-ownership="none">
- <doc xml:whitespace="preserve">numbers</doc>
+ <doc xml:space="preserve">numbers</doc>
<array name="GLib.Array">
<type name="guint"/>
</array>
</return-value>
<parameters>
<parameter name="cr" transfer-ownership="none">
- <doc xml:whitespace="preserve">A cairo context.</doc>
+ <doc xml:space="preserve">A cairo context.</doc>
<type name="cairo.Context"/>
</parameter>
</parameters>
</glib:signal>
<glib:signal name="sig-with-hash-prop" when="last">
- <doc xml:whitespace="preserve">This test signal is like TelepathyGlib's
+ <doc xml:space="preserve">This test signal is like TelepathyGlib's
TpAccount::status-changed</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</parameters>
</glib:signal>
<glib:signal name="sig-with-int64-prop" when="last">
- <doc xml:whitespace="preserve">You can use this with regress_test_obj_emit_sig_with_int64, or raise from
+ <doc xml:space="preserve">You can use this with regress_test_obj_emit_sig_with_int64, or raise from
the introspection client langage.</doc>
<return-value transfer-ownership="none">
<type name="gint64" c:type="gint64"/>
</return-value>
<parameters>
<parameter name="i" transfer-ownership="none">
- <doc xml:whitespace="preserve">an integer</doc>
+ <doc xml:space="preserve">an integer</doc>
<type name="gint64" c:type="gint64"/>
</parameter>
</parameters>
</return-value>
<parameters>
<parameter name="i" transfer-ownership="none">
- <doc xml:whitespace="preserve">an integer</doc>
+ <doc xml:space="preserve">an integer</doc>
<type name="gint" c:type="gint"/>
</parameter>
</parameters>
</glib:signal>
<glib:signal name="sig-with-obj" when="last">
- <doc xml:whitespace="preserve">Test transfer none GObject as a param (tests refcounting).
+ <doc xml:space="preserve">Test transfer none GObject as a param (tests refcounting).
Use with regress_test_obj_emit_sig_with_obj</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<parameter name="obj" transfer-ownership="none">
- <doc xml:whitespace="preserve">A newly created RegressTestObj</doc>
+ <doc xml:space="preserve">A newly created RegressTestObj</doc>
<type name="GObject.Object"/>
</parameter>
</parameters>
</glib:signal>
<glib:signal name="sig-with-strv" when="last">
- <doc xml:whitespace="preserve">Test GStrv as a param.</doc>
+ <doc xml:space="preserve">Test GStrv as a param.</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<parameter name="strs" transfer-ownership="none">
- <doc xml:whitespace="preserve">strings</doc>
+ <doc xml:space="preserve">strings</doc>
<array>
<type name="utf8"/>
</array>
</parameters>
</glib:signal>
<glib:signal name="sig-with-uint64-prop" when="last">
- <doc xml:whitespace="preserve">You can use this with regress_test_obj_emit_sig_with_uint64, or raise from
+ <doc xml:space="preserve">You can use this with regress_test_obj_emit_sig_with_uint64, or raise from
the introspection client langage.</doc>
<return-value transfer-ownership="none">
<type name="guint64" c:type="guint64"/>
</return-value>
<parameters>
<parameter name="i" transfer-ownership="none">
- <doc xml:whitespace="preserve">an integer</doc>
+ <doc xml:space="preserve">an integer</doc>
<type name="guint64" c:type="guint64"/>
</parameter>
</parameters>
<type name="TestObj" c:type="RegressTestObj*"/>
</parameter>
<parameter name="somestr" transfer-ownership="none">
- <doc xml:whitespace="preserve">Meaningless string</doc>
+ <doc xml:space="preserve">Meaningless string</doc>
<type name="utf8" c:type="const char*"/>
</parameter>
</parameters>
<type name="TestObj" c:type="RegressTestObj*"/>
</parameter>
<parameter name="two" transfer-ownership="none" allow-none="1">
- <doc xml:whitespace="preserve">Another object</doc>
+ <doc xml:space="preserve">Another object</doc>
<type name="TestObj" c:type="RegressTestObj*"/>
</parameter>
</parameters>
<type name="TestEnum" c:type="RegressTestEnum"/>
</field>
<method name="clone" c:identifier="regress_test_struct_a_clone">
- <doc xml:whitespace="preserve">Make a copy of a RegressTestStructA</doc>
+ <doc xml:space="preserve">Make a copy of a RegressTestStructA</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="a" transfer-ownership="none">
- <doc xml:whitespace="preserve">the structure</doc>
+ <doc xml:space="preserve">the structure</doc>
<type name="TestStructA" c:type="RegressTestStructA*"/>
</instance-parameter>
<parameter name="a_out"
direction="out"
caller-allocates="1"
transfer-ownership="none">
- <doc xml:whitespace="preserve">the cloned structure</doc>
+ <doc xml:space="preserve">the cloned structure</doc>
<type name="TestStructA" c:type="RegressTestStructA*"/>
</parameter>
</parameters>
direction="out"
caller-allocates="1"
transfer-ownership="none">
- <doc xml:whitespace="preserve">the structure that is to be filled</doc>
+ <doc xml:space="preserve">the structure that is to be filled</doc>
<type name="TestStructA" c:type="RegressTestStructA*"/>
</parameter>
<parameter name="string" transfer-ownership="none">
- <doc xml:whitespace="preserve">ignored</doc>
+ <doc xml:space="preserve">ignored</doc>
<type name="utf8" c:type="const gchar*"/>
</parameter>
</parameters>
<type name="TestStructA" c:type="RegressTestStructA"/>
</field>
<method name="clone" c:identifier="regress_test_struct_b_clone">
- <doc xml:whitespace="preserve">Make a copy of a RegressTestStructB</doc>
+ <doc xml:space="preserve">Make a copy of a RegressTestStructB</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="b" transfer-ownership="none">
- <doc xml:whitespace="preserve">the structure</doc>
+ <doc xml:space="preserve">the structure</doc>
<type name="TestStructB" c:type="RegressTestStructB*"/>
</instance-parameter>
<parameter name="b_out"
direction="out"
caller-allocates="1"
transfer-ownership="none">
- <doc xml:whitespace="preserve">the cloned structure</doc>
+ <doc xml:space="preserve">the cloned structure</doc>
<type name="TestStructB" c:type="RegressTestStructB*"/>
</parameter>
</parameters>
<function name="annotation_attribute_func"
c:identifier="regress_annotation_attribute_func">
<return-value transfer-ownership="none">
- <attribute name="some.other.regress_annotation" value="value2"/>
- <attribute name="yet.another.regress_annotation"
- value="another_value"/>
- <doc xml:whitespace="preserve">The return value.</doc>
+ <attribute name="some.other.annotation" value="value2"/>
+ <attribute name="yet.another.annotation" value="another_value"/>
+ <doc xml:space="preserve">The return value.</doc>
<type name="gint" c:type="gint"/>
</return-value>
<parameters>
<parameter name="object" transfer-ownership="none">
- <doc xml:whitespace="preserve">A #RegressAnnotationObject.</doc>
+ <doc xml:space="preserve">A #RegressAnnotationObject.</doc>
<type name="AnnotationObject" c:type="RegressAnnotationObject*"/>
</parameter>
<parameter name="data" transfer-ownership="none">
- <attribute name="some.regress_annotation" value="value"/>
- <attribute name="another.regress_annotation" value="blahvalue"/>
- <doc xml:whitespace="preserve">Some data.</doc>
+ <attribute name="some.annotation" value="value"/>
+ <attribute name="another.annotation" value="blahvalue"/>
+ <doc xml:space="preserve">Some data.</doc>
<type name="utf8" c:type="const gchar*"/>
</parameter>
</parameters>
</function>
<function name="annotation_custom_destroy"
c:identifier="regress_annotation_custom_destroy">
- <doc xml:whitespace="preserve">Test messing up the heuristic of closure/destroy-notification
-detection, and fixing it via regress_annotations.</doc>
+ <doc xml:space="preserve">Test messing up the heuristic of closure/destroy-notification
+detection, and fixing it via annotations.</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
scope="notified"
closure="2"
destroy="1">
- <doc xml:whitespace="preserve">Destroy notification</doc>
+ <doc xml:space="preserve">Destroy notification</doc>
<type name="AnnotationCallback" c:type="RegressAnnotationCallback"/>
</parameter>
<parameter name="destroy"
<function name="annotation_get_source_file"
c:identifier="regress_annotation_get_source_file">
<return-value transfer-ownership="full">
- <doc xml:whitespace="preserve">Source file</doc>
+ <doc xml:space="preserve">Source file</doc>
<type name="filename" c:type="char*"/>
</return-value>
</function>
direction="inout"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">The number of args.</doc>
+ <doc xml:space="preserve">The number of args.</doc>
<type name="gint" c:type="int*"/>
</parameter>
<parameter name="argv"
direction="inout"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">The arguments.</doc>
+ <doc xml:space="preserve">The arguments.</doc>
<array length="0" zero-terminated="0" c:type="char***">
<type name="utf8" c:type="char**"/>
</array>
</return-value>
<parameters>
<parameter name="foo" transfer-ownership="none">
- <doc xml:whitespace="preserve">some text (e.g. example) or else</doc>
+ <doc xml:space="preserve">some text (e.g. example) or else</doc>
<type name="gint" c:type="int"/>
</parameter>
</parameters>
</return-value>
<parameters>
<parameter name="array" transfer-ownership="none">
- <doc xml:whitespace="preserve">the array</doc>
+ <doc xml:space="preserve">the array</doc>
<array name="GLib.PtrArray" c:type="GPtrArray*">
<type name="GObject.Value"/>
</array>
<function name="annotation_return_array"
c:identifier="regress_annotation_return_array">
<return-value transfer-ownership="full">
- <doc xml:whitespace="preserve">The return value</doc>
+ <doc xml:space="preserve">The return value</doc>
<array length="0" zero-terminated="0" c:type="char**">
<type name="utf8"/>
</array>
direction="out"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">Number of return values</doc>
+ <doc xml:space="preserve">Number of return values</doc>
<type name="gint" c:type="int*"/>
</parameter>
</parameters>
<function name="annotation_return_filename"
c:identifier="regress_annotation_return_filename">
<return-value transfer-ownership="full">
- <doc xml:whitespace="preserve">An annotated filename</doc>
+ <doc xml:space="preserve">An annotated filename</doc>
<type name="filename" c:type="gchar*"/>
</return-value>
</function>
</return-value>
<parameters>
<parameter name="fname" transfer-ownership="none">
- <doc xml:whitespace="preserve">Source file</doc>
+ <doc xml:space="preserve">Source file</doc>
<type name="filename" c:type="char*"/>
</parameter>
</parameters>
</function>
<function name="annotation_space_after_comment_bug631690"
c:identifier="regress_annotation_space_after_comment_bug631690">
- <doc xml:whitespace="preserve">Explicitly test having a space after the ** here.</doc>
+ <doc xml:space="preserve">Explicitly test having a space after the ** here.</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<function name="annotation_string_zero_terminated"
c:identifier="regress_annotation_string_zero_terminated">
<return-value transfer-ownership="full">
- <doc xml:whitespace="preserve">The return value</doc>
+ <doc xml:space="preserve">The return value</doc>
<array c:type="char**">
<type name="utf8"/>
</array>
</function>
<function name="annotation_test_parsing_bug630862"
c:identifier="regress_annotation_test_parsing_bug630862">
- <doc xml:whitespace="preserve">See https://bugzilla.gnome.org/show_bug.cgi?id=630862</doc>
+ <doc xml:space="preserve">See https://bugzilla.gnome.org/show_bug.cgi?id=630862</doc>
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">An object, note the colon:in here</doc>
+ <doc xml:space="preserve">An object, note the colon:in here</doc>
<type name="GObject.Object" c:type="GObject*"/>
</return-value>
</function>
<function name="annotation_transfer_floating"
c:identifier="regress_annotation_transfer_floating">
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">A floating object</doc>
+ <doc xml:space="preserve">A floating object</doc>
<type name="GObject.Object" c:type="GObject*"/>
</return-value>
</function>
</function>
<function name="foo_not_a_constructor_new"
c:identifier="regress_foo_not_a_constructor_new">
- <doc xml:whitespace="preserve">This should be scanned as a top-level function, and shouldn't cause
+ <doc xml:space="preserve">This should be scanned as a top-level function, and shouldn't cause
a "Can't find matching type for constructor" warning.</doc>
<return-value transfer-ownership="none">
<type name="FooObject" c:type="RegressFooObject*"/>
c:identifier="regress_foo_rectangle_new"
moved-to="FooRectangle.new"
introspectable="0">
- <doc xml:whitespace="preserve">This is a C convenience constructor; we have to (skip)
+ <doc xml:space="preserve">This is a C convenience constructor; we have to (skip)
it because it's not a boxed type.</doc>
<return-value>
<type name="FooRectangle" c:type="RegressFooRectangle*"/>
<function name="foo_skip_me"
c:identifier="regress_foo_skip_me"
introspectable="0">
- <doc xml:whitespace="preserve">Does something that's only interesting from C and should not be
+ <doc xml:space="preserve">Does something that's only interesting from C and should not be
exposed to language bindings.</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<parameter name="fs" transfer-ownership="none">
- <doc xml:whitespace="preserve">a #RegressFooSkippable</doc>
+ <doc xml:space="preserve">a #RegressFooSkippable</doc>
<type name="FooSkippable" c:type="RegressFooSkippable"/>
</parameter>
</parameters>
</return-value>
<parameters>
<parameter name="obj" transfer-ownership="none" allow-none="1">
- <doc xml:whitespace="preserve">A #RegressTestObj</doc>
+ <doc xml:space="preserve">A #RegressTestObj</doc>
<type name="TestObj" c:type="RegressTestObj*"/>
</parameter>
</parameters>
direction="out"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">A flags value</doc>
+ <doc xml:space="preserve">A flags value</doc>
<type name="TestFlags" c:type="RegressTestFlags*"/>
</parameter>
</parameters>
</function>
<function name="has_parameter_named_attrs"
c:identifier="regress_has_parameter_named_attrs">
- <doc xml:whitespace="preserve">This test case mirrors GnomeKeyringPasswordSchema from
+ <doc xml:space="preserve">This test case mirrors GnomeKeyringPasswordSchema from
libgnome-keyring.</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<parameter name="foo" transfer-ownership="none">
- <doc xml:whitespace="preserve">some int</doc>
+ <doc xml:space="preserve">some int</doc>
<type name="gint" c:type="int"/>
</parameter>
<parameter name="attributes" transfer-ownership="none">
- <doc xml:whitespace="preserve">list of attributes</doc>
+ <doc xml:space="preserve">list of attributes</doc>
<array zero-terminated="0" c:type="gpointer" fixed-size="32">
<type name="guint32" c:type="gpointer"/>
</array>
direction="out"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">An array of #RegressTestObj</doc>
+ <doc xml:space="preserve">An array of #RegressTestObj</doc>
<array zero-terminated="0" c:type="RegressTestObj***" fixed-size="2">
<type name="TestObj" c:type="RegressTestObj**"/>
</array>
<function name="test_array_fixed_size_int_in"
c:identifier="regress_test_array_fixed_size_int_in">
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">the sum of the items in @ints</doc>
+ <doc xml:space="preserve">the sum of the items in @ints</doc>
<type name="gint" c:type="int"/>
</return-value>
<parameters>
<parameter name="ints" transfer-ownership="none">
- <doc xml:whitespace="preserve">a list of 5 integers</doc>
+ <doc xml:space="preserve">a list of 5 integers</doc>
<array zero-terminated="0" c:type="int*" fixed-size="5">
<type name="gint" c:type="int"/>
</array>
direction="out"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">a list of 5 integers ranging from 0 to 4</doc>
+ <doc xml:space="preserve">a list of 5 integers ranging from 0 to 4</doc>
<array zero-terminated="0" c:type="int**" fixed-size="5">
<type name="gint" c:type="int*"/>
</array>
<function name="test_array_fixed_size_int_return"
c:identifier="regress_test_array_fixed_size_int_return">
<return-value transfer-ownership="full">
- <doc xml:whitespace="preserve">a list of 5 integers ranging from 0 to 4</doc>
+ <doc xml:space="preserve">a list of 5 integers ranging from 0 to 4</doc>
<array zero-terminated="0" c:type="int*" fixed-size="5">
<type name="gint" c:type="int"/>
</array>
<type name="gint" c:type="int"/>
</parameter>
<parameter name="ints" transfer-ownership="none">
- <doc xml:whitespace="preserve">List of ints</doc>
+ <doc xml:space="preserve">List of ints</doc>
<array length="0" zero-terminated="0" c:type="gint16*">
<type name="gint16" c:type="gint16"/>
</array>
<type name="gint" c:type="int"/>
</parameter>
<parameter name="ints" transfer-ownership="none">
- <doc xml:whitespace="preserve">List of ints</doc>
+ <doc xml:space="preserve">List of ints</doc>
<array length="0" zero-terminated="0" c:type="gint32*">
<type name="gint32" c:type="gint32"/>
</array>
<type name="gint" c:type="int"/>
</parameter>
<parameter name="ints" transfer-ownership="none">
- <doc xml:whitespace="preserve">List of ints</doc>
+ <doc xml:space="preserve">List of ints</doc>
<array length="0" zero-terminated="0" c:type="gint64*">
<type name="gint64" c:type="gint64"/>
</array>
<type name="gint" c:type="int"/>
</parameter>
<parameter name="ints" transfer-ownership="none">
- <doc xml:whitespace="preserve">List of ints</doc>
+ <doc xml:space="preserve">List of ints</doc>
<array length="0" zero-terminated="0" c:type="gint8*">
<type name="gint8" c:type="gint8"/>
</array>
<function name="test_array_gtype_in"
c:identifier="regress_test_array_gtype_in">
<return-value transfer-ownership="full">
- <doc xml:whitespace="preserve">string representation of provided types</doc>
+ <doc xml:space="preserve">string representation of provided types</doc>
<type name="utf8" c:type="char*"/>
</return-value>
<parameters>
<type name="gint" c:type="int"/>
</parameter>
<parameter name="types" transfer-ownership="none">
- <doc xml:whitespace="preserve">List of types</doc>
+ <doc xml:space="preserve">List of types</doc>
<array length="0" zero-terminated="0" c:type="GType*">
<type name="GType" c:type="GType"/>
</array>
<function name="test_array_int_full_out"
c:identifier="regress_test_array_int_full_out">
<return-value transfer-ownership="full">
- <doc xml:whitespace="preserve">a new array of integers.</doc>
+ <doc xml:space="preserve">a new array of integers.</doc>
<array length="0" zero-terminated="0" c:type="int*">
<type name="gint" c:type="int"/>
</array>
direction="out"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">length of the returned array.</doc>
+ <doc xml:space="preserve">length of the returned array.</doc>
<type name="gint" c:type="int*"/>
</parameter>
</parameters>
<type name="gint" c:type="int"/>
</parameter>
<parameter name="ints" transfer-ownership="none">
- <doc xml:whitespace="preserve">List of ints</doc>
+ <doc xml:space="preserve">List of ints</doc>
<array length="0" zero-terminated="0" c:type="int*">
<type name="gint" c:type="int"/>
</array>
direction="inout"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">the length of @ints</doc>
+ <doc xml:space="preserve">the length of @ints</doc>
<type name="gint" c:type="int*"/>
</parameter>
<parameter name="ints"
direction="inout"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">a list of integers whose items will be increased by 1, except the first that will be dropped</doc>
+ <doc xml:space="preserve">a list of integers whose items will be increased by 1, except the first that will be dropped</doc>
<array length="0" zero-terminated="0" c:type="int**">
<type name="gint" c:type="int*"/>
</array>
<function name="test_array_int_none_out"
c:identifier="regress_test_array_int_none_out">
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">a static array of integers.</doc>
+ <doc xml:space="preserve">a static array of integers.</doc>
<array length="0" zero-terminated="0" c:type="int*">
<type name="gint" c:type="int"/>
</array>
direction="out"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">length of the returned array.</doc>
+ <doc xml:space="preserve">length of the returned array.</doc>
<type name="gint" c:type="int*"/>
</parameter>
</parameters>
</array>
</parameter>
<parameter name="len" transfer-ownership="none">
- <doc xml:whitespace="preserve">length</doc>
+ <doc xml:space="preserve">length</doc>
<type name="gint" c:type="int"/>
</parameter>
</parameters>
direction="out"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">length</doc>
+ <doc xml:space="preserve">length</doc>
<type name="gint" c:type="int*"/>
</parameter>
</parameters>
direction="out"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">the length of @ints</doc>
+ <doc xml:space="preserve">the length of @ints</doc>
<type name="gint" c:type="int*"/>
</parameter>
<parameter name="ints"
direction="out"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">a list of 5 integers, from 0 to 4 in consecutive order</doc>
+ <doc xml:space="preserve">a list of 5 integers, from 0 to 4 in consecutive order</doc>
<array length="0" zero-terminated="0" c:type="int**">
<type name="gint" c:type="int*"/>
</array>
</function>
<function name="test_callback_destroy_notify"
c:identifier="regress_test_callback_destroy_notify">
- <doc xml:whitespace="preserve">Notified - callback persists until a DestroyNotify delegate
+ <doc xml:space="preserve">Notified - callback persists until a DestroyNotify delegate
is invoked.</doc>
<return-value transfer-ownership="none">
<type name="gint" c:type="int"/>
</function>
<function name="test_callback_destroy_notify_no_user_data"
c:identifier="regress_test_callback_destroy_notify_no_user_data">
- <doc xml:whitespace="preserve">Adds a scope notified callback with no user data. This can invoke an error
+ <doc xml:space="preserve">Adds a scope notified callback with no user data. This can invoke an error
condition in bindings which needs to be tested.</doc>
<return-value transfer-ownership="none">
<type name="gint" c:type="int"/>
</function>
<function name="test_callback_thaw_notifications"
c:identifier="regress_test_callback_thaw_notifications">
- <doc xml:whitespace="preserve">Invokes all callbacks installed by #test_callback_destroy_notify(),
+ <doc xml:space="preserve">Invokes all callbacks installed by #test_callback_destroy_notify(),
adding up their return values, and removes them, invoking the
corresponding destroy notfications.</doc>
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">Sum of the return values of the invoked callbacks.</doc>
+ <doc xml:space="preserve">Sum of the return values of the invoked callbacks.</doc>
<type name="gint" c:type="int"/>
</return-value>
</function>
<function name="test_callback_user_data"
c:identifier="regress_test_callback_user_data">
- <doc xml:whitespace="preserve">Call - callback parameter persists for the duration of the method
+ <doc xml:space="preserve">Call - callback parameter persists for the duration of the method
call and can be released on return.</doc>
<return-value transfer-ownership="none">
<type name="gint" c:type="int"/>
<function name="test_closure_variant"
c:identifier="regress_test_closure_variant">
<return-value transfer-ownership="full">
- <doc xml:whitespace="preserve">the return value of @closure</doc>
+ <doc xml:space="preserve">the return value of @closure</doc>
<type name="GLib.Variant" c:type="GVariant*"/>
</return-value>
<parameters>
<parameter name="closure" transfer-ownership="none">
- <doc xml:whitespace="preserve">GClosure which takes one GVariant and returns a GVariant</doc>
+ <doc xml:space="preserve">GClosure which takes one GVariant and returns a GVariant</doc>
<type name="GObject.Closure" c:type="GClosure*"/>
</parameter>
<parameter name="arg" transfer-ownership="none" allow-none="1">
- <doc xml:whitespace="preserve">a GVariant passed as argument to @closure</doc>
+ <doc xml:space="preserve">a GVariant passed as argument to @closure</doc>
<type name="GLib.Variant" c:type="GVariant*"/>
</parameter>
</parameters>
<function name="test_filename_return"
c:identifier="regress_test_filename_return">
<return-value transfer-ownership="full">
- <doc xml:whitespace="preserve">list of strings</doc>
+ <doc xml:space="preserve">list of strings</doc>
<type name="GLib.SList" c:type="GSList*">
<type name="filename"/>
</type>
</return-value>
<parameters>
<parameter name="hash" transfer-ownership="none">
- <doc xml:whitespace="preserve">the hash table returned by regress_test_ghash_gvalue_return().</doc>
+ <doc xml:space="preserve">the hash table returned by regress_test_ghash_gvalue_return().</doc>
<type name="GLib.HashTable" c:type="GHashTable*">
<type name="utf8"/>
<type name="GObject.Value"/>
</function>
<function name="test_ghash_nested_everything_return"
c:identifier="regress_test_ghash_nested_everything_return">
- <doc xml:whitespace="preserve">Specify nested parameterized types directly with the (type ) annotation.</doc>
+ <doc xml:space="preserve">Specify nested parameterized types directly with the (type ) annotation.</doc>
<return-value transfer-ownership="full">
<type name="GLib.HashTable" c:type="GHashTable*">
<type name="utf8"/>
</function>
<function name="test_ghash_nested_everything_return2"
c:identifier="regress_test_ghash_nested_everything_return2">
- <doc xml:whitespace="preserve">Another way of specifying nested parameterized types: using the
+ <doc xml:space="preserve">Another way of specifying nested parameterized types: using the
element-type annotation.</doc>
<return-value transfer-ownership="full">
<type name="GLib.HashTable" c:type="GHashTable*">
</function>
<function name="test_gvariant_as" c:identifier="regress_test_gvariant_as">
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">New variant</doc>
+ <doc xml:space="preserve">New variant</doc>
<type name="GLib.Variant" c:type="GVariant*"/>
</return-value>
</function>
<function name="test_gvariant_asv"
c:identifier="regress_test_gvariant_asv">
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">New variant</doc>
+ <doc xml:space="preserve">New variant</doc>
<type name="GLib.Variant" c:type="GVariant*"/>
</return-value>
</function>
<function name="test_gvariant_i" c:identifier="regress_test_gvariant_i">
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">New variant</doc>
+ <doc xml:space="preserve">New variant</doc>
<type name="GLib.Variant" c:type="GVariant*"/>
</return-value>
</function>
<function name="test_gvariant_s" c:identifier="regress_test_gvariant_s">
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">New variant</doc>
+ <doc xml:space="preserve">New variant</doc>
<type name="GLib.Variant" c:type="GVariant*"/>
</return-value>
</function>
<function name="test_gvariant_v" c:identifier="regress_test_gvariant_v">
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">New variant</doc>
+ <doc xml:space="preserve">New variant</doc>
<type name="GLib.Variant" c:type="GVariant*"/>
</return-value>
</function>
</return-value>
<parameters>
<parameter name="data" transfer-ownership="none">
- <doc xml:whitespace="preserve">GHashTable that gets passed to callback</doc>
+ <doc xml:space="preserve">GHashTable that gets passed to callback</doc>
<type name="GLib.HashTable" c:type="GHashTable*">
<type name="utf8"/>
<type name="gint"/>
</function>
<function name="test_multiline_doc_comments"
c:identifier="regress_test_multiline_doc_comments">
- <doc xml:whitespace="preserve">This is a function.
+ <doc xml:space="preserve">This is a function.
It has multiple lines in the documentation.
</function>
<function name="test_nested_parameter"
c:identifier="regress_test_nested_parameter">
- <doc xml:whitespace="preserve"><informaltable>
+ <doc xml:space="preserve"><informaltable>
<tgroup cols="3">
<thead>
<row>
</return-value>
<parameters>
<parameter name="a" transfer-ownership="none">
- <doc xml:whitespace="preserve">An integer</doc>
+ <doc xml:space="preserve">An integer</doc>
<type name="gint" c:type="int"/>
</parameter>
</parameters>
<function name="test_skip_unannotated_callback"
c:identifier="regress_test_skip_unannotated_callback"
introspectable="0">
- <doc xml:whitespace="preserve">Should not emit a warning:
+ <doc xml:space="preserve">Should not emit a warning:
https://bugzilla.gnome.org/show_bug.cgi?id=685399</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<parameter name="callback" transfer-ownership="none">
- <doc xml:whitespace="preserve">No annotation here</doc>
+ <doc xml:space="preserve">No annotation here</doc>
<type name="TestCallback" c:type="RegressTestCallback"/>
</parameter>
</parameters>
direction="out"
caller-allocates="1"
transfer-ownership="none">
- <doc xml:whitespace="preserve">the structure that is to be filled</doc>
+ <doc xml:space="preserve">the structure that is to be filled</doc>
<type name="TestStructA" c:type="RegressTestStructA*"/>
</parameter>
<parameter name="string" transfer-ownership="none">
- <doc xml:whitespace="preserve">ignored</doc>
+ <doc xml:space="preserve">ignored</doc>
<type name="utf8" c:type="const gchar*"/>
</parameter>
</parameters>
<function name="test_torture_signature_1"
c:identifier="regress_test_torture_signature_1"
throws="1">
- <doc xml:whitespace="preserve">This function throws an error if m is odd.</doc>
+ <doc xml:space="preserve">This function throws an error if m is odd.</doc>
<return-value transfer-ownership="none">
<type name="gboolean" c:type="gboolean"/>
</return-value>
<function name="test_utf8_const_return"
c:identifier="regress_test_utf8_const_return">
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">UTF-8 string</doc>
+ <doc xml:space="preserve">UTF-8 string</doc>
<type name="utf8" c:type="const char*"/>
</return-value>
</function>
<function name="test_utf8_nonconst_return"
c:identifier="regress_test_utf8_nonconst_return">
<return-value transfer-ownership="full">
- <doc xml:whitespace="preserve">UTF-8 string</doc>
+ <doc xml:space="preserve">UTF-8 string</doc>
<type name="utf8" c:type="char*"/>
</return-value>
</function>
<function name="test_utf8_out_nonconst_return"
c:identifier="regress_test_utf8_out_nonconst_return">
<return-value transfer-ownership="full">
- <doc xml:whitespace="preserve">a copy of "first"</doc>
+ <doc xml:space="preserve">a copy of "first"</doc>
<type name="utf8" c:type="char*"/>
</return-value>
<parameters>
direction="out"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">a copy of "second"</doc>
+ <doc xml:space="preserve">a copy of "second"</doc>
<type name="utf8" c:type="char**"/>
</parameter>
</parameters>
direction="out"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">a copy of "first"</doc>
+ <doc xml:space="preserve">a copy of "first"</doc>
<type name="utf8" c:type="char**"/>
</parameter>
<parameter name="out1"
direction="out"
caller-allocates="0"
transfer-ownership="full">
- <doc xml:whitespace="preserve">a copy of "second"</doc>
+ <doc xml:space="preserve">a copy of "second"</doc>
<type name="utf8" c:type="char**"/>
</parameter>
</parameters>
<function name="test_value_return"
c:identifier="regress_test_value_return">
<return-value transfer-ownership="none">
- <doc xml:whitespace="preserve">the int wrapped in a GValue.</doc>
+ <doc xml:space="preserve">the int wrapped in a GValue.</doc>
<type name="GObject.Value" c:type="const GValue*"/>
</return-value>
<parameters>
<parameter name="i" transfer-ownership="none">
- <doc xml:whitespace="preserve">an int</doc>
+ <doc xml:space="preserve">an int</doc>
<type name="gint" c:type="int"/>
</parameter>
</parameters>
/**
* RegressAnnotationObject::attribute-signal:
* @regress_annotation: the regress_annotation object
- * @arg1: (attribute some.regress_annotation.foo1 val1): a value
- * @arg2: (attribute some.regress_annotation.foo2 val2): another value
+ * @arg1: (attribute some.annotation.foo1 val1): a value
+ * @arg2: (attribute some.annotation.foo2 val2): another value
*
* This signal tests a signal with attributes.
*
- * Returns: (attribute some.regress_annotation.foo3 val3): the return value
+ * Returns: (attribute some.annotation.foo3 val3): the return value
*/
regress_annotation_object_signals[ATTRIBUTE_SIGNAL] =
g_signal_new ("attribute-signal",
"This property is a function pointer",
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
- /**
- * RegressAnnotationObject:tab-property:
- *
- * This is a property regress_annotation intentionally indented with a mix
- * of tabs and strings to test the tab handling capabilities of the scanner.
- *
- * Since: 1.2
- */
+ /**
+ * RegressAnnotationObject:tab-property:
+ *
+ * This is a property annotation intentionally indented with a mix
+ * of tabs and strings to test the tab handling capabilities of the scanner.
+ *
+ * Since: 1.2
+ */
g_object_class_install_property (gobject_class,
PROP_TAB_PROPERTY,
g_param_spec_string ("tab-property",
* @user_data: The callback data
* @destroy: Destroy notification
*
- * Test overriding via the "Rename To" regress_annotation.
+ * Test overriding via the "Rename To" annotation.
*
* Rename to: regress_annotation_object_watch
*/
* @callback: (destroy destroy) (closure data): Destroy notification
*
* Test messing up the heuristic of closure/destroy-notification
- * detection, and fixing it via regress_annotations.
+ * detection, and fixing it via annotations.
*/
void
regress_annotation_custom_destroy (RegressAnnotationCallback callback,
/**
* regress_annotation_attribute_func:
* @object: A #RegressAnnotationObject.
- * @data: (attribute some.regress_annotation value) (attribute another.regress_annotation blahvalue): Some data.
+ * @data: (attribute some.annotation value) (attribute another.annotation blahvalue): Some data.
*
- * Returns: (attribute some.other.regress_annotation value2) (attribute yet.another.regress_annotation another_value): The return value.
+ * Returns: (attribute some.other.annotation value2) (attribute yet.another.annotation another_value): The return value.
*/
gint
regress_annotation_attribute_func (RegressAnnotationObject *object,
/**
* RegressAnnotationObject:
*
- * This is an object used to test regress_annotations.
+ * This is an object used to test annotations.
*
* Attributes: (org.example.Test cows)
*/
parsed += ' <annotations>\n'
for key, value in tag.options.values:
parsed += ' <annotation>\n'
- parsed += ' <name>%s</name>\n' %(key, )
+ parsed += ' <name>%s</name>\n' % (key, )
if value is not None:
options = value.all()
parsed += ' <options>\n'
return parsed
+
def expected2tree(docblock):
# Note: this sucks, but we can't rely on etree.tostring() to generate useable output :(
regress_test_versioning (void)
{
}
+
+void
+regress_like_xkl_config_item_set_name (RegressLikeXklConfigItem *self,
+ const char *name)
+{
+ strncpy (self->name, name, sizeof (self->name) - 1);
+ self->name[sizeof(self->name)-1] = '\0';
+}
#include <glib-object.h>
#include <gio/gio.h>
#include <time.h>
+#include <string.h>
+#include <stdlib.h>
void regress_set_abort_on_error (gboolean abort_on_error);
void regress_test_struct_fixed_array_frob (RegressTestStructFixedArray *str);
+typedef struct {
+ gchar name[32];
+} RegressLikeXklConfigItem;
+
+void regress_like_xkl_config_item_set_name (RegressLikeXklConfigItem *self,
+ const char *name);
+
#define REGRESS_UTF8_CONSTANT "const \xe2\x99\xa5 utf8"
#ifdef __GNUC__
annotationparser.h \
callback-invalid-scope.h \
callback-missing-scope.h \
- return-gobject.h \
invalid-array.h \
invalid-closure.h \
invalid-constructor.h \
invalid-out.h \
invalid-transfer.h \
missing-element-type.h \
+ return-gobject.h \
unknown-parameter.h \
unresolved-type.h
-EXTRA_DIST = warningtester.py warntestrunner $(alltests) common.h $(TESTS)
+EXTRA_DIST = warningtester.py $(alltests) common.h $(TESTS)
TESTS_ENVIRONMENT = PYTHONPATH=$(top_builddir):$(top_srcdir) TOP_BUILDDIR=$(top_builddir) UNINSTALLED_INTROSPECTION_SRCDIR=$(top_srcdir) PYTHON=$(PYTHON) srcdir=$(srcdir) alltests="$(alltests)"
annotationparser.h \
callback-invalid-scope.h \
callback-missing-scope.h \
- return-gobject.h \
invalid-array.h \
invalid-closure.h \
invalid-constructor.h \
invalid-out.h \
invalid-transfer.h \
missing-element-type.h \
+ return-gobject.h \
unknown-parameter.h \
unresolved-type.h
-EXTRA_DIST = warningtester.py warntestrunner $(alltests) common.h $(TESTS)
+EXTRA_DIST = warningtester.py $(alltests) common.h $(TESTS)
TESTS_ENVIRONMENT = PYTHONPATH=$(top_builddir):$(top_srcdir) TOP_BUILDDIR=$(top_builddir) UNINSTALLED_INTROSPECTION_SRCDIR=$(top_srcdir) PYTHON=$(PYTHON) srcdir=$(srcdir) alltests="$(alltests)"
all: all-am
for line in a[i1:i2]:
for l in line.split('\n'):
if l != '':
- retval += ' ' + l + '\n'
+ retval += ' ' + l + '\n'
continue
if tag in ('replace', 'delete'):
for line in a[i1:i2]:
for l in line.split('\n'):
if l != '':
- retval += '-' + l + '\n'
+ retval += '-' + l + '\n'
if tag in ('replace', 'insert'):
for line in b[j1:j2]:
for l in line.split('\n'):
if l != '':
- retval += '+' + l + '\n'
+ retval += '+' + l + '\n'
return retval
+
def _extract_expected(filename):
fd = open(filename, 'rU')
data = fd.read()
return retval
+
def check(args):
filename = args[0]
if len(expected_warnings) != len(emitted_warnings):
raise SystemExit('ERROR in %r: %d warnings were emitted, '
- 'expected %d:\n%s' %(os.path.basename(filename),
- len(emitted_warnings),
- len(expected_warnings),
- _diff(expected_warnings, emitted_warnings)))
+ 'expected %d:\n%s' % (os.path.basename(filename),
+ len(emitted_warnings),
+ len(expected_warnings),
+ _diff(expected_warnings, emitted_warnings)))
for emitted_warning, expected_warning in zip(emitted_warnings, expected_warnings):
if expected_warning != emitted_warning:
for testname in ${alltests}; do
echo "Running warning test:" $testname
- $PYTHON $srcdir/warningtester.py "$testname"
+ $PYTHON $srcdir/warningtester.py "$srcdir/$testname"
done