Class: Yadriggy::Call
- Includes:
- AstHelper
- Defined in:
- lib/yadriggy/ast.rb,
lib/yadriggy/ast_value.rb
Overview
Method call following parentheses.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#args ⇒ Array<ASTnode>
readonly
The method-call arguments.
-
#block ⇒ ASTnode|nil
readonly
The block passed to the method.
-
#block_arg ⇒ ASTnode|nil
readonly
The argument preceded by an ampersand.
-
#name ⇒ Identifier
readonly
The method name.
-
#op ⇒ Symbol
readonly
Returns either
:".",:"::", ornil. -
#receiver ⇒ ASTnode|nil
readonly
The callee object.
Attributes inherited from ASTnode
Class Method Summary collapse
-
.make(receiver: nil, op: nil, name:, args: [], block_arg: nil, block: nil, parent:, link_from_children: false) ⇒ Call
Makes an instance of Call with the given values for its instance variables.
- .tags ⇒ Object
Instance Method Summary collapse
-
#accept(evaluator) ⇒ void
A method for Visitor pattern.
-
#initialize(sexp) ⇒ Call
constructor
A new instance of Call.
-
#value ⇒ Object
Gets the invoked method or Undef.
- #value_in_class(klass) ⇒ Object
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
#args ⇒ Array<ASTnode> (readonly)
809 810 811 |
# File 'lib/yadriggy/ast.rb', line 809 def args @args end |
#block ⇒ ASTnode|nil (readonly)
815 816 817 |
# File 'lib/yadriggy/ast.rb', line 815 def block @block end |
#block_arg ⇒ ASTnode|nil (readonly)
812 813 814 |
# File 'lib/yadriggy/ast.rb', line 812 def block_arg @block_arg end |
#name ⇒ Identifier (readonly)
806 807 808 |
# File 'lib/yadriggy/ast.rb', line 806 def name @name end |
#op ⇒ Symbol (readonly)
Returns either :".", :"::", or nil.
803 804 805 |
# File 'lib/yadriggy/ast.rb', line 803 def op @op end |
#receiver ⇒ ASTnode|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 |
.tags ⇒ Object
857 |
# File 'lib/yadriggy/ast.rb', line 857 def self.() [: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 |
#value ⇒ Object
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 |