Sha256: 7c145c720527f324ccb704c59a323087974fefcc4cd48c76e40261974b4a8ea0

Contents?: true

Size: 915 Bytes

Versions: 6

Compression:

Stored size: 915 Bytes

Contents

module Dentaku
  module AST
    class Negation < Arithmetic
      attr_reader :node

      def initialize(node)
        @node = node

        unless valid_node?(node)
          raise NodeError.new(:numeric, node.type, :node),
                "#{self.class} requires numeric operands"
        end
      end

      def operator
        :*
      end

      def value(context = {})
        cast(@node.value(context)) * -1
      end

      def type
        :numeric
      end

      def self.arity
        1
      end

      def self.right_associative?
        true
      end

      def self.precedence
        40
      end

      def dependencies(context = {})
        @node.dependencies(context)
      end

      def accept(visitor)
        visitor.visit_negation(self)
      end

      private

      def valid_node?(node)
        node && (node.dependencies.any? || node.type == :numeric)
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
dentaku-3.5.4 lib/dentaku/ast/negation.rb
dentaku-3.5.3 lib/dentaku/ast/negation.rb
dentaku-3.5.2 lib/dentaku/ast/negation.rb
dentaku_zevo-3.5.2 lib/dentaku/ast/negation.rb
dentaku-3.5.1 lib/dentaku/ast/negation.rb
dentaku-3.5.0 lib/dentaku/ast/negation.rb