[gnu.gcc] GPERF 1.7 now available

schmidt@ics.uci.edu (Doug Schmidt) (05/30/89)

Version 1.7 of GPERF, a perfect hash function generator used to
produce the keyword recognizer in the lexical analyzer for both GNU CC
and GNU C++, is now available via anonymous ftp from the ~ftp/pub
directory on ics.uci.edu (128.195.1.1).

There are now two versions supported, one written in GNU G++
(gperf-1.7.tar.Z) and another written in K&R C (cperf-1.7.tar.Z).
They should have identical behavior, with the only difference being
that the C version is portable to machines that don't run GNU G++
(yet!).

Version 1.7 includes many new features and enhancements.  In
particular, it now handles duplicate keyword entries and has options
that greatly increase its performance on large (i.e. > 1000) keyword
sets.  See the gperf.texinfo file for extensive documentation.

If you don't have access to anonymous ftp please let me know and I'll
mail you a copy.  Please specify whether you'd like the C or G++
versions (each is around 80k when tar'ed, compressed, and uuencoded).

  thanks,
          
    Doug

p.s.  You'll need the latest GNU G++ 1.35.1- release or later in order
to compile gperf-1.7.tar.Z, since this release uses static member
functions, #pragma once, and other features not available in earlier
G++ releases.
--
On a clear day, under blue skies, there is no need to seek.
And asking about Buddha                +------------------------+
Is like proclaiming innocence,         | schmidt@ics.uci.edu    |
With loot in your pocket.              | office: (714) 856-4043 |

tale@pawl.rpi.edu (David C Lawrence) (05/30/89)

This is what I got as I tried to build it.  I'm using G++ 1.35.1- and
everything was fine up to ...

Script started on Mon May 29 21:33:34 1989
/appl/life1/gnu/g++/libg++/gperf
imagine:gnu (1) make
(cd src; make; mv gperf ..)
g++ -v -g -O -fmemoize-lookups -fsave-memoized -fchar-charconst -finline-functions -fstrength-reduce -c  readline.cc
g++ version 1.35.1-
 /appl/life1/gnu/lib/gcc-cpp -+ -v -undef -D__GNU__ -D__GNUG__ -D__cplusplus -Dmc68000 -Dsun -Dunix -D__mc68000__ -D__sun__ -D__unix__ -D__OPTIMIZE__ -Dmc68020 readline.cc /tmp/cca14064.cpp
GNU CPP version 1.35
 /appl/life1/gnu/lib/gcc-cc1plus /tmp/cca14064.cpp -quiet -dumpbase readline.cc -fmemoize-lookups -fsave-memoized -fchar-charconst -finline-functions -fstrength-reduce -opt -version -G -o /tmp/cca14064.s
GNU C++ version 1.35.1- (68k, MIT syntax) compiled by GNU C version 1.35.
In method struct Read_Line *Read_Line::Read_Line (struct _iobuf * (= ( &  _iob )), int (=  1024 )):
readline.cc:57: no member function `Read_Line::op$new_expr'
make[1]: *** Error 1
mv: gperf: Cannot access: No such file or directory
make: *** Error 1 (ignored)
(cd tests; make GPERF=../gperf)
performing some tests of the perfect hash generator
gcc -c -O test.c
../gperf -p -o c.gperf > cinset.c
/bin/sh: ../gperf: not found
make[1]: *** Error 1
make: *** Error 1 (ignored)

script done on Mon May 29 21:34:05 1989

Dave
--
 (setq mail '("tale@pawl.rpi.edu" "tale@itsgw.rpi.edu" "tale@rpitsmts.bitnet"))

schmidt@ics.uci.edu (Doug Schmidt) (05/30/89)

In article <TALE.89May29214513@imagine.pawl.rpi.edu> tale@pawl.rpi.edu writes:
++ This is what I got as I tried to build it.  I'm using G++ 1.35.1- and
++ everything was fine up to ...
++ 
++ Script started on Mon May 29 21:33:34 1989
++ /appl/life1/gnu/g++/libg++/gperf
++ imagine:gnu (1) make
++ (cd src; make; mv gperf ..)
++ g++ -v -g -O -fmemoize-lookups -fsave-memoized -fchar-charconst -finline-functions -fstrength-reduce -c  readline.cc
++ g++ version 1.35.1-
++  /appl/life1/gnu/lib/gcc-cpp -+ -v -undef -D__GNU__ -D__GNUG__ -D__cplusplus -Dmc68000 -Dsun -Dunix -D__mc68000__ -D__sun__ -D__unix__ -D__OPTIMIZE__ -Dmc68020 readline.cc /tmp/cca14064.cpp
++ GNU CPP version 1.35
++  /appl/life1/gnu/lib/gcc-cc1plus /tmp/cca14064.cpp -quiet -dumpbase readline.cc -fmemoize-lookups -fsave-memoized -fchar-charconst -finline-functions -fstrength-reduce -opt -version -G -o /tmp/cca14064.s
++ GNU C++ version 1.35.1- (68k, MIT syntax) compiled by GNU C version 1.35.
++ In method struct Read_Line *Read_Line::Read_Line (struct _iobuf * (= ( &  _iob )), int (=  1024 )):
++ readline.cc:57: no member function `Read_Line::op$new_expr'
++ make[1]: *** Error 1
++ mv: gperf: Cannot access: No such file or directory
++ make: *** Error 1 (ignored)
++ (cd tests; make GPERF=../gperf)
++ performing some tests of the perfect hash generator
++ gcc -c -O test.c
++ ../gperf -p -o c.gperf > cinset.c
++ /bin/sh: ../gperf: not found
++ make[1]: *** Error 1
++ make: *** Error 1 (ignored)
++ 
++ script done on Mon May 29 21:34:05 1989

Sigh.  I'm afraid that my version of GNU G++ is more recent than g++
1.35.1-.  Michael fixed a bug with declaring `global operator new' as
a class friend, but it looks like this fix didn't make it into your
G++ version (if you check out gperf's ChangeLog you'll see this global
operator new feature has been included/removed/included several times
recently).

If you don't feel like installing a new GNU G++ here are some patches
to the G++ version of GPERF that fix the problem.  Alternatively, you
can get the C version of gperf (that should work fine either with GCC
or your friendly neighborhood cc compiler).

  Sorry for the inconvenience!
  
           Doug

----------------------------------------                    
*** readline.cc~	Thu May 25 14:17:44 1989
--- readline.cc	Mon May 29 20:45:50 1989
***************
*** 27,33 ****
     strings are allocated. */
  
  static inline void *
! operator new (long size)
  {
    char *temp;
  
--- 27,33 ----
     strings are allocated. */
  
  static inline void *
! new_string (long size)
  {
    char *temp;
  
***************
*** 83,89 ****
  
    c = (chunks * chunk_size + bufptr - buf) + 1;
  
!   if (ptr = new char[c])
      {
  
        for (*(ptr += (c - 1)) = '\0'; bufptr != buf; *--ptr = *--bufptr)
--- 83,89 ----
  
    c = (chunks * chunk_size + bufptr - buf) + 1;
  
!   if (ptr = new_string (c))
      {
  
        for (*(ptr += (c - 1)) = '\0'; bufptr != buf; *--ptr = *--bufptr)
*** readline.h~	Thu May 25 14:00:38 1989
--- readline.h	Mon May 29 20:44:40 1989
***************
*** 29,35 ****
  
  class Read_Line 
  {
! friend void *operator new (long size);
  private:
    char *readln_aux (int chunks);
    FILE *fp;                       /* FILE pointer to the input stream. */
--- 29,35 ----
  
  class Read_Line 
  {
! friend void *new_string (long size);
  private:
    char *readln_aux (int chunks);
    FILE *fp;                       /* FILE pointer to the input stream. */
--
On a clear day, under blue skies, there is no need to seek.
And asking about Buddha                +------------------------+
Is like proclaiming innocence,         | schmidt@ics.uci.edu    |
With loot in your pocket.              | office: (714) 856-4043 |