Class: RubyParser

Inherits:
Racc::Parser
  • Object
show all
Defined in:
lib/ruby_parser.rb,
lib/ruby_parser_extras.rb

Constant Summary collapse

Racc_arg =
[
racc_action_table,
racc_action_check,
racc_action_default,
racc_action_pointer,
racc_goto_table,
racc_goto_check,
racc_goto_default,
racc_goto_pointer,
racc_nt_base,
racc_reduce_table,
racc_token_table,
racc_shift_n,
racc_reduce_n,
racc_use_result_var ]
Racc_token_to_s_table =
[
'$end',
'error',
'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',
'tNTH_REF',
'tBACK_REF',
'tSTRING_CONTENT',
'tINTEGER',
'tFLOAT',
'tREGEXP_END',
'tUPLUS',
'tUMINUS',
'tUMINUS_NUM',
'tPOW',
'tCMP',
'tEQ',
'tEQQ',
'tNEQ',
'tGEQ',
'tLEQ',
'tANDOP',
'tOROP',
'tMATCH',
'tNMATCH',
'tDOT',
'tDOT2',
'tDOT3',
'tAREF',
'tASET',
'tLSHFT',
'tRSHFT',
'tCOLON2',
'tCOLON3',
'tOP_ASGN',
'tASSOC',
'tLPAREN',
'tLPAREN2',
'tRPAREN',
'tLPAREN_ARG',
'tLBRACK',
'tRBRACK',
'tLBRACE',
'tLBRACE_ARG',
'tSTAR',
'tSTAR2',
'tAMPER',
'tAMPER2',
'tTILDE',
'tPERCENT',
'tDIVIDE',
'tPLUS',
'tMINUS',
'tLT',
'tGT',
'tPIPE',
'tBANG',
'tCARET',
'tLCURLY',
'tRCURLY',
'tBACK_REF2',
'tSYMBEG',
'tSTRING_BEG',
'tXSTRING_BEG',
'tREGEXP_BEG',
'tWORDS_BEG',
'tAWORDS_BEG',
'tSTRING_DBEG',
'tSTRING_DVAR',
'tSTRING_END',
'tLAST_TOKEN',
'"?"',
'":"',
'"="',
'tLOWEST',
'"["',
'","',
'" "',
'"\n"',
'";"',
'$start',
'program',
'compstmt',
'bodystmt',
'@1',
'opt_rescue',
'opt_else',
'opt_ensure',
'stmts',
'opt_terms',
'none',
'stmt',
'terms',
'fitem',
'undef_list',
'expr_value',
'lhs',
'command_call',
'mlhs',
'var_lhs',
'primary_value',
'aref_args',
'backref',
'mrhs',
'arg_value',
'expr',
'@2',
'@3',
'arg',
'command',
'block_command',
'call_args',
'block_call',
'operation2',
'command_args',
'cmd_brace_block',
'opt_block_var',
'@4',
'@5',
'operation',
'mlhs_basic',
'mlhs_entry',
'mlhs_head',
'mlhs_item',
'mlhs_node',
'variable',
'cname',
'cpath',
'fname',
'op',
'reswords',
'symbol',
'@6',
'opt_nl',
'primary',
'args',
'trailer',
'assocs',
'paren_args',
'opt_paren_args',
'opt_block_arg',
'block_arg',
'call_args2',
'open_args',
'@7',
'@8',
'@9',
'none_block_pass',
'literal',
'strings',
'xstring',
'regexp',
'words',
'awords',
'var_ref',
'assoc_list',
'brace_block',
'method_call',
'then',
'if_tail',
'do',
'case_body',
'block_var',
'superclass',
'term',
'f_arglist',
'singleton',
'dot_or_colon',
'@10',
'@11',
'@12',
'@13',
'@14',
'@15',
'@16',
'@17',
'@18',
'@19',
'@20',
'@21',
'@22',
'@23',
'do_block',
'@24',
'@25',
'operation3',
'@26',
'@27',
'@28',
'@29',
'when_args',
'cases',
'exc_list',
'exc_var',
'numeric',
'dsym',
'string',
'string1',
'string_contents',
'xstring_contents',
'word_list',
'word',
'string_content',
'qword_list',
'string_dvar',
'@30',
'@31',
'sym',
'@32',
'f_args',
'f_arg',
'f_optarg',
'f_rest_arg',
'opt_f_block_arg',
'f_block_arg',
'f_norm_arg',
'f_opt',
'restarg_mark',
'blkarg_mark',
'@33',
'assoc']
Racc_debug_parser =
false
VERSION =
'1.0.1'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeRubyParser

Returns a new instance of RubyParser.



251
252
253
254
255
256
257
258
# File 'lib/ruby_parser_extras.rb', line 251

def initialize
  super
  self.lexer = RubyLexer.new
  self.in_def = false
  self.in_single = 0
  @env = Environment.new
  @comments = []
end

Instance Attribute Details

#commentsObject (readonly)

Returns the value of attribute comments.



58
59
60
# File 'lib/ruby_parser_extras.rb', line 58

def comments
  @comments
end

#envObject (readonly)

Returns the value of attribute env.



58
59
60
# File 'lib/ruby_parser_extras.rb', line 58

def env
  @env
end

#fileObject

Returns the value of attribute file.



57
58
59
# File 'lib/ruby_parser_extras.rb', line 57

def file
  @file
end

#in_defObject

Returns the value of attribute in_def.



57
58
59
# File 'lib/ruby_parser_extras.rb', line 57

def in_def
  @in_def
end

#in_singleObject

Returns the value of attribute in_single.



57
58
59
# File 'lib/ruby_parser_extras.rb', line 57

def in_single
  @in_single
end

#lexerObject

Returns the value of attribute lexer.



57
58
59
# File 'lib/ruby_parser_extras.rb', line 57

def lexer
  @lexer
end

Instance Method Details

#_reduce_1(val, _values, result) ⇒ Object

reduce 0 omitted



2861
2862
2863
2864
# File 'lib/ruby_parser.rb', line 2861

def _reduce_1( val, _values, result )
                self.lexer.lex_state = :expr_beg
 result
end

#_reduce_10(val, _values, result) ⇒ Object



2912
2913
2914
2915
# File 'lib/ruby_parser.rb', line 2912

def _reduce_10( val, _values, result )
                result = s(:alias, val[1], val[3])
 result
end

#_reduce_100(val, _values, result) ⇒ Object



3418
3419
3420
3421
3422
# File 'lib/ruby_parser.rb', line 3418

def _reduce_100( val, _values, result )
                lexer.lex_state = :expr_end
                result = val[0];
 result
end

#_reduce_101(val, _values, result) ⇒ Object



3424
3425
3426
3427
# File 'lib/ruby_parser.rb', line 3424

def _reduce_101( val, _values, result )
 result = s(:lit, val[0].to_sym)
 result
end

#_reduce_102(val, _values, result) ⇒ Object



3429
3430
3431
3432
# File 'lib/ruby_parser.rb', line 3429

def _reduce_102( val, _values, result )
 result = s(:lit, val[0])
 result
end

#_reduce_103(val, _values, result) ⇒ Object



3434
3435
3436
3437
# File 'lib/ruby_parser.rb', line 3434

def _reduce_103( val, _values, result )
                result = s(:undef, val[0])
 result
end

#_reduce_104(val, _values, result) ⇒ Object



3439
3440
3441
3442
# File 'lib/ruby_parser.rb', line 3439

def _reduce_104( val, _values, result )
                lexer.lex_state = :expr_fname
 result
end

#_reduce_105(val, _values, result) ⇒ Object



3444
3445
3446
3447
# File 'lib/ruby_parser.rb', line 3444

def _reduce_105( val, _values, result )
                result = self.block_append(val[0], s(:undef, val[3]))
 result
end

#_reduce_11(val, _values, result) ⇒ Object



2917
2918
2919
2920
# File 'lib/ruby_parser.rb', line 2917

def _reduce_11( val, _values, result )
                result = s(:valias, val[1].to_sym, val[2].to_sym)
 result
end

#_reduce_12(val, _values, result) ⇒ Object



2922
2923
2924
2925
# File 'lib/ruby_parser.rb', line 2922

def _reduce_12( val, _values, result )
               result = s(:valias, val[1].to_sym, :"$#{val[2].last}")
 result
end

#_reduce_13(val, _values, result) ⇒ Object



2927
2928
2929
2930
# File 'lib/ruby_parser.rb', line 2927

def _reduce_13( val, _values, result )
                yyerror("can't make alias for the number variables");
 result
end

#_reduce_14(val, _values, result) ⇒ Object



2932
2933
2934
2935
# File 'lib/ruby_parser.rb', line 2932

def _reduce_14( val, _values, result )
                result = val[1]
 result
end

#_reduce_15(val, _values, result) ⇒ Object



2937
2938
2939
2940
2941
2942
2943
2944
2945
# File 'lib/ruby_parser.rb', line 2937

def _reduce_15( val, _values, result )
               val[2] = cond val[2]
               if val[2][0] == :not then
                 result = s(:if, val[2].last, nil, val[0])
               else
                 result = s(:if, val[2], val[0], nil)
               end
 result
end

#_reduce_16(val, _values, result) ⇒ Object



2947
2948
2949
2950
2951
2952
2953
2954
2955
# File 'lib/ruby_parser.rb', line 2947

def _reduce_16( val, _values, result )
               val[2] = cond val[2]
               if val[2][0] == :not then
                 result = s(:if, val[2].last, val[0], nil)
               else
                 result = s(:if, val[2], nil, val[0])
               end
 result
end

#_reduce_17(val, _values, result) ⇒ Object



2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
# File 'lib/ruby_parser.rb', line 2957

def _reduce_17( val, _values, result )
               block, pre = val[0], true
               block, pre = block.last, false if block[0] == :begin

               val[2] = cond val[2]
               if val[2][0] == :not then
                 result = s(:until, val[2].last, block, pre)
               else
                 result = s(:while, val[2], block, pre)
               end
 result
end

#_reduce_173(val, _values, result) ⇒ Object

reduce 172 omitted



3583
3584
3585
3586
# File 'lib/ruby_parser.rb', line 3583

def _reduce_173( val, _values, result )
               result = self.node_assign(val[0], val[2])
 result
end

#_reduce_174(val, _values, result) ⇒ Object



3588
3589
3590
3591
3592
# File 'lib/ruby_parser.rb', line 3588

def _reduce_174( val, _values, result )
               result = self.node_assign(val[0],
                          s(:rescue, val[2], s(:resbody, nil, val[4])))
 result
end

#_reduce_175(val, _values, result) ⇒ Object



3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
# File 'lib/ruby_parser.rb', line 3594

def _reduce_175( val, _values, result )
               name = val[0].value
               asgn_op = val[1].to_sym

               val[2] = remove_begin(val[2])

               case asgn_op
               when :"||" then
                 val[0] << val[2]
                 result = s(:op_asgn_or, self.gettable(name), val[0]);
               when :"&&" then
                 val[0] << val[2]
                 result = s(:op_asgn_and, self.gettable(name), val[0]);
               else
                 val[0][2] = s(:call, self.gettable(name), asgn_op, s(:array, val[2]))
                 result = val[0];
               end
 result
end

#_reduce_176(val, _values, result) ⇒ Object



3614
3615
3616
3617
# File 'lib/ruby_parser.rb', line 3614

def _reduce_176( val, _values, result )
                result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]);
 result
end

#_reduce_177(val, _values, result) ⇒ Object



3619
3620
3621
3622
# File 'lib/ruby_parser.rb', line 3619

def _reduce_177( val, _values, result )
                result = s(:op_asgn2, val[0], :"#{val[2].value}=", val[3].to_sym, val[4]);
 result
end

#_reduce_178(val, _values, result) ⇒ Object



3624
3625
3626
3627
# File 'lib/ruby_parser.rb', line 3624

def _reduce_178( val, _values, result )
                result = s(:op_asgn2, val[0], :"#{val[2].value}=", val[3].to_sym, val[4])
 result
end

#_reduce_179(val, _values, result) ⇒ Object



3629
3630
3631
3632
# File 'lib/ruby_parser.rb', line 3629

def _reduce_179( val, _values, result )
                result = s(:op_asgn, val[0], val[4], val[2].value, val[3].value);
 result
end

#_reduce_18(val, _values, result) ⇒ Object



2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
# File 'lib/ruby_parser.rb', line 2970

def _reduce_18( val, _values, result )
 # REFACTOR
               block, pre = val[0], true 
               block, pre = block.last, false if block[0] == :begin

               val[2] = cond val[2]
               if val[2][0] == :not then
                 result = s(:while, val[2].last, block, pre)
               else
                 result = s(:until, val[2], block, pre)
               end
 result
end

#_reduce_180(val, _values, result) ⇒ Object



3634
3635
3636
3637
# File 'lib/ruby_parser.rb', line 3634

def _reduce_180( val, _values, result )
               yyerror("constant re-assignment");
 result
end

#_reduce_181(val, _values, result) ⇒ Object



3639
3640
3641
3642
# File 'lib/ruby_parser.rb', line 3639

def _reduce_181( val, _values, result )
               yyerror("constant re-assignment");
 result
end

#_reduce_182(val, _values, result) ⇒ Object



3644
3645
3646
3647
# File 'lib/ruby_parser.rb', line 3644

def _reduce_182( val, _values, result )
                self.backref_assign_error(val[0]);
 result
end

#_reduce_183(val, _values, result) ⇒ Object



3649
3650
3651
3652
3653
3654
3655
3656
3657
# File 'lib/ruby_parser.rb', line 3649

def _reduce_183( val, _values, result )
               v1, v2 = val[0], val[2]
               if v1.node_type == :lit and v2.node_type == :lit and Fixnum === v1.last and Fixnum === v2.last then
                 result = s(:lit, (v1.last)..(v2.last))
               else
                 result = s(:dot2, v1, v2)
               end
 result
end

#_reduce_184(val, _values, result) ⇒ Object



3659
3660
3661
3662
3663
3664
3665
3666
3667
# File 'lib/ruby_parser.rb', line 3659

