From fb51ad3419ea84d7ad23edbc931e1b575c803e2a Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Tue, 7 Mar 2006 01:03:12 +0000
Subject: [PATCH] Make all our flex and bison files use %option prefix or
 %name-prefix (respectively) to rename yylex and related symbols.  Some were
 doing it this way already, while others used not-too-reliable sed hacks in
 the Makefiles.  It's all nice and consistent now.

---
 contrib/cube/Makefile               |  6 +++--
 contrib/cube/cubeparse.y            |  7 +++---
 contrib/seg/Makefile                |  7 ++++--
 contrib/seg/segparse.y              |  8 +++----
 src/backend/bootstrap/Makefile      | 34 ++++++++++++-----------------
 src/backend/bootstrap/bootparse.y   |  6 +++--
 src/backend/bootstrap/bootscanner.l |  3 ++-
 src/backend/bootstrap/bootstrap.c   |  9 ++------
 src/backend/utils/misc/Makefile     |  6 ++---
 src/backend/utils/misc/guc-file.l   |  3 ++-
 src/include/bootstrap/bootstrap.h   |  8 ++++---
 src/pl/plpgsql/src/Makefile         | 15 ++++++-------
 src/pl/plpgsql/src/gram.y           |  7 +++++-
 src/pl/plpgsql/src/pl_comp.c        |  8 +------
 src/pl/plpgsql/src/plpgsql.h        |  4 ++--
 src/pl/plpgsql/src/scan.l           |  3 ++-
 16 files changed, 65 insertions(+), 69 deletions(-)

diff --git a/contrib/cube/Makefile b/contrib/cube/Makefile
index e1b9f14244e..0b43cfa2400 100644
--- a/contrib/cube/Makefile
+++ b/contrib/cube/Makefile
@@ -1,4 +1,4 @@
-# $PostgreSQL: pgsql/contrib/cube/Makefile,v 1.16 2006/02/27 12:54:38 petere Exp $
+# $PostgreSQL: pgsql/contrib/cube/Makefile,v 1.17 2006/03/07 01:03:12 tgl Exp $
 
 MODULE_big = cube
 OBJS= cube.o cubeparse.o
@@ -28,11 +28,13 @@ endif
 # cubescan is compiled as part of cubeparse
 cubeparse.o: cubescan.c
 
+# See notes in src/backend/parser/Makefile about the following two rules
+
 cubeparse.c: cubeparse.h ;
 
 cubeparse.h: cubeparse.y
 ifdef YACC
-	$(YACC) -d $(YFLAGS) -p cube_yy $<
+	$(YACC) -d $(YFLAGS) $<
 	mv -f y.tab.c cubeparse.c
 	mv -f y.tab.h cubeparse.h
 else
diff --git a/contrib/cube/cubeparse.y b/contrib/cube/cubeparse.y
index 470045e9077..9756b508aa5 100644
--- a/contrib/cube/cubeparse.y
+++ b/contrib/cube/cubeparse.y
@@ -10,10 +10,7 @@
 
 #include "cubedata.h"
 
-#undef yylex                 /* failure to redefine yylex will result in a call to  the */
-#define yylex cube_yylex     /* wrong scanner when running inside the postgres backend  */
-
-extern int yylex(void);      /* defined as cube_yylex in cubescan.l */
+extern int cube_yylex(void);
 
 static char *scanbuf;
 static int	scanbuflen;
@@ -28,6 +25,8 @@ static NDBOX * write_point_as_box(char *s, int dim);
 %}
 
 /* BISON Declarations */
+%name-prefix="cube_yy"
+
 %token CUBEFLOAT O_PAREN C_PAREN O_BRACKET C_BRACKET COMMA
 %start box
 
diff --git a/contrib/seg/Makefile b/contrib/seg/Makefile
index d40bf42c6e0..7c1c631a00f 100644
--- a/contrib/seg/Makefile
+++ b/contrib/seg/Makefile
@@ -1,4 +1,4 @@
-# $PostgreSQL: pgsql/contrib/seg/Makefile,v 1.15 2006/02/27 12:54:39 petere Exp $
+# $PostgreSQL: pgsql/contrib/seg/Makefile,v 1.16 2006/03/07 01:03:12 tgl Exp $
 
 MODULE_big = seg
 OBJS = seg.o segparse.o
