Class: RedParse::BracketsGetNode

Inherits:
ValueNode show all
Defined in:
lib/redparse/node.rb,
lib/redparse/ReduceWithsFor_RedParse_1_9.rb,
lib/redparse/ReduceWithsFor_RedParse_1_8.rb

Constant Summary

Constants included from FlattenedIvars

FlattenedIvars::EXCLUDED_IVARS

Instance Attribute Summary collapse

Attributes inherited from Node

#endline, #errors, #offset, #parent, #startline

Attributes included from Stackable::Meta

#boolean_identity_params, #identity_params

Instance Method Summary collapse

Methods inherited from ValueNode

#reducer_method

Methods inherited from Node

#+, #+@, #==, [], #[]=, #add_parent_links!, #args_rip, #begin_parsetree, #classic_inspect, create, #data, #deep_copy, #delete_extraneous_ivars!, #delete_linenums!, #depthwalk, #depthwalk_nodes, #error?, #evalable_inspect, #fixup_multiple_assignments!, #fixup_rescue_assignments!, #force_stmt_list_rip, #initialize_ivars, inline_symbols, #inspect, #lhs_unparse, #linerange, #lvars_defined_in, #merge_replacement_session, namelist, #negate, #original_brackets_assign, param_names, #parsetrees, #pretty_print, #prohibit_fixup, #replace_ivars_and_self, #replace_value, #rescue_parsetree, #rfind, #rfind_all, #rgrep, #rip_and_rescues, #rip_explode!, #short_inspect, #stmts_rip, #to_parsetree, #to_parsetree_and_warnings, #to_ruby, #to_s, #unary, #walk, #xform_tree!

Methods included from Stackable::Meta

#build_exemplars, #enumerate_exemplars, #identity_param

Methods included from FlattenedIvars

#flattened_ivars, #flattened_ivars_equal?

Methods included from Stackable

#identity_name

Constructor Details

#initialize(receiver, lbrack, params, rbrack) ⇒ BracketsGetNode

Returns a new instance of BracketsGetNode.



5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
# File 'lib/redparse/node.rb', line 5280

def initialize(receiver,lbrack,params,rbrack)
  case params
  when CommaOpNode
    h,arrowrange=params.extract_unbraced_hash
    params=Array.new params
    params[arrowrange]=[h] if arrowrange          
  when ArrowOpNode 
    h=HashLiteralNode.new(nil,params,nil)
    h.startline=params.startline
    h.endline=params.endline
    params=[h]
  when nil
    params=nil
  else 
    params=[params]
  end
  params.extend ListInNode if params
  @offset=receiver.offset
  super(receiver,params)
end

Instance Attribute Details

#lvalueObject



5344
5345
5346
5347
# File 'lib/redparse/node.rb', line 5344

def lvalue
  return @lvalue if defined? @lvalue
  @lvalue=true
end

Instance Method Details

#imageObject



5303
# File 'lib/redparse/node.rb', line 5303

def image; "(#{receiver.image}.[])" end

#lvalue_parsetree(o) ⇒ Object



5337
5338
5339
5340
5341
5342
# File 'lib/redparse/node.rb', line 5337

def lvalue_parsetree(o)
  result=parsetree_no_fcall o
  result[0]=:attrasgn
  result[2]=:[]=
  result
end

#nameObject



5301
# File 'lib/redparse/node.rb', line 5301

def name; "[]" end

#parsetree(o) ⇒ Object



5313
5314
5315
5316
5317
5318
# File 'lib/redparse/node.rb', line 5313

def parsetree(o)
  result=parsetree_no_fcall o
  o[:quirks] and VarLikeNode===receiver and receiver.name=='self' and
    result[0..2]=[:fcall,:[]] 
  return result
end

#parsetree_no_fcall(o) ⇒ Object



5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
# File 'lib/redparse/node.rb', line 5320

def parsetree_no_fcall o
  params=params()
  output,star=param_list_parse(params,o)
#        receiver=receiver.parsetree(o)
  result=[:call, receiver.rescue_parsetree(o), :[], output]
  if params
    if star and params.size==1
      output.concat star
    else
      output.unshift :array 
      result[-1]=[:argscat, output, star.last] if star
    end
  else
    result.pop
  end
  return result
end

#reducer_identObject



17470
17471
17472
# File 'lib/redparse/ReduceWithsFor_RedParse_1_9.rb', line 17470

def reducer_ident
  :BracketsGetNode
end

#unparse(o = default_unparse_options) ⇒ Object



5305
5306
5307
5308
5309
5310
5311
# File 'lib/redparse/node.rb', line 5305

def unparse o=default_unparse_options
  [ receiver.unparse(o).sub(/ \z/,''),
    '[',
    params&&params.map{|param| param.unparse o}.join(','),
    ']'
  ].join
end