def _reduce_184( val, _values, result )
               v1, v2 = val[0], val[2]
               if v1.node_type == :lit and v2.node_type == :lit and Fixnum === v1.last and Fixnum === v2.last then
                 result = s(:lit, (v1.last)...(v2.last))
               else
                 result = s(:dot3, v1, v2)
               end
 result
end

#_reduce_185(val, _values, result) ⇒ Object



3669
3670
3671
3672
# File 'lib/ruby_parser.rb', line 3669

def _reduce_185( val, _values, result )
                result = s(:call, val[0], :+, s(:array, val[2]))
 result
end

#_reduce_186(val, _values, result) ⇒ Object



3674
3675
3676
3677
# File 'lib/ruby_parser.rb', line 3674

def _reduce_186( val, _values, result )
                result = s(:call, val[0], :-, s(:array, val[2]))
 result
end

#_reduce_187(val, _values, result) ⇒ Object



3679
3680
3681
3682
# File 'lib/ruby_parser.rb', line 3679

def _reduce_187( val, _values, result )
                result = s(:call, val[0], :*, s(:array, val[2]))
 result
end

#_reduce_188(val, _values, result) ⇒ Object



3684
3685
3686
3687
# File 'lib/ruby_parser.rb', line 3684

def _reduce_188( val, _values, result )
                result = s(:call, val[0], :"/", s(:array, val[2]))
 result
end

#_reduce_189(val, _values, result) ⇒ Object



3689
3690
3691
3692
# File 'lib/ruby_parser.rb', line 3689

def _reduce_189( val, _values, result )
                result = s(:call, val[0], :%, s(:array, val[2]))
 result
end

#_reduce_19(val, _values, result) ⇒ Object



2984
2985
2986
2987
# File 'lib/ruby_parser.rb', line 2984

def _reduce_19( val, _values, result )
                result = s(:rescue, val[0], s(:resbody, nil, val[2]))
 result
end

#_reduce_190(val, _values, result) ⇒ Object



3694
3695
3696
3697
# File 'lib/ruby_parser.rb', line 3694

def _reduce_190( val, _values, result )
               result = s(:call, val[0], :**, s(:array, val[2]))
 result
end

#_reduce_191(val, _values, result) ⇒ Object



3699
3700
3701
3702
# File 'lib/ruby_parser.rb', line 3699

def _reduce_191( val, _values, result )
                result = s(:call, s(:call, s(:lit, val[1]), :"**", s(:array, val[3])), :"-@");
 result
end

#_reduce_192(val, _values, result) ⇒ Object



3704
3705
3706
3707
# File 'lib/ruby_parser.rb', line 3704

def _reduce_192( val, _values, result )
                result = s(:call, s(:call, s(:lit, val[1]), :"**", s(:array, val[3])), :"-@");
 result
end

#_reduce_193(val, _values, result) ⇒ Object



3709
3710
3711
3712
3713
3714
3715
3716
# File 'lib/ruby_parser.rb', line 3709

def _reduce_193( val, _values, result )
                if val[1][0] == :lit then
                  result = val[1]
                else
                  result = s(:call, val[1], :"+@")
                end
 result
end

#_reduce_194(val, _values, result) ⇒ Object



3718
3719
3720
3721
# File 'lib/ruby_parser.rb', line 3718

def _reduce_194( val, _values, result )
                result = s(:call, val[1], :"-@");
 result
end

#_reduce_195(val, _values, result) ⇒ Object



3723
3724
3725
3726
# File 'lib/ruby_parser.rb', line 3723

def _reduce_195( val, _values, result )
                result = s(:call, val[0], :"|", s(:array, val[2]));
 result
end

#_reduce_196(val, _values, result) ⇒ Object



3728
3729
3730
3731
# File 'lib/ruby_parser.rb', line 3728

def _reduce_196( val, _values, result )
                result = s(:call, val[0], :"^", s(:array, val[2]));
 result
end

#_reduce_197(val, _values, result) ⇒ Object



3733
3734
3735
3736
# File 'lib/ruby_parser.rb', line 3733

def _reduce_197( val, _values, result )
                result = s(:call, val[0], :"&", s(:array, val[2]));
 result
end

#_reduce_198(val, _values, result) ⇒ Object



3738
3739
3740
3741
# File 'lib/ruby_parser.rb', line 3738

def _reduce_198( val, _values, result )
                result = s(:call, val[0], :"<=>", s(:array, val[2]));
 result
end

#_reduce_199(val, _values, result) ⇒ Object



3743
3744
3745
3746
# File 'lib/ruby_parser.rb', line 3743

def _reduce_199( val, _values, result )
                result = s(:call, val[0], :">", s(:array, val[2]));
 result
end

#_reduce_2(val, _values, result) ⇒ Object



2866
2867
2868
2869
# File 'lib/ruby_parser.rb', line 2866

def _reduce_2( val, _values, result )
                result = val[1]
 result
end

#_reduce_20(val, _values, result) ⇒ Object



2989
2990
2991
2992
2993
2994
2995
# File 'lib/ruby_parser.rb', line 2989

def _reduce_20( val, _values, result )
               if (self.in_def || self.in_single > 0) then
                 # yyerror("BEGIN in method"); HACK
               end
               self.env.extend;
 result
end

#_reduce_200(val, _values, result) ⇒ Object



3748
3749
3750
3751
# File 'lib/ruby_parser.rb', line 3748

def _reduce_200( val, _values, result )
                result = s(:call, val[0], :">=", s(:array, val[2]));
 result
end

#_reduce_201(val, _values, result) ⇒ Object



3753
3754
3755
3756
# File 'lib/ruby_parser.rb', line 3753

def _reduce_201( val, _values, result )
                result = s(:call, val[0], :"<", s(:array, val[2]));
 result
end

#_reduce_202(val, _values, result) ⇒ Object



3758
3759
3760
3761
# File 'lib/ruby_parser.rb', line 3758

def _reduce_202( val, _values, result )
                result = s(:call, val[0], :"<=", s(:array, val[2]));
 result
end

#_reduce_203(val, _values, result) ⇒ Object



3763
3764
3765
3766
# File 'lib/ruby_parser.rb', line 3763

def _reduce_203( val, _values, result )
                result = s(:call, val[0], :"==", s(:array, val[2]));
 result
end

#_reduce_204(val, _values, result) ⇒ Object



3768
3769
3770
3771
# File 'lib/ruby_parser.rb', line 3768

def _reduce_204( val, _values, result )
                result = s(:call, val[0], :"===", s(:array, val[2]));
 result
end

#_reduce_205(val, _values, result) ⇒ Object



3773
3774
3775
3776
3777
3778
# File 'lib/ruby_parser.rb', line 3773

def _reduce_205( val, _values, result )
                val[0] = value_expr val[0] # TODO: port call_op and clean these
                val[2] = value_expr val[2]
                result = s(:not, s(:call, val[0], :"==", s(:array, val[2])));
 result
end

#_reduce_206(val, _values, result) ⇒ Object



3780
3781
3782
3783
# File 'lib/ruby_parser.rb', line 3780

def _reduce_206( val, _values, result )
                result = self.get_match_node(val[0], val[2])
 result
end

#_reduce_207(val, _values, result) ⇒ Object



3785
3786
3787
3788
# File 'lib/ruby_parser.rb', line 3785

def _reduce_207( val, _values, result )
                result = s(:not, self.get_match_node(val[0], val[2]))
 result
end

#_reduce_208(val, _values, result) ⇒ Object



3790
3791
3792
3793
# File 'lib/ruby_parser.rb', line 3790

def _reduce_208( val, _values, result )
                result = s(:not, val[1])
 result
end

#_reduce_209(val, _values, result) ⇒ Object



3795
3796
3797
3798
3799
# File 'lib/ruby_parser.rb', line 3795

def _reduce_209( val, _values, result )
                val[2] = value_expr val[2]
                result = s(:call, val[1], :"~");
 result
end

#_reduce_21(val, _values, result) ⇒ Object



2997
2998
2999
3000
3001
3002
# File 'lib/ruby_parser.rb', line 2997

def _reduce_21( val, _values, result )
               result = s(:iter, s(:preexe), nil)
               result << val[3] if val[3]
               result = nil # TODO: since it isn't supposed to go in the AST
 result
end

#_reduce_210(val, _values, result) ⇒ Object



3801
3802
3803
3804
3805
3806
# File 'lib/ruby_parser.rb', line 3801

def _reduce_210( val, _values, result )
                val[0] = value_expr val[0]
                val[2] = value_expr val[2]
                result = s(:call, val[0], :"<<", s(:array, val[2])) # " stupid emacs
 result
end

#_reduce_211(val, _values, result) ⇒ Object



3808
3809
3810
3811
3812
3813
# File 'lib/ruby_parser.rb', line 3808

def _reduce_211( val, _values, result )
                val[0] = value_expr val[0]
                val[2] = value_expr val[2]
                result = s(:call, val[0], :">>", s(:array, val[2]))
 result
end

#_reduce_212(val, _values, result) ⇒ Object



3815
3816
3817
3818
# File 'lib/ruby_parser.rb', line 3815

def _reduce_212( val, _values, result )
                result = logop(:and, val[0], val[2])
 result
end

#_reduce_213(val, _values, result) ⇒ Object



3820
3821
3822
3823
# File 'lib/ruby_parser.rb', line 3820

def _reduce_213( val, _values, result )
                result = logop(:or, val[0], val[2])
 result
end

#_reduce_214(val, _values, result) ⇒ Object



3825
3826
3827
3828
# File 'lib/ruby_parser.rb', line 3825

def _reduce_214( val, _values, result )
                result = s(:defined, val[2]);
 result
end

#_reduce_215(val, _values, result) ⇒ Object



3830
3831
3832
3833
# File 'lib/ruby_parser.rb', line 3830

def _reduce_215( val, _values, result )
               result = s(:if, val[0], val[2], val[4]);
 result
end

#_reduce_217(val, _values, result) ⇒ Object

reduce 216 omitted



3837
3838
3839
3840
# File 'lib/ruby_parser.rb', line 3837

def _reduce_217( val, _values, result )
                result = value_expr(val[0])
 result
end

#_reduce_219(val, _values, result) ⇒ Object

reduce 218 omitted



3844
3845
3846
3847
3848
# File 'lib/ruby_parser.rb', line 3844

def _reduce_219( val, _values, result )
               warning("parenthesize argument(s) for future version");
               result = s(:array, val[0]);
 result
end

#_reduce_22(val, _values, result) ⇒ Object



3004
3005
3006
3007
3008
3009
3010
3011
# File 'lib/ruby_parser.rb', line 3004

def _reduce_22( val, _values, result )
               if (self.in_def || self.in_single > 0) then
                 # yyerror("END in method; use at_exit"); HACK
               end
               result = s(:iter, s(:postexe), nil)
               result << val[2] if val[2]
 result
end

#_reduce_220(val, _values, result) ⇒ Object



3850
3851
3852
3853
# File 'lib/ruby_parser.rb', line 3850

def _reduce_220( val, _values, result )
               result = val[0];
 result
end

#_reduce_221(val, _values, result) ⇒ Object



3855
3856
3857
3858
# File 'lib/ruby_parser.rb', line 3855

def _reduce_221( val, _values, result )
               result = self.arg_concat(val[0], val[3])
 result
end

#_reduce_222(val, _values, result) ⇒ Object



3860
3861
3862
3863
# File 'lib/ruby_parser.rb', line 3860

def _reduce_222( val, _values, result )
               result = s(:array, s(:hash, *val[0].values))
 result
end

#_reduce_223(val, _values, result) ⇒ Object



3865
3866
3867
3868
3869
# File 'lib/ruby_parser.rb', line 3865

def _reduce_223( val, _values, result )
               result = s(:splat, val[1])
               result.paren = true
 result
end

#_reduce_224(val, _values, result) ⇒ Object



3871
3872
3873
3874
# File 'lib/ruby_parser.rb', line 3871

def _reduce_224( val, _values, result )
                result = val[1]
 result
end

#_reduce_225(val, _values, result) ⇒ Object



3876
3877
3878
3879
# File 'lib/ruby_parser.rb', line 3876

def _reduce_225( val, _values, result )
                result = val[1];
 result
end

#_reduce_226(val, _values, result) ⇒ Object



3881
3882
3883
3884
3885
# File 'lib/ruby_parser.rb', line 3881

def _reduce_226( val, _values, result )
                warning("parenthesize argument(s) for future version");
                result = s(:array, val[1]);
 result
end

#_reduce_227(val, _values, result) ⇒ Object



3887
3888
3889
3890
3891
# File 'lib/ruby_parser.rb', line 3887

def _reduce_227( val, _values, result )
                warning("parenthesize argument(s) for future version");
                result = val[1].add(val[3]);
 result
end

#_reduce_23(val, _values, result) ⇒ Object



3013
3014
3015
3016
# File 'lib/ruby_parser.rb', line 3013

def _reduce_23( val, _values, result )
                result = self.node_assign(val[0], val[2])
 result
end

#_reduce_230(val, _values, result) ⇒ Object

reduce 229 omitted



3897
3898
3899
3900
3901
# File 'lib/ruby_parser.rb', line 3897

def _reduce_230( val, _values, result )
                warning("parenthesize argument(s) for future version");
                result = s(:array, val[0])
 result
end

#_reduce_231(val, _values, result) ⇒ Object



3903
3904
3905
3906
# File 'lib/ruby_parser.rb', line 3903

def _reduce_231( val, _values, result )
               result = self.arg_blk_pass(val[0], val[1]);
 result
end

#_reduce_232(val, _values, result) ⇒ Object



3908
3909
3910
3911
3912
# File 'lib/ruby_parser.rb', line 3908

def _reduce_232( val, _values, result )
               result = self.arg_concat(val[0], val[3]);
               result = self.arg_blk_pass(result, val[4]);
 result
end

#_reduce_233(val, _values, result) ⇒ Object



3914
3915
3916
3917
3918
# File 'lib/ruby_parser.rb', line 3914

def _reduce_233( val, _values, result )
               result = s(:array, s(:hash, *val[0].values))
               result = self.arg_blk_pass(result, val[1]);
 result
end

#_reduce_234(val, _values, result) ⇒ Object



3920
3921
3922
3923
3924
# File 'lib/ruby_parser.rb', line 3920

