perl 5.0 alpha 3
[p5sagit/p5-mst-13.2.git] / perly.fixer
CommitLineData
fe14fcc3 1#!/bin/sh
2
35c8bce7 3# Hacks to make it work with Interactive's SysVr3 Version 2.2
4# doughera@lafvax.lafayette.edu (Andy Dougherty) 3/23/91
9ef589d8 5#
6# Additional information to make the BSD section work with SunOS 4.0.2
7# tdinger@East.Sun.COM (Tom Dinger) 4/15/1991
35c8bce7 8
fe14fcc3 9input=$1
10output=$2
11tmp=/tmp/f$$
12
93a17b20 13if test -f perly.c.diff; then
14 cp $input $output
15 patch -F3 <perly.c.diff
16 rm -rf $input
17 exit
18fi
19
35c8bce7 20plan="unknown"
21
22# Test for BSD 4.3 version.
9ef589d8 23# Also tests for the SunOS 4.0.2 version
fe14fcc3 24egrep 'YYSTYPE[ ]*yyv\[ *YYMAXDEPTH *\];
35c8bce7 25short[ ]*yys\[ *YYMAXDEPTH *\] *;
fe14fcc3 26yyps *= *&yys\[ *-1 *\];
27yypv *= *&yyv\[ *-1 *\];
9ef589d8 28if *\( *\+\+yyps *>=* *&yys\[ *YYMAXDEPTH *\] *\)' $input >$tmp
35c8bce7 29
fe14fcc3 30set `wc -l $tmp`
35c8bce7 31if test "$1" = "5"; then
32 plan="bsd43"
33fi
fe14fcc3 34
35c8bce7 35if test "$plan" = "unknown"; then
36 # Test for ISC 2.2 version.
37egrep 'YYSTYPE[ ]*yyv\[ *YYMAXDEPTH *\];
38int[ ]*yys\[ *YYMAXDEPTH *\] *;
39yyps *= *&yys\[ *-1 *\];
40yypv *= *&yyv\[ *-1 *\];
41if *\( *\+\+yy_ps *>= *&yys\[ *YYMAXDEPTH *\] *\)' $input >$tmp
42
43 set `wc -l $tmp`
44 if test "$1" = "5"; then
45 plan="isc"
46 fi
47fi
fe14fcc3 48
35c8bce7 49case "$plan" in
9ef589d8 50 ##################################################################
51 # The SunOS 4.0.2 version has the comparison fixed already.
52 # Also added are out of memory checks (makes porting the generated
53 # code easier) For most systems, it can't hurt. -- TD
35c8bce7 54 "bsd43")
55 echo "Patching perly.c to allow dynamic yacc stack allocation"
56 echo "Assuming bsd4.3 yaccpar"
57 cat >$tmp <<'END'
fe14fcc3 58/YYSTYPE[ ]*yyv\[ *YYMAXDEPTH *\];/c\
59int yymaxdepth = YYMAXDEPTH;\
60YYSTYPE *yyv; /* where the values are stored */\
61short *yys;\
62short *maxyyps;
63
64/short[ ]*yys\[ *YYMAXDEPTH *\] *;/d
65
66/yyps *= *&yys\[ *-1 *\];/d
67
68/yypv *= *&yyv\[ *-1 *\];/c\
69\ if (!yyv) {\
70\ yyv = (YYSTYPE*) malloc(yymaxdepth * sizeof(YYSTYPE));\
71\ yys = (short*) malloc(yymaxdepth * sizeof(short));\
9ef589d8 72\ if ( !yyv || !yys ) {\
73\ yyerror( "out of memory" );\
74\ return(1);\
75\ }\
fe14fcc3 76\ maxyyps = &yys[yymaxdepth];\
77\ }\
78\ yyps = &yys[-1];\
79\ yypv = &yyv[-1];
80
81
9ef589d8 82/if *( *\+\+yyps *>=* *&yys\[ *YYMAXDEPTH *\] *)/c\
fe14fcc3 83\ if( ++yyps >= maxyyps ) {\
84\ int tv = yypv - yyv;\
85\ int ts = yyps - yys;\
86\
87\ yymaxdepth *= 2;\
88\ yyv = (YYSTYPE*)realloc((char*)yyv,\
89\ yymaxdepth*sizeof(YYSTYPE));\
90\ yys = (short*)realloc((char*)yys,\
91\ yymaxdepth*sizeof(short));\
9ef589d8 92\ if ( !yyv || !yys ) {\
93\ yyerror( "yacc stack overflow" );\
94\ return(1);\
95\ }\
fe14fcc3 96\ yyps = yys + ts;\
97\ yypv = yyv + tv;\
98\ maxyyps = &yys[yymaxdepth];\
99\ }
100
101/yacc stack overflow.*}/d
102/yacc stack overflow/,/}/d
103END
35c8bce7 104 sed -f $tmp <$input >$output ;;
105
106 #######################################################
107 "isc") # Interactive Systems 2.2 version
108 echo "Patching perly.c to allow dynamic yacc stack allocation"
109 echo "Assuming Interactive SysVr3 2.2 yaccpar"
110 # Easier to simply put whole script here than to modify the
111 # bsd script with sed.
112 # Main changes: yaccpar sometimes uses yy_ps and yy_pv
113 # which are local register variables.
114 # if(++yyps > YYMAXDEPTH) had opening brace on next line.
115 # I've kept that brace in along with a call to yyerror if
116 # realloc fails. (Actually, I just don't know how to do
117 # multi-line matches in sed.)
118 cat > $tmp << 'END'
119/YYSTYPE[ ]*yyv\[ *YYMAXDEPTH *\];/c\
120int yymaxdepth = YYMAXDEPTH;\
121YYSTYPE *yyv; /* where the values are stored */\
122int *yys;\
123int *maxyyps;
124
125/int[ ]*yys\[ *YYMAXDEPTH *\] *;/d
126
127/yyps *= *&yys\[ *-1 *\];/d
128
129/yypv *= *&yyv\[ *-1 *\];/c\
130\ if (!yyv) {\
131\ yyv = (YYSTYPE*) malloc(yymaxdepth * sizeof(YYSTYPE));\
132\ yys = (int*) malloc(yymaxdepth * sizeof(int));\
133\ maxyyps = &yys[yymaxdepth];\
134\ }\
135\ yyps = &yys[-1];\
136\ yypv = &yyv[-1];
137
138/if *( *\+\+yy_ps *>= *&yys\[ *YYMAXDEPTH *\] *)/c\
139\ if( ++yy_ps >= maxyyps ) {\
140\ int tv = yy_pv - yyv;\
141\ int ts = yy_ps - yys;\
142\
143\ yymaxdepth *= 2;\
144\ yyv = (YYSTYPE*)realloc((char*)yyv,\
145\ yymaxdepth*sizeof(YYSTYPE));\
146\ yys = (int*)realloc((char*)yys,\
147\ yymaxdepth*sizeof(int));\
148\ yy_ps = yyps = yys + ts;\
149\ yy_pv = yypv = yyv + tv;\
150\ maxyyps = &yys[yymaxdepth];\
151\ }\
152\ if (yyv == NULL || yys == NULL)
153END
154 sed -f $tmp < $input > $output ;;
155
156 ######################################################
157 # Plan still unknown
79072805 158 *) sed -e 's/Received token/ *** Received token/' $input >$output;
35c8bce7 159esac
fe14fcc3 160
fe14fcc3 161rm -rf $tmp $input