Sha256: 1898e29505bc9afb5399ff4167680dff01788c1adf170df3faefe1f1870ac2bb

Contents?: true

Size: 1.16 KB

Versions: 24

Compression:

Stored size: 1.16 KB

Contents

# frozen_string_literal: true

class Code
  class Object
    class Boolean < ::Code::Object
      attr_reader :raw

      def initialize(raw)
        @raw = raw
      end

      def self.name
        "Boolean"
      end

      def call(**args)
        operator = args.fetch(:operator, nil)
        arguments = args.fetch(:arguments, [])
        value = arguments.first&.value

        case operator.to_s
        when "&", "bitwise_and"
          sig(args) { Boolean }
          code_bitwise_and(value)
        when "^", "bitwise_xor"
          sig(args) { Boolean }
          code_bitwise_xor(value)
        when "|", "bitwise_or"
          sig(args) { Boolean }
          code_bitwise_or(value)
        else
          super
        end
      end

      def code_bitwise_and(value)
        Boolean.new(raw & value.raw)
      end

      def code_bitwise_or(value)
        Boolean.new(raw | value.raw)
      end

      def code_bitwise_xor(value)
        Boolean.new(raw ^ value.raw)
      end

      def inspect
        to_s
      end

      def succ
        Boolean.new(!raw)
      end

      def to_s
        raw.to_s
      end

      def truthy?
        raw
      end
    end
  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
code-ruby-0.9.0 lib/code/object/boolean.rb
code-ruby-0.8.5 lib/code/object/boolean.rb
code-ruby-0.8.4 lib/code/object/boolean.rb
code-ruby-0.8.3 lib/code/object/boolean.rb
code-ruby-0.8.2 lib/code/object/boolean.rb
code-ruby-0.8.1 lib/code/object/boolean.rb
code-ruby-0.8.0 lib/code/object/boolean.rb
code-ruby-0.7.8 lib/code/object/boolean.rb
code-ruby-0.7.7 lib/code/object/boolean.rb
code-ruby-0.7.6 lib/code/object/boolean.rb
code-ruby-0.7.5 lib/code/object/boolean.rb
code-ruby-0.7.4 lib/code/object/boolean.rb
code-ruby-0.7.3 lib/code/object/boolean.rb
code-ruby-0.7.2 lib/code/object/boolean.rb
code-ruby-0.7.1 lib/code/object/boolean.rb
code-ruby-0.7.0 lib/code/object/boolean.rb
code-ruby-0.6.7 lib/code/object/boolean.rb
code-ruby-0.6.6 lib/code/object/boolean.rb
code-ruby-0.6.5 lib/code/object/boolean.rb
code-ruby-0.6.4 lib/code/object/boolean.rb