Embed.t flushing problem
[p5sagit/p5-mst-13.2.git] / lib / ExtUtils / xsubpp
index 08df7e3..647ffd7 100755 (executable)
@@ -907,7 +907,19 @@ while (<$FH>) {
         my $podstartline = $.;
        do {
            if (/^=cut\s*$/) {
-               print("/* Skipped embedded POD. */\n");
+               # We can't just write out a /* */ comment, as our embedded
+               # POD might itself be in a comment. We can't put a /**/
+               # comment inside #if 0, as the C standard says that the source
+               # file is decomposed into preprocessing characters in the stage
+               # before preprocessing commands are executed.
+               # I don't want to leave the text as barewords, because the spec
+               # isn't clear whether macros are expanded before or after
+               # preprocessing commands are executed, and someone pathological
+               # may just have defined one of the 3 words as a macro that does
+               # something strange. Multiline strings are illegal in C, so
+               # the "" we write must be a string literal. And they aren't
+               # concatenated until 2 steps later, so we are safe.
+               print("#if 0\n  \"Skipped embedded POD.\"\n#endif\n");
                printf("#line %d \"$filename\"\n", $. + 1)
                  if $WantLineNumbers;
                next firstmodule