Re: [PATCH] Line synchronisation output in comments

Eric Blake <[email protected]>
Newsgroups gmane.comp.gnu.m4.bugs,gmane.comp.gnu.m4.patches
Message-ID <[email protected]>
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

According to Sergey Poznyakoff on 5/24/2007 6:41 AM:
> Hi Eric,
> 
>> Would you mind signing copyright papers, as this patch is not trivial?
> 
> No problem, I have already filled and emailed the assigment form.  The
> snail-mail part of the process takes 3-4 weeks, usually.
> 
>> Also, can you add mention of this to NEWS and documentation (including
>> a test case) to m4.texi?
> 
> OK, I'll do that.

I'll make this a bit easier - I'm committing this patch, which adds the
ability to even test -s in the testsuite in the first place.

2007-05-25  Eric Blake  <[email protected]>

	Test -s in testsuite.
	* doc/m4.texinfo (Preprocessor features): Add a test.
	* checks/get-them: Support extra options in testsuite.
	* checks/check-them (examples): Use extra options.
	* THANKS: Update.
	Reported by Sergey Poznyakoff.

However, the issue is not just multiline comments, but also multiline
strings, so I think creating a new TOKEN_COMMENT is not strictly
necessary, since the fix for one should be applied to the other.
Futhermore, what does your patch do when a macro expands into a multiline
comment?  This is current behavior:

$ m4 -s
define(twoline,/*
*/)
=> #line 2 "stdin"
=>
changecom(/*,*/)
=>
twoline
=> /*
=> #line 4
=> */
hello
=> hello
`a
b'
=> #line 7
=> a
=> #line 7
=> b

Note the double #line 7, neither of which were necessary (since the string
came from the combination of line 6 and 7); and with your patch, if #line
4 were suppressed because it was in the middle of a comment, then hello
needs a leading #line 5, but I'm not sure your patch did that.

Instead, it seems to me like shipout_text is always called on single
tokens, so rather than outputting line directives in the middle of a
token, it should only output a line directive at the front of a token, as
needed.  I'm still hacking away on different approaches to the matter, but
I may end up committing something prior to your papers arriving at the FSF
office, because I want to get 1.5.10 out the door soon.

- --
Don't work too hard, make some time for fun as well!

Eric Blake             [email protected]
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (Cygwin)
Comment: Public key at home.comcast.net/~ericblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFGVt1/84KuGfSFAYARAuRNAKCBtkjFsmUrq0pk/K809QgJRiCv2QCfbU6O
2YKFvuLLtANK9c/T1ToKEFo=
=S6c6
-----END PGP SIGNATURE-----

_______________________________________________
Bug-m4 mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/bug-m4
m4.patch262 (text/plain, 2.9 KB)
Index: checks/check-them
===================================================================
RCS file: /sources/m4/m4/checks/Attic/check-them,v
retrieving revision 1.1.1.1.2.14
diff -u -p -r1.1.1.1.2.14 check-them
--- checks/check-them	6 Jan 2007 19:56:11 -0000	1.1.1.1.2.14
+++ checks/check-them	25 May 2007 12:57:16 -0000
@@ -57,8 +57,9 @@ do
     continue
   }
   echo "Checking $file"
+  options=`sed -ne '3s/^dnl @ extra options: //p;3q' "$file"`
   sed -e '/^dnl @/d' -e '/^\^D$/q' "$file" \
-    | LC_MESSAGES=C m4 -d -I "$examples" - >$out 2>$err
+    | LC_MESSAGES=C m4 -d -I "$examples" $options - >$out 2>$err
   stat=$?
 
   xstat=`sed -ne '2s/^dnl @ expected status: //p;2q' "$file"`
Index: checks/get-them
===================================================================
RCS file: /sources/m4/m4/checks/Attic/get-them,v
retrieving revision 1.1.1.1.2.9
diff -u -p -r1.1.1.1.2.9 get-them
--- checks/get-them	28 Jan 2007 01:54:41 -0000	1.1.1.1.2.9
+++ checks/get-them	25 May 2007 12:57:16 -0000
@@ -15,6 +15,7 @@ BEGIN {
   count = 0;
   file = "NONE";
   status = 0;
+  options = "";
 }
 
 /^@node / {
@@ -37,6 +38,7 @@ BEGIN {
 /^@comment ignore$/ {
   getline;
   status = 0;
+  options = "";
   next;
 }
 
@@ -44,6 +46,11 @@ BEGIN {
   status = $3;
 }
 
+/^@comment options: / {
+  options = $0;
+  gsub ("@comment options:", "", options);
+}
+
 /^@example$/, /^@end example$/ {
   if (seq < 0)
     next;
@@ -55,12 +62,14 @@ BEGIN {
     file = sprintf("%03d.%s", count, node);
     printf("dnl @ %s:%d: Origin of test\n"\
 	   "dnl @ expected status: %d\n"\
+	   "dnl @ extra options: %s\n"\
 	   "dnl @ Copyright (C) 2006, 2007 Free Software Foundation\n"\
 	   "dnl @ This file is free software; the Free Software Foundation\n"\
 	   "dnl @ gives unlimited permission to copy and/or distribute it\n"\
 	   "dnl @ with or without modifications, as long as this notice\n"\
-	   "dnl @ is preserved.\n", FILENAME, NR, status) > file;
+	   "dnl @ is preserved.\n", FILENAME, NR, status, options) > file;
     status = 0;
+    options = "";
     next;
   }
   if ($0 ~ /^@end example$/) {
Index: doc/m4.texinfo
===================================================================
RCS file: /sources/m4/m4/doc/m4.texinfo,v
retrieving revision 1.1.1.1.2.123
diff -u -p -r1.1.1.1.2.123 m4.texinfo
--- doc/m4.texinfo	25 Apr 2007 14:04:13 -0000	1.1.1.1.2.123
+++ doc/m4.texinfo	25 May 2007 12:57:16 -0000
@@ -666,6 +666,24 @@ themselves.  When a synchronization disc
 an output line, the associated synchronization directive is delayed
 until the beginning of the next generated line.
 
+@comment options: -s
+@example
+define(`twoline', `1
+2')
+@result{}#line 2 "stdin"
+@result{}
+dnl no line
+hello
+@result{}#line 4
+@result{}hello
+twoline
+@result{}1
+@result{}#line 5
+@result{}2
+goodbye
+@result{}goodbye
+@end example
+
 @item -U @var{NAME}
 @itemx --undefine=@var{NAME}
 This deletes any predefined meaning @var{NAME} might have.  Obviously,
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.