Class: EleetScript::Nodes

Inherits:
Object
  • Object
show all
Includes:
Nextable, Returnable
Defined in:
lib/lang/nodes.rb,
lib/lang/interpreter.rb

Instance Method Summary collapse

Methods included from Nextable

#nexted, #nexted?, #reset_nexted

Methods included from Returnable

#reset_returned, #returned, #returned?

Instance Method Details

#<<(node) ⇒ Object



27
28
29
30
# File 'lib/lang/nodes.rb', line 27

def <<(node)
  nodes << node
  self
end

#eval(context) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/lang/interpreter.rb', line 97

def eval(context)
  return_value = nil
  nodes.each do |node|
    if node.kind_of?(ReturnNode)
      returned
      break return_value = node.eval(context)
    elsif node.kind_of?(NextNode)
      nexted
      break
    else
      return_value = node.eval(context)
    end
    if node.returnable? && node.returned?
      returned
      node.reset_returned
      break
    elsif node.nextable? && node.nexted?
      node.reset_nexted
      nexted
      break
    end
  end
  return_value || context.es_nil
end

#to_s(level = 0) ⇒ Object



32
33
34
35
36
37
38
# File 'lib/lang/nodes.rb', line 32

def to_s(level = 0)
  str = "#{spaces(level)}<EleetScript::Nodes\n"
  nodes.each do |node|
    str += node.to_s(level + 1)
  end
  str + "#{spaces(level)}>\n"
end