From: Nicholas Clark Date: Thu, 7 Nov 2002 14:58:14 +0000 (+0000) Subject: [perl #18256] xsubpp can make nested comments in C code X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=1c2605ddeb2b70e312d1adf987f9c25ebbe9410b;p=p5sagit%2Fp5-mst-13.2.git [perl #18256] xsubpp can make nested comments in C code From: Nicholas Clark (via RT) Message-Id: p4raw-id: //depot/perl@18270 --- diff --git a/lib/ExtUtils/xsubpp b/lib/ExtUtils/xsubpp index 08df7e3..647ffd7 100755 --- a/lib/ExtUtils/xsubpp +++ b/lib/ExtUtils/xsubpp @@ -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