@@ -21,14 +21,17 @@ include $(top_builddir)/src/Makefile.global
 include $(top_srcdir)/contrib/contrib-global.mk
 endif
 
+
 # segscan is compiled as part of segparse
 segparse.o: segscan.c
 
+# See notes in src/backend/parser/Makefile about the following two rules
+
 segparse.c: segparse.h ;
 
 segparse.h: segparse.y
 ifdef YACC
-	$(YACC) -d $(YFLAGS) -p seg_yy $<
+	$(YACC) -d $(YFLAGS) $<
 	mv -f y.tab.c segparse.c
 	mv -f y.tab.h segparse.h
 else
diff --git a/contrib/seg/segparse.y b/contrib/seg/segparse.y
index 8a3b0b0160c..d4d739c621c 100644
--- a/contrib/seg/segparse.y
+++ b/contrib/seg/segparse.y
@@ -9,14 +9,12 @@
 #include "utils/builtins.h"
 #include "segdata.h"
 
-#undef yylex                  /* failure to redefine yylex will result in calling the */
-#define yylex seg_yylex       /* wrong scanner when running inside postgres backend  */
+  extern int seg_yylex(void);
 
-  extern int yylex(void);     /* defined as seg_yylex in segscan.l */
   extern int significant_digits( char *str );    /* defined in seg.c */
   
   void seg_yyerror(const char *message);
-  int seg_yyparse( void *result );
+  int seg_yyparse(void *result);
 
   float seg_atof( char *value );
 
@@ -32,6 +30,8 @@
 %}
 
 /* BISON Declarations */
