Class: Yadriggy::Call

Inherits:
ASTnode show all
Includes:
AstHelper
Defined in:
lib/yadriggy/ast.rb,
lib/yadriggy/ast_value.rb

Overview

Method call following parentheses.

See Also:

Direct Known Subclasses

Command

Instance Attribute Summary collapse

Attributes inherited from ASTnode

#parent, #usertype

Class Method Summary collapse

Instance Method Summary collapse

Methods included from AstHelper

#has_tag?, #to_node, #to_nodes

Methods inherited from ASTnode

#add_child, #add_children, #const_value, #const_value_in_class, #get_context_class, #get_receiver_object, #is_proc?, #pretty_print, #root, #source_location, #source_location_string

Constructor Details

#initialize(sexp) ⇒ Call



859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
# File 'lib/yadriggy/ast.rb', line 859

def initialize(sexp)
  @args = []
  @block_arg = nil
  @block = nil

  case sexp[0]
  when :call, :field
    initialize_call(sexp)
  when :method_add_block
    marg = sexp[1]
    if marg[0] == :method_add_arg
      initialize_method_arg(marg[1], marg[2])
    elsif marg[0] == :command
      initialize_call([:call, nil, nil, marg[1]])
      initialize_args(marg[2]) if marg.length > 2
    elsif marg[0] == :command_call
      initialize_call([:call, marg[1], marg[2], marg[3]])
      initialize_args(marg[4]) if marg.length > 4
    else
      initialize_method_arg(marg, [])
    end
    @block = to_node(sexp[2])
    add_child(@block)
  else
    initialize_method_arg(sexp[1], sexp[2])
  end
end

Instance Attribute Details

#argsArray<ASTnode> (readonly)



809
810
811
# File 'lib/yadriggy/ast.rb', line 809

def args
  @args
end

#blockASTnode|nil (readonly)



815
816
817
# File 'lib/yadriggy/ast.rb', line 815

def block
  @block
end

#block_argASTnode|nil (readonly)



812
813
814
# File 'lib/yadriggy/ast.rb', line 812

def block_arg
  @block_arg
end

#nameIdentifier (readonly)



806
807
808
# File 'lib/yadriggy/ast.rb', line 806

def name
  @name
end

#opSymbol (readonly)

Returns either :".", :"::", or nil.



803
804
805
# File 'lib/yadriggy/ast.rb', line 803

def op
  @op
end

#receiverASTnode|nil (readonly)



797
798
799
# File 'lib/yadriggy/ast.rb', line 797

def receiver
  @receiver
end

Class Method Details

.make(receiver: nil, op: nil, name:, args: [], block_arg: nil, block: nil, parent:, link_from_children: false) ⇒ Call

Makes an instance of Yadriggy::Call with the given values for its instance variables.



829
830
831
832
833
834
835
# File 'lib/yadriggy/ast.rb', line 829

def self.make(receiver: nil, op: nil, name:, args: [],
              block_arg: nil, block: nil,
              parent:, link_from_children: false)
  obj = self.allocate
  obj.initialize2(receiver, op, name, args, block_arg, block,
                  parent, link_from_children)
end

.tagsObject



857
# File 'lib/yadriggy/ast.rb', line 857

def self.tags() [:method_add_arg, :call, :method_add_block, :field] end

Instance Method Details

#accept(evaluator) ⇒ void

This method returns an undefined value.

A method for Visitor pattern.



890
891
892
# File 'lib/yadriggy/ast.rb', line 890

def accept(evaluator)
  evaluator.call(self)
end

#valueObject

Gets the invoked method or Undef.



397
398
399
400
401
402
403
# File 'lib/yadriggy/ast_value.rb', line 397

def value()
  if @receiver.nil?
    lookup_method(get_receiver_object)
  else
    lookup_method(@receiver.value)
  end
end

#value_in_class(klass) ⇒ Object



405
406
407
408
409
410
411
# File 'lib/yadriggy/ast_value.rb', line 405

def value_in_class(klass)
  if @receiver.nil?
    lookup_method(get_receiver_object)
  else
    lookup_method(@receiver.value_in_class(klass))
  end
end