lib/code/object/boolean.rb in code-ruby-0.5.6 vs lib/code/object/boolean.rb in code-ruby-0.6.0
- old
+ new
@@ -1,27 +1,65 @@
+# frozen_string_literal: true
+
class Code
class Object
class Boolean < ::Code::Object
attr_reader :raw
def initialize(raw)
@raw = raw
end
- def truthy?
- raw
+ 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
- ::Code::Object::Boolean.new(!raw)
+ Boolean.new(!raw)
end
def to_s
raw.to_s
end
- def inspect
- to_s
+ def truthy?
+ raw
end
end
end
end