def _reduce_234( val, _values, result )
               result = self.arg_concat(s(:array, s(:hash, *val[0].values)), val[3])
               result = self.arg_blk_pass(result, val[4]);
 result
end

#_reduce_235(val, _values, result) ⇒ Object



3926
3927
3928
3929
3930
# File 'lib/ruby_parser.rb', line 3926

def _reduce_235( val, _values, result )
               result = val[0] << s(:hash, *val[2].values)
               result = self.arg_blk_pass(result, val[3]);
 result
end

#_reduce_236(val, _values, result) ⇒ Object



3932
3933
3934
3935
3936
3937
# File 'lib/ruby_parser.rb', line 3932

def _reduce_236( val, _values, result )
               val[0] << s(:hash, *val[2].values)
               result = self.arg_concat(val[0], val[5])
               result = self.arg_blk_pass(result, val[6]);
 result
end

#_reduce_237(val, _values, result) ⇒ Object



3939
3940
3941
3942
# File 'lib/ruby_parser.rb', line 3939

def _reduce_237( val, _values, result )
                result = self.arg_blk_pass(s(:splat, val[1]), val[2])
 result
end

#_reduce_239(val, _values, result) ⇒ Object

reduce 238 omitted



3946
3947
3948
3949
# File 'lib/ruby_parser.rb', line 3946

def _reduce_239( val, _values, result )
                result = self.arg_blk_pass(s(:array, val[0], val[2]), val[3])
 result
end

#_reduce_24(val, _values, result) ⇒ Object



3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
# File 'lib/ruby_parser.rb', line 3018

def _reduce_24( val, _values, result )
                val[2] = value_expr(val[2])
                result = val[0] << if val[0][1] then
                                     s(:to_ary, val[2])
                                   else
                                     val[0].delete_at 1 # remove the nil
                                     s(:array, val[2])
                                   end
 result
end

#_reduce_240(val, _values, result) ⇒ Object



3951
3952
3953
3954
# File 'lib/ruby_parser.rb', line 3951

def _reduce_240( val, _values, result )
                result = self.arg_blk_pass(val[0], val[2]);
 result
end

#_reduce_241(val, _values, result) ⇒ Object



3956
3957
3958
3959
3960
# File 'lib/ruby_parser.rb', line 3956

def _reduce_241( val, _values, result )
                result = self.arg_concat(s(:array, val[0]), val[3]);
                result = self.arg_blk_pass(result, val[4]);
 result
end

#_reduce_242(val, _values, result) ⇒ Object



3962
3963
3964
3965
3966
# File 'lib/ruby_parser.rb', line 3962

def _reduce_242( val, _values, result )
                result = self.arg_concat(s(:array, val[0], s(:hash, *val[2].values)), val[5])
                result = self.arg_blk_pass(result, val[6]);
 result
end

#_reduce_243(val, _values, result) ⇒ Object



3968
3969
3970
3971
3972
# File 'lib/ruby_parser.rb', line 3968

def _reduce_243( val, _values, result )
                result = s(:array, s(:hash, *val[0].values));
                result = self.arg_blk_pass(result, val[1]);
 result
end

#_reduce_244(val, _values, result) ⇒ Object



3974
3975
3976
3977
3978
# File 'lib/ruby_parser.rb', line 3974

def _reduce_244( val, _values, result )
                result = s(:array, s(:hash, *val[0].values), val[3])
                result = self.arg_blk_pass(result, val[4])
 result
end

#_reduce_245(val, _values, result) ⇒ Object



3980
3981
3982
3983
3984
# File 'lib/ruby_parser.rb', line 3980

def _reduce_245( val, _values, result )
                result = s(:array, val[0], s(:hash, *val[2].values))
                result = self.arg_blk_pass(result, val[3])
 result
end

#_reduce_246(val, _values, result) ⇒ Object



3986
3987
3988
3989
3990
# File 'lib/ruby_parser.rb', line 3986

def _reduce_246( val, _values, result )
                result = s(:array, val[0]).add_all(val[2]).add(s(:hash, *val[4].values));
                result = self.arg_blk_pass(result, val[5]);
 result
end

#_reduce_247(val, _values, result) ⇒ Object



3992
3993
3994
3995
3996
# File 'lib/ruby_parser.rb', line 3992

def _reduce_247( val, _values, result )
                result = self.arg_concat(s(:array, val[0]).add(s(:hash, *val[2].values)), val[5]);
                result = self.arg_blk_pass(result, val[6]);
 result
end

#_reduce_248(val, _values, result) ⇒ Object



3998
3999
4000
4001
4002
# File 'lib/ruby_parser.rb', line 3998

def _reduce_248( val, _values, result )
                result = self.arg_concat(s(:array, val[0]).add_all(val[2]).add(s(:hash, *val[4].values)), val[7]);
                result = self.arg_blk_pass(result, val[8]);
 result
end

#_reduce_249(val, _values, result) ⇒ Object



4004
4005
4006
4007
# File 'lib/ruby_parser.rb', line 4004

def _reduce_249( val, _values, result )
                result = self.arg_blk_pass(s(:splat, val[1]), val[2]);
 result
end

#_reduce_25(val, _values, result) ⇒ Object



3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
# File 'lib/ruby_parser.rb', line 3029

def _reduce_25( val, _values, result )
                name = val[0].last
                asgn_op = val[1].to_sym
                val[2] = value_expr(val[2])

                case asgn_op
                when :"||" then
                  val[0][2] = (val[2]);
                  result = s(:op_asgn_or,  self.gettable(name), val[0])
                when :"&&" then
                  val[0][2] = (val[2]);
                  result = s(:op_asgn_and, self.gettable(name), val[0])
                else
                  result = val[0]
                  result << s(:call, self.gettable(name), asgn_op, s(:array, val[2]))
              end
 result
end

#_reduce_251(val, _values, result) ⇒ Object

reduce 250 omitted



4011
4012
4013
4014
4015
# File 'lib/ruby_parser.rb', line 4011

def _reduce_251( val, _values, result )
                result = lexer.cmdarg.stack.dup
                lexer.cmdarg.push true
 result
end

#_reduce_252(val, _values, result) ⇒ Object



4017
4018
4019
4020
4021
# File 'lib/ruby_parser.rb', line 4017

def _reduce_252( val, _values, result )
                lexer.cmdarg.stack.replace val[0]
                result = val[1]
 result
end

#_reduce_254(val, _values, result) ⇒ Object

reduce 253 omitted



4025
4026
4027
4028
# File 'lib/ruby_parser.rb', line 4025

def _reduce_254( val, _values, result )
               lexer.lex_state = :expr_endarg
 result
end

#_reduce_255(val, _values, result) ⇒ Object



4030
4031
4032
4033
4034
# File 'lib/ruby_parser.rb', line 4030

def _reduce_255( val, _values, result )
                warning("don't put space before argument parentheses");
                result = nil;
 result
end

#_reduce_256(val, _values, result) ⇒ Object



4036
4037
4038
4039
# File 'lib/ruby_parser.rb', line 4036

def _reduce_256( val, _values, result )
               lexer.lex_state = :expr_endarg
 result
end

#_reduce_257(val, _values, result) ⇒ Object



4041
4042
4043
4044
4045
# File 'lib/ruby_parser.rb', line 4041

def _reduce_257( val, _values, result )
                warning("don't put space before argument parentheses");
                result = val[1];
 result
end

#_reduce_258(val, _values, result) ⇒ Object



4047
4048
4049
4050
# File 'lib/ruby_parser.rb', line 4047

def _reduce_258( val, _values, result )
                result = s(:block_pass, val[1]);
 result
end

#_reduce_259(val, _values, result) ⇒ Object



4052
4053
4054
4055
# File 'lib/ruby_parser.rb', line 4052

def _reduce_259( val, _values, result )
                result = val[1];
 result
end

#_reduce_26(val, _values, result) ⇒ Object



3048
3049
3050
3051
# File 'lib/ruby_parser.rb', line 3048

def _reduce_26( val, _values, result )
                result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]);
 result
end

#_reduce_261(val, _values, result) ⇒ Object

reduce 260 omitted



4059
4060
4061
4062
# File 'lib/ruby_parser.rb', line 4059

def _reduce_261( val, _values, result )
               result = s(:array, val[0])
 result
end

#_reduce_262(val, _values, result) ⇒ Object



4064
4065
4066
4067
4068
# File 'lib/ruby_parser.rb', line 4064

def _reduce_262( val, _values, result )
               result = val[0] << val[2]
               # result = self.list_append(val[0], val[2]) # TODO? breaks stuff
 result
end

#_reduce_263(val, _values, result) ⇒ Object



4070
4071
4072
4073
4074
# File 'lib/ruby_parser.rb', line 4070

def _reduce_263( val, _values, result )
               result = val[0] << val[2]
               # result = self.list_append(val[0], val[2]) # TODO? breaks stuff
 result
end

#_reduce_264(val, _values, result) ⇒ Object



4076
4077
4078
4079
# File 'lib/ruby_parser.rb', line 4076

def _reduce_264( val, _values, result )
               result = self.arg_concat(val[0], val[3])
 result
end

#_reduce_265(val, _values, result) ⇒ Object



4081
4082
4083
4084
# File 'lib/ruby_parser.rb', line 4081

def _reduce_265( val, _values, result )
               result = s(:splat, val[1])
 result
end

#_reduce_27(val, _values, result) ⇒ Object



3053
3054
3055
3056
# File 'lib/ruby_parser.rb', line 3053

def _reduce_27( val, _values, result )
                result = s(:op_asgn, val[0], val[4], val[2].value, val[3].value);
 result
end

#_reduce_274(val, _values, result) ⇒ Object

reduce 273 omitted



4102
4103
4104
4105
# File 'lib/ruby_parser.rb', line 4102

def _reduce_274( val, _values, result )
               result = s(:fcall, val[0].to_sym)
 result
end

#_reduce_275(val, _values, result) ⇒ Object



4107
4108
4109
4110
4111
4112
4113
4114
# File 'lib/ruby_parser.rb', line 4107

def _reduce_275( val, _values, result )
               unless val[1] then
                 result = s(:nil)
               else
                 result = s(:begin, val[1])
               end
 result
end

#_reduce_276(val, _values, result) ⇒ Object



4116
4117
4118
4119
# File 'lib/ruby_parser.rb', line 4116

def _reduce_276( val, _values, result )
                lexer.lex_state = :expr_endarg
 result
end

#_reduce_277(val, _values, result) ⇒ Object



4121
4122
4123
4124
4125
# File 'lib/ruby_parser.rb', line 4121

def _reduce_277( val, _values, result )
                warning("(...) interpreted as grouped expression");
                result = val[1];
 result
end

#_reduce_278(val, _values, result) ⇒ Object



4127
4128
4129
4130
4131
# File 'lib/ruby_parser.rb', line 4127

def _reduce_278( val, _values, result )
               result = val[1];
               result.paren = true
 result
end

#_reduce_279(val, _values, result) ⇒ Object



4133
4134
4135
4136
# File 'lib/ruby_parser.rb', line 4133

def _reduce_279( val, _values, result )
               result = s(:colon2, val[0], val[2].to_sym)
 result
end

#_reduce_28(val, _values, result) ⇒ Object



3058
3059
3060
3061
# File 'lib/ruby_parser.rb', line 3058

def _reduce_28( val, _values, result )
                result = s(:op_asgn, val[0], val[4], val[2].value, val[3].value);
 result
end

#_reduce_280(val, _values, result) ⇒ Object



4138
4139
4140
4141
# File 'lib/ruby_parser.rb', line 4138

def _reduce_280( val, _values, result )
               result = s(:colon3, val[1].to_sym)
 result
end

#_reduce_281(val, _values, result) ⇒ Object



4143
4144
4145
4146
4147
4148
4149
4150
4151
# File 'lib/ruby_parser.rb', line 4143

def _reduce_281( val, _values, result )
               if val[0].node_type == :self then
                 result = s(:fcall, :"[]")
               else
                 result = s(:call, val[0], :"[]")
               end
               result << val[2] if val[2]
 result
end

#_reduce_282(val, _values, result) ⇒ Object



4153
4154
4155
4156
# File 'lib/ruby_parser.rb', line 4153

def _reduce_282( val, _values, result )
                result = val[1] || s(:zarray)
 result
end

#_reduce_283(val, _values, result) ⇒ Object



4158
4159
4160
4161
# File 'lib/ruby_parser.rb', line 4158

def _reduce_283( val, _values, result )
               result = s(:hash, *val[1].values)
 result
end

#_reduce_284(val, _values, result) ⇒ Object



4163
4164
4165
4166
# File 'lib/ruby_parser.rb', line 4163

def _reduce_284( val, _values, result )
               result = s(:return)
 result
end

#_reduce_285(val, _values, result) ⇒ Object



4168
4169
4170
4171
# File 'lib/ruby_parser.rb', line 4168

def _reduce_285( val, _values, result )
               result = self.new_yield(val[2]);
 result
end

#_reduce_286(val, _values, result) ⇒ Object



4173
4174
4175
4176
# File 'lib/ruby_parser.rb', line 4173

def _reduce_286( val, _values, result )
               result = s(:yield)
 result
end

#_reduce_287(val, _values, result) ⇒ Object



4178
4179
4180
4181
# File 'lib/ruby_parser.rb', line 4178

def _reduce_287( val, _values, result )
               result = s(:yield)
 result
end

#_reduce_288(val, _values, result) ⇒ Object



4183
4184
4185
4186
# File 'lib/ruby_parser.rb', line 4183

def _reduce_288( val, _values, result )
               result = s(:defined, val[3]);
 result
end

#_reduce_289(val, _values, result) ⇒ Object



4188
4189
4190
4191
4192
4193
4194
4195
# File 'lib/ruby_parser.rb', line 4188

def _reduce_289( val, _values, result )
               name = val[0].to_sym
               iter = val[1]
#                 iter[2] = iter[2][1] if iter[2][0] == :block and iter[2].size == 2 # HACK
               iter.insert 1, s(:fcall, name)
               result = iter
 result
end

#_reduce_29(val, _values, result) ⇒ Object



