Class: Code::Node::Name

Inherits:
Code::Node show all
Defined in:
lib/code/node/name.rb

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Name

Returns a new instance of Name.



4
5
6
# File 'lib/code/node/name.rb', line 4

def initialize(name)
  @name = name
end

Instance Method Details

#evaluate(**args) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/code/node/name.rb', line 8

def evaluate(**args)
  context = args.fetch(:context)
  arguments = args.fetch(:arguments, [])
  object = args.fetch(:object, nil)
  io = args.fetch(:io)

  if object
    object.call(
      context: context,
      operator: name,
      arguments: arguments,
      io: io,
    )
  elsif context.key?(name)
    object = context[name]

    if object.is_a?(::Code::Object::Function)
      object.call(
        context: context,
        operator: nil,
        arguments: arguments,
        io: io,
      )
    else
      object
    end
  elsif name == "puts"
    arguments.each { |argument| io.puts argument.value }

    ::Code::Object::Nothing.new
  else
    raise ::Code::Error::Undefined.new("#{name} undefined")
  end
end