Yukihiro "Matz" Matsumoto
db8368fa86
numeric.c: remove bit operations methods from Float class; #6197
...
mruby used to use float numbers for overflown integers before we
implemented big integers. Now we don't need bit operations for float
numbers anymore. Also removed tests for shift operations for float
numbers.
2024-03-11 11:44:41 +09:00
niyarin
af8e772b9e
Fix int_xor to call flo_xor.
2024-03-10 12:13:34 +09:00
Yukihiro "Matz" Matsumoto
08c422c7ee
numeric.c (cmpnum): support fixnum cmp bignum; fix #6163
2024-02-02 14:18:57 +09:00
Yukihiro "Matz" Matsumoto
6e09555749
Merge pull request #6150 from dearblue/itself
...
Introduce `mrb_obj_itself()`
2024-02-01 16:15:42 +09:00
dearblue
bf2db1ed2b
Check mrb_bigint_p() before mrb_integer()
2024-01-21 10:59:06 +09:00
dearblue
3111990089
Introduce mrb_obj_itself()
...
Some method definitions were changed to use this function.
2024-01-20 22:07:29 +09:00
dearblue
8ecfacefca
Prohibit Class#allocate in a different way
...
The method introduced by #5979 causes a fault by swapping classes.
```console
% bin/mruby -e 'Method = Proc; p Object.method(:inspect)'
zsh: segmentation fault (core dumped) bin/mruby -e 'Method = Proc; p Object.method(:inspect)'
```
After applying this patch, a `TypeError` exception will be raised.
```console
% bin/mruby -e 'Method = Proc; p Object.method(:inspect)'
trace (most recent call last):
[1] -e:1
-e:1:in method: allocation failure of Proc (TypeError)
```
However, if the `mrb_vtype` is the same object, the same care must still be taken as before.
```console
% bin/mruby -e 'Method = Binding; p method(:puts).eval("12345")'
trace (most recent call last):
[1] -e:1
-e:1:in eval: wrong argument type nil (expected Proc) (TypeError)
```
2023-12-22 21:59:34 +09:00
Yukihiro "Matz" Matsumoto
df1d397da5
numeric.c: use presym to initialize numeric classes
2023-11-11 23:48:31 +09:00
Yukihiro "Matz" Matsumoto
0443f14fd0
array.c,hash.c,numeric.c,string.c: use mrb_define_method_id()
...
For primary class libraries.
2023-10-23 15:23:08 +09:00
Yukihiro "Matz" Matsumoto
3277cc9ce1
numeric.c (int_to_s): avoid mrb_get_args()
2023-10-11 20:32:09 +09:00
Yukihiro "Matz" Matsumoto
5d0016186f
numeric.c (mrb_float_to_str): avoid memcpy()
2023-07-24 18:03:38 +09:00
Yukihiro "Matz" Matsumoto
89f7bb1056
use more lightweight mrb_funcall_argv instead of mrb_funcall_id
2023-06-12 14:22:04 +09:00
Yukihiro "Matz" Matsumoto
6eedf1065d
numeric.c (flo_idiv): add mrb_check_num_exact
2023-05-30 08:54:44 +09:00
Yukihiro "Matz" Matsumoto
f1a3cfbd3b
add a space between if and (
2023-05-22 11:55:21 +09:00
Yukihiro "Matz" Matsumoto
c32f7915fb
reformat else clause indentation style
2023-05-20 00:21:01 +09:00
dearblue
0279067dc4
Returns the value of Integer#~ from mrb_bint_rev()
...
fixed #5987
2023-04-15 22:39:05 +09:00
dearblue
d3128ce58a
Allow Class#allocate to be prohibited
...
Calling `Class#allocate` with `UnboundMethod#bind_call` usually succeeds without problems.
If this behavior does not make us happy, we can now prohibit it with `MRB_SET_INSTANCE_TT(klass, MRB_TT_UNDEF)`.
At the same time, it applies to the `Binding`, `Complex`, `Data`, `Float`, `Integer`, `Method`, `Rational` and `UnboundMethod` classes.
2023-04-09 21:14:07 +09:00
Yukihiro "Matz" Matsumoto
0906cd7593
numeric.c: fix rounding function issues with big numbers
...
- int_ceil
- int_floor
- int_round
- int_truncate
2023-03-13 18:53:17 +09:00
Yukihiro "Matz" Matsumoto
ea0e8f7ea4
numeric.c (flo_mod): use NULL instead of 0
...
In C, we don't use 0 as NULL representation.
2023-02-13 00:08:40 +09:00
Yukihiro "Matz" Matsumoto
4e85e855cf
numeric.c: avoid mrb_get_args() if possible
2023-01-25 14:10:43 +09:00
Yukihiro "Matz" Matsumoto
37da677cc8
numeric.c (mrb_int_pow): avoid unnecessary calls to mrb_get_args()
2023-01-24 15:25:06 +09:00
Yukihiro "Matz" Matsumoto
89830296eb
numeric.c (int_round): n may not be a bigint
...
`mrb_bint_add()` expects its first operand to be a bigint.
2022-12-24 19:20:37 +09:00
John Bampton
8208a836ff
Fix spelling: floating point -> floating-point
...
https://en.wikipedia.org/wiki/Floating-point_arithmetic
2022-10-27 00:09:12 +10:00
Yukihiro "Matz" Matsumoto
268f6dcab3
numeric.c (mrb_float_to_integer): isinf/isnan takes any float values.
...
So don't need to cast to `float`, just use `mrb_float`.
2022-10-04 11:05:15 +09:00
Yukihiro "Matz" Matsumoto
d9061bd969
numeric.c: update documents [ci skip].
2022-09-23 22:13:28 +09:00
Yukihiro "Matz" Matsumoto
b891c63ae1
numeric.c: calculate correct rounding for bigger numbers.
2022-08-12 12:31:38 +09:00
Yukihiro "Matz" Matsumoto
1a95da4ac2
numeric.c (mrb_cmp): inline big-integer comparison.
2022-08-12 12:24:04 +09:00
Yukihiro "Matz" Matsumoto
d14fd77148
numeric.c (mrb_int_pow): make the function to take 2 operands.
2022-08-12 12:19:21 +09:00
Yukihiro "Matz" Matsumoto
8cdf14c06b
numeric.c (int_rounding): unify code duplication.
2022-08-10 13:38:24 +09:00
Yukihiro "Matz" Matsumoto
4e735eb8ba
numeric.c (flo_rounding): refactor float rounding methods.
2022-08-10 13:38:24 +09:00
Yukihiro "Matz" Matsumoto
7ffdb4c30e
numeric.c: implement ndigits truncation for rounding methods.
...
- ceil
- floor
- round
- truncate
2022-08-10 13:38:23 +09:00
Yukihiro "Matz" Matsumoto
abec98c681
numeric.c: implement ceil, floor, round, truncate methods in C.
...
- ISO 15.2.8.3.14 Integer#ceil
- ISO 15.2.8.3.17 Integer#floor
- ISO 15.2.8.3.20 Integer#round
- ISO 15.2.8.3.26 Integer#truncate
2022-08-10 13:38:23 +09:00
Yukihiro "Matz" Matsumoto
78a3200fa5
etc.c (mrb_obj_id): separate object_id and hash values.
...
It's OK for hash values to conflict. But object_id is not (in theory).
2022-08-08 23:00:13 +09:00
Yukihiro "Matz" Matsumoto
585d80e0a7
numeric.c (num_eql): move eql? definition to Numeric class.
...
We no longer need Float#eql? etc.
2022-08-01 16:20:35 +09:00
Yukihiro "Matz" Matsumoto
b77b8f4deb
numeric.c (flo_ceil_floor): negate after converting integer to float.
...
Otherwise integer negate may overflow.
2022-07-30 09:08:42 +09:00
Yukihiro "Matz" Matsumoto
9d774bc011
numeric.c (flo_ceil_floor): return bigint if possible.
2022-07-30 09:08:02 +09:00
Yukihiro "Matz" Matsumoto
eb392cb643
numeric.c (mrb_float_to_integer): check for RangeError.
...
Otherwise flo_to_i raises FloatDomainError instead.
2022-07-30 09:06:49 +09:00
Yukihiro "Matz" Matsumoto
e4bcd8a96a
numeric.c (mrb_float_to_integer): unify with flo_to_i().
2022-07-30 09:05:21 +09:00
Yukihiro "Matz" Matsumoto
5af98f2088
numeric.c (flo_ceil_floor): add exact number check.
2022-07-30 09:01:24 +09:00
Yukihiro "Matz" Matsumoto
b8d3bc0eae
numeric.c: move FloatDomainError description to the sufficient place.
2022-07-30 08:46:06 +09:00
Yukihiro "Matz" Matsumoto
6da34fa735
numeric.c (int_div): add checks for division by zero.
2022-07-29 17:48:02 +09:00
Yukihiro "Matz" Matsumoto
0e530dbb63
numeric.c: fix smallint op bigint error in bitwise logical operators.
2022-07-18 08:29:52 +09:00
Yukihiro "Matz" Matsumoto
37c2f080f0
numeric.c (int_to_s): should not bypass base range check.
2022-07-12 14:48:36 +09:00
Yukihiro "Matz" Matsumoto
48b43af37f
numeric.c (mrb_div_int_value): should support integer overflow.
...
Especially in `MRB_INT_MIN/-1` which is bigger than MRB_INT_MAX.
2022-07-09 15:21:45 +09:00
Yukihiro "Matz" Matsumoto
fa0ff7cf86
numeric.c: better error message (Float -> Integer).
2022-07-09 15:13:52 +09:00
Yukihiro "Matz" Matsumoto
7de03cbb68
numeric.c: add mrb_noreturn qualifier to error functions.
...
- mrb_int_zerodiv()
- mrb_int_overflow()
2022-07-09 15:12:37 +09:00
Yukihiro "Matz" Matsumoto
e1980d7596
numeric.c (mrb_div_int): separate the function in two.
...
- mrb_div_int() does integer division in Ruby way (mdiv)
returns mrb_int
- mrb_div_int_value() division with zero div and overflow checks.
returns mrb_value
2022-07-09 14:38:18 +09:00
Yukihiro "Matz" Matsumoto
a2f0fd81e6
numeric.c (mrb_int_mul): fix error message (Float -> Integer).
2022-07-09 10:45:44 +09:00
Yukihiro "Matz" Matsumoto
8d34981530
numeric.c: avoid mathematical operations for simple cases.
2022-07-09 10:45:11 +09:00
Yukihiro "Matz" Matsumoto
960021e519
numeric.c (cmpnum): call mrb_bigint_cmp() if v1 is bigint, not v2.
2022-07-08 21:57:05 +09:00