Browse Source
A lot of cleanups... Removed old thread-safe code and other redundant code and files
experimental/newoperator
A lot of cleanups... Removed old thread-safe code and other redundant code and files
experimental/newoperator
55 changed files with 501 additions and 2221 deletions
-
705bison.simple
-
46control_structures.h
-
14ext/apache/apache.c
-
22ext/bcmath/bcmath.c
-
57ext/bcmath/number.c
-
5ext/ereg/ereg.c
-
2ext/hyperwave/hg_comm.c
-
73ext/hyperwave/hw.c
-
6ext/odbc/odbc.c
-
2ext/standard/base64.c
-
36ext/standard/basic_functions.c
-
23ext/standard/browscap.c
-
2ext/standard/datetime.c
-
30ext/standard/dir.c
-
7ext/standard/dl.c
-
8ext/standard/dns.c
-
9ext/standard/exec.c
-
99ext/standard/file.c
-
84ext/standard/filestat.c
-
33ext/standard/formatted_print.c
-
5ext/standard/fsock.c
-
108ext/standard/head.c
-
1ext/standard/html.c
-
2ext/standard/image.c
-
20ext/standard/info.c
-
1ext/standard/mail.c
-
10ext/standard/math.c
-
1ext/standard/md5.c
-
1ext/standard/microtime.c
-
2ext/standard/mime.c
-
3ext/standard/pack.c
-
34ext/standard/pageinfo.c
-
37ext/standard/post.c
-
5ext/standard/reg.c
-
62ext/standard/string.c
-
2ext/standard/uniqid.c
-
5ext/standard/url.c
-
2fhttpd.c
-
2main.h
-
16main/configuration-parser.y
-
24main/fopen_wrappers.c
-
696main/main.c
-
33main/php.h
-
15main/safe_mode.c
-
23mod_php3.c
-
4output.c
-
79php3_threads.c
-
33php3_threads.h
-
4php4.dsp
-
4php4ts.dsp
-
124request_info.c
-
12win32/pwd.c
-
55win32/sendmail.c
-
15win32/time.c
-
19win32/wsyslog.c
@ -1,705 +0,0 @@ |
|||
/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ |
|||
#line 3 "bison.simple" |
|||
|
|||
/* Skeleton output parser for bison, |
|||
Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. |
|||
|
|||
This program is free software; you can redistribute it and/or modify |
|||
it under the terms of the GNU General Public License as published by |
|||
the Free Software Foundation; either version 2, or (at your option) |
|||
any later version. |
|||
|
|||
This program is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program; if not, write to the Free Software |
|||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ |
|||
|
|||
/* As a special exception, when this file is copied by Bison into a |
|||
Bison output file, you may use that output file without restriction. |
|||
This special exception was added by the Free Software Foundation |
|||
in version 1.24 of Bison. */ |
|||
|
|||
#ifndef alloca |
|||
#ifdef __GNUC__ |
|||
#define alloca __builtin_alloca |
|||
#else /* not GNU C. */ |
|||
#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) |
|||
#include <alloca.h> |
|||
#else /* not sparc */ |
|||
#if defined (MSDOS) && !defined (__TURBOC__) |
|||
#include <malloc.h> |
|||
#else /* not MSDOS, or __TURBOC__ */ |
|||
#if defined(_AIX) |
|||
#include <malloc.h> |
|||
#pragma alloca |
|||
#else /* not MSDOS, __TURBOC__, or _AIX */ |
|||
#ifdef __hpux |
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
void *alloca (unsigned int); |
|||
}; |
|||
#else /* not __cplusplus */ |
|||
void *alloca (); |
|||
#endif /* not __cplusplus */ |
|||
#endif /* __hpux */ |
|||
#endif /* not _AIX */ |
|||
#endif /* not MSDOS, or __TURBOC__ */ |
|||
#endif /* not sparc. */ |
|||
#endif /* not GNU C. */ |
|||
#endif /* alloca not defined. */ |
|||
|
|||
/* This is the parser code that is written into each bison parser |
|||
when the %semantic_parser declaration is not specified in the grammar. |
|||
It was written by Richard Stallman by simplifying the hairy parser |
|||
used when %semantic_parser is specified. */ |
|||
|
|||
/* Note: there must be only one dollar sign in this file. |
|||
It is replaced by the list of actions, each action |
|||
as one case of the switch. */ |
|||
|
|||
#define yyerrok (yyerrstatus = 0) |
|||
#define yyclearin (yychar = YYEMPTY) |
|||
#define YYEMPTY -2 |
|||
#define YYEOF 0 |
|||
#define YYACCEPT return(0) |
|||
#define YYABORT return(1) |
|||
#define YYERROR goto yyerrlab1 |
|||
/* Like YYERROR except do call yyerror. |
|||
This remains here temporarily to ease the |
|||
transition to the new meaning of YYERROR, for GCC. |
|||
Once GCC version 2 has supplanted version 1, this can go. */ |
|||
#define YYFAIL goto yyerrlab |
|||
#define YYRECOVERING() (!!yyerrstatus) |
|||
#define YYBACKUP(token, value) \ |
|||
do \ |
|||
if (yychar == YYEMPTY && yylen == 1) \ |
|||
{ yychar = (token), yylval = (value); \ |
|||
yychar1 = YYTRANSLATE (yychar); \ |
|||
YYPOPSTACK; \ |
|||
goto yybackup; \ |
|||
} \ |
|||
else \ |
|||
{ yyerror ("syntax error: cannot back up"); YYERROR; } \ |
|||
while (0) |
|||
|
|||
#define YYTERROR 1 |
|||
#define YYERRCODE 256 |
|||
|
|||
#ifndef YYPURE |
|||
#define YYLEX yylex() |
|||
#endif |
|||
|
|||
#ifdef YYPURE |
|||
#ifdef YYLSP_NEEDED |
|||
#ifdef YYLEX_PARAM |
|||
#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM) |
|||
#else |
|||
#define YYLEX yylex(&yylval, &yylloc) |
|||
#endif |
|||
#else /* not YYLSP_NEEDED */ |
|||
#ifdef YYLEX_PARAM |
|||
#define YYLEX yylex(&yylval, YYLEX_PARAM) |
|||
#else |
|||
#ifdef PHP3_THREAD_SAFE /* PHP 3 Specific useage */ |
|||
#define YYLEX yylex(&yylval,php3_globals,php_gbl) |
|||
#else |
|||
#define YYLEX yylex(&yylval) |
|||
#endif /* not using tls */ |
|||
#endif |
|||
#endif /* not YYLSP_NEEDED */ |
|||
#endif |
|||
|
|||
/* If nonreentrant, generate the variables here */ |
|||
|
|||
#ifndef YYPURE |
|||
|
|||
int yychar; /* the lookahead symbol */ |
|||
YYSTYPE yylval; /* the semantic value of the */ |
|||
/* lookahead symbol */ |
|||
|
|||
#ifdef YYLSP_NEEDED |
|||
YYLTYPE yylloc; /* location data for the lookahead */ |
|||
/* symbol */ |
|||
#endif |
|||
|
|||
int yynerrs; /* number of parse errors so far */ |
|||
#endif /* not YYPURE */ |
|||
|
|||
#if YYDEBUG != 0 |
|||
int yydebug; /* nonzero means print parse trace */ |
|||
/* Since this is uninitialized, it does not stop multiple parsers |
|||
from coexisting. */ |
|||
#endif |
|||
|
|||
/* YYINITDEPTH indicates the initial size of the parser's stacks */ |
|||
|
|||
#ifndef YYINITDEPTH |
|||
#define YYINITDEPTH 200 |
|||
#endif |
|||
|
|||
/* YYMAXDEPTH is the maximum size the stacks can grow to |
|||
(effective only if the built-in stack extension method is used). */ |
|||
|
|||
#if YYMAXDEPTH == 0 |
|||
#undef YYMAXDEPTH |
|||
#endif |
|||
|
|||
#ifndef YYMAXDEPTH |
|||
#define YYMAXDEPTH 10000 |
|||
#endif |
|||
|
|||
/* Prevent warning if -Wstrict-prototypes. */ |
|||
#ifdef __GNUC__ |
|||
/* int yyparse (void); */ |
|||
#endif |
|||
|
|||
#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ |
|||
#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) |
|||
#else /* not GNU C or C++ */ |
|||
#ifndef __cplusplus |
|||
|
|||
/* This is the most reliable way to avoid incompatibilities |
|||
in available built-in functions on various systems. */ |
|||
static void |
|||
__yy_memcpy (to, from, count) |
|||
char *to; |
|||
char *from; |
|||
int count; |
|||
{ |
|||
register char *f = from; |
|||
register char *t = to; |
|||
register int i = count; |
|||
|
|||
while (i-- > 0) |
|||
*t++ = *f++; |
|||
} |
|||
|
|||
#else /* __cplusplus */ |
|||
|
|||
/* This is the most reliable way to avoid incompatibilities |
|||
in available built-in functions on various systems. */ |
|||
static void |
|||
__yy_memcpy (char *to, char *from, int count) |
|||
{ |
|||
register char *f = from; |
|||
register char *t = to; |
|||
register int i = count; |
|||
|
|||
while (i-- > 0) |
|||
*t++ = *f++; |
|||
} |
|||
|
|||
#endif |
|||
#endif |
|||
|
|||
#line 196 "bison.simple" |
|||
|
|||
/* The user can define YYPARSE_PARAM as the name of an argument to be passed |
|||
into yyparse. The argument should have type void *. |
|||
It should actually point to an object. |
|||
Grammar actions can access the variable by casting it |
|||
to the proper pointer type. */ |
|||
|
|||
#ifdef YYPARSE_PARAM |
|||
#ifdef __cplusplus |
|||
#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM |
|||
#define YYPARSE_PARAM_DECL |
|||
#else /* not __cplusplus */ |
|||
#define YYPARSE_PARAM_ARG YYPARSE_PARAM |
|||
#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; |
|||
#endif /* not __cplusplus */ |
|||
#else /* not YYPARSE_PARAM */ |
|||
#define YYPARSE_PARAM_ARG |
|||
#define YYPARSE_PARAM_DECL |
|||
#endif /* not YYPARSE_PARAM */ |
|||
|
|||
#ifndef TLS_VARS |
|||
#define TLS_VARS |
|||
#endif |
|||
#ifndef YY_TLS_VARS |
|||
#define YY_TLS_VARS |
|||
#endif |
|||
|
|||
int |
|||
yyparse(YYPARSE_PARAM_ARG) |
|||
YYPARSE_PARAM_DECL |
|||
{ |
|||
register int yystate; |
|||
register int yyn; |
|||
register short *yyssp; |
|||
register YYSTYPE *yyvsp; |
|||
int yyerrstatus; /* number of tokens to shift before error messages enabled */ |
|||
int yychar1 = 0; /* lookahead token as an internal (translated) token number */ |
|||
|
|||
short yyssa[YYINITDEPTH]; /* the state stack */ |
|||
YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */ |
|||
|
|||
short *yyss = yyssa; /* refer to the stacks thru separate pointers */ |
|||
YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */ |
|||
|
|||
#ifdef YYLSP_NEEDED |
|||
YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */ |
|||
YYLTYPE *yyls = yylsa; |
|||
YYLTYPE *yylsp; |
|||
|
|||
#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) |
|||
#else |
|||
#define YYPOPSTACK (yyvsp--, yyssp--) |
|||
#endif |
|||
|
|||
int yystacksize = YYINITDEPTH; |
|||
|
|||
#ifdef YYPURE |
|||
int yychar; |
|||
YYSTYPE yylval; |
|||
int yynerrs; |
|||
#ifdef YYLSP_NEEDED |
|||
YYLTYPE yylloc; |
|||
#endif |
|||
#endif |
|||
|
|||
YYSTYPE yyval; /* the variable used to return */ |
|||
/* semantic values from the action */ |
|||
/* routines */ |
|||
|
|||
int yylen; |
|||
YY_TLS_VARS; |
|||
TLS_VARS; |
|||
|
|||
#if YYDEBUG != 0 |
|||
if (yydebug) |
|||
fprintf(stderr, "Starting parse\n"); |
|||
#endif |
|||
|
|||
yystate = 0; |
|||
yyerrstatus = 0; |
|||
yynerrs = 0; |
|||
yychar = YYEMPTY; /* Cause a token to be read. */ |
|||
|
|||
/* Initialize stack pointers. |
|||
Waste one element of value and location stack |
|||
so that they stay on the same level as the state stack. |
|||
The wasted elements are never initialized. */ |
|||
|
|||
yyssp = yyss - 1; |
|||
yyvsp = yyvs; |
|||
#ifdef YYLSP_NEEDED |
|||
yylsp = yyls; |
|||
#endif |
|||
|
|||
/* Push a new state, which is found in yystate . */ |
|||
/* In all cases, when you get here, the value and location stacks |
|||
have just been pushed. so pushing a state here evens the stacks. */ |
|||
yynewstate: |
|||
|
|||
*++yyssp = yystate; |
|||
|
|||
if (yyssp >= yyss + yystacksize - 1) |
|||
{ |
|||
/* Give user a chance to reallocate the stack */ |
|||
/* Use copies of these so that the &'s don't force the real ones into memory. */ |
|||
YYSTYPE *yyvs1 = yyvs; |
|||
short *yyss1 = yyss; |
|||
#ifdef YYLSP_NEEDED |
|||
YYLTYPE *yyls1 = yyls; |
|||
#endif |
|||
|
|||
/* Get the current used size of the three stacks, in elements. */ |
|||
int size = yyssp - yyss + 1; |
|||
|
|||
#ifdef yyoverflow |
|||
/* Each stack pointer address is followed by the size of |
|||
the data in use in that stack, in bytes. */ |
|||
#ifdef YYLSP_NEEDED |
|||
/* This used to be a conditional around just the two extra args, |
|||
but that might be undefined if yyoverflow is a macro. */ |
|||
yyoverflow("parser stack overflow", |
|||
&yyss1, size * sizeof (*yyssp), |
|||
&yyvs1, size * sizeof (*yyvsp), |
|||
&yyls1, size * sizeof (*yylsp), |
|||
&yystacksize); |
|||
#else |
|||
yyoverflow("parser stack overflow", |
|||
&yyss1, size * sizeof (*yyssp), |
|||
&yyvs1, size * sizeof (*yyvsp), |
|||
&yystacksize); |
|||
#endif |
|||
|
|||
yyss = yyss1; yyvs = yyvs1; |
|||
#ifdef YYLSP_NEEDED |
|||
yyls = yyls1; |
|||
#endif |
|||
#else /* no yyoverflow */ |
|||
/* Extend the stack our own way. */ |
|||
if (yystacksize >= YYMAXDEPTH) |
|||
{ |
|||
yyerror("parser stack overflow"); |
|||
return 2; |
|||
} |
|||
yystacksize *= 2; |
|||
if (yystacksize > YYMAXDEPTH) |
|||
yystacksize = YYMAXDEPTH; |
|||
yyss = (short *) alloca (yystacksize * sizeof (*yyssp)); |
|||
__yy_memcpy ((char *)yyss, (char *)yyss1, size * sizeof (*yyssp)); |
|||
yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp)); |
|||
__yy_memcpy ((char *)yyvs, (char *)yyvs1, size * sizeof (*yyvsp)); |
|||
#ifdef YYLSP_NEEDED |
|||
yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp)); |
|||
__yy_memcpy ((char *)yyls, (char *)yyls1, size * sizeof (*yylsp)); |
|||
#endif |
|||
#endif /* no yyoverflow */ |
|||
|
|||
yyssp = yyss + size - 1; |
|||
yyvsp = yyvs + size - 1; |
|||
#ifdef YYLSP_NEEDED |
|||
yylsp = yyls + size - 1; |
|||
#endif |
|||
|
|||
#if YYDEBUG != 0 |
|||
if (yydebug) |
|||
fprintf(stderr, "Stack size increased to %d\n", yystacksize); |
|||
#endif |
|||
|
|||
if (yyssp >= yyss + yystacksize - 1) |
|||
YYABORT; |
|||
} |
|||
|
|||
#if YYDEBUG != 0 |
|||
if (yydebug) |
|||
fprintf(stderr, "Entering state %d\n", yystate); |
|||
#endif |
|||
|
|||
goto yybackup; |
|||
yybackup: |
|||
|
|||
/* Do appropriate processing given the current state. */ |
|||
/* Read a lookahead token if we need one and don't already have one. */ |
|||
/* yyresume: */ |
|||
|
|||
/* First try to decide what to do without reference to lookahead token. */ |
|||
|
|||
yyn = yypact[yystate]; |
|||
if (yyn == YYFLAG) |
|||
goto yydefault; |
|||
|
|||
/* Not known => get a lookahead token if don't already have one. */ |
|||
|
|||
/* yychar is either YYEMPTY or YYEOF |
|||
or a valid token in external form. */ |
|||
|
|||
if (yychar == YYEMPTY) |
|||
{ |
|||
#if YYDEBUG != 0 |
|||
if (yydebug) |
|||
fprintf(stderr, "Reading a token: "); |
|||
#endif |
|||
yychar = YYLEX; |
|||
} |
|||
|
|||
/* Convert token to internal form (in yychar1) for indexing tables with */ |
|||
|
|||
if (yychar <= 0) /* This means end of input. */ |
|||
{ |
|||
yychar1 = 0; |
|||
yychar = YYEOF; /* Don't call YYLEX any more */ |
|||
|
|||
#if YYDEBUG != 0 |
|||
if (yydebug) |
|||
fprintf(stderr, "Now at end of input.\n"); |
|||
#endif |
|||
} |
|||
else |
|||
{ |
|||
yychar1 = YYTRANSLATE(yychar); |
|||
|
|||
#if YYDEBUG != 0 |
|||
if (yydebug) |
|||
{ |
|||
fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]); |
|||
/* Give the individual parser a way to print the precise meaning |
|||
of a token, for further debugging info. */ |
|||
#ifdef YYPRINT |
|||
YYPRINT (stderr, yychar, yylval); |
|||
#endif |
|||
fprintf (stderr, ")\n"); |
|||
} |
|||
#endif |
|||
} |
|||
|
|||
yyn += yychar1; |
|||
if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) |
|||
goto yydefault; |
|||
|
|||
yyn = yytable[yyn]; |
|||
|
|||
/* yyn is what to do for this token type in this state. |
|||
Negative => reduce, -yyn is rule number. |
|||
Positive => shift, yyn is new state. |
|||
New state is final state => don't bother to shift, |
|||
just return success. |
|||
0, or most negative number => error. */ |
|||
|
|||
if (yyn < 0) |
|||
{ |
|||
if (yyn == YYFLAG) |
|||
goto yyerrlab; |
|||
yyn = -yyn; |
|||
goto yyreduce; |
|||
} |
|||
else if (yyn == 0) |
|||
goto yyerrlab; |
|||
|
|||
if (yyn == YYFINAL) |
|||
YYACCEPT; |
|||
|
|||
/* Shift the lookahead token. */ |
|||
|
|||
#if YYDEBUG != 0 |
|||
if (yydebug) |
|||
fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); |
|||
#endif |
|||
|
|||
/* Discard the token being shifted unless it is eof. */ |
|||
if (yychar != YYEOF) |
|||
yychar = YYEMPTY; |
|||
|
|||
*++yyvsp = yylval; |
|||
#ifdef YYLSP_NEEDED |
|||
*++yylsp = yylloc; |
|||
#endif |
|||
|
|||
/* count tokens shifted since error; after three, turn off error status. */ |
|||
if (yyerrstatus) yyerrstatus--; |
|||
|
|||
yystate = yyn; |
|||
goto yynewstate; |
|||
|
|||
/* Do the default action for the current state. */ |
|||
yydefault: |
|||
|
|||
yyn = yydefact[yystate]; |
|||
if (yyn == 0) |
|||
goto yyerrlab; |
|||
|
|||
/* Do a reduction. yyn is the number of a rule to reduce with. */ |
|||
yyreduce: |
|||
yylen = yyr2[yyn]; |
|||
if (yylen > 0) |
|||
yyval = yyvsp[1-yylen]; /* implement default value of the action */ |
|||
|
|||
#if YYDEBUG != 0 |
|||
if (yydebug) |
|||
{ |
|||
int i; |
|||
|
|||
fprintf (stderr, "Reducing via rule %d (line %d), ", |
|||
yyn, yyrline[yyn]); |
|||
|
|||
/* Print the symbols being reduced, and their result. */ |
|||
for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) |
|||
fprintf (stderr, "%s ", yytname[yyrhs[i]]); |
|||
fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); |
|||
} |
|||
#endif |
|||
|
|||
$ /* the action file gets copied in in place of this dollarsign */ |
|||
#line 498 "bison.simple" |
|||
|
|||
yyvsp -= yylen; |
|||
yyssp -= yylen; |
|||
#ifdef YYLSP_NEEDED |
|||
yylsp -= yylen; |
|||
#endif |
|||
|
|||
#if YYDEBUG != 0 |
|||
if (yydebug) |
|||
{ |
|||
short *ssp1 = yyss - 1; |
|||
fprintf (stderr, "state stack now"); |
|||
while (ssp1 != yyssp) |
|||
fprintf (stderr, " %d", *++ssp1); |
|||
fprintf (stderr, "\n"); |
|||
} |
|||
#endif |
|||
|
|||
*++yyvsp = yyval; |
|||
|
|||
#ifdef YYLSP_NEEDED |
|||
yylsp++; |
|||
if (yylen == 0) |
|||
{ |
|||
yylsp->first_line = yylloc.first_line; |
|||
yylsp->first_column = yylloc.first_column; |
|||
yylsp->last_line = (yylsp-1)->last_line; |
|||
yylsp->last_column = (yylsp-1)->last_column; |
|||
yylsp->text = 0; |
|||
} |
|||
else |
|||
{ |
|||
yylsp->last_line = (yylsp+yylen-1)->last_line; |
|||
yylsp->last_column = (yylsp+yylen-1)->last_column; |
|||
} |
|||
#endif |
|||
|
|||
/* Now "shift" the result of the reduction. |
|||
Determine what state that goes to, |
|||
based on the state we popped back to |
|||
and the rule number reduced by. */ |
|||
|
|||
yyn = yyr1[yyn]; |
|||
|
|||
yystate = yypgoto[yyn - YYNTBASE] + *yyssp; |
|||
if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) |
|||
yystate = yytable[yystate]; |
|||
else |
|||
yystate = yydefgoto[yyn - YYNTBASE]; |
|||
|
|||
goto yynewstate; |
|||
|
|||
yyerrlab: /* here on detecting error */ |
|||
|
|||
if (! yyerrstatus) |
|||
/* If not already recovering from an error, report this error. */ |
|||
{ |
|||
++yynerrs; |
|||
|
|||
#ifdef YYERROR_VERBOSE |
|||
yyn = yypact[yystate]; |
|||
|
|||
if (yyn > YYFLAG && yyn < YYLAST) |
|||
{ |
|||
int size = 0; |
|||
char *msg; |
|||
int x, count; |
|||
|
|||
count = 0; |
|||
/* Start X at -yyn if nec to avoid negative indexes in yycheck. */ |
|||
for (x = (yyn < 0 ? -yyn : 0); |
|||
x < (sizeof(yytname) / sizeof(char *)); x++) |
|||
if (yycheck[x + yyn] == x) |
|||
size += strlen(yytname[x]) + 15, count++; |
|||
msg = (char *) malloc(size + 15); |
|||
if (msg != 0) |
|||
{ |
|||
strcpy(msg, "parse error"); |
|||
|
|||
if (count < 5) |
|||
{ |
|||
count = 0; |
|||
for (x = (yyn < 0 ? -yyn : 0); |
|||
x < (sizeof(yytname) / sizeof(char *)); x++) |
|||
if (yycheck[x + yyn] == x) |
|||
{ |
|||
strcat(msg, count == 0 ? ", expecting `" : " or `"); |
|||
strcat(msg, yytname[x]); |
|||
strcat(msg, "'"); |
|||
count++; |
|||
} |
|||
} |
|||
yyerror(msg); |
|||
free(msg); |
|||
} |
|||
else |
|||
yyerror ("parse error; also virtual memory exceeded"); |
|||
} |
|||
else |
|||
#endif /* YYERROR_VERBOSE */ |
|||
yyerror("parse error"); |
|||
} |
|||
|
|||
goto yyerrlab1; |
|||
yyerrlab1: /* here on error raised explicitly by an action */ |
|||
|
|||
if (yyerrstatus == 3) |
|||
{ |
|||
/* if just tried and failed to reuse lookahead token after an error, discard it. */ |
|||
|
|||
/* return failure if at end of input */ |
|||
if (yychar == YYEOF) |
|||
YYABORT; |
|||
|
|||
#if YYDEBUG != 0 |
|||
if (yydebug) |
|||
fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]); |
|||
#endif |
|||
|
|||
yychar = YYEMPTY; |
|||
} |
|||
|
|||
/* Else will try to reuse lookahead token |
|||
after shifting the error token. */ |
|||
|
|||
yyerrstatus = 3; /* Each real token shifted decrements this */ |
|||
|
|||
goto yyerrhandle; |
|||
|
|||
yyerrdefault: /* current state does not do anything special for the error token. */ |
|||
|
|||
#if 0 |
|||
/* This is wrong; only states that explicitly want error tokens |
|||
should shift them. */ |
|||
yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/ |
|||
if (yyn) goto yydefault; |
|||
#endif |
|||
|
|||
yyerrpop: /* pop the current state because it cannot handle the error token */ |
|||
|
|||
if (yyssp == yyss) YYABORT; |
|||
yyvsp--; |
|||
yystate = *--yyssp; |
|||
#ifdef YYLSP_NEEDED |
|||
yylsp--; |
|||
#endif |
|||
|
|||
#if YYDEBUG != 0 |
|||
if (yydebug) |
|||
{ |
|||
short *ssp1 = yyss - 1; |
|||
fprintf (stderr, "Error: state stack now"); |
|||
while (ssp1 != yyssp) |
|||
fprintf (stderr, " %d", *++ssp1); |
|||
fprintf (stderr, "\n"); |
|||
} |
|||
#endif |
|||
|
|||
yyerrhandle: |
|||
|
|||
yyn = yypact[yystate]; |
|||
if (yyn == YYFLAG) |
|||
goto yyerrdefault; |
|||
|
|||
yyn += YYTERROR; |
|||
if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) |
|||
goto yyerrdefault; |
|||
|
|||
yyn = yytable[yyn]; |
|||
if (yyn < 0) |
|||
{ |
|||
if (yyn == YYFLAG) |
|||
goto yyerrpop; |
|||
yyn = -yyn; |
|||
goto yyreduce; |
|||
} |
|||
else if (yyn == 0) |
|||
goto yyerrpop; |
|||
|
|||
if (yyn == YYFINAL) |
|||
YYACCEPT; |
|||
|
|||
#if YYDEBUG != 0 |
|||
if (yydebug) |
|||
fprintf(stderr, "Shifting error token, "); |
|||
#endif |
|||
|
|||
*++yyvsp = yylval; |
|||
#ifdef YYLSP_NEEDED |
|||
*++yylsp = yylloc; |
|||
#endif |
|||
|
|||
yystate = yyn; |
|||
goto yynewstate; |
|||
} |
|||
@ -1,46 +0,0 @@ |
|||
/* |
|||
+----------------------------------------------------------------------+ |
|||
| PHP HTML Embedded Scripting Language Version 3.0 | |
|||
+----------------------------------------------------------------------+ |
|||
| Copyright (c) 1997,1998 PHP Development Team (See Credits file) | |
|||
+----------------------------------------------------------------------+ |
|||
| This program is free software; you can redistribute it and/or modify | |
|||
| it under the terms of one of the following licenses: | |
|||
| | |
|||
| A) the GNU General Public License as published by the Free Software | |
|||
| Foundation; either version 2 of the License, or (at your option) | |
|||
| any later version. | |
|||
| | |
|||
| B) the PHP License as published by the PHP Development Team and | |
|||
| included in the distribution in the file: LICENSE | |
|||
| | |
|||
| This program is distributed in the hope that it will be useful, | |
|||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |
|||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
|||
| GNU General Public License for more details. | |
|||
| | |
|||
| You should have received a copy of both licenses referred to here. | |
|||
| If you did not, or have any questions about PHP licensing, please | |
|||
| contact core@php.net. | |
|||
+----------------------------------------------------------------------+ |
|||
| Authors: Andi Gutmans <andi@zend.com> | |
|||
| Zeev Suraski <zeev@zend.com> | |
|||
+----------------------------------------------------------------------+ |
|||
*/ |
|||
|
|||
|
|||
/* $Id$ */ |
|||
|
|||
|
|||
#ifndef _CONTROL_STRUCTURES_H |
|||
#define _CONTROL_STRUCTURES_H |
|||
|
|||
#ifndef THREAD_SAFE |
|||
extern unsigned int param_index; |
|||
extern char *class_name; |
|||
extern HashTable *class_symbol_table; |
|||
#endif |
|||
|
|||
extern inline void start_display_source(int start_in_php INLINE_TLS); |
|||
|
|||
#endif |
|||
@ -1,79 +0,0 @@ |
|||
#include <stdio.h> |
|||
#include "alloc.h" |
|||
#include <errno.h> |
|||
#if (WIN32|WINNT) |
|||
#include <windows.h> |
|||
#else |
|||
#include <pthread.h> |
|||
#endif |
|||
#include "php3_threads.h" |
|||
|
|||
/* Function for allocating memory for mutexes */ |
|||
static void *php3_mutex_alloc( void ) |
|||
{ |
|||
MUTEX_T *mutexp; |
|||
/* Allocate memory for the mutex and initialize it */ |
|||
if ( (mutexp = emalloc( sizeof(MUTEX_T) )) != NULL ) { |
|||
MUTEX_INIT( mutexp, NULL ); |
|||
} |
|||
return( mutexp ); |
|||
} |
|||
|
|||
/* Function for freeing mutexes */ |
|||
static void php3_mutex_free( void *mutexp ) |
|||
{ |
|||
MUTEX_DESTROY( (MUTEX_T *) mutexp ); |
|||
} |
|||
|
|||
static void php3_mutex_lock( void *mutexp ) |
|||
{ |
|||
return MUTEX_LOCK(mutexp); |
|||
} |
|||
|
|||
static void php3_mutex_unlock( void *mutexp ) |
|||
{ |
|||
return MUTEX_UNLOCK(mutexp); |
|||
} |
|||
|
|||
/* Function for setting up thread-specific data */ |
|||
/* should be called at thread start */ |
|||
int php3_tls_init(void *key,void *tsd,int size) |
|||
{ |
|||
/* Check if thread-specific data already exists */ |
|||
tsd = TLS_GET_DATA( key ); |
|||
if ( tsd != NULL ) { |
|||
/*FIXME what kind of output here? */ |
|||
fprintf( stderr, "php3_tls_setup tls var non-null!\n" ); |
|||
THREAD_EXIT( NULL ); |
|||
} |
|||
/* Allocate memory for the LDAP error values */ |
|||
tsd = (void *) ecalloc( 1, size ); |
|||
/* Make the data specific to the calling thread */ |
|||
TLS_SET_DATA( key, tsd ); |
|||
} |
|||
|
|||
/*should be called before thread exit*/ |
|||
int php3_tls_free(void *key, void *tsd) |
|||
{ |
|||
if (tsd)efree(tsd); |
|||
} |
|||
|
|||
/*should be called at dl or process startup*/ |
|||
int php3_tls_startup(void *key) |
|||
{ |
|||
if (key == NULL){ |
|||
if (TLS_ALLOC(key)==TLS_NOT_ALLOCED) |
|||
return 0; |
|||
} |
|||
return 1; |
|||
} |
|||
|
|||
/*should be called before dl or process exit*/ |
|||
int php3_tls_shutdown(void *key) |
|||
{ |
|||
if (key != NULL){ |
|||
if (!TLS_FREE(key)) |
|||
return 0; |
|||
} |
|||
return 1; |
|||
} |
|||
@ -1,33 +0,0 @@ |
|||
|
|||
#if WIN32|WINNT |
|||
#define MUTEX_T void |
|||
#define MUTEX_INIT(a,b) (a=CreateMutex(b,FALSE,NULL)) |
|||
#define MUTEX_DESTROY(a) CloseHandle(a) |
|||
#define MUTEX_LOCK(a) WaitForSingleObject(a,INFINITE) |
|||
#define MUTEX_UNLOCK(a) ReleaseMutex(a) |
|||
#define TLS_ALLOC(a) (a=TlsAlloc()) |
|||
#define TLS_NOT_ALLOCED 0xFFFFFFFF |
|||
#define TLS_GET_DATA(a) TlsGetValue(a) |
|||
#define TLS_SET_DATA(a,b) TlsSetValue(a,b) |
|||
#define TLS_FREE(a) TlsFree(a) |
|||
#else /*PTHREADS*/ |
|||
#define MUTEX_T pthread_mutex_t |
|||
#define MUTEX_INIT(a,b) pthread_mutex_init(a,b) |
|||
#define MUTEX_DESTROY(a) pthread_mutex_destroy(a) |
|||
#define MUTEX_LOCK(a) pthread_mutex_lock(a) |
|||
#define MUTEX_UNLOCK(a) pthread_mutex_unlock(a) |
|||
#define TLS_ALLOC(a) |
|||
#define TLS_NOT_ALLOCED NULL |
|||
#define TLS_GET_DATA(a) pthread_getspecific(a) |
|||
#define TLS_SET_DATA(a,b) pthread_setspecific(a,b) |
|||
#define TLS_FREE(a) |
|||
#endif |
|||
|
|||
extern static void *php3_mutex_alloc( void ); |
|||
extern static void php3_mutex_free( void *mutexp ); |
|||
extern static void php3_mutex_lock( void *mutexp ); |
|||
extern static void php3_mutex_unlock( void *mutexp ); |
|||
extern int php3_tls_init(void *key,void *tsd,int size); |
|||
extern int php3_tls_free(void *key, void *tsd); |
|||
extern int php3_tls_startup(void *key); |
|||
extern int php3_tls_shutdown(void *key); |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue