wikiheaders: Fixes and cleanups to fix SDL_ReportAssertion's wiki page.

This commit is contained in:
Ryan C. Gordon 2024-06-11 11:29:44 -04:00
parent c3a4b15a74
commit 8e782602de
No known key found for this signature in database
GPG Key ID: FA148B892AB48044
3 changed files with 20 additions and 14 deletions

View File

@ -872,7 +872,7 @@ while (my $d = readdir(DH)) {
}
$decl =~ s/\s*\)\s*(\{.*|)\s*\Z/);/;
} else {
if (not $decl =~ /\)\s*;/) {
if (not $decl =~ /;/) {
while (<FH>) {
chomp;
$lineno++;
@ -880,14 +880,19 @@ while (my $d = readdir(DH)) {
s/\A\s+//;
s/\s+\Z//;
$decl .= " $_";
last if /\)\s*;/;
last if /;/;
}
}
$decl =~ s/\s+\);\Z/);/;
$decl =~ s/\s+;\Z/;/;
}
$decl =~ s/\s+\Z//;
$decl =~ s/\s*SDL_W?PRINTF_VARARG_FUNCV?\s*\(\d+\)\s*//; # don't want this metadata as part of the documentation.
$decl =~ s/SDL_PRINTF_FORMAT_STRING\s*//; # don't want this metadata as part of the documentation.
$decl =~ s/\s*SDL_ANALYZER_NORETURN\s*//; # don't want this metadata as part of the documentation.
if (!$is_forced_inline && $decl =~ /\A\s*extern\s+(SDL_DEPRECATED\s+|)(SDLMAIN_|SDL_)DECLSPEC\s+(const\s+|)(unsigned\s+|)(.*?)\s*(\*?)\s*SDLCALL\s+(.*?)\s*\((.*?)\);/) {
$sym = $7;
} elsif ($is_forced_inline && $decl =~ /\A\s*SDL_FORCE_INLINE\s+(SDL_DEPRECATED\s+|)(const\s+|)(unsigned\s+|)(.*?)([\*\s]+)(.*?)\s*\((.*?)\);/) {
@ -919,8 +924,9 @@ while (my $d = readdir(DH)) {
}
}
$decl =~ s/\s*SDL_W?PRINTF_VARARG_FUNCV?\s*\(\d+\)\s*;\Z/;/; # don't want this metadata as part of the documentation.
$decl =~ s/\s*SDL_W?PRINTF_VARARG_FUNCV?\s*\(\d+\)\s*//; # don't want this metadata as part of the documentation.
$decl =~ s/SDL_PRINTF_FORMAT_STRING\s*//; # don't want this metadata as part of the documentation.
$decl =~ s/\s*SDL_ANALYZER_NORETURN\s*//; # don't want this metadata as part of the documentation.
# !!! FIXME: code duplication with typedef processing, below.
# We assume any `#define`s directly after the function are related to it: probably bitflags for an integer typedef.

View File

@ -244,17 +244,7 @@ typedef struct SDL_AssertData
*/
extern SDL_DECLSPEC SDL_AssertState SDLCALL SDL_ReportAssertion(SDL_AssertData *data,
const char *func,
const char *file, int line)
#ifdef __clang__
#if __has_feature(attribute_analyzer_noreturn)
__attribute__((analyzer_noreturn))
#endif
#endif
;
/* Previous 'analyzer_noreturn' attribute tells Clang's static analysis that we're a custom assert function,
and that the analyzer should assume the condition was always true past this
SDL_assert test. */
const char *file, int line) SDL_ANALYZER_NORETURN;
/* Define the trigger breakpoint call used in asserts */
#ifndef SDL_AssertBreakpoint

View File

@ -139,6 +139,16 @@
#endif
#endif /* SDL_NORETURN not defined */
#ifdef __clang__
#if __has_feature(attribute_analyzer_noreturn)
#define SDL_ANALYZER_NORETURN __attribute__((analyzer_noreturn))
#endif
#endif
#ifndef SDL_ANALYZER_NORETURN
#define SDL_ANALYZER_NORETURN
#endif
/* Apparently this is needed by several Windows compilers */
#ifndef __MACH__
#ifndef NULL