Develop and Download Open Source Software

Browse CVS Repository

Contents of /netruby/netruby/parser.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1.1.1 - (show annotations) (download) (vendor branch)
Mon Apr 8 13:29:46 2002 UTC (22 years ago) by arton
Branch: MAIN, vendor
CVS Tags: start, HEAD
Changes since 1.1: +0 -0 lines
initial version 0.8

1 // created by jay 0.7 (c) 1998 Axel.Schreiner@informatik.uni-osnabrueck.de
2
3 #line 21 "parse.y"
4
5 using System;
6 using System.Collections;
7 using System.IO;
8 using System.Text;
9 using System.Text.RegularExpressions;
10 using System.Reflection;
11
12 namespace arton.NETRuby
13 {
14 public class Parser
15 {
16 public interface Lexer
17 {
18 EXPR State
19 {
20 get;
21 set;
22 }
23 void COND_PUSH();
24 void COND_POP();
25 void CMDARG_PUSH();
26 void CMDARG_POP();
27 }
28
29 public Parser(NetRuby rb, RThread th, bool in_eval)
30 {
31 evalTree = null;
32 ruby = rb;
33 thread = th;
34 compile_for_eval = in_eval;
35 }
36
37 public Parser(NetRuby rb)
38 {
39 evalTree = null;
40 ruby = rb;
41 thread = rb.GetCurrentContext();
42 compile_for_eval = false;
43 }
44
45 public object Parse(Lexer lexer)
46 {
47 evalTree = null;
48 lex = lexer;
49 object n = yyparse((yyParser.yyInput)lex, new yydebug.yyDebugSimple());
50 if (n == null)
51 return evalTree;
52 return null;
53 }
54
55 private Lexer lex;
56 internal RNode evalTree;
57
58 internal enum ID
59 {
60 SCOPE_SHIFT = 3,
61 SCOPE_MASK = 7,
62 LOCAL = 1,
63 INSTANCE = 2,
64 GLOBAL = 3,
65 ATTRSET = 4,
66 CONST = 5,
67 CLASS = 6,
68 }
69
70 internal string sourcefile
71 {
72 get { return thread.file; }
73 }
74 internal int sourceline
75 {
76 get { return thread.line; }
77 set { thread.line = value; }
78 }
79
80 public NetRuby ruby;
81 internal RThread thread;
82 internal bool verbose
83 {
84 get { return ruby.verbose; }
85 }
86 internal void warn(string s)
87 {
88 ruby.warn(s);
89 }
90
91 internal uint[] Locals
92 {
93 get { return thread.Locals; }
94 }
95
96 private int class_nest = 0;
97 private int in_single = 0;
98 private int in_def = 0;
99 private bool compile_for_eval = false;
100 private uint cur_mid = 0;
101 private bool in_defined = false;
102
103 #line 104 "-"
104
105 /** simplified error message.
106 @see <a href="#yyerror(java.lang.String, java.lang.String[])">yyerror</a>
107 */
108 public void yyerror (string message) {
109 yyerror(message, null);
110 }
111
112 /** (syntax) error message.
113 Can be overwritten to control message format.
114 @param message text to be displayed.
115 @param expected vector of acceptable tokens, if available.
116 */
117 public void yyerror (string message, string[] expected) {
118 if ((expected != null) && (expected.Length > 0)) {
119 StringBuilder sb = new StringBuilder();
120 sb.AppendFormat("{0}, expecting", message);
121 for (int n = 0; n < expected.Length; ++ n)
122 sb.AppendFormat(" {0}", expected[n]);
123 thread.CompileError(sb.ToString());
124 } else
125 thread.CompileError (message);
126 }
127
128 /** debugging support, requires the package jay.yydebug.
129 Set to null to suppress debugging messages.
130 */
131 //t protected yydebug.yyDebug yydebug;
132
133 protected static int yyFinal = 1;
134 //t public static string [] yyRule = {
135 //t "$accept : program",
136 //t "$$1 :",
137 //t "program : $$1 compstmt",
138 //t "compstmt : stmts opt_terms",
139 //t "stmts : none",
140 //t "stmts : stmt",
141 //t "stmts : stmts terms stmt",
142 //t "stmts : error stmt",
143 //t "$$2 :",
144 //t "stmt : kALIAS fitem $$2 fitem",
145 //t "stmt : kALIAS tGVAR tGVAR",
146 //t "stmt : kALIAS tGVAR tBACK_REF",
147 //t "stmt : kALIAS tGVAR tNTH_REF",
148 //t "stmt : kUNDEF undef_list",
149 //t "stmt : stmt kIF_MOD expr",
150 //t "stmt : stmt kUNLESS_MOD expr",
151 //t "stmt : stmt kWHILE_MOD expr",
152 //t "stmt : stmt kUNTIL_MOD expr",
153 //t "stmt : stmt kRESCUE_MOD stmt",
154 //t "$$3 :",
155 //t "stmt : klBEGIN $$3 '{' compstmt '}'",
156 //t "stmt : klEND '{' compstmt '}'",
157 //t "stmt : lhs '=' command_call",
158 //t "stmt : mlhs '=' command_call",
159 //t "stmt : lhs '=' mrhs_basic",
160 //t "stmt : expr",
161 //t "expr : mlhs '=' mrhs",
162 //t "expr : kRETURN ret_args",
163 //t "expr : command_call",
164 //t "expr : expr kAND expr",
165 //t "expr : expr kOR expr",
166 //t "expr : kNOT expr",
167 //t "expr : '!' command_call",
168 //t "expr : arg",
169 //t "command_call : command",
170 //t "command_call : block_command",
171 //t "block_command : block_call",
172 //t "block_command : block_call '.' operation2 command_args",
173 //t "block_command : block_call tCOLON2 operation2 command_args",
174 //t "command : operation command_args",
175 //t "command : primary '.' operation2 command_args",
176 //t "command : primary tCOLON2 operation2 command_args",
177 //t "command : kSUPER command_args",
178 //t "command : kYIELD ret_args",
179 //t "mlhs : mlhs_basic",
180 //t "mlhs : tLPAREN mlhs_entry ')'",
181 //t "mlhs_entry : mlhs_basic",
182 //t "mlhs_entry : tLPAREN mlhs_entry ')'",
183 //t "mlhs_basic : mlhs_head",
184 //t "mlhs_basic : mlhs_head mlhs_item",
185 //t "mlhs_basic : mlhs_head tSTAR mlhs_node",
186 //t "mlhs_basic : mlhs_head tSTAR",
187 //t "mlhs_basic : tSTAR mlhs_node",
188 //t "mlhs_basic : tSTAR",
189 //t "mlhs_item : mlhs_node",
190 //t "mlhs_item : tLPAREN mlhs_entry ')'",
191 //t "mlhs_head : mlhs_item ','",
192 //t "mlhs_head : mlhs_head mlhs_item ','",
193 //t "mlhs_node : variable",
194 //t "mlhs_node : primary '[' aref_args ']'",
195 //t "mlhs_node : primary '.' tIDENTIFIER",
196 //t "mlhs_node : primary tCOLON2 tIDENTIFIER",
197 //t "mlhs_node : primary '.' tCONSTANT",
198 //t "mlhs_node : backref",
199 //t "lhs : variable",
200 //t "lhs : primary '[' aref_args ']'",
201 //t "lhs : primary '.' tIDENTIFIER",
202 //t "lhs : primary tCOLON2 tIDENTIFIER",
203 //t "lhs : primary '.' tCONSTANT",
204 //t "lhs : backref",
205 //t "cname : tIDENTIFIER",
206 //t "cname : tCONSTANT",
207 //t "fname : tIDENTIFIER",
208 //t "fname : tCONSTANT",
209 //t "fname : tFID",
210 //t "fname : op",
211 //t "fname : reswords",
212 //t "fitem : fname",
213 //t "fitem : symbol",
214 //t "undef_list : fitem",
215 //t "$$4 :",
216 //t "undef_list : undef_list ',' $$4 fitem",
217 //t "op : '|'",
218 //t "op : '^'",
219 //t "op : '&'",
220 //t "op : tCMP",
221 //t "op : tEQ",
222 //t "op : tEQQ",
223 //t "op : tMATCH",
224 //t "op : '>'",
225 //t "op : tGEQ",
226 //t "op : '<'",
227 //t "op : tLEQ",
228 //t "op : tLSHFT",
229 //t "op : tRSHFT",
230 //t "op : '+'",
231 //t "op : '-'",
232 //t "op : '*'",
233 //t "op : tSTAR",
234 //t "op : '/'",
235 //t "op : '%'",
236 //t "op : tPOW",
237 //t "op : '~'",
238 //t "op : tUPLUS",
239 //t "op : tUMINUS",
240 //t "op : tAREF",
241 //t "op : tASET",
242 //t "op : '`'",
243 //t "reswords : k__LINE__",
244 //t "reswords : k__FILE__",
245 //t "reswords : klBEGIN",
246 //t "reswords : klEND",
247 //t "reswords : kALIAS",
248 //t "reswords : kAND",
249 //t "reswords : kBEGIN",
250 //t "reswords : kBREAK",
251 //t "reswords : kCASE",
252 //t "reswords : kCLASS",
253 //t "reswords : kDEF",
254 //t "reswords : kDEFINED",
255 //t "reswords : kDO",
256 //t "reswords : kELSE",
257 //t "reswords : kELSIF",
258 //t "reswords : kEND",
259 //t "reswords : kENSURE",
260 //t "reswords : kFALSE",
261 //t "reswords : kFOR",
262 //t "reswords : kIF_MOD",
263 //t "reswords : kIN",
264 //t "reswords : kMODULE",
265 //t "reswords : kNEXT",
266 //t "reswords : kNIL",
267 //t "reswords : kNOT",
268 //t "reswords : kOR",
269 //t "reswords : kREDO",
270 //t "reswords : kRESCUE",
271 //t "reswords : kRETRY",
272 //t "reswords : kRETURN",
273 //t "reswords : kSELF",
274 //t "reswords : kSUPER",
275 //t "reswords : kTHEN",
276 //t "reswords : kTRUE",
277 //t "reswords : kUNDEF",
278 //t "reswords : kUNLESS_MOD",
279 //t "reswords : kUNTIL_MOD",
280 //t "reswords : kWHEN",
281 //t "reswords : kWHILE_MOD",
282 //t "reswords : kYIELD",
283 //t "reswords : kRESCUE_MOD",
284 //t "arg : lhs '=' arg",
285 //t "$$5 :",
286 //t "arg : variable tOP_ASGN $$5 arg",
287 //t "arg : primary '[' aref_args ']' tOP_ASGN arg",
288 //t "arg : primary '.' tIDENTIFIER tOP_ASGN arg",
289 //t "arg : primary '.' tCONSTANT tOP_ASGN arg",
290 //t "arg : primary tCOLON2 tIDENTIFIER tOP_ASGN arg",
291 //t "arg : backref tOP_ASGN arg",
292 //t "arg : arg tDOT2 arg",
293 //t "arg : arg tDOT3 arg",
294 //t "arg : arg '+' arg",
295 //t "arg : arg '-' arg",
296 //t "arg : arg '*' arg",
297 //t "arg : arg '/' arg",
298 //t "arg : arg '%' arg",
299 //t "arg : arg tPOW arg",
300 //t "arg : tUPLUS arg",
301 //t "arg : tUMINUS arg",
302 //t "arg : arg '|' arg",
303 //t "arg : arg '^' arg",
304 //t "arg : arg '&' arg",
305 //t "arg : arg tCMP arg",
306 //t "arg : arg '>' arg",
307 //t "arg : arg tGEQ arg",
308 //t "arg : arg '<' arg",
309 //t "arg : arg tLEQ arg",
310 //t "arg : arg tEQ arg",
311 //t "arg : arg tEQQ arg",
312 //t "arg : arg tNEQ arg",
313 //t "arg : arg tMATCH arg",
314 //t "arg : arg tNMATCH arg",
315 //t "arg : '!' arg",
316 //t "arg : '~' arg",
317 //t "arg : arg tLSHFT arg",
318 //t "arg : arg tRSHFT arg",
319 //t "arg : arg tANDOP arg",
320 //t "arg : arg tOROP arg",
321 //t "$$6 :",
322 //t "arg : kDEFINED opt_nl $$6 arg",
323 //t "arg : arg '?' arg ':' arg",
324 //t "arg : primary",
325 //t "aref_args : none",
326 //t "aref_args : command_call opt_nl",
327 //t "aref_args : args ',' command_call opt_nl",
328 //t "aref_args : args trailer",
329 //t "aref_args : args ',' tSTAR arg opt_nl",
330 //t "aref_args : assocs trailer",
331 //t "aref_args : tSTAR arg opt_nl",
332 //t "paren_args : '(' none ')'",
333 //t "paren_args : '(' call_args opt_nl ')'",
334 //t "paren_args : '(' block_call opt_nl ')'",
335 //t "paren_args : '(' args ',' block_call opt_nl ')'",
336 //t "opt_paren_args : none",
337 //t "opt_paren_args : paren_args",
338 //t "call_args : command",
339 //t "call_args : args ',' command",
340 //t "call_args : args opt_block_arg",
341 //t "call_args : args ',' tSTAR arg opt_block_arg",
342 //t "call_args : assocs opt_block_arg",
343 //t "call_args : assocs ',' tSTAR arg opt_block_arg",
344 //t "call_args : args ',' assocs opt_block_arg",
345 //t "call_args : args ',' assocs ',' tSTAR arg opt_block_arg",
346 //t "call_args : tSTAR arg opt_block_arg",
347 //t "call_args : block_arg",
348 //t "$$7 :",
349 //t "command_args : $$7 call_args",
350 //t "block_arg : tAMPER arg",
351 //t "opt_block_arg : ',' block_arg",
352 //t "opt_block_arg : none",
353 //t "args : arg",
354 //t "args : args ',' arg",
355 //t "mrhs : arg",
356 //t "mrhs : mrhs_basic",
357 //t "mrhs_basic : args ',' arg",
358 //t "mrhs_basic : args ',' tSTAR arg",
359 //t "mrhs_basic : tSTAR arg",
360 //t "ret_args : call_args",
361 //t "primary : literal",
362 //t "primary : string",
363 //t "primary : tXSTRING",
364 //t "primary : tQWORDS",
365 //t "primary : tDXSTRING",
366 //t "primary : tDREGEXP",
367 //t "primary : var_ref",
368 //t "primary : backref",
369 //t "primary : tFID",
370 //t "primary : kBEGIN compstmt rescue opt_else ensure kEND",
371 //t "primary : tLPAREN compstmt ')'",
372 //t "primary : primary tCOLON2 tCONSTANT",
373 //t "primary : tCOLON3 cname",
374 //t "primary : primary '[' aref_args ']'",
375 //t "primary : tLBRACK aref_args ']'",
376 //t "primary : tLBRACE assoc_list '}'",
377 //t "primary : kRETURN '(' ret_args ')'",
378 //t "primary : kRETURN '(' ')'",
379 //t "primary : kRETURN",
380 //t "primary : kYIELD '(' ret_args ')'",
381 //t "primary : kYIELD '(' ')'",
382 //t "primary : kYIELD",
383 //t "$$8 :",
384 //t "primary : kDEFINED opt_nl '(' $$8 expr ')'",
385 //t "primary : operation brace_block",
386 //t "primary : method_call",
387 //t "primary : method_call brace_block",
388 //t "primary : kIF expr then compstmt if_tail kEND",
389 //t "primary : kUNLESS expr then compstmt opt_else kEND",
390 //t "$$9 :",
391 //t "$$10 :",
392 //t "primary : kWHILE $$9 expr do $$10 compstmt kEND",
393 //t "$$11 :",
394 //t "$$12 :",
395 //t "primary : kUNTIL $$11 expr do $$12 compstmt kEND",
396 //t "primary : kCASE expr opt_terms case_body kEND",
397 //t "primary : kCASE opt_terms case_body kEND",
398 //t "$$13 :",
399 //t "$$14 :",
400 //t "primary : kFOR block_var kIN $$13 expr do $$14 compstmt kEND",
401 //t "$$15 :",
402 //t "primary : kCLASS cname superclass $$15 compstmt kEND",
403 //t "$$16 :",
404 //t "$$17 :",
405 //t "primary : kCLASS tLSHFT expr $$16 term $$17 compstmt kEND",
406 //t "$$18 :",
407 //t "primary : kMODULE cname $$18 compstmt kEND",
408 //t "$$19 :",
409 //t "primary : kDEF fname $$19 f_arglist compstmt rescue opt_else ensure kEND",
410 //t "$$20 :",
411 //t "$$21 :",
412 //t "primary : kDEF singleton dot_or_colon $$20 fname $$21 f_arglist compstmt rescue opt_else ensure kEND",
413 //t "primary : kBREAK",
414 //t "primary : kNEXT",
415 //t "primary : kREDO",
416 //t "primary : kRETRY",
417 //t "then : term",
418 //t "then : kTHEN",
419 //t "then : term kTHEN",
420 //t "do : term",
421 //t "do : kDO_COND",
422 //t "if_tail : opt_else",
423 //t "if_tail : kELSIF expr then compstmt if_tail",
424 //t "opt_else : none",
425 //t "opt_else : kELSE compstmt",
426 //t "block_var : lhs",
427 //t "block_var : mlhs",
428 //t "opt_block_var : none",
429 //t "opt_block_var : '|' '|'",
430 //t "opt_block_var : tOROP",
431 //t "opt_block_var : '|' block_var '|'",
432 //t "$$22 :",
433 //t "do_block : kDO_BLOCK $$22 opt_block_var compstmt kEND",
434 //t "block_call : command do_block",
435 //t "block_call : block_call '.' operation2 opt_paren_args",
436 //t "block_call : block_call tCOLON2 operation2 opt_paren_args",
437 //t "method_call : operation paren_args",
438 //t "method_call : primary '.' operation2 opt_paren_args",
439 //t "method_call : primary tCOLON2 operation2 paren_args",
440 //t "method_call : primary tCOLON2 operation3",
441 //t "method_call : kSUPER paren_args",
442 //t "method_call : kSUPER",
443 //t "$$23 :",
444 //t "brace_block : '{' $$23 opt_block_var compstmt '}'",
445 //t "$$24 :",
446 //t "brace_block : kDO $$24 opt_block_var compstmt kEND",
447 //t "case_body : kWHEN when_args then compstmt cases",
448 //t "when_args : args",
449 //t "when_args : args ',' tSTAR arg",
450 //t "when_args : tSTAR arg",
451 //t "cases : opt_else",
452 //t "cases : case_body",
453 //t "exc_list : none",
454 //t "exc_list : args",
455 //t "exc_var : tASSOC lhs",
456 //t "exc_var : none",
457 //t "rescue : kRESCUE exc_list exc_var then compstmt rescue",
458 //t "rescue : none",
459 //t "ensure : none",
460 //t "ensure : kENSURE compstmt",
461 //t "literal : numeric",
462 //t "literal : symbol",
463 //t "literal : tREGEXP",
464 //t "string : tSTRING",
465 //t "string : tDSTRING",
466 //t "string : string tSTRING",
467 //t "string : string tDSTRING",
468 //t "symbol : tSYMBEG sym",
469 //t "sym : fname",
470 //t "sym : tIVAR",
471 //t "sym : tGVAR",
472 //t "sym : tCVAR",
473 //t "numeric : tINTEGER",
474 //t "numeric : tFLOAT",
475 //t "variable : tIDENTIFIER",
476 //t "variable : tIVAR",
477 //t "variable : tGVAR",
478 //t "variable : tCONSTANT",
479 //t "variable : tCVAR",
480 //t "variable : kNIL",
481 //t "variable : kSELF",
482 //t "variable : kTRUE",
483 //t "variable : kFALSE",
484 //t "variable : k__FILE__",
485 //t "variable : k__LINE__",
486 //t "var_ref : variable",
487 //t "backref : tNTH_REF",
488 //t "backref : tBACK_REF",
489 //t "superclass : term",
490 //t "$$25 :",
491 //t "superclass : '<' $$25 expr term",
492 //t "superclass : error term",
493 //t "f_arglist : '(' f_args opt_nl ')'",
494 //t "f_arglist : f_args term",
495 //t "f_args : f_arg ',' f_optarg ',' f_rest_arg opt_f_block_arg",
496 //t "f_args : f_arg ',' f_optarg opt_f_block_arg",
497 //t "f_args : f_arg ',' f_rest_arg opt_f_block_arg",
498 //t "f_args : f_arg opt_f_block_arg",
499 //t "f_args : f_optarg ',' f_rest_arg opt_f_block_arg",
500 //t "f_args : f_optarg opt_f_block_arg",
501 //t "f_args : f_rest_arg opt_f_block_arg",
502 //t "f_args : f_block_arg",
503 //t "f_args :",
504 //t "f_norm_arg : tCONSTANT",
505 //t "f_norm_arg : tIVAR",
506 //t "f_norm_arg : tGVAR",
507 //t "f_norm_arg : tCVAR",
508 //t "f_norm_arg : tIDENTIFIER",
509 //t "f_arg : f_norm_arg",
510 //t "f_arg : f_arg ',' f_norm_arg",
511 //t "f_opt : tIDENTIFIER '=' arg",
512 //t "f_optarg : f_opt",
513 //t "f_optarg : f_optarg ',' f_opt",
514 //t "f_rest_arg : tSTAR tIDENTIFIER",
515 //t "f_rest_arg : tSTAR",
516 //t "f_block_arg : tAMPER tIDENTIFIER",
517 //t "opt_f_block_arg : ',' f_block_arg",
518 //t "opt_f_block_arg : none",
519 //t "singleton : var_ref",
520 //t "$$26 :",
521 //t "singleton : '(' $$26 expr opt_nl ')'",
522 //t "assoc_list : none",
523 //t "assoc_list : assocs trailer",
524 //t "assoc_list : args trailer",
525 //t "assocs : assoc",
526 //t "assocs : assocs ',' assoc",
527 //t "assoc : arg tASSOC arg",
528 //t "operation : tIDENTIFIER",
529 //t "operation : tCONSTANT",
530 //t "operation : tFID",
531 //t "operation2 : tIDENTIFIER",
532 //t "operation2 : tCONSTANT",
533 //t "operation2 : tFID",
534 //t "operation2 : op",
535 //t "operation3 : tIDENTIFIER",
536 //t "operation3 : tFID",
537 //t "operation3 : op",
538 //t "dot_or_colon : '.'",
539 //t "dot_or_colon : tCOLON2",
540 //t "opt_terms :",
541 //t "opt_terms : terms",
542 //t "opt_nl :",
543 //t "opt_nl : '\\n'",
544 //t "trailer :",
545 //t "trailer : '\\n'",
546 //t "trailer : ','",
547 //t "term : ';'",
548 //t "term : '\\n'",
549 //t "terms : term",
550 //t "terms : terms ';'",
551 //t "none :",
552 //t };
553 protected static string [] yyName = {
554 "end-of-file",null,null,null,null,null,null,null,null,null,"'\\n'",
555 null,null,null,null,null,null,null,null,null,null,null,null,null,null,
556 null,null,null,null,null,null,null,null,"'!'",null,null,null,"'%'",
557 "'&'",null,"'('","')'","'*'","'+'","','","'-'","'.'","'/'",null,null,
558 null,null,null,null,null,null,null,null,"':'","';'","'<'","'='","'>'",
559 "'?'",null,null,null,null,null,null,null,null,null,null,null,null,
560 null,null,null,null,null,null,null,null,null,null,null,null,null,null,
561 null,"'['",null,"']'","'^'",null,"'`'",null,null,null,null,null,null,
562 null,null,null,null,null,null,null,null,null,null,null,null,null,null,
563 null,null,null,null,null,null,"'{'","'|'","'}'","'~'",null,null,null,
564 null,null,null,null,null,null,null,null,null,null,null,null,null,null,
565 null,null,null,null,null,null,null,null,null,null,null,null,null,null,
566 null,null,null,null,null,null,null,null,null,null,null,null,null,null,
567 null,null,null,null,null,null,null,null,null,null,null,null,null,null,
568 null,null,null,null,null,null,null,null,null,null,null,null,null,null,
569 null,null,null,null,null,null,null,null,null,null,null,null,null,null,
570 null,null,null,null,null,null,null,null,null,null,null,null,null,null,
571 null,null,null,null,null,null,null,null,null,null,null,null,null,null,
572 null,null,null,null,null,null,null,null,null,null,null,null,null,null,
573 null,"kCLASS","kMODULE","kDEF","kUNDEF","kBEGIN","kRESCUE","kENSURE",
574 "kEND","kIF","kUNLESS","kTHEN","kELSIF","kELSE","kCASE","kWHEN",
575 "kWHILE","kUNTIL","kFOR","kBREAK","kNEXT","kREDO","kRETRY","kIN",
576 "kDO","kDO_COND","kDO_BLOCK","kRETURN","kYIELD","kSUPER","kSELF",
577 "kNIL","kTRUE","kFALSE","kAND","kOR","kNOT","kIF_MOD","kUNLESS_MOD",
578 "kWHILE_MOD","kUNTIL_MOD","kRESCUE_MOD","kALIAS","kDEFINED","klBEGIN",
579 "klEND","k__LINE__","k__FILE__","tIDENTIFIER","tFID","tGVAR","tIVAR",
580 "tCONSTANT","tCVAR","tINTEGER","tFLOAT","tSTRING","tXSTRING",
581 "tREGEXP","tDSTRING","tDXSTRING","tDREGEXP","tNTH_REF","tBACK_REF",
582 "tQWORDS","tUPLUS","tUMINUS","tPOW","tCMP","tEQ","tEQQ","tNEQ","tGEQ",
583 "tLEQ","tANDOP","tOROP","tMATCH","tNMATCH","tDOT2","tDOT3","tAREF",
584 "tASET","tLSHFT","tRSHFT","tCOLON2","tCOLON3","tOP_ASGN","tASSOC",
585 "tLPAREN","tLBRACK","tLBRACE","tSTAR","tAMPER","tSYMBEG","LAST_TOKEN",
586 };
587
588 /** index-checked interface to yyName[].
589 @param token single character or %token value.
590 @return token name or [illegal] or [unknown].
591 */
592 //t public static string yyname (int token) {
593 //t if ((token < 0) || (token > yyName.Length)) return "[illegal]";
594 //t string name;
595 //t if ((name = yyName[token]) != null) return name;
596 //t return "[unknown]";
597 //t }
598
599 /** computes list of expected tokens on error by tracing the tables.
600 @param state for which to compute the list.
601 @return list of token names.
602 */
603 protected string[] yyExpecting (int state) {
604 int token, n, len = 0;
605 bool[] ok = new bool[yyName.Length];
606
607 if ((n = yySindex[state]) != 0)
608 for (token = n < 0 ? -n : 0;
609 (token < yyName.Length) && (n+token < yyTable.Length); ++ token)
610 if (yyCheck[n+token] == token && !ok[token] && yyName[token] != null) {
611 ++ len;
612 ok[token] = true;
613 }
614 if ((n = yyRindex[state]) != 0)
615 for (token = n < 0 ? -n : 0;
616 (token < yyName.Length) && (n+token < yyTable.Length); ++ token)
617 if (yyCheck[n+token] == token && !ok[token] && yyName[token] != null) {
618 ++ len;
619 ok[token] = true;
620 }
621
622 string [] result = new string[len];
623 for (n = token = 0; n < len; ++ token)
624 if (ok[token]) result[n++] = yyName[token];
625 return result;
626 }
627
628 /** the generated parser, with debugging messages.
629 Maintains a state and a value stack, currently with fixed maximum size.
630 @param yyLex scanner.
631 @param yydebug debug message writer implementing yyDebug, or null.
632 @return result of the last reduction, if any.
633 @throws yyException on irrecoverable parse error.
634 */
635 public Object yyparse (yyParser.yyInput yyLex, Object yydebug)
636 {
637 //t this.yydebug = (yydebug.yyDebug)yydebug;
638 return yyparse(yyLex);
639 }
640
641 /** initial size and increment of the state/value stack [default 256].
642 This is not final so that it can be overwritten outside of invocations
643 of yyparse().
644 */
645 protected int yyMax;
646
647 /** executed at the beginning of a reduce action.
648 Used as $$ = yyDefault($1), prior to the user-specified action, if any.
649 Can be overwritten to provide deep copy, etc.
650 @param first value for $1, or null.
651 @return first.
652 */
653 protected Object yyDefault (Object first) {
654 return first;
655 }
656
657 /** the generated parser.
658 Maintains a state and a value stack, currently with fixed maximum size.
659 @param yyLex scanner.
660 @return result of the last reduction, if any.
661 @throws yyException on irrecoverable parse error.
662 */
663 public Object yyparse (yyParser.yyInput yyLex)
664 {
665 if (yyMax <= 0) yyMax = 256; // initial size
666 int yyState = 0; // state stack ptr
667 int [] yyStates = new int[yyMax]; // state stack
668 Object yyVal = null; // value stack ptr
669 Object [] yyVals = new Object[yyMax]; // value stack
670 int yyToken = -1; // current input
671 int yyErrorFlag = 0; // #tks to shift
672
673 int yyTop = 0;
674 goto skip;
675 yyLoop:
676 yyTop++;
677 skip:
678 for (;; ++ yyTop) {
679 if (yyTop >= yyStates.Length) { // dynamically increase
680 int[] i = new int[yyStates.Length+yyMax];
681 System.Array.Copy(yyStates, i, 0);
682 yyStates = i;
683 Object[] o = new Object[yyVals.Length+yyMax];
684 System.Array.Copy(yyVals, o, 0);
685 yyVals = o;
686 }
687 yyStates[yyTop] = yyState;
688 yyVals[yyTop] = yyVal;
689 //t if (yydebug != null) yydebug.push(yyState, yyVal);
690
691 yyDiscarded: for (;;) { // discarding a token does not change stack
692 int yyN;
693 if ((yyN = yyDefRed[yyState]) == 0) { // else [default] reduce (yyN)
694 if (yyToken < 0) {
695 yyToken = yyLex.advance() ? yyLex.token() : 0;
696 //t if (yydebug != null)
697 //t yydebug.lex(yyState, yyToken, yyname(yyToken), yyLex.value());
698 }
699 if ((yyN = yySindex[yyState]) != 0 && ((yyN += yyToken) >= 0)
700 && (yyN < yyTable.Length) && (yyCheck[yyN] == yyToken)) {
701 //t if (yydebug != null)
702 //t yydebug.shift(yyState, yyTable[yyN], yyErrorFlag-1);
703 yyState = yyTable[yyN]; // shift to yyN
704 yyVal = yyLex.value();
705 yyToken = -1;
706 if (yyErrorFlag > 0) -- yyErrorFlag;
707 goto yyLoop;
708 }
709 if ((yyN = yyRindex[yyState]) != 0 && (yyN += yyToken) >= 0
710 && yyN < yyTable.Length && yyCheck[yyN] == yyToken)
711 yyN = yyTable[yyN]; // reduce (yyN)
712 else
713 switch (yyErrorFlag) {
714
715 case 0:
716 yyerror("syntax error", yyExpecting(yyState));
717 //t if (yydebug != null) yydebug.error("syntax error");
718 goto case 1;
719 case 1: case 2:
720 yyErrorFlag = 3;
721 do {
722 if ((yyN = yySindex[yyStates[yyTop]]) != 0
723 && (yyN += Token.yyErrorCode) >= 0 && yyN < yyTable.Length
724 && yyCheck[yyN] == Token.yyErrorCode) {
725 //t if (yydebug != null)
726 //t yydebug.shift(yyStates[yyTop], yyTable[yyN], 3);
727 yyState = yyTable[yyN];
728 yyVal = yyLex.value();
729 goto yyLoop;
730 }
731 //t if (yydebug != null) yydebug.pop(yyStates[yyTop]);
732 } while (-- yyTop >= 0);
733 //t if (yydebug != null) yydebug.reject();
734 throw new yyParser.yyException("irrecoverable syntax error");
735
736 case 3:
737 if (yyToken == 0) {
738 //t if (yydebug != null) yydebug.reject();
739 throw new yyParser.yyException("irrecoverable syntax error at end-of-file");
740 }
741 //t if (yydebug != null)
742 //t yydebug.discard(yyState, yyToken, yyname(yyToken),
743 //t yyLex.value());
744 yyToken = -1;
745 goto yyDiscarded; // leave stack alone
746 }
747 }
748 int yyV = yyTop + 1-yyLen[yyN];
749 //t if (yydebug != null)
750 //t yydebug.reduce(yyState, yyStates[yyV-1], yyN, yyRule[yyN], yyLen[yyN]);
751 yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]);
752 switch (yyN) {
753 case 1:
754 #line 239 "parse.y"
755 {
756 yyVal = thread.dyna_vars;
757 lex.State = EXPR.BEG;
758 thread.TopLocalInit();
759 /*
760 if ((VALUE)ruby_class == rb_cObject) class_nest = 0;
761 else class_nest = 1;
762 */
763 }
764 break;
765 case 2:
766 #line 249 "parse.y"
767 {
768 if (((RNode)yyVals[0+yyTop]) != null && !compile_for_eval) {
769 /* last expression should not be void */
770 if (((RNode)yyVals[0+yyTop]) is RNBlock)
771 {
772 RNode node = ((RNode)yyVals[0+yyTop]);
773 while (node.next != null) {
774 node = node.next;
775 }
776 void_expr(node.head);
777 }
778 else
779 {
780 void_expr(((RNode)yyVals[0+yyTop]));
781 }
782 }
783 evalTree = block_append(evalTree, ((RNode)yyVals[0+yyTop]));
784 thread.TopLocalSetup();
785 class_nest = 0;
786 thread.dyna_vars = ((RVarmap)yyVals[-1+yyTop]);
787 }
788 break;
789 case 3:
790 #line 272 "parse.y"
791 {
792 void_stmts(((RNode)yyVals[-1+yyTop]));
793 yyVal = ((RNode)yyVals[-1+yyTop]);
794 }
795 break;
796 case 5:
797 #line 279 "parse.y"
798 {
799 yyVal = new RNNewLine(thread, ((RNode)yyVals[0+yyTop]));
800 }
801 break;
802 case 6:
803 #line 283 "parse.y"
804 {
805 yyVal = block_append(((RNode)yyVals[-2+yyTop]), new RNNewLine(thread, ((RNode)yyVals[0+yyTop])));
806 }
807 break;
808 case 7:
809 #line 287 "parse.y"
810 {
811 yyVal = ((RNode)yyVals[0+yyTop]);
812 }
813 break;
814 case 8:
815 #line 291 "parse.y"
816 {lex.State = EXPR.FNAME;}
817 break;
818 case 9:
819 #line 292 "parse.y"
820 {
821 if (in_def != 0 || in_single != 0)
822 yyerror("alias within method");
823 yyVal = new RNAlias(thread, ((uint)yyVals[-2+yyTop]), ((uint)yyVals[0+yyTop]));
824 }
825 break;
826 case 10:
827 #line 298 "parse.y"
828 {
829 if (in_def != 0 || in_single != 0)
830 yyerror("alias within method");
831 yyVal = new RNVAlias(thread, ((uint)yyVals[-1+yyTop]), ((uint)yyVals[0+yyTop]));
832 }
833 break;
834 case 11:
835 #line 304 "parse.y"
836 {
837 if (in_def != 0 || in_single != 0)
838 yyerror("alias within method");
839 string buf = "$" + Convert.ToChar(((RNode)yyVals[0+yyTop]).nth);
840 yyVal = new RNVAlias(thread, ((uint)yyVals[-1+yyTop]), intern(buf));
841 }
842 break;
843 case 12:
844 #line 311 "parse.y"
845 {
846 yyerror("can't make alias for the number variables");
847 yyVal = null;
848 }
849 break;
850 case 13:
851 #line 316 "parse.y"
852 {
853 if (in_def != 0 || in_single != 0)
854 yyerror("undef within method");
855 yyVal = ((RNode)yyVals[0+yyTop]);
856 }
857 break;
858 case 14:
859 #line 322 "parse.y"
860 {
861 value_expr(((RNode)yyVals[0+yyTop]));
862 yyVal = new RNIf(thread, cond(((RNode)yyVals[0+yyTop])), ((RNode)yyVals[-2+yyTop]));
863 }
864 break;
865 case 15:
866 #line 327 "parse.y"
867 {
868 value_expr(((RNode)yyVals[0+yyTop]));
869 yyVal = new RNUnless(thread, cond(((RNode)yyVals[0+yyTop])), ((RNode)yyVals[-2+yyTop]));
870 }
871 break;
872 case 16:
873 #line 332 "parse.y"
874 {
875 value_expr(((RNode)yyVals[0+yyTop]));
876 if (((RNode)yyVals[-2+yyTop]) != null && ((RNode)yyVals[-2+yyTop]) is RNBegin) {
877 yyVal = new RNWhile(thread, cond(((RNode)yyVals[0+yyTop])), ((RNode)yyVals[-2+yyTop]).body, false);
878 }
879 else {
880 yyVal = new RNWhile(thread, cond(((RNode)yyVals[0+yyTop])), ((RNode)yyVals[-2+yyTop]), true);
881 }
882 }
883 break;
884 case 17:
885 #line 342 "parse.y"
886 {
887 value_expr(((RNode)yyVals[0+yyTop]));
888 if (((RNode)yyVals[-2+yyTop]) != null && ((RNode)yyVals[-2+yyTop]) is RNBegin) {
889 yyVal = new RNUntil(thread, cond(((RNode)yyVals[0+yyTop])), ((RNode)yyVals[-2+yyTop]).body, false);
890 }
891 else {
892 yyVal = new RNUntil(thread, cond(((RNode)yyVals[0+yyTop])), ((RNode)yyVals[-2+yyTop]), true);
893 }
894 }
895 break;
896 case 18:
897 #line 352 "parse.y"
898 {
899 yyVal = new RNRescue(thread, ((RNode)yyVals[-2+yyTop]), new RNResBody(thread, null, ((RNode)yyVals[0+yyTop]), null), null);
900 }
901 break;
902 case 19:
903 #line 356 "parse.y"
904 {
905 if (in_def != 0 || in_single != 0) {
906 yyerror("BEGIN in method");
907 }
908 thread.LocalPush();
909 }
910 break;
911 case 20:
912 #line 363 "parse.y"
913 {
914 thread.evalTreeBegin = block_append(thread.evalTreeBegin,
915 new RNPreExe(thread, ((RNode)yyVals[-1+yyTop])));
916 thread.LocalPop();
917 yyVal = null;
918 }
919 break;
920 case 21:
921 #line 370 "parse.y"
922 {
923 if (compile_for_eval && (in_def != 0|| in_single != 0)) {
924 yyerror("END in method; use at_exit");
925 }
926
927 yyVal = new RNIter(thread, null, new RNPostExe(thread), ((RNode)yyVals[-1+yyTop]));
928 }
929 break;
930 case 22:
931 #line 378 "parse.y"
932 {
933 value_expr(((RNode)yyVals[0+yyTop]));
934 yyVal = node_assign(((RNode)yyVals[-2+yyTop]), ((RNode)yyVals[0+yyTop]));
935 }
936 break;
937 case 23:
938 #line 383 "parse.y"
939 {
940 value_expr(((RNode)yyVals[0+yyTop]));
941 ((RNode)yyVals[-2+yyTop]).val = ((RNode)yyVals[0+yyTop]);
942 yyVal = ((RNode)yyVals[-2+yyTop]);
943 }
944 break;
945 case 24:
946 #line 389 "parse.y"
947 {
948 yyVal = node_assign(((RNode)yyVals[-2+yyTop]), ((RNode)yyVals[0+yyTop]));
949 }
950 break;
951 case 26:
952 #line 395 "parse.y"
953 {
954 /* value_expr($3); // nakada ruby-dev:15905*/
955 ((RNode)yyVals[-2+yyTop]).val = ((RNode)yyVals[0+yyTop]);
956 yyVal = ((RNode)yyVals[-2+yyTop]);
957 }
958 break;
959 case 27:
960 #line 401 "parse.y"
961 {
962 if (!compile_for_eval && in_def != 0 && in_single != 0)
963 yyerror("return appeared outside of method");
964 yyVal = new RNReturn(thread, ((RNode)yyVals[0+yyTop]));
965 }
966 break;
967 case 29:
968 #line 408 "parse.y"
969 {
970 yyVal = logop(typeof(RNAnd), ((RNode)yyVals[-2+yyTop]), ((RNode)yyVals[0+yyTop]));
971 }
972 break;
973 case 30:
974 #line 412 "parse.y"
975 {
976 yyVal = logop(typeof(RNOr), ((RNode)yyVals[-2+yyTop]), ((RNode)yyVals[0+yyTop]));
977 }
978 break;
979 case 31:
980 #line 416 "parse.y"
981 {
982 value_expr(((RNode)yyVals[0+yyTop]));
983 yyVal = new RNNot(thread, cond(((RNode)yyVals[0+yyTop])));
984 }
985 break;
986 case 32:
987 #line 421 "parse.y"
988 {
989 yyVal = new RNNot(thread, cond(((RNode)yyVals[0+yyTop])));
990 }
991 break;
992 case 37:
993 #line 431 "parse.y"
994 {
995 value_expr(((RNode)yyVals[-3+yyTop]));
996 yyVal = new_call(((RNode)yyVals[-3+yyTop]), ((uint)yyVals[-1+yyTop]), ((RNode)yyVals[0+yyTop]));
997 }
998 break;
999 case 38:
1000 #line 436 "parse.y"
1001 {
1002 value_expr(((RNode)yyVals[-3+yyTop]));
1003 yyVal = new_call(((RNode)yyVals[-3+yyTop]), ((uint)yyVals[-1+yyTop]), ((RNode)yyVals[0+yyTop]));
1004 }
1005 break;
1006 case 39:
1007 #line 442 "parse.y"
1008 {
1009 yyVal = new_fcall(((uint)yyVals[-1+yyTop]), ((RNode)yyVals[0+yyTop]));
1010 ((RNode)yyVal).FixPos(((RNode)yyVals[0+yyTop]));
1011 }
1012 break;
1013 case 40:
1014 #line 447 "parse.y"
1015 {
1016 value_expr(((RNode)yyVals[-3+yyTop]));
1017 yyVal = new_call(((RNode)yyVals[-3+yyTop]), ((uint)yyVals[-1+yyTop]), ((RNode)yyVals[0+yyTop]));
1018 ((RNode)yyVal).FixPos(((RNode)yyVals[-3+yyTop]));
1019 }
1020 break;
1021 case 41:
1022 #line 453 "parse.y"
1023 {
1024 value_expr(((RNode)yyVals[-3+yyTop]));
1025 yyVal = new_call(((RNode)yyVals[-3+yyTop]), ((uint)yyVals[-1+yyTop]), ((RNode)yyVals[0+yyTop]));
1026 ((RNode)yyVal).FixPos(((RNode)yyVals[-3+yyTop]));
1027 }
1028 break;
1029 case 42:
1030 #line 459 "parse.y"
1031 {
1032 if (!compile_for_eval && in_def == 0 && in_single == 0)
1033 yyerror("super called outside of method");
1034 yyVal = new_super(((RNode)yyVals[0+yyTop]));
1035 ((RNode)yyVal).FixPos(((RNode)yyVals[0+yyTop]));
1036 }
1037 break;
1038 case 43:
1039 #line 466 "parse.y"
1040 {
1041 yyVal = new RNYield(thread, ((RNode)yyVals[0+yyTop]));
1042 ((RNode)yyVal).FixPos(((RNode)yyVals[0+yyTop]));
1043 }
1044 break;
1045 case 45:
1046 #line 473 "parse.y"
1047 {
1048 yyVal = ((RNode)yyVals[-1+yyTop]);
1049 }
1050 break;
1051 case 47:
1052 #line 479 "parse.y"
1053 {
1054 yyVal = new RNMAsgn(thread, new RNArray(thread, ((RNode)yyVals[-1+yyTop])));
1055 }
1056 break;
1057 case 48:
1058 #line 484 "parse.y"
1059 {
1060 yyVal = new RNMAsgn(thread, ((RNode)yyVals[0+yyTop]));
1061 }
1062 break;
1063 case 49:
1064 #line 488 "parse.y"
1065 {
1066 yyVal = new RNMAsgn(thread, RNode.list_append(thread,((RNode)yyVals[-1+yyTop]),((RNode)yyVals[0+yyTop])));
1067 }
1068 break;
1069 case 50:
1070 #line 492 "parse.y"
1071 {
1072 yyVal = new RNMAsgn(thread, ((RNode)yyVals[-2+yyTop]), ((RNode)yyVals[0+yyTop]));
1073 }
1074 break;
1075 case 51:
1076 #line 496 "parse.y"
1077 {
1078 yyVal = new RNMAsgn(thread, ((RNode)yyVals[-1+yyTop]), -1);
1079 }
1080 break;
1081 case 52:
1082 #line 500 "parse.y"
1083 {
1084 yyVal = new RNMAsgn(thread, null, ((RNode)yyVals[0+yyTop]));
1085 }
1086 break;
1087 case 53:
1088 #line 504 "parse.y"
1089 {
1090 yyVal = new RNMAsgn(thread, null, -1);
1091 }
1092 break;
1093 case 55:
1094 #line 510 "parse.y"
1095 {
1096 yyVal = ((RNode)yyVals[-1+yyTop]);
1097 }
1098 break;
1099 case 56:
1100 #line 515 "parse.y"
1101 {
1102 yyVal = new RNArray(thread, ((RNode)yyVals[-1+yyTop]));
1103 }
1104 break;
1105 case 57:
1106 #line 519 "parse.y"
1107 {
1108 yyVal = RNode.list_append(thread, ((RNode)yyVals[-2+yyTop]), ((RNode)yyVals[-1+yyTop]));
1109 }
1110 break;
1111 case 58:
1112 #line 524 "parse.y"
1113 {
1114 yyVal = assignable(((uint)yyVals[0+yyTop]), null);
1115 }
1116 break;
1117 case 59:
1118 #line 528 "parse.y"
1119 {
1120 yyVal = aryset(((RNode)yyVals[-3+yyTop]), ((RNode)yyVals[-1+yyTop]));
1121 }
1122 break;
1123 case 60:
1124 #line 532 "parse.y"
1125 {
1126 yyVal = attrset(((RNode)yyVals[-2+yyTop]), ((uint)yyVals[0+yyTop]));
1127 }
1128 break;
1129 case 61:
1130 #line 536 "parse.y"
1131 {
1132 yyVal = attrset(((RNode)yyVals[-2+yyTop]), ((uint)yyVals[0+yyTop]));
1133 }
1134 break;
1135 case 62:
1136 #line 540 "parse.y"
1137 {
1138 yyVal = attrset(((RNode)yyVals[-2+yyTop]), ((uint)yyVals[0+yyTop]));
1139 }
1140 break;
1141 case 63:
1142 #line 544 "parse.y"
1143 {
1144 backref_error(((RNode)yyVals[0+yyTop]));
1145 yyVal = null;
1146 }
1147 break;
1148 case 64:
1149 #line 550 "parse.y"
1150 {
1151 yyVal = assignable(((uint)yyVals[0+yyTop]), null);
1152 }
1153 break;
1154 case 65:
1155 #line 554 "parse.y"
1156 {
1157 yyVal = aryset(((RNode)yyVals[-3+yyTop]), ((RNode)yyVals[-1+yyTop]));
1158 }
1159 break;
1160 case 66:
1161 #line 558 "parse.y"
1162 {
1163 yyVal = attrset(((RNode)yyVals[-2+yyTop]), ((uint)yyVals[0+yyTop]));
1164 }
1165 break;
1166 case 67:
1167 #line 562 "parse.y"
1168 {
1169 yyVal = attrset(((RNode)yyVals[-2+yyTop]), ((uint)yyVals[0+yyTop]));
1170 }
1171 break;
1172 case 68:
1173 #line 566 "parse.y"
1174 {
1175 yyVal = attrset(((RNode)yyVals[-2+yyTop]), ((uint)yyVals[0+yyTop]));
1176 }
1177 break;
1178 case 69:
1179 #line 570 "parse.y"
1180 {
1181 backref_error(((RNode)yyVals[0+yyTop]));
1182 yyVal = null;
1183 }
1184 break;
1185 case 70:
1186 #line 576 "parse.y"
1187 {
1188 yyerror("class/module name must be CONSTANT");
1189 }
1190 break;
1191 case 75:
1192 #line 585 "parse.y"
1193 {
1194 lex.State = EXPR.END;
1195 if (((object)yyVals[0+yyTop]) is int)
1196 yyVal = ((int)yyVals[0+yyTop]);
1197 else
1198 yyVal = ((char)yyVals[0+yyTop]);
1199 }
1200 break;
1201 case 76:
1202 #line 593 "parse.y"
1203 {
1204 lex.State = EXPR.END;
1205 yyVal = ((uint)yyVals[0+yyTop]);
1206 }
1207 break;
1208 case 79:
1209 #line 602 "parse.y"
1210 {
1211 yyVal = new RNUndef(thread, ((uint)yyVals[0+yyTop]));
1212 }
1213 break;
1214 case 80:
1215 #line 605 "parse.y"
1216 {lex.State = EXPR.FNAME;}
1217 break;
1218 case 81:
1219 #line 606 "parse.y"
1220 {
1221 yyVal = block_append(((RNode)yyVals[-3+yyTop]), new RNUndef(thread, ((uint)yyVals[0+yyTop])));
1222 }
1223 break;
1224 case 82:
1225 #line 610 "parse.y"
1226 { yyVal = '|'; }
1227 break;
1228 case 83:
1229 #line 611 "parse.y"
1230 { yyVal = '^'; }
1231 break;
1232 case 84:
1233 #line 612 "parse.y"
1234 { yyVal = '&'; }
1235 break;
1236 case 85:
1237 #line 613 "parse.y"
1238 { yyVal = Token.tCMP; }
1239 break;
1240 case 86:
1241 #line 614 "parse.y"
1242 { yyVal = Token.tEQ; }
1243 break;
1244 case 87:
1245 #line 615 "parse.y"
1246 { yyVal = Token.tEQQ; }
1247 break;
1248 case 88:
1249 #line 616 "parse.y"
1250 { yyVal = Token.tMATCH; }
1251 break;
1252 case 89:
1253 #line 617 "parse.y"
1254 { yyVal = '>'; }
1255 break;
1256 case 90:
1257 #line 618 "parse.y"
1258 { yyVal = Token.tGEQ; }
1259 break;
1260 case 91:
1261 #line 619 "parse.y"
1262 { yyVal = '<'; }
1263 break;
1264 case 92:
1265 #line 620 "parse.y"
1266 { yyVal = Token.tLEQ; }
1267 break;
1268 case 93:
1269 #line 621 "parse.y"
1270 { yyVal = Token.tLSHFT; }
1271 break;
1272 case 94:
1273 #line 622 "parse.y"
1274 { yyVal = Token.tRSHFT; }
1275 break;
1276 case 95:
1277 #line 623 "parse.y"
1278 { yyVal = '+'; }
1279 break;
1280 case 96:
1281 #line 624 "parse.y"
1282 { yyVal = '-'; }
1283 break;
1284 case 97:
1285 #line 625 "parse.y"
1286 { yyVal = '*'; }
1287 break;
1288 case 98:
1289 #line 626 "parse.y"
1290 { yyVal = '*'; }
1291 break;
1292 case 99:
1293 #line 627 "parse.y"
1294 { yyVal = '/'; }
1295 break;
1296 case 100:
1297 #line 628 "parse.y"
1298 { yyVal = '%'; }
1299 break;
1300 case 101:
1301 #line 629 "parse.y"
1302 { yyVal = Token.tPOW; }
1303 break;
1304 case 102:
1305 #line 630 "parse.y"
1306 { yyVal = '~'; }
1307 break;
1308 case 103:
1309 #line 631 "parse.y"
1310 { yyVal = Token.tUPLUS; }
1311 break;
1312 case 104:
1313 #line 632 "parse.y"
1314 { yyVal = Token.tUMINUS; }
1315 break;
1316 case 105:
1317 #line 633 "parse.y"
1318 { yyVal = Token.tAREF; }
1319 break;
1320 case 106:
1321 #line 634 "parse.y"
1322 { yyVal = Token.tASET; }
1323 break;
1324 case 107:
1325 #line 635 "parse.y"
1326 { yyVal = '`'; }
1327 break;
1328 case 149:
1329 #line 646 "parse.y"
1330 {
1331 value_expr(((RNode)yyVals[0+yyTop]));
1332 yyVal = node_assign(((RNode)yyVals[-2+yyTop]), ((RNode)yyVals[0+yyTop]));
1333 }
1334 break;
1335 case 150:
1336 #line 650 "parse.y"
1337 {yyVal = assignable(((uint)yyVals[-1+yyTop]), null);}
1338 break;
1339 case 151:
1340 #line 651 "parse.y"
1341 {
1342 if (((RNode)yyVals[-1+yyTop]) != null) {
1343 if (((char)yyVals[-2+yyTop]) == Token.tOROP) {
1344 ((RNode)yyVals[-1+yyTop]).val = ((RNode)yyVals[0+yyTop]);
1345 yyVal = new RNOpAsgnOr(thread, gettable(((uint)yyVals[-3+yyTop])), ((RNode)yyVals[-1+yyTop]));
1346 if (is_instance_id(((uint)yyVals[-3+yyTop]))) {
1347 ((RNode)yyVal).aid = ((uint)yyVals[-3+yyTop]);
1348 }
1349 }
1350 else if (((char)yyVals[-2+yyTop]) == Token.tANDOP) {
1351 ((RNode)yyVals[-1+yyTop]).val = ((RNode)yyVals[0+yyTop]);
1352 yyVal = new RNOpAsgnAnd(thread, gettable(((uint)yyVals[-3+yyTop])), ((RNode)yyVals[-1+yyTop]));
1353 }
1354 else {
1355 yyVal = ((RNode)yyVals[-1+yyTop]);
1356 ((RNode)yyVal).val = call_op(gettable(((uint)yyVals[-3+yyTop])),((char)yyVals[-2+yyTop]),1,((RNode)yyVals[0+yyTop]));
1357 }
1358 ((RNode)yyVal).FixPos(((RNode)yyVals[0+yyTop]));
1359 }
1360 else {
1361 yyVal = null;
1362 }
1363 }
1364 break;
1365 case 152:
1366 #line 675 "parse.y"
1367 {
1368 RNode args = new RNArray(thread, ((RNode)yyVals[0+yyTop]));
1369
1370 RNode tail = RNode.list_append(thread, ((RNode)yyVals[-3+yyTop]), new RNNil(thread));
1371 RNode.list_concat(args, tail);
1372 uint id = ((char)yyVals[-1+yyTop]);
1373 if (id == Token.tOROP) {
1374 id = 0;
1375 }
1376 else if (id == Token.tANDOP) {
1377 id = 1;
1378 }
1379 yyVal = new RNOpAsgn1(thread, ((RNode)yyVals[-5+yyTop]), id, args);
1380 ((RNode)yyVal).FixPos(((RNode)yyVals[-5+yyTop]));
1381 }
1382 break;
1383 case 153:
1384 #line 691 "parse.y"
1385 {
1386 uint id = ((uint)yyVals[-1+yyTop]);
1387 if (id == Token.tOROP) {
1388 id = 0;
1389 }
1390 else if (id == Token.tANDOP) {
1391 id = 1;
1392 }
1393 yyVal = new RNOpAsgn2(thread, ((RNode)yyVals[-4+yyTop]), ((uint)yyVals[-2+yyTop]), id, ((RNode)yyVals[0+yyTop]));
1394 ((RNode)yyVal).FixPos(((RNode)yyVals[-4+yyTop]));
1395 }
1396 break;
1397 case 154:
1398 #line 703 "parse.y"
1399 {
1400 uint id = ((uint)yyVals[-1+yyTop]);
1401 if (id == Token.tOROP) {
1402 id = 0;
1403 }
1404 else if (id == Token.tANDOP) {
1405 id = 1;
1406 }
1407 yyVal = new RNOpAsgn2(thread, ((RNode)yyVals[-4+yyTop]), ((uint)yyVals[-2+yyTop]), id, ((RNode)yyVals[0+yyTop]));
1408 ((RNode)yyVal).FixPos(((RNode)yyVals[-4+yyTop]));
1409 }
1410 break;
1411 case 155:
1412 #line 715 "parse.y"
1413 {
1414 uint id = ((uint)yyVals[-1+yyTop]);
1415 if (id == Token.tOROP) {
1416 id = 0;
1417 }
1418 else if (id == Token.tANDOP) {
1419 id = 1;
1420 }
1421 yyVal = new RNOpAsgn2(thread, ((RNode)yyVals[-4+yyTop]), ((uint)yyVals[-2+yyTop]), id, ((RNode)yyVals[0+yyTop]));
1422 ((RNode)yyVal).FixPos(((RNode)yyVals[-4+yyTop]));
1423 }
1424 break;
1425 case 156:
1426 #line 727 "parse.y"
1427 {
1428 backref_error(((RNode)yyVals[-2+yyTop]));
1429 yyVal = null;
1430 }
1431 break;
1432 case 157:
1433 #line 732 "parse.y"
1434 {
1435 yyVal = new RNDot2(thread, ((RNode)yyVals[-2+yyTop]), ((RNode)yyVals[0+yyTop]));
1436 }
1437 break;
1438 case 158:
1439 #line 736 "parse.y"
1440 {
1441 yyVal = new RNDot3(thread, ((RNode)yyVals[-2+yyTop]), ((RNode)yyVals[0+yyTop]));
1442 }
1443 break;
1444 case 159:
1445 #line 740 "parse.y"
1446 {
1447 yyVal = call_op(((RNode)yyVals[-2+yyTop]), '+', 1, ((RNode)yyVals[0+yyTop]));
1448 }
1449 break;
1450 case 160:
1451 #line 744 "parse.y"
1452 {
1453 yyVal = call_op(((RNode)yyVals[-2+yyTop]), '-', 1, ((RNode)yyVals[0+yyTop]));
1454 }
1455 break;
1456 case 161:
1457 #line 748 "parse.y"
1458 {
1459 yyVal = call_op(((RNode)yyVals[-2+yyTop]), '*', 1, ((RNode)yyVals[0+yyTop]));
1460 }
1461 break;
1462 case 162:
1463 #line 752 "parse.y"
1464 {
1465 yyVal = call_op(((RNode)yyVals[-2+yyTop]), '/', 1, ((RNode)yyVals[0+yyTop]));
1466 }
1467 break;
1468 case 163:
1469 #line 756 "parse.y"
1470 {
1471 yyVal = call_op(((RNode)yyVals[-2+yyTop]), '%', 1, ((RNode)yyVals[0+yyTop]));
1472 }
1473 break;
1474 case 164:
1475 #line 760 "parse.y"
1476 {
1477 bool need_negate = false;
1478 #if UMINUS
1479 if (((RNode)yyVals[-2+yyTop]) is RNLit) {
1480 if (((RNode)yyVals[-2+yyTop]).lit is long ||
1481 ((RNode)yyVals[-2+yyTop]).lit is double ||
1482 ((RNode)yyVals[-2+yyTop]).lit is int /* ||
1483 $1.lit is BIGNUM */
1484 )
1485 {
1486 if (RTEST(rb_funcall(((RNode)yyVals[-2+yyTop]).lit,'<',1,0))) {
1487 ((RNode)yyVals[-2+yyTop]).lit = rb_funcall(((RNode)yyVals[-2+yyTop]).lit,intern("-@"),0,0);
1488 need_negate = true;
1489 }
1490 }
1491 }
1492 #endif
1493 yyVal = call_op(((RNode)yyVals[-2+yyTop]), Token.tPOW, 1, ((RNode)yyVals[0+yyTop]));
1494 if (need_negate) {
1495 yyVal = call_op(((RNode)yyVal), Token.tUMINUS, 0, null);
1496 }
1497 }
1498 break;
1499 case 165:
1500 #line 783 "parse.y"
1501 {
1502 if (((RNode)yyVals[0+yyTop]) != null && ((RNode)yyVals[0+yyTop]) is RNLit) {
1503 yyVal = ((RNode)yyVals[0+yyTop]);
1504 }
1505 else {
1506 yyVal = call_op(((RNode)yyVals[0+yyTop]), Token.tUPLUS, 0, null);
1507 }
1508 }
1509 break;
1510 case 166:
1511 #line 792 "parse.y"
1512 {
1513 if (((RNode)yyVals[0+yyTop]) != null && ((RNode)yyVals[0+yyTop]) is RNLit && (((RNode)yyVals[0+yyTop]).lit is int ||
1514 ((RNode)yyVals[0+yyTop]).lit is long)) {
1515 if (((RNode)yyVals[0+yyTop]).lit is int)
1516 {
1517 int i = (int)((RNode)yyVals[0+yyTop]).lit;
1518 ((RNode)yyVals[0+yyTop]).lit = -i;
1519 }
1520 else
1521 {
1522 long i = (long)((RNode)yyVals[0+yyTop]).lit;
1523 ((RNode)yyVals[0+yyTop]).lit = -i;
1524 }
1525 yyVal = ((RNode)yyVals[0+yyTop]);
1526 }
1527 else {
1528 yyVal = call_op(((RNode)yyVals[0+yyTop]), Token.tUMINUS, 0, null);
1529 }
1530 }
1531 break;
1532 case 167:
1533 #line 812 "parse.y"
1534 {
1535 yyVal = call_op(((RNode)yyVals[-2+yyTop]), '|', 1, ((RNode)yyVals[0+yyTop]));
1536 }
1537 break;
1538 case 168:
1539 #line 816 "parse.y"
1540 {
1541 yyVal = call_op(((RNode)yyVals[-2+yyTop]), '^', 1, ((RNode)yyVals[0+yyTop]));
1542 }
1543 break;
1544 case 169:
1545 #line 820 "parse.y"
1546 {
1547 yyVal = call_op(((RNode)yyVals[-2+yyTop]), '&', 1, ((RNode)yyVals[0+yyTop]));
1548 }
1549 break;
1550 case 170:
1551 #line 824 "parse.y"
1552 {
1553 yyVal = call_op(((RNode)yyVals[-2+yyTop]), Token.tCMP, 1, ((RNode)yyVals[0+yyTop]));
1554 }
1555 break;
1556 case 171:
1557 #line 828 "parse.y"
1558 {
1559 yyVal = call_op(((RNode)yyVals[-2+yyTop]), '>', 1, ((RNode)yyVals[0+yyTop]));
1560 }
1561 break;
1562 case 172:
1563 #line 832 "parse.y"
1564 {
1565 yyVal = call_op(((RNode)yyVals[-2+yyTop]), Token.tGEQ, 1, ((RNode)yyVals[0+yyTop]));
1566 }
1567 break;
1568 case 173:
1569 #line 836 "parse.y"
1570 {
1571 yyVal = call_op(((RNode)yyVals[-2+yyTop]), '<', 1, ((RNode)yyVals[0+yyTop]));
1572 }
1573 break;
1574 case 174:
1575 #line 840 "parse.y"
1576 {
1577 yyVal = call_op(((RNode)yyVals[-2+yyTop]), Token.tLEQ, 1, ((RNode)yyVals[0+yyTop]));
1578 }
1579 break;
1580 case 175:
1581 #line 844 "parse.y"
1582 {
1583 yyVal = call_op(((RNode)yyVals[-2+yyTop]), Token.tEQ, 1, ((RNode)yyVals[0+yyTop]));
1584 }
1585 break;
1586 case 176:
1587 #line 848 "parse.y"
1588 {
1589 yyVal = call_op(((RNode)yyVals[-2+yyTop]), Token.tEQQ, 1, ((RNode)yyVals[0+yyTop]));
1590 }
1591 break;
1592 case 177:
1593 #line 852 "parse.y"
1594 {
1595 yyVal = new RNNot(thread, call_op(((RNode)yyVals[-2+yyTop]), Token.tEQ, 1, ((RNode)yyVals[0+yyTop])));
1596 }
1597 break;
1598 case 178:
1599 #line 856 "parse.y"
1600 {
1601 yyVal = match_gen(((RNode)yyVals[-2+yyTop]), ((RNode)yyVals[0+yyTop]));
1602 }
1603 break;
1604 case 179:
1605 #line 860 "parse.y"
1606 {
1607 yyVal = new RNNot(thread, match_gen(((RNode)yyVals[-2+yyTop]), ((RNode)yyVals[0+yyTop])));
1608 }
1609 break;
1610 case 180:
1611 #line 864 "parse.y"
1612 {
1613 value_expr(((RNode)yyVals[0+yyTop]));
1614 yyVal = new RNNot(thread, cond(((RNode)yyVals[0+yyTop])));
1615 }
1616 break;
1617 case 181:
1618 #line 869 "parse.y"
1619 {
1620 yyVal = call_op(((RNode)yyVals[0+yyTop]), '~', 0, null);
1621 }
1622 break;
1623 case 182:
1624 #line 873 "parse.y"
1625 {
1626 yyVal = call_op(((RNode)yyVals[-2+yyTop]), Token.tLSHFT, 1, ((RNode)yyVals[0+yyTop]));
1627 }
1628 break;
1629 case 183:
1630 #line 877 "parse.y"
1631 {
1632 yyVal = call_op(((RNode)yyVals[-2+yyTop]), Token.tRSHFT, 1, ((RNode)yyVals[0+yyTop]));
1633 }
1634 break;
1635 case 184:
1636 #line 881 "parse.y"
1637 {
1638 yyVal = logop(typeof(RNAnd), ((RNode)yyVals[-2+yyTop]), ((RNode)yyVals[0+yyTop]));
1639 }
1640 break;
1641 case 185:
1642 #line 885 "parse.y"
1643 {
1644 yyVal = logop(typeof(RNOr), ((RNode)yyVals[-2+yyTop]), ((RNode)yyVals[0+yyTop]));
1645 }
1646 break;
1647 case 186:
1648 #line 888 "parse.y"
1649 {in_defined = true;}
1650 break;
1651 case 187:
1652 #line 889 "parse.y"
1653 {
1654 in_defined = false;
1655 yyVal = new RNDefined(thread, ((RNode)yyVals[0+yyTop]));
1656 }
1657 break;
1658 case 188:
1659 #line 894 "parse.y"
1660 {
1661 value_expr(((RNode)yyVals[-4+yyTop]));
1662 yyVal = new RNIf(thread, cond(((RNode)yyVals[-4+yyTop])), ((RNode)yyVals[-2+yyTop]), ((RNode)yyVals[0+yyTop]));
1663 }
1664 break;
1665 case 189:
1666 #line 899 "parse.y"
1667 {
1668 yyVal = ((RNode)yyVals[0+yyTop]);
1669 }
1670 break;
1671 case 191:
1672 #line 905 "parse.y"
1673 {
1674 yyVal = new RNArray(thread, ((RNode)yyVals[-1+yyTop]));
1675 }
1676 break;
1677 case 192:
1678 #line 909 "parse.y"
1679 {
1680 yyVal = RNode.list_append(thread, ((RNode)yyVals[-3+yyTop]), ((RNode)yyVals[-1+yyTop]));
1681 }
1682 break;
1683 case 193:
1684 #line 913 "parse.y"
1685 {
1686 yyVal = ((RNode)yyVals[-1+yyTop]);
1687 }
1688 break;
1689 case 194:
1690 #line 917 "parse.y"
1691 {
1692 value_expr(((RNode)yyVals[-1+yyTop]));
1693 yyVal = arg_concat(((RNode)yyVals[-4+yyTop]), ((RNode)yyVals[-1+yyTop]));
1694 }
1695 break;
1696 case 195:
1697 #line 922 "parse.y"
1698 {
1699 yyVal = new RNArray(thread, new RNHash(thread, ((RNode)yyVals[-1+yyTop])));
1700 }
1701 break;
1702 case 196:
1703 #line 926 "parse.y"
1704 {
1705 value_expr(((RNode)yyVals[-1+yyTop]));
1706 yyVal = new RNRestArgs(thread, ((RNode)yyVals[-1+yyTop]));
1707 }
1708 break;
1709 case 197:
1710 #line 932 "parse.y"
1711 {
1712 yyVal = ((RNode)yyVals[-1+yyTop]);
1713 }
1714 break;
1715 case 198:
1716 #line 936 "parse.y"
1717 {
1718 yyVal = ((RNode)yyVals[-2+yyTop]);
1719 }
1720 break;
1721 case 199:
1722 #line 940 "parse.y"
1723 {
1724 yyVal = new RNArray(thread, ((RNode)yyVals[-2+yyTop]));
1725 }
1726 break;
1727 case 200:
1728 #line 944 "parse.y"
1729 {
1730 yyVal = RNode.list_append(thread, ((RNode)yyVals[-4+yyTop]), ((RNode)yyVals[-2+yyTop]));
1731 }
1732 break;
1733 case 203:
1734 #line 952 "parse.y"
1735 {
1736 yyVal = new RNArray(thread, ((RNode)yyVals[0+yyTop]));
1737 }
1738 break;
1739 case 204:
1740 #line 956 "parse.y"
1741 {
1742 yyVal = RNode.list_append(thread, ((RNode)yyVals[-2+yyTop]), ((RNode)yyVals[0+yyTop]));
1743 }
1744 break;
1745 case 205:
1746 #line 960 "parse.y"
1747 {
1748 yyVal = arg_blk_pass(((RNode)yyVals[-1+yyTop]), ((RNode)yyVals[0+yyTop]));
1749 }
1750 break;
1751 case 206:
1752 #line 964 "parse.y"
1753 {
1754 value_expr(((RNode)yyVals[-1+yyTop]));
1755 yyVal = arg_concat(((RNode)yyVals[-4+yyTop]), ((RNode)yyVals[-1+yyTop]));
1756 yyVal = arg_blk_pass(((RNode)yyVal), ((RNode)yyVals[0+yyTop]));
1757 }
1758 break;
1759 case 207:
1760 #line 970 "parse.y"
1761 {
1762 yyVal = new RNArray(thread, new RNHash(thread, ((RNode)yyVals[-1+yyTop])));
1763 yyVal = arg_blk_pass(((RNode)yyVal), ((RNode)yyVals[0+yyTop]));
1764 }
1765 break;
1766 case 208:
1767 #line 975 "parse.y"
1768 {
1769 value_expr(((RNode)yyVals[-1+yyTop]));
1770 yyVal = arg_concat(new RNArray(thread, new RNHash(thread, ((RNode)yyVals[-4+yyTop]))), ((RNode)yyVals[-1+yyTop]));
1771 yyVal = arg_blk_pass(((RNode)yyVal), ((RNode)yyVals[0+yyTop]));
1772 }
1773 break;
1774 case 209:
1775 #line 981 "parse.y"
1776 {
1777 yyVal = RNode.list_append(thread, ((RNode)yyVals[-3+yyTop]), new RNHash(thread, ((RNode)yyVals[-1+yyTop])));
1778 yyVal = arg_blk_pass(((RNode)yyVal), ((RNode)yyVals[0+yyTop]));
1779 }
1780 break;
1781 case 210:
1782 #line 986 "parse.y"
1783 {
1784 value_expr(((RNode)yyVals[-1+yyTop]));
1785 yyVal = arg_concat(RNode.list_append(thread, ((RNode)yyVals[-6+yyTop]), new RNHash(thread, ((RNode)yyVals[-4+yyTop]))), ((RNode)yyVals[-1+yyTop]));
1786 yyVal = arg_blk_pass(((RNode)yyVal), ((RNode)yyVals[0+yyTop]));
1787 }
1788 break;
1789 case 211:
1790 #line 992 "parse.y"
1791 {
1792 value_expr(((RNode)yyVals[-1+yyTop]));
1793 yyVal = arg_blk_pass(new RNRestArgs(thread, ((RNode)yyVals[-1+yyTop])), ((RNode)yyVals[0+yyTop]));
1794 }
1795 break;
1796 case 213:
1797 #line 998 "parse.y"
1798 {lex.CMDARG_PUSH();}
1799 break;
1800 case 214:
1801 #line 999 "parse.y"
1802 {
1803 lex.CMDARG_POP();
1804 yyVal = ((RNode)yyVals[0+yyTop]);
1805 }
1806 break;
1807 case 215:
1808 #line 1005 "parse.y"
1809 {
1810 value_expr(((RNode)yyVals[0+yyTop]));
1811 yyVal = new RNBlockPass(thread, ((RNode)yyVals[0+yyTop]));
1812 }
1813 break;
1814 case 216:
1815 #line 1011 "parse.y"
1816 {
1817 yyVal = ((RNode)yyVals[0+yyTop]);
1818 }
1819 break;
1820 case 218:
1821 #line 1017 "parse.y"
1822 {
1823 value_expr(((RNode)yyVals[0+yyTop]));
1824 yyVal = new RNArray(thread, ((RNode)yyVals[0+yyTop]));
1825 }
1826 break;
1827 case 219:
1828 #line 1022 "parse.y"
1829 {
1830 value_expr(((RNode)yyVals[0+yyTop]));
1831 yyVal = RNode.list_append(thread, ((RNode)yyVals[-2+yyTop]), ((RNode)yyVals[0+yyTop]));
1832 }
1833 break;
1834 case 220:
1835 #line 1028 "parse.y"
1836 {
1837 value_expr(((RNode)yyVals[0+yyTop]));
1838 yyVal = ((RNode)yyVals[0+yyTop]);
1839 }
1840 break;
1841 case 222:
1842 #line 1035 "parse.y"
1843 {
1844 value_expr(((RNode)yyVals[0+yyTop]));
1845 yyVal = RNode.list_append(thread, ((RNode)yyVals[-2+yyTop]), ((RNode)yyVals[0+yyTop]));
1846 }
1847 break;
1848 case 223:
1849 #line 1040 "parse.y"
1850 {
1851 value_expr(((RNode)yyVals[0+yyTop]));
1852 yyVal = arg_concat(((RNode)yyVals[-3+yyTop]), ((RNode)yyVals[0+yyTop]));
1853 }
1854 break;
1855 case 224:
1856 #line 1045 "parse.y"
1857 {
1858 value_expr(((RNode)yyVals[0+yyTop]));
1859 yyVal = ((RNode)yyVals[0+yyTop]);
1860 }
1861 break;
1862 case 225:
1863 #line 1051 "parse.y"
1864 {
1865 yyVal = ((RNode)yyVals[0+yyTop]);
1866 if (((RNode)yyVals[0+yyTop]) != null) {
1867 if (((RNode)yyVals[0+yyTop]) is RNArray && ((RNode)yyVals[0+yyTop]).next == null) {
1868 yyVal = ((RNode)yyVals[0+yyTop]).head;
1869 }
1870 else if (((RNode)yyVals[0+yyTop]) is RNBlockPass) {
1871 thread.CompileError("block argument should not be given");
1872 }
1873 }
1874 }
1875 break;
1876 case 226:
1877 #line 1064 "parse.y"
1878 {
1879 yyVal = new RNLit(thread, ((object)yyVals[0+yyTop]));
1880 }
1881 break;
1882 case 228:
1883 #line 1069 "parse.y"
1884 {
1885 yyVal = new RNXStr(thread, ruby, ((object)yyVals[0+yyTop]));
1886 }
1887 break;
1888 case 234:
1889 #line 1078 "parse.y"
1890 {
1891 yyVal = new RNVCall(thread, ((uint)yyVals[0+yyTop]));
1892 }
1893 break;
1894 case 235:
1895 #line 1087 "parse.y"
1896 {
1897 RNode nd = ((RNode)yyVals[-4+yyTop]);
1898 if (((RNode)yyVals[-3+yyTop]) == null && ((RNode)yyVals[-2+yyTop]) == null && ((RNode)yyVals[-1+yyTop]) == null)
1899 yyVal = new RNBegin(thread, ((RNode)yyVals[-4+yyTop]));
1900 else {
1901 if (((RNode)yyVals[-3+yyTop]) != null) nd = new RNRescue(thread, ((RNode)yyVals[-4+yyTop]), ((RNode)yyVals[-3+yyTop]), ((RNode)yyVals[-2+yyTop]));
1902 else if (((RNode)yyVals[-2+yyTop]) != null) {
1903 ruby.warn("else without rescue is useless");
1904 nd = block_append(((RNode)yyVals[-4+yyTop]), ((RNode)yyVals[-2+yyTop]));
1905 }
1906 if (((RNode)yyVals[-1+yyTop]) != null) nd = new RNEnsure(thread, ((RNode)yyVals[-4+yyTop]), ((RNode)yyVals[-1+yyTop]));
1907 yyVal = nd;
1908 }
1909 ((RNode)yyVal).FixPos(nd);
1910 }
1911 break;
1912 case 236:
1913 #line 1103 "parse.y"
1914 {
1915 yyVal = ((RNode)yyVals[-1+yyTop]);
1916 }
1917 break;
1918 case 237:
1919 #line 1107 "parse.y"
1920 {
1921 value_expr(((RNode)yyVals[-2+yyTop]));
1922 yyVal = new RNColon2(thread, ((RNode)yyVals[-2+yyTop]), ((uint)yyVals[0+yyTop]));
1923 }
1924 break;
1925 case 238:
1926 #line 1112 "parse.y"
1927 {
1928 yyVal = new RNColon3(thread, ((uint)yyVals[0+yyTop]));
1929 }
1930 break;
1931 case 239:
1932 #line 1116 "parse.y"
1933 {
1934 value_expr(((RNode)yyVals[-3+yyTop]));
1935 yyVal = new RNCall(thread, ((RNode)yyVals[-3+yyTop]), Token.tAREF, ((RNode)yyVals[-1+yyTop]));
1936 }
1937 break;
1938 case 240:
1939 #line 1121 "parse.y"
1940 {
1941 if (((RNode)yyVals[-1+yyTop]) == null)
1942 yyVal = new RNZArray(thread); /* zero length array*/
1943 else {
1944 yyVal = ((RNode)yyVals[-1+yyTop]);
1945 }
1946 }
1947 break;
1948 case 241:
1949 #line 1129 "parse.y"
1950 {
1951 yyVal = new RNHash(thread, ((RNode)yyVals[-1+yyTop]));
1952 }
1953 break;
1954 case 242:
1955 #line 1133 "parse.y"
1956 {
1957 if (!compile_for_eval && in_def == 0 && in_single == 0)
1958 yyerror("return appeared outside of method");
1959 value_expr(((RNode)yyVals[-1+yyTop]));
1960 yyVal = new RNReturn(thread, ((RNode)yyVals[-1+yyTop]));
1961 }
1962 break;
1963 case 243:
1964 #line 1140 "parse.y"
1965 {
1966 if (!compile_for_eval && in_def == 0 && in_single == 0)
1967 yyerror("return appeared outside of method");
1968 yyVal = new RNReturn(thread);
1969 }
1970 break;
1971 case 244:
1972 #line 1146 "parse.y"
1973 {
1974 if (!compile_for_eval && in_def == 0 && in_single == 0)
1975 yyerror("return appeared outside of method");
1976 yyVal = new RNReturn(thread);
1977 }
1978 break;
1979 case 245:
1980 #line 1152 "parse.y"
1981 {
1982 value_expr(((RNode)yyVals[-1+yyTop]));
1983 yyVal = new RNYield(thread, ((RNode)yyVals[-1+yyTop]));
1984 }
1985 break;
1986 case 246:
1987 #line 1157 "parse.y"
1988 {
1989 yyVal = new RNYield(thread);
1990 }
1991 break;
1992 case 247:
1993 #line 1161 "parse.y"
1994 {
1995 yyVal = new RNYield(thread);
1996 }
1997 break;
1998 case 248:
1999 #line 1164 "parse.y"
2000 {in_defined = true;}
2001 break;
2002 case 249:
2003 #line 1165 "parse.y"
2004 {
2005 in_defined = false;
2006 yyVal = new RNDefined(thread, ((RNode)yyVals[-1+yyTop]));
2007 }
2008 break;
2009 case 250:
2010 #line 1170 "parse.y"
2011 {
2012 ((RNode)yyVals[0+yyTop]).iter = new RNFCall(thread, ((uint)yyVals[-1+yyTop]));
2013 yyVal = ((RNode)yyVals[0+yyTop]);
2014 }
2015 break;
2016 case 252:
2017 #line 1176 "parse.y"
2018 {
2019 if (((RNode)yyVals[-1+yyTop]) != null && ((RNode)yyVals[-1+yyTop]) is RNBlockPass) {
2020 thread.CompileError("both block arg and actual block given");
2021 }
2022 ((RNode)yyVals[0+yyTop]).iter = ((RNode)yyVals[-1+yyTop]);
2023 yyVal = ((RNode)yyVals[0+yyTop]);
2024 ((RNode)yyVal).FixPos(((RNode)yyVals[-1+yyTop]));
2025 }
2026 break;
2027 case 253:
2028 #line 1188 "parse.y"
2029 {
2030 value_expr(((RNode)yyVals[-4+yyTop]));
2031 yyVal = new RNIf(thread, cond(((RNode)yyVals[-4+yyTop])), ((RNode)yyVals[-2+yyTop]), ((RNode)yyVals[-1+yyTop]));
2032 ((RNode)yyVal).FixPos(((RNode)yyVals[-4+yyTop]));
2033 }
2034 break;
2035 case 254:
2036 #line 1197 "parse.y"
2037 {
2038 value_expr(((RNode)yyVals[-4+yyTop]));
2039 yyVal = new RNUnless(thread, cond(((RNode)yyVals[-4+yyTop])), ((RNode)yyVals[-2+yyTop]), ((RNode)yyVals[-1+yyTop]));
2040 ((RNode)yyVal).FixPos(((RNode)yyVals[-4+yyTop]));
2041 }
2042 break;
2043 case 255:
2044 #line 1202 "parse.y"
2045 {lex.COND_PUSH();}
2046 break;
2047 case 256:
2048 #line 1202 "parse.y"
2049 {lex.COND_POP();}
2050 break;
2051 case 257:
2052 #line 1205 "parse.y"
2053 {
2054 value_expr(((RNode)yyVals[-4+yyTop]));
2055 yyVal = new RNWhile(thread, cond(((RNode)yyVals[-4+yyTop])), ((RNode)yyVals[-1+yyTop]), true);
2056 ((RNode)yyVal).FixPos(((RNode)yyVals[-4+yyTop]));
2057 }
2058 break;
2059 case 258:
2060 #line 1210 "parse.y"
2061 {lex.COND_PUSH();}
2062 break;
2063 case 259:
2064 #line 1210 "parse.y"
2065 {lex.COND_POP();}
2066 break;
2067 case 260:
2068 #line 1213 "parse.y"
2069 {
2070 value_expr(((RNode)yyVals[-4+yyTop]));
2071 yyVal = new RNUntil(thread, cond(((RNode)yyVals[-4+yyTop])), ((RNode)yyVals[-1+yyTop]), true);
2072 ((RNode)yyVal).FixPos(((RNode)yyVals[-4+yyTop]));
2073 }
2074 break;
2075 case 261:
2076 #line 1221 "parse.y"
2077 {
2078 value_expr(((RNode)yyVals[-3+yyTop]));
2079 yyVal = new RNCase(thread, ((RNode)yyVals[-3+yyTop]), ((RNode)yyVals[-1+yyTop]));
2080 ((RNode)yyVal).FixPos(((RNode)yyVals[-3+yyTop]));
2081 }
2082 break;
2083 case 262:
2084 #line 1227 "parse.y"
2085 {
2086 yyVal = ((RNode)yyVals[-1+yyTop]);
2087 }
2088 break;
2089 case 263:
2090 #line 1230 "parse.y"
2091 {lex.COND_PUSH();}
2092 break;
2093 case 264:
2094 #line 1230 "parse.y"
2095 {lex.COND_POP();}
2096 break;
2097 case 265:
2098 #line 1233 "parse.y"
2099 {
2100 value_expr(((RNode)yyVals[-4+yyTop]));
2101 yyVal = new RNFor(thread, ((RNode)yyVals[-7+yyTop]), ((RNode)yyVals[-4+yyTop]), ((RNode)yyVals[-1+yyTop]));
2102 }
2103 break;
2104 case 266:
2105 #line 1238 "parse.y"
2106 {
2107 if (in_def != 0|| in_single != 0)
2108 yyerror("class definition in method body");
2109 class_nest++;
2110 thread.LocalPush();
2111 yyVal = sourceline;
2112 }
2113 break;
2114 case 267:
2115 #line 1247 "parse.y"
2116 {
2117 yyVal = new RNClass(thread, ((uint)yyVals[-4+yyTop]), ((RNode)yyVals[-1+yyTop]), ((RNode)yyVals[-3+yyTop]));
2118 ((RNode)yyVal).SetLine(((int)yyVals[-2+yyTop]));
2119 thread.LocalPop();
2120 class_nest--;
2121 }
2122 break;
2123 case 268:
2124 #line 1254 "parse.y"
2125 {
2126 yyVal = in_def;
2127 in_def = 0;
2128 }
2129 break;
2130 case 269:
2131 #line 1259 "parse.y"
2132 {
2133 yyVal = in_single;
2134 in_single = 0;
2135 class_nest++;
2136 thread.LocalPush();
2137 }
2138 break;
2139 case 270:
2140 #line 1267 "parse.y"
2141 {
2142 yyVal = new RNSClass(thread, ((RNode)yyVals[-5+yyTop]), ((RNode)yyVals[-1+yyTop]));
2143 thread.LocalPop();
2144 class_nest--;
2145 in_def = ((int)yyVals[-4+yyTop]);
2146 in_single = ((int)yyVals[-2+yyTop]);
2147 }
2148 break;
2149 case 271:
2150 #line 1275 "parse.y"
2151 {
2152 if (in_def != 0|| in_single != 0)
2153 yyerror("module definition in method body");
2154 class_nest++;
2155 thread.LocalPush();
2156 yyVal = sourceline;
2157 }
2158 break;
2159 case 272:
2160 #line 1284 "parse.y"
2161 {
2162 yyVal = new RNModule(thread, ((uint)yyVals[-3+yyTop]), ((RNode)yyVals[-1+yyTop]));
2163 ((RNode)yyVal).SetLine(((int)yyVals[-2+yyTop]));
2164 thread.LocalPop();
2165 class_nest--;
2166 }
2167 break;
2168 case 273:
2169 #line 1291 "parse.y"
2170 {
2171 if (in_def != 0|| in_single != 0)
2172 yyerror("nested method definition");
2173 yyVal = cur_mid;
2174 if (((object)yyVals[0+yyTop]) is uint)
2175 cur_mid = ((uint)yyVals[0+yyTop]);
2176 else
2177 cur_mid = (uint)((int)yyVals[0+yyTop]);
2178 in_def++;
2179 thread.LocalPush();
2180 }
2181 break;
2182 case 274:
2183 #line 1308 "parse.y"
2184 {
2185 RNode nd = ((RNode)yyVals[-4+yyTop]);
2186 if (((RNode)yyVals[-3+yyTop]) != null) nd = new RNRescue(thread, ((RNode)yyVals[-4+yyTop]), ((RNode)yyVals[-3+yyTop]), ((RNode)yyVals[-2+yyTop]));
2187 else if (((RNode)yyVals[-2+yyTop]) != null) {
2188 ruby.warn("else without rescue is useless");
2189 nd = block_append(((RNode)yyVals[-4+yyTop]), ((RNode)yyVals[-2+yyTop]));
2190 }
2191 if (((RNode)yyVals[-1+yyTop]) != null) nd = new RNEnsure(thread, ((RNode)yyVals[-4+yyTop]), ((RNode)yyVals[-1+yyTop]));
2192
2193 /* NOEX_PRIVATE for toplevel */
2194 uint id;
2195 if (((object)yyVals[-7+yyTop]) is uint)
2196 {
2197 id = ((uint)yyVals[-7+yyTop]);
2198 }
2199 else
2200 {
2201 id = (uint)((int)yyVals[-7+yyTop]);
2202 }
2203 yyVal = new RNDefn(thread, id, ((RNode)yyVals[-5+yyTop]), nd, (class_nest > 0) ? NOEX.PUBLIC : NOEX.PRIVATE);
2204 if (is_attrset_id(id)) ((RNode)yyVal).noex = NOEX.PUBLIC;
2205 ((RNode)yyVal).FixPos(((RNode)yyVals[-5+yyTop]));
2206 thread.LocalPop();
2207 in_def--;
2208 cur_mid = ((uint)yyVals[-6+yyTop]);
2209 }
2210 break;
2211 case 275:
2212 #line 1334 "parse.y"
2213 {lex.State = EXPR.FNAME;}
2214 break;
2215 case 276:
2216 #line 1335 "parse.y"
2217 {
2218 value_expr(((RNode)yyVals[-3+yyTop]));
2219 in_single++;
2220 thread.LocalPush();
2221 lex.State = EXPR.END; /* force for args */
2222 }
2223 break;
2224 case 277:
2225 #line 1347 "parse.y"
2226 {
2227 RNode nd = ((RNode)yyVals[-4+yyTop]);
2228 if (((RNode)yyVals[-3+yyTop]) != null) nd = new RNRescue(thread, ((RNode)yyVals[-4+yyTop]), ((RNode)yyVals[-3+yyTop]), ((RNode)yyVals[-2+yyTop]));
2229 else if (((RNode)yyVals[-2+yyTop]) != null) {
2230 ruby.warn("else without rescue is useless");
2231 nd = block_append(((RNode)yyVals[-4+yyTop]), ((RNode)yyVals[-2+yyTop]));
2232 }
2233 if (((RNode)yyVals[-1+yyTop]) != null) nd = new RNEnsure(thread, ((RNode)yyVals[-4+yyTop]), ((RNode)yyVals[-1+yyTop]));
2234
2235 yyVal = new RNDefs(thread, ((RNode)yyVals[-10+yyTop]), ((uint)yyVals[-7+yyTop]), ((RNode)yyVals[-5+yyTop]), nd);
2236 ((RNode)yyVal).FixPos(((RNode)yyVals[-10+yyTop]));
2237 thread.LocalPop();
2238 in_single--;
2239 }
2240 break;
2241 case 278:
2242 #line 1362 "parse.y"
2243 {
2244 yyVal = new RNBreak(thread);
2245 }
2246 break;
2247 case 279:
2248 #line 1366 "parse.y"
2249 {
2250 yyVal = new RNNext(thread);
2251 }
2252 break;
2253 case 280:
2254 #line 1370 "parse.y"
2255 {
2256 yyVal = new RNRedo(thread);
2257 }
2258 break;
2259 case 281:
2260 #line 1374 "parse.y"
2261 {
2262 yyVal = new RNRetry(thread);
2263 }
2264 break;
2265 case 288:
2266 #line 1389 "parse.y"
2267 {
2268 value_expr(((RNode)yyVals[-3+yyTop]));
2269 yyVal = new RNIf(thread, cond(((RNode)yyVals[-3+yyTop])), ((RNode)yyVals[-1+yyTop]), ((RNode)yyVals[0+yyTop]));
2270 }
2271 break;
2272 case 290:
2273 #line 1396 "parse.y"
2274 {
2275 yyVal = ((RNode)yyVals[0+yyTop]);
2276 }
2277 break;
2278 case 294:
2279 #line 1405 "parse.y"
2280 {
2281 yyVal = new RNBlockNoArg(thread);
2282 }
2283 break;
2284 case 295:
2285 #line 1409 "parse.y"
2286 {
2287 yyVal = new RNBlockNoArg(thread);
2288 }
2289 break;
2290 case 296:
2291 #line 1413 "parse.y"
2292 {
2293 yyVal = ((RNode)yyVals[-1+yyTop]);
2294 }
2295 break;
2296 case 297:
2297 #line 1419 "parse.y"
2298 {
2299 yyVal = thread.DynaPush();
2300 }
2301 break;
2302 case 298:
2303 #line 1425 "parse.y"
2304 {
2305 yyVal = new RNIter(thread, ((RNode)yyVals[-2+yyTop]), null, ((RNode)yyVals[-1+yyTop]));
2306 ((RNode)yyVal).FixPos((((RNode)yyVals[-2+yyTop]) != null) ? ((RNode)yyVals[-2+yyTop]) : ((RNode)yyVals[-1+yyTop]));
2307 thread.DynaPop(((RVarmap)yyVals[-3+yyTop]));
2308 }
2309 break;
2310 case 299:
2311 #line 1432 "parse.y"
2312 {
2313 if (((RNode)yyVals[-1+yyTop]) != null && ((RNode)yyVals[-1+yyTop]) is RNBlockPass) {
2314 thread.CompileError("both block arg and actual block given");
2315 }
2316 ((RNode)yyVals[0+yyTop]).iter = ((RNode)yyVals[-1+yyTop]);
2317 yyVal = ((RNode)yyVals[0+yyTop]);
2318 ((RNode)yyVal).FixPos(((RNode)yyVals[0+yyTop]));
2319 }
2320 break;
2321 case 300:
2322 #line 1441 "parse.y"
2323 {
2324 value_expr(((RNode)yyVals[-3+yyTop]));
2325 yyVal = new_call(((RNode)yyVals[-3+yyTop]), ((uint)yyVals[-1+yyTop]), ((RNode)yyVals[0+yyTop]));
2326 }
2327 break;
2328 case 301:
2329 #line 1446 "parse.y"
2330 {
2331 value_expr(((RNode)yyVals[-3+yyTop]));
2332 yyVal = new_call(((RNode)yyVals[-3+yyTop]), ((uint)yyVals[-1+yyTop]), ((RNode)yyVals[0+yyTop]));
2333 }
2334 break;
2335 case 302:
2336 #line 1452 "parse.y"
2337 {
2338 yyVal = new_fcall(((uint)yyVals[-1+yyTop]), ((RNode)yyVals[0+yyTop]));
2339 ((RNode)yyVal).FixPos(((RNode)yyVals[0+yyTop]));
2340 }
2341 break;
2342 case 303:
2343 #line 1457 "parse.y"
2344 {
2345 value_expr(((RNode)yyVals[-3+yyTop]));
2346 yyVal = new_call(((RNode)yyVals[-3+yyTop]), ((uint)yyVals[-1+yyTop]), ((RNode)yyVals[0+yyTop]));
2347 ((RNode)yyVal).FixPos(((RNode)yyVals[-3+yyTop]));
2348 }
2349 break;
2350 case 304:
2351 #line 1463 "parse.y"
2352 {
2353 value_expr(((RNode)yyVals[-3+yyTop]));
2354 yyVal = new_call(((RNode)yyVals[-3+yyTop]), ((uint)yyVals[-1+yyTop]), ((RNode)yyVals[0+yyTop]));
2355 ((RNode)yyVal).FixPos(((RNode)yyVals[-3+yyTop]));
2356 }
2357 break;
2358 case 305:
2359 #line 1469 "parse.y"
2360 {
2361 value_expr(((RNode)yyVals[-2+yyTop]));
2362 yyVal = new_call(((RNode)yyVals[-2+yyTop]), ((uint)yyVals[0+yyTop]), null);
2363 }
2364 break;
2365 case 306:
2366 #line 1474 "parse.y"
2367 {
2368 if (!compile_for_eval && in_def == 0 &&
2369 in_single == 0 && !in_defined)
2370 yyerror("super called outside of method");
2371 yyVal = new_super(((RNode)yyVals[0+yyTop]));
2372 }
2373 break;
2374 case 307:
2375 #line 1481 "parse.y"
2376 {
2377 if (!compile_for_eval && in_def == 0 &&
2378 in_single == 0 && !in_defined)
2379 yyerror("super called outside of method");
2380 yyVal = new RNZSuper(thread, ruby);
2381 }
2382 break;
2383 case 308:
2384 #line 1489 "parse.y"
2385 {
2386 yyVal = thread.DynaPush();
2387 }
2388 break;
2389 case 309:
2390 #line 1494 "parse.y"
2391 {
2392 yyVal = new RNIter(thread, ((RNode)yyVals[-2+yyTop]), null, ((RNode)yyVals[-1+yyTop]));
2393 ((RNode)yyVal).FixPos(((RNode)yyVals[-1+yyTop]));
2394 thread.DynaPop(((RVarmap)yyVals[-3+yyTop]));
2395 }
2396 break;
2397 case 310:
2398 #line 1500 "parse.y"
2399 {
2400 yyVal = thread.DynaPush();
2401 }
2402 break;
2403 case 311:
2404 #line 1505 "parse.y"
2405 {
2406 yyVal = new RNIter(thread, ((RNode)yyVals[-2+yyTop]), null, ((RNode)yyVals[-1+yyTop]));
2407 ((RNode)yyVal).FixPos(((RNode)yyVals[-1+yyTop]));
2408 thread.DynaPop(((RVarmap)yyVals[-3+yyTop]));
2409 }
2410 break;
2411 case 312:
2412 #line 1514 "parse.y"
2413 {
2414 yyVal = new RNWhen(thread, ((RNode)yyVals[-3+yyTop]), ((RNode)yyVals[-1+yyTop]), ((RNode)yyVals[0+yyTop]));
2415 }
2416 break;
2417 case 314:
2418 #line 1520 "parse.y"
2419 {
2420 value_expr(((RNode)yyVals[0+yyTop]));
2421 yyVal = RNode.list_append(thread, ((RNode)yyVals[-3+yyTop]), new RNWhen(thread, ((RNode)yyVals[0+yyTop])));
2422 }
2423 break;
2424 case 315:
2425 #line 1525 "parse.y"
2426 {
2427 value_expr(((RNode)yyVals[0+yyTop]));
2428 yyVal = new RNArray(thread, new RNWhen(thread, ((RNode)yyVals[0+yyTop])));
2429 }
2430 break;
2431 case 320:
2432 #line 1537 "parse.y"
2433 {
2434 yyVal = ((RNode)yyVals[0+yyTop]);
2435 }
2436 break;
2437 case 322:
2438 #line 1545 "parse.y"
2439 {
2440 RNode nd = ((RNode)yyVals[-3+yyTop]);
2441 RNode nd2 = ((RNode)yyVals[-1+yyTop]);
2442 if (nd != null) {
2443 nd = node_assign(((RNode)yyVals[-3+yyTop]), new RNGVar(thread, ruby, intern("$!")));
2444 nd2 = block_append(nd, ((RNode)yyVals[-1+yyTop]));
2445 }
2446 yyVal = new RNResBody(thread, ((RNode)yyVals[-4+yyTop]), nd2, ((RNode)yyVals[0+yyTop]));
2447 ((RNode)yyVal).FixPos((((RNode)yyVals[-4+yyTop]) != null) ? ((RNode)yyVals[-4+yyTop]) : nd2);
2448 }
2449 break;
2450 case 325:
2451 #line 1559 "parse.y"
2452 {
2453 if (((RNode)yyVals[0+yyTop]) != null)
2454 yyVal = ((RNode)yyVals[0+yyTop]);
2455 else
2456 /* place holder */
2457 yyVal = new RNNil(thread);
2458 }
2459 break;
2460 case 327:
2461 #line 1569 "parse.y"
2462 {
2463 if (((object)yyVals[0+yyTop]) is uint)
2464 yyVal = Symbol.ID2SYM(((uint)yyVals[0+yyTop]));
2465 else
2466 yyVal = Symbol.ID2SYM(((char)yyVals[0+yyTop]));
2467 }
2468 break;
2469 case 329:
2470 #line 1578 "parse.y"
2471 {
2472 yyVal = new RNStr(thread, ruby, ((object)yyVals[0+yyTop]));
2473 }
2474 break;
2475 case 331:
2476 #line 1583 "parse.y"
2477 {
2478 if (((RNode)yyVals[-1+yyTop]) is RNDStr) {
2479 RNode.list_append(thread, ((RNode)yyVals[-1+yyTop]), new RNStr(thread, ruby, ((string)yyVals[0+yyTop])));
2480 }
2481 else {
2482 #if STRCONCAT
2483 rb_str_concat(((RNode)yyVals[-1+yyTop]).lit, ((object)yyVals[0+yyTop]));
2484 #else
2485 ((RNode)yyVals[-1+yyTop]).lit = (string)(((RNode)yyVals[-1+yyTop]).lit) + ((string)yyVals[0+yyTop]);
2486 #endif
2487 }
2488 yyVal = ((RNode)yyVals[-1+yyTop]);
2489 }
2490 break;
2491 case 332:
2492 #line 1597 "parse.y"
2493 {
2494 if (((RNode)yyVals[-1+yyTop]) is RNStr) {
2495 yyVal = new RNDStr(thread, ruby, ((RNode)yyVals[-1+yyTop]).lit);
2496 }
2497 else {
2498 yyVal = ((RNode)yyVals[-1+yyTop]);
2499 }
2500 ((RNode)yyVals[0+yyTop]).head = new RNStr(thread, ruby, ((RNode)yyVals[0+yyTop]).lit);
2501 RNode.list_concat(((RNode)yyVal), new RNArray(thread, ((RNode)yyVals[0+yyTop])));
2502 }
2503 break;
2504 case 333:
2505 #line 1609 "parse.y"
2506 {
2507 lex.State = EXPR.END;
2508 if (((object)yyVals[0+yyTop]) is uint)
2509 yyVal = ((uint)yyVals[0+yyTop]);
2510 else
2511 yyVal = ((char)yyVals[0+yyTop]);
2512 }
2513 break;
2514 case 345:
2515 #line 1630 "parse.y"
2516 {yyVal = (uint)Token.kNIL;}
2517 break;
2518 case 346:
2519 #line 1631 "parse.y"
2520 {yyVal = (uint)Token.kSELF;}
2521 break;
2522 case 347:
2523 #line 1632 "parse.y"
2524 {yyVal = (uint)Token.kTRUE;}
2525 break;
2526 case 348:
2527 #line 1633 "parse.y"
2528 {yyVal = (uint)Token.kFALSE;}
2529 break;
2530 case 349:
2531 #line 1634 "parse.y"
2532 {yyVal = (uint)Token.k__FILE__;}
2533 break;
2534 case 350:
2535 #line 1635 "parse.y"
2536 {yyVal = (uint)Token.k__LINE__;}
2537 break;
2538 case 351:
2539 #line 1638 "parse.y"
2540 {
2541 yyVal = gettable(((uint)yyVals[0+yyTop]));
2542 }
2543 break;
2544 case 354:
2545 #line 1646 "parse.y"
2546 {
2547 yyVal = null;
2548 }
2549 break;
2550 case 355:
2551 #line 1650 "parse.y"
2552 {
2553 lex.State = EXPR.BEG;
2554 }
2555 break;
2556 case 356:
2557 #line 1654 "parse.y"
2558 {
2559 yyVal = ((RNode)yyVals[-1+yyTop]);
2560 }
2561 break;
2562 case 357:
2563 #line 1657 "parse.y"
2564 {yyErrorFlag = 0; yyVal = null;}
2565 break;
2566 case 358:
2567 #line 1660 "parse.y"
2568 {
2569 yyVal = ((RNode)yyVals[-2+yyTop]);
2570 lex.State = EXPR.BEG;
2571 }
2572 break;
2573 case 359:
2574 #line 1665 "parse.y"
2575 {
2576 yyVal = ((RNode)yyVals[-1+yyTop]);
2577 }
2578 break;
2579 case 360:
2580 #line 1670 "parse.y"
2581 {
2582 yyVal = block_append(new RNArgs(thread, ((int)yyVals[-5+yyTop]), ((RNode)yyVals[-3+yyTop]), ((uint)yyVals[-1+yyTop])), ((RNode)yyVals[0+yyTop]));
2583 }
2584 break;
2585 case 361:
2586 #line 1674 "parse.y"
2587 {
2588 yyVal = block_append(new RNArgs(thread, ((int)yyVals[-3+yyTop]), ((RNode)yyVals[-1+yyTop]), -1), ((RNode)yyVals[0+yyTop]));
2589 }
2590 break;
2591 case 362:
2592 #line 1678 "parse.y"
2593 {
2594 yyVal = block_append(new RNArgs(thread, ((int)yyVals[-3+yyTop]), null, ((int)yyVals[-1+yyTop])), ((RNode)yyVals[0+yyTop]));
2595 }
2596 break;
2597 case 363:
2598 #line 1682 "parse.y"
2599 {
2600 yyVal = block_append(new RNArgs(thread, ((int)yyVals[-1+yyTop]), null, -1), ((RNode)yyVals[0+yyTop]));
2601 }
2602 break;
2603 case 364:
2604 #line 1686 "parse.y"
2605 {
2606 yyVal = block_append(new RNArgs(thread, 0, ((RNode)yyVals[-3+yyTop]), ((uint)yyVals[-1+yyTop])), ((RNode)yyVals[0+yyTop]));
2607 }
2608 break;
2609 case 365:
2610 #line 1690 "parse.y"
2611 {
2612 yyVal = block_append(new RNArgs(thread, 0, ((RNode)yyVals[-1+yyTop]), -1), ((RNode)yyVals[0+yyTop]));
2613 }
2614 break;
2615 case 366:
2616 #line 1694 "parse.y"
2617 {
2618 yyVal = block_append(new RNArgs(thread, 0, null, ((int)yyVals[-1+yyTop])), ((RNode)yyVals[0+yyTop]));
2619 }
2620 break;
2621 case 367:
2622 #line 1698 "parse.y"
2623 {
2624 yyVal = block_append(new RNArgs(thread, 0, null, -1), ((RNode)yyVals[0+yyTop]));
2625 }
2626 break;
2627 case 368:
2628 #line 1702 "parse.y"
2629 {
2630 yyVal = new RNArgs(thread, 0, null, -1);
2631 }
2632 break;
2633 case 369:
2634 #line 1707 "parse.y"
2635 {
2636 yyerror("formal argument cannot be a constant");
2637 }
2638 break;
2639 case 370:
2640 #line 1711 "parse.y"
2641 {
2642 yyerror("formal argument cannot be an instance variable");
2643 }
2644 break;
2645 case 371:
2646 #line 1715 "parse.y"
2647 {
2648 yyerror("formal argument cannot be a global variable");
2649 }
2650 break;
2651 case 372:
2652 #line 1719 "parse.y"
2653 {
2654 yyerror("formal argument cannot be a class variable");
2655 }
2656 break;
2657 case 373:
2658 #line 1723 "parse.y"
2659 {
2660 if (!is_local_id(((uint)yyVals[0+yyTop])))
2661 yyerror("formal argument must be local variable");
2662 else if (thread.LocalID(((uint)yyVals[0+yyTop])))
2663 yyerror("duplicate argument name");
2664 thread.LocalCnt(((uint)yyVals[0+yyTop]));
2665 yyVal = 1;
2666 }
2667 break;
2668 case 375:
2669 #line 1734 "parse.y"
2670 {
2671 yyVal = ((int)yyVal) + 1;
2672 }
2673 break;
2674 case 376:
2675 #line 1739 "parse.y"
2676 {
2677 if (!is_local_id(((uint)yyVals[-2+yyTop])))
2678 yyerror("formal argument must be local variable");
2679 else if (thread.LocalID(((uint)yyVals[-2+yyTop])))
2680 yyerror("duplicate optional argument name");
2681 yyVal = assignable(((uint)yyVals[-2+yyTop]), ((RNode)yyVals[0+yyTop]));
2682 }
2683 break;
2684 case 377:
2685 #line 1748 "parse.y"
2686 {
2687 yyVal = new RNBlock(thread, ((RNode)yyVals[0+yyTop]));
2688 ((RNode)yyVal).end = ((RNode)yyVal);
2689 }
2690 break;
2691 case 378:
2692 #line 1753 "parse.y"
2693 {
2694 yyVal = block_append(((RNode)yyVals[-2+yyTop]), ((RNode)yyVals[0+yyTop]));
2695 }
2696 break;
2697 case 379:
2698 #line 1758 "parse.y"
2699 {
2700 if (!is_local_id(((uint)yyVals[0+yyTop])))
2701 yyerror("rest argument must be local variable");
2702 else if (thread.LocalID(((uint)yyVals[0+yyTop])))
2703 yyerror("duplicate rest argument name");
2704 yyVal = thread.LocalCnt(((uint)yyVals[0+yyTop]));
2705 }
2706 break;
2707 case 380:
2708 #line 1766 "parse.y"
2709 {
2710 yyVal = -2;
2711 }
2712 break;
2713 case 381:
2714 #line 1771 "parse.y"
2715 {
2716 if (!is_local_id(((uint)yyVals[0+yyTop])))
2717 yyerror("block argument must be local variable");
2718 else if (thread.LocalID(((uint)yyVals[0+yyTop])))
2719 yyerror("duplicate block argument name");
2720 yyVal = new RNBlockArg(thread, ((uint)yyVals[0+yyTop]), thread.LocalCnt(((uint)yyVals[0+yyTop])));
2721 }
2722 break;
2723 case 382:
2724 #line 1780 "parse.y"
2725 {
2726 yyVal = ((RNode)yyVals[0+yyTop]);
2727 }
2728 break;
2729 case 384:
2730 #line 1786 "parse.y"
2731 {
2732 if (((RNode)yyVals[0+yyTop]) is RNSelf) {
2733 yyVal = new RNSelf(thread);
2734 }
2735 else {
2736 yyVal = ((RNode)yyVals[0+yyTop]);
2737 }
2738 }
2739 break;
2740 case 385:
2741 #line 1794 "parse.y"
2742 {lex.State = EXPR.BEG;}
2743 break;
2744 case 386:
2745 #line 1795 "parse.y"
2746 {
2747 if (((RNode)yyVals[-2+yyTop]) is RNStr ||
2748 ((RNode)yyVals[-2+yyTop]) is RNDStr ||
2749 ((RNode)yyVals[-2+yyTop]) is RNXStr ||
2750 ((RNode)yyVals[-2+yyTop]) is RNDXStr ||
2751 ((RNode)yyVals[-2+yyTop]) is RNDRegx ||
2752 ((RNode)yyVals[-2+yyTop]) is RNLit ||
2753 ((RNode)yyVals[-2+yyTop]) is RNArray ||
2754 ((RNode)yyVals[-2+yyTop]) is RNZArray)
2755 {
2756 yyerror("can't define single method for literals.");
2757 }
2758 yyVal = ((RNode)yyVals[-2+yyTop]);
2759 }
2760 break;
2761 case 388:
2762 #line 1812 "parse.y"
2763 {
2764 yyVal = ((RNode)yyVals[-1+yyTop]);
2765 }
2766 break;
2767 case 389:
2768 #line 1816 "parse.y"
2769 {
2770 if (((RNode)yyVals[-1+yyTop]).alen % 2 != 0) {
2771 yyerror("odd number list for Hash");
2772 }
2773 yyVal = ((RNode)yyVals[-1+yyTop]);
2774 }
2775 break;
2776 case 391:
2777 #line 1825 "parse.y"
2778 {
2779 yyVal = RNode.list_concat(((RNode)yyVals[-2+yyTop]), ((RNode)yyVals[0+yyTop]));
2780 }
2781 break;
2782 case 392:
2783 #line 1830 "parse.y"
2784 {
2785 yyVal = RNode.list_append(thread, new RNArray(thread, ((RNode)yyVals[-2+yyTop])), ((RNode)yyVals[0+yyTop]));
2786 }
2787 break;
2788 case 412:
2789 #line 1860 "parse.y"
2790 {yyErrorFlag = 0;}
2791 break;
2792 case 415:
2793 #line 1864 "parse.y"
2794 {yyErrorFlag = 0;}
2795 break;
2796 case 416:
2797 #line 1867 "parse.y"
2798 {
2799 yyVal = null;
2800 }
2801 break;
2802 #line 2803 "-"
2803 }
2804 yyTop -= yyLen[yyN];
2805 yyState = yyStates[yyTop];
2806 int yyM = yyLhs[yyN];
2807 if (yyState == 0 && yyM == 0) {
2808 //t if (yydebug != null) yydebug.shift(0, yyFinal);
2809 yyState = yyFinal;
2810 if (yyToken < 0) {
2811 yyToken = yyLex.advance() ? yyLex.token() : 0;
2812 //t if (yydebug != null)
2813 //t yydebug.lex(yyState, yyToken,yyname(yyToken), yyLex.value());
2814 }
2815 if (yyToken == 0) {
2816 //t if (yydebug != null) yydebug.accept(yyVal);
2817 return yyVal;
2818 }
2819 goto yyLoop;
2820 }
2821 if (((yyN = yyGindex[yyM]) != 0) && ((yyN += yyState) >= 0)
2822 && (yyN < yyTable.Length) && (yyCheck[yyN] == yyState))
2823 yyState = yyTable[yyN];
2824 else
2825 yyState = yyDgoto[yyM];
2826 //t if (yydebug != null) yydebug.shift(yyStates[yyTop], yyState);
2827 goto yyLoop;
2828 }
2829 }
2830 }
2831
2832 static short [] yyLhs = { -1,
2833 74, 0, 5, 6, 6, 6, 6, 77, 7, 7,
2834 7, 7, 7, 7, 7, 7, 7, 7, 78, 7,
2835 7, 7, 7, 7, 7, 8, 8, 8, 8, 8,
2836 8, 8, 8, 12, 12, 37, 37, 37, 11, 11,
2837 11, 11, 11, 55, 55, 58, 58, 57, 57, 57,
2838 57, 57, 57, 59, 59, 56, 56, 60, 60, 60,
2839 60, 60, 60, 53, 53, 53, 53, 53, 53, 68,
2840 68, 69, 69, 69, 69, 69, 61, 61, 47, 80,
2841 47, 70, 70, 70, 70, 70, 70, 70, 70, 70,
2842 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
2843 70, 70, 70, 70, 70, 70, 70, 79, 79, 79,
2844 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
2845 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
2846 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
2847 79, 79, 79, 79, 79, 79, 79, 79, 9, 81,
2848 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
2849 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
2850 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
2851 9, 9, 9, 9, 9, 83, 9, 9, 9, 29,
2852 29, 29, 29, 29, 29, 29, 26, 26, 26, 26,
2853 27, 27, 25, 25, 25, 25, 25, 25, 25, 25,
2854 25, 25, 85, 28, 31, 30, 30, 22, 22, 33,
2855 33, 34, 34, 34, 23, 10, 10, 10, 10, 10,
2856 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
2857 10, 10, 10, 10, 10, 10, 10, 86, 10, 10,
2858 10, 10, 10, 10, 88, 90, 10, 91, 92, 10,
2859 10, 10, 93, 94, 10, 95, 10, 97, 98, 10,
2860 99, 10, 100, 10, 102, 103, 10, 10, 10, 10,
2861 10, 87, 87, 87, 89, 89, 14, 14, 15, 15,
2862 49, 49, 50, 50, 50, 50, 104, 52, 36, 36,
2863 36, 13, 13, 13, 13, 13, 13, 105, 51, 106,
2864 51, 16, 24, 24, 24, 17, 17, 19, 19, 20,
2865 20, 18, 18, 21, 21, 3, 3, 3, 2, 2,
2866 2, 2, 64, 63, 63, 63, 63, 4, 4, 62,
2867 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
2868 32, 48, 48, 35, 107, 35, 35, 38, 38, 39,
2869 39, 39, 39, 39, 39, 39, 39, 39, 72, 72,
2870 72, 72, 72, 73, 73, 41, 40, 40, 71, 71,
2871 42, 43, 43, 1, 108, 1, 44, 44, 44, 45,
2872 45, 46, 65, 65, 65, 66, 66, 66, 66, 67,
2873 67, 67, 101, 101, 75, 75, 82, 82, 84, 84,
2874 84, 96, 96, 76, 76, 54,
2875 };
2876 static short [] yyLen = { 2,
2877 0, 2, 2, 1, 1, 3, 2, 0, 4, 3,
2878 3, 3, 2, 3, 3, 3, 3, 3, 0, 5,
2879 4, 3, 3, 3, 1, 3, 2, 1, 3, 3,
2880 2, 2, 1, 1, 1, 1, 4, 4, 2, 4,
2881 4, 2, 2, 1, 3, 1, 3, 1, 2, 3,
2882 2, 2, 1, 1, 3, 2, 3, 1, 4, 3,
2883 3, 3, 1, 1, 4, 3, 3, 3, 1, 1,
2884 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
2885 4, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2886 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2887 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2888 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2889 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2890 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2891 1, 1, 1, 1, 1, 1, 1, 1, 3, 0,
2892 4, 6, 5, 5, 5, 3, 3, 3, 3, 3,
2893 3, 3, 3, 3, 2, 2, 3, 3, 3, 3,
2894 3, 3, 3, 3, 3, 3, 3, 3, 3, 2,
2895 2, 3, 3, 3, 3, 0, 4, 5, 1, 1,
2896 2, 4, 2, 5, 2, 3, 3, 4, 4, 6,
2897 1, 1, 1, 3, 2, 5, 2, 5, 4, 7,
2898 3, 1, 0, 2, 2, 2, 1, 1, 3, 1,
2899 1, 3, 4, 2, 1, 1, 1, 1, 1, 1,
2900 1, 1, 1, 1, 6, 3, 3, 2, 4, 3,
2901 3, 4, 3, 1, 4, 3, 1, 0, 6, 2,
2902 1, 2, 6, 6, 0, 0, 7, 0, 0, 7,
2903 5, 4, 0, 0, 9, 0, 6, 0, 0, 8,
2904 0, 5, 0, 9, 0, 0, 12, 1, 1, 1,
2905 1, 1, 1, 2, 1, 1, 1, 5, 1, 2,
2906 1, 1, 1, 2, 1, 3, 0, 5, 2, 4,
2907 4, 2, 4, 4, 3, 2, 1, 0, 5, 0,
2908 5, 5, 1, 4, 2, 1, 1, 1, 1, 2,
2909 1, 6, 1, 1, 2, 1, 1, 1, 1, 1,
2910 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
2911 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2912 1, 1, 1, 1, 0, 4, 2, 4, 2, 6,
2913 4, 4, 2, 4, 2, 2, 1, 0, 1, 1,
2914 1, 1, 1, 1, 3, 3, 1, 3, 2, 1,
2915 2, 2, 1, 1, 0, 5, 1, 2, 2, 1,
2916 3, 3, 1, 1, 1, 1, 1, 1, 1, 1,
2917 1, 1, 1, 1, 0, 1, 0, 1, 0, 1,
2918 1, 1, 1, 1, 2, 0,
2919 };
2920 static short [] yyDefRed = { 1,
2921 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2922 0, 255, 258, 0, 278, 279, 280, 281, 0, 0,
2923 0, 346, 345, 347, 348, 0, 0, 0, 19, 0,
2924 350, 349, 0, 0, 342, 341, 0, 344, 338, 339,
2925 329, 228, 328, 330, 230, 231, 352, 353, 229, 0,
2926 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2927 226, 326, 2, 0, 0, 0, 0, 0, 0, 28,
2928 0, 232, 0, 35, 0, 0, 4, 0, 0, 44,
2929 0, 54, 0, 327, 0, 0, 70, 71, 0, 0,
2930 271, 117, 129, 118, 142, 114, 135, 124, 123, 140,
2931 122, 121, 116, 145, 126, 115, 130, 134, 136, 128,
2932 120, 137, 147, 139, 0, 0, 0, 0, 113, 133,
2933 132, 127, 143, 146, 144, 148, 112, 119, 110, 111,
2934 0, 0, 0, 74, 0, 103, 104, 101, 85, 86,
2935 87, 90, 92, 88, 105, 106, 93, 94, 98, 89,
2936 91, 82, 83, 84, 95, 96, 97, 99, 100, 102,
2937 107, 385, 0, 384, 351, 273, 75, 76, 138, 131,
2938 141, 125, 108, 109, 72, 73, 0, 79, 78, 77,
2939 0, 0, 0, 0, 0, 413, 412, 0, 0, 0,
2940 414, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2941 291, 292, 0, 0, 0, 0, 0, 0, 0, 0,
2942 0, 203, 0, 27, 225, 212, 0, 390, 0, 0,
2943 0, 43, 0, 306, 42, 0, 31, 0, 8, 408,
2944 0, 0, 0, 0, 0, 0, 238, 0, 0, 0,
2945 0, 0, 0, 0, 0, 0, 190, 0, 0, 0,
2946 387, 0, 0, 52, 0, 336, 335, 337, 333, 334,
2947 0, 32, 0, 331, 332, 3, 0, 0, 0, 0,
2948 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2949 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2950 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2951 0, 0, 0, 297, 299, 310, 308, 252, 0, 0,
2952 0, 0, 0, 0, 0, 0, 56, 150, 302, 39,
2953 250, 0, 0, 355, 266, 354, 0, 0, 404, 403,
2954 275, 0, 80, 0, 0, 323, 283, 0