#define YYBISON 1
# define kCLASS 257
# define kMODULE 258
# define kDEF 259
# define kUNDEF 260
# define kBEGIN 261
# define kRESCUE 262
# define kENSURE 263
# define kEND 264
# define kIF 265
# define kUNLESS 266
# define kTHEN 267
# define kELSIF 268
# define kELSE 269
# define kCASE 270
# define kWHEN 271
# define kWHILE 272
# define kUNTIL 273
# define kFOR 274
# define kBREAK 275
# define kNEXT 276
# define kREDO 277
# define kRETRY 278
# define kIN 279
# define kDO 280
# define kDO_COND 281
# define kDO_BLOCK 282
# define kRETURN 283
# define kYIELD 284
# define kSUPER 285
# define kSELF 286
# define kNIL 287
# define kTRUE 288
# define kFALSE 289
# define kAND 290
# define kOR 291
# define kNOT 292
# define kIF_MOD 293
# define kUNLESS_MOD 294
# define kWHILE_MOD 295
# define kUNTIL_MOD 296
# define kRESCUE_MOD 297
# define kALIAS 298
# define kDEFINED 299
# define klBEGIN 300
# define klEND 301
# define k__LINE__ 302
# define k__FILE__ 303
# define tIDENTIFIER 304
# define tFID 305
# define tGVAR 306
# define tIVAR 307
# define tCONSTANT 308
# define tCVAR 309
# define tINTEGER 310
# define tFLOAT 311
# define tSTRING 312
# define tXSTRING 313
# define tREGEXP 314
# define tDSTRING 315
# define tDXSTRING 316
# define tDREGEXP 317
# define tNTH_REF 318
# define tBACK_REF 319
# define tQWORDS 320
# define tUPLUS 321
# define tUMINUS 322
# define tPOW 323
# define tCMP 324
# define tEQ 325
# define tEQQ 326
# define tNEQ 327
# define tGEQ 328
# define tLEQ 329
# define tANDOP 330
# define tOROP 331
# define tMATCH 332
# define tNMATCH 333
# define tDOT2 334
# define tDOT3 335
# define tAREF 336
# define tASET 337
# define tLSHFT 338
# define tRSHFT 339
# define tCOLON2 340
# define tCOLON3 341
# define tOP_ASGN 342
# define tASSOC 343
# define tLPAREN 344
# define tLBRACK 345
# define tLBRACE 346
# define tSTAR 347
# define tAMPER 348
# define tSYMBEG 349
# define LAST_TOKEN 350
#line 13 "parse.y"
#define YYDEBUG 1
#include "ruby.h"
#include "env.h"
#include "node.h"
#include "st.h"
#include <stdio.h>
#include <errno.h>
#define ID_SCOPE_SHIFT 3
#define ID_SCOPE_MASK 0x07
#define ID_LOCAL 0x01
#define ID_INSTANCE 0x02
#define ID_GLOBAL 0x03
#define ID_ATTRSET 0x04
#define ID_CONST 0x05
#define ID_CLASS 0x06
#define is_notop_id(id) ((id)>LAST_TOKEN)
#define is_local_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_LOCAL)
#define is_global_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_GLOBAL)
#define is_instance_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_INSTANCE)
#define is_attrset_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_ATTRSET)
#define is_const_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CONST)
#define is_class_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CLASS)
NODE *ruby_eval_tree_begin = 0;
NODE *ruby_eval_tree = 0;
char *ruby_sourcefile;
int ruby_sourceline;
static int yylex();
static int yyerror();
static enum lex_state {
EXPR_BEG,
EXPR_END,
EXPR_ARG,
EXPR_MID,
EXPR_FNAME,
EXPR_DOT,
EXPR_CLASS,
} lex_state;
#if SIZEOF_LONG_LONG > 0
typedef unsigned long long stack_type;
#elif SIZEOF___INT64 > 0
typedef unsigned __int64 stack_type;
#else
typedef unsigned long stack_type;
#endif
static int cond_nest = 0;
static stack_type cond_stack = 0;
#define COND_PUSH do {\
cond_nest++;\
cond_stack = (cond_stack<<1)|1;\
} while(0)
#define COND_POP do {\
cond_nest--;\
cond_stack >>= 1;\
} while (0)
#define COND_P() (cond_nest > 0 && (cond_stack&1))
static stack_type cmdarg_stack = 0;
#define CMDARG_PUSH do {\
cmdarg_stack = (cmdarg_stack<<1)|1;\
} while(0)
#define CMDARG_POP do {\
cmdarg_stack >>= 1;\
} while (0)
#define CMDARG_P() (cmdarg_stack && (cmdarg_stack&1))
static int class_nest = 0;
static int in_single = 0;
static int in_def = 0;
static int compile_for_eval = 0;
static ID cur_mid = 0;
static NODE *cond();
static NODE *logop();
static NODE *newline_node();
static void fixpos();
static int value_expr();
static void void_expr();
static void void_stmts();
static NODE *block_append();
static NODE *list_append();
static NODE *list_concat();
static NODE *arg_concat();
static NODE *call_op();
static int in_defined = 0;
static NODE *arg_blk_pass();
static NODE *new_call();
static NODE *new_fcall();
static NODE *new_super();
static NODE *gettable();
static NODE *assignable();
static NODE *aryset();
static NODE *attrset();
static void rb_backref_error();
static NODE *node_assign();
static NODE *match_gen();
static void local_push();
static void local_pop();
static int local_append();
static int local_cnt();
static int local_id();
static ID *local_tbl();
static struct RVarmap *dyna_push();
static void dyna_pop();
static int dyna_in_block();
static void top_local_init();
static void top_local_setup();
#line 139 "parse.y"
#ifndef YYSTYPE
typedef union {
NODE *node;
VALUE val;
ID id;
int num;
struct RVarmap *vars;
} yystype;
# define YYSTYPE yystype
#endif
#ifndef YYDEBUG
# define YYDEBUG 0
#endif
#define YYFINAL 737
#define YYFLAG -32768
#define YYNTBASE 123
#define YYTRANSLATE(x) ((unsigned)(x) <= 350 ? yytranslate[x] : 232)
static const char yytranslate[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
121, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 109, 2, 2, 2, 108, 103, 2,
120, 115, 106, 104, 116, 105, 114, 107, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 98, 122,
100, 96, 99, 97, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 117, 2, 118, 102, 2, 119, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 112, 101, 113, 110, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 1, 3, 4, 5,
6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
111
};
#if YYDEBUG
static const short yyprhs[] =
{
0, 0, 1, 4, 7, 9, 11, 15, 18, 19,
24, 28, 32, 36, 39, 43, 47, 51, 55, 59,
60, 66, 71, 75, 79, 83, 85, 89, 92, 94,
98, 102, 105, 108, 110, 112, 114, 116, 121, 126,
129, 134, 139, 142, 145, 147, 151, 153, 157, 159,
162, 166, 169, 172, 174, 176, 180, 183, 187, 189,
194, 198, 202, 206, 208, 210, 215, 219, 223, 227,
229, 231, 233, 235, 237, 239, 241, 243, 245, 247,
249, 250, 255, 257, 259, 261, 263, 265, 267, 269,
271, 273, 275, 277, 279, 281, 283, 285, 287, 289,
291, 293, 295, 297, 299, 301, 303, 305, 307, 309,
311, 313, 315, 317, 319, 321, 323, 325, 327, 329,
331, 333, 335, 337, 339, 341, 343, 345, 347, 349,
351, 353, 355, 357, 359, 361, 363, 365, 367, 369,
371, 373, 375, 377, 379, 381, 383, 385, 387, 389,
393, 394, 399, 406, 412, 418, 424, 428, 432, 436,
440, 444, 448, 452, 456, 460, 463, 466, 470, 474,
478, 482, 486, 490, 494, 498, 502, 506, 510, 514,
518, 521, 524, 528, 532, 536, 540, 541, 546, 552,
554, 556, 559, 564, 567, 573, 576, 580, 584, 589,
594, 601, 603, 605, 607, 611, 614, 620, 623, 629,
634, 642, 646, 648, 649, 652, 655, 658, 660, 662,
666, 668, 670, 674, 679, 682, 684, 686, 688, 690,
692, 694, 696, 698, 700, 702, 709, 713, 717, 720,
725, 729, 733, 738, 742, 744, 749, 753, 755, 756,
763, 766, 768, 771, 778, 785, 786, 787, 795, 796,
797, 805, 811, 816, 817, 818, 828, 829, 836, 837,
838, 847, 848, 854, 855, 865, 866, 867, 880, 882,
884, 886, 888, 890, 892, 895, 897, 899, 901, 907,
909, 912, 914, 916, 918, 921, 923, 927, 928, 934,
937, 942, 947, 950, 955, 960, 964, 967, 969, 970,
976, 977, 983, 989, 991, 996, 999, 1001, 1003, 1005,
1007, 1010, 1012, 1019, 1021, 1023, 1026, 1028, 1030, 1032,
1034, 1036, 1039, 1042, 1045, 1047, 1049, 1051, 1053, 1055,
1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075,
1077, 1079, 1081, 1083, 1085, 1087, 1088, 1093, 1096, 1101,
1104, 1111, 1116, 1121, 1124, 1129, 1132, 1135, 1137, 1138,
1140, 1142, 1144, 1146, 1148, 1150, 1154, 1158, 1160, 1164,
1167, 1169, 1172, 1175, 1177, 1179, 1180, 1186, 1188, 1191,
1194, 1196, 1200, 1204, 1206, 1208, 1210, 1212, 1214, 1216,
1218, 1220, 1222, 1224, 1226, 1228, 1229, 1231, 1232, 1234,
1235, 1237, 1239, 1241, 1243, 1245, 1248
};
static const short yyrhs[] =
{
-1, 124, 125, 0, 126, 226, 0, 231, 0, 127,
0, 126, 230, 127, 0, 1, 127, 0, 0, 44,
143, 128, 143, 0, 44, 52, 52, 0, 44, 52,
65, 0, 44, 52, 64, 0, 6, 144, 0, 127,
39, 130, 0, 127, 40, 130, 0, 127, 41, 130,
0, 127, 42, 130, 0, 127, 43, 127, 0, 0,
46, 129, 112, 125, 113, 0, 47, 112, 125, 113,
0, 140, 96, 131, 0, 134, 96, 131, 0, 140,
96, 161, 0, 130, 0, 134, 96, 160, 0, 29,
162, 0, 131, 0, 130, 36, 130, 0, 130, 37,
130, 0, 38, 130, 0, 109, 131, 0, 148, 0,
133, 0, 132, 0, 186, 0, 186, 114, 223, 155,
0, 186, 86, 223, 155, 0, 222, 155, 0, 163,
114, 223, 155, 0, 163, 86, 223, 155, 0, 31,
155, 0, 30, 162, 0, 136, 0, 90, 135, 115,
0, 136, 0, 90, 135, 115, 0, 138, 0, 138,
137, 0, 138, 93, 139, 0, 138, 93, 0, 93,
139, 0, 93, 0, 139, 0, 90, 135, 115, 0,
137, 116, 0, 138, 137, 116, 0, 203, 0, 163,
117, 151, 118, 0, 163, 114, 50, 0, 163, 86,
50, 0, 163, 114, 54, 0, 205, 0, 203, 0,
163, 117, 151, 118, 0, 163, 114, 50, 0, 163,
86, 50, 0, 163, 114, 54, 0, 205, 0, 50,
0, 54, 0, 50, 0, 54, 0, 51, 0, 146,
0, 147, 0, 142, 0, 200, 0, 143, 0, 0,
144, 116, 145, 143, 0, 101, 0, 102, 0, 103,
0, 70, 0, 71, 0, 72, 0, 78, 0, 99,
0, 74, 0, 100, 0, 75, 0, 84, 0, 85,
0, 104, 0, 105, 0, 106, 0, 93, 0, 107,
0, 108, 0, 69, 0, 110, 0, 67, 0, 68,
0, 82, 0, 83, 0, 119, 0, 48, 0, 49,
0, 46, 0, 47, 0, 44, 0, 36, 0, 7,
0, 21, 0, 16, 0, 3, 0, 5, 0, 45,
0, 26, 0, 15, 0, 14, 0, 10, 0, 9,
0, 35, 0, 20, 0, 39, 0, 25, 0, 4,
0, 22, 0, 33, 0, 38, 0, 37, 0, 23,
0, 8, 0, 24, 0, 29, 0, 32, 0, 31,
0, 13, 0, 34, 0, 6, 0, 40, 0, 42,
0, 17, 0, 41, 0, 30, 0, 43, 0, 140,
96, 148, 0, 0, 203, 88, 149, 148, 0, 163,
117, 151, 118, 88, 148, 0, 163, 114, 50, 88,
148, 0, 163, 114, 54, 88, 148, 0, 163, 86,
50, 88, 148, 0, 205, 88, 148, 0, 148, 80,
148, 0, 148, 81, 148, 0, 148, 104, 148, 0,
148, 105, 148, 0, 148, 106, 148, 0, 148, 107,
148, 0, 148, 108, 148, 0, 148, 69, 148, 0,
67, 148, 0, 68, 148, 0, 148, 101, 148, 0,
148, 102, 148, 0, 148, 103, 148, 0, 148, 70,
148, 0, 148, 99, 148, 0, 148, 74, 148, 0,
148, 100, 148, 0, 148, 75, 148, 0, 148, 71,
148, 0, 148, 72, 148, 0, 148, 73, 148, 0,
148, 78, 148, 0, 148, 79, 148, 0, 109, 148,
0, 110, 148, 0, 148, 84, 148, 0, 148, 85,
148, 0, 148, 76, 148, 0, 148, 77, 148, 0,
0, 45, 227, 150, 148, 0, 148, 97, 148, 98,
148, 0, 163, 0, 231, 0, 131, 227, 0, 159,
116, 131, 227, 0, 159, 228, 0, 159, 116, 93,
148, 227, 0, 220, 228, 0, 93, 148, 227, 0,
120, 231, 115, 0, 120, 154, 227, 115, 0, 120,
186, 227, 115, 0, 120, 159, 116, 186, 227, 115,
0, 231, 0, 152, 0, 133, 0, 159, 116, 133,
0, 159, 158, 0, 159, 116, 93, 148, 158, 0,
220, 158, 0, 220, 116, 93, 148, 158, 0, 159,
116, 220, 158, 0, 159, 116, 220, 116, 93, 148,
158, 0, 93, 148, 158, 0, 157, 0, 0, 156,
154, 0, 94, 148, 0, 116, 157, 0, 231, 0,
148, 0, 159, 116, 148, 0, 148, 0, 161, 0,
159, 116, 148, 0, 159, 116, 93, 148, 0, 93,
148, 0, 154, 0, 198, 0, 199, 0, 59, 0,
66, 0, 62, 0, 63, 0, 204, 0, 205, 0,
51, 0, 7, 125, 196, 181, 197, 10, 0, 90,
125, 115, 0, 163, 86, 54, 0, 87, 141, 0,
163, 117, 151, 118, 0, 91, 151, 118, 0, 92,
219, 113, 0, 29, 120, 162, 115, 0, 29, 120,
115, 0, 29, 0, 30, 120, 162, 115, 0, 30,
120, 115, 0, 30, 0, 0, 45, 227, 120, 164,
130, 115, 0, 222, 188, 0, 187, 0, 187, 188,
0, 11, 130, 178, 125, 180, 10, 0, 12, 130,
178, 125, 181, 10, 0, 0, 0, 18, 165, 130,
179, 166, 125, 10, 0, 0, 0, 19, 167, 130,
179, 168, 125, 10, 0, 16, 130, 226, 191, 10,
0, 16, 226, 191, 10, 0, 0, 0, 20, 182,
25, 169, 130, 179, 170, 125, 10, 0, 0, 3,
141, 206, 171, 125, 10, 0, 0, 0, 3, 84,
130, 172, 229, 173, 125, 10, 0, 0, 4, 141,
174, 125, 10, 0, 0, 5, 142, 175, 208, 125,
196, 181, 197, 10, 0, 0, 0, 5, 217, 225,
176, 142, 177, 208, 125, 196, 181, 197, 10, 0,
21, 0, 22, 0, 23, 0, 24, 0, 229, 0,
13, 0, 229, 13, 0, 229, 0, 27, 0, 181,
0, 14, 130, 178, 125, 180, 0, 231, 0, 15,
125, 0, 140, 0, 134, 0, 231, 0, 101, 101,
0, 77, 0, 101, 182, 101, 0, 0, 28, 185,
183, 125, 10, 0, 133, 184, 0, 186, 114, 223,
153, 0, 186, 86, 223, 153, 0, 222, 152, 0,
163, 114, 223, 153, 0, 163, 86, 223, 152, 0,
163, 86, 224, 0, 31, 152, 0, 31, 0, 0,
112, 189, 183, 125, 113, 0, 0, 26, 190, 183,
125, 10, 0, 17, 192, 178, 125, 193, 0, 159,
0, 159, 116, 93, 148, 0, 93, 148, 0, 181,
0, 191, 0, 231, 0, 159, 0, 89, 140, 0,
231, 0, 8, 194, 195, 178, 125, 196, 0, 231,
0, 231, 0, 9, 125, 0, 202, 0, 200, 0,
60, 0, 58, 0, 61, 0, 199, 58, 0, 199,
61, 0, 95, 201, 0, 142, 0, 53, 0, 52,
0, 55, 0, 56, 0, 57, 0, 50, 0, 53,
0, 52, 0, 54, 0, 55, 0, 33, 0, 32,
0, 34, 0, 35, 0, 49, 0, 48, 0, 203,
0, 64, 0, 65, 0, 229, 0, 0, 100, 207,
130, 229, 0, 1, 229, 0, 120, 209, 227, 115,
0, 209, 229, 0, 211, 116, 213, 116, 214, 216,
0, 211, 116, 213, 216, 0, 211, 116, 214, 216,
0, 211, 216, 0, 213, 116, 214, 216, 0, 213,
216, 0, 214, 216, 0, 215, 0, 0, 54, 0,
53, 0, 52, 0, 55, 0, 50, 0, 210, 0,
211, 116, 210, 0, 50, 96, 148, 0, 212, 0,
213, 116, 212, 0, 93, 50, 0, 93, 0, 94,
50, 0, 116, 215, 0, 231, 0, 204, 0, 0,
120, 218, 130, 227, 115, 0, 231, 0, 220, 228,
0, 159, 228, 0, 221, 0, 220, 116, 221, 0,
148, 89, 148, 0, 50, 0, 54, 0, 51, 0,
50, 0, 54, 0, 51, 0, 146, 0, 50, 0,
51, 0, 146, 0, 114, 0, 86, 0, 0, 230,
0, 0, 121, 0, 0, 121, 0, 116, 0, 122,
0, 121, 0, 229, 0, 230, 122, 0, 0
};
#endif
#if YYDEBUG
static const short yyrline[] =
{
0, 264, 264, 290, 296, 297, 301, 305, 310, 310,
316, 322, 331, 336, 342, 348, 354, 364, 374, 378,
378, 392, 400, 405, 411, 415, 417, 423, 429, 430,
434, 438, 443, 447, 449, 450, 452, 453, 458, 464,
469, 475, 481, 488, 494, 495, 500, 501, 506, 510,
514, 518, 522, 526, 531, 532, 537, 541, 546, 550,
554, 558, 562, 566, 572, 576, 580, 584, 588, 592,
598, 602, 604, 605, 606, 607, 612, 618, 619, 621,
625, 625, 630, 631, 632, 633, 634, 635, 636, 637,
638, 639, 640, 641, 642, 643, 644, 645, 646, 647,
648, 649, 650, 651, 652, 653, 654, 655, 657, 657,
657, 657, 658, 658, 658, 658, 658, 658, 658, 659,
659, 659, 659, 659, 659, 659, 660, 660, 660, 660,
660, 660, 660, 661, 661, 661, 661, 661, 661, 661,
662, 662, 662, 662, 662, 662, 663, 663, 663, 665,
670, 670, 694, 709, 720, 731, 742, 747, 751, 755,
759, 763, 767, 771, 775, 798, 807, 819, 823, 827,
831, 835, 839, 843, 847, 851, 855, 859, 863, 867,
871, 876, 880, 884, 888, 892, 896, 896, 901, 907,
912, 913, 917, 921, 925, 930, 934, 940, 944, 948,
952, 957, 958, 960, 964, 968, 972, 978, 983, 989,
994, 1000, 1005, 1007, 1007, 1013, 1019, 1023, 1025, 1030,
1036, 1041, 1043, 1048, 1053, 1059, 1073, 1077, 1078, 1082,
1083, 1084, 1085, 1086, 1087, 1091, 1111, 1115, 1120, 1124,
1129, 1137, 1141, 1148, 1154, 1160, 1165, 1169, 1173, 1173,
1178, 1183, 1184, 1193, 1202, 1211, 1211, 1211, 1219, 1219,
1219, 1227, 1235, 1239, 1239, 1239, 1247, 1247, 1263, 1263,
1263, 1285, 1285, 1301, 1301, 1332, 1332, 1332, 1358, 1362,
1366, 1370, 1375, 1376, 1377, 1379, 1380, 1382, 1383, 1392,
1393, 1398, 1399, 1401, 1402, 1406, 1410, 1416, 1416, 1429,
1438, 1443, 1449, 1454, 1460, 1466, 1471, 1478, 1486, 1486,
1497, 1497, 1509, 1516, 1517, 1522, 1528, 1529, 1531, 1532,
1534, 1538, 1540, 1551, 1553, 1554, 1563, 1564, 1568, 1570,
1574, 1575, 1585, 1598, 1604, 1605, 1606, 1607, 1609, 1610,
1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621,
1622, 1624, 1629, 1630, 1632, 1636, 1636, 1644, 1646, 1651,
1656, 1660, 1664, 1668, 1672, 1676, 1680, 1684, 1688, 1693,
1697, 1701, 1705, 1709, 1719, 1720, 1725, 1734, 1739, 1744,
1752, 1757, 1766, 1770, 1772, 1781, 1781, 1799, 1800, 1804,
1812, 1813, 1818, 1823, 1824, 1825, 1827, 1828, 1829, 1830,
1832, 1833, 1834, 1836, 1837, 1839, 1840, 1842, 1843, 1845,
1846, 1847, 1849, 1850, 1852, 1853, 1855
};
#endif
#if (YYDEBUG) || defined YYERROR_VERBOSE
static const char *const yytname[] =
{
"$", "error", "$undefined.", "kCLASS", "kMODULE", "kDEF", "kUNDEF",
"kBEGIN", "kRESCUE", "kENSURE", "kEND", "kIF", "kUNLESS", "kTHEN",
"kELSIF", "kELSE", "kCASE", "kWHEN", "kWHILE", "kUNTIL", "kFOR",
"kBREAK", "kNEXT", "kREDO", "kRETRY", "kIN", "kDO", "kDO_COND",
"kDO_BLOCK", "kRETURN", "kYIELD", "kSUPER", "kSELF", "kNIL", "kTRUE",
"kFALSE", "kAND", "kOR", "kNOT", "kIF_MOD", "kUNLESS_MOD", "kWHILE_MOD",
"kUNTIL_MOD", "kRESCUE_MOD", "kALIAS", "kDEFINED", "klBEGIN", "klEND",
"k__LINE__", "k__FILE__", "tIDENTIFIER", "tFID", "tGVAR", "tIVAR",
"tCONSTANT", "tCVAR", "tINTEGER", "tFLOAT", "tSTRING", "tXSTRING",
"tREGEXP", "tDSTRING", "tDXSTRING", "tDREGEXP", "tNTH_REF", "tBACK_REF",
"tQWORDS", "tUPLUS", "tUMINUS", "tPOW", "tCMP", "tEQ", "tEQQ", "tNEQ",
"tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH", "tDOT2",
"tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2", "tCOLON3",
"tOP_ASGN", "tASSOC", "tLPAREN", "tLBRACK", "tLBRACE", "tSTAR",
"tAMPER", "tSYMBEG", "'='", "'?'", "':'", "'>'", "'<'", "'|'", "'^'",
"'&'", "'+'", "'-'", "'*'", "'/'", "'%'", "'!'", "'~'", "LAST_TOKEN",
"'{'", "'}'", "'.'", "')'", "','", "'['", "']'", "'`'", "'('", "'\\n'",
"';'", "program", "@1", "compstmt", "stmts", "stmt", "@2", "@3", "expr",
"command_call", "block_command", "command", "mlhs", "mlhs_entry",
"mlhs_basic", "mlhs_item", "mlhs_head", "mlhs_node", "lhs", "cname",
"fname", "fitem", "undef_list", "@4", "op", "reswords", "arg", "@5",
"@6", "aref_args", "paren_args", "opt_paren_args", "call_args",
"command_args", "@7", "block_arg", "opt_block_arg", "args", "mrhs",
"mrhs_basic", "ret_args", "primary", "@8", "@9", "@10", "@11", "@12",
"@13", "@14", "@15", "@16", "@17", "@18", "@19", "@20", "@21", "then",
"do", "if_tail", "opt_else", "block_var", "opt_block_var", "do_block",
"@22", "block_call", "method_call", "brace_block", "@23", "@24",
"case_body", "when_args", "cases", "exc_list", "exc_var", "rescue",
"ensure", "literal", "string", "symbol", "sym", "numeric", "variable",
"var_ref", "backref", "superclass", "@25", "f_arglist", "f_args",
"f_norm_arg", "f_arg", "f_opt", "f_optarg", "f_rest_arg", "f_block_arg",
"opt_f_block_arg", "singleton", "@26", "assoc_list", "assocs", "assoc",
"operation", "operation2", "operation3", "dot_or_colon", "opt_terms",
"opt_nl", "trailer", "term", "terms", "none", NULL
};
#endif
static const short yyr1[] =
{
0, 124, 123, 125, 126, 126, 126, 126, 128, 127,
127, 127, 127, 127, 127, 127, 127, 127, 127, 129,
127, 127, 127, 127, 127, 127, 130, 130, 130, 130,
130, 130, 130, 130, 131, 131, 132, 132, 132, 133,
133, 133, 133, 133, 134, 134, 135, 135, 136, 136,
136, 136, 136, 136, 137, 137, 138, 138, 139, 139,
139, 139, 139, 139, 140, 140, 140, 140, 140, 140,
141, 141, 142, 142, 142, 142, 142, 143, 143, 144,
145, 144, 146, 146, 146, 146, 146, 146, 146, 146,
146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
146, 146, 146, 146, 146, 146, 146, 146, 147, 147,
147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
147, 147, 147, 147, 147, 147, 147, 147, 147, 148,
149, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
148, 148, 148, 148, 148, 148, 150, 148, 148, 148,
151, 151, 151, 151, 151, 151, 151, 152, 152, 152,
152, 153, 153, 154, 154, 154, 154, 154, 154, 154,
154, 154, 154, 156, 155, 157, 158, 158, 159, 159,
160, 160, 161, 161, 161, 162, 163, 163, 163, 163,
163, 163, 163, 163, 163, 163, 163, 163, 163, 163,
163, 163, 163, 163, 163, 163, 163, 163, 164, 163,
163, 163, 163, 163, 163, 165, 166, 163, 167, 168,
163, 163, 163, 169, 170, 163, 171, 163, 172, 173,
163, 174, 163, 175, 163, 176, 177, 163, 163, 163,
163, 163, 178, 178, 178, 179, 179, 180, 180, 181,
181, 182, 182, 183, 183, 183, 183, 185, 184, 186,
186, 186, 187, 187, 187, 187, 187, 187, 189, 188,
190, 188, 191, 192, 192, 192, 193, 193, 194, 194,
195, 195, 196, 196, 197, 197, 198, 198, 198, 199,
199, 199, 199, 200, 201, 201, 201, 201, 202, 202,
203, 203, 203, 203, 203, 203, 203, 203, 203, 203,
203, 204, 205, 205, 206, 207, 206, 206, 208, 208,
209, 209, 209, 209, 209, 209, 209, 209, 209, 210,
210, 210, 210, 210, 211, 211, 212, 213, 213, 214,
214, 215, 216, 216, 217, 218, 217, 219, 219, 219,
220, 220, 221, 222, 222, 222, 223, 223, 223, 223,
224, 224, 224, 225, 225, 226, 226, 227, 227, 228,
228, 228, 229, 229, 230, 230, 231
};
static const short yyr2[] =
{
0, 0, 2, 2, 1, 1, 3, 2, 0, 4,
3, 3, 3, 2, 3, 3, 3, 3, 3, 0,
5, 4, 3, 3, 3, 1, 3, 2, 1, 3,
3, 2, 2, 1, 1, 1, 1, 4, 4, 2,
4, 4, 2, 2, 1, 3, 1, 3, 1, 2,
3, 2, 2, 1, 1, 3, 2, 3, 1, 4,
3, 3, 3, 1, 1, 4, 3, 3, 3, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0, 4, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
0, 4, 6, 5, 5, 5, 3, 3, 3, 3,
3, 3, 3, 3, 3, 2, 2, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
2, 2, 3, 3, 3, 3, 0, 4, 5, 1,
1, 2, 4, 2, 5, 2, 3, 3, 4, 4,
6, 1, 1, 1, 3, 2, 5, 2, 5, 4,
7, 3, 1, 0, 2, 2, 2, 1, 1, 3,
1, 1, 3, 4, 2, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 6, 3, 3, 2, 4,
3, 3, 4, 3, 1, 4, 3, 1, 0, 6,
2, 1, 2, 6, 6, 0, 0, 7, 0, 0,
7, 5, 4, 0, 0, 9, 0, 6, 0, 0,
8, 0, 5, 0, 9, 0, 0, 12, 1, 1,
1, 1, 1, 1, 2, 1, 1, 1, 5, 1,
2, 1, 1, 1, 2, 1, 3, 0, 5, 2,
4, 4, 2, 4, 4, 3, 2, 1, 0, 5,
0, 5, 5, 1, 4, 2, 1, 1, 1, 1,
2, 1, 6, 1, 1, 2, 1, 1, 1, 1,
1, 2, 2, 2, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 0, 4, 2, 4, 2,
6, 4, 4, 2, 4, 2, 2, 1, 0, 1,
1, 1, 1, 1, 1, 3, 3, 1, 3, 2,
1, 2, 2, 1, 1, 0, 5, 1, 2, 2,
1, 3, 3, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 0, 1, 0, 1, 0,
1, 1, 1, 1, 1, 2, 0
};
static const short yydefact[] =
{
1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
405, 255, 258, 0, 278, 279, 280, 281, 244, 247,
307, 346, 345, 347, 348, 0, 0, 407, 19, 0,
350, 349, 340, 395, 342, 341, 343, 344, 338, 339,
329, 228, 328, 330, 230, 231, 352, 353, 229, 0,
0, 0, 0, 416, 416, 53, 0, 0, 0, 2,
405, 5, 25, 28, 35, 34, 0, 44, 0, 48,
54, 0, 33, 189, 36, 251, 226, 227, 327, 326,
351, 232, 233, 213, 4, 7, 70, 71, 0, 0,
271, 117, 129, 118, 142, 114, 135, 124, 123, 140,
122, 121, 116, 145, 126, 115, 130, 134, 136, 128,
120, 137, 147, 139, 138, 131, 141, 125, 113, 133,
132, 127, 143, 146, 144, 148, 112, 119, 110, 111,
108, 109, 72, 74, 73, 103, 104, 101, 85, 86,
87, 90, 92, 88, 105, 106, 93, 94, 98, 89,
91, 82, 83, 84, 95, 96, 97, 99, 100, 102,
107, 385, 273, 75, 76, 351, 384, 0, 138, 131,
141, 125, 108, 109, 72, 73, 77, 79, 13, 78,
416, 0, 0, 0, 0, 413, 412, 405, 0, 414,
406, 0, 0, 244, 247, 307, 407, 292, 291, 0,
0, 351, 233, 0, 0, 0, 0, 0, 0, 203,
218, 225, 212, 416, 27, 189, 351, 233, 416, 390,
0, 43, 416, 306, 42, 0, 31, 0, 8, 408,
186, 0, 0, 165, 189, 166, 238, 0, 0, 0,
44, 0, 407, 0, 409, 409, 190, 409, 0, 409,
387, 52, 0, 58, 63, 336, 335, 337, 334, 333,
32, 180, 181, 3, 406, 0, 0, 0, 0, 0,
0, 0, 297, 299, 0, 56, 0, 51, 49, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 416, 0,
0, 310, 308, 252, 331, 332, 150, 0, 302, 39,
250, 268, 0, 355, 266, 354, 0, 0, 368, 404,
403, 275, 80, 416, 416, 323, 283, 0, 282, 0,
0, 0, 0, 0, 0, 415, 0, 0, 0, 0,
0, 416, 263, 416, 215, 243, 0, 0, 0, 205,
217, 0, 0, 416, 0, 207, 246, 0, 203, 407,
416, 407, 0, 214, 10, 12, 11, 0, 248, 0,
0, 0, 0, 0, 0, 236, 45, 407, 191, 240,
411, 410, 193, 411, 195, 411, 389, 241, 388, 0,
0, 416, 6, 14, 15, 16, 17, 18, 29, 30,
416, 0, 23, 220, 0, 26, 221, 0, 50, 57,
22, 149, 24, 164, 170, 175, 176, 177, 172, 174,
184, 185, 178, 179, 157, 158, 182, 183, 0, 171,
173, 167, 168, 169, 159, 160, 161, 162, 163, 396,
401, 237, 402, 213, 305, 396, 398, 397, 399, 416,
0, 396, 397, 213, 213, 416, 416, 0, 156, 0,
357, 0, 0, 0, 407, 373, 371, 370, 369, 372,
380, 0, 368, 0, 0, 374, 416, 377, 416, 416,
367, 0, 0, 218, 319, 416, 318, 0, 416, 289,
416, 284, 149, 416, 0, 0, 313, 0, 262, 286,
256, 285, 259, 400, 0, 396, 397, 416, 0, 0,
0, 211, 242, 392, 0, 204, 219, 216, 416, 400,
396, 397, 0, 0, 0, 391, 245, 0, 0, 0,
0, 0, 197, 9, 0, 187, 0, 21, 45, 196,
0, 407, 219, 61, 396, 397, 0, 295, 0, 0,
293, 224, 0, 55, 0, 0, 304, 41, 0, 0,
202, 303, 40, 201, 239, 301, 38, 300, 37, 0,
0, 151, 269, 0, 0, 272, 0, 0, 379, 381,
407, 416, 359, 0, 363, 383, 0, 365, 0, 366,
276, 81, 0, 0, 0, 321, 290, 0, 0, 324,
0, 0, 287, 0, 261, 315, 0, 0, 0, 0,
239, 0, 416, 0, 209, 239, 416, 198, 204, 407,
416, 416, 199, 0, 20, 407, 192, 59, 294, 0,
0, 0, 222, 188, 155, 153, 154, 0, 0, 0,
0, 356, 267, 386, 376, 0, 416, 375, 416, 416,
382, 0, 378, 416, 368, 320, 0, 64, 69, 0,
325, 235, 0, 253, 254, 0, 416, 0, 0, 264,
206, 0, 208, 0, 249, 194, 296, 298, 223, 152,
311, 309, 0, 358, 416, 0, 361, 362, 364, 0,
0, 0, 416, 416, 0, 314, 316, 317, 312, 257,
260, 0, 416, 200, 270, 0, 416, 416, 400, 396,
397, 0, 322, 416, 0, 210, 274, 360, 416, 65,
288, 265, 416, 0, 277, 0, 0, 0
};
static const short yydefgoto[] =
{
735, 1, 238, 60, 61, 377, 231, 62, 63, 64,
65, 66, 239, 67, 68, 69, 70, 183, 89, 176,
177, 178, 492, 458, 164, 72, 467, 379, 243, 570,
571, 211, 224, 225, 212, 359, 244, 415, 416, 214,
234, 544, 191, 618, 192, 619, 519, 711, 472, 469,
650, 326, 328, 491, 664, 337, 510, 611, 612, 200,
559, 273, 410, 74, 75, 320, 466, 465, 344, 507,
708, 495, 604, 334, 608, 76, 77, 78, 259, 79,
216, 81, 217, 324, 471, 483, 484, 485, 486, 487,
488, 489, 660, 594, 167, 327, 248, 218, 219, 203,
514, 454, 331, 188, 230, 392, 338, 190, 84
};
static const short yypact[] =
{
-32768, 1961, 5018, 49, 402, 3407, 4601, 2290, 5113, 5113,
3297,-32768,-32768, 6443,-32768,-32768,-32768,-32768, 3802, 3897,
3992,-32768,-32768,-32768,-32768, 5113, 4493, -57,-32768, -37,
-32768,-32768, 3517, 2049,-32768,-32768, 3612,-32768,-32768,-32768,
-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 6253,
6253, 402, 2785, 5588, 6253, 6629, 4385, 6348, 6253,-32768,
64, 572, 69,-32768,-32768, 103, 29,-32768, 32, 6536,
-32768, 139, 7543, 173, 12, 27,-32768, 234,-32768,-32768,
8,-32768, 146, 55,-32768, 572,-32768,-32768, 5113, 44,
-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-32768,-32768,-32768,-32768, 116, 130, 143, 172,-32768,-32768,
-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
202, 274, 325,-32768, 326,-32768,-32768,-32768,-32768,-32768,
-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-32768,-32768,-32768,-32768,-32768,-32768,-32768, 337,-32768,-32768,
-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 107,-32768,
152, 52, 145, 150, 52,-32768,-32768, 216, 239,-32768,
169, 5113, 5113, 141, 204, 210, -57,-32768,-32768, 186,
351, 16, 67, 55, 2898, 6253, 6253, 6253, 4818,-32768,
7463,-32768,-32768, 286,-32768, 231, 42, 273, 289,-32768,
4918,-32768, 5208,-32768,-32768, 5208,-32768, 241,-32768,-32768,
295, 312, 3011, 358, 237, 358,-32768, 2785, 321, 335,
348, 6253, -57, 349, -30, 0,-32768, 35, 359, 0,
-32768,-32768, 352, 362, 363,-32768,-32768,-32768,-32768,-32768,
-32768, 358, 358,-32768, 3202, 5113, 5113, 5113, 5113, 5018,
5113, 5113,-32768,-32768, 5683,-32768, 2785, 6629, 357, 5683,
6253, 6253, 6253, 6253, 6253, 6253, 6253, 6253, 6253, 6253,
6253, 6253, 6253, 6253, 6253, 6253, 6253, 6253, 6253, 6253,
6253, 6253, 6253, 6253, 6253, 6253, 6658, 6719, 5588, 6780,
6780,-32768,-32768,-32768,-32768,-32768,-32768, 6253,-32768,-32768,
-32768, 69, 64,-32768,-32768,-32768, 3107, 5113, 364,-32768,
-32768,-32768,-32768, 6253, 459,-32768,-32768, 2403, 468, 5778,
6253, 2595, 239, 5873, 465,-32768, 73, 73, 295, 6841,
6902, 5588,-32768, 7319, 7543,-32768, 397, 6253, 5303,-32768,
-32768, 6963, 7024, 5588, 5398,-32768,-32768, 400, 103, -57,
373, -3, 411,-32768,-32768,-32768,-32768, 4601,-32768, 6253,
3011, 406, 6963, 7024, 412,-32768, 414, 1604,-32768,-32768,
5968,-32768,-32768, 6253,-32768, 6253,-32768,-32768,-32768, 7085,
7146, 5588, 572, 69, 69, 69, 69,-32768,-32768,-32768,
-7, 6253,-32768, 7367, 416,-32768,-32768, 418,-32768,-32768,
-32768, 7367,-32768, 358, 2118, 2118, 2118, 2118, 610, 610,
7623, 963, 2118, 2118, 7583, 7583, 338, 338, 7503, 610,
610, 456, 456, 462, 214, 214, 358, 358, 358, 2168,
4087, 4182, 4277, 210,-32768, 155,-32768, 294,-32768, 3992,
420,-32768,-32768, 1489, 1489, -7, -7, 6253, 7543, 64,
-32768, 5113, 3107, 524, 212, 440,-32768,-32768,-32768,-32768,
489, 492, 500, 2290, 64,-32768, 428,-32768, 433, 460,
-32768, 4709, 4601, 7543, 461, 483,-32768, 2690, 566,-32768,
287,-32768, 7543, 459, 570, 6253, 466, 56,-32768,-32768,
-32768,-32768,-32768, 117, 210, 144, 180, 210, 463, 5113,
491,-32768,-32768, 7543, 6253,-32768, 7463,-32768, 467, 3707,
279, 290, 472, 6253, 7463,-32768,-32768, 471, 5303, 6780,
6780, 476,-32768,-32768, 5113, 7543, 482,-32768, 240,-32768,
6253, -57, 7543, 41, 97, 124, 478,-32768, 1785, 3107,
-32768, 7543, 6063,-32768, 6253, 6253,-32768,-32768, 6253, 6253,
-32768,-32768,-32768,-32768, 404,-32768,-32768,-32768,-32768, 3107,
3011, 7543,-32768, 216, 587,-32768, 486, 6253,-32768,-32768,
-57, 152,-32768, 500,-32768,-32768, 21,-32768, 506,-32768,
-32768,-32768, 6253, 6629, 56,-32768,-32768, 3107, 593,-32768,
5113, 595,-32768, 597,-32768, 7543, 6158, 2499, 3107, 3107,
197, 73, 7319, 5493,-32768, 341, 7319,-32768, 103, -3,
210, 210,-32768, 48,-32768, 1604,-32768, 369,-32768, 507,
609, 6253, 7415, 7543, 7543, 7543, 7543, 6253, 611, 509,
3107,-32768,-32768,-32768, 7543, 505, 459,-32768, 510, 460,
-32768, 440,-32768, 460, 364,-32768, 374, 362, 363, 2290,
-32768,-32768, 52,-32768,-32768, 6253, 78, 613, 615,-32768,
-32768, 6253,-32768, 512,-32768,-32768,-32768,-32768, 7543, 7543,
-32768,-32768, 618,-32768, 566, 21,-32768,-32768,-32768, 2290,
7207, 7268, 5588, 152, 2403, 7543,-32768,-32768,-32768,-32768,
-32768, 3107, 7319,-32768,-32768, 619, 460, 152, 50, 60,
66, 513,-32768, 287, 620,-32768,-32768,-32768, 459, 369,
-32768,-32768, 566, 622,-32768, 635, 636,-32768
};
static const short yypgoto[] =
{
-32768,-32768, 633,-32768, 13,-32768,-32768, 485, -24,-32768,
-16, 579, -157, -29, 564,-32768, -23, 522, 62, 20,
-5,-32768,-32768, 22,-32768, 1100,-32768,-32768, -289, -6,
-420, 121, -79,-32768, -324, -196, 89,-32768, 360, 18,
-1,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-32768,-32768,-32768,-32768,-32768, -173, -327, -86, -303, 80,
-4,-32768,-32768, -209,-32768, 567,-32768,-32768, -332,-32768,
-32768,-32768,-32768, -553, -612,-32768,-32768, 10,-32768,-32768,
496, 638, 650,-32768,-32768, -20, 159, 54,-32768, -541,
57, -554, -323, -431,-32768,-32768,-32768, 7, -334, 127,
-260,-32768,-32768, -25, -170, 63, 87, 585, 1231
};
#define YYLAST 7731
static const short yytable[] =
{
73, 73, 209, 209, 319, 490, 73, 73, 73, 73,
504, 341, 199, 371, 223, 85, 179, 215, 215, 460,
512, 228, 365, 240, 73, 162, 348, 163, 163, 242,
535, 498, 251, 260, 527, 263, 179, 221, 656, 659,
527, -64, 663, 575, 577, 322, 453, 459, 163, 463,
464, 73, 215, 311, 252, 662, 215, 597, 599, 535,
245, 249, 518, -67, 229, 336, 90, -400, 252, 336,
557, 661, 388, -66, 532, 232, 258, 318, 163, -68,
384, 311, 715, 539, 270, 271, 390, 73, 270, 271,
517, 391, -69, 497, 558, 343, 316, 189, 309, 86,
509, 453, 459, 87, -64, 270, 271, 213, 213, 270,
271, 540, 556, 236, 480, 481, 393, -64, 229, 417,
733, 391, -60, 517, -58, 274, 310, -400, 83, 83,
316, 272, -58, 88, 83, 83, 83, 83, -64, 312,
517, 716, -67, 247, 323, 83, 83, 189, 275, -62,
722, 395, 83, -400, 662, -400, 391, 521, -400, 490,
333, -396, 342, 684, 728, 185, 186, 312, -69, -66,
-396, -67, -67, 185, 186, 222, 325, 185, 186, 83,
83, -66, -66, -63, 83, 185, 186, -68, -68, 223,
73, 73, 209, -60, 185, 186, 527, 318, -60, 537,
613, 541, -346, 73, 209, -68, 368, 215, 240, 209,
575, 577, -60, -60, 527, 83, -345, 549, -67, 215,
-62, 215, -65, 332, 215, -62, 356, 696, 697, -347,
-346, 73, 698, -61, 317, 279, 73, -396, 367, -62,
-62, 339, -69, 568, -345, -66, 340, 240, 270, 271,
412, -66, 270, 271, 418, 420, 343, -347, -348, 306,
-60, 208, -63, 73, 73, 73, 73, 73, 73, 73,
73, -60, 349, 215, 189, 73, 252, 402, 215, 630,
631, -68, 407, 280, 242, 727, -348, 307, -350, 535,
308, 345, 314, 374, 679, 315, -62, 213, -65, 527,
350, 610, 497, 351, 586, 375, 376, 215, 394, 213,
396, 370, 398, -59, 213, 245, -350, 361, 83, 83,
303, 304, 305, 382, 220, 73, 73, 242, 452, 629,
222, 83, 624, 229, 617, 83, 73, 185, 186, 242,
73, 490, 525, 369, 707, 362, 373, 83, 363, 83,
215, 383, 83, 694, 363, -47, -55, 215, 245, 83,
-349, 317, 215, 414, 83, 528, 551, 568, 414, -69,
245, 452, 543, 706, 567, -66, 352, 242, 569, 73,
572, 636, 569, 452, 576, 578, -68, 179, -349, 215,
-68, 83, 83, 83, 83, 83, 83, 83, 83, 163,
215, 83, 358, 83, 452, 364, 83, 280, 245, 470,
-62, -340, -343, 721, 475, 378, 476, 477, 478, 479,
655, 452, 494, 329, 380, 732, 680, 280, 414, 647,
682, 669, 506, 511, 511, 83, 385, -65, 399, -340,
-343, 517, 301, 302, 303, 304, 305, 566, -351, -233,
386, 330, 86, 83, 83, -239, 87, 480, 481, 683,
700, 579, 580, -46, 83, 685, 400, 389, 83, 401,
73, 73, 397, 419, 497, 508, -351, -233, 83, -351,
-233, 501, 73, -239, 482, 83, -239, 601, 701, 538,
83, 702, 647, 181, 184, 187, 73, 80, 80, 704,
-65, 165, 179, 80, 80, 80, 80, 83, 566, 201,
226, 600, 522, 163, 163, 536, 725, 83, 73, 547,
-59, 80, 628, 71, 71, 280, 542, 548, 83, 71,
-55, 280, 562, 563, 585, 198, 587, 215, 574, 588,
293, 294, 589, 73, 593, 528, 293, 294, 80, 596,
475, 253, 476, 477, 478, 479, 582, 199, 73, 300,
301, 302, 303, 304, 305, 253, 301, 302, 303, 304,
305, 592, 603, 321, 71, 607, 598, 602, 73, 73,
614, 620, 616, 623, 80, 206, 627, 182, 182, 182,
625, 632, 197, 480, 481, 634, 637, 652, 83, 83,
481, 653, 666, 671, 182, 673, 73, 674, 686, 73,
83, 265, 266, 267, 268, 269, 73, 73, 73, 687,
693, 690, 691, 709, 83, 710, 695, 713, 714, 726,
731, 729, 734, 278, 59, 736, 737, 730, 639, 422,
180, 590, 313, 166, 699, 264, 83, 657, 0, 73,
658, 82, 82, 0, 0, 0, 0, 82, 82, 82,
82, 0, 0, 202, 0, 83, 0, 182, 73, 0,
651, 83, 0, 0, 0, 82, 346, 347, 242, 280,
0, 0, 0, 0, 0, 0, 83, 80, 80, 0,
0, 0, 0, 0, 293, 294, 0, 0, 73, 0,
80, 215, 82, 73, 0, 254, 83, 83, 511, 245,
73, 298, 299, 300, 301, 302, 303, 304, 305, 254,
0, 0, 452, 0, 0, 0, 71, 0, 80, 0,
0, 0, 0, 80, 83, 0, 0, 83, 82, 0,
0, 0, 0, 0, 83, 83, 83, 0, 0, 0,
403, 404, 405, 406, 71, 408, 409, 0, 0, 71,
80, 80, 80, 80, 80, 80, 80, 80, 0, 0,
182, 182, 80, 253, 0, 0, 0, 83, 0, 0,
0, 0, 0, 0, 0, 0, 71, 0, 0, 0,
0, 71, 0, 0, 0, 0, 83, 0, 71, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 474, 0, 0, 0, 0, 0, 0, 0,
0, 0, 80, 80, 0, 0, 83, 0, 0, 83,
0, 83, 0, 80, 0, 0, 0, 80, 83, 0,
0, 82, 82, 0, 182, 182, 182, 182, 71, 182,
182, 0, 0, 0, 82, 0, 0, 0, 0, 71,
0, 0, 0, 71, 0, 381, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 80, 0, 0, 0,
0, 0, 82, 0, 0, 0, 0, 82, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 71, 0, 0, 0, 182, 0, 0, 0,
0, 0, 0, 0, 82, 82, 82, 82, 82, 82,
82, 82, 0, 0, 0, 0, 82, 254, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 583, 0, 0, 473,
0, 0, 0, 0, 0, 0, 0, 80, 80, 0,
500, 0, 0, 0, 503, 0, 82, 82, 0, 80,
0, 0, 0, 0, 0, 0, 0, 82, 0, 0,
0, 82, 0, 80, 71, 0, 0, 0, 0, 0,
0, 0, 0, 0, 621, 71, 0, 0, 0, 0,
0, 0, 0, 546, 0, 80, 0, 0, 0, 71,
0, 0, 0, 0, 0, 0, 0, 0, 0, 633,
82, 0, 280, 281, 282, 283, 284, 285, 286, 287,
80, 289, 290, 0, 0, 0, 0, 293, 294, 0,
182, 0, 0, 0, 201, 80, 0, 0, 0, 0,
0, 0, 296, 297, 298, 299, 300, 301, 302, 303,
304, 305, 0, 0, 0, 80, 80, 0, 0, 0,
198, 71, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 672, 0, 0, 182, 667,
0, 71, 71, 80, 0, 584, 80, 0, 0, 0,
0, 0, 0, 80, 80, 80, 591, 0, 210, 210,
0, 82, 82, 182, 0, 665, 0, 0, 0, 71,
606, 0, 0, 82, 0, 0, 0, 197, 0, 71,
71, 71, 0, 0, 0, 0, 80, 82, 0, 233,
235, 0, 0, 210, 210, 0, 0, 261, 262, 0,
0, 0, 0, 0, 0, 80, 0, 0, 0, 82,
0, 0, 71, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 182,
0, 71, 640, 0, 82, 80, 0, 0, 0, 0,
80, 0, 0, 0, 0, 0, 0, 80, 202, 82,
0, 0, 648, 649, 0, 0, 0, 0, 0, 0,
0, 71, 0, 0, 0, 0, 71, 0, 0, 82,
82, 0, 0, 71, 0, 0, 0, 0, 0, 0,
670, 0, 0, 0, 0, 0, 0, 0, 0, 0,
676, 677, 678, 668, 0, 0, 0, 82, 0, 0,
82, 0, 0, 0, 0, 0, 0, 82, 82, 82,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 692, 246, 250, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
82, 0, 703, 0, 0, 353, 354, 261, 210, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 82,
210, 0, 210, 0, 0, 210, 0, 0, 0, 0,
0, 0, 717, 0, 0, 0, 0, 723, 0, 0,
0, 387, 0, 0, 724, 0, 0, 0, 0, 82,
0, 0, 0, 0, 82, 0, 0, 0, 0, 0,
0, 82, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 413, 0, 0, 0, 0, 421,
423, 424, 425, 426, 427, 428, 429, 430, 431, 432,
433, 434, 435, 436, 437, 438, 439, 440, 441, 442,
443, 444, 445, 446, 447, 448, 0, 0, 210, 0,
0, 335, 0, 0, 0, 0, 0, 468, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 493, 0, 0, 0, 0, 0, 413,
502, 0, 0, 493, 360, 0, 0, 0, 0, 360,
0, 210, 0, 372, 0, 0, 0, 523, 526, 0,
0, 0, 0, 210, 534, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 545,
0, 0, 0, 0, 0, 0, 0, 0, 0, -416,
552, 0, 0, 534, 0, 552, 0, -416, -416, -416,
0, 210, -416, -416, -416, 0, -416, 0, 0, 0,
0, 561, 0, 0, 0, 0, -416, 0, 0, 0,
0, 0, 0, 0, 0, -416, -416, 0, -416, -416,
-416, -416, -416, 0, 0, 0, 0, 0, 0, 246,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 496, 499, 0, 581, 0, 0,
0, 0, 0, 0, 0, -416, 0, 0, 0, 0,
0, 0, 246, 0, 360, 0, 0, 0, 0, 0,
0, 0, 0, 0, 246, 0, 0, 0, 0, 0,
0, 360, -416, -416, -416, 615, 0, -416, 0, 222,
-416, -416, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 622, 0, 0, 0, 0, 0,
0, 0, 246, 626, 0, 0, 0, 0, 526, 0,
0, 560, 0, 0, 0, 0, 0, 0, 0, 0,
635, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 642, 0, 643, 644, 0, 0, 645, 646,
0, 0, 0, 280, 281, 282, 283, 284, 285, 286,
287, 288, 289, 290, 291, 292, 0, 654, 293, 294,
573, 0, 0, 0, 573, 573, 560, 560, 0, 0,
0, 295, 552, 296, 297, 298, 299, 300, 301, 302,
303, 304, 305, 0, 0, 0, 552, 595, 0, 595,
595, 0, 0, 534, 0, 229, 605, 0, 0, 609,
0, 499, 0, 0, 499, 0, 0, 0, 0, 0,
0, 688, 0, 0, 0, 0, 0, 689, 573, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 360,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 705, 0, 0, 0, 0,
0, 712, 0, 0, 0, 0, 0, 0, 3, 4,
5, 0, 7, 0, 0, 0, 8, 9, 0, 0,
0, 10, 210, 11, 12, 13, 14, 15, 16, 17,
0, 0, 0, 0, 193, 194, 195, 21, 22, 23,
24, 0, 335, 0, 0, 0, 0, 0, 0, 0,
196, 0, 0, 30, 31, 32, 33, 34, 35, 36,
37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
47, 48, 0, 360, 0, 0, 0, 360, 0, 0,
0, 573, 573, 0, 0, 0, 0, 0, 0, 0,
0, 0, 51, 0, 0, 52, 53, 54, 55, 0,
56, 0, 0, 0, 0, 0, 638, 499, 0, 595,
595, 0, 0, 0, 595, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 499, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 609, 0, 0, 0, 0,
0, 0, 0, 246, 335, 0, 0, 0, 0, 0,
0, 0, 0, 360, 0, 0, 0, 595, 335, 0,
0, 0, 0, 0, 499, 0, 0, 0, 0, 499,
0, -416, 2, 609, 3, 4, 5, 6, 7, 0,
0, 0, 8, 9, 0, 0, 0, 10, 0, 11,
12, 13, 14, 15, 16, 17, 0, 0, 0, 0,
18, 19, 20, 21, 22, 23, 24, 0, 0, 25,
0, 0, 0, 0, 0, 26, 27, 28, 29, 30,
31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 51, -234,
0, 52, 53, 54, 55, 0, 56, -234, -234, -234,
0, 0, -234, -234, -234, 0, -234, 0, 0, 0,
57, 58, 0, 0, 0, 0, -234, -234, 0, 0,
0, 0, -416, -416, 0, -234, -234, 0, -234, -234,
-234, -234, -234, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, -234, -234,
-234, -234, -234, -234, -234, -234, -234, -234, -234, -234,
-234, 0, 0, -234, -234, -234, 0, 0, -234, 0,
0, 0, 0, 0, 0, 0, -234, -234, -234, -234,
-234, -234, -234, -234, -234, -234, -234, -234, 0, 0,
0, 0, -234, -234, -234, -234, -234, -234, -400, 0,
-234, -234, 0, 0, 0, 0, -400, -400, -400, 0,
0, -400, -400, -400, 0, -400, 0, 280,-32768,-32768,
-32768,-32768, 285, 286, -400, -400,-32768,-32768, 0, 0,
0, 0, 293, 294, -400, -400, 0, -400, -400, -400,
-400, -400, 0, 0, 0, 0, 0, 296, 297, 298,
299, 300, 301, 302, 303, 304, 305, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, -400, -400, -400,
-400, -400, -400, -400, -400, -400, -400, -400, -400, -400,
0, 0, -400, -400, -400, 0, 565, 0, 0, 0,
0, 0, 0, 0, -67, -400, 0, -400, -400, -400,
-400, -400, -400, -400, -400, -400, -400, 0, 0, 0,
-400, -400, -400, -400, -61, -400, 0, 0, 0, -400,
-400, 2, 0, 3, 4, 5, 6, 7, -416, -416,
-416, 8, 9, 0, 0, -416, 10, 0, 11, 12,
13, 14, 15, 16, 17, 0, 0, 0, 0, 18,
19, 20, 21, 22, 23, 24, 0, 0, 25, 0,
0, 0, 0, 0, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
42, 43, 44, 45, 46, 47, 48, 49, 50, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 51, 0, 0,
52, 53, 54, 55, 0, 56, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 57,
58, 0, 0, 0, 2, 0, 3, 4, 5, 6,
7, -416, -416, -416, 8, 9, 0, -416, -416, 10,
0, 11, 12, 13, 14, 15, 16, 17, 0, 0,
0, 0, 18, 19, 20, 21, 22, 23, 24, 0,
0, 25, 0, 0, 0, 0, 0, 26, 27, 28,
29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
49, 50, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
51, 0, 0, 52, 53, 54, 55, 0, 56, 0,
2, 0, 3, 4, 5, 6, 7, 0, 0, -416,
8, 9, 57, 58, -416, 10, -416, 11, 12, 13,
14, 15, 16, 17, -416, -416, 0, 0, 18, 19,
20, 21, 22, 23, 24, 0, 0, 25, 0, 0,
0, 0, 0, 26, 27, 28, 29, 30, 31, 32,
33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
43, 44, 45, 46, 47, 48, 49, 50, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 51, 0, 0, 52,
53, 54, 55, 0, 56, 0, 2, 0, 3, 4,
5, 6, 7, 0, 0, -416, 8, 9, 57, 58,
-416, 10, 0, 11, 12, 13, 14, 15, 16, 17,
-416, -416, 0, 0, 18, 19, 20, 21, 22, 23,
24, 0, 0, 25, 0, 0, 0, 0, 0, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
47, 48, 49, 50, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 51, 0, 0, 52, 53, 54, 55, 0,
56, 2, 0, 3, 4, 5, 6, 7, 0, -416,
-416, 8, 9, 0, 57, 58, 10, 0, 11, 12,
13, 14, 15, 16, 17, 0, -416, -416, 0, 18,
19, 20, 21, 22, 23, 24, 0, 0, 25, 0,
0, 0, 0, 0, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
42, 43, 44, 45, 46, 47, 48, 49, 50, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 51, 0, 0,
52, 53, 54, 55, 0, 56, 2, 0, 3, 4,
5, 6, 7, 0, 0, 0, 8, 9, 0, 57,
58, 10, 0, 11, 12, 13, 14, 15, 16, 17,
0, -416, -416, 0, 18, 19, 20, 21, 22, 23,
24, 0, 0, 25, 0, 0, 0, 0, 0, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
47, 48, 49, 50, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 51, 0, 0, 237, 53, 54, 55, 0,
56, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 57, 58, 0, 0, 0, 2,
-416, 3, 4, 5, 6, 7, -416, -416, 0, 8,
9, 0, 0, 0, 10, 0, 11, 12, 13, 14,
15, 16, 17, 0, 0, 0, 0, 18, 19, 20,
21, 22, 23, 24, 0, 0, 25, 0, 0, 0,
0, 0, 26, 27, 28, 29, 30, 31, 32, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47, 48, 49, 50, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 51, 0, 0, 52, 53,
54, 55, 0, 56, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 57, 58, 0,
0, 0, 2, -416, 3, 4, 5, 6, 7, -416,
-416, 0, 8, 9, 0, 0, 0, 10, 0, 11,
12, 13, 14, 15, 16, 17, 0, 0, 0, 0,
18, 19, 20, 21, 22, 23, 24, 0, 0, 25,
0, 0, 0, 0, 0, 26, 27, 28, 29, 30,
31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 51, 0,
0, 52, 53, 54, 55, 0, 56, 0, 2, 0,
3, 4, 5, 6, 7, 0, 0, -416, 8, 9,
57, 58, 0, 10, -416, 11, 12, 13, 14, 15,
16, 17, -416, -416, 0, 0, 18, 19, 20, 21,
22, 23, 24, 0, 0, 25, 0, 0, 0, 0,
0, 26, 27, 28, 29, 30, 31, 32, 33, 34,
35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 51, 0, 0, 52, 53, 54,
55, 0, 56, 0, 0, 3, 4, 5, 6, 7,
0, 0, 0, 8, 9, 0, 57, 58, 10, 0,
11, 12, 13, 14, 15, 16, 17, 0, -416, -416,
0, 18, 19, 20, 21, 22, 23, 24, 0, 0,
25, 0, 0, 0, 0, 0, 26, 27, 28, 29,
30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
50, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 51,
0, 0, 52, 53, 54, 55, 0, 56, 0, 0,
3, 4, 5, 0, 7, 0, 0, 0, 8, 9,
0, 57, 58, 10, 0, 11, 12, 13, 14, 15,
16, 17, 0, 0, 345, 0, 18, 19, 20, 21,
22, 23, 24, 0, 0, 25, 0, 0, 0, 0,
0, 0, 27, 0, 0, 30, 31, 32, 33, 34,
35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 51, 0, 0, 52, 53, 54,
55, 0, 56, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 57, 58, 0, 0,
91, 92, 93, 94, 95, 96, 97, 98, 185, 186,
99, 100, 101, 102, 103, 0, 0, 104, 105, 106,
107, 108, 109, 110, 0, 0, 111, 112, 113, 114,
115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
125, 126, 127, 128, 129, 130, 131, 132, 133, 34,
35, 134, 37, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 135, 136, 137, 138, 139, 140,
0, 141, 142, 0, 0, 143, 0, 0, 0, 144,
145, 146, 147, 0, 0, 0, 0, 0, 0, 0,
148, 0, 0, 0, 0, 0, 149, 150, 151, 152,
153, 154, 155, 156, 157, 158, 0, 159, 0, 0,
-393, -393, -393, 0, -393, 0, 160, 161, -393, -393,
0, 0, 0, -393, 0, -393, -393, -393, -393, -393,
-393, -393, 0, -393, 0, 0, -393, -393, -393, -393,
-393, -393, -393, 0, 0, 0, 0, 0, 0, 0,
0, 0, -393, 0, 0, -393, -393, -393, -393, -393,
-393, -393, -393, -393, -393, -393, -393, -393, -393, -393,
-393, -393, -393, -393, -393, -393, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -393, 0, 0, -393, -393, -393,
-393, -393, -393, 0, 0, -394, -394, -394, 0, -394,
0, 0, 0, -394, -394, 0, -393, -393, -394, -393,
-394, -394, -394, -394, -394, -394, -394, -393, -394, 0,
0, -394, -394, -394, -394, -394, -394, -394, 0, 0,
0, 0, 0, 0, 0, 0, 0, -394, 0, 0,
-394, -394, -394, -394, -394, -394, -394, -394, -394, -394,
-394, -394, -394, -394, -394, -394, -394, -394, -394, -394,
-394, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, -394,
0, 0, -394, -394, -394, -394, -394, -394, 0, 0,
-396, -396, -396, 0, -396, 0, 0, 0, -396, -396,
0, -394, -394, -396, -394, -396, -396, -396, -396, -396,
-396, -396, -394, 0, 0, 0, -396, -396, -396, -396,
-396, -396, -396, 0, 0, 0, 0, 0, 0, 0,
0, 0, -396, 0, 0, -396, -396, -396, -396, -396,
-396, -396, -396, -396, -396, -396, -396, -396, -396, -396,
-396, -396, -396, -396, -396, -396, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -396, 565, 0, -396, -396, -396,
-396, -396, -396, -67, 0, 3, 4, 5, 0, 7,
0, 0, 0, 8, 9, 0, -396, -396, 10, 0,
11, 12, 13, 14, 15, 16, 17, -396, 0, 0,
0, 193, 19, 20, 21, 22, 23, 24, 0, 0,
0, 0, 0, 0, 0, 0, 0, 27, 0, 0,
30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
50, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 51,
0, 0, 204, 53, 54, 205, 206, 56, 0, 0,
3, 4, 5, 0, 7, 0, 0, 0, 8, 9,
0, 207, 58, 10, 0, 11, 12, 13, 14, 15,
16, 17, 208, 0, 0, 0, 193, 19, 20, 21,
22, 23, 24, 0, 0, 0, 0, 0, 0, 0,
0, 0, 27, 0, 0, 30, 31, 32, 33, 34,
35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 51, 0, 0, 204, 53, 54,
205, 206, 56, 0, 0, -213, -213, -213, 0, -213,
0, 0, 0, -213, -213, 0, 207, 58, -213, 0,
-213, -213, -213, -213, -213, -213, -213, 220, 0, 0,
0, -213, -213, -213, -213, -213, -213, -213, 0, 0,
0, 0, 0, 0, 0, 0, 0, -213, 0, 0,
-213, -213, -213, -213, -213, -213, -213, -213, -213, -213,
-213, -213, -213, -213, -213, -213, -213, -213, -213, -213,
-213, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, -213,
0, 0, -213, -213, -213, -213, -213, -213, 0, 0,
-398, -398, -398, 0, -398, 0, 0, 0, -398, -398,
0, -213, -213, -398, 0, -398, -398, -398, -398, -398,
-398, -398, 222, 0, 0, 0, -398, -398, -398, -398,
-398, -398, -398, 0, 0, 0, 0, 0, 0, 0,
0, 0, -398, 0, 0, -398, -398, -398, -398, -398,
-398, -398, -398, -398, -398, -398, -398, -398, -398, -398,
-398, -398, -398, -398, -398, -398, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -398, 0, 0, -398, -398, -398,
-398, -398, -398, 0, 0, -397, -397, -397, 0, -397,
0, 0, 0, -397, -397, 0, -398, -398, -397, 0,
-397, -397, -397, -397, -397, -397, -397, -398, 0, 0,
0, -397, -397, -397, -397, -397, -397, -397, 0, 0,
0, 0, 0, 0, 0, 0, 0, -397, 0, 0,
-397, -397, -397, -397, -397, -397, -397, -397, -397, -397,
-397, -397, -397, -397, -397, -397, -397, -397, -397, -397,
-397, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, -397,
0, 0, -397, -397, -397, -397, -397, -397, 0, 0,
-399, -399, -399, 0, -399, 0, 0, 0, -399, -399,
0, -397, -397, -399, 0, -399, -399, -399, -399, -399,
-399, -399, -397, 0, 0, 0, -399, -399, -399, -399,
-399, -399, -399, 0, 0, 0, 0, 0, 0, 0,
0, 0, -399, 0, 0, -399, -399, -399, -399, -399,
-399, -399, -399, -399, -399, -399, -399, -399, -399, -399,
-399, -399, -399, -399, -399, -399, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -399, 0, 0, -399, -399, -399,
-399, -399, -399, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, -399, -399, 91, 92,
93, 94, 95, 96, 97, 98, 0, -399, 99, 100,
101, 102, 103, 0, 0, 104, 105, 106, 107, 108,
109, 110, 0, 0, 111, 112, 113, 168, 169, 170,
171, 118, 119, 120, 121, 122, 123, 124, 125, 126,
127, 128, 129, 172, 173, 174, 133, 255, 256, 175,
257, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 135, 136, 137, 138, 139, 140, 0, 141,
142, 0, 0, 143, 0, 0, 0, 144, 145, 146,
147, 0, 0, 0, 0, 0, 0, 0, 148, 0,
0, 0, 0, 0, 149, 150, 151, 152, 153, 154,
155, 156, 157, 158, 0, 159, 91, 92, 93, 94,
95, 96, 97, 98, 160, 0, 99, 100, 101, 102,
103, 0, 0, 104, 105, 106, 107, 108, 109, 110,
0, 0, 111, 112, 113, 168, 169, 170, 171, 118,
119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
129, 172, 173, 174, 133, 227, 0, 175, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
135, 136, 137, 138, 139, 140, 0, 141, 142, 0,
0, 143, 0, 0, 0, 144, 145, 146, 147, 0,
0, 0, 0, 0, 0, 0, 148, 0, 56, 0,
0, 0, 149, 150, 151, 152, 153, 154, 155, 156,
157, 158, 0, 159, 91, 92, 93, 94, 95, 96,
97, 98, 160, 0, 99, 100, 101, 102, 103, 0,
0, 104, 105, 106, 107, 108, 109, 110, 0, 0,
111, 112, 113, 168, 169, 170, 171, 118, 119, 120,
121, 122, 123, 124, 125, 126, 127, 128, 129, 172,
173, 174, 133, 0, 0, 175, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 135, 136,
137, 138, 139, 140, 0, 141, 142, 0, 0, 143,
0, 0, 0, 144, 145, 146, 147, 0, 0, 0,
0, 0, 0, 0, 148, 0, 56, 0, 0, 0,
149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
0, 159, 91, 92, 93, 94, 95, 96, 97, 98,
160, 0, 99, 100, 101, 102, 103, 0, 0, 104,
105, 106, 107, 108, 109, 110, 0, 0, 111, 112,
113, 168, 169, 170, 171, 118, 119, 120, 121, 122,
123, 124, 125, 126, 127, 128, 129, 172, 173, 174,
133, 0, 0, 175, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 135, 136, 137, 138,
139, 140, 0, 141, 142, 0, 0, 143, 0, 0,
0, 144, 145, 146, 147, 0, 0, 0, 0, 0,
0, 0, 148, 0, 0, 0, 0, 0, 149, 150,
151, 152, 153, 154, 155, 156, 157, 158, 0, 159,
0, 3, 4, 5, 0, 7, 0, 0, 160, 8,
9, 0, 0, 0, 10, 0, 11, 12, 13, 14,
15, 16, 17, 0, 0, 0, 0, 193, 19, 20,
21, 22, 23, 24, 0, 0, 0, 0, 0, 0,
0, 0, 0, 27, 0, 0, 30, 31, 32, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47, 48, 49, 50, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 51, 0, 0, 204, 53,
54, 205, 206, 56, 0, 0, 0, 0, 0, 0,
0, 3, 4, 5, 0, 7, 0, 207, 58, 8,
9, 0, 0, 355, 10, 0, 11, 12, 13, 14,
15, 16, 17, 0, 0, 0, 0, 193, 19, 20,
21, 22, 23, 24, 0, 0, 0, 0, 0, 0,
0, 0, 0, 27, 0, 0, 30, 31, 32, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47, 48, 49, 50, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 51, 0, 0, 204, 53,
54, 205, 206, 56, 0, 0, 0, 0, 0, 0,
0, 3, 4, 5, 6, 7, 0, 207, 58, 8,
9, 0, 0, 366, 10, 0, 11, 12, 13, 14,
15, 16, 17, 0, 0, 0, 0, 18, 19, 20,
21, 22, 23, 24, 0, 0, 25, 0, 0, 0,
0, 0, 26, 27, 28, 29, 30, 31, 32, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47, 48, 49, 50, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 51, 0, 0, 52, 53,
54, 55, 0, 56, 0, 0, 3, 4, 5, 0,
7, 0, 0, 0, 8, 9, 0, 57, 58, 10,
0, 11, 12, 13, 14, 15, 16, 17, 0, 0,
0, 0, 18, 19, 20, 21, 22, 23, 24, 0,
0, 25, 0, 0, 0, 0, 0, 0, 27, 0,
0, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
49, 50, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
51, 0, 0, 52, 53, 54, 55, 0, 56, 0,
0, 3, 4, 5, 0, 7, 0, 0, 0, 8,
9, 0, 57, 58, 10, 0, 11, 12, 13, 14,
15, 16, 17, 0, 0, 0, 0, 193, 19, 20,
21, 22, 23, 24, 0, 0, 0, 0, 0, 0,
0, 0, 0, 27, 0, 0, 30, 31, 32, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47, 48, 49, 50, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 51, 0, 0, 204, 53,
54, 205, 206, 56, 0, 0, 3, 4, 5, 0,
7, 0, 0, 0, 8, 9, 0, 207, 58, 10,
0, 11, 12, 13, 14, 15, 16, 17, 0, 0,
0, 0, 193, 19, 20, 21, 22, 23, 24, 0,
0, 0, 0, 0, 0, 0, 0, 0, 27, 0,
0, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
49, 50, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
51, 0, 0, 204, 53, 54, 524, 206, 56, 0,
0, 3, 4, 5, 0, 7, 0, 0, 0, 8,
9, 0, 207, 58, 10, 0, 11, 12, 13, 14,
15, 16, 17, 0, 0, 0, 0, 193, 194, 195,
21, 22, 23, 24, 0, 0, 0, 0, 0, 0,
0, 0, 0, 27, 0, 0, 30, 31, 32, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47, 48, 49, 50, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 51, 0, 0, 204, 53,
54, 533, 206, 56, 0, 0, 3, 4, 5, 0,
7, 0, 0, 0, 8, 9, 0, 207, 58, 10,
0, 11, 12, 13, 14, 15, 16, 17, 0, 0,
0, 0, 193, 194, 195, 21, 22, 23, 24, 0,
0, 0, 0, 0, 0, 0, 0, 0, 27, 0,
0, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
49, 50, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
51, 0, 0, 204, 53, 54, 681, 206, 56, 0,
0, 3, 4, 5, 0, 7, 0, 0, 0, 8,
9, 0, 207, 58, 10, 0, 11, 12, 13, 14,
15, 16, 17, 0, 0, 0, 0, 193, 19, 20,
21, 22, 23, 24, 0, 0, 0, 0, 0, 0,
0, 0, 0, 27, 0, 0, 30, 31, 32, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47, 48, 49, 50, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 51, 0, 0, 204, 53,
54, 241, 0, 56, 0, 0, 3, 4, 5, 0,
7, 0, 0, 0, 8, 9, 0, 207, 58, 10,
0, 11, 12, 13, 14, 15, 16, 17, 0, 0,
0, 0, 193, 19, 20, 21, 22, 23, 24, 0,
0, 0, 0, 0, 0, 0, 0, 0, 27, 0,
0, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
49, 50, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
51, 0, 0, 204, 53, 54, 411, 0, 56, 0,
0, 3, 4, 5, 0, 7, 0, 0, 0, 8,
9, 0, 207, 58, 10, 0, 11, 12, 13, 14,
15, 16, 17, 0, 0, 0, 0, 193, 194, 195,
21, 22, 23, 24, 0, 0, 0, 0, 0, 0,
0, 0, 0, 27, 0, 0, 30, 31, 32, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47, 48, 49, 50, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 51, 0, 0, 204, 53,
54, 411, 0, 56, 0, 0, 3, 4, 5, 0,
7, 0, 0, 0, 8, 9, 0, 207, 58, 10,
0, 11, 12, 13, 14, 15, 16, 17, 0, 0,
0, 0, 193, 194, 195, 21, 22, 23, 24, 0,
0, 0, 0, 0, 0, 0, 0, 0, 27, 0,
0, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
49, 50, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
51, 0, 0, 204, 53, 54, 505, 0, 56, 0,
0, 3, 4, 5, 0, 7, 0, 0, 0, 8,
9, 0, 207, 58, 10, 0, 11, 12, 13, 14,
15, 16, 17, 0, 0, 0, 0, 193, 19, 20,
21, 22, 23, 24, 0, 0, 0, 0, 0, 0,
0, 0, 0, 27, 0, 0, 30, 31, 32, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47, 48, 49, 50, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 51, 0, 0, 204, 53,
54, 550, 0, 56, 0, 0, 3, 4, 5, 0,
7, 0, 0, 0, 8, 9, 0, 207, 58, 10,
0, 11, 12, 13, 14, 15, 16, 17, 0, 0,
0, 0, 193, 194, 195, 21, 22, 23, 24, 0,
0, 0, 0, 0, 0, 0, 0, 0, 27, 0,
0, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
49, 50, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
51, 0, 0, 204, 53, 54, 641, 0, 56, 0,
0, 3, 4, 5, 0, 7, 0, 0, 0, 8,
9, 0, 207, 58, 10, 0, 11, 12, 13, 14,
15, 16, 17, 0, 0, 0, 0, 193, 194, 195,
21, 22, 23, 24, 0, 0, 0, 0, 0, 0,
0, 0, 0, 27, 0, 0, 30, 31, 32, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47, 48, 49, 50, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 51, 0, 0, 204, 53,
54, 675, 0, 56, 0, 0, 3, 4, 5, 0,
7, 0, 0, 0, 8, 9, 0, 207, 58, 10,
0, 11, 12, 13, 14, 15, 16, 17, 0, 0,
0, 0, 193, 194, 195, 21, 22, 23, 24, 0,
0, 0, 0, 0, 0, 0, 0, 0, 27, 0,
0, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
49, 50, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
51, 0, 0, 204, 53, 54, 0, 0, 56, 0,
0, 3, 4, 5, 0, 7, 0, 0, 0, 8,
9, 0, 207, 58, 10, 0, 11, 12, 13, 14,
15, 16, 17, 0, 0, 0, 0, 193, 19, 20,
21, 22, 23, 24, 0, 0, 0, 0, 0, 0,
0, 0, 0, 27, 0, 0, 30, 31, 32, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47, 48, 49, 50, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 51, 0, 0, 204, 53,
54, 0, 0, 56, 0, 0, 3, 4, 5, 0,
7, 0, 0, 0, 8, 9, 0, 207, 58, 10,
0, 11, 12, 13, 14, 15, 16, 17, 0, 0,
0, 0, 193, 194, 195, 21, 22, 23, 24, 0,
0, 0, 0, 0, 0, 0, 0, 0, 196, 0,
0, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
51, 0, 0, 52, 53, 54, 55, 0, 56, 3,
4, 5, 0, 7, 0, 0, 0, 8, 9, 0,
0, 0, 10, 0, 11, 12, 13, 14, 15, 16,
17, 0, 0, 0, 0, 193, 194, 195, 21, 22,
23, 24, 0, 0, 0, 0, 0, 0, 0, 0,
0, 196, 0, 0, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
46, 47, 48, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 51, 0, 0, 276, 53, 54, 277,
0, 56, 3, 4, 5, 0, 7, 0, 0, 0,
8, 9, 0, 0, 0, 10, 0, 11, 12, 13,
14, 15, 16, 17, 0, 0, 0, 0, 193, 194,
195, 21, 22, 23, 24, 0, 0, 0, 0, 0,
0, 0, 0, 0, 196, 0, 0, 30, 31, 32,
33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
43, 44, 45, 46, 47, 48, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 449, 450,
0, 0, 451, 0, 0, 0, 51, 0, 0, 204,
53, 54, 0, 0, 56, 135, 136, 137, 138, 139,
140, 0, 141, 142, 0, 0, 143, 0, 0, 0,
144, 145, 146, 147, 0, 0, 0, 0, 0, 0,
0, 148, 0, 0, 0, 0, 0, 149, 150, 151,
152, 153, 154, 155, 156, 157, 158, 0, 159, 455,
456, 0, 0, 457, 0, 0, 0, 160, 0, 0,
0, 0, 0, 0, 0, 0, 135, 136, 137, 138,
139, 140, 0, 141, 142, 0, 0, 143, 0, 0,
0, 144, 145, 146, 147, 0, 0, 0, 0, 0,
0, 0, 148, 0, 0, 0, 0, 0, 149, 150,
151, 152, 153, 154, 155, 156, 157, 158, 0, 159,
461, 456, 0, 0, 462, 0, 0, 0, 160, 0,
0, 0, 0, 0, 0, 0, 0, 135, 136, 137,
138, 139, 140, 0, 141, 142, 0, 0, 143, 0,
0, 0, 144, 145, 146, 147, 0, 0, 0, 0,
0, 0, 0, 148, 0, 0, 0, 0, 0, 149,
150, 151, 152, 153, 154, 155, 156, 157, 158, 0,
159, 513, 450, 0, 0, 451, 0, 0, 0, 160,
0, 0, 0, 0, 0, 0, 0, 0, 135, 136,
137, 138, 139, 140, 0, 141, 142, 0, 0, 143,
0, 0, 0, 144, 145, 146, 147, 0, 0, 0,
0, 0, 0, 0, 148, 0, 0, 0, 0, 0,
149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
0, 159, 515, 456, 0, 0, 516, 0, 0, 0,
160, 0, 0, 0, 0, 0, 0, 0, 0, 135,
136, 137, 138, 139, 140, 0, 141, 142, 0, 0,
143, 0, 0, 0, 144, 145, 146, 147, 0, 0,
0, 0, 0, 0, 0, 148, 0, 0, 0, 0,
0, 149, 150, 151, 152, 153, 154, 155, 156, 157,
158, 0, 159, 529, 450, 0, 0, 451, 0, 0,
0, 160, 0, 0, 0, 0, 0, 0, 0, 0,
135, 136, 137, 138, 139, 140, 0, 141, 142, 0,
0, 143, 0, 0, 0, 144, 145, 146, 147, 0,
0, 0, 0, 0, 0, 0, 148, 0, 0, 0,
0, 0, 149, 150, 151, 152, 153, 154, 155, 156,
157, 158, 0, 159, 530, 456, 0, 0, 531, 0,
0, 0, 160, 0, 0, 0, 0, 0, 0, 0,
0, 135, 136, 137, 138, 139, 140, 0, 141, 142,
0, 0, 143, 0, 0, 0, 144, 145, 146, 147,
0, 0, 0, 0, 0, 0, 0, 148, 0, 0,
0, 0, 0, 149, 150, 151, 152, 153, 154, 155,
156, 157, 158, 0, 159, 553, 450, 0, 0, 451,
0, 0, 0, 160, 0, 0, 0, 0, 0, 0,
0, 0, 135, 136, 137, 138, 139, 140, 0, 141,
142, 0, 0, 143, 0, 0, 0, 144, 145, 146,
147, 0, 0, 0, 0, 0, 0, 0, 148, 0,
0, 0, 0, 0, 149, 150, 151, 152, 153, 154,
155, 156, 157, 158, 0, 159, 554, 456, 0, 0,
555, 0, 0, 0, 160, 0, 0, 0, 0, 0,
0, 0, 0, 135, 136, 137, 138, 139, 140, 0,
141, 142, 0, 0, 143, 0, 0, 0, 144, 145,
146, 147, 0, 0, 0, 0, 0, 0, 0, 148,
0, 0, 0, 0, 0, 149, 150, 151, 152, 153,
154, 155, 156, 157, 158, 0, 159, 718, 450, 0,
0, 451, 0, 0, 0, 160, 0, 0, 0, 0,
0, 0, 0, 0, 135, 136, 137, 138, 139, 140,
0, 141, 142, 0, 0, 143, 0, 0, 0, 144,
145, 146, 147, 0, 0, 0, 0, 0, 0, 0,
148, 0, 0, 0, 0, 0, 149, 150, 151, 152,
153, 154, 155, 156, 157, 158, 0, 159, 719, 456,
0, 0, 720, 0, 0, 0, 160, 0, 0, 0,
0, 0, 0, 0, 0, 135, 136, 137, 138, 139,
140, 0, 141, 142, 0, 0, 143, 0, 0, 0,
144, 145, 146, 147, 0, 0, 0, 0, 0, 0,
0, 148, 0, 0, 0, 0, 0, 149, 150, 151,
152, 153, 154, 155, 156, 157, 158, 0, 159, 0,
0, 0, 0, 0, 0, 0, 0, 160, 280, 281,
282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
292, 0, 0, 293, 294, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 295, 0, 296, 297,
298, 299, 300, 301, 302, 303, 304, 305, 0, 0,
0, 0, 0, 0, 0, 520, 280, 281, 282, 283,
284, 285, 286, 287, 288, 289, 290, 291, 292, 0,
0, 293, 294, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 295, 0, 296, 297, 298, 299,
300, 301, 302, 303, 304, 305, 0, 0, 0, 0,
0, 0, 0, -218, 280, 281, 282, 283, 284, 285,
286, 287, 288, 289, 290, 291, 292, 0, 0, 293,
294, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 295, 0, 296, 297, 298, 299, 300, 301,
302, 303, 304, 305, 0, 0, 0, 0, 0, 0,
0, -219, 280, 281, 282, 283, 284, 285, 286, 287,
288, 289, 290, 291, 292, 0, 0, 293, 294, 0,
0, 0, 357, 0, 0, 0, 0, 0, 0, 0,
295, 0, 296, 297, 298, 299, 300, 301, 302, 303,
304, 305, 280, 281, 282, 283, 284, 285, 286, 287,
288, 289, 290, 291, 292, 0, 0, 293, 294, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
295, 564, 296, 297, 298, 299, 300, 301, 302, 303,
304, 305, 280, 281, 282, 283, 284, 285, 286, 287,
288, 289, 290, 291, 292, 0, 0, 293, 294, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
295, 0, 296, 297, 298, 299, 300, 301, 302, 303,
304, 305, 280, 281, 282, 283, 284, 285, 286, 287,
288, 289, 290,-32768,-32768, 0, 0, 293, 294, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 296, 297, 298, 299, 300, 301, 302, 303,
304, 305, 280, 281, 282, 283, 284, 285, 286, 0,
0, 289, 290, 0, 0, 0, 0, 293, 294, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 296, 297, 298, 299, 300, 301, 302, 303,
304, 305
};
static const short yycheck[] =
{
1, 2, 18, 19, 83, 328, 7, 8, 9, 10,
342, 184, 13, 222, 20, 2, 6, 18, 19, 308,
347, 26, 218, 52, 25, 5, 196, 5, 6, 53,
364, 334, 55, 57, 358, 60, 26, 19, 591, 593,
364, 25, 596, 463, 464, 1, 306, 307, 26, 309,
310, 52, 53, 26, 55, 596, 57, 488, 489, 393,
53, 54, 351, 13, 121, 13, 4, 26, 69, 13,
77, 50, 242, 13, 363, 112, 56, 83, 56, 13,
237, 26, 694, 86, 36, 37, 116, 88, 36, 37,
350, 121, 25, 15, 101, 17, 88, 10, 86, 50,
27, 361, 362, 54, 96, 36, 37, 18, 19, 36,
37, 114, 401, 51, 93, 94, 116, 101, 121, 276,
732, 121, 25, 383, 116, 96, 114, 86, 1, 2,
88, 28, 116, 84, 7, 8, 9, 10, 96, 112,
400, 695, 25, 54, 100, 18, 19, 60, 116, 25,
703, 116, 25, 112, 695, 114, 121, 353, 117, 482,
8, 120, 187, 115, 717, 121, 122, 112, 101, 25,
120, 121, 122, 121, 122, 120, 89, 121, 122, 52,
53, 121, 122, 116, 57, 121, 122, 121, 122, 195,
191, 192, 208, 96, 121, 122, 520, 203, 101, 369,
503, 371, 86, 204, 220, 25, 222, 208, 237, 225,
630, 631, 115, 116, 538, 88, 86, 387, 101, 220,
96, 222, 25, 116, 225, 101, 208, 658, 659, 86,
114, 232, 663, 116, 88, 96, 237, 120, 220, 115,
116, 96, 96, 88, 114, 101, 96, 276, 36, 37,
274, 96, 36, 37, 277, 279, 17, 114, 86, 86,
116, 120, 116, 264, 265, 266, 267, 268, 269, 270,
271, 116, 86, 274, 187, 276, 277, 264, 279, 539,
540, 101, 269, 69, 308, 716, 114, 114, 86, 623,
117, 122, 58, 52, 621, 61, 116, 208, 101, 623,
114, 14, 15, 117, 474, 64, 65, 308, 245, 220,
247, 222, 249, 116, 225, 308, 114, 86, 191, 192,
106, 107, 108, 86, 120, 326, 327, 351, 306, 538,
120, 204, 528, 121, 507, 208, 337, 121, 122, 363,
341, 664, 358, 222, 676, 114, 225, 220, 117, 222,
351, 114, 225, 656, 117, 115, 116, 358, 351, 232,
86, 88, 363, 274, 237, 358, 390, 88, 279, 96,
363, 349, 377, 676, 453, 96, 25, 401, 88, 380,
459, 551, 88, 361, 463, 464, 96, 377, 114, 390,
96, 264, 265, 266, 267, 268, 269, 270, 271, 377,
401, 274, 116, 276, 382, 116, 279, 69, 401, 322,
116, 86, 86, 702, 50, 120, 52, 53, 54, 55,
590, 399, 333, 86, 112, 728, 622, 69, 339, 88,
626, 604, 343, 346, 347, 308, 115, 96, 86, 114,
114, 701, 104, 105, 106, 107, 108, 453, 86, 86,
115, 114, 50, 326, 327, 86, 54, 93, 94, 629,
86, 465, 466, 115, 337, 635, 114, 118, 341, 117,
471, 472, 113, 116, 15, 10, 114, 114, 351, 117,
117, 13, 483, 114, 120, 358, 117, 492, 114, 116,
363, 117, 88, 8, 9, 10, 497, 1, 2, 672,
96, 5, 492, 7, 8, 9, 10, 380, 514, 13,
25, 491, 115, 491, 492, 115, 712, 390, 519, 113,
116, 25, 538, 1, 2, 69, 115, 115, 401, 7,
116, 69, 116, 115, 10, 13, 96, 538, 118, 50,
84, 85, 50, 544, 116, 538, 84, 85, 52, 116,
50, 55, 52, 53, 54, 55, 469, 558, 559, 103,
104, 105, 106, 107, 108, 69, 104, 105, 106, 107,
108, 484, 89, 88, 52, 9, 116, 116, 579, 580,
10, 118, 116, 116, 88, 94, 115, 8, 9, 10,
118, 115, 13, 93, 94, 113, 118, 10, 471, 472,
94, 115, 603, 10, 25, 10, 607, 10, 101, 610,
483, 39, 40, 41, 42, 43, 617, 618, 619, 10,
115, 10, 113, 10, 497, 10, 116, 115, 10, 10,
10, 118, 10, 69, 1, 0, 0, 723, 558, 279,
7, 482, 75, 5, 664, 60, 519, 593, -1, 650,
593, 1, 2, -1, -1, -1, -1, 7, 8, 9,
10, -1, -1, 13, -1, 538, -1, 88, 669, -1,
583, 544, -1, -1, -1, 25, 191, 192, 702, 69,
-1, -1, -1, -1, -1, -1, 559, 191, 192, -1,
-1, -1, -1, -1, 84, 85, -1, -1, 699, -1,
204, 702, 52, 704, -1, 55, 579, 580, 621, 702,
711, 101, 102, 103, 104, 105, 106, 107, 108, 69,
-1, -1, 700, -1, -1, -1, 204, -1, 232, -1,
-1, -1, -1, 237, 607, -1, -1, 610, 88, -1,
-1, -1, -1, -1, 617, 618, 619, -1, -1, -1,
265, 266, 267, 268, 232, 270, 271, -1, -1, 237,
264, 265, 266, 267, 268, 269, 270, 271, -1, -1,
191, 192, 276, 277, -1, -1, -1, 650, -1, -1,
-1, -1, -1, -1, -1, -1, 264, -1, -1, -1,
-1, 269, -1, -1, -1, -1, 669, -1, 276, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 327, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 326, 327, -1, -1, 699, -1, -1, 702,
-1, 704, -1, 337, -1, -1, -1, 341, 711, -1,
-1, 191, 192, -1, 265, 266, 267, 268, 326, 270,
271, -1, -1, -1, 204, -1, -1, -1, -1, 337,
-1, -1, -1, 341, -1, 232, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 380, -1, -1, -1,
-1, -1, 232, -1, -1, -1, -1, 237, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 380, -1, -1, -1, 327, -1, -1, -1,
-1, -1, -1, -1, 264, 265, 266, 267, 268, 269,
270, 271, -1, -1, -1, -1, 276, 277, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 471, -1, -1, 326,
-1, -1, -1, -1, -1, -1, -1, 471, 472, -1,
337, -1, -1, -1, 341, -1, 326, 327, -1, 483,
-1, -1, -1, -1, -1, -1, -1, 337, -1, -1,
-1, 341, -1, 497, 472, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 519, 483, -1, -1, -1, -1,
-1, -1, -1, 380, -1, 519, -1, -1, -1, 497,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 544,
380, -1, 69, 70, 71, 72, 73, 74, 75, 76,
544, 78, 79, -1, -1, -1, -1, 84, 85, -1,
471, -1, -1, -1, 558, 559, -1, -1, -1, -1,
-1, -1, 99, 100, 101, 102, 103, 104, 105, 106,
107, 108, -1, -1, -1, 579, 580, -1, -1, -1,
558, 559, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 610, -1, -1, 519, 603,
-1, 579, 580, 607, -1, 472, 610, -1, -1, -1,
-1, -1, -1, 617, 618, 619, 483, -1, 18, 19,
-1, 471, 472, 544, -1, 603, -1, -1, -1, 607,
497, -1, -1, 483, -1, -1, -1, 558, -1, 617,
618, 619, -1, -1, -1, -1, 650, 497, -1, 49,
50, -1, -1, 53, 54, -1, -1, 57, 58, -1,
-1, -1, -1, -1, -1, 669, -1, -1, -1, 519,
-1, -1, 650, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 610,
-1, 669, 559, -1, 544, 699, -1, -1, -1, -1,
704, -1, -1, -1, -1, -1, -1, 711, 558, 559,
-1, -1, 579, 580, -1, -1, -1, -1, -1, -1,
-1, 699, -1, -1, -1, -1, 704, -1, -1, 579,
580, -1, -1, 711, -1, -1, -1, -1, -1, -1,
607, -1, -1, -1, -1, -1, -1, -1, -1, -1,
617, 618, 619, 603, -1, -1, -1, 607, -1, -1,
610, -1, -1, -1, -1, -1, -1, 617, 618, 619,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 650, 53, 54, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
650, -1, 669, -1, -1, 205, 206, 207, 208, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 669,
220, -1, 222, -1, -1, 225, -1, -1, -1, -1,
-1, -1, 699, -1, -1, -1, -1, 704, -1, -1,
-1, 241, -1, -1, 711, -1, -1, -1, -1, 699,
-1, -1, -1, -1, 704, -1, -1, -1, -1, -1,
-1, 711, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 274, -1, -1, -1, -1, 279,
280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
300, 301, 302, 303, 304, 305, -1, -1, 308, -1,
-1, 180, -1, -1, -1, -1, -1, 317, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 333, -1, -1, -1, -1, -1, 339,
340, -1, -1, 343, 213, -1, -1, -1, -1, 218,
-1, 351, -1, 222, -1, -1, -1, 357, 358, -1,
-1, -1, -1, 363, 364, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 379,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
390, -1, -1, 393, -1, 395, -1, 8, 9, 10,
-1, 401, 13, 14, 15, -1, 17, -1, -1, -1,
-1, 411, -1, -1, -1, -1, 27, -1, -1, -1,
-1, -1, -1, -1, -1, 36, 37, -1, 39, 40,
41, 42, 43, -1, -1, -1, -1, -1, -1, 308,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 333, 334, -1, 467, -1, -1,
-1, -1, -1, -1, -1, 86, -1, -1, -1, -1,
-1, -1, 351, -1, 353, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 363, -1, -1, -1, -1, -1,
-1, 370, 113, 114, 115, 505, -1, 118, -1, 120,
121, 122, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 524, -1, -1, -1, -1, -1,
-1, -1, 401, 533, -1, -1, -1, -1, 538, -1,
-1, 410, -1, -1, -1, -1, -1, -1, -1, -1,
550, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 562, -1, 564, 565, -1, -1, 568, 569,
-1, -1, -1, 69, 70, 71, 72, 73, 74, 75,
76, 77, 78, 79, 80, 81, -1, 587, 84, 85,
459, -1, -1, -1, 463, 464, 465, 466, -1, -1,
-1, 97, 602, 99, 100, 101, 102, 103, 104, 105,
106, 107, 108, -1, -1, -1, 616, 486, -1, 488,
489, -1, -1, 623, -1, 121, 495, -1, -1, 498,
-1, 500, -1, -1, 503, -1, -1, -1, -1, -1,
-1, 641, -1, -1, -1, -1, -1, 647, 517, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 528,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 675, -1, -1, -1, -1,
-1, 681, -1, -1, -1, -1, -1, -1, 3, 4,
5, -1, 7, -1, -1, -1, 11, 12, -1, -1,
-1, 16, 702, 18, 19, 20, 21, 22, 23, 24,
-1, -1, -1, -1, 29, 30, 31, 32, 33, 34,
35, -1, 591, -1, -1, -1, -1, -1, -1, -1,
45, -1, -1, 48, 49, 50, 51, 52, 53, 54,
55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
65, 66, -1, 622, -1, -1, -1, 626, -1, -1,
-1, 630, 631, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 87, -1, -1, 90, 91, 92, 93, -1,
95, -1, -1, -1, -1, -1, 101, 656, -1, 658,
659, -1, -1, -1, 663, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 676, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 694, -1, -1, -1, -1,
-1, -1, -1, 702, 703, -1, -1, -1, -1, -1,
-1, -1, -1, 712, -1, -1, -1, 716, 717, -1,
-1, -1, -1, -1, 723, -1, -1, -1, -1, 728,
-1, 0, 1, 732, 3, 4, 5, 6, 7, -1,
-1, -1, 11, 12, -1, -1, -1, 16, -1, 18,
19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
29, 30, 31, 32, 33, 34, 35, -1, -1, 38,
-1, -1, -1, -1, -1, 44, 45, 46, 47, 48,
49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 87, 0,
-1, 90, 91, 92, 93, -1, 95, 8, 9, 10,
-1, -1, 13, 14, 15, -1, 17, -1, -1, -1,
109, 110, -1, -1, -1, -1, 27, 28, -1, -1,
-1, -1, 121, 122, -1, 36, 37, -1, 39, 40,
41, 42, 43, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 69, 70,
71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
81, -1, -1, 84, 85, 86, -1, -1, 89, -1,
-1, -1, -1, -1, -1, -1, 97, 98, 99, 100,
101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
-1, -1, 113, 114, 115, 116, 117, 118, 0, -1,
121, 122, -1, -1, -1, -1, 8, 9, 10, -1,
-1, 13, 14, 15, -1, 17, -1, 69, 70, 71,
72, 73, 74, 75, 26, 27, 78, 79, -1, -1,
-1, -1, 84, 85, 36, 37, -1, 39, 40, 41,
42, 43, -1, -1, -1, -1, -1, 99, 100, 101,
102, 103, 104, 105, 106, 107, 108, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 69, 70, 71,
72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
-1, -1, 84, 85, 86, -1, 88, -1, -1, -1,
-1, -1, -1, -1, 96, 97, -1, 99, 100, 101,
102, 103, 104, 105, 106, 107, 108, -1, -1, -1,
112, 113, 114, 115, 116, 117, -1, -1, -1, 121,
122, 1, -1, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12, -1, -1, 15, 16, -1, 18, 19,
20, 21, 22, 23, 24, -1, -1, -1, -1, 29,
30, 31, 32, 33, 34, 35, -1, -1, 38, -1,
-1, -1, -1, -1, 44, 45, 46, 47, 48, 49,
50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 87, -1, -1,
90, 91, 92, 93, -1, 95, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 109,
110, -1, -1, -1, 1, -1, 3, 4, 5, 6,
7, 121, 122, 10, 11, 12, -1, 14, 15, 16,
-1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
-1, -1, 29, 30, 31, 32, 33, 34, 35, -1,
-1, 38, -1, -1, -1, -1, -1, 44, 45, 46,
47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
67, 68, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
87, -1, -1, 90, 91, 92, 93, -1, 95, -1,
1, -1, 3, 4, 5, 6, 7, -1, -1, 10,
11, 12, 109, 110, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 121, 122, -1, -1, 29, 30,
31, 32, 33, 34, 35, -1, -1, 38, -1, -1,
-1, -1, -1, 44, 45, 46, 47, 48, 49, 50,
51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
61, 62, 63, 64, 65, 66, 67, 68, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 87, -1, -1, 90,
91, 92, 93, -1, 95, -1, 1, -1, 3, 4,
5, 6, 7, -1, -1, 10, 11, 12, 109, 110,
15, 16, -1, 18, 19, 20, 21, 22, 23, 24,
121, 122, -1, -1, 29, 30, 31, 32, 33, 34,
35, -1, -1, 38, -1, -1, -1, -1, -1, 44,
45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
65, 66, 67, 68, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 87, -1, -1, 90, 91, 92, 93, -1,
95, 1, -1, 3, 4, 5, 6, 7, -1, 9,
10, 11, 12, -1, 109, 110, 16, -1, 18, 19,
20, 21, 22, 23, 24, -1, 121, 122, -1, 29,
30, 31, 32, 33, 34, 35, -1, -1, 38, -1,
-1, -1, -1, -1, 44, 45, 46, 47, 48, 49,
50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 87, -1, -1,
90, 91, 92, 93, -1, 95, 1, -1, 3, 4,
5, 6, 7, -1, -1, -1, 11, 12, -1, 109,
110, 16, -1, 18, 19, 20, 21, 22, 23, 24,
-1, 121, 122, -1, 29, 30, 31, 32, 33, 34,
35, -1, -1, 38, -1, -1, -1, -1, -1, 44,
45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
65, 66, 67, 68, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 87, -1, -1, 90, 91, 92, 93, -1,
95, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 109, 110, -1, -1, -1, 1,
115, 3, 4, 5, 6, 7, 121, 122, -1, 11,
12, -1, -1, -1, 16, -1, 18, 19, 20, 21,
22, 23, 24, -1, -1, -1, -1, 29, 30, 31,
32, 33, 34, 35, -1, -1, 38, -1, -1, -1,
-1, -1, 44, 45, 46, 47, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
62, 63, 64, 65, 66, 67, 68, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 87, -1, -1, 90, 91,
92, 93, -1, 95, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 109, 110, -1,
-1, -1, 1, 115, 3, 4, 5, 6, 7, 121,
122, -1, 11, 12, -1, -1, -1, 16, -1, 18,
19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
29, 30, 31, 32, 33, 34, 35, -1, -1, 38,
-1, -1, -1, -1, -1, 44, 45, 46, 47, 48,
49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 87, -1,
-1, 90, 91, 92, 93, -1, 95, -1, 1, -1,
3, 4, 5, 6, 7, -1, -1, 10, 11, 12,
109, 110, -1, 16, 113, 18, 19, 20, 21, 22,
23, 24, 121, 122, -1, -1, 29, 30, 31, 32,
33, 34, 35, -1, -1, 38, -1, -1, -1, -1,
-1, 44, 45, 46, 47, 48, 49, 50, 51, 52,
53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
63, 64, 65, 66, 67, 68, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 87, -1, -1, 90, 91, 92,
93, -1, 95, -1, -1, 3, 4, 5, 6, 7,
-1, -1, -1, 11, 12, -1, 109, 110, 16, -1,
18, 19, 20, 21, 22, 23, 24, -1, 121, 122,
-1, 29, 30, 31, 32, 33, 34, 35, -1, -1,
38, -1, -1, -1, -1, -1, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
68, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 87,
-1, -1, 90, 91, 92, 93, -1, 95, -1, -1,
3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
-1, 109, 110, 16, -1, 18, 19, 20, 21, 22,
23, 24, -1, -1, 122, -1, 29, 30, 31, 32,
33, 34, 35, -1, -1, 38, -1, -1, -1, -1,
-1, -1, 45, -1, -1, 48, 49, 50, 51, 52,
53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
63, 64, 65, 66, 67, 68, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 87, -1, -1, 90, 91, 92,
93, -1, 95, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 109, 110, -1, -1,
3, 4, 5, 6, 7, 8, 9, 10, 121, 122,
13, 14, 15, 16, 17, -1, -1, 20, 21, 22,
23, 24, 25, 26, -1, -1, 29, 30, 31, 32,
33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
53, 54, 55, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 67, 68, 69, 70, 71, 72,
-1, 74, 75, -1, -1, 78, -1, -1, -1, 82,
83, 84, 85, -1, -1, -1, -1, -1, -1, -1,
93, -1, -1, -1, -1, -1, 99, 100, 101, 102,
103, 104, 105, 106, 107, 108, -1, 110, -1, -1,
3, 4, 5, -1, 7, -1, 119, 120, 11, 12,
-1, -1, -1, 16, -1, 18, 19, 20, 21, 22,
23, 24, -1, 26, -1, -1, 29, 30, 31, 32,
33, 34, 35, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 45, -1, -1, 48, 49, 50, 51, 52,
53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
63, 64, 65, 66, 67, 68, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 87, -1, -1, 90, 91, 92,
93, 94, 95, -1, -1, 3, 4, 5, -1, 7,
-1, -1, -1, 11, 12, -1, 109, 110, 16, 112,
18, 19, 20, 21, 22, 23, 24, 120, 26, -1,
-1, 29, 30, 31, 32, 33, 34, 35, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 45, -1, -1,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
68, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 87,
-1, -1, 90, 91, 92, 93, 94, 95, -1, -1,
3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
-1, 109, 110, 16, 112, 18, 19, 20, 21, 22,
23, 24, 120, -1, -1, -1, 29, 30, 31, 32,
33, 34, 35, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 45, -1, -1, 48, 49, 50, 51, 52,
53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
63, 64, 65, 66, 67, 68, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 87, 88, -1, 90, 91, 92,
93, 94, 95, 96, -1, 3, 4, 5, -1, 7,
-1, -1, -1, 11, 12, -1, 109, 110, 16, -1,
18, 19, 20, 21, 22, 23, 24, 120, -1, -1,
-1, 29, 30, 31, 32, 33, 34, 35, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 45, -1, -1,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
68, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 87,
-1, -1, 90, 91, 92, 93, 94, 95, -1, -1,
3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
-1, 109, 110, 16, -1, 18, 19, 20, 21, 22,
23, 24, 120, -1, -1, -1, 29, 30, 31, 32,
33, 34, 35, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 45, -1, -1, 48, 49, 50, 51, 52,
53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
63, 64, 65, 66, 67, 68, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 87, -1, -1, 90, 91, 92,
93, 94, 95, -1, -1, 3, 4, 5, -1, 7,
-1, -1, -1, 11, 12, -1, 109, 110, 16, -1,
18, 19, 20, 21, 22, 23, 24, 120, -1, -1,
-1, 29, 30, 31, 32, 33, 34, 35, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 45, -1, -1,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
68, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 87,
-1, -1, 90, 91, 92, 93, 94, 95, -1, -1,
3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
-1, 109, 110, 16, -1, 18, 19, 20, 21, 22,
23, 24, 120, -1, -1, -1, 29, 30, 31, 32,
33, 34, 35, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 45, -1, -1, 48, 49, 50, 51, 52,
53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
63, 64, 65, 66, 67, 68, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 87, -1, -1, 90, 91, 92,
93, 94, 95, -1, -1, 3, 4, 5, -1, 7,
-1, -1, -1, 11, 12, -1, 109, 110, 16, -1,
18, 19, 20, 21, 22, 23, 24, 120, -1, -1,
-1, 29, 30, 31, 32, 33, 34, 35, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 45, -1, -1,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
68, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 87,
-1, -1, 90, 91, 92, 93, 94, 95, -1, -1,
3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
-1, 109, 110, 16, -1, 18, 19, 20, 21, 22,
23, 24, 120, -1, -1, -1, 29, 30, 31, 32,
33, 34, 35, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 45, -1, -1, 48, 49, 50, 51, 52,
53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
63, 64, 65, 66, 67, 68, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 87, -1, -1, 90, 91, 92,
93, 94, 95, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 109, 110, 3, 4,
5, 6, 7, 8, 9, 10, -1, 120, 13, 14,
15, 16, 17, -1, -1, 20, 21, 22, 23, 24,
25, 26, -1, -1, 29, 30, 31, 32, 33, 34,
35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
55, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 67, 68, 69, 70, 71, 72, -1, 74,
75, -1, -1, 78, -1, -1, -1, 82, 83, 84,
85, -1, -1, -1, -1, -1, -1, -1, 93, -1,
-1, -1, -1, -1, 99, 100, 101, 102, 103, 104,
105, 106, 107, 108, -1, 110, 3, 4, 5, 6,
7, 8, 9, 10, 119, -1, 13, 14, 15, 16,
17, -1, -1, 20, 21, 22, 23, 24, 25, 26,
-1, -1, 29, 30, 31, 32, 33, 34, 35, 36,
37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
47, 48, 49, 50, 51, 52, -1, 54, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
67, 68, 69, 70, 71, 72, -1, 74, 75, -1,
-1, 78, -1, -1, -1, 82, 83, 84, 85, -1,
-1, -1, -1, -1, -1, -1, 93, -1, 95, -1,
-1, -1, 99, 100, 101, 102, 103, 104, 105, 106,
107, 108, -1, 110, 3, 4, 5, 6, 7, 8,
9, 10, 119, -1, 13, 14, 15, 16, 17, -1,
-1, 20, 21, 22, 23, 24, 25, 26, -1, -1,
29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
49, 50, 51, -1, -1, 54, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 67, 68,
69, 70, 71, 72, -1, 74, 75, -1, -1, 78,
-1, -1, -1, 82, 83, 84, 85, -1, -1, -1,
-1, -1, -1, -1, 93, -1, 95, -1, -1, -1,
99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
-1, 110, 3, 4, 5, 6, 7, 8, 9, 10,
119, -1, 13, 14, 15, 16, 17, -1, -1, 20,
21, 22, 23, 24, 25, 26, -1, -1, 29, 30,
31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
51, -1, -1, 54, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 67, 68, 69, 70,
71, 72, -1, 74, 75, -1, -1, 78, -1, -1,
-1, 82, 83, 84, 85, -1, -1, -1, -1, -1,
-1, -1, 93, -1, -1, -1, -1, -1, 99, 100,
101, 102, 103, 104, 105, 106, 107, 108, -1, 110,
-1, 3, 4, 5, -1, 7, -1, -1, 119, 11,
12, -1, -1, -1, 16, -1, 18, 19, 20, 21,
22, 23, 24, -1, -1, -1, -1, 29, 30, 31,
32, 33, 34, 35, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 45, -1, -1, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
62, 63, 64, 65, 66, 67, 68, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 87, -1, -1, 90, 91,
92, 93, 94, 95, -1, -1, -1, -1, -1, -1,
-1, 3, 4, 5, -1, 7, -1, 109, 110, 11,
12, -1, -1, 115, 16, -1, 18, 19, 20, 21,
22, 23, 24, -1, -1, -1, -1, 29, 30, 31,
32, 33, 34, 35, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 45, -1, -1, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
62, 63, 64, 65, 66, 67, 68, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 87, -1, -1, 90, 91,
92, 93, 94, 95, -1, -1, -1, -1, -1, -1,
-1, 3, 4, 5, 6, 7, -1, 109, 110, 11,
12, -1, -1, 115, 16, -1, 18, 19, 20, 21,
22, 23, 24, -1, -1, -1, -1, 29, 30, 31,
32, 33, 34, 35, -1, -1, 38, -1, -1, -1,
-1, -1, 44, 45, 46, 47, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
62, 63, 64, 65, 66, 67, 68, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 87, -1, -1, 90, 91,
92, 93, -1, 95, -1, -1, 3, 4, 5, -1,
7, -1, -1, -1, 11, 12, -1, 109, 110, 16,
-1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
-1, -1, 29, 30, 31, 32, 33, 34, 35, -1,
-1, 38, -1, -1, -1, -1, -1, -1, 45, -1,
-1, 48, 49, 50, 51, 52, 53, 54, 55, 56,
57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
67, 68, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
87, -1, -1, 90, 91, 92, 93, -1, 95, -1,
-1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
12, -1, 109, 110, 16, -1, 18, 19, 20, 21,
22, 23, 24, -1, -1, -1, -1, 29, 30, 31,
32, 33, 34, 35, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 45, -1, -1, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
62, 63, 64, 65, 66, 67, 68, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 87, -1, -1, 90, 91,
92, 93, 94, 95, -1, -1, 3, 4, 5, -1,
7, -1, -1, -1, 11, 12, -1, 109, 110, 16,
-1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
-1, -1, 29, 30, 31, 32, 33, 34, 35, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 45, -1,
-1, 48, 49, 50, 51, 52, 53, 54, 55, 56,
57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
67, 68, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
87, -1, -1, 90, 91, 92, 93, 94, 95, -1,
-1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
12, -1, 109, 110, 16, -1, 18, 19, 20, 21,
22, 23, 24, -1, -1, -1, -1, 29, 30, 31,
32, 33, 34, 35, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 45, -1, -1, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
62, 63, 64, 65, 66, 67, 68, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 87, -1, -1, 90, 91,
92, 93, 94, 95, -1, -1, 3, 4, 5, -1,
7, -1, -1, -1, 11, 12, -1, 109, 110, 16,
-1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
-1, -1, 29, 30, 31, 32, 33, 34, 35, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 45, -1,
-1, 48, 49, 50, 51, 52, 53, 54, 55, 56,
57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
67, 68, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
87, -1, -1, 90, 91, 92, 93, 94, 95, -1,
-1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
12, -1, 109, 110, 16, -1, 18, 19, 20, 21,
22, 23, 24, -1, -1, -1, -1, 29, 30, 31,
32, 33, 34, 35, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 45, -1, -1, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
62, 63, 64, 65, 66, 67, 68, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 87, -1, -1, 90, 91,
92, 93, -1, 95, -1, -1, 3, 4, 5, -1,
7, -1, -1, -1, 11, 12, -1, 109, 110, 16,
-1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
-1, -1, 29, 30, 31, 32, 33, 34, 35, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 45, -1,
-1, 48, 49, 50, 51, 52, 53, 54, 55, 56,
57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
67, 68, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
87, -1, -1, 90, 91, 92, 93, -1, 95, -1,
-1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
12, -1, 109, 110, 16, -1, 18, 19, 20, 21,
22, 23, 24, -1, -1, -1, -1, 29, 30, 31,
32, 33, 34, 35, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 45, -1, -1, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
62, 63, 64, 65, 66, 67, 68, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 87, -1, -1, 90, 91,
92, 93, -1, 95, -1, -1, 3, 4, 5, -1,
7, -1, -1, -1, 11, 12, -1, 109, 110, 16,
-1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
-1, -1, 29, 30, 31, 32, 33, 34, 35, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 45, -1,
-1, 48, 49, 50, 51, 52, 53, 54, 55, 56,
57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
67, 68, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
87, -1, -1, 90, 91, 92, 93, -1, 95, -1,
-1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
12, -1, 109, 110, 16, -1, 18, 19, 20, 21,
22, 23, 24, -1, -1, -1, -1, 29, 30, 31,
32, 33, 34, 35, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 45, -1, -1, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
62, 63, 64, 65, 66, 67, 68, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 87, -1, -1, 90, 91,
92, 93, -1, 95, -1, -1, 3, 4, 5, -1,
7, -1, -1, -1, 11, 12, -1, 109, 110, 16,
-1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
-1, -1, 29, 30, 31, 32, 33, 34, 35, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 45, -1,
-1, 48, 49, 50, 51, 52, 53, 54, 55, 56,
57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
67, 68, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
87, -1, -1, 90, 91, 92, 93, -1, 95, -1,
-1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
12, -1, 109, 110, 16, -1, 18, 19, 20, 21,
22, 23, 24, -1, -1, -1, -1, 29, 30, 31,
32, 33, 34, 35, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 45, -1, -1, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
62, 63, 64, 65, 66, 67, 68, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 87, -1, -1, 90, 91,
92, 93, -1, 95, -1, -1, 3, 4, 5, -1,
7, -1, -1, -1, 11, 12, -1, 109, 110, 16,
-1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
-1, -1, 29, 30, 31, 32, 33, 34, 35, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 45, -1,
-1, 48, 49, 50, 51, 52, 53, 54, 55, 56,
57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
67, 68, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
87, -1, -1, 90, 91, 92, -1, -1, 95, -1,
-1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
12, -1, 109, 110, 16, -1, 18, 19, 20, 21,
22, 23, 24, -1, -1, -1, -1, 29, 30, 31,
32, 33, 34, 35, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 45, -1, -1, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
62, 63, 64, 65, 66, 67, 68, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 87, -1, -1, 90, 91,
92, -1, -1, 95, -1, -1, 3, 4, 5, -1,
7, -1, -1, -1, 11, 12, -1, 109, 110, 16,
-1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
-1, -1, 29, 30, 31, 32, 33, 34, 35, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 45, -1,
-1, 48, 49, 50, 51, 52, 53, 54, 55, 56,
57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
87, -1, -1, 90, 91, 92, 93, -1, 95, 3,
4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
-1, -1, 16, -1, 18, 19, 20, 21, 22, 23,
24, -1, -1, -1, -1, 29, 30, 31, 32, 33,
34, 35, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 45, -1, -1, 48, 49, 50, 51, 52, 53,
54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 87, -1, -1, 90, 91, 92, 93,
-1, 95, 3, 4, 5, -1, 7, -1, -1, -1,
11, 12, -1, -1, -1, 16, -1, 18, 19, 20,
21, 22, 23, 24, -1, -1, -1, -1, 29, 30,
31, 32, 33, 34, 35, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 45, -1, -1, 48, 49, 50,
51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
61, 62, 63, 64, 65, 66, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 50, 51,
-1, -1, 54, -1, -1, -1, 87, -1, -1, 90,
91, 92, -1, -1, 95, 67, 68, 69, 70, 71,
72, -1, 74, 75, -1, -1, 78, -1, -1, -1,
82, 83, 84, 85, -1, -1, -1, -1, -1, -1,
-1, 93, -1, -1, -1, -1, -1, 99, 100, 101,
102, 103, 104, 105, 106, 107, 108, -1, 110, 50,
51, -1, -1, 54, -1, -1, -1, 119, -1, -1,
-1, -1, -1, -1, -1, -1, 67, 68, 69, 70,
71, 72, -1, 74, 75, -1, -1, 78, -1, -1,
-1, 82, 83, 84, 85, -1, -1, -1, -1, -1,
-1, -1, 93, -1, -1, -1, -1, -1, 99, 100,
101, 102, 103, 104, 105, 106, 107, 108, -1, 110,
50, 51, -1, -1, 54, -1, -1, -1, 119, -1,
-1, -1, -1, -1, -1, -1, -1, 67, 68, 69,
70, 71, 72, -1, 74, 75, -1, -1, 78, -1,
-1, -1, 82, 83, 84, 85, -1, -1, -1, -1,
-1, -1, -1, 93, -1, -1, -1, -1, -1, 99,
100, 101, 102, 103, 104, 105, 106, 107, 108, -1,
110, 50, 51, -1, -1, 54, -1, -1, -1, 119,
-1, -1, -1, -1, -1, -1, -1, -1, 67, 68,
69, 70, 71, 72, -1, 74, 75, -1, -1, 78,
-1, -1, -1, 82, 83, 84, 85, -1, -1, -1,
-1, -1, -1, -1, 93, -1, -1, -1, -1, -1,
99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
-1, 110, 50, 51, -1, -1, 54, -1, -1, -1,
119, -1, -1, -1, -1, -1, -1, -1, -1, 67,
68, 69, 70, 71, 72, -1, 74, 75, -1, -1,
78, -1, -1, -1, 82, 83, 84, 85, -1, -1,
-1, -1, -1, -1, -1, 93, -1, -1, -1, -1,
-1, 99, 100, 101, 102, 103, 104, 105, 106, 107,
108, -1, 110, 50, 51, -1, -1, 54, -1, -1,
-1, 119, -1, -1, -1, -1, -1, -1, -1, -1,
67, 68, 69, 70, 71, 72, -1, 74, 75, -1,
-1, 78, -1, -1, -1, 82, 83, 84, 85, -1,
-1, -1, -1, -1, -1, -1, 93, -1, -1, -1,
-1, -1, 99, 100, 101, 102, 103, 104, 105, 106,
107, 108, -1, 110, 50, 51, -1, -1, 54, -1,
-1, -1, 119, -1, -1, -1, -1, -1, -1, -1,
-1, 67, 68, 69, 70, 71, 72, -1, 74, 75,
-1, -1, 78, -1, -1, -1, 82, 83, 84, 85,
-1, -1, -1, -1, -1, -1, -1, 93, -1, -1,
-1, -1, -1, 99, 100, 101, 102, 103, 104, 105,
106, 107, 108, -1, 110, 50, 51, -1, -1, 54,
-1, -1, -1, 119, -1, -1, -1, -1, -1, -1,
-1, -1, 67, 68, 69, 70, 71, 72, -1, 74,
75, -1, -1, 78, -1, -1, -1, 82, 83, 84,
85, -1, -1, -1, -1, -1, -1, -1, 93, -1,
-1, -1, -1, -1, 99, 100, 101, 102, 103, 104,
105, 106, 107, 108, -1, 110, 50, 51, -1, -1,
54, -1, -1, -1, 119, -1, -1, -1, -1, -1,
-1, -1, -1, 67, 68, 69, 70, 71, 72, -1,
74, 75, -1, -1, 78, -1, -1, -1, 82, 83,
84, 85, -1, -1, -1, -1, -1, -1, -1, 93,
-1, -1, -1, -1, -1, 99, 100, 101, 102, 103,
104, 105, 106, 107, 108, -1, 110, 50, 51, -1,
-1, 54, -1, -1, -1, 119, -1, -1, -1, -1,
-1, -1, -1, -1, 67, 68, 69, 70, 71, 72,
-1, 74, 75, -1, -1, 78, -1, -1, -1, 82,
83, 84, 85, -1, -1, -1, -1, -1, -1, -1,
93, -1, -1, -1, -1, -1, 99, 100, 101, 102,
103, 104, 105, 106, 107, 108, -1, 110, 50, 51,
-1, -1, 54, -1, -1, -1, 119, -1, -1, -1,
-1, -1, -1, -1, -1, 67, 68, 69, 70, 71,
72, -1, 74, 75, -1, -1, 78, -1, -1, -1,
82, 83, 84, 85, -1, -1, -1, -1, -1, -1,
-1, 93, -1, -1, -1, -1, -1, 99, 100, 101,
102, 103, 104, 105, 106, 107, 108, -1, 110, -1,
-1, -1, -1, -1, -1, -1, -1, 119, 69, 70,
71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
81, -1, -1, 84, 85, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 97, -1, 99, 100,
101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
-1, -1, -1, -1, -1, 116, 69, 70, 71, 72,
73, 74, 75, 76, 77, 78, 79, 80, 81, -1,
-1, 84, 85, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 97, -1, 99, 100, 101, 102,
103, 104, 105, 106, 107, 108, -1, -1, -1, -1,
-1, -1, -1, 116, 69, 70, 71, 72, 73, 74,
75, 76, 77, 78, 79, 80, 81, -1, -1, 84,
85, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 97, -1, 99, 100, 101, 102, 103, 104,
105, 106, 107, 108, -1, -1, -1, -1, -1, -1,
-1, 116, 69, 70, 71, 72, 73, 74, 75, 76,
77, 78, 79, 80, 81, -1, -1, 84, 85, -1,
-1, -1, 89, -1, -1, -1, -1, -1, -1, -1,
97, -1, 99, 100, 101, 102, 103, 104, 105, 106,
107, 108, 69, 70, 71, 72, 73, 74, 75, 76,
77, 78, 79, 80, 81, -1, -1, 84, 85, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
107, 108, 69, 70, 71, 72, 73, 74, 75, 76,
77, 78, 79, 80, 81, -1, -1, 84, 85, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
97, -1, 99, 100, 101, 102, 103, 104, 105, 106,
107, 108, 69, 70, 71, 72, 73, 74, 75, 76,
77, 78, 79, 80, 81, -1, -1, 84, 85, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 99, 100, 101, 102, 103, 104, 105, 106,
107, 108, 69, 70, 71, 72, 73, 74, 75, -1,
-1, 78, 79, -1, -1, -1, -1, 84, 85, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 99, 100, 101, 102, 103, 104, 105, 106,
107, 108
};
#line 3 "/usr/share/bison/bison.simple"
#ifdef __cplusplus
# define YYSTD(x) std::x
#else
# define YYSTD(x) x
#endif
#if ! defined (yyoverflow) || defined (YYERROR_VERBOSE)
# if YYSTACK_USE_ALLOCA
# define YYSTACK_ALLOC alloca
# else
# ifndef YYSTACK_USE_ALLOCA
# if defined (alloca) || defined (_ALLOCA_H)
# define YYSTACK_ALLOC alloca
# else
# ifdef __GNUC__
# define YYSTACK_ALLOC __builtin_alloca
# endif
# endif
# endif
# endif
# ifdef YYSTACK_ALLOC
# define YYSTACK_FREE(Ptr) do { ; } while (0)
# else
# ifdef __cplusplus
# include <cstdlib>
# define YYSIZE_T std::size_t
# else
# ifdef __STDC__
# include <stdlib.h>
# define YYSIZE_T size_t
# endif
# endif
# define YYSTACK_ALLOC YYSTD (malloc)
# define YYSTACK_FREE YYSTD (free)
# endif
union yyalloc
{
short yyss;
YYSTYPE yyvs;
# if YYLSP_NEEDED
YYLTYPE yyls;
# endif
};
# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
# if YYLSP_NEEDED
# define YYSTACK_BYTES(N) \
((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
+ 2 * YYSTACK_GAP_MAX)
# else
# define YYSTACK_BYTES(N) \
((N) * (sizeof (short) + sizeof (YYSTYPE)) \
+ YYSTACK_GAP_MAX)
# endif
# define YYSTACK_RELOCATE(Type, Stack) \
do \
{ \
YYSIZE_T yynewbytes; \
yymemcpy ((char *) yyptr, (char *) (Stack), \
yysize * (YYSIZE_T) sizeof (Type)); \
Stack = &yyptr->Stack; \
yynewbytes = yystacksize * sizeof (Type) + YYSTACK_GAP_MAX; \
yyptr += yynewbytes / sizeof (*yyptr); \
} \
while (0)
#endif
#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
# define YYSIZE_T __SIZE_TYPE__
#endif
#if ! defined (YYSIZE_T) && defined (size_t)
# define YYSIZE_T size_t
#endif
#if ! defined (YYSIZE_T)
# ifdef __cplusplus
# include <cstddef>
# define YYSIZE_T std::size_t
# else
# ifdef __STDC__
# include <stddef.h>
# define YYSIZE_T size_t
# endif
# endif
#endif
#if ! defined (YYSIZE_T)
# define YYSIZE_T unsigned int
#endif
#define yyerrok (yyerrstatus = 0)
#define yyclearin (yychar = YYEMPTY)
#define YYEMPTY -2
#define YYEOF 0
#define YYACCEPT goto yyacceptlab
#define YYABORT goto yyabortlab
#define YYERROR goto yyerrlab1
#define YYFAIL goto yyerrlab
#define YYRECOVERING() (!!yyerrstatus)
#define YYBACKUP(Token, Value) \
do \
if (yychar == YYEMPTY && yylen == 1) \
{ \
yychar = (Token); \
yylval = (Value); \
yychar1 = YYTRANSLATE (yychar); \
YYPOPSTACK; \
goto yybackup; \
} \
else \
{ \
yyerror ("syntax error: cannot back up"); \
YYERROR; \
} \
while (0)
#define YYTERROR 1
#define YYERRCODE 256
#ifndef YYLLOC_DEFAULT
# define YYLLOC_DEFAULT(Current, Rhs, N) \
Current.last_line = Rhs[N].last_line; \
Current.last_column = Rhs[N].last_column;
#endif
#if YYPURE
# if YYLSP_NEEDED
# ifdef YYLEX_PARAM
# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
# else
# define YYLEX yylex (&yylval, &yylloc)
# endif
# else
# ifdef YYLEX_PARAM
# define YYLEX yylex (&yylval, YYLEX_PARAM)
# else
# define YYLEX yylex (&yylval)
# endif
# endif
#else
# define YYLEX yylex ()
#endif
#if YYDEBUG
# ifndef YYFPRINTF
# ifdef __cplusplus
# include <cstdio>
# else
# include <stdio.h>
# endif
# define YYFPRINTF YYSTD (fprintf)
# endif
# define YYDPRINTF(Args) \
do { \
if (yydebug) \
YYFPRINTF Args; \
} while (0)
int yydebug;
#else
# define YYDPRINTF(Args)
#endif
#ifndef YYINITDEPTH
# define YYINITDEPTH 200
#endif
#if YYMAXDEPTH == 0
# undef YYMAXDEPTH
#endif
#ifndef YYMAXDEPTH
# define YYMAXDEPTH 10000
#endif
#if ! defined (yyoverflow) && ! defined (yymemcpy)
# if __GNUC__ > 1
# define yymemcpy __builtin_memcpy
# else
static void
# if defined (__STDC__) || defined (__cplusplus)
yymemcpy (char *yyto, const char *yyfrom, YYSIZE_T yycount)
# else
yymemcpy (yyto, yyfrom, yycount)
char *yyto;
const char *yyfrom;
YYSIZE_T yycount;
# endif
{
register const char *yyf = yyfrom;
register char *yyt = yyto;
register YYSIZE_T yyi = yycount;
while (yyi-- != 0)
*yyt++ = *yyf++;
}
# endif
#endif
#ifdef YYERROR_VERBOSE
# ifndef yystrlen
# if defined (__GLIBC__) && defined (_STRING_H)
# define yystrlen strlen
# else
static YYSIZE_T
# if defined (__STDC__) || defined (__cplusplus)
yystrlen (const char *yystr)
# else
yystrlen (yystr)
const char *yystr;
# endif
{
register const char *yys = yystr;
while (*yys++ != '\0')
continue;
return yys - yystr - 1;
}
# endif
# endif
# ifndef yystpcpy
# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
# define yystpcpy stpcpy
# else
static char *
# if defined (__STDC__) || defined (__cplusplus)
yystpcpy (char *yydest, const char *yysrc)
# else
yystpcpy (yydest, yysrc)
char *yydest;
const char *yysrc;
# endif
{
register char *yyd = yydest;
register const char *yys = yysrc;
while ((*yyd++ = *yys++) != '\0')
continue;
return yyd - 1;
}
# endif
# endif
#endif
#line 341 "/usr/share/bison/bison.simple"
#ifdef YYPARSE_PARAM
# ifdef __cplusplus
# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
# define YYPARSE_PARAM_DECL
# else
# define YYPARSE_PARAM_ARG YYPARSE_PARAM
# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
# endif
#else
# define YYPARSE_PARAM_ARG
# define YYPARSE_PARAM_DECL
#endif
#ifdef __GNUC__
# ifdef YYPARSE_PARAM
int yyparse (void *);
# else
int yyparse (void);
# endif
#endif
#define YY_DECL_NON_LSP_VARIABLES \
\
int yychar; \
\
\
YYSTYPE yylval; \
\
\
int yynerrs;
#if YYLSP_NEEDED
# define YY_DECL_VARIABLES \
YY_DECL_NON_LSP_VARIABLES \
\
\
YYLTYPE yylloc;
#else
# define YY_DECL_VARIABLES \
YY_DECL_NON_LSP_VARIABLES
#endif
#if !YYPURE
YY_DECL_VARIABLES
#endif
int
yyparse (YYPARSE_PARAM_ARG)
YYPARSE_PARAM_DECL
{
#if YYPURE
YY_DECL_VARIABLES
#endif
register int yystate;
register int yyn;
int yyresult;
int yyerrstatus;
int yychar1 = 0;
short yyssa[YYINITDEPTH];
short *yyss = yyssa;
register short *yyssp;
YYSTYPE yyvsa[YYINITDEPTH];
YYSTYPE *yyvs = yyvsa;
register YYSTYPE *yyvsp;
#if YYLSP_NEEDED
YYLTYPE yylsa[YYINITDEPTH];
YYLTYPE *yyls = yylsa;
YYLTYPE *yylsp;
#endif
#if YYLSP_NEEDED
# define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
#else
# define YYPOPSTACK (yyvsp--, yyssp--)
#endif
YYSIZE_T yystacksize = YYINITDEPTH;
YYSTYPE yyval;
#if YYLSP_NEEDED
YYLTYPE yyloc;
#endif
int yylen;
YYDPRINTF ((stderr, "Starting parse\n"));
yystate = 0;
yyerrstatus = 0;
yynerrs = 0;
yychar = YYEMPTY;
yyssp = yyss;
yyvsp = yyvs;
#if YYLSP_NEEDED
yylsp = yyls;
#endif
goto yysetstate;
yynewstate:
yyssp++;
yysetstate:
*yyssp = yystate;
if (yyssp >= yyss + yystacksize - 1)
{
YYSIZE_T yysize = yyssp - yyss + 1;
#ifdef yyoverflow
{
YYSTYPE *yyvs1 = yyvs;
short *yyss1 = yyss;
# if YYLSP_NEEDED
YYLTYPE *yyls1 = yyls;
yyoverflow ("parser stack overflow",
&yyss1, yysize * sizeof (*yyssp),
&yyvs1, yysize * sizeof (*yyvsp),
&yyls1, yysize * sizeof (*yylsp),
&yystacksize);
yyls = yyls1;
# else
yyoverflow ("parser stack overflow",
&yyss1, yysize * sizeof (*yyssp),
&yyvs1, yysize * sizeof (*yyvsp),
&yystacksize);
# endif
yyss = yyss1;
yyvs = yyvs1;
}
#else
if (yystacksize >= YYMAXDEPTH)
goto yyoverflowlab;
yystacksize *= 2;
if (yystacksize > YYMAXDEPTH)
yystacksize = YYMAXDEPTH;
{
short *yyss1 = yyss;
union yyalloc *yyptr =
(union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
if (! yyptr)
goto yyoverflowlab;
YYSTACK_RELOCATE (short, yyss);
YYSTACK_RELOCATE (YYSTYPE, yyvs);
# if YYLSP_NEEDED
YYSTACK_RELOCATE (YYLTYPE, yyls);
# endif
# undef YYSTACK_RELOCATE
if (yyss1 != yyssa)
YYSTACK_FREE (yyss1);
}
#endif
yyssp = yyss + yysize - 1;
yyvsp = yyvs + yysize - 1;
#if YYLSP_NEEDED
yylsp = yyls + yysize - 1;
#endif
YYDPRINTF ((stderr, "Stack size increased to %lu\n",
(unsigned long int) yystacksize));
if (yyssp >= yyss + yystacksize - 1)
YYABORT;
}
YYDPRINTF ((stderr, "Entering state %d\n", yystate));
goto yybackup;
yybackup:
yyn = yypact[yystate];
if (yyn == YYFLAG)
goto yydefault;
if (yychar == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token: "));
yychar = YYLEX;
}
if (yychar <= 0)
{
yychar1 = 0;
yychar = YYEOF;
YYDPRINTF ((stderr, "Now at end of input.\n"));
}
else
{
yychar1 = YYTRANSLATE (yychar);
#if YYDEBUG
if (yydebug)
{
YYFPRINTF (stderr, "Next token is %d (%s",
yychar, yytname[yychar1]);
# ifdef YYPRINT
YYPRINT (stderr, yychar, yylval);
# endif
YYFPRINTF (stderr, ")\n");
}
#endif
}
yyn += yychar1;
if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
goto yydefault;
yyn = yytable[yyn];
if (yyn < 0)
{
if (yyn == YYFLAG)
goto yyerrlab;
yyn = -yyn;
goto yyreduce;
}
else if (yyn == 0)
goto yyerrlab;
if (yyn == YYFINAL)
YYACCEPT;
YYDPRINTF ((stderr, "Shifting token %d (%s), ",
yychar, yytname[yychar1]));
if (yychar != YYEOF)
yychar = YYEMPTY;
*++yyvsp = yylval;
#if YYLSP_NEEDED
*++yylsp = yylloc;
#endif
if (yyerrstatus)
yyerrstatus--;
yystate = yyn;
goto yynewstate;
yydefault:
yyn = yydefact[yystate];
if (yyn == 0)
goto yyerrlab;
goto yyreduce;
yyreduce:
yylen = yyr2[yyn];
yyval = yyvsp[1-yylen];
#if YYLSP_NEEDED
yyloc = yylsp[1-yylen];
YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
#endif
#if YYDEBUG
if (yydebug)
{
int yyi;
YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
yyn, yyrline[yyn]);
for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++)
YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
}
#endif
switch (yyn) {
case 1:
#line 264 "parse.y"
{
yyval.vars = ruby_dyna_vars;
lex_state = EXPR_BEG;
top_local_init();
if ((VALUE)ruby_class == rb_cObject) class_nest = 0;
else class_nest = 1;
}
break;
case 2:
#line 272 "parse.y"
{
if (yyvsp[0].node && !compile_for_eval) {
if (nd_type(yyvsp[0].node) != NODE_BLOCK) void_expr(yyvsp[0].node);
else {
NODE *node = yyvsp[0].node;
while (node->nd_next) {
node = node->nd_next;
}
void_expr(node->nd_head);
}
}
ruby_eval_tree = block_append(ruby_eval_tree, yyvsp[0].node);
top_local_setup();
class_nest = 0;
ruby_dyna_vars = yyvsp[-1].vars;
}
break;
case 3:
#line 291 "parse.y"
{
void_stmts(yyvsp[-1].node);
yyval.node = yyvsp[-1].node;
}
break;
case 5:
#line 298 "parse.y"
{
yyval.node = newline_node(yyvsp[0].node);
}
break;
case 6:
#line 302 "parse.y"
{
yyval.node = block_append(yyvsp[-2].node, newline_node(yyvsp[0].node));
}
break;
case 7:
#line 306 "parse.y"
{
yyval.node = yyvsp[0].node;
}
break;
case 8:
#line 310 "parse.y"
{lex_state = EXPR_FNAME;}
break;
case 9:
#line 311 "parse.y"
{
if (in_def || in_single)
yyerror("alias within method");
yyval.node = NEW_ALIAS(yyvsp[-2].id, yyvsp[0].id);
}
break;
case 10:
#line 317 "parse.y"
{
if (in_def || in_single)
yyerror("alias within method");
yyval.node = NEW_VALIAS(yyvsp[-1].id, yyvsp[0].id);
}
break;
case 11:
#line 323 "parse.y"
{
char buf[3];
if (in_def || in_single)
yyerror("alias within method");
sprintf(buf, "$%c", yyvsp[0].node->nd_nth);
yyval.node = NEW_VALIAS(yyvsp[-1].id, rb_intern(buf));
}
break;
case 12:
#line 332 "parse.y"
{
yyerror("can't make alias for the number variables");
yyval.node = 0;
}
break;
case 13:
#line 337 "parse.y"
{
if (in_def || in_single)
yyerror("undef within method");
yyval.node = yyvsp[0].node;
}
break;
case 14:
#line 343 "parse.y"
{
value_expr(yyvsp[0].node);
yyval.node = NEW_IF(cond(yyvsp[0].node), yyvsp[-2].node, 0);
fixpos(yyval.node, yyvsp[0].node);
}
break;
case 15:
#line 349 "parse.y"
{
value_expr(yyvsp[0].node);
yyval.node = NEW_UNLESS(cond(yyvsp[0].node), yyvsp[-2].node, 0);
fixpos(yyval.node, yyvsp[0].node);
}
break;
case 16:
#line 355 "parse.y"
{
value_expr(yyvsp[0].node);
if (yyvsp[-2].node && nd_type(yyvsp[-2].node) == NODE_BEGIN) {
yyval.node = NEW_WHILE(cond(yyvsp[0].node), yyvsp[-2].node->nd_body, 0);
}
else {
yyval.node = NEW_WHILE(cond(yyvsp[0].node), yyvsp[-2].node, 1);
}
}
break;
case 17:
#line 365 "parse.y"
{
value_expr(yyvsp[0].node);
if (yyvsp[-2].node && nd_type(yyvsp[-2].node) == NODE_BEGIN) {
yyval.node = NEW_UNTIL(cond(yyvsp[0].node), yyvsp[-2].node->nd_body, 0);
}
else {
yyval.node = NEW_UNTIL(cond(yyvsp[0].node), yyvsp[-2].node, 1);
}
}
break;
case 18:
#line 375 "parse.y"
{
yyval.node = NEW_RESCUE(yyvsp[-2].node, NEW_RESBODY(0,yyvsp[0].node,0), 0);
}
break;
case 19:
#line 379 "parse.y"
{
if (in_def || in_single) {
yyerror("BEGIN in method");
}
local_push();
}
break;
case 20:
#line 386 "parse.y"
{
ruby_eval_tree_begin = block_append(ruby_eval_tree_begin,
NEW_PREEXE(yyvsp[-1].node));
local_pop();
yyval.node = 0;
}
break;
case 21:
#line 393 "parse.y"
{
if (compile_for_eval && (in_def || in_single)) {
yyerror("END in method; use at_exit");
}
yyval.node = NEW_ITER(0, NEW_POSTEXE(), yyvsp[-1].node);
}
break;
case 22:
#line 401 "parse.y"
{
value_expr(yyvsp[0].node);
yyval.node = node_assign(yyvsp[-2].node, yyvsp[0].node);
}
break;
case 23:
#line 406 "parse.y"
{
value_expr(yyvsp[0].node);
yyvsp[-2].node->nd_value = yyvsp[0].node;
yyval.node = yyvsp[-2].node;
}
break;
case 24:
#line 412 "parse.y"
{
yyval.node = node_assign(yyvsp[-2].node, yyvsp[0].node);
}
break;
case 26:
#line 418 "parse.y"
{
value_expr(yyvsp[0].node);
yyvsp[-2].node->nd_value = yyvsp[0].node;
yyval.node = yyvsp[-2].node;
}
break;
case 27:
#line 424 "parse.y"
{
if (!compile_for_eval && !in_def && !in_single)
yyerror("return appeared outside of method");
yyval.node = NEW_RETURN(yyvsp[0].node);
}
break;
case 29:
#line 431 "parse.y"
{
yyval.node = logop(NODE_AND, yyvsp[-2].node, yyvsp[0].node);
}
break;
case 30:
#line 435 "parse.y"
{
yyval.node = logop(NODE_OR, yyvsp[-2].node, yyvsp[0].node);
}
break;
case 31:
#line 439 "parse.y"
{
value_expr(yyvsp[0].node);
yyval.node = NEW_NOT(cond(yyvsp[0].node));
}
break;
case 32:
#line 444 "parse.y"
{
yyval.node = NEW_NOT(cond(yyvsp[0].node));
}
break;
case 37:
#line 454 "parse.y"
{
value_expr(yyvsp[-3].node);
yyval.node = new_call(yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
}
break;
case 38:
#line 459 "parse.y"
{
value_expr(yyvsp[-3].node);
yyval.node = new_call(yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
}
break;
case 39:
#line 465 "parse.y"
{
yyval.node = new_fcall(yyvsp[-1].id, yyvsp[0].node);
fixpos(yyval.node, yyvsp[0].node);
}
break;
case 40:
#line 470 "parse.y"
{
value_expr(yyvsp[-3].node);
yyval.node = new_call(yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
fixpos(yyval.node, yyvsp[-3].node);
}
break;
case 41:
#line 476 "parse.y"
{
value_expr(yyvsp[-3].node);
yyval.node = new_call(yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
fixpos(yyval.node, yyvsp[-3].node);
}
break;
case 42:
#line 482 "parse.y"
{
if (!compile_for_eval && !in_def && !in_single)
yyerror("super called outside of method");
yyval.node = new_super(yyvsp[0].node);
fixpos(yyval.node, yyvsp[0].node);
}
break;
case 43:
#line 489 "parse.y"
{
yyval.node = NEW_YIELD(yyvsp[0].node);
fixpos(yyval.node, yyvsp[0].node);
}
break;
case 45:
#line 496 "parse.y"
{
yyval.node = yyvsp[-1].node;
}
break;
case 47:
#line 502 "parse.y"
{
yyval.node = NEW_MASGN(NEW_LIST(yyvsp[-1].node), 0);
}
break;
case 48:
#line 507 "parse.y"
{
yyval.node = NEW_MASGN(yyvsp[0].node, 0);
}
break;
case 49:
#line 511 "parse.y"
{
yyval.node = NEW_MASGN(list_append(yyvsp[-1].node,yyvsp[0].node), 0);
}
break;
case 50:
#line 515 "parse.y"
{
yyval.node = NEW_MASGN(yyvsp[-2].node, yyvsp[0].node);
}
break;
case 51:
#line 519 "parse.y"
{
yyval.node = NEW_MASGN(yyvsp[-1].node, -1);
}
break;
case 52:
#line 523 "parse.y"
{
yyval.node = NEW_MASGN(0, yyvsp[0].node);
}
break;
case 53:
#line 527 "parse.y"
{
yyval.node = NEW_MASGN(0, -1);
}
break;
case 55:
#line 533 "parse.y"
{
yyval.node = yyvsp[-1].node;
}
break;
case 56:
#line 538 "parse.y"
{
yyval.node = NEW_LIST(yyvsp[-1].node);
}
break;
case 57:
#line 542 "parse.y"
{
yyval.node = list_append(yyvsp[-2].node, yyvsp[-1].node);
}
break;
case 58:
#line 547 "parse.y"
{
yyval.node = assignable(yyvsp[0].id, 0);
}
break;
case 59:
#line 551 "parse.y"
{
yyval.node = aryset(yyvsp[-3].node, yyvsp[-1].node);
}
break;
case 60:
#line 555 "parse.y"
{
yyval.node = attrset(yyvsp[-2].node, yyvsp[0].id);
}
break;
case 61:
#line 559 "parse.y"
{
yyval.node = attrset(yyvsp[-2].node, yyvsp[0].id);
}
break;
case 62:
#line 563 "parse.y"
{
yyval.node = attrset(yyvsp[-2].node, yyvsp[0].id);
}
break;
case 63:
#line 567 "parse.y"
{
rb_backref_error(yyvsp[0].node);
yyval.node = 0;
}
break;
case 64:
#line 573 "parse.y"
{
yyval.node = assignable(yyvsp[0].id, 0);
}
break;
case 65:
#line 577 "parse.y"
{
yyval.node = aryset(yyvsp[-3].node, yyvsp[-1].node);
}
break;
case 66:
#line 581 "parse.y"
{
yyval.node = attrset(yyvsp[-2].node, yyvsp[0].id);
}
break;
case 67:
#line 585 "parse.y"
{
yyval.node = attrset(yyvsp[-2].node, yyvsp[0].id);
}
break;
case 68:
#line 589 "parse.y"
{
yyval.node = attrset(yyvsp[-2].node, yyvsp[0].id);
}
break;
case 69:
#line 593 "parse.y"
{
rb_backref_error(yyvsp[0].node);
yyval.node = 0;
}
break;
case 70:
#line 599 "parse.y"
{
yyerror("class/module name must be CONSTANT");
}
break;
case 75:
#line 608 "parse.y"
{
lex_state = EXPR_END;
yyval.id = yyvsp[0].id;
}
break;
case 76:
#line 613 "parse.y"
{
lex_state = EXPR_END;
yyval.id = yyvsp[0].id;
}
break;
case 79:
#line 622 "parse.y"
{
yyval.node = NEW_UNDEF(yyvsp[0].id);
}
break;
case 80:
#line 625 "parse.y"
{lex_state = EXPR_FNAME;}
break;
case 81:
#line 626 "parse.y"
{
yyval.node = block_append(yyvsp[-3].node, NEW_UNDEF(yyvsp[0].id));
}
break;
case 82:
#line 630 "parse.y"
{ yyval.id = '|'; }
break;
case 83:
#line 631 "parse.y"
{ yyval.id = '^'; }
break;
case 84:
#line 632 "parse.y"
{ yyval.id = '&'; }
break;
case 85:
#line 633 "parse.y"
{ yyval.id = tCMP; }
break;
case 86:
#line 634 "parse.y"
{ yyval.id = tEQ; }
break;
case 87:
#line 635 "parse.y"
{ yyval.id = tEQQ; }
break;
case 88:
#line 636 "parse.y"
{ yyval.id = tMATCH; }
break;
case 89:
#line 637 "parse.y"
{ yyval.id = '>'; }
break;
case 90:
#line 638 "parse.y"
{ yyval.id = tGEQ; }
break;
case 91:
#line 639 "parse.y"
{ yyval.id = '<'; }
break;
case 92:
#line 640 "parse.y"
{ yyval.id = tLEQ; }
break;
case 93:
#line 641 "parse.y"
{ yyval.id = tLSHFT; }
break;
case 94:
#line 642 "parse.y"
{ yyval.id = tRSHFT; }
break;
case 95:
#line 643 "parse.y"
{ yyval.id = '+'; }
break;
case 96:
#line 644 "parse.y"
{ yyval.id = '-'; }
break;
case 97:
#line 645 "parse.y"
{ yyval.id = '*'; }
break;
case 98:
#line 646 "parse.y"
{ yyval.id = '*'; }
break;
case 99:
#line 647 "parse.y"
{ yyval.id = '/'; }
break;
case 100:
#line 648 "parse.y"
{ yyval.id = '%'; }
break;
case 101:
#line 649 "parse.y"
{ yyval.id = tPOW; }
break;
case 102:
#line 650 "parse.y"
{ yyval.id = '~'; }
break;
case 103:
#line 651 "parse.y"
{ yyval.id = tUPLUS; }
break;
case 104:
#line 652 "parse.y"
{ yyval.id = tUMINUS; }
break;
case 105:
#line 653 "parse.y"
{ yyval.id = tAREF; }
break;
case 106:
#line 654 "parse.y"
{ yyval.id = tASET; }
break;
case 107:
#line 655 "parse.y"
{ yyval.id = '`'; }
break;
case 149:
#line 666 "parse.y"
{
value_expr(yyvsp[0].node);
yyval.node = node_assign(yyvsp[-2].node, yyvsp[0].node);
}
break;
case 150:
#line 670 "parse.y"
{yyval.node = assignable(yyvsp[-1].id, 0);}
break;
case 151:
#line 671 "parse.y"
{
if (yyvsp[-1].node) {
if (yyvsp[-2].id == tOROP) {
yyvsp[-1].node->nd_value = yyvsp[0].node;
yyval.node = NEW_OP_ASGN_OR(gettable(yyvsp[-3].id), yyvsp[-1].node);
if (is_instance_id(yyvsp[-3].id)) {
yyval.node->nd_aid = yyvsp[-3].id;
}
}
else if (yyvsp[-2].id == tANDOP) {
yyvsp[-1].node->nd_value = yyvsp[0].node;
yyval.node = NEW_OP_ASGN_AND(gettable(yyvsp[-3].id), yyvsp[-1].node);
}
else {
yyval.node = yyvsp[-1].node;
yyval.node->nd_value = call_op(gettable(yyvsp[-3].id),yyvsp[-2].id,1,yyvsp[0].node);
}
fixpos(yyval.node, yyvsp[0].node);
}
else {
yyval.node = 0;
}
}
break;
case 152:
#line 695 "parse.y"
{
NODE *tmp, *args = NEW_LIST(yyvsp[0].node);
yyvsp[-3].node = list_append(yyvsp[-3].node, NEW_NIL());
list_concat(args, yyvsp[-3].node);
if (yyvsp[-1].id == tOROP) {
yyvsp[-1].id = 0;
}
else if (yyvsp[-1].id == tANDOP) {
yyvsp[-1].id = 1;
}
yyval.node = NEW_OP_ASGN1(yyvsp[-5].node, yyvsp[-1].id, args);
fixpos(yyval.node, yyvsp[-5].node);
}
break;
case 153:
#line 710 "parse.y"
{
if (yyvsp[-1].id == tOROP) {
yyvsp[-1].id = 0;
}
else if (yyvsp[-1].id == tANDOP) {
yyvsp[-1].id = 1;
}
yyval.node = NEW_OP_ASGN2(yyvsp[-4].node, yyvsp[-2].id, yyvsp[-1].id, yyvsp[0].node);
fixpos(yyval.node, yyvsp[-4].node);
}
break;
case 154:
#line 721 "parse.y"
{
if (yyvsp[-1].id == tOROP) {
yyvsp[-1].id = 0;
}
else if (yyvsp[-1].id == tANDOP) {
yyvsp[-1].id = 1;
}
yyval.node = NEW_OP_ASGN2(yyvsp[-4].node, yyvsp[-2].id, yyvsp[-1].id, yyvsp[0].node);
fixpos(yyval.node, yyvsp[-4].node);
}
break;
case 155:
#line 732 "parse.y"
{
if (yyvsp[-1].id == tOROP) {
yyvsp[-1].id = 0;
}
else if (yyvsp[-1].id == tANDOP) {
yyvsp[-1].id = 1;
}
yyval.node = NEW_OP_ASGN2(yyvsp[-4].node, yyvsp[-2].id, yyvsp[-1].id, yyvsp[0].node);
fixpos(yyval.node, yyvsp[-4].node);
}
break;
case 156:
#line 743 "parse.y"
{
rb_backref_error(yyvsp[-2].node);
yyval.node = 0;
}
break;
case 157:
#line 748 "parse.y"
{
yyval.node = NEW_DOT2(yyvsp[-2].node, yyvsp[0].node);
}
break;
case 158:
#line 752 "parse.y"
{
yyval.node = NEW_DOT3(yyvsp[-2].node, yyvsp[0].node);
}
break;
case 159:
#line 756 "parse.y"
{
yyval.node = call_op(yyvsp[-2].node, '+', 1, yyvsp[0].node);
}
break;
case 160:
#line 760 "parse.y"
{
yyval.node = call_op(yyvsp[-2].node, '-', 1, yyvsp[0].node);
}
break;
case 161:
#line 764 "parse.y"
{
yyval.node = call_op(yyvsp[-2].node, '*', 1, yyvsp[0].node);
}
break;
case 162:
#line 768 "parse.y"
{
yyval.node = call_op(yyvsp[-2].node, '/', 1, yyvsp[0].node);
}
break;
case 163:
#line 772 "parse.y"
{
yyval.node = call_op(yyvsp[-2].node, '%', 1, yyvsp[0].node);
}
break;
case 164:
#line 776 "parse.y"
{
int need_negate = Qfalse;
if (nd_type(yyvsp[-2].node) == NODE_LIT) {
switch (TYPE(yyvsp[-2].node->nd_lit)) {
case T_FIXNUM:
case T_FLOAT:
case T_BIGNUM:
if (RTEST(rb_funcall(yyvsp[-2].node->nd_lit,'<',1,INT2FIX(0)))) {
yyvsp[-2].node->nd_lit = rb_funcall(yyvsp[-2].node->nd_lit,rb_intern("-@"),0,0);
need_negate = Qtrue;
}
default:
break;
}
}
yyval.node = call_op(yyvsp[-2].node, tPOW, 1, yyvsp[0].node);
if (need_negate) {
yyval.node = call_op(yyval.node, tUMINUS, 0, 0);
}
}
break;
case 165:
#line 799 "parse.y"
{
if (yyvsp[0].node && nd_type(yyvsp[0].node) == NODE_LIT) {
yyval.node = yyvsp[0].node;
}
else {
yyval.node = call_op(yyvsp[0].node, tUPLUS, 0, 0);
}
}
break;
case 166:
#line 808 "parse.y"
{
if (yyvsp[0].node && nd_type(yyvsp[0].node) == NODE_LIT && FIXNUM_P(yyvsp[0].node->nd_lit)) {
long i = FIX2LONG(yyvsp[0].node->nd_lit);
yyvsp[0].node->nd_lit = INT2FIX(-i);
yyval.node = yyvsp[0].node;
}
else {
yyval.node = call_op(yyvsp[0].node, tUMINUS, 0, 0);
}
}
break;
case 167:
#line 820 "parse.y"
{
yyval.node = call_op(yyvsp[-2].node, '|', 1, yyvsp[0].node);
}
break;
case 168:
#line 824 "parse.y"
{
yyval.node = call_op(yyvsp[-2].node, '^', 1, yyvsp[0].node);
}
break;
case 169:
#line 828 "parse.y"
{
yyval.node = call_op(yyvsp[-2].node, '&', 1, yyvsp[0].node);
}
break;
case 170:
#line 832 "parse.y"
{
yyval.node = call_op(yyvsp[-2].node, tCMP, 1, yyvsp[0].node);
}
break;
case 171:
#line 836 "parse.y"
{
yyval.node = call_op(yyvsp[-2].node, '>', 1, yyvsp[0].node);
}
break;
case 172:
#line 840 "parse.y"
{
yyval.node = call_op(yyvsp[-2].node, tGEQ, 1, yyvsp[0].node);
}
break;
case 173:
#line 844 "parse.y"
{
yyval.node = call_op(yyvsp[-2].node, '<', 1, yyvsp[0].node);
}
break;
case 174:
#line 848 "parse.y"
{
yyval.node = call_op(yyvsp[-2].node, tLEQ, 1, yyvsp[0].node);
}
break;
case 175:
#line 852 "parse.y"
{
yyval.node = call_op(yyvsp[-2].node, tEQ, 1, yyvsp[0].node);
}
break;
case 176:
#line 856 "parse.y"
{
yyval.node = call_op(yyvsp[-2].node, tEQQ, 1, yyvsp[0].node);
}
break;
case 177:
#line 860 "parse.y"
{
yyval.node = NEW_NOT(call_op(yyvsp[-2].node, tEQ, 1, yyvsp[0].node));
}
break;
case 178:
#line 864 "parse.y"
{
yyval.node = match_gen(yyvsp[-2].node, yyvsp[0].node);
}
break;
case 179:
#line 868 "parse.y"
{
yyval.node = NEW_NOT(match_gen(yyvsp[-2].node, yyvsp[0].node));
}
break;
case 180:
#line 872 "parse.y"
{
value_expr(yyvsp[0].node);
yyval.node = NEW_NOT(cond(yyvsp[0].node));
}
break;
case 181:
#line 877 "parse.y"
{
yyval.node = call_op(yyvsp[0].node, '~', 0, 0);
}
break;
case 182:
#line 881 "parse.y"
{
yyval.node = call_op(yyvsp[-2].node, tLSHFT, 1, yyvsp[0].node);
}
break;
case 183:
#line 885 "parse.y"
{
yyval.node = call_op(yyvsp[-2].node, tRSHFT, 1, yyvsp[0].node);
}
break;
case 184:
#line 889 "parse.y"
{
yyval.node = logop(NODE_AND, yyvsp[-2].node, yyvsp[0].node);
}
break;
case 185:
#line 893 "parse.y"
{
yyval.node = logop(NODE_OR, yyvsp[-2].node, yyvsp[0].node);
}
break;
case 186:
#line 896 "parse.y"
{in_defined = 1;}
break;
case 187:
#line 897 "parse.y"
{
in_defined = 0;
yyval.node = NEW_DEFINED(yyvsp[0].node);
}
break;
case 188:
#line 902 "parse.y"
{
value_expr(yyvsp[-4].node);
yyval.node = NEW_IF(cond(yyvsp[-4].node), yyvsp[-2].node, yyvsp[0].node);
fixpos(yyval.node, yyvsp[-4].node);
}
break;
case 189:
#line 908 "parse.y"
{
yyval.node = yyvsp[0].node;
}
break;
case 191:
#line 914 "parse.y"
{
yyval.node = NEW_LIST(yyvsp[-1].node);
}
break;
case 192:
#line 918 "parse.y"
{
yyval.node = list_append(yyvsp[-3].node, yyvsp[-1].node);
}
break;
case 193:
#line 922 "parse.y"
{
yyval.node = yyvsp[-1].node;
}
break;
case 194:
#line 926 "parse.y"
{
value_expr(yyvsp[-1].node);
yyval.node = arg_concat(yyvsp[-4].node, yyvsp[-1].node);
}
break;
case 195:
#line 931 "parse.y"
{
yyval.node = NEW_LIST(NEW_HASH(yyvsp[-1].node));
}
break;
case 196:
#line 935 "parse.y"
{
value_expr(yyvsp[-1].node);
yyval.node = NEW_RESTARGS(yyvsp[-1].node);
}
break;
case 197:
#line 941 "parse.y"
{
yyval.node = yyvsp[-1].node;
}
break;
case 198:
#line 945 "parse.y"
{
yyval.node = yyvsp[-2].node;
}
break;
case 199:
#line 949 "parse.y"
{
yyval.node = NEW_LIST(yyvsp[-2].node);
}
break;
case 200:
#line 953 "parse.y"
{
yyval.node = list_append(yyvsp[-4].node, yyvsp[-2].node);
}
break;
case 203:
#line 961 "parse.y"
{
yyval.node = NEW_LIST(yyvsp[0].node);
}
break;
case 204:
#line 965 "parse.y"
{
yyval.node = list_append(yyvsp[-2].node, yyvsp[0].node);
}
break;
case 205:
#line 969 "parse.y"
{
yyval.node = arg_blk_pass(yyvsp[-1].node, yyvsp[0].node);
}
break;
case 206:
#line 973 "parse.y"
{
value_expr(yyvsp[-1].node);
yyval.node = arg_concat(yyvsp[-4].node, yyvsp[-1].node);
yyval.node = arg_blk_pass(yyval.node, yyvsp[0].node);
}
break;
case 207:
#line 979 "parse.y"
{
yyval.node = NEW_LIST(NEW_HASH(yyvsp[-1].node));
yyval.node = arg_blk_pass(yyval.node, yyvsp[0].node);
}
break;
case 208:
#line 984 "parse.y"
{
value_expr(yyvsp[-1].node);
yyval.node = arg_concat(NEW_LIST(NEW_HASH(yyvsp[-4].node)), yyvsp[-1].node);
yyval.node = arg_blk_pass(yyval.node, yyvsp[0].node);
}
break;
case 209:
#line 990 "parse.y"
{
yyval.node = list_append(yyvsp[-3].node, NEW_HASH(yyvsp[-1].node));
yyval.node = arg_blk_pass(yyval.node, yyvsp[0].node);
}
break;
case 210:
#line 995 "parse.y"
{
value_expr(yyvsp[-1].node);
yyval.node = arg_concat(list_append(yyvsp[-6].node, NEW_HASH(yyvsp[-4].node)), yyvsp[-1].node);
yyval.node = arg_blk_pass(yyval.node, yyvsp[0].node);
}
break;
case 211:
#line 1001 "parse.y"
{
value_expr(yyvsp[-1].node);
yyval.node = arg_blk_pass(NEW_RESTARGS(yyvsp[-1].node), yyvsp[0].node);
}
break;
case 213:
#line 1007 "parse.y"
{CMDARG_PUSH;}
break;
case 214:
#line 1008 "parse.y"
{
CMDARG_POP;
yyval.node = yyvsp[0].node;
}
break;
case 215:
#line 1014 "parse.y"
{
value_expr(yyvsp[0].node);
yyval.node = NEW_BLOCK_PASS(yyvsp[0].node);
}
break;
case 216:
#line 1020 "parse.y"
{
yyval.node = yyvsp[0].node;
}
break;
case 218:
#line 1026 "parse.y"
{
value_expr(yyvsp[0].node);
yyval.node = NEW_LIST(yyvsp[0].node);
}
break;
case 219:
#line 1031 "parse.y"
{
value_expr(yyvsp[0].node);
yyval.node = list_append(yyvsp[-2].node, yyvsp[0].node);
}
break;
case 220:
#line 1037 "parse.y"
{
value_expr(yyvsp[0].node);
yyval.node = yyvsp[0].node;
}
break;
case 222:
#line 1044 "parse.y"
{
value_expr(yyvsp[0].node);
yyval.node = list_append(yyvsp[-2].node, yyvsp[0].node);
}
break;
case 223:
#line 1049 "parse.y"
{
value_expr(yyvsp[0].node);
yyval.node = arg_concat(yyvsp[-3].node, yyvsp[0].node);
}
break;
case 224:
#line 1054 "parse.y"
{
value_expr(yyvsp[0].node);
yyval.node = yyvsp[0].node;
}
break;
case 225:
#line 1060 "parse.y"
{
yyval.node = yyvsp[0].node;
if (yyvsp[0].node) {
if (nd_type(yyvsp[0].node) == NODE_ARRAY &&
yyvsp[0].node->nd_next == 0) {
yyval.node = yyvsp[0].node->nd_head;
}
else if (nd_type(yyvsp[0].node) == NODE_BLOCK_PASS) {
rb_compile_error("block argument should not be given");
}
}
}
break;
case 226:
#line 1074 "parse.y"
{
yyval.node = NEW_LIT(yyvsp[0].val);
}
break;
case 228:
#line 1079 "parse.y"
{
yyval.node = NEW_XSTR(yyvsp[0].val);
}
break;
case 234:
#line 1088 "parse.y"
{
yyval.node = NEW_VCALL(yyvsp[0].id);
}
break;
case 235:
#line 1097 "parse.y"
{
if (!yyvsp[-3].node && !yyvsp[-2].node && !yyvsp[-1].node)
yyval.node = NEW_BEGIN(yyvsp[-4].node);
else {
if (yyvsp[-3].node) yyvsp[-4].node = NEW_RESCUE(yyvsp[-4].node, yyvsp[-3].node, yyvsp[-2].node);
else if (yyvsp[-2].node) {
rb_warn("else without rescue is useless");
yyvsp[-4].node = block_append(yyvsp[-4].node, yyvsp[-2].node);
}
if (yyvsp[-1].node) yyvsp[-4].node = NEW_ENSURE(yyvsp[-4].node, yyvsp[-1].node);
yyval.node = yyvsp[-4].node;
}
fixpos(yyval.node, yyvsp[-4].node);
}
break;
case 236:
#line 1112 "parse.y"
{
yyval.node = yyvsp[-1].node;
}
break;
case 237:
#line 1116 "parse.y"
{
value_expr(yyvsp[-2].node);
yyval.node = NEW_COLON2(yyvsp[-2].node, yyvsp[0].id);
}
break;
case 238:
#line 1121 "parse.y"
{
yyval.node = NEW_COLON3(yyvsp[0].id);
}
break;
case 239:
#line 1125 "parse.y"
{
value_expr(yyvsp[-3].node);
yyval.node = NEW_CALL(yyvsp[-3].node, tAREF, yyvsp[-1].node);
}
break;
case 240:
#line 1130 "parse.y"
{
if (yyvsp[-1].node == 0)
yyval.node = NEW_ZARRAY();
else {
yyval.node = yyvsp[-1].node;
}
}
break;
case 241:
#line 1138 "parse.y"
{
yyval.node = NEW_HASH(yyvsp[-1].node);
}
break;
case 242:
#line 1142 "parse.y"
{
if (!compile_for_eval && !in_def && !in_single)
yyerror("return appeared outside of method");
value_expr(yyvsp[-1].node);
yyval.node = NEW_RETURN(yyvsp[-1].node);
}
break;
case 243:
#line 1149 "parse.y"
{
if (!compile_for_eval && !in_def && !in_single)
yyerror("return appeared outside of method");
yyval.node = NEW_RETURN(0);
}
break;
case 244:
#line 1155 "parse.y"
{
if (!compile_for_eval && !in_def && !in_single)
yyerror("return appeared outside of method");
yyval.node = NEW_RETURN(0);
}
break;
case 245:
#line 1161 "parse.y"
{
value_expr(yyvsp[-1].node);
yyval.node = NEW_YIELD(yyvsp[-1].node);
}
break;
case 246:
#line 1166 "parse.y"
{
yyval.node = NEW_YIELD(0);
}
break;
case 247:
#line 1170 "parse.y"
{
yyval.node = NEW_YIELD(0);
}
break;
case 248:
#line 1173 "parse.y"
{in_defined = 1;}
break;
case 249:
#line 1174 "parse.y"
{
in_defined = 0;
yyval.node = NEW_DEFINED(yyvsp[-1].node);
}
break;
case 250:
#line 1179 "parse.y"
{
yyvsp[0].node->nd_iter = NEW_FCALL(yyvsp[-1].id, 0);
yyval.node = yyvsp[0].node;
}
break;
case 252:
#line 1185 "parse.y"
{
if (yyvsp[-1].node && nd_type(yyvsp[-1].node) == NODE_BLOCK_PASS) {
rb_compile_error("both block arg and actual block given");
}
yyvsp[0].node->nd_iter = yyvsp[-1].node;
yyval.node = yyvsp[0].node;
fixpos(yyval.node, yyvsp[-1].node);
}
break;
case 253:
#line 1197 "parse.y"
{
value_expr(yyvsp[-4].node);
yyval.node = NEW_IF(cond(yyvsp[-4].node), yyvsp[-2].node, yyvsp[-1].node);
fixpos(yyval.node, yyvsp[-4].node);
}
break;
case 254:
#line 1206 "parse.y"
{
value_expr(yyvsp[-4].node);
yyval.node = NEW_UNLESS(cond(yyvsp[-4].node), yyvsp[-2].node, yyvsp[-1].node);
fixpos(yyval.node, yyvsp[-4].node);
}
break;
case 255:
#line 1211 "parse.y"
{COND_PUSH;}
break;
case 256:
#line 1211 "parse.y"
{COND_POP;}
break;
case 257:
#line 1214 "parse.y"
{
value_expr(yyvsp[-4].node);
yyval.node = NEW_WHILE(cond(yyvsp[-4].node), yyvsp[-1].node, 1);
fixpos(yyval.node, yyvsp[-4].node);
}
break;
case 258:
#line 1219 "parse.y"
{COND_PUSH;}
break;
case 259:
#line 1219 "parse.y"
{COND_POP;}
break;
case 260:
#line 1222 "parse.y"
{
value_expr(yyvsp[-4].node);
yyval.node = NEW_UNTIL(cond(yyvsp[-4].node), yyvsp[-1].node, 1);
fixpos(yyval.node, yyvsp[-4].node);
}
break;
case 261:
#line 1230 "parse.y"
{
value_expr(yyvsp[-3].node);
yyval.node = NEW_CASE(yyvsp[-3].node, yyvsp[-1].node);
fixpos(yyval.node, yyvsp[-3].node);
}
break;
case 262:
#line 1236 "parse.y"
{
yyval.node = yyvsp[-1].node;
}
break;
case 263:
#line 1239 "parse.y"
{COND_PUSH;}
break;
case 264:
#line 1239 "parse.y"
{COND_POP;}
break;
case 265:
#line 1242 "parse.y"
{
value_expr(yyvsp[-4].node);
yyval.node = NEW_FOR(yyvsp[-7].node, yyvsp[-4].node, yyvsp[-1].node);
fixpos(yyval.node, yyvsp[-7].node);
}
break;
case 266:
#line 1248 "parse.y"
{
if (in_def || in_single)
yyerror("class definition in method body");
class_nest++;
local_push();
yyval.num = ruby_sourceline;
}
break;
case 267:
#line 1257 "parse.y"
{
yyval.node = NEW_CLASS(yyvsp[-4].id, yyvsp[-1].node, yyvsp[-3].node);
nd_set_line(yyval.node, yyvsp[-2].num);
local_pop();
class_nest--;
}
break;
case 268:
#line 1264 "parse.y"
{
yyval.num = in_def;
in_def = 0;
}
break;
case 269:
#line 1269 "parse.y"
{
yyval.num = in_single;
in_single = 0;
class_nest++;
local_push();
}
break;
case 270:
#line 1277 "parse.y"
{
yyval.node = NEW_SCLASS(yyvsp[-5].node, yyvsp[-1].node);
fixpos(yyval.node, yyvsp[-5].node);
local_pop();
class_nest--;
in_def = yyvsp[-4].num;
in_single = yyvsp[-2].num;
}
break;
case 271:
#line 1286 "parse.y"
{
if (in_def || in_single)
yyerror("module definition in method body");
class_nest++;
local_push();
yyval.num = ruby_sourceline;
}
break;
case 272:
#line 1295 "parse.y"
{
yyval.node = NEW_MODULE(yyvsp[-3].id, yyvsp[-1].node);
nd_set_line(yyval.node, yyvsp[-2].num);
local_pop();
class_nest--;
}
break;
case 273:
#line 1302 "parse.y"
{
if (in_def || in_single)
yyerror("nested method definition");
yyval.id = cur_mid;
cur_mid = yyvsp[0].id;
in_def++;
local_push();
}
break;
case 274:
#line 1316 "parse.y"
{
if (yyvsp[-3].node) yyvsp[-4].node = NEW_RESCUE(yyvsp[-4].node, yyvsp[-3].node, yyvsp[-2].node);
else if (yyvsp[-2].node) {
rb_warn("else without rescue is useless");
yyvsp[-4].node = block_append(yyvsp[-4].node, yyvsp[-2].node);
}
if (yyvsp[-1].node) yyvsp[-4].node = NEW_ENSURE(yyvsp[-4].node, yyvsp[-1].node);
yyval.node = NEW_DEFN(yyvsp[-7].id, yyvsp[-5].node, yyvsp[-4].node, class_nest?NOEX_PUBLIC:NOEX_PRIVATE);
if (is_attrset_id(yyvsp[-7].id)) yyval.node->nd_noex = NOEX_PUBLIC;
fixpos(yyval.node, yyvsp[-5].node);
local_pop();
in_def--;
cur_mid = yyvsp[-6].id;
}
break;
case 275:
#line 1332 "parse.y"
{lex_state = EXPR_FNAME;}
break;
case 276:
#line 1333 "parse.y"
{
value_expr(yyvsp[-3].node);
in_single++;
local_push();
lex_state = EXPR_END;
}
break;
case 277:
#line 1345 "parse.y"
{
if (yyvsp[-3].node) yyvsp[-4].node = NEW_RESCUE(yyvsp[-4].node, yyvsp[-3].node, yyvsp[-2].node);
else if (yyvsp[-2].node) {
rb_warn("else without rescue is useless");
yyvsp[-4].node = block_append(yyvsp[-4].node, yyvsp[-2].node);
}
if (yyvsp[-1].node) yyvsp[-4].node = NEW_ENSURE(yyvsp[-4].node, yyvsp[-1].node);
yyval.node = NEW_DEFS(yyvsp[-10].node, yyvsp[-7].id, yyvsp[-5].node, yyvsp[-4].node);
fixpos(yyval.node, yyvsp[-10].node);
local_pop();
in_single--;
}
break;
case 278:
#line 1359 "parse.y"
{
yyval.node = NEW_BREAK();
}
break;
case 279:
#line 1363 "parse.y"
{
yyval.node = NEW_NEXT();
}
break;
case 280:
#line 1367 "parse.y"
{
yyval.node = NEW_REDO();
}
break;
case 281:
#line 1371 "parse.y"
{
yyval.node = NEW_RETRY();
}
break;
case 288:
#line 1386 "parse.y"
{
value_expr(yyvsp[-3].node);
yyval.node = NEW_IF(cond(yyvsp[-3].node), yyvsp[-1].node, yyvsp[0].node);
fixpos(yyval.node, yyvsp[-3].node);
}
break;
case 290:
#line 1394 "parse.y"
{
yyval.node = yyvsp[0].node;
}
break;
case 294:
#line 1403 "parse.y"
{
yyval.node = (NODE*)1;
}
break;
case 295:
#line 1407 "parse.y"
{
yyval.node = (NODE*)1;
}
break;
case 296:
#line 1411 "parse.y"
{
yyval.node = yyvsp[-1].node;
}
break;
case 297:
#line 1417 "parse.y"
{
yyval.vars = dyna_push();
}
break;
case 298:
#line 1423 "parse.y"
{
yyval.node = NEW_ITER(yyvsp[-2].node, 0, yyvsp[-1].node);
fixpos(yyval.node, yyvsp[-2].node?yyvsp[-2].node:yyvsp[-1].node);
dyna_pop(yyvsp[-3].vars);
}
break;
case 299:
#line 1430 "parse.y"
{
if (yyvsp[-1].node && nd_type(yyvsp[-1].node) == NODE_BLOCK_PASS) {
rb_compile_error("both block arg and actual block given");
}
yyvsp[0].node->nd_iter = yyvsp[-1].node;
yyval.node = yyvsp[0].node;
fixpos(yyval.node, yyvsp[0].node);
}
break;
case 300:
#line 1439 "parse.y"
{
value_expr(yyvsp[-3].node);
yyval.node = new_call(yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
}
break;
case 301:
#line 1444 "parse.y"
{
value_expr(yyvsp[-3].node);
yyval.node = new_call(yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
}
break;
case 302:
#line 1450 "parse.y"
{
yyval.node = new_fcall(yyvsp[-1].id, yyvsp[0].node);
fixpos(yyval.node, yyvsp[0].node);
}
break;
case 303:
#line 1455 "parse.y"
{
value_expr(yyvsp[-3].node);
yyval.node = new_call(yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
fixpos(yyval.node, yyvsp[-3].node);
}
break;
case 304:
#line 1461 "parse.y"
{
value_expr(yyvsp[-3].node);
yyval.node = new_call(yyvsp[-3].node, yyvsp[-1].id, yyvsp[0].node);
fixpos(yyval.node, yyvsp[-3].node);
}
break;
case 305:
#line 1467 "parse.y"
{
value_expr(yyvsp[-2].node);
yyval.node = new_call(yyvsp[-2].node, yyvsp[0].id, 0);
}
break;
case 306:
#line 1472 "parse.y"
{
if (!compile_for_eval && !in_def &&
!in_single && !in_defined)
yyerror("super called outside of method");
yyval.node = new_super(yyvsp[0].node);
}
break;
case 307:
#line 1479 "parse.y"
{
if (!compile_for_eval && !in_def &&
!in_single && !in_defined)
yyerror("super called outside of method");
yyval.node = NEW_ZSUPER();
}
break;
case 308:
#line 1487 "parse.y"
{
yyval.vars = dyna_push();
}
break;
case 309:
#line 1492 "parse.y"
{
yyval.node = NEW_ITER(yyvsp[-2].node, 0, yyvsp[-1].node);
fixpos(yyval.node, yyvsp[-1].node);
dyna_pop(yyvsp[-3].vars);
}
break;
case 310:
#line 1498 "parse.y"
{
yyval.vars = dyna_push();
}
break;
case 311:
#line 1503 "parse.y"
{
yyval.node = NEW_ITER(yyvsp[-2].node, 0, yyvsp[-1].node);
fixpos(yyval.node, yyvsp[-1].node);
dyna_pop(yyvsp[-3].vars);
}
break;
case 312:
#line 1512 "parse.y"
{
yyval.node = NEW_WHEN(yyvsp[-3].node, yyvsp[-1].node, yyvsp[0].node);
}
break;
case 314:
#line 1518 "parse.y"
{
value_expr(yyvsp[0].node);
yyval.node = list_append(yyvsp[-3].node, NEW_WHEN(yyvsp[0].node, 0, 0));
}
break;
case 315:
#line 1523 "parse.y"
{
value_expr(yyvsp[0].node);
yyval.node = NEW_LIST(NEW_WHEN(yyvsp[0].node, 0, 0));
}
break;
case 320:
#line 1535 "parse.y"
{
yyval.node = yyvsp[0].node;
}
break;
case 322:
#line 1543 "parse.y"
{
if (yyvsp[-3].node) {
yyvsp[-3].node = node_assign(yyvsp[-3].node, NEW_GVAR(rb_intern("$!")));
yyvsp[-1].node = block_append(yyvsp[-3].node, yyvsp[-1].node);
}
yyval.node = NEW_RESBODY(yyvsp[-4].node, yyvsp[-1].node, yyvsp[0].node);
fixpos(yyval.node, yyvsp[-4].node?yyvsp[-4].node:yyvsp[-1].node);
}
break;
case 325:
#line 1555 "parse.y"
{
if (yyvsp[0].node)
yyval.node = yyvsp[0].node;
else
yyval.node = NEW_NIL();
}
break;
case 327:
#line 1565 "parse.y"
{
yyval.val = ID2SYM(yyvsp[0].id);
}
break;
case 329:
#line 1571 "parse.y"
{
yyval.node = NEW_STR(yyvsp[0].val);
}
break;
case 331:
#line 1576 "parse.y"
{
if (nd_type(yyvsp[-1].node) == NODE_DSTR) {
list_append(yyvsp[-1].node, NEW_STR(yyvsp[0].val));
}
else {
rb_str_concat(yyvsp[-1].node->nd_lit, yyvsp[0].val);
}
yyval.node = yyvsp[-1].node;
}
break;
case 332:
#line 1586 "parse.y"
{
if (nd_type(yyvsp[-1].node) == NODE_STR) {
yyval.node = NEW_DSTR(yyvsp[-1].node->nd_lit);
}
else {
yyval.node = yyvsp[-1].node;
}
yyvsp[0].node->nd_head = NEW_STR(yyvsp[0].node->nd_lit);
nd_set_type(yyvsp[0].node, NODE_ARRAY);
list_concat(yyval.node, yyvsp[0].node);
}
break;
case 333:
#line 1599 "parse.y"
{
lex_state = EXPR_END;
yyval.id = yyvsp[0].id;
}
break;
case 345:
#line 1617 "parse.y"
{yyval.id = kNIL;}
break;
case 346:
#line 1618 "parse.y"
{yyval.id = kSELF;}
break;
case 347:
#line 1619 "parse.y"
{yyval.id = kTRUE;}
break;
case 348:
#line 1620 "parse.y"
{yyval.id = kFALSE;}
break;
case 349:
#line 1621 "parse.y"
{yyval.id = k__FILE__;}
break;
case 350:
#line 1622 "parse.y"
{yyval.id = k__LINE__;}
break;
case 351:
#line 1625 "parse.y"
{
yyval.node = gettable(yyvsp[0].id);
}
break;
case 354:
#line 1633 "parse.y"
{
yyval.node = 0;
}
break;
case 355:
#line 1637 "parse.y"
{
lex_state = EXPR_BEG;
}
break;
case 356:
#line 1641 "parse.y"
{
yyval.node = yyvsp[-1].node;
}
break;
case 357:
#line 1644 "parse.y"
{yyerrok; yyval.node = 0;}
break;
case 358:
#line 1647 "parse.y"
{
yyval.node = yyvsp[-2].node;
lex_state = EXPR_BEG;
}
break;
case 359:
#line 1652 "parse.y"
{
yyval.node = yyvsp[-1].node;
}
break;
case 360:
#line 1657 "parse.y"
{
yyval.node = block_append(NEW_ARGS(yyvsp[-5].num, yyvsp[-3].node, yyvsp[-1].id), yyvsp[0].node);
}
break;
case 361:
#line 1661 "parse.y"
{
yyval.node = block_append(NEW_ARGS(yyvsp[-3].num, yyvsp[-1].node, -1), yyvsp[0].node);
}
break;
case 362:
#line 1665 "parse.y"
{
yyval.node = block_append(NEW_ARGS(yyvsp[-3].num, 0, yyvsp[-1].id), yyvsp[0].node);
}
break;
case 363:
#line 1669 "parse.y"
{
yyval.node = block_append(NEW_ARGS(yyvsp[-1].num, 0, -1), yyvsp[0].node);
}
break;
case 364:
#line 1673 "parse.y"
{
yyval.node = block_append(NEW_ARGS(0, yyvsp[-3].node, yyvsp[-1].id), yyvsp[0].node);
}
break;
case 365:
#line 1677 "parse.y"
{
yyval.node = block_append(NEW_ARGS(0, yyvsp[-1].node, -1), yyvsp[0].node);
}
break;
case 366:
#line 1681 "parse.y"
{
yyval.node = block_append(NEW_ARGS(0, 0, yyvsp[-1].id), yyvsp[0].node);
}
break;
case 367:
#line 1685 "parse.y"
{
yyval.node = block_append(NEW_ARGS(0, 0, -1), yyvsp[0].node);
}
break;
case 368:
#line 1689 "parse.y"
{
yyval.node = NEW_ARGS(0, 0, -1);
}
break;
case 369:
#line 1694 "parse.y"
{
yyerror("formal argument cannot be a constant");
}
break;
case 370:
#line 1698 "parse.y"
{
yyerror("formal argument cannot be an instance variable");
}
break;
case 371:
#line 1702 "parse.y"
{
yyerror("formal argument cannot be a global variable");
}
break;
case 372:
#line 1706 "parse.y"
{
yyerror("formal argument cannot be a class variable");
}
break;
case 373:
#line 1710 "parse.y"
{
if (!is_local_id(yyvsp[0].id))
yyerror("formal argument must be local variable");
else if (local_id(yyvsp[0].id))
yyerror("duplicate argument name");
local_cnt(yyvsp[0].id);
yyval.num = 1;
}
break;
case 375:
#line 1721 "parse.y"
{
yyval.num += 1;
}
break;
case 376:
#line 1726 "parse.y"
{
if (!is_local_id(yyvsp[-2].id))
yyerror("formal argument must be local variable");
else if (local_id(yyvsp[-2].id))
yyerror("duplicate optional argument name");
yyval.node = assignable(yyvsp[-2].id, yyvsp[0].node);
}
break;
case 377:
#line 1735 "parse.y"
{
yyval.node = NEW_BLOCK(yyvsp[0].node);
yyval.node->nd_end = yyval.node;
}
break;
case 378:
#line 1740 "parse.y"
{
yyval.node = block_append(yyvsp[-2].node, yyvsp[0].node);
}
break;
case 379:
#line 1745 "parse.y"
{
if (!is_local_id(yyvsp[0].id))
yyerror("rest argument must be local variable");
else if (local_id(yyvsp[0].id))
yyerror("duplicate rest argument name");
yyval.id = local_cnt(yyvsp[0].id);
}
break;
case 380:
#line 1753 "parse.y"
{
yyval.id = -2;
}
break;
case 381:
#line 1758 "parse.y"
{
if (!is_local_id(yyvsp[0].id))
yyerror("block argument must be local variable");
else if (local_id(yyvsp[0].id))
yyerror("duplicate block argument name");
yyval.node = NEW_BLOCK_ARG(yyvsp[0].id);
}
break;
case 382:
#line 1767 "parse.y"
{
yyval.node = yyvsp[0].node;
}
break;
case 384:
#line 1773 "parse.y"
{
if (nd_type(yyvsp[0].node) == NODE_SELF) {
yyval.node = NEW_SELF();
}
else {
yyval.node = yyvsp[0].node;
}
}
break;
case 385:
#line 1781 "parse.y"
{lex_state = EXPR_BEG;}
break;
case 386:
#line 1782 "parse.y"
{
switch (nd_type(yyvsp[-2].node)) {
case NODE_STR:
case NODE_DSTR:
case NODE_XSTR:
case NODE_DXSTR:
case NODE_DREGX:
case NODE_LIT:
case NODE_ARRAY:
case NODE_ZARRAY:
yyerror("can't define single method for literals.");
default:
break;
}
yyval.node = yyvsp[-2].node;
}
break;
case 388:
#line 1801 "parse.y"
{
yyval.node = yyvsp[-1].node;
}
break;
case 389:
#line 1805 "parse.y"
{
if (yyvsp[-1].node->nd_alen%2 != 0) {
yyerror("odd number list for Hash");
}
yyval.node = yyvsp[-1].node;
}
break;
case 391:
#line 1814 "parse.y"
{
yyval.node = list_concat(yyvsp[-2].node, yyvsp[0].node);
}
break;
case 392:
#line 1819 "parse.y"
{
yyval.node = list_append(NEW_LIST(yyvsp[-2].node), yyvsp[0].node);
}
break;
case 412:
#line 1849 "parse.y"
{yyerrok;}
break;
case 415:
#line 1853 "parse.y"
{yyerrok;}
break;
case 416:
#line 1856 "parse.y"
{
yyval.node = 0;
}
break;
}
#line 727 "/usr/share/bison/bison.simple"
yyvsp -= yylen;
yyssp -= yylen;
#if YYLSP_NEEDED
yylsp -= yylen;
#endif
#if YYDEBUG
if (yydebug)
{
short *yyssp1 = yyss - 1;
YYFPRINTF (stderr, "state stack now");
while (yyssp1 != yyssp)
YYFPRINTF (stderr, " %d", *++yyssp1);
YYFPRINTF (stderr, "\n");
}
#endif
*++yyvsp = yyval;
#if YYLSP_NEEDED
*++yylsp = yyloc;
#endif
yyn = yyr1[yyn];
yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
yystate = yytable[yystate];
else
yystate = yydefgoto[yyn - YYNTBASE];
goto yynewstate;
yyerrlab:
if (!yyerrstatus)
{
++yynerrs;
#ifdef YYERROR_VERBOSE
yyn = yypact[yystate];
if (yyn > YYFLAG && yyn < YYLAST)
{
YYSIZE_T yysize = 0;
char *yymsg;
int yyx, yycount;
yycount = 0;
for (yyx = yyn < 0 ? -yyn : 0;
yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
if (yycheck[yyx + yyn] == yyx)
yysize += yystrlen (yytname[yyx]) + 15, yycount++;
yysize += yystrlen ("parse error, unexpected ") + 1;
yysize += yystrlen (yytname[YYTRANSLATE (yychar)]);
yymsg = (char *) YYSTACK_ALLOC (yysize);
if (yymsg != 0)
{
char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]);
if (yycount < 5)
{
yycount = 0;
for (yyx = yyn < 0 ? -yyn : 0;
yyx < (int) (sizeof (yytname) / sizeof (char *));
yyx++)
if (yycheck[yyx + yyn] == yyx)
{
const char *yyq = ! yycount ? ", expecting " : " or ";
yyp = yystpcpy (yyp, yyq);
yyp = yystpcpy (yyp, yytname[yyx]);
yycount++;
}
}
yyerror (yymsg);
YYSTACK_FREE (yymsg);
}
else
yyerror ("parse error; also virtual memory exhausted");
}
else
#endif
yyerror ("parse error");
}
goto yyerrlab1;
yyerrlab1:
if (yyerrstatus == 3)
{
if (yychar == YYEOF)
YYABORT;
YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
yychar, yytname[yychar1]));
yychar = YYEMPTY;
}
yyerrstatus = 3;
goto yyerrhandle;
yyerrdefault:
#if 0
yyn = yydefact[yystate];
if (yyn)
goto yydefault;
#endif
yyerrpop:
if (yyssp == yyss)
YYABORT;
yyvsp--;
yystate = *--yyssp;
#if YYLSP_NEEDED
yylsp--;
#endif
#if YYDEBUG
if (yydebug)
{
short *yyssp1 = yyss - 1;
YYFPRINTF (stderr, "Error: state stack now");
while (yyssp1 != yyssp)
YYFPRINTF (stderr, " %d", *++yyssp1);
YYFPRINTF (stderr, "\n");
}
#endif
yyerrhandle:
yyn = yypact[yystate];
if (yyn == YYFLAG)
goto yyerrdefault;
yyn += YYTERROR;
if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
goto yyerrdefault;
yyn = yytable[yyn];
if (yyn < 0)
{
if (yyn == YYFLAG)
goto yyerrpop;
yyn = -yyn;
goto yyreduce;
}
else if (yyn == 0)
goto yyerrpop;
if (yyn == YYFINAL)
YYACCEPT;
YYDPRINTF ((stderr, "Shifting error token, "));
*++yyvsp = yylval;
#if YYLSP_NEEDED
*++yylsp = yylloc;
#endif
yystate = yyn;
goto yynewstate;
yyacceptlab:
yyresult = 0;
goto yyreturn;
yyabortlab:
yyresult = 1;
goto yyreturn;
yyoverflowlab:
yyerror ("parser stack overflow");
yyresult = 2;
yyreturn:
#ifndef yyoverflow
if (yyss != yyssa)
YYSTACK_FREE (yyss);
#endif
return yyresult;
}
#line 1859 "parse.y"
#include <ctype.h>
#include <sys/types.h>
#include "regex.h"
#include "util.h"
#undef SIGN_EXTEND_CHAR
#if __STDC__
# define SIGN_EXTEND_CHAR(c) ((signed char)(c))
#else
# define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
#endif
#define is_identchar(c) (SIGN_EXTEND_CHAR(c)!=-1&&(ISALNUM(c) || (c) == '_' || ismbchar(c)))
static char *tokenbuf = NULL;
static int tokidx, toksiz = 0;
static NODE *str_extend _((NODE*,int,int));
#define LEAVE_BS 1
static VALUE (*lex_gets)();
static VALUE lex_input;
static VALUE lex_lastline;
static char *lex_pbeg;
static char *lex_p;
static char *lex_pend;
static int
yyerror(msg)
char *msg;
{
char *p, *pe, *buf;
int len, i;
rb_compile_error("%s", msg);
p = lex_p;
while (lex_pbeg <= p) {
if (*p == '\n') break;
p--;
}
p++;
pe = lex_p;
while (pe < lex_pend) {
if (*pe == '\n') break;
pe++;
}
len = pe - p;
if (len > 4) {
buf = ALLOCA_N(char, len+2);
MEMCPY(buf, p, char, len);
buf[len] = '\0';
rb_compile_error_append("%s", buf);
i = lex_p - p;
p = buf; pe = p + len;
while (p < pe) {
if (*p != '\t') *p = ' ';
p++;
}
buf[i] = '^';
buf[i+1] = '\0';
rb_compile_error_append("%s", buf);
}
return 0;
}
static int heredoc_end;
int ruby_in_compile = 0;
int ruby__end__seen;
static VALUE ruby_debug_lines;
static NODE*
yycompile(f, line)
char *f;
int line;
{
int n;
NODE *node = 0;
if (!compile_for_eval && rb_safe_level() == 0 &&
rb_const_defined(rb_cObject, rb_intern("SCRIPT_LINES__"))) {
VALUE hash, fname;
hash = rb_const_get(rb_cObject, rb_intern("SCRIPT_LINES__"));
if (TYPE(hash) == T_HASH) {
fname = rb_str_new2(f);
ruby_debug_lines = rb_hash_aref(hash, fname);
if (NIL_P(ruby_debug_lines)) {
ruby_debug_lines = rb_ary_new();
rb_hash_aset(hash, fname, ruby_debug_lines);
}
}
if (line > 1) {
VALUE str = rb_str_new(0,0);
while (line > 1) {
rb_ary_push(ruby_debug_lines, str);
line--;
}
}
}
ruby__end__seen = 0;
ruby_eval_tree = 0;
heredoc_end = 0;
ruby_sourcefile = strdup(f);
ruby_in_compile = 1;
n = yyparse();
ruby_debug_lines = 0;
compile_for_eval = 0;
ruby_in_compile = 0;
cond_nest = 0;
cond_stack = 0;
cmdarg_stack = 0;
class_nest = 0;
in_single = 0;
in_def = 0;
cur_mid = 0;
if (n == 0) node = ruby_eval_tree;
return node;
}
static int lex_gets_ptr;
static VALUE
lex_get_str(s)
VALUE s;
{
char *beg, *end, *pend;
beg = RSTRING(s)->ptr;
if (lex_gets_ptr) {
if (RSTRING(s)->len == lex_gets_ptr) return Qnil;
beg += lex_gets_ptr;
}
pend = RSTRING(s)->ptr + RSTRING(s)->len;
end = beg;
while (end < pend) {
if (*end++ == '\n') break;
}
lex_gets_ptr = end - RSTRING(s)->ptr;
return rb_str_new(beg, end - beg);
}
static VALUE
lex_getline()
{
VALUE line = (*lex_gets)(lex_input);
if (ruby_debug_lines && !NIL_P(line)) {
rb_ary_push(ruby_debug_lines, line);
}
return line;
}
NODE*
rb_compile_string(f, s, line)
const char *f;
VALUE s;
int line;
{
lex_gets = lex_get_str;
lex_gets_ptr = 0;
lex_input = s;
lex_pbeg = lex_p = lex_pend = 0;
ruby_sourceline = line - 1;
compile_for_eval = ruby_in_eval;
return yycompile(f, line);
}
NODE*
rb_compile_cstr(f, s, len, line)
const char *f, *s;
int len, line;
{
return rb_compile_string(f, rb_str_new(s, len), line);
}
NODE*
rb_compile_file(f, file, start)
const char *f;
VALUE file;
int start;
{
lex_gets = rb_io_gets;
lex_input = file;
lex_pbeg = lex_p = lex_pend = 0;
ruby_sourceline = start - 1;
return yycompile(f, start);
}
static inline int
nextc()
{
int c;
if (lex_p == lex_pend) {
if (lex_input) {
VALUE v = lex_getline();
if (NIL_P(v)) return -1;
if (heredoc_end > 0) {
ruby_sourceline = heredoc_end;
heredoc_end = 0;
}
ruby_sourceline++;
lex_pbeg = lex_p = RSTRING(v)->ptr;
lex_pend = lex_p + RSTRING(v)->len;
if (strncmp(lex_pbeg, "__END__", 7) == 0 &&
(RSTRING(v)->len == 7 || lex_pbeg[7] == '\n' || lex_pbeg[7] == '\r')) {
ruby__end__seen = 1;
lex_lastline = 0;
return -1;
}
lex_lastline = v;
}
else {
lex_lastline = 0;
return -1;
}
}
c = (unsigned char)*lex_p++;
if (c == '\r' && lex_p <= lex_pend && *lex_p == '\n') {
lex_p++;
c = '\n';
}
return c;
}
static void
pushback(c)
int c;
{
if (c == -1) return;
lex_p--;
}
#define peek(c) (lex_p != lex_pend && (c) == *lex_p)
#define tokfix() (tokenbuf[tokidx]='\0')
#define tok() tokenbuf
#define toklen() tokidx
#define toklast() (tokidx>0?tokenbuf[tokidx-1]:0)
static char*
newtok()
{
tokidx = 0;
if (!tokenbuf) {
toksiz = 60;
tokenbuf = ALLOC_N(char, 60);
}
if (toksiz > 4096) {
toksiz = 60;
REALLOC_N(tokenbuf, char, 60);
}
return tokenbuf;
}
static void
tokadd(c)
char c;
{
tokenbuf[tokidx++] = c;
if (tokidx >= toksiz) {
toksiz *= 2;
REALLOC_N(tokenbuf, char, toksiz);
}
}
static int
read_escape()
{
int c;
switch (c = nextc()) {
case '\\':
return c;
case 'n':
return '\n';
case 't':
return '\t';
case 'r':
return '\r';
case 'f':
return '\f';
case 'v':
return '\13';
case 'a':
return '\007';
case 'e':
return 033;
case '0': case '1': case '2': case '3':
case '4': case '5': case '6': case '7':
{
char buf[3];
int i;
pushback(c);
for (i=0; i<3; i++) {
c = nextc();
if (c == -1) goto eof;
if (c < '0' || '7' < c) {
pushback(c);
break;
}
buf[i] = c;
}
c = scan_oct(buf, i, &i);
}
return c;
case 'x':
{
int numlen;
c = scan_hex(lex_p, 2, &numlen);
lex_p += numlen;
}
return c;
case 'b':
return '\010';
case 's':
return ' ';
case 'M':
if ((c = nextc()) != '-') {
yyerror("Invalid escape character syntax");
pushback(c);
return '\0';
}
if ((c = nextc()) == '\\') {
return read_escape() | 0x80;
}
else if (c == -1) goto eof;
else {
return ((c & 0xff) | 0x80);
}
case 'C':
if ((c = nextc()) != '-') {
yyerror("Invalid escape character syntax");
pushback(c);
return '\0';
}
case 'c':
if ((c = nextc())== '\\') {
c = read_escape();
}
else if (c == '?')
return 0177;
else if (c == -1) goto eof;
return c & 0x9f;
eof:
case -1:
yyerror("Invalid escape character syntax");
return '\0';
default:
return c;
}
}
static int
tokadd_escape(term)
int term;
{
int c;
switch (c = nextc()) {
case '\n':
return 0;
case '0': case '1': case '2': case '3':
case '4': case '5': case '6': case '7':
{
int i;
tokadd('\\');
tokadd(c);
for (i=0; i<2; i++) {
c = nextc();
if (c == -1) goto eof;
if (c < '0' || '7' < c) {
pushback(c);
break;
}
tokadd(c);
}
}
return 0;
case 'x':
{
int numlen;
tokadd('\\');
tokadd(c);
scan_hex(lex_p, 2, &numlen);
while (numlen--)
tokadd(nextc());
}
return 0;
case 'M':
if ((c = nextc()) != '-') {
yyerror("Invalid escape character syntax");
pushback(c);
return 0;
}
tokadd('\\'); tokadd('M'); tokadd('-');
goto escaped;
case 'C':
if ((c = nextc()) != '-') {
yyerror("Invalid escape character syntax");
pushback(c);
return 0;
}
tokadd('\\'); tokadd('C'); tokadd('-');
goto escaped;
case 'c':
tokadd('\\'); tokadd('c');
escaped:
if ((c = nextc()) == '\\') {
return tokadd_escape(term);
}
else if (c == -1) goto eof;
tokadd(c);
return 0;
eof:
case -1:
yyerror("Invalid escape character syntax");
return -1;
default:
if (c != term)
tokadd('\\');
tokadd(c);
}
return 0;
}
static int
parse_regx(term, paren)
int term, paren;
{
register int c;
char kcode = 0;
int once = 0;
int nest = 0;
int options = 0;
int re_start = ruby_sourceline;
NODE *list = 0;
newtok();
while ((c = nextc()) != -1) {
if (c == term && nest == 0) {
goto regx_end;
}
switch (c) {
case '#':
list = str_extend(list, term, paren);
if (list == (NODE*)-1) goto unterminated;
continue;
case '\\':
if (tokadd_escape(term) < 0)
return 0;
continue;
case -1:
goto unterminated;
default:
if (paren) {
if (c == paren) nest++;
if (c == term) nest--;
}
if (ismbchar(c)) {
int i, len = mbclen(c)-1;
for (i = 0; i < len; i++) {
tokadd(c);
c = nextc();
}
}
break;
regx_end:
for (;;) {
switch (c = nextc()) {
case 'i':
options |= RE_OPTION_IGNORECASE;
break;
case 'x':
options |= RE_OPTION_EXTENDED;
break;
case 'p':
rb_warn("/p option is obsolete; use /m\n\tnote: /m does not change ^, $ behavior");
options |= RE_OPTION_POSIXLINE;
break;
case 'm':
options |= RE_OPTION_MULTILINE;
break;
case 'o':
once = 1;
break;
case 'n':
kcode = 16;
break;
case 'e':
kcode = 32;
break;
case 's':
kcode = 48;
break;
case 'u':
kcode = 64;
break;
default:
pushback(c);
goto end_options;
}
}
end_options:
tokfix();
lex_state = EXPR_END;
if (list) {
nd_set_line(list, re_start);
if (toklen() > 0) {
VALUE ss = rb_str_new(tok(), toklen());
list_append(list, NEW_STR(ss));
}
nd_set_type(list, once?NODE_DREGX_ONCE:NODE_DREGX);
list->nd_cflag = options | kcode;
yylval.node = list;
return tDREGEXP;
}
else {
yylval.val = rb_reg_new(tok(), toklen(), options | kcode);
return tREGEXP;
}
}
tokadd(c);
}
unterminated:
ruby_sourceline = re_start;
rb_compile_error("unterminated regexp meets end of file");
return 0;
}
static int parse_qstring _((int,int));
static int
parse_string(func, term, paren)
int func, term, paren;
{
int c;
NODE *list = 0;
int strstart;
int nest = 0;
if (func == '\'') {
return parse_qstring(term, paren);
}
if (func == 0) {
yylval.val = rb_str_new(lex_pbeg, lex_pend - lex_pbeg - 1);
lex_p = lex_pend;
return tSTRING;
}
strstart = ruby_sourceline;
newtok();
while ((c = nextc()) != term || nest > 0) {
if (c == -1) {
unterm_str:
ruby_sourceline = strstart;
rb_compile_error("unterminated string meets end of file");
return 0;
}
if (ismbchar(c)) {
int i, len = mbclen(c)-1;
for (i = 0; i < len; i++) {
tokadd(c);
c = nextc();
}
}
else if (c == '#') {
list = str_extend(list, term, paren);
if (list == (NODE*)-1) goto unterm_str;
continue;
}
else if (c == '\\') {
c = nextc();
if (c == '\n')
continue;
if (c == term) {
tokadd(c);
}
else {
pushback(c);
if (func != '"') tokadd('\\');
tokadd(read_escape());
}
continue;
}
if (paren) {
if (c == paren) nest++;
if (c == term && nest-- == 0) break;
}
tokadd(c);
}
tokfix();
lex_state = EXPR_END;
if (list) {
nd_set_line(list, strstart);
if (toklen() > 0) {
VALUE ss = rb_str_new(tok(), toklen());
list_append(list, NEW_STR(ss));
}
yylval.node = list;
if (func == '`') {
nd_set_type(list, NODE_DXSTR);
return tDXSTRING;
}
else {
return tDSTRING;
}
}
else {
yylval.val = rb_str_new(tok(), toklen());
return (func == '`') ? tXSTRING : tSTRING;
}
}
static int
parse_qstring(term, paren)
int term, paren;
{
int strstart;
int c;
int nest = 0;
strstart = ruby_sourceline;
newtok();
while ((c = nextc()) != term || nest > 0) {
if (c == -1) {
ruby_sourceline = strstart;
rb_compile_error("unterminated string meets end of file");
return 0;
}
if (ismbchar(c)) {
int i, len = mbclen(c)-1;
for (i = 0; i < len; i++) {
tokadd(c);
c = nextc();
}
}
else if (c == '\\') {
c = nextc();
switch (c) {
case '\n':
continue;
case '\\':
c = '\\';
break;
default:
if (c == term || (paren && c == paren)) {
tokadd(c);
continue;
}
tokadd('\\');
}
}
if (paren) {
if (c == paren) nest++;
if (c == term && nest-- == 0) break;
}
tokadd(c);
}
tokfix();
yylval.val = rb_str_new(tok(), toklen());
lex_state = EXPR_END;
return tSTRING;
}
static int
parse_quotedwords(term, paren)
int term, paren;
{
NODE *qwords = 0;
int strstart;
int c;
int nest = 0;
strstart = ruby_sourceline;
newtok();
while (c = nextc(),ISSPACE(c))
;
pushback(c);
while ((c = nextc()) != term || nest > 0) {
if (c == -1) {
ruby_sourceline = strstart;
rb_compile_error("unterminated string meets end of file");
return 0;
}
if (ismbchar(c)) {
int i, len = mbclen(c)-1;
for (i = 0; i < len; i++) {
tokadd(c);
c = nextc();
}
}
else if (c == '\\') {
c = nextc();
switch (c) {
case '\n':
continue;
case '\\':
c = '\\';
break;
default:
if (c == term || (paren && c == paren)) {
tokadd(c);
continue;
}
if (!ISSPACE(c))
tokadd('\\');
break;
}
}
else if (ISSPACE(c)) {
NODE *str;
tokfix();
str = NEW_STR(rb_str_new(tok(), toklen()));
newtok();
if (!qwords) qwords = NEW_LIST(str);
else list_append(qwords, str);
while (c = nextc(),ISSPACE(c))
;
pushback(c);
continue;
}
if (paren) {
if (c == paren) nest++;
if (c == term && nest-- == 0) break;
}
tokadd(c);
}
tokfix();
if (toklen() > 0) {
NODE *str;
str = NEW_STR(rb_str_new(tok(), toklen()));
if (!qwords) qwords = NEW_LIST(str);
else list_append(qwords, str);
}
if (!qwords) qwords = NEW_ZARRAY();
yylval.node = qwords;
lex_state = EXPR_END;
return tQWORDS;
}
static int
here_document(term, indent)
char term;
int indent;
{
int c;
char *eos, *p;
int len;
VALUE str;
volatile VALUE line = 0;
VALUE lastline_save;
int offset_save;
NODE *list = 0;
int linesave = ruby_sourceline;
newtok();
switch (term) {
case '\'':
case '"':
case '`':
while ((c = nextc()) != term) {
tokadd(c);
}
if (term == '\'') term = 0;
break;
default:
c = term;
term = '"';
if (!is_identchar(c)) {
rb_warn("use of bare << to mean <<\"\" is deprecated");
break;
}
while (is_identchar(c)) {
tokadd(c);
c = nextc();
}
pushback(c);
break;
}
tokfix();
lastline_save = lex_lastline;
offset_save = lex_p - lex_pbeg;
eos = strdup(tok());
len = strlen(eos);
str = rb_str_new(0,0);
for (;;) {
lex_lastline = line = lex_getline();
if (NIL_P(line)) {
error:
ruby_sourceline = linesave;
rb_compile_error("can't find string \"%s\" anywhere before EOF", eos);
free(eos);
return 0;
}
ruby_sourceline++;
p = RSTRING(line)->ptr;
if (indent) {
while (*p && (*p == ' ' || *p == '\t')) {
p++;
}
}
if (strncmp(eos, p, len) == 0) {
if (p[len] == '\n' || p[len] == '\r')
break;
if (len == RSTRING(line)->len)
break;
}
lex_pbeg = lex_p = RSTRING(line)->ptr;
lex_pend = lex_p + RSTRING(line)->len;
#if 0
if (indent) {
while (*lex_p && *lex_p == '\t') {
lex_p++;
}
}
#endif
retry:
switch (parse_string(term, '\n', '\n')) {
case tSTRING:
case tXSTRING:
rb_str_cat2(yylval.val, "\n");
if (!list) {
rb_str_append(str, yylval.val);
}
else {
list_append(list, NEW_STR(yylval.val));
}
break;
case tDSTRING:
if (!list) list = NEW_DSTR(str);
case tDXSTRING:
if (!list) list = NEW_DXSTR(str);
list_append(yylval.node, NEW_STR(rb_str_new2("\n")));
nd_set_type(yylval.node, NODE_STR);
yylval.node = NEW_LIST(yylval.node);
yylval.node->nd_next = yylval.node->nd_head->nd_next;
list_concat(list, yylval.node);
break;
case 0:
goto error;
}
if (lex_p != lex_pend) {
goto retry;
}
}
free(eos);
lex_lastline = lastline_save;
lex_pbeg = RSTRING(lex_lastline)->ptr;
lex_pend = lex_pbeg + RSTRING(lex_lastline)->len;
lex_p = lex_pbeg + offset_save;
lex_state = EXPR_END;
heredoc_end = ruby_sourceline;
ruby_sourceline = linesave;
if (list) {
nd_set_line(list, linesave+1);
yylval.node = list;
}
switch (term) {
case '\0':
case '\'':
case '"':
if (list) return tDSTRING;
yylval.val = str;
return tSTRING;
case '`':
if (list) return tDXSTRING;
yylval.val = str;
return tXSTRING;
}
return 0;
}
#include "lex.c"
static void
arg_ambiguous()
{
rb_warning("ambiguous first argument; make sure");
}
#if !defined(strtod) && !defined(HAVE_STDLIB_H)
double strtod ();
#endif
static int
yylex()
{
register int c;
int space_seen = 0;
struct kwtable *kw;
retry:
switch (c = nextc()) {
case '\0':
case '\004':
case '\032':
case -1:
return 0;
case ' ': case '\t': case '\f': case '\r':
case '\13':
space_seen++;
goto retry;
case '#':
while ((c = nextc()) != '\n') {
if (c == -1)
return 0;
}
case '\n':
switch (lex_state) {
case EXPR_BEG:
case EXPR_FNAME:
case EXPR_DOT:
goto retry;
default:
break;
}
lex_state = EXPR_BEG;
return '\n';
case '*':
if ((c = nextc()) == '*') {
if (nextc() == '=') {
lex_state = EXPR_BEG;
yylval.id = tPOW;
return tOP_ASGN;
}
pushback(c);
c = tPOW;
}
else {
if (c == '=') {
yylval.id = '*';
lex_state = EXPR_BEG;
return tOP_ASGN;
}
pushback(c);
if (lex_state == EXPR_ARG && space_seen && !ISSPACE(c)){
rb_warning("`*' interpreted as argument prefix");
c = tSTAR;
}
else if (lex_state == EXPR_BEG || lex_state == EXPR_MID) {
c = tSTAR;
}
else {
c = '*';
}
}
switch (lex_state) {
case EXPR_FNAME: case EXPR_DOT:
lex_state = EXPR_ARG; break;
default:
lex_state = EXPR_BEG; break;
}
return c;
case '!':
lex_state = EXPR_BEG;
if ((c = nextc()) == '=') {
return tNEQ;
}
if (c == '~') {
return tNMATCH;
}
pushback(c);
return '!';
case '=':
if (lex_p == lex_pbeg + 1) {
if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
for (;;) {
lex_p = lex_pend;
c = nextc();
if (c == -1) {
rb_compile_error("embedded document meets end of file");
return 0;
}
if (c != '=') continue;
if (strncmp(lex_p, "end", 3) == 0 &&
(lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
break;
}
}
lex_p = lex_pend;
goto retry;
}
}
switch (lex_state) {
case EXPR_FNAME: case EXPR_DOT:
lex_state = EXPR_ARG; break;
default:
lex_state = EXPR_BEG; break;
}
if ((c = nextc()) == '=') {
if ((c = nextc()) == '=') {
return tEQQ;
}
pushback(c);
return tEQ;
}
if (c == '~') {
return tMATCH;
}
else if (c == '>') {
return tASSOC;
}
pushback(c);
return '=';
case '<':
c = nextc();
if (c == '<' &&
lex_state != EXPR_END && lex_state != EXPR_CLASS &&
(lex_state != EXPR_ARG || space_seen)) {
int c2 = nextc();
int indent = 0;
if (c2 == '-') {
indent = 1;
c2 = nextc();
}
if (!ISSPACE(c2) && (strchr("\"'`", c2) || is_identchar(c2))) {
return here_document(c2, indent);
}
pushback(c2);
}
switch (lex_state) {
case EXPR_FNAME: case EXPR_DOT:
lex_state = EXPR_ARG; break;
default:
lex_state = EXPR_BEG; break;
}
if (c == '=') {
if ((c = nextc()) == '>') {
return tCMP;
}
pushback(c);
return tLEQ;
}
if (c == '<') {
if (nextc() == '=') {
lex_state = EXPR_BEG;
yylval.id = tLSHFT;
return tOP_ASGN;
}
pushback(c);
return tLSHFT;
}
pushback(c);
return '<';
case '>':
switch (lex_state) {
case EXPR_FNAME: case EXPR_DOT:
lex_state = EXPR_ARG; break;
default:
lex_state = EXPR_BEG; break;
}
if ((c = nextc()) == '=') {
return tGEQ;
}
if (c == '>') {
if ((c = nextc()) == '=') {
lex_state = EXPR_BEG;
yylval.id = tRSHFT;
return tOP_ASGN;
}
pushback(c);
return tRSHFT;
}
pushback(c);
return '>';
case '"':
return parse_string(c,c,c);
case '`':
if (lex_state == EXPR_FNAME) return c;
if (lex_state == EXPR_DOT) return c;
return parse_string(c,c,c);
case '\'':
return parse_qstring(c,0);
case '?':
if (lex_state == EXPR_END) {
lex_state = EXPR_BEG;
return '?';
}
c = nextc();
if (c == -1) {
rb_compile_error("incomplete character syntax");
return 0;
}
if (lex_state == EXPR_ARG && ISSPACE(c)){
pushback(c);
lex_state = EXPR_BEG;
return '?';
}
if (c == '\\') {
c = read_escape();
}
c &= 0xff;
yylval.val = INT2FIX(c);
lex_state = EXPR_END;
return tINTEGER;
case '&':
if ((c = nextc()) == '&') {
lex_state = EXPR_BEG;
if ((c = nextc()) == '=') {
yylval.id = tANDOP;
return tOP_ASGN;
}
pushback(c);
return tANDOP;
}
else if (c == '=') {
yylval.id = '&';
lex_state = EXPR_BEG;
return tOP_ASGN;
}
pushback(c);
if (lex_state == EXPR_ARG && space_seen && !ISSPACE(c)){
rb_warning("`&' interpreted as argument prefix");
c = tAMPER;
}
else if (lex_state == EXPR_BEG || lex_state == EXPR_MID) {
c = tAMPER;
}
else {
c = '&';
}
switch (lex_state) {
case EXPR_FNAME: case EXPR_DOT:
lex_state = EXPR_ARG; break;
default:
lex_state = EXPR_BEG;
}
return c;
case '|':
if ((c = nextc()) == '|') {
lex_state = EXPR_BEG;
if ((c = nextc()) == '=') {
yylval.id = tOROP;
return tOP_ASGN;
}
pushback(c);
return tOROP;
}
if (c == '=') {
lex_state = EXPR_BEG;
yylval.id = '|';
return tOP_ASGN;
}
if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
lex_state = EXPR_ARG;
}
else {
lex_state = EXPR_BEG;
}
pushback(c);
return '|';
case '+':
c = nextc();
if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
lex_state = EXPR_ARG;
if (c == '@') {
return tUPLUS;
}
pushback(c);
return '+';
}
if (c == '=') {
lex_state = EXPR_BEG;
yylval.id = '+';
return tOP_ASGN;
}
if (lex_state == EXPR_BEG || lex_state == EXPR_MID ||
(lex_state == EXPR_ARG && space_seen && !ISSPACE(c))) {
if (lex_state == EXPR_ARG) arg_ambiguous();
lex_state = EXPR_BEG;
pushback(c);
if (ISDIGIT(c)) {
c = '+';
goto start_num;
}
return tUPLUS;
}
lex_state = EXPR_BEG;
pushback(c);
return '+';
case '-':
c = nextc();
if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
lex_state = EXPR_ARG;
if (c == '@') {
return tUMINUS;
}
pushback(c);
return '-';
}
if (c == '=') {
lex_state = EXPR_BEG;
yylval.id = '-';
return tOP_ASGN;
}
if (lex_state == EXPR_BEG || lex_state == EXPR_MID ||
(lex_state == EXPR_ARG && space_seen && !ISSPACE(c))) {
if (lex_state == EXPR_ARG) arg_ambiguous();
lex_state = EXPR_BEG;
pushback(c);
if (ISDIGIT(c)) {
c = '-';
goto start_num;
}
return tUMINUS;
}
lex_state = EXPR_BEG;
pushback(c);
return '-';
case '.':
lex_state = EXPR_BEG;
if ((c = nextc()) == '.') {
if ((c = nextc()) == '.') {
return tDOT3;
}
pushback(c);
return tDOT2;
}
pushback(c);
if (!ISDIGIT(c)) {
lex_state = EXPR_DOT;
return '.';
}
c = '.';
start_num:
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
{
int is_float, seen_point, seen_e, nondigit;
is_float = seen_point = seen_e = nondigit = 0;
lex_state = EXPR_END;
newtok();
if (c == '-' || c == '+') {
tokadd(c);
c = nextc();
}
if (c == '0') {
int start = toklen();
c = nextc();
if (c == 'x' || c == 'X') {
c = nextc();
if (ISXDIGIT(c)) {
do {
if (c == '_') {
if (nondigit) break;
nondigit = c;
continue;
}
if (!ISXDIGIT(c)) break;
nondigit = 0;
tokadd(c);
} while (c = nextc());
}
pushback(c);
tokfix();
if (toklen() == start) {
yyerror("hexadecimal number without hex-digits");
}
else if (nondigit) goto trailing_uc;
yylval.val = rb_cstr2inum(tok(), 16);
return tINTEGER;
}
if (c == 'b' || c == 'B') {
c = nextc();
if (c == '0' || c == '1') {
do {
if (c == '_') {
if (nondigit) break;
nondigit = c;
continue;
}
if (c != '0' && c != '1') break;
nondigit = 0;
tokadd(c);
} while (c = nextc());
}
pushback(c);
tokfix();
if (toklen() == start) {
yyerror("numeric literal without digits");
}
else if (nondigit) goto trailing_uc;
yylval.val = rb_cstr2inum(tok(), 2);
return tINTEGER;
}
if (c >= '0' && c <= '7' || c == '_') {
do {
if (c == '_') {
if (nondigit) break;
nondigit = c;
continue;
}
if (c < '0' || c > '7') break;
nondigit = 0;
tokadd(c);
} while (c = nextc());
if (toklen() > start) {
pushback(c);
tokfix();
if (nondigit) goto trailing_uc;
yylval.val = rb_cstr2inum(tok(), 8);
return tINTEGER;
}
}
if (c > '7' && c <= '9') {
yyerror("Illegal octal digit");
}
else if (c == '.' || c == 'e' || c == 'E') {
tokadd('0');
}
else {
pushback(c);
yylval.val = INT2FIX(0);
return tINTEGER;
}
}
for (;;) {
switch (c) {
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
nondigit = 0;
tokadd(c);
break;
case '.':
if (nondigit) goto trailing_uc;
if (seen_point || seen_e) {
goto decode_num;
}
else {
int c0 = nextc();
if (!ISDIGIT(c0)) {
pushback(c0);
goto decode_num;
}
c = c0;
}
tokadd('.');
tokadd(c);
is_float++;
seen_point++;
nondigit = 0;
break;
case 'e':
case 'E':
if (nondigit) {
pushback(c);
c = nondigit;
goto decode_num;
}
if (seen_e) {
goto decode_num;
}
tokadd(c);
seen_e++;
is_float++;
nondigit = c;
c = nextc();
if (c != '-' && c != '+') continue;
tokadd(c);
nondigit = c;
break;
case '_':
if (nondigit) goto decode_num;
nondigit = c;
break;
default:
goto decode_num;
}
c = nextc();
}
decode_num:
pushback(c);
tokfix();
if (nondigit) {
char tmp[30];
trailing_uc:
sprintf(tmp, "trailing `%c' in number", nondigit);
yyerror(tmp);
}
if (is_float) {
double d = strtod(tok(), 0);
if (errno == ERANGE) {
rb_warn("Float %s out of range", tok());
errno = 0;
}
yylval.val = rb_float_new(d);
return tFLOAT;
}
yylval.val = rb_cstr2inum(tok(), 10);
return tINTEGER;
}
case ']':
case '}':
lex_state = EXPR_END;
return c;
case ')':
if (cond_nest > 0) {
cond_stack >>= 1;
}
lex_state = EXPR_END;
return c;
case ':':
c = nextc();
if (c == ':') {
if (lex_state == EXPR_BEG || lex_state == EXPR_MID ||
(lex_state == EXPR_ARG && space_seen)) {
lex_state = EXPR_BEG;
return tCOLON3;
}
lex_state = EXPR_DOT;
return tCOLON2;
}
pushback(c);
if (lex_state == EXPR_END || ISSPACE(c)) {
lex_state = EXPR_BEG;
return ':';
}
lex_state = EXPR_FNAME;
return tSYMBEG;
case '/':
if (lex_state == EXPR_BEG || lex_state == EXPR_MID) {
return parse_regx('/', '/');
}
if ((c = nextc()) == '=') {
lex_state = EXPR_BEG;
yylval.id = '/';
return tOP_ASGN;
}
pushback(c);
if (lex_state == EXPR_ARG && space_seen) {
if (!ISSPACE(c)) {
arg_ambiguous();
return parse_regx('/', '/');
}
}
switch (lex_state) {
case EXPR_FNAME: case EXPR_DOT:
lex_state = EXPR_ARG; break;
default:
lex_state = EXPR_BEG; break;
}
return '/';
case '^':
if ((c = nextc()) == '=') {
lex_state = EXPR_BEG;
yylval.id = '^';
return tOP_ASGN;
}
switch (lex_state) {
case EXPR_FNAME: case EXPR_DOT:
lex_state = EXPR_ARG; break;
default:
lex_state = EXPR_BEG; break;
}
pushback(c);
return '^';
case ',':
case ';':
lex_state = EXPR_BEG;
return c;
case '~':
if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
if ((c = nextc()) != '@') {
pushback(c);
}
}
switch (lex_state) {
case EXPR_FNAME: case EXPR_DOT:
lex_state = EXPR_ARG; break;
default:
lex_state = EXPR_BEG; break;
}
return '~';
case '(':
if (cond_nest > 0) {
cond_stack = (cond_stack<<1)|0;
}
if (lex_state == EXPR_BEG || lex_state == EXPR_MID) {
c = tLPAREN;
}
else if (lex_state == EXPR_ARG && space_seen) {
rb_warning("%s (...) interpreted as method call", tok());
}
lex_state = EXPR_BEG;
return c;
case '[':
if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
lex_state = EXPR_ARG;
if ((c = nextc()) == ']') {
if ((c = nextc()) == '=') {
return tASET;
}
pushback(c);
return tAREF;
}
pushback(c);
return '[';
}
else if (lex_state == EXPR_BEG || lex_state == EXPR_MID) {
c = tLBRACK;
}
else if (lex_state == EXPR_ARG && space_seen) {
c = tLBRACK;
}
lex_state = EXPR_BEG;
return c;
case '{':
if (lex_state != EXPR_END && lex_state != EXPR_ARG)
c = tLBRACE;
lex_state = EXPR_BEG;
return c;
case '\\':
c = nextc();
if (c == '\n') {
space_seen = 1;
goto retry;
}
pushback(c);
return '\\';
case '%':
if (lex_state == EXPR_BEG || lex_state == EXPR_MID) {
int term;
int paren;
c = nextc();
quotation:
if (!ISALNUM(c)) {
term = c;
c = 'Q';
}
else {
term = nextc();
if (ISALNUM(term) || ismbchar(term)) {
yyerror("unknown type of %string");
return 0;
}
}
if (c == -1 || term == -1) {
rb_compile_error("unterminated quoted string meets end of file");
return 0;
}
paren = term;
if (term == '(') term = ')';
else if (term == '[') term = ']';
else if (term == '{') term = '}';
else if (term == '<') term = '>';
else paren = 0;
switch (c) {
case 'Q':
return parse_string('"', term, paren);
case 'q':
return parse_qstring(term, paren);
case 'w':
return parse_quotedwords(term, paren);
case 'x':
return parse_string('`', term, paren);
case 'r':
return parse_regx(term, paren);
default:
yyerror("unknown type of %string");
return 0;
}
}
if ((c = nextc()) == '=') {
yylval.id = '%';
return tOP_ASGN;
}
if (lex_state == EXPR_ARG && space_seen && !ISSPACE(c)) {
goto quotation;
}
switch (lex_state) {
case EXPR_FNAME: case EXPR_DOT:
lex_state = EXPR_ARG; break;
default:
lex_state = EXPR_BEG; break;
}
pushback(c);
return '%';
case '$':
lex_state = EXPR_END;
newtok();
c = nextc();
switch (c) {
case '_':
c = nextc();
if (is_identchar(c)) {
tokadd('$');
tokadd('_');
break;
}
pushback(c);
c = '_';
case '~':
local_cnt(c);
case '*':
case '$':
case '?':
case '!':
case '@':
case '/':
case '\\':
case ';':
case ',':
case '.':
case '=':
case ':':
case '<':
case '>':
case '\"':
tokadd('$');
tokadd(c);
tokfix();
yylval.id = rb_intern(tok());
return tGVAR;
case '-':
tokadd('$');
tokadd(c);
c = nextc();
tokadd(c);
tokfix();
yylval.id = rb_intern(tok());
return tGVAR;
case '&':
case '`':
case '\'':
case '+':
yylval.node = NEW_BACK_REF(c);
return tBACK_REF;
case '1': case '2': case '3':
case '4': case '5': case '6':
case '7': case '8': case '9':
tokadd('$');
while (ISDIGIT(c)) {
tokadd(c);
c = nextc();
}
if (is_identchar(c))
break;
pushback(c);
tokfix();
yylval.node = NEW_NTH_REF(atoi(tok()+1));
return tNTH_REF;
default:
if (!is_identchar(c)) {
pushback(c);
return '$';
}
case '0':
tokadd('$');
}
break;
case '@':
c = nextc();
newtok();
tokadd('@');
if (c == '@') {
tokadd('@');
c = nextc();
}
if (ISDIGIT(c)) {
rb_compile_error("`@%c' is not a valid instance variable name", c);
}
if (!is_identchar(c)) {
pushback(c);
return '@';
}
break;
default:
if (!is_identchar(c) || ISDIGIT(c)) {
rb_compile_error("Invalid char `\\%03o' in expression", c);
goto retry;
}
newtok();
break;
}
while (is_identchar(c)) {
tokadd(c);
if (ismbchar(c)) {
int i, len = mbclen(c)-1;
for (i = 0; i < len; i++) {
c = nextc();
tokadd(c);
}
}
c = nextc();
}
if ((c == '!' || c == '?') && is_identchar(tok()[0]) && !peek('=')) {
tokadd(c);
}
else {
pushback(c);
}
tokfix();
{
int result = 0;
switch (tok()[0]) {
case '$':
lex_state = EXPR_END;
result = tGVAR;
break;
case '@':
lex_state = EXPR_END;
if (tok()[1] == '@')
result = tCVAR;
else
result = tIVAR;
break;
default:
if (lex_state != EXPR_DOT) {
kw = rb_reserved_word(tok(), toklen());
if (kw) {
enum lex_state state = lex_state;
lex_state = kw->state;
if (state == EXPR_FNAME) {
yylval.id = rb_intern(kw->name);
}
if (kw->id[0] == kDO) {
if (COND_P()) return kDO_COND;
if (CMDARG_P()) return kDO_BLOCK;
return kDO;
}
if (state == EXPR_BEG)
return kw->id[0];
else {
if (kw->id[0] != kw->id[1])
lex_state = EXPR_BEG;
return kw->id[1];
}
}
}
if (toklast() == '!' || toklast() == '?') {
result = tFID;
}
else {
if (lex_state == EXPR_FNAME) {
#if 0
if ((c = nextc()) == '=' && !peek('=') && !peek('~') && !peek('>')) {
#else
if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
(!peek('=') || lex_p + 1 < lex_pend && lex_p[1] == '>')) {
#endif
result = tIDENTIFIER;
tokadd(c);
}
else {
pushback(c);
}
}
if (result == 0 && ISUPPER(tok()[0])) {
result = tCONSTANT;
}
else {
result = tIDENTIFIER;
}
}
if (lex_state == EXPR_BEG ||
lex_state == EXPR_DOT ||
lex_state == EXPR_ARG) {
lex_state = EXPR_ARG;
}
else {
lex_state = EXPR_END;
}
}
tokfix();
yylval.id = rb_intern(tok());
return result;
}
}
static NODE*
str_extend(list, term, paren)
NODE *list;
int term, paren;
{
int c;
int brace = -1;
VALUE ss;
NODE *node;
int brace_nest = 0;
int paren_nest = 0;
c = nextc();
switch (c) {
case '$':
case '@':
case '{':
break;
default:
tokadd('#');
pushback(c);
return list;
}
ss = rb_str_new(tok(), toklen());
if (list == 0) {
list = NEW_DSTR(ss);
}
else if (toklen() > 0) {
list_append(list, NEW_STR(ss));
}
newtok();
switch (c) {
case '$':
tokadd('$');
c = nextc();
if (c == -1) return (NODE*)-1;
switch (c) {
case '1': case '2': case '3':
case '4': case '5': case '6':
case '7': case '8': case '9':
while (ISDIGIT(c)) {
tokadd(c);
c = nextc();
}
pushback(c);
goto fetch_id;
case '&': case '+':
case '_': case '~':
case '*': case '$': case '?':
case '!': case '@': case ',':
case '.': case '=': case ':':
case '<': case '>': case '\\':
case ';':
refetch:
tokadd(c);
goto fetch_id;
case '-':
tokadd(c);
c = nextc();
if (!is_identchar(c)) {
pushback();
goto invalid_interporate;
}
tokadd(c);
goto fetch_id;
default:
if (c == term) {
list_append(list, NEW_STR(rb_str_new2("#$")));
pushback(c);
newtok();
return list;
}
switch (c) {
case '\"':
case '/':
case '\'':
case '`':
goto refetch;
}
if (!is_identchar(c)) {
pushback(c);
invalid_interporate:
{
VALUE s = rb_str_new2("#");
rb_str_cat(s, tok(), toklen());
list_append(list, NEW_STR(s));
newtok();
return list;
}
}
}
while (is_identchar(c)) {
tokadd(c);
if (ismbchar(c)) {
int i, len = mbclen(c)-1;
for (i = 0; i < len; i++) {
c = nextc();
tokadd(c);
}
}
c = nextc();
}
pushback(c);
break;
case '@':
tokadd(c);
c = nextc();
if (c == '@') {
tokadd(c);
c = nextc();
}
while (is_identchar(c)) {
tokadd(c);
if (ismbchar(c)) {
int i, len = mbclen(c)-1;
for (i = 0; i < len; i++) {
c = nextc();
tokadd(c);
}
}
c = nextc();
}
pushback(c);
if (toklen() == 1) {
goto invalid_interporate;
}
break;
case '{':
if (c == '{') brace = '}';
brace_nest = 0;
do {
loop_again:
c = nextc();
switch (c) {
case -1:
if (brace_nest > 0) {
yyerror("bad substitution in string");
newtok();
return list;
}
return (NODE*)-1;
case '}':
if (c == brace) {
if (brace_nest == 0) break;
brace_nest--;
}
tokadd(c);
goto loop_again;
case '\\':
c = nextc();
if (c == -1) return (NODE*)-1;
if (c == term) {
tokadd(c);
}
else {
tokadd('\\');
tokadd(c);
}
goto loop_again;
case '{':
if (brace != -1) brace_nest++;
default:
if (c == paren) paren_nest++;
else if (c == term && (!paren || paren_nest-- == 0)) {
pushback(c);
list_append(list, NEW_STR(rb_str_new2("#")));
rb_warning("bad substitution in string");
tokfix();
list_append(list, NEW_STR(rb_str_new(tok(), toklen())));
newtok();
return list;
}
case '\n':
tokadd(c);
break;
}
} while (c != brace);
}
fetch_id:
tokfix();
node = NEW_EVSTR(tok(),toklen());
list_append(list, node);
newtok();
return list;
}
NODE*
rb_node_newnode(type, a0, a1, a2)
enum node_type type;
NODE *a0, *a1, *a2;
{
NODE *n = (NODE*)rb_newobj();
n->flags |= T_NODE;
nd_set_type(n, type);
nd_set_line(n, ruby_sourceline);
n->nd_file = ruby_sourcefile;
n->u1.node = a0;
n->u2.node = a1;
n->u3.node = a2;
return n;
}
static enum node_type
nodetype(node)
NODE *node;
{
return (enum node_type)nd_type(node);
}
static int
nodeline(node)
NODE *node;
{
return nd_line(node);
}
static NODE*
newline_node(node)
NODE *node;
{
NODE *nl = 0;
if (node) {
nl = NEW_NEWLINE(node);
fixpos(nl, node);
nl->nd_nth = nd_line(node);
}
return nl;
}
static void
fixpos(node, orig)
NODE *node, *orig;
{
if (!node) return;
if (!orig) return;
if (orig == (NODE*)1) return;
node->nd_file = orig->nd_file;
nd_set_line(node, nd_line(orig));
}
static NODE*
block_append(head, tail)
NODE *head, *tail;
{
NODE *end;
if (tail == 0) return head;
if (head == 0) return tail;
if (nd_type(head) != NODE_BLOCK) {
end = NEW_BLOCK(head);
end->nd_end = end;
fixpos(end, head);
head = end;
}
else {
end = head->nd_end;
}
if (RTEST(ruby_verbose)) {
NODE *nd = end->nd_head;
newline:
switch (nd_type(nd)) {
case NODE_RETURN:
case NODE_BREAK:
case NODE_NEXT:
case NODE_REDO:
case NODE_RETRY:
rb_warning("statement not reached");
break;
case NODE_NEWLINE:
nd = nd->nd_next;
goto newline;
default:
break;
}
}
if (nd_type(tail) != NODE_BLOCK) {
tail = NEW_BLOCK(tail);
tail->nd_end = tail;
}
end->nd_next = tail;
head->nd_end = tail->nd_end;
return head;
}
static NODE*
list_append(head, tail)
NODE *head, *tail;
{
NODE *last;
if (head == 0) return NEW_LIST(tail);
last = head;
while (last->nd_next) {
last = last->nd_next;
}
last->nd_next = NEW_LIST(tail);
head->nd_alen += 1;
return head;
}
static NODE*
list_concat(head, tail)
NODE *head, *tail;
{
NODE *last;
last = head;
while (last->nd_next) {
last = last->nd_next;
}
last->nd_next = tail;
head->nd_alen += tail->nd_alen;
return head;
}
static NODE *
call_op(recv, id, narg, arg1)
NODE *recv;
ID id;
int narg;
NODE *arg1;
{
value_expr(recv);
if (narg == 1) {
value_expr(arg1);
}
return NEW_CALL(recv, id, narg==1?NEW_LIST(arg1):0);
}
static NODE*
match_gen(node1, node2)
NODE *node1;
NODE *node2;
{
local_cnt('~');
switch (nd_type(node1)) {
case NODE_DREGX:
case NODE_DREGX_ONCE:
return NEW_MATCH2(node1, node2);
case NODE_LIT:
if (TYPE(node1->nd_lit) == T_REGEXP) {
return NEW_MATCH2(node1, node2);
}
}
switch (nd_type(node2)) {
case NODE_DREGX:
case NODE_DREGX_ONCE:
return NEW_MATCH3(node2, node1);
case NODE_LIT:
if (TYPE(node2->nd_lit) == T_REGEXP) {
return NEW_MATCH3(node2, node1);
}
}
return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
}
static NODE*
gettable(id)
ID id;
{
if (id == kSELF) {
return NEW_SELF();
}
else if (id == kNIL) {
return NEW_NIL();
}
else if (id == kTRUE) {
return NEW_TRUE();
}
else if (id == kFALSE) {
return NEW_FALSE();
}
else if (id == k__FILE__) {
return NEW_STR(rb_str_new2(ruby_sourcefile));
}
else if (id == k__LINE__) {
return NEW_LIT(INT2FIX(ruby_sourceline));
}
else if (is_local_id(id)) {
if (dyna_in_block() && rb_dvar_defined(id)) return NEW_DVAR(id);
if (local_id(id)) return NEW_LVAR(id);
return NEW_VCALL(id);
}
else if (is_global_id(id)) {
return NEW_GVAR(id);
}
else if (is_instance_id(id)) {
return NEW_IVAR(id);
}
else if (is_const_id(id)) {
return NEW_CONST(id);
}
else if (is_class_id(id)) {
return NEW_CVAR(id);
}
rb_bug("invalid id for gettable");
return 0;
}
static NODE*
assignable(id, val)
ID id;
NODE *val;
{
value_expr(val);
if (id == kSELF) {
yyerror("Can't change the value of self");
}
else if (id == kNIL) {
yyerror("Can't assign to nil");
}
else if (id == kTRUE) {
yyerror("Can't assign to true");
}
else if (id == kFALSE) {
yyerror("Can't assign to false");
}
else if (id == k__FILE__) {
yyerror("Can't assign to __FILE__");
}
else if (id == k__LINE__) {
yyerror("Can't assign to __LINE__");
}
else if (is_local_id(id)) {
if (rb_dvar_curr(id)) {
return NEW_DASGN_CURR(id, val);
}
else if (rb_dvar_defined(id)) {
return NEW_DASGN(id, val);
}
else if (local_id(id) || !dyna_in_block()) {
return NEW_LASGN(id, val);
}
else{
rb_dvar_push(id, Qnil);
return NEW_DASGN_CURR(id, val);
}
}
else if (is_global_id(id)) {
return NEW_GASGN(id, val);
}
else if (is_instance_id(id)) {
return NEW_IASGN(id, val);
}
else if (is_const_id(id)) {
if (in_def || in_single)
yyerror("dynamic constant assignment");
return NEW_CDECL(id, val);
}
else if (is_class_id(id)) {
if (in_def || in_single) return NEW_CVASGN(id, val);
return NEW_CVDECL(id, val);
}
else {
rb_bug("bad id for variable");
}
return 0;
}
static NODE *
aryset(recv, idx)
NODE *recv, *idx;
{
value_expr(recv);
return NEW_CALL(recv, tASET, idx);
}
ID
rb_id_attrset(id)
ID id;
{
id &= ~ID_SCOPE_MASK;
id |= ID_ATTRSET;
return id;
}
static NODE *
attrset(recv, id)
NODE *recv;
ID id;
{
value_expr(recv);
return NEW_CALL(recv, rb_id_attrset(id), 0);
}
static void
rb_backref_error(node)
NODE *node;
{
switch (nd_type(node)) {
case NODE_NTH_REF:
rb_compile_error("Can't set variable $%d", node->nd_nth);
break;
case NODE_BACK_REF:
rb_compile_error("Can't set variable $%c", node->nd_nth);
break;
}
}
static NODE *
arg_concat(node1, node2)
NODE *node1;
NODE *node2;
{
if (!node2) return node1;
return NEW_ARGSCAT(node1, node2);
}
static NODE *
arg_add(node1, node2)
NODE *node1;
NODE *node2;
{
if (!node1) return NEW_LIST(node2);
if (nd_type(node1) == NODE_ARRAY) {
return list_append(node1, node2);
}
else {
return NEW_ARGSPUSH(node1, node2);
}
}
static NODE*
node_assign(lhs, rhs)
NODE *lhs, *rhs;
{
if (!lhs) return 0;
value_expr(rhs);
switch (nd_type(lhs)) {
case NODE_GASGN:
case NODE_IASGN:
case NODE_LASGN:
case NODE_DASGN:
case NODE_DASGN_CURR:
case NODE_MASGN:
case NODE_CDECL:
case NODE_CVDECL:
case NODE_CVASGN:
lhs->nd_value = rhs;
break;
case NODE_CALL:
lhs->nd_args = arg_add(lhs->nd_args, rhs);
break;
default:
break;
}
if (rhs) fixpos(lhs, rhs);
return lhs;
}
static int
value_expr(node)
NODE *node;
{
if (node == 0) return Qtrue;
switch (nd_type(node)) {
case NODE_RETURN:
case NODE_BREAK:
case NODE_NEXT:
case NODE_REDO:
case NODE_RETRY:
case NODE_WHILE:
case NODE_UNTIL:
case NODE_CLASS:
case NODE_MODULE:
case NODE_DEFN:
case NODE_DEFS:
yyerror("void value expression");
return Qfalse;
break;
case NODE_BLOCK:
while (node->nd_next) {
node = node->nd_next;
}
return value_expr(node->nd_head);
case NODE_BEGIN:
return value_expr(node->nd_body);
case NODE_IF:
return value_expr(node->nd_body) && value_expr(node->nd_else);
case NODE_NEWLINE:
return value_expr(node->nd_next);
default:
return Qtrue;
}
}
static void
void_expr(node)
NODE *node;
{
char *useless = 0;
if (!ruby_verbose) return;
if (!node) return;
again:
switch (nd_type(node)) {
case NODE_NEWLINE:
node = node->nd_next;
goto again;
case NODE_CALL:
switch (node->nd_mid) {
case '+':
case '-':
case '*':
case '/':
case '%':
case tPOW:
case tUPLUS:
case tUMINUS:
case '|':
case '^':
case '&':
case tCMP:
case '>':
case tGEQ:
case '<':
case tLEQ:
case tEQ:
case tNEQ:
useless = rb_id2name(node->nd_mid);
break;
}
break;
case NODE_LVAR:
case NODE_DVAR:
case NODE_GVAR:
case NODE_IVAR:
case NODE_CVAR:
case NODE_NTH_REF:
case NODE_BACK_REF:
useless = "a variable";
break;
case NODE_CONST:
case NODE_CREF:
useless = "a constant";
break;
case NODE_LIT:
case NODE_STR:
case NODE_DSTR:
case NODE_DREGX:
case NODE_DREGX_ONCE:
useless = "a literal";
break;
case NODE_COLON2:
case NODE_COLON3:
useless = "::";
break;
case NODE_DOT2:
useless = "..";
break;
case NODE_DOT3:
useless = "...";
break;
case NODE_SELF:
useless = "self";
break;
case NODE_NIL:
useless = "nil";
break;
case NODE_TRUE:
useless = "true";
break;
case NODE_FALSE:
useless = "false";
break;
case NODE_DEFINED:
useless = "defined?";
break;
}
if (useless) {
int line = ruby_sourceline;
ruby_sourceline = nd_line(node);
rb_warn("useless use of %s in void context", useless);
ruby_sourceline = line;
}
}
static NODE *cond2 _((NODE*));
static void
void_stmts(node)
NODE *node;
{
if (!ruby_verbose) return;
if (!node) return;
if (nd_type(node) != NODE_BLOCK) return;
for (;;) {
if (!node->nd_next) return;
void_expr(node->nd_head);
node = node->nd_next;
}
}
static int
assign_in_cond(node)
NODE *node;
{
switch (nd_type(node)) {
case NODE_MASGN:
yyerror("multiple assignment in conditional");
return 1;
case NODE_LASGN:
case NODE_DASGN:
case NODE_GASGN:
case NODE_IASGN:
break;
case NODE_NEWLINE:
default:
return 0;
}
switch (nd_type(node->nd_value)) {
case NODE_LIT:
case NODE_STR:
case NODE_NIL:
case NODE_TRUE:
case NODE_FALSE:
rb_warn("found = in conditional, should be ==");
return 1;
case NODE_DSTR:
case NODE_XSTR:
case NODE_DXSTR:
case NODE_EVSTR:
case NODE_DREGX:
default:
break;
}
#if 0
if (assign_in_cond(node->nd_value) == 0) {
rb_warning("assignment in condition");
}
#endif
return 1;
}
static NODE*
cond0(node)
NODE *node;
{
enum node_type type = nd_type(node);
assign_in_cond(node);
switch (type) {
case NODE_DREGX:
case NODE_DREGX_ONCE:
local_cnt('_');
local_cnt('~');
return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_")));
case NODE_DOT2:
case NODE_DOT3:
node->nd_beg = cond2(node->nd_beg);
node->nd_end = cond2(node->nd_end);
if (type == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
else if (type == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
node->nd_cnt = local_append(0);
return node;
case NODE_LIT:
if (TYPE(node->nd_lit) == T_REGEXP) {
local_cnt('_');
local_cnt('~');
return NEW_MATCH(node);
}
if (TYPE(node->nd_lit) == T_STRING) {
local_cnt('_');
local_cnt('~');
return NEW_MATCH(rb_reg_new(RSTRING(node)->ptr,RSTRING(node)->len,0));
}
default:
return node;
}
}
static NODE*
cond(node)
NODE *node;
{
if (node == 0) return 0;
if (nd_type(node) == NODE_NEWLINE){
node->nd_next = cond0(node->nd_next);
return node;
}
return cond0(node);
}
static NODE*
cond2(node)
NODE *node;
{
enum node_type type;
node = cond(node);
type = nd_type(node);
if (type == NODE_NEWLINE) node = node->nd_next;
if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
return call_op(node,tEQ,1,NEW_GVAR(rb_intern("$.")));
}
return node;
}
static NODE*
logop(type, left, right)
enum node_type type;
NODE *left, *right;
{
value_expr(left);
return rb_node_newnode(type, cond(left), cond(right), 0);
}
static NODE *
arg_blk_pass(node1, node2)
NODE *node1;
NODE *node2;
{
if (node2) {
node2->nd_head = node1;
return node2;
}
return node1;
}
static NODE*
new_call(r,m,a)
NODE *r;
ID m;
NODE *a;
{
if (a && nd_type(a) == NODE_BLOCK_PASS) {
a->nd_iter = NEW_CALL(r,m,a->nd_head);
return a;
}
return NEW_CALL(r,m,a);
}
static NODE*
new_fcall(m,a)
ID m;
NODE *a;
{
if (a && nd_type(a) == NODE_BLOCK_PASS) {
a->nd_iter = NEW_FCALL(m,a->nd_head);
return a;
}
return NEW_FCALL(m,a);
}
static NODE*
new_super(a)
NODE *a;
{
if (a && nd_type(a) == NODE_BLOCK_PASS) {
a->nd_iter = NEW_SUPER(a->nd_head);
return a;
}
return NEW_SUPER(a);
}
static struct local_vars {
ID *tbl;
int nofree;
int cnt;
int dlev;
struct local_vars *prev;
} *lvtbl;
static void
local_push()
{
struct local_vars *local;
local = ALLOC(struct local_vars);
local->prev = lvtbl;
local->nofree = 0;
local->cnt = 0;
local->tbl = 0;
local->dlev = 0;
lvtbl = local;
}
static void
local_pop()
{
struct local_vars *local = lvtbl->prev;
if (lvtbl->tbl) {
if (!lvtbl->nofree) free(lvtbl->tbl);
else lvtbl->tbl[0] = lvtbl->cnt;
}
free(lvtbl);
lvtbl = local;
}
static ID*
local_tbl()
{
lvtbl->nofree = 1;
return lvtbl->tbl;
}
static int
local_append(id)
ID id;
{
if (lvtbl->tbl == 0) {
lvtbl->tbl = ALLOC_N(ID, 4);
lvtbl->tbl[0] = 0;
lvtbl->tbl[1] = '_';
lvtbl->tbl[2] = '~';
lvtbl->cnt = 2;
if (id == '_') return 0;
if (id == '~') return 1;
}
else {
REALLOC_N(lvtbl->tbl, ID, lvtbl->cnt+2);
}
lvtbl->tbl[lvtbl->cnt+1] = id;
return lvtbl->cnt++;
}
static int
local_cnt(id)
ID id;
{
int cnt, max;
if (id == 0) return lvtbl->cnt;
for (cnt=1, max=lvtbl->cnt+1; cnt<max;cnt++) {
if (lvtbl->tbl[cnt] == id) return cnt-1;
}
return local_append(id);
}
static int
local_id(id)
ID id;
{
int i, max;
if (lvtbl == 0) return Qfalse;
for (i=3, max=lvtbl->cnt+1; i<max; i++) {
if (lvtbl->tbl[i] == id) return Qtrue;
}
return Qfalse;
}
static void
top_local_init()
{
local_push();
lvtbl->cnt = ruby_scope->local_tbl?ruby_scope->local_tbl[0]:0;
if (lvtbl->cnt > 0) {
lvtbl->tbl = ALLOC_N(ID, lvtbl->cnt+3);
MEMCPY(lvtbl->tbl, ruby_scope->local_tbl, ID, lvtbl->cnt+1);
}
else {
lvtbl->tbl = 0;
}
if (ruby_dyna_vars)
lvtbl->dlev = 1;
else
lvtbl->dlev = 0;
}
static void
top_local_setup()
{
int len = lvtbl->cnt;
int i;
if (len > 0) {
i = ruby_scope->local_tbl?ruby_scope->local_tbl[0]:0;
if (i < len) {
if (i == 0 || (ruby_scope->flag & SCOPE_MALLOC) == 0) {
VALUE *vars = ALLOC_N(VALUE, len+1);
if (ruby_scope->local_vars) {
*vars++ = ruby_scope->local_vars[-1];
MEMCPY(vars, ruby_scope->local_vars, VALUE, i);
rb_mem_clear(vars+i, len-i);
}
else {
*vars++ = 0;
rb_mem_clear(vars, len);
}
ruby_scope->local_vars = vars;
ruby_scope->flag |= SCOPE_MALLOC;
}
else {
VALUE *vars = ruby_scope->local_vars-1;
REALLOC_N(vars, VALUE, len+1);
ruby_scope->local_vars = vars+1;
rb_mem_clear(ruby_scope->local_vars+i, len-i);
}
if (ruby_scope->local_tbl && ruby_scope->local_vars[-1] == 0) {
free(ruby_scope->local_tbl);
}
ruby_scope->local_vars[-1] = 0;
ruby_scope->local_tbl = local_tbl();
}
}
local_pop();
}
static struct RVarmap*
dyna_push()
{
struct RVarmap* vars = ruby_dyna_vars;
rb_dvar_push(0, 0);
lvtbl->dlev++;
return vars;
}
static void
dyna_pop(vars)
struct RVarmap* vars;
{
lvtbl->dlev--;
ruby_dyna_vars = vars;
}
static int
dyna_in_block()
{
return (lvtbl->dlev > 0);
}
void
rb_parser_append_print()
{
ruby_eval_tree =
block_append(ruby_eval_tree,
NEW_FCALL(rb_intern("print"),
NEW_ARRAY(NEW_GVAR(rb_intern("$_")))));
}
void
rb_parser_while_loop(chop, split)
int chop, split;
{
if (split) {
ruby_eval_tree =
block_append(NEW_GASGN(rb_intern("$F"),
NEW_CALL(NEW_GVAR(rb_intern("$_")),
rb_intern("split"), 0)),
ruby_eval_tree);
}
if (chop) {
ruby_eval_tree =
block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")),
rb_intern("chop!"), 0), ruby_eval_tree);
}
ruby_eval_tree = NEW_OPT_N(ruby_eval_tree);
}
static struct {
ID token;
char *name;
} op_tbl[] = {
tDOT2, "..",
tDOT3, "...",
'+', "+",
'-', "-",
'+', "+(binary)",
'-', "-(binary)",
'*', "*",
'/', "/",
'%', "%",
tPOW, "**",
tUPLUS, "+@",
tUMINUS, "-@",
tUPLUS, "+(unary)",
tUMINUS, "-(unary)",
'|', "|",
'^', "^",
'&', "&",
tCMP, "<=>",
'>', ">",
tGEQ, ">=",
'<', "<",
tLEQ, "<=",
tEQ, "==",
tEQQ, "===",
tNEQ, "!=",
tMATCH, "=~",
tNMATCH, "!~",
'!', "!",
'~', "~",
'!', "!(unary)",
'~', "~(unary)",
'!', "!@",
'~', "~@",
tAREF, "[]",
tASET, "[]=",
tLSHFT, "<<",
tRSHFT, ">>",
tCOLON2, "::",
tCOLON3, "::",
'`', "`",
0, 0,
};
static st_table *sym_tbl;
static st_table *sym_rev_tbl;
void
Init_sym()
{
sym_tbl = st_init_strtable_with_size(200);
sym_rev_tbl = st_init_numtable_with_size(200);
rb_global_variable((VALUE*)&lex_lastline);
}
ID
rb_intern(name)
const char *name;
{
static ID last_id = LAST_TOKEN;
ID id;
int last;
if (st_lookup(sym_tbl, name, &id))
return id;
id = 0;
switch (name[0]) {
case '$':
id |= ID_GLOBAL;
break;
case '@':
if (name[1] == '@')
id |= ID_CLASS;
else
id |= ID_INSTANCE;
break;
default:
if (name[0] != '_' && !ISALPHA(name[0]) && !ismbchar(name[0])) {
int i;
for (i=0; op_tbl[i].token; i++) {
if (*op_tbl[i].name == *name &&
strcmp(op_tbl[i].name, name) == 0) {
id = op_tbl[i].token;
goto id_regist;
}
}
}
last = strlen(name)-1;
if (name[last] == '=') {
char *buf = ALLOCA_N(char,last+1);
strncpy(buf, name, last);
buf[last] = '\0';
id = rb_intern(buf);
if (id > LAST_TOKEN && !is_attrset_id(id)) {
id = rb_id_attrset(id);
goto id_regist;
}
id = ID_ATTRSET;
}
else if (ISUPPER(name[0])) {
id = ID_CONST;
}
else {
id = ID_LOCAL;
}
break;
}
id |= ++last_id << ID_SCOPE_SHIFT;
id_regist:
name = strdup(name);
st_add_direct(sym_tbl, name, id);
st_add_direct(sym_rev_tbl, id, name);
return id;
}
char *
rb_id2name(id)
ID id;
{
char *name;
if (id < LAST_TOKEN) {
int i = 0;
for (i=0; op_tbl[i].token; i++) {
if (op_tbl[i].token == id)
return op_tbl[i].name;
}
}
if (st_lookup(sym_rev_tbl, id, &name))
return name;
if (is_attrset_id(id)) {
ID id2 = (id & ~ID_SCOPE_MASK) | ID_LOCAL;
again:
name = rb_id2name(id2);
if (name) {
char *buf = ALLOCA_N(char, strlen(name)+2);
strcpy(buf, name);
strcat(buf, "=");
rb_intern(buf);
return rb_id2name(id);
}
if (is_local_id(id2)) {
id2 = (id & ~ID_SCOPE_MASK) | ID_CONST;
goto again;
}
}
return 0;
}
int
rb_is_const_id(id)
ID id;
{
if (is_const_id(id)) return Qtrue;
return Qfalse;
}
int
rb_is_class_id(id)
ID id;
{
if (is_class_id(id)) return Qtrue;
return Qfalse;
}
int
rb_is_instance_id(id)
ID id;
{
if (is_instance_id(id)) return Qtrue;
return Qfalse;
}
static void
special_local_set(c, val)
char c;
VALUE val;
{
int cnt;
top_local_init();
cnt = local_cnt(c);
top_local_setup();
ruby_scope->local_vars[cnt] = val;
}
VALUE
rb_backref_get()
{
if (ruby_scope->local_vars) {
return ruby_scope->local_vars[1];
}
return Qnil;
}
void
rb_backref_set(val)
VALUE val;
{
if (ruby_scope->local_vars) {
ruby_scope->local_vars[1] = val;
}
else {
special_local_set('~', val);
}
}
VALUE
rb_lastline_get()
{
if (ruby_scope->local_vars) {
return ruby_scope->local_vars[0];
}
return Qnil;
}
void
rb_lastline_set(val)
VALUE val;
{
if (ruby_scope->local_vars) {
ruby_scope->local_vars[0] = val;
}
else {
special_local_set('_', val);
}
}