3063
3064
3065
3066
# File 'lib/ruby_parser.rb', line 3063

def _reduce_29( val, _values, result )
                result = s(:op_asgn, val[0], val[4], val[2].value, val[3].value);
 result
end

#_reduce_291(val, _values, result) ⇒ Object

reduce 290 omitted



4199
4200
4201
4202
4203
4204
4205
4206
# File 'lib/ruby_parser.rb', line 4199

def _reduce_291( val, _values, result )
               call = val[0]
               iter = val[1]
#                 iter[2] = iter[2][1] if iter[2][0] == :block and iter[2].size == 2 # HACK
               iter.insert 1, call
               result = iter
 result
end

#_reduce_292(val, _values, result) ⇒ Object



4208
4209
4210
4211
4212
4213
4214
4215
4216
# File 'lib/ruby_parser.rb', line 4208

def _reduce_292( val, _values, result )
               val[1] = cond val[1]
               if val[1][0] == :not then
                 result = s(:if, val[1].last, val[4], val[3])
               else
                 result = s(:if, val[1], val[3], val[4])
               end
 result
end

#_reduce_293(val, _values, result) ⇒ Object



4218
4219
4220
4221
4222
4223
4224
4225
4226
# File 'lib/ruby_parser.rb', line 4218

def _reduce_293( val, _values, result )
               val[1] = cond val[1]
               if val[1][0] == :not then
                 result = s(:if, val[1].last, val[3], val[4])
               else
                 result = s(:if, val[1], val[4], val[3])
               end
 result
end

#_reduce_294(val, _values, result) ⇒ Object



4228
4229
4230
4231
# File 'lib/ruby_parser.rb', line 4228

def _reduce_294( val, _values, result )
               lexer.cond.push true
 result
end

#_reduce_295(val, _values, result) ⇒ Object



4233
4234
4235
4236
# File 'lib/ruby_parser.rb', line 4233

def _reduce_295( val, _values, result )
               lexer.cond.pop
 result
end

#_reduce_296(val, _values, result) ⇒ Object



4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
# File 'lib/ruby_parser.rb', line 4238

def _reduce_296( val, _values, result )
               block = val[5]
               val[2] = cond val[2]
               if val[2][0] == :not then
                 result = s(:until, val[2].last, block, true);
               else
                 result = s(:while, val[2], block, true);
               end
 result
end

#_reduce_297(val, _values, result) ⇒ Object



4249
4250
4251
4252
# File 'lib/ruby_parser.rb', line 4249

def _reduce_297( val, _values, result )
               lexer.cond.push true
 result
end

#_reduce_298(val, _values, result) ⇒ Object



4254
4255
4256
4257
# File 'lib/ruby_parser.rb', line 4254

def _reduce_298( val, _values, result )
               lexer.cond.pop
 result
end

#_reduce_299(val, _values, result) ⇒ Object



4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
# File 'lib/ruby_parser.rb', line 4259

def _reduce_299( val, _values, result )
               block = val[5]
               val[2] = cond val[2]
               if val[2][0] == :not then
                 result = s(:while, val[2].last, block, true);
               else
                 result = s(:until, val[2], block, true);
               end
 result
end

#_reduce_3(val, _values, result) ⇒ Object



2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
# File 'lib/ruby_parser.rb', line 2871

def _reduce_3( val, _values, result )
                result = val[0]

                if val[1] then
                  result = s(:rescue)
                  result << val[0] if val[0]
                  result << val[1] if val[1]
                  result << val[2] if val[2]
                elsif not val[2].nil? then
                  warning("else without rescue is useless")
                  result = block_append(result, val[2])
                end

                result = s(:ensure, result, val[3]).compact if val[3]
 result
end

#_reduce_30(val, _values, result) ⇒ Object



3068
3069
3070
3071
# File 'lib/ruby_parser.rb', line 3068

def _reduce_30( val, _values, result )
                self.backref_assign_error(val[0]);
 result
end

#_reduce_300(val, _values, result) ⇒ Object



4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
# File 'lib/ruby_parser.rb', line 4270

def _reduce_300( val, _values, result )
                result = s(:case, val[1]);

                body = val[3]
                while body and body.node_type == :when
                  result << body
                  body = body.delete_at 3
                end

                els = body

                if els and els != s(:block) then
                  result << els
                else
                  result << nil
                end
 result
end

#_reduce_301(val, _values, result) ⇒ Object



4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
# File 'lib/ruby_parser.rb', line 4289

def _reduce_301( val, _values, result )
                result = s(:case, nil); # REFACTOR

                body = val[2]
                while body and body.first == :when
                  result << body
                  body = body.delete_at 3
                end

                els = body

                if els and els != s(:block) then
                  result << els
                else
                  result << nil
                end
 result
end

#_reduce_302(val, _values, result) ⇒ Object



4308
4309
4310
4311
4312
# File 'lib/ruby_parser.rb', line 4308

def _reduce_302( val, _values, result )
 # TODO: need a test
               result = s(:case, nil, val[3])
 result
end

#_reduce_303(val, _values, result) ⇒ Object



4314
4315
4316
4317
# File 'lib/ruby_parser.rb', line 4314

def _reduce_303( val, _values, result )
               lexer.cond.push true
 result
end

#_reduce_304(val, _values, result) ⇒ Object



4319
4320
4321
4322
# File 'lib/ruby_parser.rb', line 4319

def _reduce_304( val, _values, result )
               lexer.cond.pop;
 result
end

#_reduce_305(val, _values, result) ⇒ Object



4324
4325
4326
4327
4328
# File 'lib/ruby_parser.rb', line 4324

def _reduce_305( val, _values, result )
               result = s(:for, val[4], val[1])
               result << val[7] if val[7]
 result
end

#_reduce_306(val, _values, result) ⇒ Object



4330
4331
4332
4333
4334
4335
4336
4337
# File 'lib/ruby_parser.rb', line 4330

def _reduce_306( val, _values, result )
                self.comments.push self.lexer.comments
                if (self.in_def || self.in_single > 0) then
                  yyerror("class definition in method body");
                end
                self.env.extend
 result
end

#_reduce_307(val, _values, result) ⇒ Object



4339
4340
4341
4342
4343
4344
4345
# File 'lib/ruby_parser.rb', line 4339

def _reduce_307( val, _values, result )
                scope = s(:scope, val[4]).compact
                result = s(:class, val[1].last.to_sym, val[2], scope)
                result.comments = self.comments.pop
                self.env.unextend
 result
end

#_reduce_308(val, _values, result) ⇒ Object



4347
4348
4349
4350
4351
# File 'lib/ruby_parser.rb', line 4347

def _reduce_308( val, _values, result )
                result = self.in_def
                self.in_def = false
 result
end

#_reduce_309(val, _values, result) ⇒ Object



4353
4354
4355
4356
4357
4358
# File 'lib/ruby_parser.rb', line 4353

def _reduce_309( val, _values, result )
                result = self.in_single
                self.in_single = 0
                self.env.extend;
 result
end

#_reduce_31(val, _values, result) ⇒ Object



3073
3074
3075
3076
# File 'lib/ruby_parser.rb', line 3073

def _reduce_31( val, _values, result )
                result = self.node_assign(val[0], s(:svalue, val[2]))
 result
end

#_reduce_310(val, _values, result) ⇒ Object



4360
4361
4362
4363
4364
4365
4366
4367
# File 'lib/ruby_parser.rb', line 4360

def _reduce_310( val, _values, result )
                scope = s(:scope, val[6]).compact
                result = s(:sclass, val[2], scope)
                self.env.unextend;
                self.in_def = val[3]
                self.in_single = val[5]
 result
end

#_reduce_311(val, _values, result) ⇒ Object



4369
4370
4371
4372
4373
4374
4375
4376
# File 'lib/ruby_parser.rb', line 4369

def _reduce_311( val, _values, result )
               self.comments.push self.lexer.comments
               yyerror("module definition in method body") if
                 self.in_def or self.in_single > 0

               self.env.extend;
 result
end

#_reduce_312(val, _values, result) ⇒ Object



4378
4379
4380
4381
4382
4383
4384
# File 'lib/ruby_parser.rb', line 4378

def _reduce_312( val, _values, result )
               body = val[3] ? s(:scope, val[3]) : s(:scope)
               result = s(:module, val[1].last.to_sym, body)
               result.comments = self.comments.pop
               self.env.unextend;
 result
end

#_reduce_313(val, _values, result) ⇒ Object



4386
4387
4388
4389
4390
4391
# File 'lib/ruby_parser.rb', line 4386

def _reduce_313( val, _values, result )
               self.comments.push self.lexer.comments
               self.in_def = true
               self.env.extend
 result
end

#_reduce_314(val, _values, result) ⇒ Object



4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
# File 'lib/ruby_parser.rb', line 4393

def _reduce_314( val, _values, result )
               name, args, body = val[1], val[3], val[4] # TODO: refactor
               name = name.to_sym
               body ||= s(:nil)

               block_arg = args.block_arg(:remove)
               body = self.block_append(args, body, body && body[0] == :block)
               body.insert 2, block_arg if block_arg
               result = s(:defn, name, s(:scope, body))
               result.comments = self.comments.pop

               self.env.unextend
               self.in_def = false
 result
end

#_reduce_315(val, _values, result) ⇒ Object



4409
4410
4411
4412
4413
4414
# File 'lib/ruby_parser.rb', line 4409

def _reduce_315( val, _values, result )
 # 0-2, 3
               self.comments.push self.lexer.comments
               lexer.lex_state = :expr_fname
 result
end

#_reduce_316(val, _values, result) ⇒ Object



4416
4417
4418
4419
4420
4421
4422
# File 'lib/ruby_parser.rb', line 4416

def _reduce_316( val, _values, result )
                   # 4, 5
               self.in_single += 1
               self.env.extend;
               lexer.lex_state = :expr_end # force for args
 result
end

#_reduce_317(val, _values, result) ⇒ Object



4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
# File 'lib/ruby_parser.rb', line 4424

def _reduce_317( val, _values, result )
 # 6-8
               recv, name, args, body = val[1], val[4], val[6], val[7]

               block_arg = args.block_arg(:remove)
               body = self.block_append(args, body, body && body[0] == :block)
               body.insert 2, block_arg if block_arg

               result = s(:defs, recv, name.to_sym, s(:scope, body))
               result.comments = self.comments.pop

               self.env.unextend;
               self.in_single -= 1
 result
end

#_reduce_318(val, _values, result) ⇒ Object



4440
4441
4442
4443
# File 'lib/ruby_parser.rb', line 4440

def _reduce_318( val, _values, result )
                result = s(:break)
 result
end

#_reduce_319(val, _values, result) ⇒ Object



4445
4446
4447
4448
# File 'lib/ruby_parser.rb', line 4445

def _reduce_319( val, _values, result )
                result = s(:next)
 result
end

#_reduce_32(val, _values, result) ⇒ Object



3078
3079
3080
3081
3082
3083
3084
3085
3086
# File 'lib/ruby_parser.rb', line 3078

def _reduce_32( val, _values, result )
               result = val[0] << if val[0][1] then
                                    s(:to_ary, val[2])
                                  else
                                    val[0].delete_at 1 if val[0][1].nil?
                                    s(:array, val[2])
                                  end
 result
end

#_reduce_320(val, _values, result) ⇒ Object



4450
4451
4452
4453
# File 'lib/ruby_parser.rb', line 4450

def _reduce_320( val, _values, result )
                result = s(:redo)
 result
end

#_reduce_321(val, _values, result) ⇒ Object



4455
4456
4457
4458
# File 'lib/ruby_parser.rb', line 4455

def _reduce_321( val, _values, result )
                result = s(:retry)
 result
end

#_reduce_322(val, _values, result) ⇒ Object



4460
4461
4462
4463
# File 'lib/ruby_parser.rb', line 4460

def _reduce_322( val, _values, result )
                result = value_expr(val[0])
 result
end

#_reduce_33(val, _values, result) ⇒ Object



3088
3089
3090
3091
3092
# File 'lib/ruby_parser.rb', line 3088

def _reduce_33( val, _values, result )
               val[0].delete_at 1 if val[0][1].nil?
               result = val[0] << val[2]
 result
end

#_reduce_331(val, _values, result) ⇒ Object

reduce 330 omitted



4481
4482
4483
4484
# File 'lib/ruby_parser.rb', line 4481

def _reduce_331( val, _values, result )
                result = s(:if, val[1], val[3], val[4]);
 result
end

#_reduce_333(val, _values, result) ⇒ Object

reduce 332 omitted



4488
4489
4490
4491
# File 'lib/ruby_parser.rb', line 4488

def _reduce_333( val, _values, result )
                result = val[1];
 result
end

#_reduce_335(val, _values, result) ⇒ Object

reduce 334 omitted



4495
4496
4497
4498
# File 'lib/ruby_parser.rb', line 4495

def _reduce_335( val, _values, result )
 val[0].delete_at 1 if val[0][1].nil?
 result
end

#_reduce_337(val, _values, result) ⇒ Object

reduce 336 omitted



4502
4503
4504
4505
# File 'lib/ruby_parser.rb', line 4502

def _reduce_337( val, _values, result )
                result = 0
 result
end

#_reduce_338(val, _values, result) ⇒ Object



4507
4508
4509
4510
# File 'lib/ruby_parser.rb', line 4507

def _reduce_338( val, _values, result )
                result = 0
 result
end

#_reduce_339(val, _values, result) ⇒ Object



4512
4513
4514
4515
# File 'lib/ruby_parser.rb', line 4512

def _reduce_339( val, _values, result )
                result = val[1];
 result
end

#_reduce_340(val, _values, result) ⇒ Object



4517
4518
4519
4520
# File 'lib/ruby_parser.rb', line 4517

def _reduce_340( val, _values, result )
                self.env.extend :dynamic
 result
end

#_reduce_341(val, _values, result) ⇒ Object



4522
4523
4524
4525
# File 'lib/ruby_parser.rb', line 4522

def _reduce_341( val, _values, result )
 result = self.env.dynamic.keys
 result
end

#_reduce_342(val, _values, result) ⇒ Object



4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
# File 'lib/ruby_parser.rb', line 4527

