[comp.sources.bugs] bug in PD m4 macro processor +fix

bs@sbsvax.UUCP (Bernard Sieloff) (07/08/88)

I'm posting this for W.Ruelling's Research Group in our house.
They detected and fixed the following bug in the PD M4 macro processor
(originally posted to comp.sources.unix Vol.13 Issue 38/39 12.Feb.88).

Description:
There is a bug in PD-m4's management of parameters of macros.
The separating comma will only be recognized in macro declarations
of the *first level*.

Repeat-by:
construction of 2nd level macros, e.g.
changequote(@,%)
dnl -----------------------
define(@a%,$1+$2=$3)dnl()
define(@b%,$3=$1+$2)dnl()

define(@c%,$1($2,$3,$4))
dnl -----------------------
c(@a%,@alpha%,@beta%,@gamma%)
c(@b%,@alpha%,@beta%,@gamma%)

You will get as m4's output:
alphabetagamma+=
=alphabetagamma+
instead of the (correct) output:
alpha+beta=gamma
gamma=alpha+beta


Fix: (modification of main.c)
cd to your PD-m4 source directory. Feed this posting to
Larry Wall's patch program.


Index: main.c
*** main.c.old	Thu Jun 30 19:38:00 1988
--- main.c	Wed Jul  6 15:58:12 1988
***************
*** 374,377 ****
--- 374,378 ----
  				pushs(ep);
  			}
+                         else {chrsave(',');}
  			break;
  		default:
-- 
 Bernard Sieloff                    | UUCP:  ...!uunet!unido!sbsvax!bs
 Universitaet des Saarlandes        | or bs@sbsvax.UUCP
 FB 10 - Informatik (Dept. of CS)   | CSNET: bs%sbsvax.uucp@Germany.CSnet
 Bau 36, Im Stadtwald 15            | ARPA:  bs%sbsvax.uucp@uunet.UU.NET
 D-6600 Saarbruecken 11, W. Germany | Phone: +49 681 302 2434