Sha256: b603e63db64e7c02a5ef1734e151d98578efa82d8d2e280dd6add5465facea95

Contents?: true

Size: 747 Bytes

Versions: 6

Compression:

Stored size: 747 Bytes

Contents

require_relative '../function'

module Dentaku
  module AST
    class If < Function
      attr_reader :predicate, :left, :right

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

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

      def node_type
        :condition
      end

      def type
        left.type
      end

      def dependencies(context = {})
        # TODO : short-circuit?
        (predicate.dependencies(context) + left.dependencies(context) + right.dependencies(context)).uniq
      end
    end
  end
end

Dentaku::AST::Function.register_class(:if, Dentaku::AST::If)

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
dentaku-3.3.2 lib/dentaku/ast/functions/if.rb
dentaku-3.3.1 lib/dentaku/ast/functions/if.rb
dentaku-3.3.0 lib/dentaku/ast/functions/if.rb
dentaku-3.2.1 lib/dentaku/ast/functions/if.rb
dentaku-3.2.0 lib/dentaku/ast/functions/if.rb
dentaku-3.1.0 lib/dentaku/ast/functions/if.rb