+%name-prefix="seg_yy"
+
 %union {
   struct BND {
     float val;
diff --git a/src/backend/bootstrap/Makefile b/src/backend/bootstrap/Makefile
index ccc6abe6702..ed73205fd3b 100644
--- a/src/backend/bootstrap/Makefile
+++ b/src/backend/bootstrap/Makefile
@@ -2,7 +2,7 @@
 #
 # Makefile for the bootstrap module
 #
-# $PostgreSQL: pgsql/src/backend/bootstrap/Makefile,v 1.33 2006/01/05 01:56:29 momjian Exp $
+# $PostgreSQL: pgsql/src/backend/bootstrap/Makefile,v 1.34 2006/03/07 01:03:12 tgl Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -20,43 +20,37 @@ SUBSYS.o: $(OBJS)
 	$(LD) $(LDREL) $(LDOUT) $@ $^
 
 
-bootstrap.o bootparse.o: $(srcdir)/bootstrap_tokens.h
-
 # bootscanner is compiled as part of bootparse
 bootparse.o: $(srcdir)/bootscanner.c
 
-# `sed' rules to remove conflicts between bootstrap scanner and parser
-# and the SQL scanner and parser. For correctness' sake the rules that
-# use this must depend on this Makefile.
-define sed-magic
-sed -e 's/^yy/Int_yy/g' \
-    -e 's/\([^a-zA-Z0-9_]\)yy/\1Int_yy/g'
-endef
-
+# See notes in src/backend/parser/Makefile about the following two rules
 
 $(srcdir)/bootparse.c: $(srcdir)/bootstrap_tokens.h ;
 
-$(srcdir)/bootstrap_tokens.h: bootparse.y Makefile
+$(srcdir)/bootstrap_tokens.h: bootparse.y
 ifdef YACC
 	$(YACC) -d $(YFLAGS) $<
-	$(sed-magic) < y.tab.c > $(srcdir)/bootparse.c
-	$(sed-magic) < y.tab.h > $(srcdir)/bootstrap_tokens.h
-	rm -f y.tab.c y.tab.h
+	mv -f y.tab.c $(srcdir)/bootparse.c
+	mv -f y.tab.h $(srcdir)/bootstrap_tokens.h
 else
 	@$(missing) bison $< $@
 endif
 
-$(srcdir)/bootscanner.c: bootscanner.l Makefile
+$(srcdir)/bootscanner.c: bootscanner.l
 ifdef FLEX
-	$(FLEX) $(FLEXFLAGS) $<
-	$(sed-magic) lex.yy.c > $@
-	rm -f lex.yy.c
+	$(FLEX) $(FLEXFLAGS) -o'$@' $<
 else
 	@$(missing) flex $< $@
 endif
 
+# Force these dependencies to be known even without dependency info built:
+bootstrap.o bootparse.o: $(srcdir)/bootstrap_tokens.h
+
+
+# bootparse.c, bootstrap_tokens.h, and bootscanner.c are in the distribution
+# tarball, so they are not cleaned here.
 clean:
-	rm -f SUBSYS.o $(OBJS) bootstrap.o
+	rm -f SUBSYS.o $(OBJS)
 # And the garbage that might have been left behind by partial build:
 	@rm -f y.tab.h y.tab.c y.output lex.yy.c
 
diff --git a/src/backend/bootstrap/bootparse.y b/src/backend/bootstrap/bootparse.y
index b1a985adba2..8b8645bd600 100644
--- a/src/backend/bootstrap/bootparse.y
+++ b/src/backend/bootstrap/bootparse.y
@@ -2,14 +2,14 @@
 /*-------------------------------------------------------------------------
  *
  * bootparse.y
- *	  yacc parser grammar for the "backend" initialization program.
+ *	  yacc grammar for the "bootstrap" mode (BKI file format)
  *
  * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/bootstrap/bootparse.y,v 1.79 2006/03/05 15:58:22 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/bootstrap/bootparse.y,v 1.80 2006/03/07 01:03:12 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -79,6 +79,8 @@ int num_columns_read = 0;
 
 %}
 
+%name-prefix="boot_yy"
+
 %union
 {
 	List		*list;
diff --git a/src/backend/bootstrap/bootscanner.l b/src/backend/bootstrap/bootscanner.l
index f65d8ac3eac..f75d79a8d02 100644
--- a/src/backend/bootstrap/bootscanner.l
+++ b/src/backend/bootstrap/bootscanner.l
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/bootstrap/bootscanner.l,v 1.41 2006/03/05 15:58:22 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/bootstrap/bootscanner.l,v 1.42 2006/03/07 01:03:12 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -54,6 +54,7 @@ static int	yyline = 1;			/* line number for error reporting */
 %option nodefault
 %option nounput
 %option noyywrap
+%option prefix="boot_yy"
 
 
 D		[0-9]
diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c
index f0138c0bfc3..1d48fc44e18 100644
--- a/src/backend/bootstrap/bootstrap.c
+++ b/src/backend/bootstrap/bootstrap.c
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/bootstrap/bootstrap.c,v 1.212 2006/03/05 15:58:22 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/bootstrap/bootstrap.c,v 1.213 2006/03/07 01:03:12 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -53,8 +53,6 @@ extern char *optarg;
 
 #define ALLOC(t, c)		((t *) calloc((unsigned)(c), sizeof(t)))
 
-extern int	Int_yyparse(void);
-
 static void usage(void);
 static void bootstrap_signals(void);
 static hashnode *AddStr(char *str, int strlength, int mderef);
@@ -468,11 +466,8 @@ BootstrapMain(int argc, char *argv[])
 
 	/*
 	 * Process bootstrap input.
-	 *
-	 * the sed script boot.sed renamed yyparse to Int_yyparse for the
-	 * bootstrap parser to avoid conflicts with the normal SQL parser
 	 */
-	Int_yyparse();
+	boot_yyparse();
 
 	/* Perform a checkpoint to ensure everything's down to disk */
 	SetProcessingMode(NormalProcessing);
diff --git a/src/backend/utils/misc/Makefile b/src/backend/utils/misc/Makefile
index 5153366b281..5a37d7790b3 100644
--- a/src/backend/utils/misc/Makefile
+++ b/src/backend/utils/misc/Makefile
@@ -4,7 +4,7 @@
 #    Makefile for utils/misc
 #
 # IDENTIFICATION
-#    $PostgreSQL: pgsql/src/backend/utils/misc/Makefile,v 1.24 2005/10/03 22:52:23 tgl Exp $
+#    $PostgreSQL: pgsql/src/backend/utils/misc/Makefile,v 1.25 2006/03/07 01:03:12 tgl Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -33,9 +33,7 @@ guc.o: $(srcdir)/guc-file.c
 
 $(srcdir)/guc-file.c: guc-file.l
 ifdef FLEX
-	$(FLEX) $(FLEXFLAGS) $<
-	sed -e 's/^yy/GUC_yy/g' -e 's/\([^a-zA-Z0-9_]\)yy/\1GUC_yy/g' lex.yy.c > $@
-	rm -f lex.yy.c
+	$(FLEX) $(FLEXFLAGS) -o'$@' $<
 else
 	@$(missing) flex $< $@
 endif
diff --git a/src/backend/utils/misc/guc-file.l b/src/backend/utils/misc/guc-file.l
index b061935aec6..dd59d5f99b2 100644
--- a/src/backend/utils/misc/guc-file.l
+++ b/src/backend/utils/misc/guc-file.l
@@ -4,7 +4,7 @@
  *
  * Copyright (c) 2000-2006, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/backend/utils/misc/guc-file.l,v 1.36 2006/03/05 15:58:49 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/misc/guc-file.l,v 1.37 2006/03/07 01:03:12 tgl Exp $
  */
 
 %{
@@ -61,6 +61,7 @@ static char *GUC_scanstr(const char *s);
 %option nodefault
 %option nounput
 %option noyywrap
+%option prefix="GUC_yy"
 
 
 SIGN            ("-"|"+")
diff --git a/src/include/bootstrap/bootstrap.h b/src/include/bootstrap/bootstrap.h
index a8d4a2e0631..ae5b3d325d8 100644
--- a/src/include/bootstrap/bootstrap.h
+++ b/src/include/bootstrap/bootstrap.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/bootstrap/bootstrap.h,v 1.40 2006/03/05 15:58:54 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/bootstrap/bootstrap.h,v 1.41 2006/03/07 01:03:12 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -52,8 +52,10 @@ extern char *CleanUpStr(char *s);
 extern int	EnterString(char *str);
 extern void build_indices(void);
 
-extern int	Int_yylex(void);
-extern void Int_yyerror(const char *str);
+extern int	boot_yyparse(void);
+
+extern int	boot_yylex(void);
+extern void boot_yyerror(const char *str);
 
 #define BS_XLOG_NOP			0
 #define BS_XLOG_BOOTSTRAP	1
diff --git a/src/pl/plpgsql/src/Makefile b/src/pl/plpgsql/src/Makefile
index 6288a88097f..b0a9649be53 100644
--- a/src/pl/plpgsql/src/Makefile
+++ b/src/pl/plpgsql/src/Makefile
@@ -2,7 +2,7 @@
 #
 # Makefile for the plpgsql shared object
 #
-# $PostgreSQL: pgsql/src/pl/plpgsql/src/Makefile,v 1.28 2006/01/05 01:56:30 momjian Exp $
+# $PostgreSQL: pgsql/src/pl/plpgsql/src/Makefile,v 1.29 2006/03/07 01:03:12 tgl Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -48,29 +48,28 @@ installdirs:
 uninstall:
 	rm -f '$(DESTDIR)$(pkglibdir)/plpgsql$(DLSUFFIX)'
 
+# Force these dependencies to be known even without dependency info built:
 pl_gram.o pl_handler.o pl_comp.o pl_exec.o pl_funcs.o: plpgsql.h $(srcdir)/pl.tab.h
 
 # pl_scan is compiled as part of pl_gram
 pl_gram.o: $(srcdir)/pl_scan.c
 
-# Note: Since the yacc and lex files are shipped in the distribution,
-# they must be generated in the srcdir (as opposed to builddir).
+# See notes in src/backend/parser/Makefile about the following two rules
 
 $(srcdir)/pl_gram.c: $(srcdir)/pl.tab.h ;
 
 $(srcdir)/pl.tab.h: gram.y
 ifdef YACC
 	$(YACC) -d $(YFLAGS) $<
-	sed -e 's/yy/plpgsql_yy/g' -e 's/YY/PLPGSQL_YY/g' < y.tab.c > $(srcdir)/pl_gram.c
-	sed -e 's/yy/plpgsql_yy/g' -e 's/YY/PLPGSQL_YY/g' < y.tab.h > $(srcdir)/pl.tab.h
-	rm -f y.tab.c y.tab.h
+	mv -f y.tab.c $(srcdir)/pl_gram.c
+	mv -f y.tab.h $(srcdir)/pl.tab.h
 else
 	@$(missing) bison $< $@
 endif
 
 $(srcdir)/pl_scan.c: scan.l
 ifdef FLEX
-	$(FLEX) $(FLEXFLAGS) -Pplpgsql_base_yy -o'$@' $<
+	$(FLEX) $(FLEXFLAGS) -o'$@' $<
 else
 	@$(missing) flex $< $@
 endif
@@ -82,7 +81,7 @@ distprep: $(srcdir)/pl_scan.c $(srcdir)/pl.tab.h $(srcdir)/pl_gram.c
 clean distclean: clean-lib
 	rm -f $(OBJS)
 # And the garbage that might have been left behind by partial build:
-	@rm -f y.tab.c y.tab.h lex.yy.c
+	@rm -f y.tab.h y.tab.c y.output lex.yy.c
 
 maintainer-clean: clean
 	rm -f $(srcdir)/pl_gram.c $(srcdir)/pl.tab.h $(srcdir)/pl_scan.c
diff --git a/src/pl/plpgsql/src/gram.y b/src/pl/plpgsql/src/gram.y
index 0dcafb46bac..c92438d9b46 100644
--- a/src/pl/plpgsql/src/gram.y
+++ b/src/pl/plpgsql/src/gram.y
@@ -4,7 +4,7 @@
  *						  procedural language
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/pl/plpgsql/src/gram.y,v 1.85 2006/02/12 06:37:05 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/pl/plpgsql/src/gram.y,v 1.86 2006/03/07 01:03:12 tgl Exp $
  *
  *	  This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -64,6 +64,8 @@ static	void			 check_labels(const char *start_label,
 
 %}
 
+%name-prefix="plpgsql_yy"
+
 %union {
 		int32					ival;
 		bool					boolean;
@@ -2363,4 +2365,7 @@ check_labels(const char *start_label, const char *end_label)
 	}
 }
 
+/* Needed to avoid conflict between different prefix settings: */
+#undef yylex
+
 #include "pl_scan.c"
diff --git a/src/pl/plpgsql/src/pl_comp.c b/src/pl/plpgsql/src/pl_comp.c
index d9fa1f0e422..932c70d51fe 100644
--- a/src/pl/plpgsql/src/pl_comp.c
+++ b/src/pl/plpgsql/src/pl_comp.c
@@ -3,7 +3,7 @@
  *			  procedural language
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_comp.c,v 1.98 2005/12/28 18:11:25 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_comp.c,v 1.99 2006/03/07 01:03:12 tgl Exp $
  *
  *	  This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -60,12 +60,6 @@
 #include "utils/syscache.h"
 
 
-/* ----------
- * Variables in the parser that shouldn't go into plpgsql.h
- * ----------
- */
-extern PLPGSQL_YYSTYPE plpgsql_yylval;
-
 /* ----------
  * Our own local and global variables
  * ----------
diff --git a/src/pl/plpgsql/src/plpgsql.h b/src/pl/plpgsql/src/plpgsql.h
index ab235c7217f..3c304fd05a9 100644
--- a/src/pl/plpgsql/src/plpgsql.h
+++ b/src/pl/plpgsql/src/plpgsql.h
@@ -3,7 +3,7 @@
  *			  procedural language
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/pl/plpgsql/src/plpgsql.h,v 1.67 2006/03/02 05:34:12 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/pl/plpgsql/src/plpgsql.h,v 1.68 2006/03/07 01:03:12 tgl Exp $
  *
  *	  This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -656,7 +656,7 @@ extern char *plpgsql_error_funcname;
 /* linkage to the real yytext variable */
 extern char *plpgsql_base_yytext;
 
-#define plpgsql_yytext plpgsql_base_yytext
+#define yytext plpgsql_base_yytext
 
 extern PLpgSQL_function *plpgsql_curr_compile;
 extern bool plpgsql_check_syntax;
diff --git a/src/pl/plpgsql/src/scan.l b/src/pl/plpgsql/src/scan.l
index 0a6c9be20fa..77bad8572e9 100644
--- a/src/pl/plpgsql/src/scan.l
+++ b/src/pl/plpgsql/src/scan.l
@@ -4,7 +4,7 @@
  *			  procedural language
  *
  * IDENTIFICATION
- *    $PostgreSQL: pgsql/src/pl/plpgsql/src/scan.l,v 1.43 2006/02/27 16:09:50 petere Exp $
+ *    $PostgreSQL: pgsql/src/pl/plpgsql/src/scan.l,v 1.44 2006/03/07 01:03:12 tgl Exp $
  *
  *    This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -73,6 +73,7 @@ bool plpgsql_SpaceScanned = false;
 %option nodefault
 %option nounput
 %option noyywrap
+%option prefix="plpgsql_base_yy"
 
 %option case-insensitive
 
-- 
GitLab