| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
This reverts commit b37f24b7e27a77c398f41cc331608aff806f0d42.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The rules for binary expressions were entirely oblivious to the type of
the operand symbols and assumed they're integer constants.
This is very unfortunate, since it caused all sort of nonsense to end up
getting accepted. One such example is the following define from
NetworkManager's libnm:
#define NM_SETTING_PARAM_SECRET (1 << (2 + G_PARAM_USER_SHIFT))
As G_PARAM_USER_SHIFT is unknown, it was parsed as an invalid symbol.
The addition didn't care, treated it as:
#define NM_SETTING_PARAM_SECRET (1 << (2 + 0))
Let's just ensure we get CSYMBOL_TYPE_CONST only when both operands
actually have const_int_set. Otherwise just create CSYMBOL_TYPE_INVALID.
That will cause the symbol to be dropped on the floor eventually, but
that's probably much better than a having an invalid value.
|
|
|
|
|
|
| |
https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html
Based on https://github.com/katef/kgt/blob/c9d8ad246855c6b65e42371be7898f4073c28d18/examples/c99-grammar.iso-ebnf#L247-L252
|
|
|
|
|
|
| |
This fixes support for macros like `g_message()` in GLib.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
|
|
|
|
|
|
|
| |
This fixes support for macros like `G_BREAKPOINT()` or `G_DEBUG_HERE()`
in GLib.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
|
|
|
|
|
| |
We need it for close(), especially when unistd.h is not available, such as in
the case of Visual Studio-style builds.
|
|
|
|
|
|
|
|
|
| |
Check for errors during g_file_open_tmp() and fdopen(). Make sure to
free tmp_name and error as needed.
Found with Coverity.
https://bugzilla.redhat.com/show_bug.cgi?id=1938731
|
|
|
|
| |
warning: deprecated directive, use ‘%define parse.error verbose’
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
C99 allows defining an array argument with a fixed size as:
void foo (int arr[static 10])
Compilers conforming to the C99 specification will be able to warn if
the function is called with NULL or with an array smaller than the
specified length, something that does not happen when using pre-C99
declarations like:
void foo (int arr[10])
As the declaration above is identical to:
void foo (int arr[])
Which is, in turn, identical to:
void foo (int *arr)
Fixes: #309
|
|
|
|
|
| |
This is useful for documentation tools, and other utilities that
rely on full introspection of the C API of a given library.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
This is necessary to parse types like `unsigned char` or `long double`,
and is already done when parsing `declarations_specifiers`. Examples
that are fixed by this change include:
* `GLib.TestLogMsg.nums` previously parsed as `long` but should be `long
double`.
* `GMime.Encoding.uubuf` previously parsed as `unsigned` but should be
`unsigned char`.
|
|\
| |
| |
| |
| |
| |
| | |
sourcescanner: Allow empty declarations. Fixes #216
Closes #216
See merge request GNOME/gobject-introspection!89
|
| |
| |
| |
| |
| | |
As far as I see these are not valid C and only allowed in C++11.
But they do occur in the wild (mingw headers) so let's try to handle them.
|
|/
|
|
| |
Reduce total number of memory allocations and increase data locality.
|
|
|
|
|
|
|
|
|
|
|
| |
It just printed errors to stderr and always returns success even if parsing
fails. This prevents us to write any tests for it.
As a first step collect all lexing/parsing error messages and print them to stderr after
the scanner is done. This allows us to add some regression tests for !78.
In the future we probably want to raise an exception with those errors if parsing
fails.
|
|
|
|
|
|
| |
This allows us to get rid of the msvc hacks which are needed in case Python
is built with a different msvc than g-i. By passing a filename the FILE struct never
passes over library boundaries.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Recognize additional floating point types from ISO/IEC TS 18661-3:2015,
that are already in use by glibc. This continues work from commit
8cf3e8e5cf6d0d49db359f50c6eb0bc9ca22fbef and fixes issue #201.
* _Float16
* _Float32
* _Float64
* _Float128
* _Float32x
* _Float64x
* _Float128x
Use a single BASIC_TYPE token for basic types, while using its string
representation as a type name. This also fixes incorrect type used
previously for __uint128_t, __int128_t, __uint128, __int128, and
_Float128 (they have been mapped to int and float respectively).
Also avoid mapping bool and _Bool to gboolean as those are distinct
types and generally ABI incompatible. Fixes issue #202.
After this changes, when _Bool, _Float* or _int128 types are used
as a part of public API, g-ir-scanner will produce warning about
unresolved type. This is appropriate given that they are currently
inexpressible in GIRepository format.
|
|
|
|
| |
Also free memory associated with macro name when it is unused.
|
|
|
|
|
|
|
|
| |
Macro constants may now refer to constants defined in source files.
Test case provided by Philip Chimento.
Fixes issues #173 and #75.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If type_specifier comes after type_qualifier, then GISourceType
representing type_specifier will be merely updated with qualifier
flags. On the other hand, when this order is reversed the type qualifier
used to be attached as a separate node through base_type (with
CTYPE_INVALID), and interpreted incorrectly in transformer code.
This commit changes this behaviour so that information about type
qualifiers is stored directly in GISourceType corresponding to type
specifier. It also fixes analogous issue with storage_class_specifier
and function_specifier.
From higher level viewpoint, it for example represents `const char*` and
`char const*` in equivalent manner after parsing, and addresses issue #79.
|
|
|
|
|
|
|
|
|
| |
_Thread_local is a C11 keyword, and thread_local is a macro to make it
more confortable to read. As this keyword can only be used in variable
declarations, not in function return values or parameters, it cannot
be included in bindable APIs and we can safely ignore it.
https://bugzilla.gnome.org/show_bug.cgi?id=756921
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In gi_source_scanner_parse_macros(), a temporary .h file is generated
during the process of parsing the macros, and they aren't being deleted
on Windows. In turns out that the g_unlink() call in that function failed
because Windows does not allow one to unlink/delete files while they are
open, and that the g_unlink() call is done way early (for some reason).
Fix this by calling fclose() on the fmacros FILE* *after* we are done
with fmacros, and then finally call g_unlink() on the temp .h file.
https://bugzilla.gnome.org/show_bug.cgi?id=781525
|
|
|
|
|
|
|
|
| |
Aliasing TRUE or FALSE is not very common, but done occasionally
for extra clarity. Namely G_SOURCE_REMOVE / G_SOURCE_CONTINUE are
self-explanatory, unlike the "raw" booleans.
https://bugzilla.gnome.org/show_bug.cgi?id=719566
|
|
|
|
|
|
|
|
|
| |
When scanning for macros respect ifdefs of __GI_SCANNER__
in the various header files. Only #ifdef and #ifndef are supported.
If __GI_SCANNER__ appears in plain #if statements, a warning is
printed.
https://bugzilla.gnome.org/show_bug.cgi?id=698367
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Was looking around a bit and noticed about 2/3 of
g-ir-scanner time is spent in SourceScanner().parse_files().
Some profiling quickly shows most of that 2/3 is used
by gi_source_scanner_add_symbol() where it creates a whole
bunch of GFile instances just to compare paths and throw
them away again. With this a scanner instance now maintains
a hash table of GFile instances instead of a list of file
names, so comparing those paths can be reduced to a fast
g_hash_table_contains() call.
This makes "g-ir-scanner <whole_bunch_of_options> --output Gtk-3.0.gir"
complete in about 10 seconds on my box instead of about
30 seconds (both best of 3 runs).
https://bugzilla.gnome.org/show_bug.cgi?id=710320
|
|
|
|
|
|
|
| |
We need to copy the source symbols, otherwise we'll
overwrite their values. This isn't good.
https://bugzilla.gnome.org/show_bug.cgi?id=693939
|
|
|
|
|
|
| |
Otherwise bindings will break.
https://bugzilla.gnome.org/show_bug.cgi?id=685022
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In C, positive integer constants are by default unsigned. This means
an expression like 0x8000000000000000 will be "unsigned long long".
In the actual scanner code, we were parsing them as "gint64", and
storing them as gint64. This was incorrect; we need to parse them
as guint64, and store the bits we get from that. This gives us
an equivalent result to what the C compiler does.
However, when we actually return the value as a Python "long"
(arbitrary length integer), we need to treat the value as unsigned if
the result indicated it was.
https://bugzilla.gnome.org/show_bug.cgi?id=685022
|
|
|
|
|
|
| |
Move variable declarations to the start of block.
https://bugzilla.gnome.org/show_bug.cgi?id=681820
|
|
|
|
|
|
|
|
|
| |
This let the macro expands to its value as gint64/guint64.
Also
- fix lexer identifier/typdef detection for macro and misc
- do not discard cast
|
|
|
|
|
|
|
|
|
|
|
|
| |
They were parsed in wrong order resulting in having wrong pointer
being const. For example - g_settings_list_schemas return type is
normally 'const gchar *const *', but parsing result was
'const gchar ** const'.
This was unnoticed, because pointer constness information is rather
not used by gobject-introspection now.
https://bugzilla.gnome.org/show_bug.cgi?id=656445
|
|
|
|
|
|
|
|
|
|
|
| |
* Due to the way that flex/bison works, the symbols were being added
to the scanner after additional lines are parsed.
* If these lines are #line directives, then scanner->current_filename
can change between when the symbol is parsed and when it's added.
* Change so that symbol gets filename when parsing rather than when
being added to the scanner.
https://bugzilla.gnome.org/show_bug.cgi?id=650200
|
|
|
|
|
|
| |
This is needed so we don't fail to parse gatomic.h from GLib.
https://bugzilla.gnome.org/show_bug.cgi?id=651548
|
|
|
|
|
|
|
| |
Some enumerations (like GVariantClass) use characters instead of
plain integers, so we need to recognize them.
https://bugzilla.gnome.org/show_bug.cgi?id=646635
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Modify the lexer to consider all "trigraph" comments specially, and
parse them for "flags" as well as "private" and "public" (which were
previously hardcoded). This change allows for future support of
multiple annotations inside a single trigraph comment.
- Change the parser to consider the additional field "flags" set by
the lexer when constructing enums.
- Add a test case for the "flags" trigraph comment to the scanner
annotation tests.
See <https://bugzilla.gnome.org/show_bug.cgi?id=631530>.
|
|
|
|
|
|
|
| |
g_strcompress() only does some of what we need; fork it
and add support for \x escapes too.
https://bugzilla.gnome.org/show_bug.cgi?id=595773
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The C compiler will pick an enumeration type that accomodates the specified
values for the enumeration, so ignoring 64-bit enumerations, we can
have enumeration values from MININT32 to MAXUINT32. To handle this properly:
- Use gint64 for holding eumeration values when scanning
- Add a 'unsigned_value' bit to ValueBlob so we can distinguish the
int32 vs. uint32 cases in the typelib
- Change the return value of g_value_info_get_value() to gint64.
https://bugzilla.gnome.org/show_bug.cgi?id=629704
|
|
|
|
| |
This is a follow-up to 60a8c75 which wasn't properly fixed.
|
| |
|
|
|
|
|
|
|
| |
Remove enum members which follows /* <private> */ comments
inside the transformer instead of the sourcescanner itself.
Fixes a crash when creating the gir for GstBase.
|
|
|
|
| |
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=594125
|
|
|
|
|
| |
Rewrite the pre-processor linemark parser so we end
up with accurate filenames and linenumbers.
|
|
|
|
|
| |
Add line numbers to symbols, which can be useful
in later stages of the scanner.
|
|
|
|
|
|
|
|
|
|
|
|
| |
glib uses __extension__ in macros dealing with 64 bits integer such as
GUINT64_SWAP_LE_BE().
To quote the GCC manual:
`-pedantic' and other options cause warnings for many GNU C extensions. You
can prevent such warnings within one expression by writing `__extension__'
before the expression.
https://bugzilla.gnome.org/show_bug.cgi?id=605779
|
|
|
|
|
| |
Keep track of the current line (the first 2000 chars of it) and include that in
syntax error messages. Also print that failed token in the error message.
|
|
|
|
|
|
| |
Previously we just supported int and string, add double to this.
Technically we should probably differentiate between float and
double, but it's not likely to be very useful in practice to do so.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* giscanner/scannerparser.y: Fix the "Ignoring non-UTF-8 constant
string" error to print the right value.
* tests/scanner/annotation.c (backslash_parsing_tester)
(backslash_parsing_tester_2): make these non-static to avoid a
warning.
(annotation_object_string_out)
(annotation_string_zero_terminated): fix return values
* tests/scanner/annotation.h (annotation_object_with_voidp):
prototype this
* tests/scanner/gtkfrob.c:
* tests/scanner/gtkfrob.h (gtk_frob_language_manager_get_default):
fix prototype. (s/()/(void)/).
* tools/compiler.c (format_output): fix signed/unsigned warning.
Output a prototype for register_typelib() to avoid warnings later.
svn path=/trunk/; revision=1071
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
2009-01-12 Johan Dahlin <jdahlin@async.com.br>
Bug 563591 – Flags not recognized when there is no introspection data
* giscanner/ast.py:
* giscanner/girwriter.py:
* giscanner/giscannermodule.c (type_get_is_bitfield):
* giscanner/glibast.py:
* giscanner/glibtransformer.py:
* giscanner/scannerparser.y:
* giscanner/sourcescanner.c (gi_source_type_copy):
* giscanner/sourcescanner.h:
* giscanner/sourcescanner.py:
* giscanner/transformer.py:
* tests/scanner/foo-1.0-expected.gir:
* tests/scanner/foo-1.0-expected.tgir:
* tests/scanner/foo.h:
Large parts of this patch was done by Jürg Billeter.
svn path=/trunk/; revision=1025
|