Class: Dentaku::AST::If

Inherits:
Function show all
Defined in:
lib/dentaku/ast/functions/if.rb

Constant Summary

Constants inherited from Function

Function::DIG

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Function

#deferred_args, get, numeric, register, register_class, registry

Methods inherited from Node

arity, peek, precedence

Constructor Details

#initialize(predicate, left, right) ⇒ If

Returns a new instance of If.



16
17
18
19
20
# File 'lib/dentaku/ast/functions/if.rb', line 16

def initialize(predicate, left, right)
  @predicate = predicate
  @left      = left
  @right     = right
end

Instance Attribute Details

#leftObject (readonly)

Returns the value of attribute left.



6
7
8
# File 'lib/dentaku/ast/functions/if.rb', line 6

def left
  @left
end

#predicateObject (readonly)

Returns the value of attribute predicate.



6
7
8
# File 'lib/dentaku/ast/functions/if.rb', line 6

def predicate
  @predicate
end

#rightObject (readonly)

Returns the value of attribute right.



6
7
8
# File 'lib/dentaku/ast/functions/if.rb', line 6

def right
  @right
end

Class Method Details

.max_param_countObject



12
13
14
# File 'lib/dentaku/ast/functions/if.rb', line 12

def self.max_param_count
  3
end

.min_param_countObject



8
9
10
# File 'lib/dentaku/ast/functions/if.rb', line 8

def self.min_param_count
  3
end

Instance Method Details

#dependencies(context = {}) ⇒ Object



34
35
36
37
38
39
40
41
42
# File 'lib/dentaku/ast/functions/if.rb', line 34

def dependencies(context = {})
  deps = predicate.dependencies(context)

  if deps.empty?
    predicate.value(context) ? left.dependencies(context) : right.dependencies(context)
  else
    (deps + left.dependencies(context) + right.dependencies(context)).uniq
  end
end

#node_typeObject



26
27
28
# File 'lib/dentaku/ast/functions/if.rb', line 26

def node_type
  :condition
end

#typeObject



30
31
32
# File 'lib/dentaku/ast/functions/if.rb', line 30

def type
  left.type
end

#value(context = {}) ⇒ Object



22
23
24
# File 'lib/dentaku/ast/functions/if.rb', line 22

def value(context = {})
  predicate.value(context) ? left.value(context) : right.value(context)
end