def _reduce_342( val, _values, result )
                vars = val[2]
                body = val[4]

                result = s(:iter)
                result << vars
                result << val[1] if val[1]
                result << body if body

                self.env.unextend;
 result
end

#_reduce_343(val, _values, result) ⇒ Object

Raises:

  • (SyntaxError)


4540
4541
4542
4543
4544
4545
4546
4547
# File 'lib/ruby_parser.rb', line 4540

def _reduce_343( val, _values, result )
              raise SyntaxError, "Both block arg and actual block given." if
                val[0] && val[0][0] == :blockpass

              result = val[1]
              result.insert 1, val[0]
 result
end

#_reduce_344(val, _values, result) ⇒ Object



4549
4550
4551
4552
4553
# File 'lib/ruby_parser.rb', line 4549

def _reduce_344( val, _values, result )
                result = s(:call, val[0], val[2]);
                result << val[3] if val[3]
 result
end

#_reduce_345(val, _values, result) ⇒ Object



4555
4556
4557
4558
4559
# File 'lib/ruby_parser.rb', line 4555

def _reduce_345( val, _values, result )
                result = s(:call, val[0], val[2]);
                result << val[3] if val[3]
 result
end

#_reduce_346(val, _values, result) ⇒ Object



4561
4562
4563
4564
# File 'lib/ruby_parser.rb', line 4561

def _reduce_346( val, _values, result )
                result = new_fcall(val[0].to_sym, val[1])
 result
end

#_reduce_347(val, _values, result) ⇒ Object



4566
4567
4568
4569
# File 'lib/ruby_parser.rb', line 4566

def _reduce_347( val, _values, result )
                result = new_call(val[0], val[2].to_sym, val[3])
 result
end

#_reduce_348(val, _values, result) ⇒ Object



4571
4572
4573
4574
# File 'lib/ruby_parser.rb', line 4571

def _reduce_348( val, _values, result )
                result = new_call(val[0], val[2].to_sym, val[3])
 result
end

#_reduce_349(val, _values, result) ⇒ Object



4576
4577
4578
4579
# File 'lib/ruby_parser.rb', line 4576

def _reduce_349( val, _values, result )
                result = new_call(val[0], val[2].to_sym)
 result
end

#_reduce_350(val, _values, result) ⇒ Object



4581
4582
4583
4584
# File 'lib/ruby_parser.rb', line 4581

def _reduce_350( val, _values, result )
                result = self.new_super(val[1]);
 result
end

#_reduce_351(val, _values, result) ⇒ Object



4586
4587
4588
4589
# File 'lib/ruby_parser.rb', line 4586

def _reduce_351( val, _values, result )
                result = s(:zsuper)
 result
end

#_reduce_352(val, _values, result) ⇒ Object



4591
4592
4593
4594
# File 'lib/ruby_parser.rb', line 4591

def _reduce_352( val, _values, result )
                self.env.extend :dynamic
 result
end

#_reduce_353(val, _values, result) ⇒ Object



4596
4597
4598
4599
# File 'lib/ruby_parser.rb', line 4596

def _reduce_353( val, _values, result )
 result = self.env.dynamic.keys
 result
end

#_reduce_354(val, _values, result) ⇒ Object



4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
# File 'lib/ruby_parser.rb', line 4601

def _reduce_354( val, _values, result )
 # REFACTOR
                args = val[2]
                body = val[4]
                result = s(:iter)
                result << args
                result << body if body
                self.env.unextend
 result
end

#_reduce_355(val, _values, result) ⇒ Object



4612
4613
4614
4615
# File 'lib/ruby_parser.rb', line 4612

def _reduce_355( val, _values, result )
                self.env.extend :dynamic
 result
end

#_reduce_356(val, _values, result) ⇒ Object



4617
4618
4619
4620
# File 'lib/ruby_parser.rb', line 4617

def _reduce_356( val, _values, result )
 result = self.env.dynamic.keys
 result
end

#_reduce_357(val, _values, result) ⇒ Object



4622
4623
4624
4625
4626
4627
4628
4629
4630
# File 'lib/ruby_parser.rb', line 4622

def _reduce_357( val, _values, result )
                args = val[2]
                body = val[4]
                result = s(:iter)
                result << args
                result << body if body
                self.env.unextend
 result
end

#_reduce_358(val, _values, result) ⇒ Object



4632
4633
4634
4635
4636
# File 'lib/ruby_parser.rb', line 4632

def _reduce_358( val, _values, result )
                result = s(:when, val[1], val[3])
                result << val[4] if val[4]
 result
end

#_reduce_36(val, _values, result) ⇒ Object

reduce 35 omitted



3098
3099
3100
3101
# File 'lib/ruby_parser.rb', line 3098

def _reduce_36( val, _values, result )
                result = logop(:and, val[0], val[2])
 result
end

#_reduce_360(val, _values, result) ⇒ Object

reduce 359 omitted



4640
4641
4642
4643
# File 'lib/ruby_parser.rb', line 4640

def _reduce_360( val, _values, result )
                result = self.list_append(val[0], s(:when, val[3], nil))
 result
end

#_reduce_361(val, _values, result) ⇒ Object



4645
4646
4647
4648
# File 'lib/ruby_parser.rb', line 4645

def _reduce_361( val, _values, result )
                result = s(:array, s(:when, val[1], nil));
 result
end

#_reduce_364(val, _values, result) ⇒ Object

reduce 363 omitted



4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
# File 'lib/ruby_parser.rb', line 4654

def _reduce_364( val, _values, result )
                result = s(:resbody, val[1])
                if val[2] then
                  val[2] = node_assign(val[2], s(:gvar, :"$!"))

                  strip = val[4] && val[4][0] == :block
                  val[4] = block_append(val[2], val[4])
                  val[4].push(*val[4].pop[1..-1]) if strip # HACK removes nested block from block_append
                end

                result << val[4] if val[4]
                result << val[5] if val[5]
 result
end

#_reduce_365(val, _values, result) ⇒ Object



4669
4670
4671
4672
# File 'lib/ruby_parser.rb', line 4669

def _reduce_365( val, _values, result )
result = nil;
 result
end

#_reduce_366(val, _values, result) ⇒ Object



4674
4675
4676
4677
# File 'lib/ruby_parser.rb', line 4674

def _reduce_366( val, _values, result )
                result = s(:array, val[0]);
 result
end

#_reduce_369(val, _values, result) ⇒ Object

reduce 368 omitted



4683
4684
4685
4686
# File 'lib/ruby_parser.rb', line 4683

def _reduce_369( val, _values, result )
                result = val[1];
 result
end

#_reduce_37(val, _values, result) ⇒ Object



3103
3104
3105
3106
# File 'lib/ruby_parser.rb', line 3103

def _reduce_37( val, _values, result )
                result = logop(:or, val[0], val[2])
 result
end

#_reduce_371(val, _values, result) ⇒ Object

reduce 370 omitted



4690
4691
4692
4693
4694
4695
4696
4697
# File 'lib/ruby_parser.rb', line 4690

def _reduce_371( val, _values, result )
                if (val[1] != nil) then
                    result = val[1];
                else
                    result = s(:nil)
                end
 result
end

#_reduce_373(val, _values, result) ⇒ Object

reduce 372 omitted



4701
4702
4703
4704
# File 'lib/ruby_parser.rb', line 4701

def _reduce_373( val, _values, result )
 result = s(:lit, val[0])
 result
end

#_reduce_374(val, _values, result) ⇒ Object



4706
4707
4708
4709
# File 'lib/ruby_parser.rb', line 4706

def _reduce_374( val, _values, result )
 result = s(:lit, val[0])
 result
end

#_reduce_376(val, _values, result) ⇒ Object

reduce 375 omitted



4713
4714
4715
4716
4717
# File 'lib/ruby_parser.rb', line 4713

def _reduce_376( val, _values, result )
                val[0] = s(:dstr, val[0].value) if val[0][0] == :evstr
                result = val[0];
 result
end

#_reduce_378(val, _values, result) ⇒ Object

reduce 377 omitted



4721
4722
4723
4724
# File 'lib/ruby_parser.rb', line 4721

def _reduce_378( val, _values, result )
                result = self.literal_concat(val[0], val[1]);
 result
end

#_reduce_379(val, _values, result) ⇒ Object



4726
4727
4728
4729
# File 'lib/ruby_parser.rb', line 4726

def _reduce_379( val, _values, result )
                result = val[1];
 result
end

#_reduce_38(val, _values, result) ⇒ Object



3108
3109
3110
3111
# File 'lib/ruby_parser.rb', line 3108

def _reduce_38( val, _values, result )
                result = s(:not, val[1])
 result
end

#_reduce_380(val, _values, result) ⇒ Object



4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
# File 'lib/ruby_parser.rb', line 4731

def _reduce_380( val, _values, result )
                node = val[1]

                unless node then
                  node = s(:xstr, '')
                else
                  case node[0]
                  when :str
                    node[0] = :xstr
                  when :dstr
                    node[0] = :dxstr
                  else
                    node = s(:dxstr, '', node)
                  end
                end

                result = node
 result
end

#_reduce_381(val, _values, result) ⇒ Object



4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
# File 'lib/ruby_parser.rb', line 4751

