Sha256: 72408115903d153a5ffc76876aaa9dda986d0cb117a4e66885049dbcb72f1411

Contents?: true

Size: 1.71 KB

Versions: 8

Compression:

Stored size: 1.71 KB

Contents

if defined? RubyVM
  verbose = $VERBOSE
  begin
    $VERBOSE = nil
    module PowerAssert
      # set redefined flag
      basic_classes = [
        Fixnum, Float, String, Array, Hash, Bignum, Symbol, Time, Regexp
      ]

      basic_operators = [
        :+, :-, :*, :/, :%, :==, :===, :<, :<=, :<<, :[], :[]=,
        :length, :size, :empty?, :succ, :>, :>=, :!, :!=, :=~, :freeze
      ]

      class Bug11182
        def fixed?
          true
        end
      end
      private_constant :Bug11182

      refine Bug11182 do
        def fixed?
        end
      end

      class Bug11182Sub < Bug11182
        alias _fixed? fixed?
        protected :_fixed?
      end
      private_constant :Bug11182Sub

      if (Bug11182.new.fixed? rescue false)
        basic_classes.each do |klass|
          basic_operators.each do |bop|
            refine(klass) do
              define_method(bop) {}
            end
          end
        end
      else
        # workaround for https://bugs.ruby-lang.org/issues/11182
        basic_classes.each do |klass|
          basic_operators.each do |bop|
            if klass.public_method_defined?(bop)
              klass.ancestors.find {|i| i.instance_methods(false).index(bop) }.module_eval do
                public bop
              end
            end
          end
        end

        refine Symbol do
          def ==
          end
        end
      end

      # bypass check_cfunc
      refine BasicObject do
        def !
        end

        def ==
        end
      end

      refine Module do
        def ==
        end
      end
    end
  ensure
    $VERBOSE = verbose
  end

  # disable optimization
  RubyVM::InstructionSequence.compile_option = {
    specialized_instruction: false
  }
end

Version data entries

8 entries across 8 versions & 5 rubygems

Version Path
tdiary-5.0.2 vendor/bundle/gems/power_assert-0.3.0/lib/power_assert/enable_tracepoint_events.rb
power_assert-0.3.1 lib/power_assert/enable_tracepoint_events.rb
tdiary-5.0.1 vendor/bundle/gems/power_assert-0.3.0/lib/power_assert/enable_tracepoint_events.rb
windows-pr-1.2.5 vendor/bundle/ruby/2.2.0/gems/win32-api-1.6.0-universal-mingw32/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/lib/power_assert/enable_tracepoint_events.rb
win32-api-1.6.0-universal-mingw32 vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/lib/power_assert/enable_tracepoint_events.rb
ish_lib_manager-0.0.1 test/dummy/vendor/bundle/ruby/2.3.0/gems/power_assert-0.3.0/lib/power_assert/enable_tracepoint_events.rb
power_assert-0.3.0 lib/power_assert/enable_tracepoint_events.rb
power_assert-0.2.7 lib/power_assert/enable_tracepoint_events.rb