diff options
author | Alan Wu <[email protected]> | 2024-07-23 18:14:45 -0400 |
---|---|---|
committer | Benoit Daloze <[email protected]> | 2024-07-24 18:20:30 +0200 |
commit | 12e6cf77efae6804063dbebe84e4080ca78958e7 (patch) | |
tree | 010d5b0b824fb53722df576de43de8bd80d032cd /spec/mspec/lib | |
parent | 1a18b03ee7b14771eae9eafa3c85a6bf5ccd9502 (diff) |
Add "c_long_size" guard, supplanting "wordsize" and stop using Integer#size
What a "word" is when talking about sizes is confusing because it's a
highly overloaded term. Intel, Microsoft, and GDB are just a few vendors
that have their own definition of what a "word" is. Specs that used the
"wordsize" guard actually were mostly testing for the size of the C
`long` fundamental type, so rename the guard for clarity.
Also, get the size of `long` directly from RbConfig instead of guessing
using Integer#size. Integer#size is not guaranteed to have anything to
do with the `long` type.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/11130
Diffstat (limited to 'spec/mspec/lib')
-rw-r--r-- | spec/mspec/lib/mspec/guards/platform.rb | 18 | ||||
-rw-r--r-- | spec/mspec/lib/mspec/helpers/numeric.rb | 4 |
2 files changed, 13 insertions, 9 deletions
diff --git a/spec/mspec/lib/mspec/guards/platform.rb b/spec/mspec/lib/mspec/guards/platform.rb index e87b08a4c1..03c0fca8f5 100644 --- a/spec/mspec/lib/mspec/guards/platform.rb +++ b/spec/mspec/lib/mspec/guards/platform.rb @@ -53,23 +53,27 @@ class PlatformGuard < SpecGuard end end - WORD_SIZE = 1.size * 8 - POINTER_SIZE = begin require 'rbconfig/sizeof' RbConfig::SIZEOF["void*"] * 8 rescue LoadError - WORD_SIZE + [0].pack('j').size end - def self.wordsize?(size) - size == WORD_SIZE + C_LONG_SIZE = if defined?(RbConfig::SIZEOF[]) + RbConfig::SIZEOF["long"] * 8 + else + [0].pack('l!').size end def self.pointer_size?(size) size == POINTER_SIZE end + def self.c_long_size?(size) + size == C_LONG_SIZE + end + def initialize(*args) if args.last.is_a?(Hash) @options, @platforms = args.last, args[0..-2] @@ -85,10 +89,10 @@ class PlatformGuard < SpecGuard case key when :os match &&= PlatformGuard.os?(*value) - when :wordsize - match &&= PlatformGuard.wordsize? value when :pointer_size match &&= PlatformGuard.pointer_size? value + when :c_long_size + match &&= PlatformGuard::c_long_size? value end end match diff --git a/spec/mspec/lib/mspec/helpers/numeric.rb b/spec/mspec/lib/mspec/helpers/numeric.rb index c1ed81a233..46d3d7b182 100644 --- a/spec/mspec/lib/mspec/helpers/numeric.rb +++ b/spec/mspec/lib/mspec/helpers/numeric.rb @@ -28,7 +28,7 @@ end # specs based on the relationship between values rather than specific # values. if PlatformGuard.standard? or PlatformGuard.implementation? :topaz - if PlatformGuard.wordsize? 32 + if PlatformGuard.c_long_size? 32 def fixnum_max (2**30) - 1 end @@ -36,7 +36,7 @@ if PlatformGuard.standard? or PlatformGuard.implementation? :topaz def fixnum_min -(2**30) end - elsif PlatformGuard.wordsize? 64 + elsif PlatformGuard.c_long_size? 64 def fixnum_max (2**62) - 1 end |