def _reduce_381( val, _values, result )
                node = val[1] || s(:str, '')
                options = val[2]

                o, k = 0, nil
                options.split(//).each do |c| # FIX: this has a better home
                  v = {
                       'x' => Regexp::EXTENDED,
                       'i' => Regexp::IGNORECASE,
                       'm' => Regexp::MULTILINE,
                       'o' => Regexp::ONCE,
                       'n' => Regexp::ENC_NONE,
                       'e' => Regexp::ENC_EUC,
                       's' => Regexp::ENC_SJIS,
                       'u' => Regexp::ENC_UTF8,
                       }[c]
                  raise "unknown regexp option: #{c}" unless v
                  o += v
                  k = c if c =~ /[esu]/
                end

                case node[0]
                when :str then
                  node[0] = :lit
                  node[1] = if k then
                              Regexp.new(node[1], o, k)
                            else
                              Regexp.new(node[1], o)
                            end
                when :dstr then
                  if options =~ /o/ then
                    node[0] = :dregx_once
                  else
                    node[0] = :dregx
                  end
                  node << o if o and o != 0
                else
                  node = s(:dregx, '', node);
                  node[0] = :dregx_once if options =~ /o/
                  node << o if o and o != 0
                end

                result = node
 result
end

#_reduce_382(val, _values, result) ⇒ Object



4797
4798
4799
4800
# File 'lib/ruby_parser.rb', line 4797

def _reduce_382( val, _values, result )
                 result = s(:zarray);
 result
end

#_reduce_383(val, _values, result) ⇒ Object



4802
4803
4804
4805
# File 'lib/ruby_parser.rb', line 4802

def _reduce_383( val, _values, result )
               result = val[1];
 result
end

#_reduce_384(val, _values, result) ⇒ Object



4807
4808
4809
4810
# File 'lib/ruby_parser.rb', line 4807

def _reduce_384( val, _values, result )
                 result = s(:array)
 result
end

#_reduce_385(val, _values, result) ⇒ Object



4812
4813
4814
4815
4816
# File 'lib/ruby_parser.rb', line 4812

def _reduce_385( val, _values, result )
                 word = val[1][0] == :evstr ? s(:dstr, '', val[1]) : val[1]
                 result = val[0] << word
 result
end

#_reduce_387(val, _values, result) ⇒ Object

reduce 386 omitted



4820
4821
4822
4823
# File 'lib/ruby_parser.rb', line 4820

def _reduce_387( val, _values, result )
                 result = self.literal_concat(val[0], val[1]);
 result
end

#_reduce_388(val, _values, result) ⇒ Object



4825
4826
4827
4828
# File 'lib/ruby_parser.rb', line 4825

def _reduce_388( val, _values, result )
                 result = s(:zarray)
 result
end

#_reduce_389(val, _values, result) ⇒ Object



4830
4831
4832
4833
# File 'lib/ruby_parser.rb', line 4830

def _reduce_389( val, _values, result )
                 result = val[1]
 result
end

#_reduce_39(val, _values, result) ⇒ Object



3113
3114
3115
3116
# File 'lib/ruby_parser.rb', line 3113

def _reduce_39( val, _values, result )
                result = s(:not, val[1])
 result
end

#_reduce_390(val, _values, result) ⇒ Object



4835
4836
4837
4838
# File 'lib/ruby_parser.rb', line 4835

def _reduce_390( val, _values, result )
                 result = s(:array)
 result
end

#_reduce_391(val, _values, result) ⇒ Object



4840
4841
4842
4843
# File 'lib/ruby_parser.rb', line 4840

def _reduce_391( val, _values, result )
                 result = val[0] << val[1]
 result
end

#_reduce_392(val, _values, result) ⇒ Object



4845
4846
4847
4848
# File 'lib/ruby_parser.rb', line 4845

def _reduce_392( val, _values, result )
 result = s(:str, "")
 result
end

#_reduce_393(val, _values, result) ⇒ Object



4850
4851
4852
4853
# File 'lib/ruby_parser.rb', line 4850

def _reduce_393( val, _values, result )
                   result = literal_concat(val[0], val[1])
 result
end

#_reduce_394(val, _values, result) ⇒ Object



4855
4856
4857
4858
# File 'lib/ruby_parser.rb', line 4855

def _reduce_394( val, _values, result )
 result = nil
 result
end

#_reduce_395(val, _values, result) ⇒ Object



4860
4861
4862
4863
# File 'lib/ruby_parser.rb', line 4860

def _reduce_395( val, _values, result )
                  result = literal_concat(val[0], val[1])
 result
end

#_reduce_397(val, _values, result) ⇒ Object

reduce 396 omitted



4867
4868
4869
4870
4871
4872
# File 'lib/ruby_parser.rb', line 4867

def _reduce_397( val, _values, result )
                 result = lexer.lex_strterm;
                 lexer.lex_strterm = nil
                 lexer.lex_state = :expr_beg
 result
end

#_reduce_398(val, _values, result) ⇒ Object



4874
4875
4876
4877
4878
# File 'lib/ruby_parser.rb', line 4874

def _reduce_398( val, _values, result )
                 lexer.lex_strterm = val[1]
                 result = s(:evstr, val[2]);
 result
end

#_reduce_399(val, _values, result) ⇒ Object



4880
4881
4882
4883
4884
4885
4886
4887
# File 'lib/ruby_parser.rb', line 4880

def _reduce_399( val, _values, result )
                 result = lexer.lex_strterm;
                 lexer.lex_strterm = nil
                 lexer.lex_state = :expr_beg
                 lexer.cond.push false
                 lexer.cmdarg.push false
 result
end

#_reduce_4(val, _values, result) ⇒ Object



2888
2889
2890
2891
# File 'lib/ruby_parser.rb', line 2888

def _reduce_4( val, _values, result )
               result = void_stmts(val[0])
 result
end

#_reduce_400(val, _values, result) ⇒ Object



4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
# File 'lib/ruby_parser.rb', line 4889

def _reduce_400( val, _values, result )
                 lexer.lex_strterm = val[1]
                 lexer.cond.lexpop
                 lexer.cmdarg.lexpop
                 case val[2][0]
                 when :str, :dstr, :evstr then
                   result = val[2]
                 else
                   result = s(:evstr, val[2])
                 end
 result
end

#_reduce_401(val, _values, result) ⇒ Object



4902
4903
4904
4905
# File 'lib/ruby_parser.rb', line 4902

def _reduce_401( val, _values, result )
                 result = s(:gvar, val[0].to_sym);
 result
end

#_reduce_402(val, _values, result) ⇒ Object



4907
4908
4909
4910
# File 'lib/ruby_parser.rb', line 4907

def _reduce_402( val, _values, result )
                 result = s(:ivar, val[0].to_sym);
 result
end

#_reduce_403(val, _values, result) ⇒ Object



4912
4913
4914
4915
# File 'lib/ruby_parser.rb', line 4912

def _reduce_403( val, _values, result )
                 result = s(:cvar, val[0].to_sym);
 result
end

#_reduce_405(val, _values, result) ⇒ Object

reduce 404 omitted



4919
4920
4921
4922
4923
# File 'lib/ruby_parser.rb', line 4919

def _reduce_405( val, _values, result )
                 lexer.lex_state = :expr_end
                 result = val[1].to_sym
 result
end

#_reduce_41(val, _values, result) ⇒ Object

reduce 40 omitted



3120
3121
3122
3123
# File 'lib/ruby_parser.rb', line 3120

def _reduce_41( val, _values, result )
                result = value_expr(val[0])
 result
end

#_reduce_410(val, _values, result) ⇒ Object

reduce 409 omitted



4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
# File 'lib/ruby_parser.rb', line 4933

def _reduce_410( val, _values, result )
                 lexer.lex_state = :expr_end
                 result = val[1]

                 yyerror("empty symbol literal") if result.nil? or result.empty?

                 case result[0]
                 when :dstr then
                   result[0] = :dsym
                 when :str then
                   result = s(:lit, result.last.intern)
                 else
                   result = s(:dsym, '', result)
                 end
 result
end

#_reduce_413(val, _values, result) ⇒ Object

reduce 412 omitted



4954
4955
4956
4957
# File 'lib/ruby_parser.rb', line 4954

def _reduce_413( val, _values, result )
               result = -val[1] # TODO: pt_testcase
 result
end

#_reduce_414(val, _values, result) ⇒ Object



4959
4960
4961
4962
# File 'lib/ruby_parser.rb', line 4959

def _reduce_414( val, _values, result )
               result = -val[1] # TODO: pt_testcase
 result
end

#_reduce_420(val, _values, result) ⇒ Object

reduce 419 omitted



4974
4975
4976
4977
# File 'lib/ruby_parser.rb', line 4974

def _reduce_420( val, _values, result )
               result = s(:nil)
 result
end

#_reduce_421(val, _values, result) ⇒ Object



4979
4980
4981
4982
# File 'lib/ruby_parser.rb', line 4979

def _reduce_421( val, _values, result )
               result = s(:self)
 result
end

#_reduce_422(val, _values, result) ⇒ Object



4984
4985
4986
4987
# File 'lib/ruby_parser.rb', line 4984

def _reduce_422( val, _values, result )
               result = s(:true)
 result
end

#_reduce_423(val, _values, result) ⇒ Object



4989
4990
4991
4992
# File 'lib/ruby_parser.rb', line 4989

def _reduce_423( val, _values, result )
               result = s(:false)
 result
end

#_reduce_424(val, _values, result) ⇒ Object



4994
4995
4996
4997
# File 'lib/ruby_parser.rb', line 4994

def _reduce_424( val, _values, result )
               result = :"__FILE__"
 result
end

#_reduce_425(val, _values, result) ⇒ Object



4999
5000
5001
5002
# File 'lib/ruby_parser.rb', line 4999

def _reduce_425( val, _values, result )
               result = :"__LINE__"
 result
end

#_reduce_426(val, _values, result) ⇒ Object



5004
5005
5006
5007
# File 'lib/ruby_parser.rb', line 5004

def _reduce_426( val, _values, result )
                 result = self.gettable(val[0])
 result
end

#_reduce_427(val, _values, result) ⇒ Object



5009
5010
5011
5012
# File 'lib/ruby_parser.rb', line 5009

def _reduce_427( val, _values, result )
                 result = self.assignable(val[0]);
 result
end

#_reduce_430(val, _values, result) ⇒ Object

reduce 429 omitted



5018
5019
5020
5021
# File 'lib/ruby_parser.rb', line 5018

def _reduce_430( val, _values, result )
               result = nil;
 result
end

#_reduce_431(val, _values, result) ⇒ Object



5023
5024
5025
5026
# File 'lib/ruby_parser.rb', line 5023

def _reduce_431( val, _values, result )
               lexer.lex_state = :expr_beg
 result
end

#_reduce_432(val, _values, result) ⇒ Object



5028
5029
5030
5031
# File 'lib/ruby_parser.rb', line 5028

def _reduce_432( val, _values, result )
               result = val[2];
 result
end

#_reduce_433(val, _values, result) ⇒ Object



5033
5034
5035
5036
5037
# File 'lib/ruby_parser.rb', line 5033

def _reduce_433( val, _values, result )
               yyerrok;
               result = nil;
 result
end

#_reduce_434(val, _values, result) ⇒ Object



5039
5040
5041
5042
5043
# File 'lib/ruby_parser.rb', line 5039

def _reduce_434( val, _values, result )
                 result = val[1];
                 lexer.lex_state = :expr_beg
 result
end

#_reduce_435(val, _values, result) ⇒ Object



5045
5046
5047
5048
# File 'lib/ruby_parser.rb', line 5045

def _reduce_435( val, _values, result )
                 result = val[0];
 result
end

#_reduce_436(val, _values, result) ⇒ Object



5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
# File 'lib/ruby_parser.rb', line 5050

def _reduce_436( val, _values, result )
               result = val[0]
               if val[2] then
                 val[2][1..-1].each do |lasgn| # FIX clean sexp iter
                   raise "wtf? #{lasgn.inspect}" unless lasgn[0] == :lasgn
                   result << lasgn[1]
                 end
               end
               result << val[4] if val[4]
               result << val[2] if val[2]
               result << val[5] if val[5]
 result
end

#_reduce_437(val, _values, result) ⇒ Object



5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
# File 'lib/ruby_parser.rb', line 5064

def _reduce_437( val, _values, result )
               result = val[0]
               if val[2] then
                 val[2][1..-1].each do |lasgn| # FIX clean sexp iter
                   raise "wtf? #{lasgn.inspect}" unless lasgn[0] == :lasgn
                   result << lasgn[1]
                 end
               end
               result << val[2] if val[2]
               result << val[3] if val[3]
 result
end

#_reduce_438(val, _values, result) ⇒ Object



5077
5078
5079
5080
5081
5082
# File 'lib/ruby_parser.rb', line 5077

def _reduce_438( val, _values, result )
               result = val[0]
               result << val[2] if val[2]
               result << val[3] if val[3]
 result
end

#_reduce_439(val, _values, result) ⇒ Object



5084
5085
5086
5087
5088
# File 'lib/ruby_parser.rb', line 5084

def _reduce_439( val, _values, result )
               result = val[0]
               result << val[1] if val[1]
 result
end

#_reduce_44(val, _values, result) ⇒ Object

reduce 43 omitted



3129
3130
3131
3132
# File 'lib/ruby_parser.rb', line 3129

def _reduce_44( val, _values, result )
               result = s(:return, ret_args(val[1]))
 result
end

#_reduce_440(val, _values, result) ⇒ Object



5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
# File 'lib/ruby_parser.rb', line 5090

def _reduce_440( val, _values, result )
               result = s(:args)
               if val[0] then
                 val[0][1..-1].each do |lasgn| # FIX clean sexp iter
                   raise "wtf? #{lasgn.inspect}" unless lasgn[0] == :lasgn
                   result << lasgn[1]
                 end
               end

               result << val[2] if val[2]
               result << val[0] if val[0]
               result << val[3] if val[3]
 result
end

#_reduce_441(val, _values, result) ⇒ Object



5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
# File 'lib/ruby_parser.rb', line 5105

def _reduce_441( val, _values, result )
               result = s(:args)
               if val[0] then
                 val[0][1..-1].each do |lasgn| # FIX clean sexp iter
                   raise "wtf? #{lasgn.inspect}" unless lasgn[0] == :lasgn
                   result << lasgn[1]
                 end
               end

               result << val[0] if val[0]
               result << val[1] if val[1]
 result
end

#_reduce_442(val, _values, result) ⇒ Object



5119
5120
5121
5122
# File 'lib/ruby_parser.rb', line 5119

def _reduce_442( val, _values, result )
                 result = s(:args, val[0], val[1]).compact
 result
end

#_reduce_443(val, _values, result) ⇒ Object



5124
5125
5126
5127
# File 'lib/ruby_parser.rb', line 5124

def _reduce_443( val, _values, result )
                 result = s(:args, val[0]).compact
 result
end

#_reduce_444(val, _values, result) ⇒ Object



5129
5130
5131
5132
# File 'lib/ruby_parser.rb', line 5129

def _reduce_444( val, _values, result )
                 result = s(:args)
 result
end

#_reduce_445(val, _values, result) ⇒ Object



5134
5135
5136
5137
# File 'lib/ruby_parser.rb', line 5134

def _reduce_445( val, _values, result )
               yyerror("formal argument cannot be a constant");
 result
end

#_reduce_446(val, _values, result) ⇒ Object



5139
5140
5141
5142
# File 'lib/ruby_parser.rb', line 5139

def _reduce_446( val, _values, result )
               yyerror("formal argument cannot be an instance variable");
 result
end

#_reduce_447(val, _values, result) ⇒ Object



5144
5145
5146
5147
# File 'lib/ruby_parser.rb', line 5144

def _reduce_447( val, _values, result )
               yyerror("formal argument cannot be a class variable");
 result
end

#_reduce_448(val, _values, result) ⇒ Object



5149
5150
5151
5152
5153
5154
5155
# File 'lib/ruby_parser.rb', line 5149

def _reduce_448( val, _values, result )
               identifier = val[0].to_sym
               self.env[identifier] = :lvar

               result = val[0];
 result
end

#_reduce_449(val, _values, result) ⇒ Object



5157
5158
5159
5160
5161
# File 'lib/ruby_parser.rb', line 5157

def _reduce_449( val, _values, result )
                 result = s(:args)
                 result << val[0].to_sym
 result
end

#_reduce_45(val, _values, result) ⇒ Object



3134
3135
3136
3137
# File 'lib/ruby_parser.rb', line 3134

def _reduce_45( val, _values, result )
               result = s(:break, ret_args(val[1]))
 result
end

#_reduce_450(val, _values, result) ⇒ Object



5163
5164
5165
5166
5167
# File 'lib/ruby_parser.rb', line 5163

def _reduce_450( val, _values, result )
                 val[0] << val[2].to_sym
                 result = val[0]
 result
end

#_reduce_451(val, _values, result) ⇒ Object



5169
5170
5171
5172
5173
# File 'lib/ruby_parser.rb', line 5169

def _reduce_451( val, _values, result )
                 result = self.assignable(val[0], val[2]);
                 # TODO: detect duplicate names
 result
end

#_reduce_452(val, _values, result) ⇒ Object



5175
5176
5177
5178
# File 'lib/ruby_parser.rb', line 5175

def _reduce_452( val, _values, result )
               result = s(:block, val[0])
 result
end

#_reduce_453(val, _values, result) ⇒ Object



5180
5181
5182
5183
# File 'lib/ruby_parser.rb', line 5180

def _reduce_453( val, _values, result )
               result = self.append_to_block(val[0], val[2]);
 result
end

#_reduce_456(val, _values, result) ⇒ Object

reduce 455 omitted



5189
5190
5191
5192
5193
5194
5195
# File 'lib/ruby_parser.rb', line 5189

def _reduce_456( val, _values, result )
 # TODO: differs from parse.y - needs tests
                name = val[1].to_sym
                self.assignable(name)
                result = :"*#{name}"
 result
end

#_reduce_457(val, _values, result) ⇒ Object



5197
5198
5199
5200
5201
5202
# File 'lib/ruby_parser.rb', line 5197

def _reduce_457( val, _values, result )
               name = :"*"
               self.env[name] = self.env.dynamic? ? :dvar : :lvar # FIX
               result = name
 result
end

#_reduce_46(val, _values, result) ⇒ Object



3139
3140
3141
3142
# File 'lib/ruby_parser.rb', line 3139

def _reduce_46( val, _values, result )
               result = s(:next, ret_args(val[1]))
 result
end

#_reduce_460(val, _values, result) ⇒ Object

reduce 459 omitted



5208
5209
5210
5211
5212
5213
5214
# File 'lib/ruby_parser.rb', line 5208

def _reduce_460( val, _values, result )
                identifier = val[1].to_sym

                self.env[identifier] = self.env.dynamic? ? :dvar : :lvar
                result = s(:block_arg, identifier.to_sym)
 result
end

#_reduce_461(val, _values, result) ⇒ Object



5216
5217
5218
5219
# File 'lib/ruby_parser.rb', line 5216

def _reduce_461( val, _values, result )
                result = val[1];
 result
end

#_reduce_462(val, _values, result) ⇒ Object



5221
5222
5223
5224
# File 'lib/ruby_parser.rb', line 5221

def _reduce_462( val, _values, result )
               result = nil;
 result
end

#_reduce_464(val, _values, result) ⇒ Object

reduce 463 omitted



5228
5229
5230
5231
# File 'lib/ruby_parser.rb', line 5228

def _reduce_464( val, _values, result )
               lexer.lex_state = :expr_beg
 result
end

#_reduce_465(val, _values, result) ⇒ Object



5233
5234
5235
5236
5237
5238
5239
# File 'lib/ruby_parser.rb', line 5233

def _reduce_465( val, _values, result )
               if (val[2].instanceof ILiteralNode) then
                  yyerror("Can't define single method for literals.");
               end
               result = val[2];
 result
end

#_reduce_466(val, _values, result) ⇒ Object



5241
5242
5243
5244
5245
# File 'lib/ruby_parser.rb', line 5241

def _reduce_466( val, _values, result )
 #  [!nil]
                result = s(:array)
 result
end

#_reduce_467(val, _values, result) ⇒ Object



5247
5248
5249
5250
5251
# File 'lib/ruby_parser.rb', line 5247

def _reduce_467( val, _values, result )
 #  [!nil]
                result = val[0];
 result
end

#_reduce_468(val, _values, result) ⇒ Object



5253
5254
5255
5256
5257
5258
5259
5260
# File 'lib/ruby_parser.rb', line 5253

def _reduce_468( val, _values, result )
                size = val[0].size
                if (size % 2 != 1) then # != 1 because of leading :array
                  yyerror("Odd number (#{size}) list for Hash. #{val[0].inspect}");
                end
                result = val[0];
 result
end

#_reduce_470(val, _values, result) ⇒ Object

reduce 469 omitted



5264
5265
5266
5267
5268
5269
5270
# File 'lib/ruby_parser.rb', line 5264

def _reduce_470( val, _values, result )
                list = val[0].dup
                more = val[2][1..-1]
                list.push(*more) unless more.empty?
                result = list
 result
end

#_reduce_471(val, _values, result) ⇒ Object



5272
5273
5274
5275
# File 'lib/ruby_parser.rb', line 5272

def _reduce_471( val, _values, result )
                result = s(:array, val[0], val[2])
 result
end

#_reduce_48(val, _values, result) ⇒ Object

reduce 47 omitted



3146
3147
3148
3149
# File 'lib/ruby_parser.rb', line 3146

def _reduce_48( val, _values, result )
                result = s(:call, val[0], val[2], val[3]);
 result
end

#_reduce_49(val, _values, result) ⇒ Object



3151
3152
3153
3154
# File 'lib/ruby_parser.rb', line 3151

def _reduce_49( val, _values, result )
                result = s(:call, val[0], val[2], val[3]);
 result
end

#_reduce_491(val, _values, result) ⇒ Object

reduce 490 omitted



5315
5316
5317
5318
# File 'lib/ruby_parser.rb', line 5315

def _reduce_491( val, _values, result )
 yyerrok
 result
end

#_reduce_494(val, _values, result) ⇒ Object

reduce 493 omitted



5324
5325
5326
5327
# File 'lib/ruby_parser.rb', line 5324

def _reduce_494( val, _values, result )
 yyerrok
 result
end

#_reduce_495(val, _values, result) ⇒ Object



5329
5330
5331
5332
# File 'lib/ruby_parser.rb', line 5329

def _reduce_495( val, _values, result )
 result = nil
 result
end

#_reduce_496(val, _values, result) ⇒ Object



5334
5335
5336
5337
# File 'lib/ruby_parser.rb', line 5334

def _reduce_496( val, _values, result )
 result = nil
 result
end

#_reduce_50(val, _values, result) ⇒ Object



3156
3157
3158
3159
# File 'lib/ruby_parser.rb', line 3156

def _reduce_50( val, _values, result )
                  self.env.extend :dynamic
 result
end

#_reduce_51(val, _values, result) ⇒ Object



3161
3162
3163
3164
# File 'lib/ruby_parser.rb', line 3161

def _reduce_51( val, _values, result )
 result = self.env.dynamic.keys
 result
end

#_reduce_52(val, _values, result) ⇒ Object



3166
3167
3168
3169
3170
# File 'lib/ruby_parser.rb', line 3166

def _reduce_52( val, _values, result )
                  result = s(:iter, val[2], val[4])
                  self.env.unextend;
 result
end

#_reduce_53(val, _values, result) ⇒ Object



3172
3173
3174
3175
# File 'lib/ruby_parser.rb', line 3172

def _reduce_53( val, _values, result )
               result = new_fcall(val[0].to_sym, val[1])
 result
end

#_reduce_54(val, _values, result) ⇒ Object



3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
# File 'lib/ruby_parser.rb', line 3177

def _reduce_54( val, _values, result )
               result = new_fcall(val[0].to_sym, val[1])
               if val[2] then
                 if result[0] == :block_pass then
                    raise "both block arg and actual block given"
                 end
                 val[2] << result
                 result = val[2]
               end
 result
end

#_reduce_55(val, _values, result) ⇒ Object



3189
3190
3191
3192
# File 'lib/ruby_parser.rb', line 3189

def _reduce_55( val, _values, result )
               result = new_call(val[0], val[2].to_sym, val[3])
 result
end

#_reduce_56(val, _values, result) ⇒ Object



3194
3195
3196
3197
# File 'lib/ruby_parser.rb', line 3194

def _reduce_56( val, _values, result )
               result = new_call(val[0], val[2].to_sym, val[3])
 result
end

#_reduce_57(val, _values, result) ⇒ Object



3199
3200
3201
3202
# File 'lib/ruby_parser.rb', line 3199

def _reduce_57( val, _values, result )
               result = new_call(val[0], val[2].to_sym, val[3])
 result
end

#_reduce_58(val, _values, result) ⇒ Object



3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
# File 'lib/ruby_parser.rb', line 3204

def _reduce_58( val, _values, result )
               result = new_call(val[0], val[2].to_sym, val[3])
               if val[4] then
                 if result[0] == :block_pass then # REFACTOR
                   raise "both block arg and actual block given"
                 end
                 val[2] << result
                 result = val[2]
               end
 result
end

#_reduce_59(val, _values, result) ⇒ Object



3216
3217
3218
3219
# File 'lib/ruby_parser.rb', line 3216

def _reduce_59( val, _values, result )
               result = self.new_super(val[1]);
 result
end

#_reduce_60(val, _values, result) ⇒ Object



3221
3222
3223
3224
# File 'lib/ruby_parser.rb', line 3221

def _reduce_60( val, _values, result )
               result = self.new_yield(val[1]);
 result
end

#_reduce_62(val, _values, result) ⇒ Object

reduce 61 omitted



3228
3229
3230
3231
# File 'lib/ruby_parser.rb', line 3228

def _reduce_62( val, _values, result )
                result = val[1];
 result
end

#_reduce_64(val, _values, result) ⇒ Object

reduce 63 omitted



3235
3236
3237
3238
# File 'lib/ruby_parser.rb', line 3235

def _reduce_64( val, _values, result )
                result = s(:masgn, s(:array, val[1]));
 result
end

#_reduce_65(val, _values, result) ⇒ Object



3240
3241
3242
3243
# File 'lib/ruby_parser.rb', line 3240

def _reduce_65( val, _values, result )
                result = s(:masgn, val[0]);
 result
end

#_reduce_66(val, _values, result) ⇒ Object



3245
3246
3247
3248
# File 'lib/ruby_parser.rb', line 3245

def _reduce_66( val, _values, result )
                result = s(:masgn, val[0] << val[1].compact);
 result
end

#_reduce_67(val, _values, result) ⇒ Object



3250
3251
3252
3253
# File 'lib/ruby_parser.rb', line 3250

def _reduce_67( val, _values, result )
                result = s(:masgn, val[0], val[2]);
 result
end

#_reduce_68(val, _values, result) ⇒ Object



3255
3256
3257
3258
# File 'lib/ruby_parser.rb', line 3255

def _reduce_68( val, _values, result )
                result = s(:masgn, val[0], s(:splat))
 result
end

#_reduce_69(val, _values, result) ⇒ Object



3260
3261
3262
3263
# File 'lib/ruby_parser.rb', line 3260

def _reduce_69( val, _values, result )
                result = s(:masgn, nil, val[1]);
 result
end

#_reduce_7(val, _values, result) ⇒ Object

reduce 6 omitted



2897
2898
2899
2900
# File 'lib/ruby_parser.rb', line 2897

def _reduce_7( val, _values, result )
               result = self.block_append(val[0], val[2])
 result
end

#_reduce_70(val, _values, result) ⇒ Object



3265
3266
3267
3268
# File 'lib/ruby_parser.rb', line 3265

def _reduce_70( val, _values, result )
                result = s(:masgn, nil, s(:splat))
 result
end

#_reduce_72(val, _values, result) ⇒ Object

reduce 71 omitted



3272
3273
3274
3275
# File 'lib/ruby_parser.rb', line 3272

def _reduce_72( val, _values, result )
                result = val[1];
 result
end

#_reduce_73(val, _values, result) ⇒ Object



3277
3278
3279
3280
# File 'lib/ruby_parser.rb', line 3277

def _reduce_73( val, _values, result )
                result = s(:array, val[0])
 result
end

#_reduce_74(val, _values, result) ⇒ Object



3282
3283
3284
3285
# File 'lib/ruby_parser.rb', line 3282

def _reduce_74( val, _values, result )
                result = val[0] << val[1].compact
 result
end

#_reduce_75(val, _values, result) ⇒ Object



3287
3288
3289
3290
# File 'lib/ruby_parser.rb', line 3287

def _reduce_75( val, _values, result )
               result = self.assignable(val[0])
 result
end

#_reduce_76(val, _values, result) ⇒ Object



3292
3293
3294
3295
# File 'lib/ruby_parser.rb', line 3292

def _reduce_76( val, _values, result )
               result = self.aryset(val[0], val[2]);
 result
end

#_reduce_77(val, _values, result) ⇒ Object



3297
3298
3299
3300
# File 'lib/ruby_parser.rb', line 3297

def _reduce_77( val, _values, result )
               result = s(:attrasgn, val[0], :"#{val[2].value}=");
 result
end

#_reduce_78(val, _values, result) ⇒ Object



3302
3303
3304
3305
# File 'lib/ruby_parser.rb', line 3302

def _reduce_78( val, _values, result )
               result = s(:attrasgn, val[0], :"#{val[2].value}=");
 result
end

#_reduce_79(val, _values, result) ⇒ Object



3307
3308
3309
3310
# File 'lib/ruby_parser.rb', line 3307

def _reduce_79( val, _values, result )
               result = s(:attrasgn, val[0], :"#{val[2].value}=");
 result
end

#_reduce_8(val, _values, result) ⇒ Object



2902
2903
2904
2905
# File 'lib/ruby_parser.rb', line 2902

def _reduce_8( val, _values, result )
               result = val[1];
 result
end

#_reduce_80(val, _values, result) ⇒ Object



3312
3313
3314
3315
3316
3317
3318
3319
3320
# File 'lib/ruby_parser.rb', line 3312

def _reduce_80( val, _values, result )
               if (self.in_def || self.in_single > 0) then
                 yyerror("dynamic constant assignment");
               end

               result = s(:constdecl, nil,
                          s(:colon2, val[0], val[2].value), nil)
 result
end

#_reduce_81(val, _values, result) ⇒ Object



3322
3323
3324
3325
3326
3327
3328
3329
# File 'lib/ruby_parser.rb', line 3322

def _reduce_81( val, _values, result )
               if (self.in_def || self.in_single > 0) then
                 yyerror("dynamic constant assignment");
               end

               result = s(:const, nil, s(:colon3, val[1].to_sym))
 result
end

#_reduce_82(val, _values, result) ⇒ Object



3331
3332
3333
3334
# File 'lib/ruby_parser.rb', line 3331

def _reduce_82( val, _values, result )
                self.backref_assign_error(val[0]);
 result
end

#_reduce_83(val, _values, result) ⇒ Object



3336
3337
3338
3339
# File 'lib/ruby_parser.rb', line 3336

def _reduce_83( val, _values, result )
               result = self.assignable(val[0])
 result
end

#_reduce_84(val, _values, result) ⇒ Object



3341
3342
3343
3344
# File 'lib/ruby_parser.rb', line 3341

def _reduce_84( val, _values, result )
               result = self.aryset(val[0], val[2]);
 result
end

#_reduce_85(val, _values, result) ⇒ Object



3346
3347
3348
3349
# File 'lib/ruby_parser.rb', line 3346

def _reduce_85( val, _values, result )
               result = s(:attrasgn, val[0], :"#{val[2].value}=");
 result
end

#_reduce_86(val, _values, result) ⇒ Object



3351
3352
3353
3354
# File 'lib/ruby_parser.rb', line 3351

def _reduce_86( val, _values, result )
               result = s(:attrasgn, val[0], :"#{val[2].value}=");
 result
end

#_reduce_87(val, _values, result) ⇒ Object



3356
3357
3358
3359
# File 'lib/ruby_parser.rb', line 3356

def _reduce_87( val, _values, result )
               result = s(:attrasgn, val[0], :"#{val[2].value}=");
 result
end

#_reduce_88(val, _values, result) ⇒ Object



3361
3362
3363
3364
3365
3366
3367
3368
# File 'lib/ruby_parser.rb', line 3361

def _reduce_88( val, _values, result )
               if (self.in_def || self.in_single > 0) then
                 yyerror("dynamic constant assignment");
               end

               result = s(:constdecl, nil, s(:colon2, val[0], val[2].value), nil);
 result
end

#_reduce_89(val, _values, result) ⇒ Object



3370
3371
3372
3373
3374
3375
3376
3377
# File 'lib/ruby_parser.rb', line 3370

def _reduce_89( val, _values, result )
                if (self.in_def || self.in_single > 0) then
                  yyerror("dynamic constant assignment");
                end

                result = s(:const, nil, s(:colon3, val[1].to_sym))
 result
end

#_reduce_9(val, _values, result) ⇒ Object



2907
2908
2909
2910
# File 'lib/ruby_parser.rb', line 2907

def _reduce_9( val, _values, result )
 lexer.lex_state = :expr_fname
 result
end

#_reduce_90(val, _values, result) ⇒ Object



3379
3380
3381
3382
# File 'lib/ruby_parser.rb', line 3379

def _reduce_90( val, _values, result )
                 self.backref_assign_error(val[0]);
 result
end

#_reduce_91(val, _values, result) ⇒ Object



3384
3385
3386
3387
# File 'lib/ruby_parser.rb', line 3384

def _reduce_91( val, _values, result )
                yyerror("class/module name must be CONSTANT");
 result
end

#_reduce_93(val, _values, result) ⇒ Object

reduce 92 omitted



3391
3392
3393
3394
# File 'lib/ruby_parser.rb', line 3391

def _reduce_93( val, _values, result )
                result = s(:colon3, val[1].to_sym)
 result
end

#_reduce_94(val, _values, result) ⇒ Object



3396
3397
3398
3399
# File 'lib/ruby_parser.rb', line 3396

def _reduce_94( val, _values, result )
                result = s(:colon2, nil, val[0].value);
 result
end

#_reduce_95(val, _values, result) ⇒ Object



3401
3402
3403
3404
# File 'lib/ruby_parser.rb', line 3401

def _reduce_95( val, _values, result )
                result = s(:colon2, val[0], val[2].value);
 result
end

#_reduce_99(val, _values, result) ⇒ Object

reduce 98 omitted



3412
3413
3414
3415
3416
# File 'lib/ruby_parser.rb', line 3412

def _reduce_99( val, _values, result )
                lexer.lex_state = :expr_end
                result = val[0];
 result
end

#_reduce_none(val, _values, result) ⇒ Object



5339
5340
5341
# File 'lib/ruby_parser.rb', line 5339

def _reduce_none( val, _values, result )
 result
end

#append_to_block(head, tail) ⇒ Object

FIX: wtf is this?!? switch to block_append



60
61
62
63
64
65
66
# File 'lib/ruby_parser_extras.rb', line 60

def append_to_block head, tail # FIX: wtf is this?!? switch to block_append
  return head if tail.nil?
  return tail if head.nil?

  head = s(:block, head) unless head.node_type == :block
  head << tail
end

#arg_add(node1, node2) ⇒ Object



68
69
70
71
72
# File 'lib/ruby_parser_extras.rb', line 68

def arg_add(node1, node2)
  return s(:array, node2) unless node1
  return node1 << node2 if node1[0] == :array
  return s(:argspush, node1, node2)
end

#arg_blk_pass(node1, node2) ⇒ Object



74
75
76
77
78
79
80
81
# File 'lib/ruby_parser_extras.rb', line 74

def arg_blk_pass node1, node2
  if node2 then
    node2.insert 1, node1
    return node2
  else
    node1
  end
end

#arg_concat(node1, node2) ⇒ Object



83
84
85
# File 'lib/ruby_parser_extras.rb', line 83

def arg_concat node1, node2
  return node2.nil? ? node1 : s(:argscat, node1, node2)
end

#aryset(receiver, index) ⇒ Object



87
88
89
# File 'lib/ruby_parser_extras.rb', line 87

def aryset receiver, index
  s(:attrasgn, receiver, :"[]=", index)
end

#assignable(lhs, value = nil) ⇒ Object

Raises:

  • (SyntaxError)


91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/ruby_parser_extras.rb', line 91

def assignable(lhs, value = nil)
  id = lhs.to_sym
  id = id.to_sym if Sexp === id

  raise SyntaxError, "Can't change the value of #{id}" if
    id.to_s =~ /^(?:self|nil|true|false|__LINE__|__FILE__)$/

  result = case id.to_s
           when /^@@/ then
             asgn = in_def || in_single > 0
             s((asgn ? :cvasgn : :cvdecl), id)
           when /^@/ then
             s(:iasgn, id)
           when /^\$/ then
             s(:gasgn, id)
           when /^[A-Z]/ then
             s(:cdecl, id)
           else
             case self.env[id]
             when :lvar then
               s(:lasgn, id)
             when :dvar, nil then
               if self.env.current[id] == :dvar then
                 s(:dasgn_curr, id)
               elsif self.env[id] == :dvar then
                 self.env.use(id)
                 s(:dasgn, id)
               elsif ! self.env.dynamic? then
                 s(:lasgn, id)
               else
                 s(:dasgn_curr, id)
               end
             else
               raise "wtf? unknown type: #{self.env[id]}"
             end
           end

  self.env[id] = (self.env.dynamic? ? :dvar : :lvar) unless self.env[id]

  result << value if value

  return result
end

#block_append(head, tail, strip_tail_block = false) ⇒ Object



135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/ruby_parser_extras.rb', line 135

def block_append(head, tail, strip_tail_block=false)
  return head unless tail
  return tail unless head

  case head[0]
  when :lit, :str then
    return tail
  end

  head = remove_begin(head)
  head = s(:block, head) unless head[0] == :block

  if strip_tail_block and Sexp === tail and tail[0] == :block then
    head.push(*tail.values)
  else
    head << tail
  end
end

#cond(node) ⇒ Object



154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
# File 'lib/ruby_parser_extras.rb', line 154

def cond node
  return nil if node.nil?
  node = value_expr node

  case node.first
  when :dregex then
    return s(:match2, node, s(:gvar, "$_".to_sym))
  when :regex then
    return s(:match, node)
  when :lit then
    if Regexp === node.last then
      return s(:match, node)
    else
      return node
    end
  when :and then
    return s(:and, cond(node[1]), cond(node[2]))
  when :or then
    return s(:or,  cond(node[1]), cond(node[2]))
  when :dot2 then
    label = "flip#{node.hash}"
    env[label] = self.env.dynamic? ? :dvar : :lvar
    return s(:flip2, node[1], node[2])
  when :dot3 then
    label = "flip#{node.hash}"
    env[label] = self.env.dynamic? ? :dvar : :lvar
    return s(:flip3, node[1], node[2])
  else
    return node
  end
end

#do_parseObject

for pure ruby systems only



189
190
191
# File 'lib/ruby_parser_extras.rb', line 189

def do_parse
  _racc_do_parse_rb(_racc_setup, false)
end

#get_match_node(lhs, rhs) ⇒ Object



193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
# File 'lib/ruby_parser_extras.rb', line 193

def get_match_node lhs, rhs
  if lhs then
    case lhs[0]
    when :dregx, :dregx_once then
      return s(:match2, lhs, rhs)
    when :lit then
      return s(:match2, lhs, rhs) if Regexp === lhs.last
    end
  end

  if rhs then
    case rhs[0]
    when :dregx, :dregx_once then
      return s(:match3, rhs, lhs)
    when :lit then
      return s(:match3, rhs, lhs) if Regexp === rhs.last
    end
  end

  return s(:call, lhs, :"=~", s(:array, rhs))
end

#gettable(id) ⇒ Object



215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
# File 'lib/ruby_parser_extras.rb', line 215

def gettable(id)
  id = id.to_sym if Sexp === id # HACK
  id = id.to_sym if String === id # HACK

  return s(:self)                  if id == :self
  return s(:nil)                   if id == :nil
  return s(:true)                  if id == :true
  return s(:false)                 if id == :false
  return s(:str, self.file)        if id == :"__FILE__"
  return s(:lit, lexer.src.current_line) if id == :"__LINE__"

  result = case id.to_s
           when /^@@/ then
             s(:cvar, id)
           when /^@/ then
             s(:ivar, id)
           when /^\$/ then
             s(:gvar, id)
           when /^[A-Z]/ then
             s(:const, id)
           else
             type = env[id]
             if type then
               s(type, id)
             elsif env.dynamic? and :dvar == env[id] then
               s(:dvar, id)
             else
               s(:vcall, id)
             end
           end

  return result if result

  raise "identifier #{id.inspect} is not valid"
end

#list_append(list, item) ⇒ Object

TODO: nuke me sigh



260
261
262
263
# File 'lib/ruby_parser_extras.rb', line 260

def list_append list, item # TODO: nuke me *sigh*
  return s(:array, item) unless list
  list << item
end

#literal_concat(head, tail) ⇒ Object



265
266
267
268
269
270
271
272
273
274
275
276
277
278
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
# File 'lib/ruby_parser_extras.rb', line 265

def literal_concat head, tail
  return tail unless head
  return head unless tail

  htype, ttype = head[0], tail[0]

  head = s(:dstr, '', head) if htype == :evstr

  case ttype
  when :str then
    if htype == :str
      head[-1] << tail[-1]
    elsif htype == :dstr and head.size == 2 then
      head[-1] << tail[-1]
    else
      head << tail
    end
  when :dstr then
    if htype == :str then
      tail[1] = head[-1] + tail[1]
      head = tail
    else
      tail[0] = :array
      tail[1] = s(:str, tail[1])
      tail.delete_at 1 if tail[1] == s(:str, '')

      head.push(*tail[1..-1])
    end
  when :evstr then
    head[0] = :dstr if htype == :str
    if head.size == 2 and tail[1][0] == :str then
      head[-1] << tail[1][-1]
      head[0] = :str if head.size == 2 # HACK ?
    else
      head.push(tail)
    end
  end

  return head
end

#logop(type, left, right) ⇒ Object

TODO: rename logical_op



306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
# File 'lib/ruby_parser_extras.rb', line 306

def logop(type, left, right) # TODO: rename logical_op
  left = value_expr left

  if left and left[0] == type and not left.paren then
    node, second = left, nil

    while (second = node[2]) && second[0] == type and not second.paren do
      node = second
    end

    node[2] = s(type, second, right)

    return left
  end

  return s(type, left, right)
end

#new_call(recv, meth, args = nil) ⇒ Object

REFACTOR - merge with fcall



324
325
326
327
328
329
330
331
332
333
334
335
336
# File 'lib/ruby_parser_extras.rb', line 324

def new_call recv, meth, args = nil # REFACTOR - merge with fcall
  if args && args[0] == :block_pass then
    new_args = args.array(true) || args.argscat(true) || args.splat(true)
    call = s(:call, recv, meth)
    call << new_args if new_args
    args << call

    return args
  end
  result = s(:call, recv, meth)
  result << args if args
  result
end

#new_fcall(meth, args) ⇒ Object



338
339
340
341
342
343
344
345
346
347
348
349
350
# File 'lib/ruby_parser_extras.rb', line 338

def new_fcall meth, args
  if args and args[0] == :block_pass then
    new_args = args.array(true) || args.argscat(true) || args.splat(true)
    call = s(:fcall, meth)
    call << new_args if new_args
    args << call
    return args
  end

  r = s(:fcall, meth)
  r << args if args and args != s(:array)
  r
end

#new_super(args) ⇒ Object



352
353
354
355
356
357
358
359
360
361
# File 'lib/ruby_parser_extras.rb', line 352

def new_super args
  if args && args.node_type == :block_pass then
    t, body, bp = args
    result = s(t, bp, s(:super, body))
  else
    result = s(:super)
    result << args if args and args != s(:array)
  end
  result
end

#new_yield(node) ⇒ Object



363
364
365
366
367
368
369
370
371
372
# File 'lib/ruby_parser_extras.rb', line 363

def new_yield(node)
  if node then
    raise SyntaxError, "Block argument should not be given." if
      node.node_type == :block_pass

    node = node.last if node.node_type == :array and node.size == 2
  end

  return s(:yield, node)
end

#next_tokenObject



374
375
376
377
378
379
380
# File 'lib/ruby_parser_extras.rb', line 374

def next_token
  if self.lexer.advance then
    [self.lexer.token, self.lexer.yacc_value]
  else
    return [false, '$end']
  end
end

#node_assign(lhs, rhs) ⇒ Object



382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
# File 'lib/ruby_parser_extras.rb', line 382

def node_assign(lhs, rhs)
  return nil unless lhs

  rhs = value_expr rhs

  case lhs[0]
  when :gasgn, :iasgn, :lasgn, :dasgn, :dasgn_curr,
    :masgn, :cdecl, :cvdecl, :cvasgn then
    lhs << rhs
  when :attrasgn, :call then
    args = lhs.array(true) || lhs.argscat(true) || lhs.splat(true) # FIX: fragile
    lhs << arg_add(args, rhs)
  end

  lhs
end

#parse(str, file = "(string)") ⇒ Object



399
400
401
402
403
404
405
406
407
408
# File 'lib/ruby_parser_extras.rb', line 399

def parse(str, file = "(string)")
  raise "bad val: #{str.inspect}" unless String === str

  self.file = file
  self.lexer.src = str

  @yydebug = ENV.has_key? 'DEBUG'

  do_parse
end

#remove_begin(node) ⇒ Object



410
411
412
413
# File 'lib/ruby_parser_extras.rb', line 410

def remove_begin node
  node = node[-1] if node and node[0] == :begin and node.size == 2
  node
end

#ret_args(node) ⇒ Object



415
416
417
418
419
420
421
422
423
424
425
426
427
# File 'lib/ruby_parser_extras.rb', line 415

def ret_args node
  if node then
    raise SyntaxError, "block argument should not be given" if
      node[0] == :block_pass

    node = node.last if node[0] == :array && node.size == 2
    # HACK matz wraps ONE of the FOUR splats in a newline to
    # distinguish. I use paren for now. ugh
    node = s(:svalue, node) if node[0] == :splat and not node.paren
  end

  node
end

#value_expr(node) ⇒ Object

HACK



429
430
431
432
433
# File 'lib/ruby_parser_extras.rb', line 429

def value_expr node # HACK
  node = remove_begin node
  node[2] = value_expr(node[2]) if node and node[0] == :if
  node
end

#void_stmts(node) ⇒ Object



435
436
437
438
439
440
441
# File 'lib/ruby_parser_extras.rb', line 435

def void_stmts node
  return nil unless node
  return node unless node[0] == :block

  node[1..-2] = node[1..-2].map { |n| remove_begin(n) }
  node
end

#warning(s) ⇒ Object



443
444
445
# File 'lib/ruby_parser_extras.rb', line 443

def warning s
  # do nothing for now
end