From owner-freebsd-hackers Mon Aug 28 15:28:42 2000 Delivered-To: freebsd-hackers@freebsd.org Received: from wolery.cumb.org (wolery.cumb.org [216.15.97.161]) by hub.freebsd.org (Postfix) with ESMTP id 2E2A337B422 for ; Mon, 28 Aug 2000 15:28:39 -0700 (PDT) Received: (from zack@localhost) by wolery.cumb.org (8.11.0/8.11.0) id e7SMSZh12199 for freebsd-hackers@freebsd.org; Mon, 28 Aug 2000 15:28:35 -0700 From: Zack Weinberg Date: Mon, 28 Aug 2000 15:28:35 -0700 To: freebsd-hackers@freebsd.org Subject: Portability and warnings tweaks for byacc(1)'s skeleton file Message-ID: <20000828152835.Z17776@wolery.cumb.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG I have noticed and corrected a number of portability problems with byacc's generated parser, also adjusted things so that it does not provoke a couple of gcc warnings that are not commonly requested but that my project uses. More specifically: - stdlib.h is not available in pre-C89 environments. I made its inclusion conditional on __STDC__ || __cplusplus, which is not perfect but will do. Otherwise, I declare malloc and realloc by hand. - 'const' is not available either in K+R C. #define it to nothing if neither __STDC__ nor __cplusplus is defined. - Change the declarations of yyname[] and yyrule[] placed in y.code.c in -r mode to match their actual definitions in y.tab.c. - gcc can be asked to issue warnings if a function definition is seen without a previous prototype - even if the definition is written in prototype form. The project I'm using byacc with has this warning turned on. I therefore added explicit prototypes for both yygrowstack and yyparse, conditioned on __STDC__ || __cplusplus. A patch is appended. Also, I don't have a patch for this, but I have to change the line in the Makefile reading MAN1=yacc.1 yyfix.1 to use MAN= instead, or yyfix.1 is not installed. This may be a problem with my copy of pmake. Please cc: me directly on any responses, I am not subscribed to this list. Thank you. zw --- byacc-1.9.1.orig/skeleton.c +++ byacc-1.9.1/skeleton.c @@ -54,11 +54,13 @@ char *banner[] = { + "#if !(defined(__cplusplus) || __STDC__)", + "#define const", + "#endif", "#ifndef lint", "static char const ", "yyrcsid[] = \"$FreeBSD: src/usr.bin/yacc/skeleton.c,v 1.28 2000/01/17 02:04:06 bde Exp $\";", "#endif", - "#include ", "#define YYBYACC 1", "#define YYMAJOR 1", "#define YYMINOR 9", @@ -84,8 +86,8 @@ "extern const short yytable[];", "extern const short yycheck[];", "#if YYDEBUG", - "extern char *yyname[];", - "extern char *yyrule[];", + "extern const char * const yyname[];", + "extern const char * const yyrule[];", "#endif", 0 }; @@ -127,6 +129,14 @@ char *body[] = { "/* allocate initial stack or double stack size, up to YYMAXDEPTH */", + "#if defined(__cplusplus) || __STDC__", + "#include ", + "static int yygrowstack(void);", + "#else", + "char *malloc();", + "char *realloc();", + "#endif", + "", "static int yygrowstack()", "{", " int newsize, i;", @@ -177,6 +187,7 @@ "#if defined(__cplusplus) || __STDC__", "#define YYPARSE_PARAM_ARG YYPARSE_PARAM_TYPE YYPARSE_PARAM", "#define YYPARSE_PARAM_DECL", + "extern int yyparse (YYPARSE_PARAM_ARG);", "#else /* ! ANSI-C/C++ */", "#define YYPARSE_PARAM_ARG YYPARSE_PARAM", "#define YYPARSE_PARAM_DECL YYPARSE_PARAM_TYPE YYPARSE_PARAM;", To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message