Issue #14378 has been updated by nobu (Nobuyoshi Nakada).

Description updated

HfCloud (Xiangyu Shi) wrote:
> So, it is that FIXNUM of the 64-bits ruby is a 32-bits data?

Yes, we are using `long` for fixnums, and Windows is the so-called IL32LLP64 platform.
To "fix" this, or relax this limitation, we have to replace tons of `long` in the source code.


----------------------------------------
Bug #14378: On windows, RUBY_FIXNUM_MAX of 64 bits ruby  is 32 bits
https://bugs.ruby-lang.org/issues/14378#change-69650

* Author: HfCloud (Xiangyu Shi)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: 2.5.0
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
On windows, start an IRB of a 64-bits ruby, enter these code:

~~~ruby
(1<<29).equal?(1<<29) 
#=>true

(1<<30).equal?(1<<30)
#=>false
~~~

So, it is that FIXNUM of the 64-bits ruby is a 32-bits data?
But my friend try these code on linux platform and all got true(it means FIXNUM is 64bits) 
Then I opened ruby/ruby.h and found this:

~~~ ruby
#define RUBY_FIXNUM_MAX (LONG_MAX>>1)
~~~

The LONG_MAX of my compiler(msvc140, vs2017) is 2147483647, and the ruby which is installed by ruby-installer also have the same problem.





-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>