oxidize-rb / rb-sys

Easily build Ruby native extensions in Rust
https://oxidize-rb.github.io/rb-sys/
Apache License 2.0
222 stars 35 forks source link

Add `INT2FIX`, `INT2NUM`, `FIX2LONG` and `NUM2LONG` #406

Open ianks opened 1 month ago

ianks commented 1 month ago

This PR introduces several new integer conversion functions to the Stable API, enhancing the capabilities of the rb-sys crate for handling Ruby integer types.

Changes

  1. Added the following functions to the StableApiDefinition trait:

    • int2fix: Converts a C int to a Ruby Fixnum
    • int2num: Converts a C int to a Ruby Integer (Fixnum or Bignum)
    • fix2long: Converts a Ruby Fixnum to a C long
    • num2long: Converts a Ruby Integer (Fixnum or Bignum) to a C long
  2. Implemented these functions in both the pure Rust and compiled C versions of the Stable API.

  3. Added corresponding macros in macros.rs:

    • INT2FIX
    • INT2NUM
    • FIX2LONG
    • NUM2LONG

Impact

These additions will allow Rust developers using rb-sys to more easily work with Ruby's integer types, providing a safer and more idiomatic way to convert between Rust and Ruby number representations.

Testing

The PR includes extensive parity tests to ensure that the new functions behave identically to their Ruby counterparts across a wide range of input values, including edge cases like maximum and minimum Fixnum values.