Browse Source

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

Ryan C. Gordon 1 year ago
parent
commit
8e782602de
3 changed files with 20 additions and 14 deletions
  1. 9 3
      build-scripts/wikiheaders.pl
  2. 1 11
      include/SDL3/SDL_assert.h
  3. 10 0
      include/SDL3/SDL_begin_code.h

+ 9 - 3
build-scripts/wikiheaders.pl

@@ -872,7 +872,7 @@ while (my $d = readdir(DH)) {
                 }
                 }
                 $decl =~ s/\s*\)\s*(\{.*|)\s*\Z/);/;
                 $decl =~ s/\s*\)\s*(\{.*|)\s*\Z/);/;
             } else {
             } else {
-                if (not $decl =~ /\)\s*;/) {
+                if (not $decl =~ /;/) {
                     while (<FH>) {
                     while (<FH>) {
                         chomp;
                         chomp;
                         $lineno++;
                         $lineno++;
@@ -880,14 +880,19 @@ while (my $d = readdir(DH)) {
                         s/\A\s+//;
                         s/\A\s+//;
                         s/\s+\Z//;
                         s/\s+\Z//;
                         $decl .= " $_";
                         $decl .= " $_";
-                        last if /\)\s*;/;
+                        last if /;/;
                     }
                     }
                 }
                 }
                 $decl =~ s/\s+\);\Z/);/;
                 $decl =~ s/\s+\);\Z/);/;
+                $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*\((.*?)\);/) {
             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;
                 $sym = $7;
             } elsif ($is_forced_inline && $decl =~ /\A\s*SDL_FORCE_INLINE\s+(SDL_DEPRECATED\s+|)(const\s+|)(unsigned\s+|)(.*?)([\*\s]+)(.*?)\s*\((.*?)\);/) {
             } 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/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.
             # !!! 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.
             # We assume any `#define`s directly after the function are related to it: probably bitflags for an integer typedef.

+ 1 - 11
include/SDL3/SDL_assert.h

@@ -244,17 +244,7 @@ typedef struct SDL_AssertData
  */
  */
 extern SDL_DECLSPEC SDL_AssertState SDLCALL SDL_ReportAssertion(SDL_AssertData *data,
 extern SDL_DECLSPEC SDL_AssertState SDLCALL SDL_ReportAssertion(SDL_AssertData *data,
                                                             const char *func,
                                                             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 */
 /* Define the trigger breakpoint call used in asserts */
 #ifndef SDL_AssertBreakpoint
 #ifndef SDL_AssertBreakpoint

+ 10 - 0
include/SDL3/SDL_begin_code.h

@@ -139,6 +139,16 @@
 #endif
 #endif
 #endif /* SDL_NORETURN not defined */
 #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 */
 /* Apparently this is needed by several Windows compilers */
 #ifndef __MACH__
 #ifndef __MACH__
 #ifndef NULL
 #ifndef NULL