Class: EleetScript::IfNode

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

#eval(context) ⇒ Object



365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
# File 'lib/lang/interpreter.rb', line 365

def eval(context)
  cond = condition.eval(context)
  cond = (cond.class? ? cond : cond.ruby_value)
  if cond
    ret = body.eval(context)
    if body.returnable? && body.returned?
      body.reset_returned
      returned
    elsif body.nextable? && body.nexted?
      body.reset_nexted
      nexted
      return context.es_nil
    end
    ret
  else
    unless else_node.nil?
      ret = else_node.eval(context)
      if else_node.returned?
        else_node.reset_returned
        returned
      elsif else_node.nexted?
        else_node.reset_nexted
        nexted
        return context.es_nil
      end
      ret
    end
  end
end