Class: Nydp::Cond

Inherits:
Object
  • Object
show all
Extended by:
Helper
Includes:
Helper
Defined in:
lib/nydp/cond.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Helper

cons, list, literal?, pair?, sym, sym?

Constructor Details

#initialize(cond, when_true, when_false) ⇒ Cond

Returns a new instance of Cond.



29
30
31
# File 'lib/nydp/cond.rb', line 29

def initialize cond, when_true, when_false
  @condition, @conditional = cond, cons(ExecuteConditionalInstruction.new(when_true, when_false))
end

Instance Attribute Details

#conditionObject (readonly)

Returns the value of attribute condition.



27
28
29
# File 'lib/nydp/cond.rb', line 27

def condition
  @condition
end

#conditionalObject (readonly)

Returns the value of attribute conditional.



27
28
29
# File 'lib/nydp/cond.rb', line 27

def conditional
  @conditional
end

Class Method Details

.build(expressions, bindings) ⇒ Object



45
46
47
48
49
50
51
52
53
54
# File 'lib/nydp/cond.rb', line 45

def self.build expressions, bindings
  if expressions.is_a? Nydp::Pair
    cond       = cons Compiler.compile expressions.car, bindings
    when_true  = cons Compiler.compile expressions.cdr.car, bindings
    when_false = cons Compiler.compile expressions.cdr.cdr.car, bindings
    new(cond, when_true, when_false)
  else
    raise "can't compile Cond: #{expr.inspect}"
  end
end

Instance Method Details

#execute(vm) ⇒ Object



33
34
35
36
# File 'lib/nydp/cond.rb', line 33

def execute vm
  vm.push_instructions conditional, vm.peek_context
  vm.push_instructions condition,   vm.peek_context
end

#inspectObject



38
39
40
# File 'lib/nydp/cond.rb', line 38

def inspect
  "cond:#{condition.inspect}:#{conditional.inspect}"
end

#to_sObject



41
42
43
# File 'lib/nydp/cond.rb', line 41

def to_s
  "(cond #{condition.car.to_s} #{conditional.to_s})"
end