Main Page | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

wsgram.c

Go to the documentation of this file.
00001 /* A Bison parser, made by GNU Bison 1.875.  */
00002 
00003 /* Skeleton parser for Yacc-like parsing with Bison,
00004    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
00005 
00006    This program is free software; you can redistribute it and/or modify
00007    it under the terms of the GNU General Public License as published by
00008    the Free Software Foundation; either version 2, or (at your option)
00009    any later version.
00010 
00011    This program is distributed in the hope that it will be useful,
00012    but WITHOUT ANY WARRANTY; without even the implied warranty of
00013    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014    GNU General Public License for more details.
00015 
00016    You should have received a copy of the GNU General Public License
00017    along with this program; if not, write to the Free Software
00018    Foundation, Inc., 59 Temple Place - Suite 330,
00019    Boston, MA 02111-1307, USA.  */
00020 
00021 /* As a special exception, when this file is copied by Bison into a
00022    Bison output file, you may use that output file without restriction.
00023    This special exception was added by the Free Software Foundation
00024    in version 1.24 of Bison.  */
00025 
00026 /* Written by Richard Stallman by simplifying the original so called
00027    ``semantic'' parser.  */
00028 
00029 /* All symbols defined below should begin with yy or YY, to avoid
00030    infringing on user name space.  This should be done even for local
00031    variables, as they might otherwise be expanded by user macros.
00032    There are some unavoidable exceptions within include files to
00033    define necessary library symbols; they are noted "INFRINGES ON
00034    USER NAME SPACE" below.  */
00035 
00036 /* Identify Bison output.  */
00037 #define YYBISON 1
00038 
00039 /* Skeleton name.  */
00040 #define YYSKELETON_NAME "yacc.c"
00041 
00042 /* Pure parsers.  */
00043 #define YYPURE 1
00044 
00045 /* Using locations.  */
00046 #define YYLSP_NEEDED 1
00047 
00048 /* If NAME_PREFIX is specified substitute the variables and functions
00049    names.  */
00050 #define yyparse ws_yy_parse
00051 #define yylex   ws_yy_lex
00052 #define yyerror ws_yy_error
00053 #define yylval  ws_yy_lval
00054 #define yychar  ws_yy_char
00055 #define yydebug ws_yy_debug
00056 #define yynerrs ws_yy_nerrs
00057 #define yylloc ws_yy_lloc
00058 
00059 /* Tokens.  */
00060 #ifndef YYTOKENTYPE
00061 # define YYTOKENTYPE
00062    /* Put the tokens into the symbol table, so that GDB and other debuggers
00063       know about them.  */
00064    enum yytokentype {
00065      tINVALID = 258,
00066      tTRUE = 259,
00067      tFALSE = 260,
00068      tINTEGER = 261,
00069      tFLOAT = 262,
00070      tSTRING = 263,
00071      tIDENTIFIER = 264,
00072      tACCESS = 265,
00073      tAGENT = 266,
00074      tBREAK = 267,
00075      tCONTINUE = 268,
00076      tIDIV = 269,
00077      tIDIVA = 270,
00078      tDOMAIN = 271,
00079      tELSE = 272,
00080      tEQUIV = 273,
00081      tEXTERN = 274,
00082      tFOR = 275,
00083      tFUNCTION = 276,
00084      tHEADER = 277,
00085      tHTTP = 278,
00086      tIF = 279,
00087      tISVALID = 280,
00088      tMETA = 281,
00089      tNAME = 282,
00090      tPATH = 283,
00091      tRETURN = 284,
00092      tTYPEOF = 285,
00093      tUSE = 286,
00094      tUSER = 287,
00095      tVAR = 288,
00096      tWHILE = 289,
00097      tURL = 290,
00098      tDELETE = 291,
00099      tIN = 292,
00100      tLIB = 293,
00101      tNEW = 294,
00102      tNULL = 295,
00103      tTHIS = 296,
00104      tVOID = 297,
00105      tWITH = 298,
00106      tCASE = 299,
00107      tCATCH = 300,
00108      tCLASS = 301,
00109      tCONST = 302,
00110      tDEBUGGER = 303,
00111      tDEFAULT = 304,
00112      tDO = 305,
00113      tENUM = 306,
00114      tEXPORT = 307,
00115      tEXTENDS = 308,
00116      tFINALLY = 309,
00117      tIMPORT = 310,
00118      tPRIVATE = 311,
00119      tPUBLIC = 312,
00120      tSIZEOF = 313,
00121      tSTRUCT = 314,
00122      tSUPER = 315,
00123      tSWITCH = 316,
00124      tTHROW = 317,
00125      tTRY = 318,
00126      tEQ = 319,
00127      tLE = 320,
00128      tGE = 321,
00129      tNE = 322,
00130      tAND = 323,
00131      tOR = 324,
00132      tPLUSPLUS = 325,
00133      tMINUSMINUS = 326,
00134      tLSHIFT = 327,
00135      tRSSHIFT = 328,
00136      tRSZSHIFT = 329,
00137      tADDA = 330,
00138      tSUBA = 331,
00139      tMULA = 332,
00140      tDIVA = 333,
00141      tANDA = 334,
00142      tORA = 335,
00143      tXORA = 336,
00144      tREMA = 337,
00145      tLSHIFTA = 338,
00146      tRSSHIFTA = 339,
00147      tRSZSHIFTA = 340
00148    };
00149 #endif
00150 #define tINVALID 258
00151 #define tTRUE 259
00152 #define tFALSE 260
00153 #define tINTEGER 261
00154 #define tFLOAT 262
00155 #define tSTRING 263
00156 #define tIDENTIFIER 264
00157 #define tACCESS 265
00158 #define tAGENT 266
00159 #define tBREAK 267
00160 #define tCONTINUE 268
00161 #define tIDIV 269
00162 #define tIDIVA 270
00163 #define tDOMAIN 271
00164 #define tELSE 272
00165 #define tEQUIV 273
00166 #define tEXTERN 274
00167 #define tFOR 275
00168 #define tFUNCTION 276
00169 #define tHEADER 277
00170 #define tHTTP 278
00171 #define tIF 279
00172 #define tISVALID 280
00173 #define tMETA 281
00174 #define tNAME 282
00175 #define tPATH 283
00176 #define tRETURN 284
00177 #define tTYPEOF 285
00178 #define tUSE 286
00179 #define tUSER 287
00180 #define tVAR 288
00181 #define tWHILE 289
00182 #define tURL 290
00183 #define tDELETE 291
00184 #define tIN 292
00185 #define tLIB 293
00186 #define tNEW 294
00187 #define tNULL 295
00188 #define tTHIS 296
00189 #define tVOID 297
00190 #define tWITH 298
00191 #define tCASE 299
00192 #define tCATCH 300
00193 #define tCLASS 301
00194 #define tCONST 302
00195 #define tDEBUGGER 303
00196 #define tDEFAULT 304
00197 #define tDO 305
00198 #define tENUM 306
00199 #define tEXPORT 307
00200 #define tEXTENDS 308
00201 #define tFINALLY 309
00202 #define tIMPORT 310
00203 #define tPRIVATE 311
00204 #define tPUBLIC 312
00205 #define tSIZEOF 313
00206 #define tSTRUCT 314
00207 #define tSUPER 315
00208 #define tSWITCH 316
00209 #define tTHROW 317
00210 #define tTRY 318
00211 #define tEQ 319
00212 #define tLE 320
00213 #define tGE 321
00214 #define tNE 322
00215 #define tAND 323
00216 #define tOR 324
00217 #define tPLUSPLUS 325
00218 #define tMINUSMINUS 326
00219 #define tLSHIFT 327
00220 #define tRSSHIFT 328
00221 #define tRSZSHIFT 329
00222 #define tADDA 330
00223 #define tSUBA 331
00224 #define tMULA 332
00225 #define tDIVA 333
00226 #define tANDA 334
00227 #define tORA 335
00228 #define tXORA 336
00229 #define tREMA 337
00230 #define tLSHIFTA 338
00231 #define tRSSHIFTA 339
00232 #define tRSZSHIFTA 340
00233 
00234 
00235 
00236 
00237 /* Copy the first part of user declarations.  */
00238 #line 1 "wmlscript/wsgram.y"
00239 
00240 /*
00241  *
00242  * wsgram.y
00243  *
00244  * Author: Markku Rossi <mtr@iki.fi>
00245  *
00246  * Copyright (c) 1999-2000 WAPIT OY LTD.
00247  *       All rights reserved.
00248  *
00249  * Bison grammar for the WMLScript compiler.
00250  *
00251  */
00252 
00253 #include "wmlscript/wsint.h"
00254 
00255 #define YYPARSE_PARAM   pctx
00256 #define YYLEX_PARAM pctx
00257 
00258 /* The required yyerror() function.  This is actually not used but to
00259    report the internal parser errors.  All other errors are reported
00260    by using the `wserror.h' functions. */
00261 extern void yyerror(char *msg);
00262 
00263 #if WS_DEBUG
00264 /* Just for debugging purposes. */
00265 WsCompilerPtr global_compiler = NULL;
00266 #endif /* WS_DEBUG */
00267 
00268 
00269 
00270 /* Enabling traces.  */
00271 #ifndef YYDEBUG
00272 # define YYDEBUG 0
00273 #endif
00274 
00275 /* Enabling verbose error messages.  */
00276 #ifdef YYERROR_VERBOSE
00277 # undef YYERROR_VERBOSE
00278 # define YYERROR_VERBOSE 1
00279 #else
00280 # define YYERROR_VERBOSE 0
00281 #endif
00282 
00283 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
00284 #line 34 "wmlscript/wsgram.y"
00285 typedef union YYSTYPE {
00286     WsUInt32 integer;
00287     WsFloat vfloat;
00288     char *identifier;
00289     WsUtf8String *string;
00290 
00291     WsBool boolean;
00292     WsList *list;
00293     WsFormalParm *parm;
00294     WsVarDec *vardec;
00295 
00296     WsPragmaMetaBody *meta_body;
00297 
00298     WsStatement *stmt;
00299     WsExpression *expr;
00300 } YYSTYPE;
00301 /* Line 191 of yacc.c.  */
00302 #line 302 "y.tab.c"
00303 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
00304 # define YYSTYPE_IS_DECLARED 1
00305 # define YYSTYPE_IS_TRIVIAL 1
00306 #endif
00307 
00308 #if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED)
00309 typedef struct YYLTYPE
00310 {
00311   int first_line;
00312   int first_column;
00313   int last_line;
00314   int last_column;
00315 } YYLTYPE;
00316 # define yyltype YYLTYPE /* obsolescent; will be withdrawn */
00317 # define YYLTYPE_IS_DECLARED 1
00318 # define YYLTYPE_IS_TRIVIAL 1
00319 #endif
00320 
00321 
00322 /* Copy the second part of user declarations.  */
00323 
00324 
00325 /* Line 214 of yacc.c.  */
00326 #line 326 "y.tab.c"
00327 
00328 #if ! defined (yyoverflow) || YYERROR_VERBOSE
00329 
00330 /* The parser invokes alloca or malloc; define the necessary symbols.  */
00331 
00332 # if YYSTACK_USE_ALLOCA
00333 #  define YYSTACK_ALLOC alloca
00334 # else
00335 #  ifndef YYSTACK_USE_ALLOCA
00336 #   if defined (alloca) || defined (_ALLOCA_H)
00337 #    define YYSTACK_ALLOC alloca
00338 #   else
00339 #    ifdef __GNUC__
00340 #     define YYSTACK_ALLOC __builtin_alloca
00341 #    endif
00342 #   endif
00343 #  endif
00344 # endif
00345 
00346 # ifdef YYSTACK_ALLOC
00347    /* Pacify GCC's `empty if-body' warning. */
00348 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
00349 # else
00350 #  if defined (__STDC__) || defined (__cplusplus)
00351 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
00352 #   define YYSIZE_T size_t
00353 #  endif
00354 #  define YYSTACK_ALLOC malloc
00355 #  define YYSTACK_FREE free
00356 # endif
00357 #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
00358 
00359 
00360 #if (! defined (yyoverflow) \
00361      && (! defined (__cplusplus) \
00362      || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
00363 
00364 /* A type that is properly aligned for any stack member.  */
00365 union yyalloc
00366 {
00367   short yyss;
00368   YYSTYPE yyvs;
00369     YYLTYPE yyls;
00370 };
00371 
00372 /* The size of the maximum gap between one aligned stack and the next.  */
00373 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
00374 
00375 /* The size of an array large to enough to hold all stacks, each with
00376    N elements.  */
00377 # define YYSTACK_BYTES(N) \
00378      ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE))  \
00379       + 2 * YYSTACK_GAP_MAXIMUM)
00380 
00381 /* Copy COUNT objects from FROM to TO.  The source and destination do
00382    not overlap.  */
00383 # ifndef YYCOPY
00384 #  if 1 < __GNUC__
00385 #   define YYCOPY(To, From, Count) \
00386       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
00387 #  else
00388 #   define YYCOPY(To, From, Count)      \
00389       do                    \
00390     {                   \
00391       register YYSIZE_T yyi;        \
00392       for (yyi = 0; yyi < (Count); yyi++)   \
00393         (To)[yyi] = (From)[yyi];        \
00394     }                   \
00395       while (0)
00396 #  endif
00397 # endif
00398 
00399 /* Relocate STACK from its old location to the new one.  The
00400    local variables YYSIZE and YYSTACKSIZE give the old and new number of
00401    elements in the stack, and YYPTR gives the new location of the
00402    stack.  Advance YYPTR to a properly aligned location for the next
00403    stack.  */
00404 # define YYSTACK_RELOCATE(Stack)                    \
00405     do                                  \
00406       {                                 \
00407     YYSIZE_T yynewbytes;                        \
00408     YYCOPY (&yyptr->Stack, Stack, yysize);              \
00409     Stack = &yyptr->Stack;                      \
00410     yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
00411     yyptr += yynewbytes / sizeof (*yyptr);              \
00412       }                                 \
00413     while (0)
00414 
00415 #endif
00416 
00417 #if defined (__STDC__) || defined (__cplusplus)
00418    typedef signed char yysigned_char;
00419 #else
00420    typedef short yysigned_char;
00421 #endif
00422 
00423 /* YYFINAL -- State number of the termination state. */
00424 #define YYFINAL  17
00425 /* YYLAST -- Last index in YYTABLE.  */
00426 #define YYLAST   448
00427 
00428 /* YYNTOKENS -- Number of terminals. */
00429 #define YYNTOKENS  109
00430 /* YYNNTS -- Number of nonterminals. */
00431 #define YYNNTS  55
00432 /* YYNRULES -- Number of rules. */
00433 #define YYNRULES  146
00434 /* YYNRULES -- Number of states. */
00435 #define YYNSTATES  257
00436 
00437 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
00438 #define YYUNDEFTOK  2
00439 #define YYMAXUTOK   340
00440 
00441 #define YYTRANSLATE(YYX)                        \
00442   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
00443 
00444 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
00445 static const unsigned char yytranslate[] =
00446 {
00447        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00448        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00449        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00450        2,     2,     2,   106,     2,   107,     2,   104,    97,     2,
00451       87,    88,   102,   100,    89,   101,   108,   103,     2,     2,
00452        2,     2,     2,     2,     2,     2,     2,     2,    94,    86,
00453       98,    92,    99,    93,     2,     2,     2,     2,     2,     2,
00454        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00455        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00456        2,     2,     2,     2,    96,     2,     2,     2,     2,     2,
00457        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00458        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00459        2,     2,     2,    90,    95,    91,   105,     2,     2,     2,
00460        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00461        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00462        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00463        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00464        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00465        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00466        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00467        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00468        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00469        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00470        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00471        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00472        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
00473        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
00474       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
00475       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
00476       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
00477       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
00478       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
00479       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
00480       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
00481       85
00482 };
00483 
00484 #if YYDEBUG
00485 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
00486    YYRHS.  */
00487 static const unsigned short yyprhs[] =
00488 {
00489        0,     0,     3,     6,     8,    10,    12,    15,    19,    21,
00490       23,    25,    27,    31,    34,    37,    40,    45,    48,    50,
00491       52,    54,    57,    61,    65,    68,    72,    74,    76,    78,
00492       80,    83,    92,    93,    95,    96,    98,    99,   101,   103,
00493      107,   109,   111,   113,   116,   118,   120,   123,   126,   128,
00494      132,   134,   135,   137,   139,   142,   146,   149,   151,   155,
00495      158,   159,   162,   170,   176,   182,   184,   194,   205,   209,
00496      210,   212,   214,   218,   220,   224,   228,   232,   236,   240,
00497      244,   248,   252,   256,   260,   264,   268,   272,   274,   280,
00498      282,   286,   288,   292,   294,   298,   300,   304,   306,   310,
00499      312,   316,   320,   322,   326,   330,   334,   338,   340,   344,
00500      348,   352,   354,   358,   362,   364,   368,   372,   376,   380,
00501      382,   385,   388,   391,   394,   397,   400,   403,   406,   408,
00502      411,   414,   416,   419,   424,   429,   431,   433,   435,   437,
00503      439,   441,   443,   447,   450,   454,   456
00504 };
00505 
00506 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
00507 static const short yyrhs[] =
00508 {
00509      110,     0,    -1,   111,   126,    -1,   126,    -1,     1,    -1,
00510      112,    -1,   111,   112,    -1,    31,   113,    86,    -1,     1,
00511       -1,   114,    -1,   115,    -1,   117,    -1,    35,     9,     8,
00512       -1,    10,   116,    -1,    16,     8,    -1,    28,     8,    -1,
00513       16,     8,    28,     8,    -1,    26,   118,    -1,   119,    -1,
00514      120,    -1,   121,    -1,    27,   122,    -1,    23,    18,   122,
00515       -1,    32,    11,   122,    -1,   123,   124,    -1,   123,   124,
00516      125,    -1,     8,    -1,     8,    -1,     8,    -1,   127,    -1,
00517      126,   127,    -1,   128,    21,     9,    87,   129,    88,   133,
00518      130,    -1,    -1,    19,    -1,    -1,   131,    -1,    -1,    86,
00519       -1,     9,    -1,   131,    89,     9,    -1,   133,    -1,   136,
00520       -1,    86,    -1,   145,    86,    -1,   140,    -1,   141,    -1,
00521       13,    86,    -1,    12,    86,    -1,   143,    -1,    90,   134,
00522       91,    -1,     1,    -1,    -1,   135,    -1,   132,    -1,   135,
00523      132,    -1,    33,   137,    86,    -1,    33,     1,    -1,   138,
00524       -1,   137,    89,   138,    -1,     9,   139,    -1,    -1,    92,
00525      147,    -1,    24,    87,   145,    88,   132,    17,   132,    -1,
00526       24,    87,   145,    88,   132,    -1,    34,    87,   145,    88,
00527      132,    -1,   142,    -1,    20,    87,   144,    86,   144,    86,
00528      144,    88,   132,    -1,    20,    87,    33,   137,    86,   144,
00529       86,   144,    88,   132,    -1,    29,   144,    86,    -1,    -1,
00530      145,    -1,   146,    -1,   145,    89,   146,    -1,   147,    -1,
00531        9,    92,   146,    -1,     9,    77,   146,    -1,     9,    78,
00532      146,    -1,     9,    82,   146,    -1,     9,    75,   146,    -1,
00533        9,    76,   146,    -1,     9,    83,   146,    -1,     9,    84,
00534      146,    -1,     9,    85,   146,    -1,     9,    79,   146,    -1,
00535        9,    81,   146,    -1,     9,    80,   146,    -1,     9,    15,
00536      146,    -1,   148,    -1,   148,    93,   146,    94,   146,    -1,
00537      149,    -1,   148,    69,   149,    -1,   150,    -1,   149,    68,
00538      150,    -1,   151,    -1,   150,    95,   151,    -1,   152,    -1,
00539      151,    96,   152,    -1,   153,    -1,   152,    97,   153,    -1,
00540      154,    -1,   153,    64,   154,    -1,   153,    67,   154,    -1,
00541      155,    -1,   154,    98,   155,    -1,   154,    99,   155,    -1,
00542      154,    65,   155,    -1,   154,    66,   155,    -1,   156,    -1,
00543      155,    72,   156,    -1,   155,    73,   156,    -1,   155,    74,
00544      156,    -1,   157,    -1,   156,   100,   157,    -1,   156,   101,
00545      157,    -1,   158,    -1,   157,   102,   158,    -1,   157,   103,
00546      158,    -1,   157,    14,   158,    -1,   157,   104,   158,    -1,
00547      159,    -1,    30,   158,    -1,    25,   158,    -1,    70,     9,
00548       -1,    71,     9,    -1,   100,   158,    -1,   101,   158,    -1,
00549      105,   158,    -1,   106,   158,    -1,   160,    -1,     9,    70,
00550       -1,     9,    71,    -1,   161,    -1,     9,   162,    -1,     9,
00551      107,     9,   162,    -1,     9,   108,     9,   162,    -1,     9,
00552       -1,     3,    -1,     4,    -1,     5,    -1,     6,    -1,     7,
00553       -1,     8,    -1,    87,   145,    88,    -1,    87,    88,    -1,
00554       87,   163,    88,    -1,   146,    -1,   163,    89,   146,    -1
00555 };
00556 
00557 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
00558 static const unsigned short yyrline[] =
00559 {
00560        0,   122,   122,   123,   124,   131,   132,   136,   137,   142,
00561      143,   144,   148,   153,   157,   167,   178,   201,   205,   206,
00562      207,   211,   229,   249,   284,   286,   290,   291,   292,   297,
00563      298,   302,   317,   318,   323,   324,   327,   329,   333,   351,
00564      372,   380,   381,   383,   385,   386,   387,   389,   391,   394,
00565      402,   411,   412,   416,   421,   426,   428,   433,   438,   443,
00566      459,   460,   465,   467,   472,   474,   478,   481,   487,   494,
00567      495,   500,   501,   506,   507,   509,   511,   513,   515,   517,
00568      519,   521,   523,   525,   527,   529,   531,   536,   537,   542,
00569      543,   548,   549,   554,   555,   560,   561,   566,   567,   572,
00570      573,   575,   580,   581,   583,   585,   587,   592,   593,   595,
00571      597,   602,   603,   605,   610,   611,   613,   615,   617,   622,
00572      623,   625,   627,   629,   631,   647,   649,   651,   656,   657,
00573      659,   664,   665,   675,   677,   682,   684,   686,   688,   690,
00574      692,   694,   696,   701,   703,   708,   713
00575 };
00576 #endif
00577 
00578 #if YYDEBUG || YYERROR_VERBOSE
00579 /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
00580    First, the terminals, then, starting at YYNTOKENS, nonterminals. */
00581 static const char *const yytname[] =
00582 {
00583   "$end", "error", "$undefined", "tINVALID", "tTRUE", "tFALSE", "tINTEGER", 
00584   "tFLOAT", "tSTRING", "tIDENTIFIER", "tACCESS", "tAGENT", "tBREAK", 
00585   "tCONTINUE", "tIDIV", "tIDIVA", "tDOMAIN", "tELSE", "tEQUIV", "tEXTERN", 
00586   "tFOR", "tFUNCTION", "tHEADER", "tHTTP", "tIF", "tISVALID", "tMETA", 
00587   "tNAME", "tPATH", "tRETURN", "tTYPEOF", "tUSE", "tUSER", "tVAR", 
00588   "tWHILE", "tURL", "tDELETE", "tIN", "tLIB", "tNEW", "tNULL", "tTHIS", 
00589   "tVOID", "tWITH", "tCASE", "tCATCH", "tCLASS", "tCONST", "tDEBUGGER", 
00590   "tDEFAULT", "tDO", "tENUM", "tEXPORT", "tEXTENDS", "tFINALLY", 
00591   "tIMPORT", "tPRIVATE", "tPUBLIC", "tSIZEOF", "tSTRUCT", "tSUPER", 
00592   "tSWITCH", "tTHROW", "tTRY", "tEQ", "tLE", "tGE", "tNE", "tAND", "tOR", 
00593   "tPLUSPLUS", "tMINUSMINUS", "tLSHIFT", "tRSSHIFT", "tRSZSHIFT", "tADDA", 
00594   "tSUBA", "tMULA", "tDIVA", "tANDA", "tORA", "tXORA", "tREMA", 
00595   "tLSHIFTA", "tRSSHIFTA", "tRSZSHIFTA", "';'", "'('", "')'", "','", 
00596   "'{'", "'}'", "'='", "'?'", "':'", "'|'", "'^'", "'&'", "'<'", "'>'", 
00597   "'+'", "'-'", "'*'", "'/'", "'%'", "'~'", "'!'", "'#'", "'.'", 
00598   "$accept", "CompilationUnit", "Pragmas", "Pragma", "PragmaDeclaration", 
00599   "ExternalCompilationUnitPragma", "AccessControlPragma", 
00600   "AccessControlSpecifier", "MetaPragma", "MetaSpecifier", "MetaName", 
00601   "MetaHttpEquiv", "MetaUserAgent", "MetaBody", "MetaPropertyName", 
00602   "MetaContent", "MetaScheme", "FunctionDeclarations", 
00603   "FunctionDeclaration", "ExternOpt", "FormalParameterListOpt", 
00604   "SemicolonOpt", "FormalParameterList", "Statement", "Block", 
00605   "StatementListOpt", "StatementList", "VariableStatement", 
00606   "VariableDeclarationList", "VariableDeclaration", 
00607   "VariableInitializedOpt", "IfStatement", "IterationStatement", 
00608   "ForStatement", "ReturnStatement", "ExpressionOpt", "Expression", 
00609   "AssignmentExpression", "ConditionalExpression", "LogicalORExpression", 
00610   "LogicalANDExpression", "BitwiseORExpression", "BitwiseXORExpression", 
00611   "BitwiseANDExpression", "EqualityExpression", "RelationalExpression", 
00612   "ShiftExpression", "AdditiveExpression", "MultiplicativeExpression", 
00613   "UnaryExpression", "PostfixExpression", "CallExpression", 
00614   "PrimaryExpression", "Arguments", "ArgumentList", 0
00615 };
00616 #endif
00617 
00618 # ifdef YYPRINT
00619 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
00620    token YYLEX-NUM.  */
00621 static const unsigned short yytoknum[] =
00622 {
00623        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
00624      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
00625      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
00626      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
00627      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
00628      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
00629      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
00630      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
00631      335,   336,   337,   338,   339,   340,    59,    40,    41,    44,
00632      123,   125,    61,    63,    58,   124,    94,    38,    60,    62,
00633       43,    45,    42,    47,    37,   126,    33,    35,    46
00634 };
00635 # endif
00636 
00637 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
00638 static const unsigned char yyr1[] =
00639 {
00640        0,   109,   110,   110,   110,   111,   111,   112,   112,   113,
00641      113,   113,   114,   115,   116,   116,   116,   117,   118,   118,
00642      118,   119,   120,   121,   122,   122,   123,   124,   125,   126,
00643      126,   127,   128,   128,   129,   129,   130,   130,   131,   131,
00644      132,   132,   132,   132,   132,   132,   132,   132,   132,   133,
00645      133,   134,   134,   135,   135,   136,   136,   137,   137,   138,
00646      139,   139,   140,   140,   141,   141,   142,   142,   143,   144,
00647      144,   145,   145,   146,   146,   146,   146,   146,   146,   146,
00648      146,   146,   146,   146,   146,   146,   146,   147,   147,   148,
00649      148,   149,   149,   150,   150,   151,   151,   152,   152,   153,
00650      153,   153,   154,   154,   154,   154,   154,   155,   155,   155,
00651      155,   156,   156,   156,   157,   157,   157,   157,   157,   158,
00652      158,   158,   158,   158,   158,   158,   158,   158,   159,   159,
00653      159,   160,   160,   160,   160,   161,   161,   161,   161,   161,
00654      161,   161,   161,   162,   162,   163,   163
00655 };
00656 
00657 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
00658 static const unsigned char yyr2[] =
00659 {
00660        0,     2,     2,     1,     1,     1,     2,     3,     1,     1,
00661        1,     1,     3,     2,     2,     2,     4,     2,     1,     1,
00662        1,     2,     3,     3,     2,     3,     1,     1,     1,     1,
00663        2,     8,     0,     1,     0,     1,     0,     1,     1,     3,
00664        1,     1,     1,     2,     1,     1,     2,     2,     1,     3,
00665        1,     0,     1,     1,     2,     3,     2,     1,     3,     2,
00666        0,     2,     7,     5,     5,     1,     9,    10,     3,     0,
00667        1,     1,     3,     1,     3,     3,     3,     3,     3,     3,
00668        3,     3,     3,     3,     3,     3,     3,     1,     5,     1,
00669        3,     1,     3,     1,     3,     1,     3,     1,     3,     1,
00670        3,     3,     1,     3,     3,     3,     3,     1,     3,     3,
00671        3,     1,     3,     3,     1,     3,     3,     3,     3,     1,
00672        2,     2,     2,     2,     2,     2,     2,     2,     1,     2,
00673        2,     1,     2,     4,     4,     1,     1,     1,     1,     1,
00674        1,     1,     3,     2,     3,     1,     3
00675 };
00676 
00677 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
00678    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
00679    means the default is an error.  */
00680 static const unsigned char yydefact[] =
00681 {
00682        0,     8,    33,     0,     0,     0,     5,     3,    29,     0,
00683        0,     0,     0,     0,     9,    10,    11,     1,     8,     6,
00684        2,    30,     0,     0,     0,    13,     0,     0,     0,    17,
00685       18,    19,    20,     0,     7,     0,    14,    15,     0,    26,
00686       21,     0,     0,    12,    34,     0,    22,    27,    24,    23,
00687       38,     0,    35,    16,    28,    25,     0,     0,    50,     0,
00688       36,    39,   136,   137,   138,   139,   140,   141,   135,     0,
00689        0,     0,     0,     0,    69,     0,     0,     0,     0,     0,
00690       42,     0,     0,     0,     0,     0,    53,    40,     0,     0,
00691       41,    44,    45,    65,    48,     0,    71,    73,    87,    89,
00692       91,    93,    95,    97,    99,   102,   107,   111,   114,   119,
00693      128,   131,    37,    31,     0,   129,   130,     0,     0,     0,
00694        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
00695        0,     0,   132,    47,    46,    69,     0,   135,   121,     0,
00696       70,   120,    56,    60,     0,    57,     0,   122,   123,     0,
00697      124,   125,   126,   127,    49,    54,    43,     0,     0,     0,
00698        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
00699        0,     0,     0,     0,     0,     0,     0,     0,     0,    86,
00700       78,    79,    75,    76,    83,    85,    84,    77,    80,    81,
00701       82,   143,   145,     0,    74,     0,     0,     0,     0,     0,
00702       68,     0,    59,    55,     0,     0,   142,    72,    90,     0,
00703       92,    94,    96,    98,   100,   101,   105,   106,   103,   104,
00704      108,   109,   110,   112,   113,   117,   115,   116,   118,   144,
00705        0,   133,   134,     0,    69,     0,    61,    58,     0,     0,
00706      146,    69,     0,    63,    64,    88,     0,    69,     0,    69,
00707        0,    62,     0,     0,     0,    66,    67
00708 };
00709 
00710 /* YYDEFGOTO[NTERM-NUM]. */
00711 static const short yydefgoto[] =
00712 {
00713       -1,     4,     5,     6,    13,    14,    15,    25,    16,    29,
00714       30,    31,    32,    40,    41,    48,    55,     7,     8,     9,
00715       51,   113,    52,    86,    87,    88,    89,    90,   144,   145,
00716      202,    91,    92,    93,    94,   139,    95,    96,    97,    98,
00717       99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
00718      109,   110,   111,   132,   193
00719 };
00720 
00721 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
00722    STATE-NUM.  */
00723 #define YYPACT_NINF -135
00724 static const short yypact[] =
00725 {
00726       59,    39,  -135,    28,    68,    63,  -135,    38,  -135,    62,
00727       37,    54,    13,   -43,  -135,  -135,  -135,  -135,  -135,  -135,
00728       38,  -135,    57,    67,    87,  -135,    92,   108,   109,  -135,
00729     -135,  -135,  -135,   121,  -135,    47,   123,  -135,   108,  -135,
00730     -135,   141,   108,  -135,   155,   164,  -135,  -135,   166,  -135,
00731     -135,    89,   107,  -135,  -135,  -135,     1,   188,  -135,   132,
00732      112,  -135,  -135,  -135,  -135,  -135,  -135,  -135,   340,   115,
00733      120,   124,   125,   296,   308,   296,    35,   126,   198,   201,
00734     -135,   308,   296,   296,   296,   296,  -135,  -135,   129,   175,
00735     -135,  -135,  -135,  -135,  -135,   -83,  -135,  -135,   -48,   146,
00736      122,   119,   127,    12,   -25,    45,     5,    44,  -135,  -135,
00737     -135,  -135,  -135,  -135,   308,  -135,  -135,   308,   308,   308,
00738      308,   308,   308,   308,   308,   308,   308,   308,   222,   308,
00739      207,   212,  -135,  -135,  -135,   264,   308,   -38,  -135,   148,
00740      147,  -135,  -135,   143,    -1,  -135,   308,  -135,  -135,    43,
00741     -135,  -135,  -135,  -135,  -135,  -135,  -135,   308,   296,   308,
00742      296,   296,   296,   296,   296,   296,   296,   296,   296,   296,
00743      296,   296,   296,   296,   296,   296,   296,   296,   296,  -135,
00744     -135,  -135,  -135,  -135,  -135,  -135,  -135,  -135,  -135,  -135,
00745     -135,  -135,  -135,    66,  -135,   152,   152,   231,   156,    70,
00746     -135,   296,  -135,  -135,   231,    82,  -135,  -135,   146,   149,
00747      122,   119,   127,    12,   -25,   -25,    45,    45,    45,    45,
00748        5,     5,     5,    44,    44,  -135,  -135,  -135,  -135,  -135,
00749      308,  -135,  -135,    25,   308,    22,  -135,  -135,    22,   308,
00750     -135,   308,   158,   224,  -135,  -135,   162,   308,    22,   308,
00751      161,  -135,   163,    22,    22,  -135,  -135
00752 };
00753 
00754 /* YYPGOTO[NTERM-NUM].  */
00755 static const short yypgoto[] =
00756 {
00757     -135,  -135,  -135,   245,  -135,  -135,  -135,  -135,  -135,  -135,
00758     -135,  -135,  -135,    29,  -135,  -135,  -135,   248,    17,  -135,
00759     -135,  -135,  -135,   -85,   199,  -135,  -135,  -135,    60,    50,
00760     -135,  -135,  -135,  -135,  -135,  -134,   -74,  -109,    55,  -135,
00761      100,    99,   102,    98,   101,   -22,   -65,   -46,    20,    14,
00762     -135,  -135,  -135,   -10,  -135
00763 };
00764 
00765 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
00766    positive, shift that token.  If negative, reduce the rule which
00767    number is the opposite.  If zero, do what YYDEFACT says.
00768    If YYTABLE_NINF, syntax error.  */
00769 #define YYTABLE_NINF -53
00770 static const short yytable[] =
00771 {
00772      140,   198,    58,   156,   155,   179,   157,   149,   180,   181,
00773      182,   183,   184,   185,   186,   187,   188,   189,   190,   192,
00774      194,   158,    33,    58,    21,    62,    63,    64,    65,    66,
00775       67,    68,   115,   116,    69,    70,   142,    21,    10,    -4,
00776      166,   167,    71,    34,   143,   159,    72,    73,   207,   128,
00777      209,    74,    75,    23,    11,    76,    77,     2,   175,   -32,
00778        1,   140,   199,    12,    18,    24,    35,    46,    17,   130,
00779      131,    49,   205,   168,   169,    36,   164,    26,     2,   165,
00780      -32,    27,     2,    22,   -32,   203,    28,   138,   204,   141,
00781        3,    59,    78,    79,     3,    37,   150,   151,   152,   153,
00782      242,   216,   217,   218,   219,   173,   174,   246,    80,    81,
00783       38,   241,    59,   250,   204,   252,    39,   170,   171,   172,
00784       42,   240,    82,    83,   220,   221,   222,    84,    85,    43,
00785      245,   206,   157,    58,    44,    62,    63,    64,    65,    66,
00786       67,    68,   214,   215,    69,    70,   176,   177,   178,    47,
00787      243,    45,    71,   244,   229,   230,    72,    73,   235,   157,
00788      140,    74,    75,   251,    50,    76,    77,   140,   255,   256,
00789      238,   157,    53,   140,    54,   140,    58,    56,    62,    63,
00790       64,    65,    66,    67,    68,   231,   232,    69,    70,   225,
00791      226,   227,   228,   223,   224,    71,    57,    61,   112,    72,
00792       73,   133,    78,    79,    74,    75,   134,   147,    76,    77,
00793      148,   135,   136,   146,   160,   162,   195,   161,    80,    81,
00794      154,   196,    59,   -51,   163,    62,    63,    64,    65,    66,
00795       67,    68,    82,    83,   200,   201,   157,    84,    85,   128,
00796      143,   248,   234,   239,   247,    78,    79,    73,   249,   253,
00797       19,   254,    75,    20,   237,    60,   236,   233,   208,   210,
00798      212,    80,    81,   211,   213,    59,   -52,    62,    63,    64,
00799       65,    66,    67,    68,     0,    82,    83,     0,     0,     0,
00800       84,    85,     0,     0,     0,     0,     0,     0,     0,    73,
00801        0,     0,    78,    79,    75,     0,     0,   197,     0,    62,
00802       63,    64,    65,    66,    67,   137,     0,     0,     0,    81,
00803      191,    62,    63,    64,    65,    66,    67,    68,     0,     0,
00804        0,    73,    82,    83,     0,     0,    75,    84,    85,     0,
00805        0,     0,     0,    73,    78,    79,     0,     0,    75,     0,
00806        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
00807        0,    81,     0,     0,     0,   114,     0,     0,     0,     0,
00808        0,     0,     0,     0,    82,    83,    78,    79,     0,    84,
00809       85,     0,     0,     0,     0,     0,     0,     0,    78,    79,
00810        0,     0,     0,    81,     0,     0,     0,     0,     0,     0,
00811        0,     0,     0,     0,     0,    81,    82,    83,     0,     0,
00812        0,    84,    85,     0,     0,     0,     0,     0,    82,    83,
00813      115,   116,     0,    84,    85,   117,   118,   119,   120,   121,
00814      122,   123,   124,   125,   126,   127,     0,   128,     0,     0,
00815        0,     0,   129,     0,     0,     0,     0,     0,     0,     0,
00816        0,     0,     0,     0,     0,     0,     0,   130,   131
00817 };
00818 
00819 static const short yycheck[] =
00820 {
00821       74,   135,     1,    86,    89,   114,    89,    81,   117,   118,
00822      119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
00823      129,    69,     9,     1,     7,     3,     4,     5,     6,     7,
00824        8,     9,    70,    71,    12,    13,     1,    20,    10,     0,
00825       65,    66,    20,    86,     9,    93,    24,    25,   157,    87,
00826      159,    29,    30,    16,    26,    33,    34,    19,    14,    21,
00827        1,   135,   136,    35,     1,    28,     9,    38,     0,   107,
00828      108,    42,   146,    98,    99,     8,    64,    23,    19,    67,
00829       21,    27,    19,    21,    21,    86,    32,    73,    89,    75,
00830       31,    90,    70,    71,    31,     8,    82,    83,    84,    85,
00831      234,   166,   167,   168,   169,   100,   101,   241,    86,    87,
00832       18,    86,    90,   247,    89,   249,     8,    72,    73,    74,
00833       11,   230,   100,   101,   170,   171,   172,   105,   106,     8,
00834      239,    88,    89,     1,    87,     3,     4,     5,     6,     7,
00835        8,     9,   164,   165,    12,    13,   102,   103,   104,     8,
00836      235,    28,    20,   238,    88,    89,    24,    25,    88,    89,
00837      234,    29,    30,   248,     9,    33,    34,   241,   253,   254,
00838       88,    89,     8,   247,     8,   249,     1,    88,     3,     4,
00839        5,     6,     7,     8,     9,   195,   196,    12,    13,   175,
00840      176,   177,   178,   173,   174,    20,    89,     9,    86,    24,
00841       25,    86,    70,    71,    29,    30,    86,     9,    33,    34,
00842        9,    87,    87,    87,    68,    96,     9,    95,    86,    87,
00843       91,     9,    90,    91,    97,     3,     4,     5,     6,     7,
00844        8,     9,   100,   101,    86,    92,    89,   105,   106,    87,
00845        9,    17,    86,    94,    86,    70,    71,    25,    86,    88,
00846        5,    88,    30,     5,   204,    56,   201,   197,   158,   160,
00847      162,    86,    87,   161,   163,    90,    91,     3,     4,     5,
00848        6,     7,     8,     9,    -1,   100,   101,    -1,    -1,    -1,
00849      105,   106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,
00850       -1,    -1,    70,    71,    30,    -1,    -1,    33,    -1,     3,
00851        4,     5,     6,     7,     8,     9,    -1,    -1,    -1,    87,
00852       88,     3,     4,     5,     6,     7,     8,     9,    -1,    -1,
00853       -1,    25,   100,   101,    -1,    -1,    30,   105,   106,    -1,
00854       -1,    -1,    -1,    25,    70,    71,    -1,    -1,    30,    -1,
00855       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
00856       -1,    87,    -1,    -1,    -1,    15,    -1,    -1,    -1,    -1,
00857       -1,    -1,    -1,    -1,   100,   101,    70,    71,    -1,   105,
00858      106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    71,
00859       -1,    -1,    -1,    87,    -1,    -1,    -1,    -1,    -1,    -1,
00860       -1,    -1,    -1,    -1,    -1,    87,   100,   101,    -1,    -1,
00861       -1,   105,   106,    -1,    -1,    -1,    -1,    -1,   100,   101,
00862       70,    71,    -1,   105,   106,    75,    76,    77,    78,    79,
00863       80,    81,    82,    83,    84,    85,    -1,    87,    -1,    -1,
00864       -1,    -1,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
00865       -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,   108
00866 };
00867 
00868 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
00869    symbol of state STATE-NUM.  */
00870 static const unsigned char yystos[] =
00871 {
00872        0,     1,    19,    31,   110,   111,   112,   126,   127,   128,
00873       10,    26,    35,   113,   114,   115,   117,     0,     1,   112,
00874      126,   127,    21,    16,    28,   116,    23,    27,    32,   118,
00875      119,   120,   121,     9,    86,     9,     8,     8,    18,     8,
00876      122,   123,    11,     8,    87,    28,   122,     8,   124,   122,
00877        9,   129,   131,     8,     8,   125,    88,    89,     1,    90,
00878      133,     9,     3,     4,     5,     6,     7,     8,     9,    12,
00879       13,    20,    24,    25,    29,    30,    33,    34,    70,    71,
00880       86,    87,   100,   101,   105,   106,   132,   133,   134,   135,
00881      136,   140,   141,   142,   143,   145,   146,   147,   148,   149,
00882      150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
00883      160,   161,    86,   130,    15,    70,    71,    75,    76,    77,
00884       78,    79,    80,    81,    82,    83,    84,    85,    87,    92,
00885      107,   108,   162,    86,    86,    87,    87,     9,   158,   144,
00886      145,   158,     1,     9,   137,   138,    87,     9,     9,   145,
00887      158,   158,   158,   158,    91,   132,    86,    89,    69,    93,
00888       68,    95,    96,    97,    64,    67,    65,    66,    98,    99,
00889       72,    73,    74,   100,   101,    14,   102,   103,   104,   146,
00890      146,   146,   146,   146,   146,   146,   146,   146,   146,   146,
00891      146,    88,   146,   163,   146,     9,     9,    33,   144,   145,
00892       86,    92,   139,    86,    89,   145,    88,   146,   149,   146,
00893      150,   151,   152,   153,   154,   154,   155,   155,   155,   155,
00894      156,   156,   156,   157,   157,   158,   158,   158,   158,    88,
00895       89,   162,   162,   137,    86,    88,   147,   138,    88,    94,
00896      146,    86,   144,   132,   132,   146,   144,    86,    17,    86,
00897      144,   132,   144,    88,    88,   132,   132
00898 };
00899 
00900 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
00901 # define YYSIZE_T __SIZE_TYPE__
00902 #endif
00903 #if ! defined (YYSIZE_T) && defined (size_t)
00904 # define YYSIZE_T size_t
00905 #endif
00906 #if ! defined (YYSIZE_T)
00907 # if defined (__STDC__) || defined (__cplusplus)
00908 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
00909 #  define YYSIZE_T size_t
00910 # endif
00911 #endif
00912 #if ! defined (YYSIZE_T)
00913 # define YYSIZE_T unsigned int
00914 #endif
00915 
00916 #define yyerrok     (yyerrstatus = 0)
00917 #define yyclearin   (yychar = YYEMPTY)
00918 #define YYEMPTY     (-2)
00919 #define YYEOF       0
00920 
00921 #define YYACCEPT    goto yyacceptlab
00922 #define YYABORT     goto yyabortlab
00923 #define YYERROR     do              \
00924               {             \
00925                 yylerrsp = yylsp;       \
00926                 *++yylerrsp = yyloc;    \
00927                 goto yyerrlab1;     \
00928               }             \
00929             while (0)
00930 
00931 
00932 /* Like YYERROR except do call yyerror.  This remains here temporarily
00933    to ease the transition to the new meaning of YYERROR, for GCC.
00934    Once GCC version 2 has supplanted version 1, this can go.  */
00935 
00936 #define YYFAIL      goto yyerrlab
00937 
00938 #define YYRECOVERING()  (!!yyerrstatus)
00939 
00940 #define YYBACKUP(Token, Value)                  \
00941 do                              \
00942   if (yychar == YYEMPTY && yylen == 1)              \
00943     {                               \
00944       yychar = (Token);                     \
00945       yylval = (Value);                     \
00946       yytoken = YYTRANSLATE (yychar);               \
00947       YYPOPSTACK;                       \
00948       goto yybackup;                        \
00949     }                               \
00950   else                              \
00951     {                               \
00952       yyerror ("syntax error: cannot back up");\
00953       YYERROR;                          \
00954     }                               \
00955 while (0)
00956 
00957 #define YYTERROR    1
00958 #define YYERRCODE   256
00959 
00960 /* YYLLOC_DEFAULT -- Compute the default location (before the actions
00961    are run).  */
00962 
00963 #ifndef YYLLOC_DEFAULT
00964 # define YYLLOC_DEFAULT(Current, Rhs, N)         \
00965   Current.first_line   = Rhs[1].first_line;      \
00966   Current.first_column = Rhs[1].first_column;    \
00967   Current.last_line    = Rhs[N].last_line;       \
00968   Current.last_column  = Rhs[N].last_column;
00969 #endif
00970 
00971 /* YYLEX -- calling `yylex' with the right arguments.  */
00972 
00973 #ifdef YYLEX_PARAM
00974 # define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
00975 #else
00976 # define YYLEX yylex (&yylval, &yylloc)
00977 #endif
00978 
00979 /* Enable debugging if requested.  */
00980 #if YYDEBUG
00981 
00982 # ifndef YYFPRINTF
00983 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
00984 #  define YYFPRINTF fprintf
00985 # endif
00986 
00987 # define YYDPRINTF(Args)            \
00988 do {                        \
00989   if (yydebug)                  \
00990     YYFPRINTF Args;             \
00991 } while (0)
00992 
00993 # define YYDSYMPRINT(Args)          \
00994 do {                        \
00995   if (yydebug)                  \
00996     yysymprint Args;                \
00997 } while (0)
00998 
00999 # define YYDSYMPRINTF(Title, Token, Value, Location)        \
01000 do {                                \
01001   if (yydebug)                          \
01002     {                               \
01003       YYFPRINTF (stderr, "%s ", Title);             \
01004       yysymprint (stderr,                   \
01005                   Token, Value, Location);  \
01006       YYFPRINTF (stderr, "\n");                 \
01007     }                               \
01008 } while (0)
01009 
01010 /*------------------------------------------------------------------.
01011 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
01012 | TOP (cinluded).                                                   |
01013 `------------------------------------------------------------------*/
01014 
01015 #if defined (__STDC__) || defined (__cplusplus)
01016 static void
01017 yy_stack_print (short *bottom, short *top)
01018 #else
01019 static void
01020 yy_stack_print (bottom, top)
01021     short *bottom;
01022     short *top;
01023 #endif
01024 {
01025   YYFPRINTF (stderr, "Stack now");
01026   for (/* Nothing. */; bottom <= top; ++bottom)
01027     YYFPRINTF (stderr, " %d", *bottom);
01028   YYFPRINTF (stderr, "\n");
01029 }
01030 
01031 # define YY_STACK_PRINT(Bottom, Top)                \
01032 do {                                \
01033   if (yydebug)                          \
01034     yy_stack_print ((Bottom), (Top));               \
01035 } while (0)
01036 
01037 
01038 /*------------------------------------------------.
01039 | Report that the YYRULE is going to be reduced.  |
01040 `------------------------------------------------*/
01041 
01042 #if defined (__STDC__) || defined (__cplusplus)
01043 static void
01044 yy_reduce_print (int yyrule)
01045 #else
01046 static void
01047 yy_reduce_print (yyrule)
01048     int yyrule;
01049 #endif
01050 {
01051   int yyi;
01052   unsigned int yylineno = yyrline[yyrule];
01053   YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
01054              yyrule - 1, yylineno);
01055   /* Print the symbols being reduced, and their result.  */
01056   for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
01057     YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
01058   YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
01059 }
01060 
01061 # define YY_REDUCE_PRINT(Rule)      \
01062 do {                    \
01063   if (yydebug)              \
01064     yy_reduce_print (Rule);     \
01065 } while (0)
01066 
01067 /* Nonzero means print parse trace.  It is left uninitialized so that
01068    multiple parsers can coexist.  */
01069 int yydebug;
01070 #else /* !YYDEBUG */
01071 # define YYDPRINTF(Args)
01072 # define YYDSYMPRINT(Args)
01073 # define YYDSYMPRINTF(Title, Token, Value, Location)
01074 # define YY_STACK_PRINT(Bottom, Top)
01075 # define YY_REDUCE_PRINT(Rule)
01076 #endif /* !YYDEBUG */
01077 
01078 
01079 /* YYINITDEPTH -- initial size of the parser's stacks.  */
01080 #ifndef YYINITDEPTH
01081 # define YYINITDEPTH 200
01082 #endif
01083 
01084 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
01085    if the built-in stack extension method is used).
01086 
01087    Do not make this value too large; the results are undefined if
01088    SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
01089    evaluated with infinite-precision integer arithmetic.  */
01090 
01091 #if YYMAXDEPTH == 0
01092 # undef YYMAXDEPTH
01093 #endif
01094 
01095 #ifndef YYMAXDEPTH
01096 # define YYMAXDEPTH 10000
01097 #endif
01098 
01099 
01100 
01101 #if YYERROR_VERBOSE
01102 
01103 # ifndef yystrlen
01104 #  if defined (__GLIBC__) && defined (_STRING_H)
01105 #   define yystrlen strlen
01106 #  else
01107 /* Return the length of YYSTR.  */
01108 static YYSIZE_T
01109 #   if defined (__STDC__) || defined (__cplusplus)
01110 yystrlen (const char *yystr)
01111 #   else
01112 yystrlen (yystr)
01113      const char *yystr;
01114 #   endif
01115 {
01116   register const char *yys = yystr;
01117 
01118   while (*yys++ != '\0')
01119     continue;
01120 
01121   return yys - yystr - 1;
01122 }
01123 #  endif
01124 # endif
01125 
01126 # ifndef yystpcpy
01127 #  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
01128 #   define yystpcpy stpcpy
01129 #  else
01130 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
01131    YYDEST.  */
01132 static char *
01133 #   if defined (__STDC__) || defined (__cplusplus)
01134 yystpcpy (char *yydest, const char *yysrc)
01135 #   else
01136 yystpcpy (yydest, yysrc)
01137      char *yydest;
01138      const char *yysrc;
01139 #   endif
01140 {
01141   register char *yyd = yydest;
01142   register const char *yys = yysrc;
01143 
01144   while ((*yyd++ = *yys++) != '\0')
01145     continue;
01146 
01147   return yyd - 1;
01148 }
01149 #  endif
01150 # endif
01151 
01152 #endif /* !YYERROR_VERBOSE */
01153 
01154 
01155 
01156 #if YYDEBUG
01157 /*--------------------------------.
01158 | Print this symbol on YYOUTPUT.  |
01159 `--------------------------------*/
01160 
01161 #if defined (__STDC__) || defined (__cplusplus)
01162 static void
01163 yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp)
01164 #else
01165 static void
01166 yysymprint (yyoutput, yytype, yyvaluep, yylocationp)
01167     FILE *yyoutput;
01168     int yytype;
01169     YYSTYPE *yyvaluep;
01170     YYLTYPE *yylocationp;
01171 #endif
01172 {
01173   /* Pacify ``unused variable'' warnings.  */
01174   (void) yyvaluep;
01175   (void) yylocationp;
01176 
01177   if (yytype < YYNTOKENS)
01178     {
01179       YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
01180 # ifdef YYPRINT
01181       YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
01182 # endif
01183     }
01184   else
01185     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
01186 
01187   switch (yytype)
01188     {
01189       default:
01190         break;
01191     }
01192   YYFPRINTF (yyoutput, ")");
01193 }
01194 
01195 #endif /* ! YYDEBUG */
01196 /*-----------------------------------------------.
01197 | Release the memory associated to this symbol.  |
01198 `-----------------------------------------------*/
01199 
01200 #if defined (__STDC__) || defined (__cplusplus)
01201 static void
01202 yydestruct (int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp)
01203 #else
01204 static void
01205 yydestruct (yytype, yyvaluep, yylocationp)
01206     int yytype;
01207     YYSTYPE *yyvaluep;
01208     YYLTYPE *yylocationp;
01209 #endif
01210 {
01211   /* Pacify ``unused variable'' warnings.  */
01212   (void) yyvaluep;
01213   (void) yylocationp;
01214 
01215   switch (yytype)
01216     {
01217 
01218       default:
01219         break;
01220     }
01221 }
01222 
01223 
01224 /* Prevent warnings from -Wmissing-prototypes.  */
01225 
01226 #ifdef YYPARSE_PARAM
01227 # if defined (__STDC__) || defined (__cplusplus)
01228 int yyparse (void *YYPARSE_PARAM);
01229 # else
01230 int yyparse ();
01231 # endif
01232 #else /* ! YYPARSE_PARAM */
01233 #if defined (__STDC__) || defined (__cplusplus)
01234 int yyparse (void);
01235 #else
01236 int yyparse ();
01237 #endif
01238 #endif /* ! YYPARSE_PARAM */
01239 
01240 
01241 
01242 
01243 
01244 
01245 /*----------.
01246 | yyparse.  |
01247 `----------*/
01248 
01249 #ifdef YYPARSE_PARAM
01250 # if defined (__STDC__) || defined (__cplusplus)
01251 int yyparse (void *YYPARSE_PARAM)
01252 # else
01253 int yyparse (YYPARSE_PARAM)
01254   void *YYPARSE_PARAM;
01255 # endif
01256 #else /* ! YYPARSE_PARAM */
01257 #if defined (__STDC__) || defined (__cplusplus)
01258 int
01259 yyparse (void)
01260 #else
01261 int
01262 yyparse ()
01263 
01264 #endif
01265 #endif
01266 {
01267   /* The lookahead symbol.  */
01268 int yychar;
01269 
01270 /* The semantic value of the lookahead symbol.  */
01271 YYSTYPE yylval;
01272 
01273 /* Number of syntax errors so far.  */
01274 int yynerrs;
01275 /* Location data for the lookahead symbol.  */
01276 YYLTYPE yylloc;
01277 
01278   register int yystate;
01279   register int yyn;
01280   int yyresult;
01281   /* Number of tokens to shift before error messages enabled.  */
01282   int yyerrstatus;
01283   /* Lookahead token as an internal (translated) token number.  */
01284   int yytoken = 0;
01285 
01286   /* Three stacks and their tools:
01287      `yyss': related to states,
01288      `yyvs': related to semantic values,
01289      `yyls': related to locations.
01290 
01291      Refer to the stacks thru separate pointers, to allow yyoverflow
01292      to reallocate them elsewhere.  */
01293 
01294   /* The state stack.  */
01295   short yyssa[YYINITDEPTH];
01296   short *yyss = yyssa;
01297   register short *yyssp;
01298 
01299   /* The semantic value stack.  */
01300   YYSTYPE yyvsa[YYINITDEPTH];
01301   YYSTYPE *yyvs = yyvsa;
01302   register YYSTYPE *yyvsp;
01303 
01304   /* The location stack.  */
01305   YYLTYPE yylsa[YYINITDEPTH];
01306   YYLTYPE *yyls = yylsa;
01307   YYLTYPE *yylsp;
01308   YYLTYPE *yylerrsp;
01309 
01310 #define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
01311 
01312   YYSIZE_T yystacksize = YYINITDEPTH;
01313 
01314   /* The variables used to return semantic value and location from the
01315      action routines.  */
01316   YYSTYPE yyval;
01317   YYLTYPE yyloc;
01318 
01319   /* When reducing, the number of symbols on the RHS of the reduced
01320      rule.  */
01321   int yylen;
01322 
01323   YYDPRINTF ((stderr, "Starting parse\n"));
01324 
01325   yystate = 0;
01326   yyerrstatus = 0;
01327   yynerrs = 0;
01328   yychar = YYEMPTY;     /* Cause a token to be read.  */
01329 
01330   /* Initialize stack pointers.
01331      Waste one element of value and location stack
01332      so that they stay on the same level as the state stack.
01333      The wasted elements are never initialized.  */
01334 
01335   yyssp = yyss;
01336   yyvsp = yyvs;
01337   yylsp = yyls;
01338   goto yysetstate;
01339 
01340 /*------------------------------------------------------------.
01341 | yynewstate -- Push a new state, which is found in yystate.  |
01342 `------------------------------------------------------------*/
01343  yynewstate:
01344   /* In all cases, when you get here, the value and location stacks
01345      have just been pushed. so pushing a state here evens the stacks.
01346      */
01347   yyssp++;
01348 
01349  yysetstate:
01350   *yyssp = yystate;
01351 
01352   if (yyss + yystacksize - 1 <= yyssp)
01353     {
01354       /* Get the current used size of the three stacks, in elements.  */
01355       YYSIZE_T yysize = yyssp - yyss + 1;
01356 
01357 #ifdef yyoverflow
01358       {
01359     /* Give user a chance to reallocate the stack. Use copies of
01360        these so that the &'s don't force the real ones into
01361        memory.  */
01362     YYSTYPE *yyvs1 = yyvs;
01363     short *yyss1 = yyss;
01364     YYLTYPE *yyls1 = yyls;
01365 
01366     /* Each stack pointer address is followed by the size of the
01367        data in use in that stack, in bytes.  This used to be a
01368        conditional around just the two extra args, but that might
01369        be undefined if yyoverflow is a macro.  */
01370     yyoverflow ("parser stack overflow",
01371             &yyss1, yysize * sizeof (*yyssp),
01372             &yyvs1, yysize * sizeof (*yyvsp),
01373             &yyls1, yysize * sizeof (*yylsp),
01374             &yystacksize);
01375     yyls = yyls1;
01376     yyss = yyss1;
01377     yyvs = yyvs1;
01378       }
01379 #else /* no yyoverflow */
01380 # ifndef YYSTACK_RELOCATE
01381       goto yyoverflowlab;
01382 # else
01383       /* Extend the stack our own way.  */
01384       if (YYMAXDEPTH <= yystacksize)
01385     goto yyoverflowlab;
01386       yystacksize *= 2;
01387       if (YYMAXDEPTH < yystacksize)
01388     yystacksize = YYMAXDEPTH;
01389 
01390       {
01391     short *yyss1 = yyss;
01392     union yyalloc *yyptr =
01393       (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
01394     if (! yyptr)
01395       goto yyoverflowlab;
01396     YYSTACK_RELOCATE (yyss);
01397     YYSTACK_RELOCATE (yyvs);
01398     YYSTACK_RELOCATE (yyls);
01399 #  undef YYSTACK_RELOCATE
01400     if (yyss1 != yyssa)
01401       YYSTACK_FREE (yyss1);
01402       }
01403 # endif
01404 #endif /* no yyoverflow */
01405 
01406       yyssp = yyss + yysize - 1;
01407       yyvsp = yyvs + yysize - 1;
01408       yylsp = yyls + yysize - 1;
01409 
01410       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
01411           (unsigned long int) yystacksize));
01412 
01413       if (yyss + yystacksize - 1 <= yyssp)
01414     YYABORT;
01415     }
01416 
01417   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
01418 
01419   goto yybackup;
01420 
01421 /*-----------.
01422 | yybackup.  |
01423 `-----------*/
01424 yybackup:
01425 
01426 /* Do appropriate processing given the current state.  */
01427 /* Read a lookahead token if we need one and don't already have one.  */
01428 /* yyresume: */
01429 
01430   /* First try to decide what to do without reference to lookahead token.  */
01431 
01432   yyn = yypact[yystate];
01433   if (yyn == YYPACT_NINF)
01434     goto yydefault;
01435 
01436   /* Not known => get a lookahead token if don't already have one.  */
01437 
01438   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
01439   if (yychar == YYEMPTY)
01440     {
01441       YYDPRINTF ((stderr, "Reading a token: "));
01442       yychar = YYLEX;
01443     }
01444 
01445   if (yychar <= YYEOF)
01446     {
01447       yychar = yytoken = YYEOF;
01448       YYDPRINTF ((stderr, "Now at end of input.\n"));
01449     }
01450   else
01451     {
01452       yytoken = YYTRANSLATE (yychar);
01453       YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
01454     }
01455 
01456   /* If the proper action on seeing token YYTOKEN is to reduce or to
01457      detect an error, take that action.  */
01458   yyn += yytoken;
01459   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
01460     goto yydefault;
01461   yyn = yytable[yyn];
01462   if (yyn <= 0)
01463     {
01464       if (yyn == 0 || yyn == YYTABLE_NINF)
01465     goto yyerrlab;
01466       yyn = -yyn;
01467       goto yyreduce;
01468     }
01469 
01470   if (yyn == YYFINAL)
01471     YYACCEPT;
01472 
01473   /* Shift the lookahead token.  */
01474   YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
01475 
01476   /* Discard the token being shifted unless it is eof.  */
01477   if (yychar != YYEOF)
01478     yychar = YYEMPTY;
01479 
01480   *++yyvsp = yylval;
01481   *++yylsp = yylloc;
01482 
01483   /* Count tokens shifted since error; after three, turn off error
01484      status.  */
01485   if (yyerrstatus)
01486     yyerrstatus--;
01487 
01488   yystate = yyn;
01489   goto yynewstate;
01490 
01491 
01492 /*-----------------------------------------------------------.
01493 | yydefault -- do the default action for the current state.  |
01494 `-----------------------------------------------------------*/
01495 yydefault:
01496   yyn = yydefact[yystate];
01497   if (yyn == 0)
01498     goto yyerrlab;
01499   goto yyreduce;
01500 
01501 
01502 /*-----------------------------.
01503 | yyreduce -- Do a reduction.  |
01504 `-----------------------------*/
01505 yyreduce:
01506   /* yyn is the number of a rule to reduce with.  */
01507   yylen = yyr2[yyn];
01508 
01509   /* If YYLEN is nonzero, implement the default value of the action:
01510      `$$ = $1'.
01511 
01512      Otherwise, the following line sets YYVAL to garbage.
01513      This behavior is undocumented and Bison
01514      users should not rely upon it.  Assigning to YYVAL
01515      unconditionally makes the parser a bit smaller, and it avoids a
01516      GCC warning that YYVAL may be used uninitialized.  */
01517   yyval = yyvsp[1-yylen];
01518 
01519   /* Default location. */
01520   YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
01521   YY_REDUCE_PRINT (yyn);
01522   switch (yyn)
01523     {
01524         case 4:
01525 #line 125 "wmlscript/wsgram.y"
01526     { ws_error_syntax(pctx, yylsp[0].first_line); }
01527     break;
01528 
01529   case 8:
01530 #line 138 "wmlscript/wsgram.y"
01531     { ws_error_syntax(pctx, yylsp[0].first_line); }
01532     break;
01533 
01534   case 12:
01535 #line 149 "wmlscript/wsgram.y"
01536     { ws_pragma_use(pctx, yylsp[-1].first_line, yyvsp[-1].identifier, yyvsp[0].string); }
01537     break;
01538 
01539   case 14:
01540 #line 158 "wmlscript/wsgram.y"
01541     {
01542             WsCompiler *compiler = (WsCompiler *) pctx;
01543 
01544             /* Pass this to the byte-code */
01545             if (!ws_bc_add_pragma_access_domain(compiler->bc, yyvsp[0].string->data,
01546                                 yyvsp[0].string->len))
01547                 ws_error_memory(pctx);
01548             ws_lexer_free_utf8(compiler, yyvsp[0].string);
01549         }
01550     break;
01551 
01552   case 15:
01553 #line 168 "wmlscript/wsgram.y"
01554     {
01555             WsCompiler *compiler = (WsCompiler *) pctx;
01556 
01557             /* Pass this to the byte-code */
01558             if (!ws_bc_add_pragma_access_path(compiler->bc, yyvsp[0].string->data,
01559                               yyvsp[0].string->len))
01560                 ws_error_memory(pctx);
01561 
01562             ws_lexer_free_utf8(compiler, yyvsp[0].string);
01563         }
01564     break;
01565 
01566   case 16:
01567 #line 179 "wmlscript/wsgram.y"
01568     {
01569             WsCompiler *compiler = (WsCompiler *) pctx;
01570             WsBool success = WS_TRUE;
01571 
01572             /* Pass these to the byte-code */
01573             if (!ws_bc_add_pragma_access_domain(compiler->bc, yyvsp[-2].string->data,
01574                                 yyvsp[-2].string->len))
01575                 success = WS_FALSE;
01576 
01577             if (!ws_bc_add_pragma_access_path(compiler->bc, yyvsp[0].string->data,
01578                               yyvsp[0].string->len))
01579                 success = WS_FALSE;
01580 
01581             if (!success)
01582                 ws_error_memory(pctx);
01583 
01584             ws_lexer_free_utf8(compiler, yyvsp[-2].string);
01585             ws_lexer_free_utf8(compiler, yyvsp[0].string);
01586         }
01587     break;
01588 
01589   case 21:
01590 #line 212 "wmlscript/wsgram.y"
01591     {
01592             WsCompiler *compiler = (WsCompiler *) pctx;
01593 
01594             /* Meta information for the origin servers.  Show it
01595                      * to the user if requested. */
01596             if (compiler->params.meta_name_cb)
01597                 (*compiler->params.meta_name_cb)(
01598                     yyvsp[0].meta_body->property_name, yyvsp[0].meta_body->content,
01599                     yyvsp[0].meta_body->scheme,
01600                     compiler->params.meta_name_cb_context);
01601 
01602             /* We do not need the MetaBody anymore. */
01603             ws_pragma_meta_body_free(compiler, yyvsp[0].meta_body);
01604         }
01605     break;
01606 
01607   case 22:
01608 #line 230 "wmlscript/wsgram.y"
01609     {
01610             WsCompiler *compiler = (WsCompiler *) pctx;
01611 
01612             /* Meta information HTTP header that should be
01613                      * included to an HTTP response header.  Show it to
01614                      * the user if requested. */
01615             if (compiler->params.meta_http_equiv_cb)
01616                 (*compiler->params.meta_http_equiv_cb)(
01617                 yyvsp[0].meta_body->property_name,
01618                 yyvsp[0].meta_body->content,
01619                 yyvsp[0].meta_body->scheme,
01620                 compiler->params.meta_http_equiv_cb_context);
01621 
01622             /* We do not need the MetaBody anymore. */
01623             ws_pragma_meta_body_free(compiler, yyvsp[0].meta_body);
01624         }
01625     break;
01626 
01627   case 23:
01628 #line 250 "wmlscript/wsgram.y"
01629     {
01630             WsBool success;
01631             WsCompiler *compiler = (WsCompiler *) pctx;
01632 
01633             /* Pass this pragma to the byte-code */
01634             if (yyvsp[0].meta_body) {
01635                 if (yyvsp[0].meta_body->scheme)
01636                 success
01637               = ws_bc_add_pragma_user_agent_property_and_scheme(
01638                         compiler->bc,
01639                         yyvsp[0].meta_body->property_name->data,
01640                         yyvsp[0].meta_body->property_name->len,
01641                         yyvsp[0].meta_body->content->data,
01642                         yyvsp[0].meta_body->content->len,
01643                         yyvsp[0].meta_body->scheme->data,
01644                         yyvsp[0].meta_body->scheme->len);
01645                 else
01646                 success = ws_bc_add_pragma_user_agent_property(
01647                         compiler->bc,
01648                         yyvsp[0].meta_body->property_name->data,
01649                         yyvsp[0].meta_body->property_name->len,
01650                         yyvsp[0].meta_body->content->data,
01651                         yyvsp[0].meta_body->content->len);
01652 
01653                 /* Free the MetaBody. */
01654                 ws_pragma_meta_body_free(compiler, yyvsp[0].meta_body);
01655 
01656                 if (!success)
01657                 ws_error_memory(pctx);
01658             }
01659         }
01660     break;
01661 
01662   case 24:
01663 #line 285 "wmlscript/wsgram.y"
01664     { yyval.meta_body = ws_pragma_meta_body(pctx, yyvsp[-1].string, yyvsp[0].string, NULL); }
01665     break;
01666 
01667   case 25:
01668 #line 287 "wmlscript/wsgram.y"
01669     { yyval.meta_body = ws_pragma_meta_body(pctx, yyvsp[-2].string, yyvsp[-1].string, yyvsp[0].string); }
01670     break;
01671 
01672   case 31:
01673 #line 304 "wmlscript/wsgram.y"
01674     {
01675             char *name = ws_strdup(yyvsp[-5].identifier);
01676 
01677             ws_lexer_free_block(pctx, yyvsp[-5].identifier);
01678 
01679             if (name)
01680                 ws_function(pctx, yyvsp[-7].boolean, name, yylsp[-5].first_line, yyvsp[-3].list, yyvsp[-1].list);
01681             else
01682                 ws_error_memory(pctx);
01683         }
01684     break;
01685 
01686   case 32:
01687 #line 317 "wmlscript/wsgram.y"
01688     { yyval.boolean = WS_FALSE; }
01689     break;
01690 
01691   case 33:
01692 #line 318 "wmlscript/wsgram.y"
01693     { yyval.boolean = WS_TRUE;  }
01694     break;
01695 
01696   case 34:
01697 #line 323 "wmlscript/wsgram.y"
01698     { yyval.list = ws_list_new(pctx); }
01699     break;
01700 
01701   case 38:
01702 #line 334 "wmlscript/wsgram.y"
01703     {
01704                     char *id;
01705                     WsFormalParm *parm;
01706 
01707             id = ws_f_strdup(((WsCompiler *) pctx)->pool_stree, yyvsp[0].identifier);
01708                     parm = ws_formal_parameter(pctx, yylsp[0].first_line, id);
01709 
01710             ws_lexer_free_block(pctx, yyvsp[0].identifier);
01711 
01712             if (id == NULL || parm == NULL) {
01713                 ws_error_memory(pctx);
01714                 yyval.list = NULL;
01715             } else {
01716                 yyval.list = ws_list_new(pctx);
01717                 ws_list_append(pctx, yyval.list, parm);
01718             }
01719         }
01720     break;
01721 
01722   case 39:
01723 #line 352 "wmlscript/wsgram.y"
01724     {
01725                     char *id;
01726                     WsFormalParm *parm;
01727 
01728             id = ws_f_strdup(((WsCompiler *) pctx)->pool_stree, yyvsp[0].identifier);
01729                     parm = ws_formal_parameter(pctx, yylsp[-2].first_line, id);
01730 
01731             ws_lexer_free_block(pctx, yyvsp[0].identifier);
01732 
01733             if (id == NULL || parm == NULL) {
01734                 ws_error_memory(pctx);
01735                 yyval.list = NULL;
01736             } else
01737                 ws_list_append(pctx, yyvsp[-2].list, parm);
01738         }
01739     break;
01740 
01741   case 40:
01742 #line 373 "wmlscript/wsgram.y"
01743     {
01744             if (yyvsp[0].list)
01745                 yyval.stmt = ws_stmt_block(pctx, yyvsp[0].list->first_line, yyvsp[0].list->last_line,
01746                            yyvsp[0].list);
01747             else
01748                 yyval.stmt = NULL;
01749         }
01750     break;
01751 
01752   case 42:
01753 #line 382 "wmlscript/wsgram.y"
01754     { yyval.stmt = ws_stmt_empty(pctx, yylsp[0].first_line); }
01755     break;
01756 
01757   case 43:
01758 #line 384 "wmlscript/wsgram.y"
01759     { yyval.stmt = ws_stmt_expr(pctx, yyvsp[-1].expr->line, yyvsp[-1].expr); }
01760     break;
01761 
01762   case 46:
01763 #line 388 "wmlscript/wsgram.y"
01764     { yyval.stmt = ws_stmt_continue(pctx, yylsp[-1].first_line); }
01765     break;
01766 
01767   case 47:
01768 #line 390 "wmlscript/wsgram.y"
01769     { yyval.stmt = ws_stmt_break(pctx, yylsp[-1].first_line); }
01770     break;
01771 
01772   case 49:
01773 #line 395 "wmlscript/wsgram.y"
01774     {
01775             yyval.list = yyvsp[-1].list;
01776             if (yyval.list) {
01777                 yyval.list->first_line = yylsp[-2].first_line;
01778                 yyval.list->last_line = yylsp[0].first_line;
01779             }
01780         }
01781     break;
01782 
01783   case 50:
01784 #line 403 "wmlscript/wsgram.y"
01785     {
01786             ws_error_syntax(pctx, yylsp[0].first_line);
01787             yyval.list = NULL;
01788         }
01789     break;
01790 
01791   case 51:
01792 #line 411 "wmlscript/wsgram.y"
01793     { yyval.list = ws_list_new(pctx); }
01794     break;
01795 
01796   case 53:
01797 #line 417 "wmlscript/wsgram.y"
01798     {
01799             yyval.list = ws_list_new(pctx);
01800             ws_list_append(pctx, yyval.list, yyvsp[0].stmt);
01801         }
01802     break;
01803 
01804   case 54:
01805 #line 422 "wmlscript/wsgram.y"
01806     { ws_list_append(pctx, yyvsp[-1].list, yyvsp[0].stmt); }
01807     break;
01808 
01809   case 55:
01810 #line 427 "wmlscript/wsgram.y"
01811     { yyval.stmt = ws_stmt_variable(pctx, yylsp[-2].first_line, yyvsp[-1].list); }
01812     break;
01813 
01814   case 56:
01815 #line 429 "wmlscript/wsgram.y"
01816     { ws_error_syntax(pctx, yylsp[0].first_line); }
01817     break;
01818 
01819   case 57:
01820 #line 434 "wmlscript/wsgram.y"
01821     {
01822             yyval.list = ws_list_new(pctx);
01823             ws_list_append(pctx, yyval.list, yyvsp[0].vardec);
01824         }
01825     break;
01826 
01827   case 58:
01828 #line 439 "wmlscript/wsgram.y"
01829     { ws_list_append(pctx, yyvsp[-2].list, yyvsp[0].vardec); }
01830     break;
01831 
01832   case 59:
01833 #line 444 "wmlscript/wsgram.y"
01834     {
01835             char *id = ws_f_strdup(((WsCompiler *) pctx)->pool_stree,
01836                        yyvsp[-1].identifier);
01837 
01838             ws_lexer_free_block(pctx, yyvsp[-1].identifier);
01839             if (id == NULL) {
01840                 ws_error_memory(pctx);
01841                 yyval.vardec = NULL;
01842             } else
01843                 yyval.vardec = ws_variable_declaration(pctx, id, yyvsp[0].expr);
01844         }
01845     break;
01846 
01847   case 60:
01848 #line 459 "wmlscript/wsgram.y"
01849     { yyval.expr = NULL; }
01850     break;
01851 
01852   case 61:
01853 #line 461 "wmlscript/wsgram.y"
01854     { yyval.expr = yyvsp[0].expr; }
01855     break;
01856 
01857   case 62:
01858 #line 466 "wmlscript/wsgram.y"
01859     { yyval.stmt = ws_stmt_if(pctx, yylsp[-6].first_line, yyvsp[-4].expr, yyvsp[-2].stmt, yyvsp[0].stmt); }
01860     break;
01861 
01862   case 63:
01863 #line 468 "wmlscript/wsgram.y"
01864     { yyval.stmt = ws_stmt_if(pctx, yylsp[-4].first_line, yyvsp[-2].expr, yyvsp[0].stmt, NULL); }
01865     break;
01866 
01867   case 64:
01868 #line 473 "wmlscript/wsgram.y"
01869     { yyval.stmt = ws_stmt_while(pctx, yylsp[-4].first_line, yyvsp[-2].expr, yyvsp[0].stmt); }
01870     break;
01871 
01872   case 66:
01873 #line 480 "wmlscript/wsgram.y"
01874     { yyval.stmt = ws_stmt_for(pctx, yylsp[-8].first_line, NULL, yyvsp[-6].expr, yyvsp[-4].expr, yyvsp[-2].expr, yyvsp[0].stmt); }
01875     break;
01876 
01877   case 67:
01878 #line 483 "wmlscript/wsgram.y"
01879     { yyval.stmt = ws_stmt_for(pctx, yylsp[-9].first_line, yyvsp[-6].list, NULL, yyvsp[-4].expr, yyvsp[-2].expr, yyvsp[0].stmt); }
01880     break;
01881 
01882   case 68:
01883 #line 488 "wmlscript/wsgram.y"
01884     { yyval.stmt = ws_stmt_return(pctx, yylsp[-2].first_line, yyvsp[-1].expr); }
01885     break;
01886 
01887   case 69:
01888 #line 494 "wmlscript/wsgram.y"
01889     { yyval.expr = NULL; }
01890     break;
01891 
01892   case 72:
01893 #line 502 "wmlscript/wsgram.y"
01894     { yyval.expr = ws_expr_comma(pctx, yylsp[-1].first_line, yyvsp[-2].expr, yyvsp[0].expr); }
01895     break;
01896 
01897   case 74:
01898 #line 508 "wmlscript/wsgram.y"
01899     { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, '=', yyvsp[0].expr); }
01900     break;
01901 
01902   case 75:
01903 #line 510 "wmlscript/wsgram.y"
01904     { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tMULA, yyvsp[0].expr); }
01905     break;
01906 
01907   case 76:
01908 #line 512 "wmlscript/wsgram.y"
01909     { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tDIVA, yyvsp[0].expr); }
01910     break;
01911 
01912   case 77:
01913 #line 514 "wmlscript/wsgram.y"
01914     { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tREMA, yyvsp[0].expr); }
01915     break;
01916 
01917   case 78:
01918 #line 516 "wmlscript/wsgram.y"
01919     { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tADDA, yyvsp[0].expr); }
01920     break;
01921 
01922   case 79:
01923 #line 518 "wmlscript/wsgram.y"
01924     { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tSUBA, yyvsp[0].expr); }
01925     break;
01926 
01927   case 80:
01928 #line 520 "wmlscript/wsgram.y"
01929     { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tLSHIFTA, yyvsp[0].expr); }
01930     break;
01931 
01932   case 81:
01933 #line 522 "wmlscript/wsgram.y"
01934     { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tRSSHIFTA, yyvsp[0].expr); }
01935     break;
01936 
01937   case 82:
01938 #line 524 "wmlscript/wsgram.y"
01939     { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tRSZSHIFTA, yyvsp[0].expr); }
01940     break;
01941 
01942   case 83:
01943 #line 526 "wmlscript/wsgram.y"
01944     { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tANDA, yyvsp[0].expr); }
01945     break;
01946 
01947   case 84:
01948 #line 528 "wmlscript/wsgram.y"
01949     { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tXORA, yyvsp[0].expr); }
01950     break;
01951 
01952   case 85:
01953 #line 530 "wmlscript/wsgram.y"
01954     { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tORA, yyvsp[0].expr); }
01955     break;
01956 
01957   case 86:
01958 #line 532 "wmlscript/wsgram.y"
01959     { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tIDIVA, yyvsp[0].expr); }
01960     break;
01961 
01962   case 88:
01963 #line 538 "wmlscript/wsgram.y"
01964     { yyval.expr = ws_expr_conditional(pctx, yylsp[-3].first_line, yyvsp[-4].expr, yyvsp[-2].expr, yyvsp[0].expr); }
01965     break;
01966 
01967   case 90:
01968 #line 544 "wmlscript/wsgram.y"
01969     { yyval.expr = ws_expr_logical(pctx, yylsp[-1].first_line, WS_ASM_SCOR, yyvsp[-2].expr, yyvsp[0].expr); }
01970     break;
01971 
01972   case 92:
01973 #line 550 "wmlscript/wsgram.y"
01974     { yyval.expr = ws_expr_logical(pctx, yylsp[-1].first_line, WS_ASM_SCAND, yyvsp[-2].expr, yyvsp[0].expr); }
01975     break;
01976 
01977   case 94:
01978 #line 556 "wmlscript/wsgram.y"
01979     { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_B_OR, yyvsp[-2].expr, yyvsp[0].expr); }
01980     break;
01981 
01982   case 96:
01983 #line 562 "wmlscript/wsgram.y"
01984     { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_B_XOR, yyvsp[-2].expr, yyvsp[0].expr); }
01985     break;
01986 
01987   case 98:
01988 #line 568 "wmlscript/wsgram.y"
01989     { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_B_AND, yyvsp[-2].expr, yyvsp[0].expr); }
01990     break;
01991 
01992   case 100:
01993 #line 574 "wmlscript/wsgram.y"
01994     { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_EQ, yyvsp[-2].expr, yyvsp[0].expr); }
01995     break;
01996 
01997   case 101:
01998 #line 576 "wmlscript/wsgram.y"
01999     { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_NE, yyvsp[-2].expr, yyvsp[0].expr); }
02000     break;
02001 
02002   case 103:
02003 #line 582 "wmlscript/wsgram.y"
02004     { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_LT, yyvsp[-2].expr, yyvsp[0].expr); }
02005     break;
02006 
02007   case 104:
02008 #line 584 "wmlscript/wsgram.y"
02009     { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_GT, yyvsp[-2].expr, yyvsp[0].expr); }
02010     break;
02011 
02012   case 105:
02013 #line 586 "wmlscript/wsgram.y"
02014     { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_LE, yyvsp[-2].expr, yyvsp[0].expr); }
02015     break;
02016 
02017   case 106:
02018 #line 588 "wmlscript/wsgram.y"
02019     { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_GE, yyvsp[-2].expr, yyvsp[0].expr); }
02020     break;
02021 
02022   case 108:
02023 #line 594 "wmlscript/wsgram.y"
02024     { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_B_LSHIFT, yyvsp[-2].expr, yyvsp[0].expr); }
02025     break;
02026 
02027   case 109:
02028 #line 596 "wmlscript/wsgram.y"
02029     { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_B_RSSHIFT, yyvsp[-2].expr, yyvsp[0].expr); }
02030     break;
02031 
02032   case 110:
02033 #line 598 "wmlscript/wsgram.y"
02034     { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_B_RSZSHIFT, yyvsp[-2].expr, yyvsp[0].expr); }
02035     break;
02036 
02037   case 112:
02038 #line 604 "wmlscript/wsgram.y"
02039     { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_ADD, yyvsp[-2].expr, yyvsp[0].expr); }
02040     break;
02041 
02042   case 113:
02043 #line 606 "wmlscript/wsgram.y"
02044     { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_SUB, yyvsp[-2].expr, yyvsp[0].expr); }
02045     break;
02046 
02047   case 115:
02048 #line 612 "wmlscript/wsgram.y"
02049     { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_MUL, yyvsp[-2].expr, yyvsp[0].expr); }
02050     break;
02051 
02052   case 116:
02053 #line 614 "wmlscript/wsgram.y"
02054     { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_DIV, yyvsp[-2].expr, yyvsp[0].expr); }
02055     break;
02056 
02057   case 117:
02058 #line 616 "wmlscript/wsgram.y"
02059     { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_IDIV, yyvsp[-2].expr, yyvsp[0].expr); }
02060     break;
02061 
02062   case 118:
02063 #line 618 "wmlscript/wsgram.y"
02064     { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_REM, yyvsp[-2].expr, yyvsp[0].expr); }
02065     break;
02066 
02067   case 120:
02068 #line 624 "wmlscript/wsgram.y"
02069     { yyval.expr = ws_expr_unary(pctx, yylsp[-1].first_line, WS_ASM_TYPEOF, yyvsp[0].expr); }
02070     break;
02071 
02072   case 121:
02073 #line 626 "wmlscript/wsgram.y"
02074     { yyval.expr = ws_expr_unary(pctx, yylsp[-1].first_line, WS_ASM_ISVALID, yyvsp[0].expr); }
02075     break;
02076 
02077   case 122:
02078 #line 628 "wmlscript/wsgram.y"
02079     { yyval.expr = ws_expr_unary_var(pctx, yylsp[-1].first_line, WS_TRUE, yyvsp[0].identifier); }
02080     break;
02081 
02082   case 123:
02083 #line 630 "wmlscript/wsgram.y"
02084     { yyval.expr = ws_expr_unary_var(pctx, yylsp[-1].first_line, WS_FALSE, yyvsp[0].identifier); }
02085     break;
02086 
02087   case 124:
02088 #line 632 "wmlscript/wsgram.y"
02089     {
02090                     /* There is no direct way to compile unary `+'.
02091                      * It doesn't do anything except require type conversion
02092              * (section 7.2, 7.3.2), and we do that by converting
02093              * it to a binary expression: `UnaryExpression - 0'.
02094                      * Using `--UnaryExpression' would not be correct because
02095                      * it might overflow if UnaryExpression is the smallest
02096                      * possible integer value (see 6.2.7.1).
02097                      * Using `UnaryExpression + 0' would not be correct
02098                      * because binary `+' accepts strings, which makes the
02099              * type conversion different.
02100                      */
02101                     yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_SUB, yyvsp[0].expr,
02102                               ws_expr_const_integer(pctx, yylsp[-1].first_line, 0));
02103         }
02104     break;
02105 
02106   case 125:
02107 #line 648 "wmlscript/wsgram.y"
02108     { yyval.expr = ws_expr_unary(pctx, yylsp[-1].first_line, WS_ASM_UMINUS, yyvsp[0].expr); }
02109     break;
02110 
02111   case 126:
02112 #line 650 "wmlscript/wsgram.y"
02113     { yyval.expr = ws_expr_unary(pctx, yylsp[-1].first_line, WS_ASM_B_NOT, yyvsp[0].expr); }
02114     break;
02115 
02116   case 127:
02117 #line 652 "wmlscript/wsgram.y"
02118     { yyval.expr = ws_expr_unary(pctx, yylsp[-1].first_line, WS_ASM_NOT, yyvsp[0].expr); }
02119     break;
02120 
02121   case 129:
02122 #line 658 "wmlscript/wsgram.y"
02123     { yyval.expr = ws_expr_postfix_var(pctx, yylsp[-1].first_line, WS_TRUE, yyvsp[-1].identifier); }
02124     break;
02125 
02126   case 130:
02127 #line 660 "wmlscript/wsgram.y"
02128     { yyval.expr = ws_expr_postfix_var(pctx, yylsp[-1].first_line, WS_FALSE, yyvsp[-1].identifier); }
02129     break;
02130 
02131   case 132:
02132 #line 666 "wmlscript/wsgram.y"
02133     {
02134             WsFunctionHash *f = ws_function_hash(pctx, yyvsp[-1].identifier);
02135 
02136             /* Add an usage count for the local script function. */
02137             if (f)
02138               f->usage_count++;
02139 
02140             yyval.expr = ws_expr_call(pctx, yylsp[-1].first_line, ' ', NULL, yyvsp[-1].identifier, yyvsp[0].list);
02141         }
02142     break;
02143 
02144   case 133:
02145 #line 676 "wmlscript/wsgram.y"
02146     { yyval.expr = ws_expr_call(pctx, yylsp[-1].first_line, '#', yyvsp[-3].identifier, yyvsp[-1].identifier, yyvsp[0].list); }
02147     break;
02148 
02149   case 134:
02150 #line 678 "wmlscript/wsgram.y"
02151     { yyval.expr = ws_expr_call(pctx, yylsp[-1].first_line, '.', yyvsp[-3].identifier, yyvsp[-1].identifier, yyvsp[0].list); }
02152     break;
02153 
02154   case 135:
02155 #line 683 "wmlscript/wsgram.y"
02156     { yyval.expr = ws_expr_symbol(pctx, yylsp[0].first_line, yyvsp[0].identifier); }
02157     break;
02158 
02159   case 136:
02160 #line 685 "wmlscript/wsgram.y"
02161     { yyval.expr = ws_expr_const_invalid(pctx, yylsp[0].first_line); }
02162     break;
02163 
02164   case 137:
02165 #line 687 "wmlscript/wsgram.y"
02166     { yyval.expr = ws_expr_const_true(pctx, yylsp[0].first_line); }
02167     break;
02168 
02169   case 138:
02170 #line 689 "wmlscript/wsgram.y"
02171     { yyval.expr = ws_expr_const_false(pctx, yylsp[0].first_line); }
02172     break;
02173 
02174   case 139:
02175 #line 691 "wmlscript/wsgram.y"
02176     { yyval.expr = ws_expr_const_integer(pctx, yylsp[0].first_line, yyvsp[0].integer); }
02177     break;
02178 
02179   case 140:
02180 #line 693 "wmlscript/wsgram.y"
02181     { yyval.expr = ws_expr_const_float(pctx, yylsp[0].first_line, yyvsp[0].vfloat); }
02182     break;
02183 
02184   case 141:
02185 #line 695 "wmlscript/wsgram.y"
02186     { yyval.expr = ws_expr_const_string(pctx, yylsp[0].first_line, yyvsp[0].string); }
02187     break;
02188 
02189   case 142:
02190 #line 697 "wmlscript/wsgram.y"
02191     { yyval.expr = yyvsp[-1].expr; }
02192     break;
02193 
02194   case 143:
02195 #line 702 "wmlscript/wsgram.y"
02196     { yyval.list = ws_list_new(pctx); }
02197     break;
02198 
02199   case 144:
02200 #line 704 "wmlscript/wsgram.y"
02201     { yyval.list = yyvsp[-1].list; }
02202     break;
02203 
02204   case 145:
02205 #line 709 "wmlscript/wsgram.y"
02206     {
02207             yyval.list = ws_list_new(pctx);
02208             ws_list_append(pctx, yyval.list, yyvsp[0].expr);
02209         }
02210     break;
02211 
02212   case 146:
02213 #line 714 "wmlscript/wsgram.y"
02214     { ws_list_append(pctx, yyvsp[-2].list, yyvsp[0].expr); }
02215     break;
02216 
02217 
02218     }
02219 
02220 /* Line 999 of yacc.c.  */
02221 #line 2221 "y.tab.c"
02222 
02223   yyvsp -= yylen;
02224   yyssp -= yylen;
02225   yylsp -= yylen;
02226 
02227   YY_STACK_PRINT (yyss, yyssp);
02228 
02229   *++yyvsp = yyval;
02230   *++yylsp = yyloc;
02231 
02232   /* Now `shift' the result of the reduction.  Determine what state
02233      that goes to, based on the state we popped back to and the rule
02234      number reduced by.  */
02235 
02236   yyn = yyr1[yyn];
02237 
02238   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
02239   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
02240     yystate = yytable[yystate];
02241   else
02242     yystate = yydefgoto[yyn - YYNTOKENS];
02243 
02244   goto yynewstate;
02245 
02246 
02247 /*------------------------------------.
02248 | yyerrlab -- here on detecting error |
02249 `------------------------------------*/
02250 yyerrlab:
02251   /* If not already recovering from an error, report this error.  */
02252   if (!yyerrstatus)
02253     {
02254       ++yynerrs;
02255 #if YYERROR_VERBOSE
02256       yyn = yypact[yystate];
02257 
02258       if (YYPACT_NINF < yyn && yyn < YYLAST)
02259     {
02260       YYSIZE_T yysize = 0;
02261       int yytype = YYTRANSLATE (yychar);
02262       char *yymsg;
02263       int yyx, yycount;
02264 
02265       yycount = 0;
02266       /* Start YYX at -YYN if negative to avoid negative indexes in
02267          YYCHECK.  */
02268       for (yyx = yyn < 0 ? -yyn : 0;
02269            yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
02270         if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
02271           yysize += yystrlen (yytname[yyx]) + 15, yycount++;
02272       yysize += yystrlen ("syntax error, unexpected ") + 1;
02273       yysize += yystrlen (yytname[yytype]);
02274       yymsg = (char *) YYSTACK_ALLOC (yysize);
02275       if (yymsg != 0)
02276         {
02277           char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
02278           yyp = yystpcpy (yyp, yytname[yytype]);
02279 
02280           if (yycount < 5)
02281         {
02282           yycount = 0;
02283           for (yyx = yyn < 0 ? -yyn : 0;
02284                yyx < (int) (sizeof (yytname) / sizeof (char *));
02285                yyx++)
02286             if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
02287               {
02288             const char *yyq = ! yycount ? ", expecting " : " or ";
02289             yyp = yystpcpy (yyp, yyq);
02290             yyp = yystpcpy (yyp, yytname[yyx]);
02291             yycount++;
02292               }
02293         }
02294           yyerror (yymsg);
02295           YYSTACK_FREE (yymsg);
02296         }
02297       else
02298         yyerror ("syntax error; also virtual memory exhausted");
02299     }
02300       else
02301 #endif /* YYERROR_VERBOSE */
02302     yyerror ("syntax error");
02303     }
02304 
02305   yylerrsp = yylsp;
02306 
02307   if (yyerrstatus == 3)
02308     {
02309       /* If just tried and failed to reuse lookahead token after an
02310      error, discard it.  */
02311 
02312       /* Return failure if at end of input.  */
02313       if (yychar == YYEOF)
02314         {
02315       /* Pop the error token.  */
02316           YYPOPSTACK;
02317       /* Pop the rest of the stack.  */
02318       while (yyss < yyssp)
02319         {
02320           YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
02321           yydestruct (yystos[*yyssp], yyvsp, yylsp);
02322           YYPOPSTACK;
02323         }
02324       YYABORT;
02325         }
02326 
02327       YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
02328       yydestruct (yytoken, &yylval, &yylloc);
02329       yychar = YYEMPTY;
02330       *++yylerrsp = yylloc;
02331     }
02332 
02333   /* Else will try to reuse lookahead token after shifting the error
02334      token.  */
02335   goto yyerrlab1;
02336 
02337 
02338 /*----------------------------------------------------.
02339 | yyerrlab1 -- error raised explicitly by an action.  |
02340 `----------------------------------------------------*/
02341 yyerrlab1:
02342   yyerrstatus = 3;  /* Each real token shifted decrements this.  */
02343 
02344   for (;;)
02345     {
02346       yyn = yypact[yystate];
02347       if (yyn != YYPACT_NINF)
02348     {
02349       yyn += YYTERROR;
02350       if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
02351         {
02352           yyn = yytable[yyn];
02353           if (0 < yyn)
02354         break;
02355         }
02356     }
02357 
02358       /* Pop the current state because it cannot handle the error token.  */
02359       if (yyssp == yyss)
02360     YYABORT;
02361 
02362       YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
02363       yydestruct (yystos[yystate], yyvsp, yylsp);
02364       yyvsp--;
02365       yystate = *--yyssp;
02366       yylsp--;
02367       YY_STACK_PRINT (yyss, yyssp);
02368     }
02369 
02370   if (yyn == YYFINAL)
02371     YYACCEPT;
02372 
02373   YYDPRINTF ((stderr, "Shifting error token, "));
02374 
02375   *++yyvsp = yylval;
02376   YYLLOC_DEFAULT (yyloc, yylsp, (yylerrsp - yylsp));
02377   *++yylsp = yyloc;
02378 
02379   yystate = yyn;
02380   goto yynewstate;
02381 
02382 
02383 /*-------------------------------------.
02384 | yyacceptlab -- YYACCEPT comes here.  |
02385 `-------------------------------------*/
02386 yyacceptlab:
02387   yyresult = 0;
02388   goto yyreturn;
02389 
02390 /*-----------------------------------.
02391 | yyabortlab -- YYABORT comes here.  |
02392 `-----------------------------------*/
02393 yyabortlab:
02394   yyresult = 1;
02395   goto yyreturn;
02396 
02397 #ifndef yyoverflow
02398 /*----------------------------------------------.
02399 | yyoverflowlab -- parser overflow comes here.  |
02400 `----------------------------------------------*/
02401 yyoverflowlab:
02402   yyerror ("parser stack overflow");
02403   yyresult = 2;
02404   /* Fall through.  */
02405 #endif
02406 
02407 yyreturn:
02408 #ifndef yyoverflow
02409   if (yyss != yyssa)
02410     YYSTACK_FREE (yyss);
02411 #endif
02412   return yyresult;
02413 }
02414 
02415 
02416 #line 717 "wmlscript/wsgram.y"
02417 
02418 
02419 void
02420 yyerror(char *msg)
02421 {
02422 #if WS_DEBUG
02423   fprintf(stderr, "*** %s:%d: wsc: %s - this msg will be removed ***\n",
02424       global_compiler->input_name, global_compiler->linenum, msg);
02425 #endif /* WS_DEBUG */
02426 }
02427 
See file LICENSE for details about the license agreement for using, modifying, copying or deriving work from this software.