wsgram.c
上传用户:gzpyjq
上传日期:2013-01-31
资源大小:1852k
文件大小:64k
源码类别:

手机WAP编程

开发平台:

WINDOWS

  1. /*  A Bison parser, made from wmlscript/wsgram.y
  2.     by GNU Bison version 1.28  */
  3. #define YYBISON 1  /* Identify Bison output.  */
  4. #define yyparse ws_yy_parse
  5. #define yylex ws_yy_lex
  6. #define yyerror ws_yy_error
  7. #define yylval ws_yy_lval
  8. #define yychar ws_yy_char
  9. #define yydebug ws_yy_debug
  10. #define yynerrs ws_yy_nerrs
  11. #define YYLSP_NEEDED
  12. #define tINVALID 257
  13. #define tTRUE 258
  14. #define tFALSE 259
  15. #define tINTEGER 260
  16. #define tFLOAT 261
  17. #define tSTRING 262
  18. #define tIDENTIFIER 263
  19. #define tACCESS 264
  20. #define tAGENT 265
  21. #define tBREAK 266
  22. #define tCONTINUE 267
  23. #define tIDIV 268
  24. #define tIDIVA 269
  25. #define tDOMAIN 270
  26. #define tELSE 271
  27. #define tEQUIV 272
  28. #define tEXTERN 273
  29. #define tFOR 274
  30. #define tFUNCTION 275
  31. #define tHEADER 276
  32. #define tHTTP 277
  33. #define tIF 278
  34. #define tISVALID 279
  35. #define tMETA 280
  36. #define tNAME 281
  37. #define tPATH 282
  38. #define tRETURN 283
  39. #define tTYPEOF 284
  40. #define tUSE 285
  41. #define tUSER 286
  42. #define tVAR 287
  43. #define tWHILE 288
  44. #define tURL 289
  45. #define tDELETE 290
  46. #define tIN 291
  47. #define tLIB 292
  48. #define tNEW 293
  49. #define tNULL 294
  50. #define tTHIS 295
  51. #define tVOID 296
  52. #define tWITH 297
  53. #define tCASE 298
  54. #define tCATCH 299
  55. #define tCLASS 300
  56. #define tCONST 301
  57. #define tDEBUGGER 302
  58. #define tDEFAULT 303
  59. #define tDO 304
  60. #define tENUM 305
  61. #define tEXPORT 306
  62. #define tEXTENDS 307
  63. #define tFINALLY 308
  64. #define tIMPORT 309
  65. #define tPRIVATE 310
  66. #define tPUBLIC 311
  67. #define tSIZEOF 312
  68. #define tSTRUCT 313
  69. #define tSUPER 314
  70. #define tSWITCH 315
  71. #define tTHROW 316
  72. #define tTRY 317
  73. #define tEQ 318
  74. #define tLE 319
  75. #define tGE 320
  76. #define tNE 321
  77. #define tAND 322
  78. #define tOR 323
  79. #define tPLUSPLUS 324
  80. #define tMINUSMINUS 325
  81. #define tLSHIFT 326
  82. #define tRSSHIFT 327
  83. #define tRSZSHIFT 328
  84. #define tADDA 329
  85. #define tSUBA 330
  86. #define tMULA 331
  87. #define tDIVA 332
  88. #define tANDA 333
  89. #define tORA 334
  90. #define tXORA 335
  91. #define tREMA 336
  92. #define tLSHIFTA 337
  93. #define tRSSHIFTA 338
  94. #define tRSZSHIFTA 339
  95. #line 1 "wmlscript/wsgram.y"
  96. /*
  97.  *
  98.  * wsgram.y
  99.  *
  100.  * Author: Markku Rossi <mtr@iki.fi>
  101.  *
  102.  * Copyright (c) 1999-2000 WAPIT OY LTD.
  103.  *  All rights reserved.
  104.  *
  105.  * Bison grammar for the WMLScript compiler.
  106.  *
  107.  */
  108. #include "wmlscript/wsint.h"
  109. #define YYPARSE_PARAM pctx
  110. #define YYLEX_PARAM pctx
  111. /* The required yyerror() function.  This is actually not used but to
  112.    report the internal parser errors.  All other errors are reported
  113.    by using the `wserror.h' functions. */
  114. extern void yyerror(char *msg);
  115. #if WS_DEBUG
  116. /* Just for debugging purposes. */
  117. WsCompilerPtr global_compiler = NULL;
  118. #endif /* WS_DEBUG */
  119. #line 33 "wmlscript/wsgram.y"
  120. typedef union
  121. {
  122.     WsUInt32 integer;
  123.     WsFloat vfloat;
  124.     char *identifier;
  125.     WsUtf8String *string;
  126.     WsBool boolean;
  127.     WsList *list;
  128.     WsFormalParm *parm;
  129.     WsVarDec *vardec;
  130.     WsPragmaMetaBody *meta_body;
  131.     WsStatement *stmt;
  132.     WsExpression *expr;
  133. } YYSTYPE;
  134. #ifndef YYLTYPE
  135. typedef
  136.   struct yyltype
  137.     {
  138.       int timestamp;
  139.       int first_line;
  140.       int first_column;
  141.       int last_line;
  142.       int last_column;
  143.       char *text;
  144.    }
  145.   yyltype;
  146. #define YYLTYPE yyltype
  147. #endif
  148. #include <stdio.h>
  149. #ifndef __cplusplus
  150. #ifndef __STDC__
  151. #define const
  152. #endif
  153. #endif
  154. #define YYFINAL 257
  155. #define YYFLAG -32768
  156. #define YYNTBASE 109
  157. #define YYTRANSLATE(x) ((unsigned)(x) <= 339 ? yytranslate[x] : 163)
  158. static const char yytranslate[] = {     0,
  159.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  160.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  161.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  162.      2,     2,   106,     2,   107,     2,   104,    97,     2,    87,
  163.     88,   102,   100,    89,   101,   108,   103,     2,     2,     2,
  164.      2,     2,     2,     2,     2,     2,     2,    94,    86,    98,
  165.     92,    99,    93,     2,     2,     2,     2,     2,     2,     2,
  166.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  167.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  168.      2,     2,     2,    96,     2,     2,     2,     2,     2,     2,
  169.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  170.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  171.      2,     2,    90,    95,    91,   105,     2,     2,     2,     2,
  172.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  173.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  174.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  175.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  176.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  177.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  178.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  179.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  180.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  181.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  182.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  183.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  184.      2,     2,     2,     2,     2,     1,     3,     4,     5,     6,
  185.      7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
  186.     17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
  187.     27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
  188.     37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
  189.     47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
  190.     57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
  191.     67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
  192.     77,    78,    79,    80,    81,    82,    83,    84,    85
  193. };
  194. #if YYDEBUG != 0
  195. static const short yyprhs[] = {     0,
  196.      0,     3,     5,     7,     9,    12,    16,    18,    20,    22,
  197.     24,    28,    31,    34,    37,    42,    45,    47,    49,    51,
  198.     54,    58,    62,    65,    69,    71,    73,    75,    77,    80,
  199.     89,    90,    92,    93,    95,    96,    98,   100,   104,   106,
  200.    108,   110,   113,   115,   117,   120,   123,   125,   129,   131,
  201.    132,   134,   136,   139,   143,   146,   148,   152,   155,   156,
  202.    159,   167,   173,   179,   181,   191,   202,   206,   207,   209,
  203.    211,   215,   217,   221,   225,   229,   233,   237,   241,   245,
  204.    249,   253,   257,   261,   265,   269,   271,   277,   279,   283,
  205.    285,   289,   291,   295,   297,   301,   303,   307,   309,   313,
  206.    317,   319,   323,   327,   331,   335,   337,   341,   345,   349,
  207.    351,   355,   359,   361,   365,   369,   373,   377,   379,   382,
  208.    385,   388,   391,   394,   397,   400,   403,   405,   408,   411,
  209.    413,   416,   421,   426,   428,   430,   432,   434,   436,   438,
  210.    440,   444,   447,   451,   453
  211. };
  212. static const short yyrhs[] = {   110,
  213.    125,     0,   125,     0,     1,     0,   111,     0,   110,   111,
  214.      0,    31,   112,    86,     0,     1,     0,   113,     0,   114,
  215.      0,   116,     0,    35,     9,     8,     0,    10,   115,     0,
  216.     16,     8,     0,    28,     8,     0,    16,     8,    28,     8,
  217.      0,    26,   117,     0,   118,     0,   119,     0,   120,     0,
  218.     27,   121,     0,    23,    18,   121,     0,    32,    11,   121,
  219.      0,   122,   123,     0,   122,   123,   124,     0,     8,     0,
  220.      8,     0,     8,     0,   126,     0,   125,   126,     0,   127,
  221.     21,     9,    87,   128,    88,   132,   129,     0,     0,    19,
  222.      0,     0,   130,     0,     0,    86,     0,     9,     0,   130,
  223.     89,     9,     0,   132,     0,   135,     0,    86,     0,   144,
  224.     86,     0,   139,     0,   140,     0,    13,    86,     0,    12,
  225.     86,     0,   142,     0,    90,   133,    91,     0,     1,     0,
  226.      0,   134,     0,   131,     0,   134,   131,     0,    33,   136,
  227.     86,     0,    33,     1,     0,   137,     0,   136,    89,   137,
  228.      0,     9,   138,     0,     0,    92,   146,     0,    24,    87,
  229.    144,    88,   131,    17,   131,     0,    24,    87,   144,    88,
  230.    131,     0,    34,    87,   144,    88,   131,     0,   141,     0,
  231.     20,    87,   143,    86,   143,    86,   143,    88,   131,     0,
  232.     20,    87,    33,   136,    86,   143,    86,   143,    88,   131,
  233.      0,    29,   143,    86,     0,     0,   144,     0,   145,     0,
  234.    144,    89,   145,     0,   146,     0,     9,    92,   145,     0,
  235.      9,    77,   145,     0,     9,    78,   145,     0,     9,    82,
  236.    145,     0,     9,    75,   145,     0,     9,    76,   145,     0,
  237.      9,    83,   145,     0,     9,    84,   145,     0,     9,    85,
  238.    145,     0,     9,    79,   145,     0,     9,    81,   145,     0,
  239.      9,    80,   145,     0,     9,    15,   145,     0,   147,     0,
  240.    147,    93,   145,    94,   145,     0,   148,     0,   147,    69,
  241.    148,     0,   149,     0,   148,    68,   149,     0,   150,     0,
  242.    149,    95,   150,     0,   151,     0,   150,    96,   151,     0,
  243.    152,     0,   151,    97,   152,     0,   153,     0,   152,    64,
  244.    153,     0,   152,    67,   153,     0,   154,     0,   153,    98,
  245.    154,     0,   153,    99,   154,     0,   153,    65,   154,     0,
  246.    153,    66,   154,     0,   155,     0,   154,    72,   155,     0,
  247.    154,    73,   155,     0,   154,    74,   155,     0,   156,     0,
  248.    155,   100,   156,     0,   155,   101,   156,     0,   157,     0,
  249.    156,   102,   157,     0,   156,   103,   157,     0,   156,    14,
  250.    157,     0,   156,   104,   157,     0,   158,     0,    30,   157,
  251.      0,    25,   157,     0,    70,     9,     0,    71,     9,     0,
  252.    100,   157,     0,   101,   157,     0,   105,   157,     0,   106,
  253.    157,     0,   159,     0,     9,    70,     0,     9,    71,     0,
  254.    160,     0,     9,   161,     0,     9,   107,     9,   161,     0,
  255.      9,   108,     9,   161,     0,     9,     0,     3,     0,     4,
  256.      0,     5,     0,     6,     0,     7,     0,     8,     0,    87,
  257.    144,    88,     0,    87,    88,     0,    87,   162,    88,     0,
  258.    145,     0,   162,    89,   145,     0
  259. };
  260. #endif
  261. #if YYDEBUG != 0
  262. static const short yyrline[] = { 0,
  263.    121,   123,   124,   130,   132,   135,   137,   141,   143,   144,
  264.    147,   152,   156,   167,   178,   200,   204,   206,   207,   210,
  265.    228,   248,   283,   286,   290,   291,   292,   296,   298,   301,
  266.    316,   318,   321,   324,   327,   329,   332,   351,   371,   380,
  267.    381,   383,   385,   386,   387,   389,   391,   394,   402,   409,
  268.    412,   415,   421,   425,   428,   432,   438,   442,   457,   460,
  269.    464,   467,   471,   474,   477,   481,   486,   493,   495,   499,
  270.    501,   505,   507,   509,   511,   513,   515,   517,   519,   521,
  271.    523,   525,   527,   529,   531,   535,   537,   541,   543,   547,
  272.    549,   553,   555,   559,   561,   565,   567,   571,   573,   575,
  273.    579,   581,   583,   585,   587,   591,   593,   595,   597,   601,
  274.    603,   605,   609,   611,   613,   615,   617,   621,   623,   625,
  275.    627,   629,   631,   647,   649,   651,   655,   657,   659,   663,
  276.    665,   675,   677,   681,   684,   686,   688,   690,   692,   694,
  277.    696,   700,   703,   707,   713
  278. };
  279. #endif
  280. #if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
  281. static const char * const yytname[] = {   "$","error","$undefined.","tINVALID",
  282. "tTRUE","tFALSE","tINTEGER","tFLOAT","tSTRING","tIDENTIFIER","tACCESS","tAGENT",
  283. "tBREAK","tCONTINUE","tIDIV","tIDIVA","tDOMAIN","tELSE","tEQUIV","tEXTERN","tFOR",
  284. "tFUNCTION","tHEADER","tHTTP","tIF","tISVALID","tMETA","tNAME","tPATH","tRETURN",
  285. "tTYPEOF","tUSE","tUSER","tVAR","tWHILE","tURL","tDELETE","tIN","tLIB","tNEW",
  286. "tNULL","tTHIS","tVOID","tWITH","tCASE","tCATCH","tCLASS","tCONST","tDEBUGGER",
  287. "tDEFAULT","tDO","tENUM","tEXPORT","tEXTENDS","tFINALLY","tIMPORT","tPRIVATE",
  288. "tPUBLIC","tSIZEOF","tSTRUCT","tSUPER","tSWITCH","tTHROW","tTRY","tEQ","tLE",
  289. "tGE","tNE","tAND","tOR","tPLUSPLUS","tMINUSMINUS","tLSHIFT","tRSSHIFT","tRSZSHIFT",
  290. "tADDA","tSUBA","tMULA","tDIVA","tANDA","tORA","tXORA","tREMA","tLSHIFTA","tRSSHIFTA",
  291. "tRSZSHIFTA","';'","'('","')'","','","'{'","'}'","'='","'?'","':'","'|'","'^'",
  292. "'&'","'<'","'>'","'+'","'-'","'*'","'/'","'%'","'~'","'!'","'#'","'.'","CompilationUnit",
  293. "Pragmas","Pragma","PragmaDeclaration","ExternalCompilationUnitPragma","AccessControlPragma",
  294. "AccessControlSpecifier","MetaPragma","MetaSpecifier","MetaName","MetaHttpEquiv",
  295. "MetaUserAgent","MetaBody","MetaPropertyName","MetaContent","MetaScheme","FunctionDeclarations",
  296. "FunctionDeclaration","ExternOpt","FormalParameterListOpt","SemicolonOpt","FormalParameterList",
  297. "Statement","Block","StatementListOpt","StatementList","VariableStatement","VariableDeclarationList",
  298. "VariableDeclaration","VariableInitializedOpt","IfStatement","IterationStatement",
  299. "ForStatement","ReturnStatement","ExpressionOpt","Expression","AssignmentExpression",
  300. "ConditionalExpression","LogicalORExpression","LogicalANDExpression","BitwiseORExpression",
  301. "BitwiseXORExpression","BitwiseANDExpression","EqualityExpression","RelationalExpression",
  302. "ShiftExpression","AdditiveExpression","MultiplicativeExpression","UnaryExpression",
  303. "PostfixExpression","CallExpression","PrimaryExpression","Arguments","ArgumentList", NULL
  304. };
  305. #endif
  306. static const short yyr1[] = {     0,
  307.    109,   109,   109,   110,   110,   111,   111,   112,   112,   112,
  308.    113,   114,   115,   115,   115,   116,   117,   117,   117,   118,
  309.    119,   120,   121,   121,   122,   123,   124,   125,   125,   126,
  310.    127,   127,   128,   128,   129,   129,   130,   130,   131,   131,
  311.    131,   131,   131,   131,   131,   131,   131,   132,   132,   133,
  312.    133,   134,   134,   135,   135,   136,   136,   137,   138,   138,
  313.    139,   139,   140,   140,   141,   141,   142,   143,   143,   144,
  314.    144,   145,   145,   145,   145,   145,   145,   145,   145,   145,
  315.    145,   145,   145,   145,   145,   146,   146,   147,   147,   148,
  316.    148,   149,   149,   150,   150,   151,   151,   152,   152,   152,
  317.    153,   153,   153,   153,   153,   154,   154,   154,   154,   155,
  318.    155,   155,   156,   156,   156,   156,   156,   157,   157,   157,
  319.    157,   157,   157,   157,   157,   157,   158,   158,   158,   159,
  320.    159,   159,   159,   160,   160,   160,   160,   160,   160,   160,
  321.    160,   161,   161,   162,   162
  322. };
  323. static const short yyr2[] = {     0,
  324.      2,     1,     1,     1,     2,     3,     1,     1,     1,     1,
  325.      3,     2,     2,     2,     4,     2,     1,     1,     1,     2,
  326.      3,     3,     2,     3,     1,     1,     1,     1,     2,     8,
  327.      0,     1,     0,     1,     0,     1,     1,     3,     1,     1,
  328.      1,     2,     1,     1,     2,     2,     1,     3,     1,     0,
  329.      1,     1,     2,     3,     2,     1,     3,     2,     0,     2,
  330.      7,     5,     5,     1,     9,    10,     3,     0,     1,     1,
  331.      3,     1,     3,     3,     3,     3,     3,     3,     3,     3,
  332.      3,     3,     3,     3,     3,     1,     5,     1,     3,     1,
  333.      3,     1,     3,     1,     3,     1,     3,     1,     3,     3,
  334.      1,     3,     3,     3,     3,     1,     3,     3,     3,     1,
  335.      3,     3,     1,     3,     3,     3,     3,     1,     2,     2,
  336.      2,     2,     2,     2,     2,     2,     1,     2,     2,     1,
  337.      2,     4,     4,     1,     1,     1,     1,     1,     1,     1,
  338.      3,     2,     3,     1,     3
  339. };
  340. static const short yydefact[] = {     0,
  341.      7,    32,     0,     0,     4,     2,    28,     0,     0,     0,
  342.      0,     0,     8,     9,    10,     7,     5,     1,    29,     0,
  343.      0,     0,    12,     0,     0,     0,    16,    17,    18,    19,
  344.      0,     6,     0,    13,    14,     0,    25,    20,     0,     0,
  345.     11,    33,     0,    21,    26,    23,    22,    37,     0,    34,
  346.     15,    27,    24,     0,     0,    49,     0,    35,    38,   135,
  347.    136,   137,   138,   139,   140,   134,     0,     0,     0,     0,
  348.      0,    68,     0,     0,     0,     0,     0,    41,     0,     0,
  349.      0,     0,     0,    52,    39,     0,     0,    40,    43,    44,
  350.     64,    47,     0,    70,    72,    86,    88,    90,    92,    94,
  351.     96,    98,   101,   106,   110,   113,   118,   127,   130,    36,
  352.     30,     0,   128,   129,     0,     0,     0,     0,     0,     0,
  353.      0,     0,     0,     0,     0,     0,     0,     0,     0,   131,
  354.     46,    45,    68,     0,   134,   120,     0,    69,   119,    55,
  355.     59,     0,    56,     0,   121,   122,     0,   123,   124,   125,
  356.    126,    48,    53,    42,     0,     0,     0,     0,     0,     0,
  357.      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  358.      0,     0,     0,     0,     0,     0,    85,    77,    78,    74,
  359.     75,    82,    84,    83,    76,    79,    80,    81,   142,   144,
  360.      0,    73,     0,     0,     0,     0,     0,    67,     0,    58,
  361.     54,     0,     0,   141,    71,    89,     0,    91,    93,    95,
  362.     97,    99,   100,   104,   105,   102,   103,   107,   108,   109,
  363.    111,   112,   116,   114,   115,   117,   143,     0,   132,   133,
  364.      0,    68,     0,    60,    57,     0,     0,   145,    68,     0,
  365.     62,    63,    87,     0,    68,     0,    68,     0,    61,     0,
  366.      0,     0,    65,    66,     0,     0,     0
  367. };
  368. static const short yydefgoto[] = {   255,
  369.      4,     5,    12,    13,    14,    23,    15,    27,    28,    29,
  370.     30,    38,    39,    46,    53,     6,     7,     8,    49,   111,
  371.     50,    84,    85,    86,    87,    88,   142,   143,   200,    89,
  372.     90,    91,    92,   137,    93,    94,    95,    96,    97,    98,
  373.     99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
  374.    109,   130,   191
  375. };
  376. static const short yypact[] = {    59,
  377.     37,-32768,    28,    63,-32768,    95,-32768,    23,     8,    54,
  378.     13,   -20,-32768,-32768,-32768,-32768,-32768,    95,-32768,    48,
  379.     67,    75,-32768,    77,   112,   118,-32768,-32768,-32768,-32768,
  380.    126,-32768,    62,   123,-32768,   112,-32768,-32768,   156,   112,
  381. -32768,   163,   166,-32768,-32768,   169,-32768,-32768,   105,   107,
  382. -32768,-32768,-32768,     1,   185,-32768,   132,   111,-32768,-32768,
  383. -32768,-32768,-32768,-32768,-32768,   340,   115,   120,   124,   125,
  384.    296,   308,   296,    58,   127,   189,   198,-32768,   308,   296,
  385.    296,   296,   296,-32768,-32768,   119,   175,-32768,-32768,-32768,
  386. -32768,-32768,   -18,-32768,-32768,   -48,   145,   121,   128,   137,
  387.    -61,   -25,    45,     5,    44,-32768,-32768,-32768,-32768,-32768,
  388. -32768,   308,-32768,-32768,   308,   308,   308,   308,   308,   308,
  389.    308,   308,   308,   308,   308,   222,   308,   206,   208,-32768,
  390. -32768,-32768,   264,   308,   -38,-32768,   134,   146,-32768,-32768,
  391.    129,   -10,-32768,   308,-32768,-32768,    43,-32768,-32768,-32768,
  392. -32768,-32768,-32768,-32768,   308,   296,   308,   296,   296,   296,
  393.    296,   296,   296,   296,   296,   296,   296,   296,   296,   296,
  394.    296,   296,   296,   296,   296,   296,-32768,-32768,-32768,-32768,
  395. -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  396.     66,-32768,   149,   149,   230,   154,    70,-32768,   296,-32768,
  397. -32768,   230,    82,-32768,-32768,   145,   147,   121,   128,   137,
  398.    -61,   -25,   -25,    45,    45,    45,    45,     5,     5,     5,
  399.     44,    44,-32768,-32768,-32768,-32768,-32768,   308,-32768,-32768,
  400.     -1,   308,    22,-32768,-32768,    22,   308,-32768,   308,   157,
  401.    225,-32768,-32768,   158,   308,    22,   308,   160,-32768,   161,
  402.     22,    22,-32768,-32768,   250,   251,-32768
  403. };
  404. static const short yypgoto[] = {-32768,
  405. -32768,   249,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  406. -32768,     3,-32768,-32768,-32768,   252,    47,-32768,-32768,-32768,
  407. -32768,   -83,   200,-32768,-32768,-32768,    60,    55,-32768,-32768,
  408. -32768,-32768,-32768,  -132,   -72,  -107,    61,-32768,   102,   101,
  409.    104,   114,   103,   -52,   -63,   -44,   -29,    16,-32768,-32768,
  410. -32768,    -8,-32768
  411. };
  412. #define YYLAST 448
  413. static const short yytable[] = {   138,
  414.    196,    56,   162,   153,   177,   163,   147,   178,   179,   180,
  415.    181,   182,   183,   184,   185,   186,   187,   188,   190,   192,
  416.    156,    31,    56,    21,    60,    61,    62,    63,    64,    65,
  417.     66,   113,   114,    67,    68,    22,    -3,     9,    44,   164,
  418.    165,    69,    47,    20,   157,    70,    71,   205,   126,   207,
  419.     72,    73,    19,    10,    74,    75,    33,   173,   140,     1,
  420.    138,   197,    11,    16,    19,    32,   141,   154,   128,   129,
  421.    155,   203,   166,   167,    34,   201,    24,     2,   202,   -31,
  422.     25,     2,    35,   -31,   239,    26,   136,   202,   139,     3,
  423.     57,    76,    77,     3,    36,   148,   149,   150,   151,   240,
  424.    214,   215,   216,   217,   171,   172,   244,    78,    79,   212,
  425.    213,    57,   248,     2,   250,   -31,   168,   169,   170,    37,
  426.    238,    80,    81,   218,   219,   220,    82,    83,    40,   243,
  427.    204,   155,    56,    41,    60,    61,    62,    63,    64,    65,
  428.     66,   221,   222,    67,    68,   174,   175,   176,    42,   241,
  429.     43,    69,   242,   227,   228,    70,    71,   233,   155,   138,
  430.     72,    73,   249,    45,    74,    75,   138,   253,   254,   236,
  431.    155,    48,   138,    51,   138,    56,    52,    60,    61,    62,
  432.     63,    64,    65,    66,   229,   230,    67,    68,   223,   224,
  433.    225,   226,    54,    59,    69,    55,   110,   145,    70,    71,
  434.    131,    76,    77,    72,    73,   132,   146,    74,    75,   152,
  435.    133,   134,   158,   144,   193,   159,   194,    78,    79,   198,
  436.    199,    57,   -50,   160,    60,    61,    62,    63,    64,    65,
  437.     66,    80,    81,   161,   155,   126,    82,    83,   141,   232,
  438.    237,   246,   245,   247,    76,    77,    71,   251,   252,   256,
  439.    257,    73,    17,    58,   231,    18,   235,   206,   208,   234,
  440.     78,    79,   209,   211,    57,   -51,    60,    61,    62,    63,
  441.     64,    65,    66,   210,    80,    81,     0,     0,     0,    82,
  442.     83,     0,     0,     0,     0,     0,     0,     0,    71,     0,
  443.      0,    76,    77,    73,     0,     0,   195,     0,    60,    61,
  444.     62,    63,    64,    65,   135,     0,     0,     0,    79,   189,
  445.     60,    61,    62,    63,    64,    65,    66,     0,     0,     0,
  446.     71,    80,    81,     0,     0,    73,    82,    83,     0,     0,
  447.      0,     0,    71,    76,    77,     0,     0,    73,     0,     0,
  448.      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  449.     79,     0,     0,     0,   112,     0,     0,     0,     0,     0,
  450.      0,     0,     0,    80,    81,    76,    77,     0,    82,    83,
  451.      0,     0,     0,     0,     0,     0,     0,    76,    77,     0,
  452.      0,     0,    79,     0,     0,     0,     0,     0,     0,     0,
  453.      0,     0,     0,     0,    79,    80,    81,     0,     0,     0,
  454.     82,    83,     0,     0,     0,     0,     0,    80,    81,   113,
  455.    114,     0,    82,    83,   115,   116,   117,   118,   119,   120,
  456.    121,   122,   123,   124,   125,     0,   126,     0,     0,     0,
  457.      0,   127,     0,     0,     0,     0,     0,     0,     0,     0,
  458.      0,     0,     0,     0,     0,     0,   128,   129
  459. };
  460. static const short yycheck[] = {    72,
  461.    133,     1,    64,    87,   112,    67,    79,   115,   116,   117,
  462.    118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
  463.     69,     9,     1,    16,     3,     4,     5,     6,     7,     8,
  464.      9,    70,    71,    12,    13,    28,     0,    10,    36,    65,
  465.     66,    20,    40,    21,    93,    24,    25,   155,    87,   157,
  466.     29,    30,     6,    26,    33,    34,     9,    14,     1,     1,
  467.    133,   134,    35,     1,    18,    86,     9,    86,   107,   108,
  468.     89,   144,    98,    99,     8,    86,    23,    19,    89,    21,
  469.     27,    19,     8,    21,    86,    32,    71,    89,    73,    31,
  470.     90,    70,    71,    31,    18,    80,    81,    82,    83,   232,
  471.    164,   165,   166,   167,   100,   101,   239,    86,    87,   162,
  472.    163,    90,   245,    19,   247,    21,    72,    73,    74,     8,
  473.    228,   100,   101,   168,   169,   170,   105,   106,    11,   237,
  474.     88,    89,     1,     8,     3,     4,     5,     6,     7,     8,
  475.      9,   171,   172,    12,    13,   102,   103,   104,    87,   233,
  476.     28,    20,   236,    88,    89,    24,    25,    88,    89,   232,
  477.     29,    30,   246,     8,    33,    34,   239,   251,   252,    88,
  478.     89,     9,   245,     8,   247,     1,     8,     3,     4,     5,
  479.      6,     7,     8,     9,   193,   194,    12,    13,   173,   174,
  480.    175,   176,    88,     9,    20,    89,    86,     9,    24,    25,
  481.     86,    70,    71,    29,    30,    86,     9,    33,    34,    91,
  482.     87,    87,    68,    87,     9,    95,     9,    86,    87,    86,
  483.     92,    90,    91,    96,     3,     4,     5,     6,     7,     8,
  484.      9,   100,   101,    97,    89,    87,   105,   106,     9,    86,
  485.     94,    17,    86,    86,    70,    71,    25,    88,    88,     0,
  486.      0,    30,     4,    54,   195,     4,   202,   156,   158,   199,
  487.     86,    87,   159,   161,    90,    91,     3,     4,     5,     6,
  488.      7,     8,     9,   160,   100,   101,    -1,    -1,    -1,   105,
  489.    106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    -1,
  490.     -1,    70,    71,    30,    -1,    -1,    33,    -1,     3,     4,
  491.      5,     6,     7,     8,     9,    -1,    -1,    -1,    87,    88,
  492.      3,     4,     5,     6,     7,     8,     9,    -1,    -1,    -1,
  493.     25,   100,   101,    -1,    -1,    30,   105,   106,    -1,    -1,
  494.     -1,    -1,    25,    70,    71,    -1,    -1,    30,    -1,    -1,
  495.     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
  496.     87,    -1,    -1,    -1,    15,    -1,    -1,    -1,    -1,    -1,
  497.     -1,    -1,    -1,   100,   101,    70,    71,    -1,   105,   106,
  498.     -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    71,    -1,
  499.     -1,    -1,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
  500.     -1,    -1,    -1,    -1,    87,   100,   101,    -1,    -1,    -1,
  501.    105,   106,    -1,    -1,    -1,    -1,    -1,   100,   101,    70,
  502.     71,    -1,   105,   106,    75,    76,    77,    78,    79,    80,
  503.     81,    82,    83,    84,    85,    -1,    87,    -1,    -1,    -1,
  504.     -1,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
  505.     -1,    -1,    -1,    -1,    -1,    -1,   107,   108
  506. };
  507. #define YYPURE 1
  508. /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
  509. #line 3 "/usr/share/misc/bison.simple"
  510. /* This file comes from bison-1.28.  */
  511. /* Skeleton output parser for bison,
  512.    Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
  513.    This program is free software; you can redistribute it and/or modify
  514.    it under the terms of the GNU General Public License as published by
  515.    the Free Software Foundation; either version 2, or (at your option)
  516.    any later version.
  517.    This program is distributed in the hope that it will be useful,
  518.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  519.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  520.    GNU General Public License for more details.
  521.    You should have received a copy of the GNU General Public License
  522.    along with this program; if not, write to the Free Software
  523.    Foundation, Inc., 59 Temple Place - Suite 330,
  524.    Boston, MA 02111-1307, USA.  */
  525. /* As a special exception, when this file is copied by Bison into a
  526.    Bison output file, you may use that output file without restriction.
  527.    This special exception was added by the Free Software Foundation
  528.    in version 1.24 of Bison.  */
  529. /* This is the parser code that is written into each bison parser
  530.   when the %semantic_parser declaration is not specified in the grammar.
  531.   It was written by Richard Stallman by simplifying the hairy parser
  532.   used when %semantic_parser is specified.  */
  533. #ifndef YYSTACK_USE_ALLOCA
  534. #ifdef alloca
  535. #define YYSTACK_USE_ALLOCA
  536. #else /* alloca not defined */
  537. #ifdef __GNUC__
  538. #define YYSTACK_USE_ALLOCA
  539. #define alloca __builtin_alloca
  540. #else /* not GNU C.  */
  541. #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
  542. #define YYSTACK_USE_ALLOCA
  543. #include <alloca.h>
  544. #else /* not sparc */
  545. /* We think this test detects Watcom and Microsoft C.  */
  546. /* This used to test MSDOS, but that is a bad idea
  547.    since that symbol is in the user namespace.  */
  548. #if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
  549. #if 0 /* No need for malloc.h, which pollutes the namespace;
  550.  instead, just don't use alloca.  */
  551. #include <malloc.h>
  552. #endif
  553. #else /* not MSDOS, or __TURBOC__ */
  554. #if defined(_AIX)
  555. /* I don't know what this was needed for, but it pollutes the namespace.
  556.    So I turned it off.   rms, 2 May 1997.  */
  557. /* #include <malloc.h>  */
  558.  #pragma alloca
  559. #define YYSTACK_USE_ALLOCA
  560. #else /* not MSDOS, or __TURBOC__, or _AIX */
  561. #if 0
  562. #ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
  563.  and on HPUX 10.  Eventually we can turn this on.  */
  564. #define YYSTACK_USE_ALLOCA
  565. #define alloca __builtin_alloca
  566. #endif /* __hpux */
  567. #endif
  568. #endif /* not _AIX */
  569. #endif /* not MSDOS, or __TURBOC__ */
  570. #endif /* not sparc */
  571. #endif /* not GNU C */
  572. #endif /* alloca not defined */
  573. #endif /* YYSTACK_USE_ALLOCA not defined */
  574. #ifdef YYSTACK_USE_ALLOCA
  575. #define YYSTACK_ALLOC alloca
  576. #else
  577. #define YYSTACK_ALLOC malloc
  578. #endif
  579. /* Note: there must be only one dollar sign in this file.
  580.    It is replaced by the list of actions, each action
  581.    as one case of the switch.  */
  582. #define yyerrok (yyerrstatus = 0)
  583. #define yyclearin (yychar = YYEMPTY)
  584. #define YYEMPTY -2
  585. #define YYEOF 0
  586. #define YYACCEPT goto yyacceptlab
  587. #define YYABORT  goto yyabortlab
  588. #define YYERROR goto yyerrlab1
  589. /* Like YYERROR except do call yyerror.
  590.    This remains here temporarily to ease the
  591.    transition to the new meaning of YYERROR, for GCC.
  592.    Once GCC version 2 has supplanted version 1, this can go.  */
  593. #define YYFAIL goto yyerrlab
  594. #define YYRECOVERING()  (!!yyerrstatus)
  595. #define YYBACKUP(token, value) 
  596. do
  597.   if (yychar == YYEMPTY && yylen == 1)
  598.     { yychar = (token), yylval = (value);
  599.       yychar1 = YYTRANSLATE (yychar);
  600.       YYPOPSTACK;
  601.       goto yybackup;
  602.     }
  603.   else
  604.     { yyerror ("syntax error: cannot back up"); YYERROR; }
  605. while (0)
  606. #define YYTERROR 1
  607. #define YYERRCODE 256
  608. #ifndef YYPURE
  609. #define YYLEX yylex()
  610. #endif
  611. #ifdef YYPURE
  612. #ifdef YYLSP_NEEDED
  613. #ifdef YYLEX_PARAM
  614. #define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
  615. #else
  616. #define YYLEX yylex(&yylval, &yylloc)
  617. #endif
  618. #else /* not YYLSP_NEEDED */
  619. #ifdef YYLEX_PARAM
  620. #define YYLEX yylex(&yylval, YYLEX_PARAM)
  621. #else
  622. #define YYLEX yylex(&yylval)
  623. #endif
  624. #endif /* not YYLSP_NEEDED */
  625. #endif
  626. /* If nonreentrant, generate the variables here */
  627. #ifndef YYPURE
  628. int yychar; /*  the lookahead symbol */
  629. YYSTYPE yylval; /*  the semantic value of the */
  630. /*  lookahead symbol */
  631. #ifdef YYLSP_NEEDED
  632. YYLTYPE yylloc; /*  location data for the lookahead */
  633. /*  symbol */
  634. #endif
  635. int yynerrs; /*  number of parse errors so far       */
  636. #endif  /* not YYPURE */
  637. #if YYDEBUG != 0
  638. int yydebug; /*  nonzero means print parse trace */
  639. /* Since this is uninitialized, it does not stop multiple parsers
  640.    from coexisting.  */
  641. #endif
  642. /*  YYINITDEPTH indicates the initial size of the parser's stacks */
  643. #ifndef YYINITDEPTH
  644. #define YYINITDEPTH 200
  645. #endif
  646. /*  YYMAXDEPTH is the maximum size the stacks can grow to
  647.     (effective only if the built-in stack extension method is used).  */
  648. #if YYMAXDEPTH == 0
  649. #undef YYMAXDEPTH
  650. #endif
  651. #ifndef YYMAXDEPTH
  652. #define YYMAXDEPTH 10000
  653. #endif
  654. /* Define __yy_memcpy.  Note that the size argument
  655.    should be passed with type unsigned int, because that is what the non-GCC
  656.    definitions require.  With GCC, __builtin_memcpy takes an arg
  657.    of type size_t, but it can handle unsigned int.  */
  658. #if __GNUC__ > 1 /* GNU C and GNU C++ define this.  */
  659. #define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
  660. #else /* not GNU C or C++ */
  661. #ifndef __cplusplus
  662. /* This is the most reliable way to avoid incompatibilities
  663.    in available built-in functions on various systems.  */
  664. static void
  665. __yy_memcpy (to, from, count)
  666.      char *to;
  667.      char *from;
  668.      unsigned int count;
  669. {
  670.   register char *f = from;
  671.   register char *t = to;
  672.   register int i = count;
  673.   while (i-- > 0)
  674.     *t++ = *f++;
  675. }
  676. #else /* __cplusplus */
  677. /* This is the most reliable way to avoid incompatibilities
  678.    in available built-in functions on various systems.  */
  679. static void
  680. __yy_memcpy (char *to, char *from, unsigned int count)
  681. {
  682.   register char *t = to;
  683.   register char *f = from;
  684.   register int i = count;
  685.   while (i-- > 0)
  686.     *t++ = *f++;
  687. }
  688. #endif
  689. #endif
  690. #line 217 "/usr/share/misc/bison.simple"
  691. /* The user can define YYPARSE_PARAM as the name of an argument to be passed
  692.    into yyparse.  The argument should have type void *.
  693.    It should actually point to an object.
  694.    Grammar actions can access the variable by casting it
  695.    to the proper pointer type.  */
  696. #ifdef YYPARSE_PARAM
  697. #ifdef __cplusplus
  698. #define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
  699. #define YYPARSE_PARAM_DECL
  700. #else /* not __cplusplus */
  701. #define YYPARSE_PARAM_ARG YYPARSE_PARAM
  702. #define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
  703. #endif /* not __cplusplus */
  704. #else /* not YYPARSE_PARAM */
  705. #define YYPARSE_PARAM_ARG
  706. #define YYPARSE_PARAM_DECL
  707. #endif /* not YYPARSE_PARAM */
  708. /* Prevent warning if -Wstrict-prototypes.  */
  709. #ifdef __GNUC__
  710. #ifdef YYPARSE_PARAM
  711. int yyparse (void *);
  712. #else
  713. int yyparse (void);
  714. #endif
  715. #endif
  716. int
  717. yyparse(YYPARSE_PARAM_ARG)
  718.      YYPARSE_PARAM_DECL
  719. {
  720.   register int yystate;
  721.   register int yyn;
  722.   register short *yyssp;
  723.   register YYSTYPE *yyvsp;
  724.   int yyerrstatus; /*  number of tokens to shift before error messages enabled */
  725.   int yychar1 = 0; /*  lookahead token as an internal (translated) token number */
  726.   short yyssa[YYINITDEPTH]; /*  the state stack */
  727.   YYSTYPE yyvsa[YYINITDEPTH]; /*  the semantic value stack */
  728.   short *yyss = yyssa; /*  refer to the stacks thru separate pointers */
  729.   YYSTYPE *yyvs = yyvsa; /*  to allow yyoverflow to reallocate them elsewhere */
  730. #ifdef YYLSP_NEEDED
  731.   YYLTYPE yylsa[YYINITDEPTH]; /*  the location stack */
  732.   YYLTYPE *yyls = yylsa;
  733.   YYLTYPE *yylsp;
  734. #define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
  735. #else
  736. #define YYPOPSTACK   (yyvsp--, yyssp--)
  737. #endif
  738.   int yystacksize = YYINITDEPTH;
  739.   int yyfree_stacks = 0;
  740. #ifdef YYPURE
  741.   int yychar;
  742.   YYSTYPE yylval;
  743.   int yynerrs;
  744. #ifdef YYLSP_NEEDED
  745.   YYLTYPE yylloc;
  746. #endif
  747. #endif
  748.   YYSTYPE yyval; /*  the variable used to return */
  749. /*  semantic values from the action */
  750. /*  routines */
  751.   int yylen;
  752. #if YYDEBUG != 0
  753.   if (yydebug)
  754.     fprintf(stderr, "Starting parsen");
  755. #endif
  756.   yystate = 0;
  757.   yyerrstatus = 0;
  758.   yynerrs = 0;
  759.   yychar = YYEMPTY; /* Cause a token to be read.  */
  760.   /* Initialize stack pointers.
  761.      Waste one element of value and location stack
  762.      so that they stay on the same level as the state stack.
  763.      The wasted elements are never initialized.  */
  764.   yyssp = yyss - 1;
  765.   yyvsp = yyvs;
  766. #ifdef YYLSP_NEEDED
  767.   yylsp = yyls;
  768. #endif
  769. /* Push a new state, which is found in  yystate  .  */
  770. /* In all cases, when you get here, the value and location stacks
  771.    have just been pushed. so pushing a state here evens the stacks.  */
  772. yynewstate:
  773.   *++yyssp = yystate;
  774.   if (yyssp >= yyss + yystacksize - 1)
  775.     {
  776.       /* Give user a chance to reallocate the stack */
  777.       /* Use copies of these so that the &'s don't force the real ones into memory. */
  778.       YYSTYPE *yyvs1 = yyvs;
  779.       short *yyss1 = yyss;
  780. #ifdef YYLSP_NEEDED
  781.       YYLTYPE *yyls1 = yyls;
  782. #endif
  783.       /* Get the current used size of the three stacks, in elements.  */
  784.       int size = yyssp - yyss + 1;
  785. #ifdef yyoverflow
  786.       /* Each stack pointer address is followed by the size of
  787.  the data in use in that stack, in bytes.  */
  788. #ifdef YYLSP_NEEDED
  789.       /* This used to be a conditional around just the two extra args,
  790.  but that might be undefined if yyoverflow is a macro.  */
  791.       yyoverflow("parser stack overflow",
  792.  &yyss1, size * sizeof (*yyssp),
  793.  &yyvs1, size * sizeof (*yyvsp),
  794.  &yyls1, size * sizeof (*yylsp),
  795.  &yystacksize);
  796. #else
  797.       yyoverflow("parser stack overflow",
  798.  &yyss1, size * sizeof (*yyssp),
  799.  &yyvs1, size * sizeof (*yyvsp),
  800.  &yystacksize);
  801. #endif
  802.       yyss = yyss1; yyvs = yyvs1;
  803. #ifdef YYLSP_NEEDED
  804.       yyls = yyls1;
  805. #endif
  806. #else /* no yyoverflow */
  807.       /* Extend the stack our own way.  */
  808.       if (yystacksize >= YYMAXDEPTH)
  809. {
  810.   yyerror("parser stack overflow");
  811.   if (yyfree_stacks)
  812.     {
  813.       free (yyss);
  814.       free (yyvs);
  815. #ifdef YYLSP_NEEDED
  816.       free (yyls);
  817. #endif
  818.     }
  819.   return 2;
  820. }
  821.       yystacksize *= 2;
  822.       if (yystacksize > YYMAXDEPTH)
  823. yystacksize = YYMAXDEPTH;
  824. #ifndef YYSTACK_USE_ALLOCA
  825.       yyfree_stacks = 1;
  826. #endif
  827.       yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
  828.       __yy_memcpy ((char *)yyss, (char *)yyss1,
  829.    size * (unsigned int) sizeof (*yyssp));
  830.       yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
  831.       __yy_memcpy ((char *)yyvs, (char *)yyvs1,
  832.    size * (unsigned int) sizeof (*yyvsp));
  833. #ifdef YYLSP_NEEDED
  834.       yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
  835.       __yy_memcpy ((char *)yyls, (char *)yyls1,
  836.    size * (unsigned int) sizeof (*yylsp));
  837. #endif
  838. #endif /* no yyoverflow */
  839.       yyssp = yyss + size - 1;
  840.       yyvsp = yyvs + size - 1;
  841. #ifdef YYLSP_NEEDED
  842.       yylsp = yyls + size - 1;
  843. #endif
  844. #if YYDEBUG != 0
  845.       if (yydebug)
  846. fprintf(stderr, "Stack size increased to %dn", yystacksize);
  847. #endif
  848.       if (yyssp >= yyss + yystacksize - 1)
  849. YYABORT;
  850.     }
  851. #if YYDEBUG != 0
  852.   if (yydebug)
  853.     fprintf(stderr, "Entering state %dn", yystate);
  854. #endif
  855.   goto yybackup;
  856.  yybackup:
  857. /* Do appropriate processing given the current state.  */
  858. /* Read a lookahead token if we need one and don't already have one.  */
  859. /* yyresume: */
  860.   /* First try to decide what to do without reference to lookahead token.  */
  861.   yyn = yypact[yystate];
  862.   if (yyn == YYFLAG)
  863.     goto yydefault;
  864.   /* Not known => get a lookahead token if don't already have one.  */
  865.   /* yychar is either YYEMPTY or YYEOF
  866.      or a valid token in external form.  */
  867.   if (yychar == YYEMPTY)
  868.     {
  869. #if YYDEBUG != 0
  870.       if (yydebug)
  871. fprintf(stderr, "Reading a token: ");
  872. #endif
  873.       yychar = YYLEX;
  874.     }
  875.   /* Convert token to internal form (in yychar1) for indexing tables with */
  876.   if (yychar <= 0) /* This means end of input. */
  877.     {
  878.       yychar1 = 0;
  879.       yychar = YYEOF; /* Don't call YYLEX any more */
  880. #if YYDEBUG != 0
  881.       if (yydebug)
  882. fprintf(stderr, "Now at end of input.n");
  883. #endif
  884.     }
  885.   else
  886.     {
  887.       yychar1 = YYTRANSLATE(yychar);
  888. #if YYDEBUG != 0
  889.       if (yydebug)
  890. {
  891.   fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
  892.   /* Give the individual parser a way to print the precise meaning
  893.      of a token, for further debugging info.  */
  894. #ifdef YYPRINT
  895.   YYPRINT (stderr, yychar, yylval);
  896. #endif
  897.   fprintf (stderr, ")n");
  898. }
  899. #endif
  900.     }
  901.   yyn += yychar1;
  902.   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
  903.     goto yydefault;
  904.   yyn = yytable[yyn];
  905.   /* yyn is what to do for this token type in this state.
  906.      Negative => reduce, -yyn is rule number.
  907.      Positive => shift, yyn is new state.
  908.        New state is final state => don't bother to shift,
  909.        just return success.
  910.      0, or most negative number => error.  */
  911.   if (yyn < 0)
  912.     {
  913.       if (yyn == YYFLAG)
  914. goto yyerrlab;
  915.       yyn = -yyn;
  916.       goto yyreduce;
  917.     }
  918.   else if (yyn == 0)
  919.     goto yyerrlab;
  920.   if (yyn == YYFINAL)
  921.     YYACCEPT;
  922.   /* Shift the lookahead token.  */
  923. #if YYDEBUG != 0
  924.   if (yydebug)
  925.     fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
  926. #endif
  927.   /* Discard the token being shifted unless it is eof.  */
  928.   if (yychar != YYEOF)
  929.     yychar = YYEMPTY;
  930.   *++yyvsp = yylval;
  931. #ifdef YYLSP_NEEDED
  932.   *++yylsp = yylloc;
  933. #endif
  934.   /* count tokens shifted since error; after three, turn off error status.  */
  935.   if (yyerrstatus) yyerrstatus--;
  936.   yystate = yyn;
  937.   goto yynewstate;
  938. /* Do the default action for the current state.  */
  939. yydefault:
  940.   yyn = yydefact[yystate];
  941.   if (yyn == 0)
  942.     goto yyerrlab;
  943. /* Do a reduction.  yyn is the number of a rule to reduce with.  */
  944. yyreduce:
  945.   yylen = yyr2[yyn];
  946.   if (yylen > 0)
  947.     yyval = yyvsp[1-yylen]; /* implement default value of the action */
  948. #if YYDEBUG != 0
  949.   if (yydebug)
  950.     {
  951.       int i;
  952.       fprintf (stderr, "Reducing via rule %d (line %d), ",
  953.        yyn, yyrline[yyn]);
  954.       /* Print the symbols being reduced, and their result.  */
  955.       for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
  956. fprintf (stderr, "%s ", yytname[yyrhs[i]]);
  957.       fprintf (stderr, " -> %sn", yytname[yyr1[yyn]]);
  958.     }
  959. #endif
  960.   switch (yyn) {
  961. case 3:
  962. #line 125 "wmlscript/wsgram.y"
  963. { ws_error_syntax(pctx, yylsp[0].first_line); ;
  964.     break;}
  965. case 7:
  966. #line 138 "wmlscript/wsgram.y"
  967. { ws_error_syntax(pctx, yylsp[1].first_line); ;
  968.     break;}
  969. case 11:
  970. #line 149 "wmlscript/wsgram.y"
  971. { ws_pragma_use(pctx, yylsp[-1].first_line, yyvsp[-1].identifier, yyvsp[0].string); ;
  972.     break;}
  973. case 13:
  974. #line 158 "wmlscript/wsgram.y"
  975. {
  976.     WsCompiler *compiler = (WsCompiler *) pctx;
  977.     /* Pass this to the byte-code */
  978.     if (!ws_bc_add_pragma_access_domain(compiler->bc, yyvsp[0].string->data,
  979.         yyvsp[0].string->len))
  980.         ws_error_memory(pctx);
  981.     ws_lexer_free_utf8(compiler, yyvsp[0].string);
  982. ;
  983.     break;}
  984. case 14:
  985. #line 168 "wmlscript/wsgram.y"
  986. {
  987.     WsCompiler *compiler = (WsCompiler *) pctx;
  988.     /* Pass this to the byte-code */
  989.     if (!ws_bc_add_pragma_access_path(compiler->bc, yyvsp[0].string->data,
  990.       yyvsp[0].string->len))
  991.         ws_error_memory(pctx);
  992.     ws_lexer_free_utf8(compiler, yyvsp[0].string);
  993. ;
  994.     break;}
  995. case 15:
  996. #line 179 "wmlscript/wsgram.y"
  997. {
  998.     WsCompiler *compiler = (WsCompiler *) pctx;
  999.     WsBool success = WS_TRUE;
  1000.     /* Pass these to the byte-code */
  1001.     if (!ws_bc_add_pragma_access_domain(compiler->bc, yyvsp[-2].string->data,
  1002.         yyvsp[-2].string->len))
  1003.         success = WS_FALSE;
  1004.     if (!ws_bc_add_pragma_access_path(compiler->bc, yyvsp[0].string->data,
  1005.       yyvsp[0].string->len))
  1006.         success = WS_FALSE;
  1007.     if (!success)
  1008.         ws_error_memory(pctx);
  1009.     ws_lexer_free_utf8(compiler, yyvsp[-2].string);
  1010.     ws_lexer_free_utf8(compiler, yyvsp[0].string);
  1011. ;
  1012.     break;}
  1013. case 20:
  1014. #line 212 "wmlscript/wsgram.y"
  1015. {
  1016.     WsCompiler *compiler = (WsCompiler *) pctx;
  1017.     /* Meta information for the origin servers.  Show it
  1018.                      * to the user if requested. */
  1019.     if (compiler->params.meta_name_cb)
  1020.         (*compiler->params.meta_name_cb)(
  1021. yyvsp[0].meta_body->property_name, yyvsp[0].meta_body->content,
  1022. yyvsp[0].meta_body->scheme,
  1023. compiler->params.meta_name_cb_context);
  1024.     /* We do not need the MetaBody anymore. */
  1025.     ws_pragma_meta_body_free(compiler, yyvsp[0].meta_body);
  1026. ;
  1027.     break;}
  1028. case 21:
  1029. #line 230 "wmlscript/wsgram.y"
  1030. {
  1031.     WsCompiler *compiler = (WsCompiler *) pctx;
  1032.     /* Meta information HTTP header that should be
  1033.                      * included to an HTTP response header.  Show it to
  1034.                      * the user if requested. */
  1035.     if (compiler->params.meta_http_equiv_cb)
  1036.         (*compiler->params.meta_http_equiv_cb)(
  1037. yyvsp[0].meta_body->property_name,
  1038. yyvsp[0].meta_body->content,
  1039. yyvsp[0].meta_body->scheme,
  1040. compiler->params.meta_http_equiv_cb_context);
  1041.     /* We do not need the MetaBody anymore. */
  1042.     ws_pragma_meta_body_free(compiler, yyvsp[0].meta_body);
  1043. ;
  1044.     break;}
  1045. case 22:
  1046. #line 250 "wmlscript/wsgram.y"
  1047. {
  1048.     WsBool success;
  1049.     WsCompiler *compiler = (WsCompiler *) pctx;
  1050.     /* Pass this pragma to the byte-code */
  1051.     if (yyvsp[0].meta_body) {
  1052.         if (yyvsp[0].meta_body->scheme)
  1053.        success
  1054.   = ws_bc_add_pragma_user_agent_property_and_scheme(
  1055. compiler->bc,
  1056. yyvsp[0].meta_body->property_name->data,
  1057. yyvsp[0].meta_body->property_name->len,
  1058. yyvsp[0].meta_body->content->data,
  1059. yyvsp[0].meta_body->content->len,
  1060. yyvsp[0].meta_body->scheme->data,
  1061. yyvsp[0].meta_body->scheme->len);
  1062.         else
  1063.        success = ws_bc_add_pragma_user_agent_property(
  1064. compiler->bc,
  1065. yyvsp[0].meta_body->property_name->data,
  1066. yyvsp[0].meta_body->property_name->len,
  1067. yyvsp[0].meta_body->content->data,
  1068. yyvsp[0].meta_body->content->len);
  1069.         /* Free the MetaBody. */
  1070.         ws_pragma_meta_body_free(compiler, yyvsp[0].meta_body);
  1071.         if (!success)
  1072.        ws_error_memory(pctx);
  1073.     }
  1074. ;
  1075.     break;}
  1076. case 23:
  1077. #line 285 "wmlscript/wsgram.y"
  1078. { yyval.meta_body = ws_pragma_meta_body(pctx, yyvsp[-1].string, yyvsp[0].string, NULL); ;
  1079.     break;}
  1080. case 24:
  1081. #line 287 "wmlscript/wsgram.y"
  1082. { yyval.meta_body = ws_pragma_meta_body(pctx, yyvsp[-2].string, yyvsp[-1].string, yyvsp[0].string); ;
  1083.     break;}
  1084. case 30:
  1085. #line 304 "wmlscript/wsgram.y"
  1086. {
  1087.     char *name = ws_strdup(yyvsp[-5].identifier);
  1088.     ws_lexer_free_block(pctx, yyvsp[-5].identifier);
  1089.     if (name)
  1090.         ws_function(pctx, yyvsp[-7].boolean, name, yylsp[-5].first_line, yyvsp[-3].list, yyvsp[-1].list);
  1091.     else
  1092.         ws_error_memory(pctx);
  1093. ;
  1094.     break;}
  1095. case 31:
  1096. #line 317 "wmlscript/wsgram.y"
  1097. { yyval.boolean = WS_FALSE; ;
  1098.     break;}
  1099. case 32:
  1100. #line 318 "wmlscript/wsgram.y"
  1101. { yyval.boolean = WS_TRUE;  ;
  1102.     break;}
  1103. case 33:
  1104. #line 323 "wmlscript/wsgram.y"
  1105. { yyval.list = ws_list_new(pctx); ;
  1106.     break;}
  1107. case 37:
  1108. #line 334 "wmlscript/wsgram.y"
  1109. {
  1110.                     char *id;
  1111.                     WsFormalParm *parm;
  1112.     id = ws_f_strdup(((WsCompiler *) pctx)->pool_stree, yyvsp[0].identifier);
  1113.                     parm = ws_formal_parameter(pctx, yylsp[0].first_line, id);
  1114.     ws_lexer_free_block(pctx, yyvsp[0].identifier);
  1115.     if (id == NULL || parm == NULL) {
  1116.         ws_error_memory(pctx);
  1117.         yyval.list = NULL;
  1118.     } else {
  1119.         yyval.list = ws_list_new(pctx);
  1120.         ws_list_append(pctx, yyval.list, parm);
  1121.     }
  1122. ;
  1123.     break;}
  1124. case 38:
  1125. #line 352 "wmlscript/wsgram.y"
  1126. {
  1127.                     char *id;
  1128.                     WsFormalParm *parm;
  1129.     id = ws_f_strdup(((WsCompiler *) pctx)->pool_stree, yyvsp[0].identifier);
  1130.                     parm = ws_formal_parameter(pctx, yylsp[-2].first_line, id);
  1131.     ws_lexer_free_block(pctx, yyvsp[0].identifier);
  1132.     if (id == NULL || parm == NULL) {
  1133.         ws_error_memory(pctx);
  1134.         yyval.list = NULL;
  1135.     } else
  1136.         ws_list_append(pctx, yyvsp[-2].list, parm);
  1137. ;
  1138.     break;}
  1139. case 39:
  1140. #line 373 "wmlscript/wsgram.y"
  1141. {
  1142.     if (yyvsp[0].list)
  1143.         yyval.stmt = ws_stmt_block(pctx, yyvsp[0].list->first_line, yyvsp[0].list->last_line,
  1144.            yyvsp[0].list);
  1145.     else
  1146.         yyval.stmt = NULL;
  1147. ;
  1148.     break;}
  1149. case 41:
  1150. #line 382 "wmlscript/wsgram.y"
  1151. { yyval.stmt = ws_stmt_empty(pctx, yylsp[0].first_line); ;
  1152.     break;}
  1153. case 42:
  1154. #line 384 "wmlscript/wsgram.y"
  1155. { yyval.stmt = ws_stmt_expr(pctx, yyvsp[-1].expr->line, yyvsp[-1].expr); ;
  1156.     break;}
  1157. case 45:
  1158. #line 388 "wmlscript/wsgram.y"
  1159. { yyval.stmt = ws_stmt_continue(pctx, yylsp[-1].first_line); ;
  1160.     break;}
  1161. case 46:
  1162. #line 390 "wmlscript/wsgram.y"
  1163. { yyval.stmt = ws_stmt_break(pctx, yylsp[-1].first_line); ;
  1164.     break;}
  1165. case 48:
  1166. #line 395 "wmlscript/wsgram.y"
  1167. {
  1168.     yyval.list = yyvsp[-1].list;
  1169.     if (yyval.list) {
  1170.         yyval.list->first_line = yylsp[-2].first_line;
  1171.         yyval.list->last_line = yylsp[0].first_line;
  1172.     }
  1173. ;
  1174.     break;}
  1175. case 49:
  1176. #line 403 "wmlscript/wsgram.y"
  1177. {
  1178.     ws_error_syntax(pctx, yylsp[1].first_line);
  1179.     yyval.list = NULL;
  1180. ;
  1181.     break;}
  1182. case 50:
  1183. #line 411 "wmlscript/wsgram.y"
  1184. { yyval.list = ws_list_new(pctx); ;
  1185.     break;}
  1186. case 52:
  1187. #line 417 "wmlscript/wsgram.y"
  1188. {
  1189.     yyval.list = ws_list_new(pctx);
  1190.     ws_list_append(pctx, yyval.list, yyvsp[0].stmt);
  1191. ;
  1192.     break;}
  1193. case 53:
  1194. #line 422 "wmlscript/wsgram.y"
  1195. { ws_list_append(pctx, yyvsp[-1].list, yyvsp[0].stmt); ;
  1196.     break;}
  1197. case 54:
  1198. #line 427 "wmlscript/wsgram.y"
  1199. { yyval.stmt = ws_stmt_variable(pctx, yylsp[-2].first_line, yyvsp[-1].list); ;
  1200.     break;}
  1201. case 55:
  1202. #line 429 "wmlscript/wsgram.y"
  1203. { ws_error_syntax(pctx, yylsp[0].first_line); ;
  1204.     break;}
  1205. case 56:
  1206. #line 434 "wmlscript/wsgram.y"
  1207. {
  1208.     yyval.list = ws_list_new(pctx);
  1209.     ws_list_append(pctx, yyval.list, yyvsp[0].vardec);
  1210. ;
  1211.     break;}
  1212. case 57:
  1213. #line 439 "wmlscript/wsgram.y"
  1214. { ws_list_append(pctx, yyvsp[-2].list, yyvsp[0].vardec); ;
  1215.     break;}
  1216. case 58:
  1217. #line 444 "wmlscript/wsgram.y"
  1218. {
  1219.     char *id = ws_f_strdup(((WsCompiler *) pctx)->pool_stree,
  1220.    yyvsp[-1].identifier);
  1221.     ws_lexer_free_block(pctx, yyvsp[-1].identifier);
  1222.     if (id == NULL) {
  1223.         ws_error_memory(pctx);
  1224.         yyval.vardec = NULL;
  1225.     } else
  1226.         yyval.vardec = ws_variable_declaration(pctx, id, yyvsp[0].expr);
  1227. ;
  1228.     break;}
  1229. case 59:
  1230. #line 459 "wmlscript/wsgram.y"
  1231. { yyval.expr = NULL; ;
  1232.     break;}
  1233. case 60:
  1234. #line 461 "wmlscript/wsgram.y"
  1235. { yyval.expr = yyvsp[0].expr; ;
  1236.     break;}
  1237. case 61:
  1238. #line 466 "wmlscript/wsgram.y"
  1239. { yyval.stmt = ws_stmt_if(pctx, yylsp[-6].first_line, yyvsp[-4].expr, yyvsp[-2].stmt, yyvsp[0].stmt); ;
  1240.     break;}
  1241. case 62:
  1242. #line 468 "wmlscript/wsgram.y"
  1243. { yyval.stmt = ws_stmt_if(pctx, yylsp[-4].first_line, yyvsp[-2].expr, yyvsp[0].stmt, NULL); ;
  1244.     break;}
  1245. case 63:
  1246. #line 473 "wmlscript/wsgram.y"
  1247. { yyval.stmt = ws_stmt_while(pctx, yylsp[-4].first_line, yyvsp[-2].expr, yyvsp[0].stmt); ;
  1248.     break;}
  1249. case 65:
  1250. #line 480 "wmlscript/wsgram.y"
  1251. { yyval.stmt = ws_stmt_for(pctx, yylsp[-8].first_line, NULL, yyvsp[-6].expr, yyvsp[-4].expr, yyvsp[-2].expr, yyvsp[0].stmt); ;
  1252.     break;}
  1253. case 66:
  1254. #line 483 "wmlscript/wsgram.y"
  1255. { yyval.stmt = ws_stmt_for(pctx, yylsp[-9].first_line, yyvsp[-6].list, NULL, yyvsp[-4].expr, yyvsp[-2].expr, yyvsp[0].stmt); ;
  1256.     break;}
  1257. case 67:
  1258. #line 488 "wmlscript/wsgram.y"
  1259. { yyval.stmt = ws_stmt_return(pctx, yylsp[-2].first_line, yyvsp[-1].expr); ;
  1260.     break;}
  1261. case 68:
  1262. #line 494 "wmlscript/wsgram.y"
  1263. { yyval.expr = NULL; ;
  1264.     break;}
  1265. case 71:
  1266. #line 502 "wmlscript/wsgram.y"
  1267. { yyval.expr = ws_expr_comma(pctx, yylsp[-1].first_line, yyvsp[-2].expr, yyvsp[0].expr); ;
  1268.     break;}
  1269. case 73:
  1270. #line 508 "wmlscript/wsgram.y"
  1271. { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, '=', yyvsp[0].expr); ;
  1272.     break;}
  1273. case 74:
  1274. #line 510 "wmlscript/wsgram.y"
  1275. { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tMULA, yyvsp[0].expr); ;
  1276.     break;}
  1277. case 75:
  1278. #line 512 "wmlscript/wsgram.y"
  1279. { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tDIVA, yyvsp[0].expr); ;
  1280.     break;}
  1281. case 76:
  1282. #line 514 "wmlscript/wsgram.y"
  1283. { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tREMA, yyvsp[0].expr); ;
  1284.     break;}
  1285. case 77:
  1286. #line 516 "wmlscript/wsgram.y"
  1287. { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tADDA, yyvsp[0].expr); ;
  1288.     break;}
  1289. case 78:
  1290. #line 518 "wmlscript/wsgram.y"
  1291. { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tSUBA, yyvsp[0].expr); ;
  1292.     break;}
  1293. case 79:
  1294. #line 520 "wmlscript/wsgram.y"
  1295. { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tLSHIFTA, yyvsp[0].expr); ;
  1296.     break;}
  1297. case 80:
  1298. #line 522 "wmlscript/wsgram.y"
  1299. { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tRSSHIFTA, yyvsp[0].expr); ;
  1300.     break;}
  1301. case 81:
  1302. #line 524 "wmlscript/wsgram.y"
  1303. { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tRSZSHIFTA, yyvsp[0].expr); ;
  1304.     break;}
  1305. case 82:
  1306. #line 526 "wmlscript/wsgram.y"
  1307. { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tANDA, yyvsp[0].expr); ;
  1308.     break;}
  1309. case 83:
  1310. #line 528 "wmlscript/wsgram.y"
  1311. { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tXORA, yyvsp[0].expr); ;
  1312.     break;}
  1313. case 84:
  1314. #line 530 "wmlscript/wsgram.y"
  1315. { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tORA, yyvsp[0].expr); ;
  1316.     break;}
  1317. case 85:
  1318. #line 532 "wmlscript/wsgram.y"
  1319. { yyval.expr = ws_expr_assign(pctx, yylsp[-2].first_line, yyvsp[-2].identifier, tIDIVA, yyvsp[0].expr); ;
  1320.     break;}
  1321. case 87:
  1322. #line 538 "wmlscript/wsgram.y"
  1323. { yyval.expr = ws_expr_conditional(pctx, yylsp[-3].first_line, yyvsp[-4].expr, yyvsp[-2].expr, yyvsp[0].expr); ;
  1324.     break;}
  1325. case 89:
  1326. #line 544 "wmlscript/wsgram.y"
  1327. { yyval.expr = ws_expr_logical(pctx, yylsp[-1].first_line, WS_ASM_SCOR, yyvsp[-2].expr, yyvsp[0].expr); ;
  1328.     break;}
  1329. case 91:
  1330. #line 550 "wmlscript/wsgram.y"
  1331. { yyval.expr = ws_expr_logical(pctx, yylsp[-1].first_line, WS_ASM_SCAND, yyvsp[-2].expr, yyvsp[0].expr); ;
  1332.     break;}
  1333. case 93:
  1334. #line 556 "wmlscript/wsgram.y"
  1335. { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_B_OR, yyvsp[-2].expr, yyvsp[0].expr); ;
  1336.     break;}
  1337. case 95:
  1338. #line 562 "wmlscript/wsgram.y"
  1339. { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_B_XOR, yyvsp[-2].expr, yyvsp[0].expr); ;
  1340.     break;}
  1341. case 97:
  1342. #line 568 "wmlscript/wsgram.y"
  1343. { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_B_AND, yyvsp[-2].expr, yyvsp[0].expr); ;
  1344.     break;}
  1345. case 99:
  1346. #line 574 "wmlscript/wsgram.y"
  1347. { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_EQ, yyvsp[-2].expr, yyvsp[0].expr); ;
  1348.     break;}
  1349. case 100:
  1350. #line 576 "wmlscript/wsgram.y"
  1351. { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_NE, yyvsp[-2].expr, yyvsp[0].expr); ;
  1352.     break;}
  1353. case 102:
  1354. #line 582 "wmlscript/wsgram.y"
  1355. { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_LT, yyvsp[-2].expr, yyvsp[0].expr); ;
  1356.     break;}
  1357. case 103:
  1358. #line 584 "wmlscript/wsgram.y"
  1359. { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_GT, yyvsp[-2].expr, yyvsp[0].expr); ;
  1360.     break;}
  1361. case 104:
  1362. #line 586 "wmlscript/wsgram.y"
  1363. { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_LE, yyvsp[-2].expr, yyvsp[0].expr); ;
  1364.     break;}
  1365. case 105:
  1366. #line 588 "wmlscript/wsgram.y"
  1367. { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_GE, yyvsp[-2].expr, yyvsp[0].expr); ;
  1368.     break;}
  1369. case 107:
  1370. #line 594 "wmlscript/wsgram.y"
  1371. { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_B_LSHIFT, yyvsp[-2].expr, yyvsp[0].expr); ;
  1372.     break;}
  1373. case 108:
  1374. #line 596 "wmlscript/wsgram.y"
  1375. { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_B_RSSHIFT, yyvsp[-2].expr, yyvsp[0].expr); ;
  1376.     break;}
  1377. case 109:
  1378. #line 598 "wmlscript/wsgram.y"
  1379. { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_B_RSZSHIFT, yyvsp[-2].expr, yyvsp[0].expr); ;
  1380.     break;}
  1381. case 111:
  1382. #line 604 "wmlscript/wsgram.y"
  1383. { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_ADD, yyvsp[-2].expr, yyvsp[0].expr); ;
  1384.     break;}
  1385. case 112:
  1386. #line 606 "wmlscript/wsgram.y"
  1387. { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_SUB, yyvsp[-2].expr, yyvsp[0].expr); ;
  1388.     break;}
  1389. case 114:
  1390. #line 612 "wmlscript/wsgram.y"
  1391. { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_MUL, yyvsp[-2].expr, yyvsp[0].expr); ;
  1392.     break;}
  1393. case 115:
  1394. #line 614 "wmlscript/wsgram.y"
  1395. { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_DIV, yyvsp[-2].expr, yyvsp[0].expr); ;
  1396.     break;}
  1397. case 116:
  1398. #line 616 "wmlscript/wsgram.y"
  1399. { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_IDIV, yyvsp[-2].expr, yyvsp[0].expr); ;
  1400.     break;}
  1401. case 117:
  1402. #line 618 "wmlscript/wsgram.y"
  1403. { yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_REM, yyvsp[-2].expr, yyvsp[0].expr); ;
  1404.     break;}
  1405. case 119:
  1406. #line 624 "wmlscript/wsgram.y"
  1407. { yyval.expr = ws_expr_unary(pctx, yylsp[-1].first_line, WS_ASM_TYPEOF, yyvsp[0].expr); ;
  1408.     break;}
  1409. case 120:
  1410. #line 626 "wmlscript/wsgram.y"
  1411. { yyval.expr = ws_expr_unary(pctx, yylsp[-1].first_line, WS_ASM_ISVALID, yyvsp[0].expr); ;
  1412.     break;}
  1413. case 121:
  1414. #line 628 "wmlscript/wsgram.y"
  1415. { yyval.expr = ws_expr_unary_var(pctx, yylsp[-1].first_line, WS_TRUE, yyvsp[0].identifier); ;
  1416.     break;}
  1417. case 122:
  1418. #line 630 "wmlscript/wsgram.y"
  1419. { yyval.expr = ws_expr_unary_var(pctx, yylsp[-1].first_line, WS_FALSE, yyvsp[0].identifier); ;
  1420.     break;}
  1421. case 123:
  1422. #line 632 "wmlscript/wsgram.y"
  1423. {
  1424.                     /* There is no direct way to compile unary `+'.
  1425.                      * It doesn't do anything except require type conversion
  1426.      * (section 7.2, 7.3.2), and we do that by converting
  1427.      * it to a binary expression: `UnaryExpression - 0'.
  1428.                      * Using `--UnaryExpression' would not be correct because
  1429.                      * it might overflow if UnaryExpression is the smallest
  1430.                      * possible integer value (see 6.2.7.1).
  1431.                      * Using `UnaryExpression + 0' would not be correct
  1432.                      * because binary `+' accepts strings, which makes the
  1433.      * type conversion different.
  1434.                      */
  1435.                     yyval.expr = ws_expr_binary(pctx, yylsp[-1].first_line, WS_ASM_SUB, yyvsp[0].expr,
  1436.                               ws_expr_const_integer(pctx, yylsp[-1].first_line, 0));
  1437. ;
  1438.     break;}
  1439. case 124:
  1440. #line 648 "wmlscript/wsgram.y"
  1441. { yyval.expr = ws_expr_unary(pctx, yylsp[-1].first_line, WS_ASM_UMINUS, yyvsp[0].expr); ;
  1442.     break;}
  1443. case 125:
  1444. #line 650 "wmlscript/wsgram.y"
  1445. { yyval.expr = ws_expr_unary(pctx, yylsp[-1].first_line, WS_ASM_B_NOT, yyvsp[0].expr); ;
  1446.     break;}
  1447. case 126:
  1448. #line 652 "wmlscript/wsgram.y"
  1449. { yyval.expr = ws_expr_unary(pctx, yylsp[-1].first_line, WS_ASM_NOT, yyvsp[0].expr); ;
  1450.     break;}
  1451. case 128:
  1452. #line 658 "wmlscript/wsgram.y"
  1453. { yyval.expr = ws_expr_postfix_var(pctx, yylsp[-1].first_line, WS_TRUE, yyvsp[-1].identifier); ;
  1454.     break;}
  1455. case 129:
  1456. #line 660 "wmlscript/wsgram.y"
  1457. { yyval.expr = ws_expr_postfix_var(pctx, yylsp[-1].first_line, WS_FALSE, yyvsp[-1].identifier); ;
  1458.     break;}
  1459. case 131:
  1460. #line 666 "wmlscript/wsgram.y"
  1461. {
  1462.     WsFunctionHash *f = ws_function_hash(pctx, yyvsp[-1].identifier);
  1463.     /* Add an usage count for the local script function. */
  1464.     if (f)
  1465.       f->usage_count++;
  1466.     yyval.expr = ws_expr_call(pctx, yylsp[-1].first_line, ' ', NULL, yyvsp[-1].identifier, yyvsp[0].list);
  1467. ;
  1468.     break;}
  1469. case 132:
  1470. #line 676 "wmlscript/wsgram.y"
  1471. { yyval.expr = ws_expr_call(pctx, yylsp[-1].first_line, '#', yyvsp[-3].identifier, yyvsp[-1].identifier, yyvsp[0].list); ;
  1472.     break;}
  1473. case 133:
  1474. #line 678 "wmlscript/wsgram.y"
  1475. { yyval.expr = ws_expr_call(pctx, yylsp[-1].first_line, '.', yyvsp[-3].identifier, yyvsp[-1].identifier, yyvsp[0].list); ;
  1476.     break;}
  1477. case 134:
  1478. #line 683 "wmlscript/wsgram.y"
  1479. { yyval.expr = ws_expr_symbol(pctx, yylsp[0].first_line, yyvsp[0].identifier); ;
  1480.     break;}
  1481. case 135:
  1482. #line 685 "wmlscript/wsgram.y"
  1483. { yyval.expr = ws_expr_const_invalid(pctx, yylsp[0].first_line); ;
  1484.     break;}
  1485. case 136:
  1486. #line 687 "wmlscript/wsgram.y"
  1487. { yyval.expr = ws_expr_const_true(pctx, yylsp[0].first_line); ;
  1488.     break;}
  1489. case 137:
  1490. #line 689 "wmlscript/wsgram.y"
  1491. { yyval.expr = ws_expr_const_false(pctx, yylsp[0].first_line); ;
  1492.     break;}
  1493. case 138:
  1494. #line 691 "wmlscript/wsgram.y"
  1495. { yyval.expr = ws_expr_const_integer(pctx, yylsp[0].first_line, yyvsp[0].integer); ;
  1496.     break;}
  1497. case 139:
  1498. #line 693 "wmlscript/wsgram.y"
  1499. { yyval.expr = ws_expr_const_float(pctx, yylsp[0].first_line, yyvsp[0].vfloat); ;
  1500.     break;}
  1501. case 140:
  1502. #line 695 "wmlscript/wsgram.y"
  1503. { yyval.expr = ws_expr_const_string(pctx, yylsp[0].first_line, yyvsp[0].string); ;
  1504.     break;}
  1505. case 141:
  1506. #line 697 "wmlscript/wsgram.y"
  1507. { yyval.expr = yyvsp[-1].expr; ;
  1508.     break;}
  1509. case 142:
  1510. #line 702 "wmlscript/wsgram.y"
  1511. { yyval.list = ws_list_new(pctx); ;
  1512.     break;}
  1513. case 143:
  1514. #line 704 "wmlscript/wsgram.y"
  1515. { yyval.list = yyvsp[-1].list; ;
  1516.     break;}
  1517. case 144:
  1518. #line 709 "wmlscript/wsgram.y"
  1519. {
  1520.     yyval.list = ws_list_new(pctx);
  1521.     ws_list_append(pctx, yyval.list, yyvsp[0].expr);
  1522. ;
  1523.     break;}
  1524. case 145:
  1525. #line 714 "wmlscript/wsgram.y"
  1526. { ws_list_append(pctx, yyvsp[-2].list, yyvsp[0].expr); ;
  1527.     break;}
  1528. }
  1529.    /* the action file gets copied in in place of this dollarsign */
  1530. #line 543 "/usr/share/misc/bison.simple"
  1531.   yyvsp -= yylen;
  1532.   yyssp -= yylen;
  1533. #ifdef YYLSP_NEEDED
  1534.   yylsp -= yylen;
  1535. #endif
  1536. #if YYDEBUG != 0
  1537.   if (yydebug)
  1538.     {
  1539.       short *ssp1 = yyss - 1;
  1540.       fprintf (stderr, "state stack now");
  1541.       while (ssp1 != yyssp)
  1542. fprintf (stderr, " %d", *++ssp1);
  1543.       fprintf (stderr, "n");
  1544.     }
  1545. #endif
  1546.   *++yyvsp = yyval;
  1547. #ifdef YYLSP_NEEDED
  1548.   yylsp++;
  1549.   if (yylen == 0)
  1550.     {
  1551.       yylsp->first_line = yylloc.first_line;
  1552.       yylsp->first_column = yylloc.first_column;
  1553.       yylsp->last_line = (yylsp-1)->last_line;
  1554.       yylsp->last_column = (yylsp-1)->last_column;
  1555.       yylsp->text = 0;
  1556.     }
  1557.   else
  1558.     {
  1559.       yylsp->last_line = (yylsp+yylen-1)->last_line;
  1560.       yylsp->last_column = (yylsp+yylen-1)->last_column;
  1561.     }
  1562. #endif
  1563.   /* Now "shift" the result of the reduction.
  1564.      Determine what state that goes to,
  1565.      based on the state we popped back to
  1566.      and the rule number reduced by.  */
  1567.   yyn = yyr1[yyn];
  1568.   yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
  1569.   if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
  1570.     yystate = yytable[yystate];
  1571.   else
  1572.     yystate = yydefgoto[yyn - YYNTBASE];
  1573.   goto yynewstate;
  1574. yyerrlab:   /* here on detecting error */
  1575.   if (! yyerrstatus)
  1576.     /* If not already recovering from an error, report this error.  */
  1577.     {
  1578.       ++yynerrs;
  1579. #ifdef YYERROR_VERBOSE
  1580.       yyn = yypact[yystate];
  1581.       if (yyn > YYFLAG && yyn < YYLAST)
  1582. {
  1583.   int size = 0;
  1584.   char *msg;
  1585.   int x, count;
  1586.   count = 0;
  1587.   /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
  1588.   for (x = (yyn < 0 ? -yyn : 0);
  1589.        x < (sizeof(yytname) / sizeof(char *)); x++)
  1590.     if (yycheck[x + yyn] == x)
  1591.       size += strlen(yytname[x]) + 15, count++;
  1592.   msg = (char *) malloc(size + 15);
  1593.   if (msg != 0)
  1594.     {
  1595.       strcpy(msg, "parse error");
  1596.       if (count < 5)
  1597. {
  1598.   count = 0;
  1599.   for (x = (yyn < 0 ? -yyn : 0);
  1600.        x < (sizeof(yytname) / sizeof(char *)); x++)
  1601.     if (yycheck[x + yyn] == x)
  1602.       {
  1603. strcat(msg, count == 0 ? ", expecting `" : " or `");
  1604. strcat(msg, yytname[x]);
  1605. strcat(msg, "'");
  1606. count++;
  1607.       }
  1608. }
  1609.       yyerror(msg);
  1610.       free(msg);
  1611.     }
  1612.   else
  1613.     yyerror ("parse error; also virtual memory exceeded");
  1614. }
  1615.       else
  1616. #endif /* YYERROR_VERBOSE */
  1617. yyerror("parse error");
  1618.     }
  1619.   goto yyerrlab1;
  1620. yyerrlab1:   /* here on error raised explicitly by an action */
  1621.   if (yyerrstatus == 3)
  1622.     {
  1623.       /* if just tried and failed to reuse lookahead token after an error, discard it.  */
  1624.       /* return failure if at end of input */
  1625.       if (yychar == YYEOF)
  1626. YYABORT;
  1627. #if YYDEBUG != 0
  1628.       if (yydebug)
  1629. fprintf(stderr, "Discarding token %d (%s).n", yychar, yytname[yychar1]);
  1630. #endif
  1631.       yychar = YYEMPTY;
  1632.     }
  1633.   /* Else will try to reuse lookahead token
  1634.      after shifting the error token.  */
  1635.   yyerrstatus = 3; /* Each real token shifted decrements this */
  1636.   goto yyerrhandle;
  1637. yyerrdefault:  /* current state does not do anything special for the error token. */
  1638. #if 0
  1639.   /* This is wrong; only states that explicitly want error tokens
  1640.      should shift them.  */
  1641.   yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
  1642.   if (yyn) goto yydefault;
  1643. #endif
  1644. yyerrpop:   /* pop the current state because it cannot handle the error token */
  1645.   if (yyssp == yyss) YYABORT;
  1646.   yyvsp--;
  1647.   yystate = *--yyssp;
  1648. #ifdef YYLSP_NEEDED
  1649.   yylsp--;
  1650. #endif
  1651. #if YYDEBUG != 0
  1652.   if (yydebug)
  1653.     {
  1654.       short *ssp1 = yyss - 1;
  1655.       fprintf (stderr, "Error: state stack now");
  1656.       while (ssp1 != yyssp)
  1657. fprintf (stderr, " %d", *++ssp1);
  1658.       fprintf (stderr, "n");
  1659.     }
  1660. #endif
  1661. yyerrhandle:
  1662.   yyn = yypact[yystate];
  1663.   if (yyn == YYFLAG)
  1664.     goto yyerrdefault;
  1665.   yyn += YYTERROR;
  1666.   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
  1667.     goto yyerrdefault;
  1668.   yyn = yytable[yyn];
  1669.   if (yyn < 0)
  1670.     {
  1671.       if (yyn == YYFLAG)
  1672. goto yyerrpop;
  1673.       yyn = -yyn;
  1674.       goto yyreduce;
  1675.     }
  1676.   else if (yyn == 0)
  1677.     goto yyerrpop;
  1678.   if (yyn == YYFINAL)
  1679.     YYACCEPT;
  1680. #if YYDEBUG != 0
  1681.   if (yydebug)
  1682.     fprintf(stderr, "Shifting error token, ");
  1683. #endif
  1684.   *++yyvsp = yylval;
  1685. #ifdef YYLSP_NEEDED
  1686.   *++yylsp = yylloc;
  1687. #endif
  1688.   yystate = yyn;
  1689.   goto yynewstate;
  1690.  yyacceptlab:
  1691.   /* YYACCEPT comes here.  */
  1692.   if (yyfree_stacks)
  1693.     {
  1694.       free (yyss);
  1695.       free (yyvs);
  1696. #ifdef YYLSP_NEEDED
  1697.       free (yyls);
  1698. #endif
  1699.     }
  1700.   return 0;
  1701.  yyabortlab:
  1702.   /* YYABORT comes here.  */
  1703.   if (yyfree_stacks)
  1704.     {
  1705.       free (yyss);
  1706.       free (yyvs);
  1707. #ifdef YYLSP_NEEDED
  1708.       free (yyls);
  1709. #endif
  1710.     }
  1711.   return 1;
  1712. }
  1713. #line 717 "wmlscript/wsgram.y"
  1714. void
  1715. yyerror(char *msg)
  1716. {
  1717. #if WS_DEBUG
  1718.   fprintf(stderr, "*** %s:%d: wsc: %s - this msg will be removed ***n",
  1719.   global_compiler->input_name, global_compiler->linenum, msg);
  1720. #endif /* WS_DEBUG */
  1721. }