Yukihiro "Matz" Matsumoto
b70fd09f47
Revert "numeric.c: simplifies int_mod definition."
...
This reverts commit 3738d62a86 .
The change changed the behavior with floating point numbers.
2021-08-03 16:11:02 +09:00
Yukihiro "Matz" Matsumoto
3738d62a86
numeric.c: simplifies int_mod definition.
2021-08-03 13:14:23 +09:00
Yukihiro "Matz" Matsumoto
b9d2b47f16
Replace mrb_fixnum_value() with mrb_int_value().
...
Use `mrb_fixnum_value()` only when you are absolutely sure that the
value is within `Fixnum` range, i.e. 31 bits signed integer at least.
2021-08-03 13:00:11 +09:00
Yukihiro "Matz" Matsumoto
23e7cb41e5
Replace fixnum references with int.
...
The `Fixnum` class is no longer provided by `mruby`.
2021-08-03 13:00:10 +09:00
Yukihiro "Matz" Matsumoto
1f0238a928
numeric.c: rename fixdivmod to intdivmod.
2021-08-03 07:30:59 +09:00
Yukihiro "Matz" Matsumoto
81d56477f2
numeric.c: simpler integer modulo calculation.
2021-08-02 16:47:50 +09:00
Yukihiro "Matz" Matsumoto
6ea0c04c06
numeric.c: use C's modulo operator if both operands are positive.
2021-08-02 14:09:38 +09:00
Yukihiro "Matz" Matsumoto
a9d721ea8f
numeric.c: refactor integer bit shift operations.
2021-08-02 08:53:14 +09:00
Yukihiro "Matz" Matsumoto
5c804cf68f
Remove redundant include headers.
...
- stdlib.h
- stddef.h
- stdint.h
- stdarg.h
- limits.h
- float.h
2021-07-25 13:07:10 +09:00
Yukihiro "Matz" Matsumoto
ce2d7c2e01
numeric.c: self should always be an integer in __coerce_step_counter.
2021-07-10 17:04:57 +09:00
Yukihiro "Matz" Matsumoto
be6d559853
Update internal methods not to be listed in backtraces.
...
- String#__lines
- Array#__ary_eq
- Array#__ary_cmp
- Hash#__delete
- Kernel#__case_eqq
- Integer#__coerce_step_counter
2021-07-10 14:15:43 +09:00
Yukihiro "Matz" Matsumoto
8416e706ba
numeric.c: add optional ndigits argument to rounding methods.
...
- `truncate`
- `floor`
- `ceil`
`round` already takes `ndigits`.
2021-06-21 10:24:55 +09:00
Yukihiro "Matz" Matsumoto
7c8a91ff5a
numeric.c: restore fmt argument for backward compatibility.
...
`mrb_float_to_str()` used to take `fmt` argument. We thought no one used
the function, and OK to remove the argument. But at least `mruby-redis`
gem used the function.
2021-06-15 16:19:16 +09:00
Yukihiro "Matz" Matsumoto
cf2e78de44
numeric.c: fixed a silly bug related to pointer decrement.
2021-05-31 02:59:33 +09:00
Yukihiro "Matz" Matsumoto
8a4bcc58c9
numeric.c: introduce mrb_int_to_cstr() to dump mrb_int.
...
* refactor `mrb_integer_to_str()`
* refactor `mrb_str_format()`
2021-05-30 08:15:51 +09:00
Yukihiro "Matz" Matsumoto
c019d8d34d
fmt_fp.c: move mruby specific mrb_float_to_str to numeric.c
2021-05-26 17:29:18 +09:00
Yukihiro "Matz" Matsumoto
fa29bb3bb4
fmt_fp.c: remove fmt argument from mrb_float_to_str().
...
With major refactoring to prepare removing `snprintf(3) calls.
2021-05-21 08:13:38 +09:00
Yukihiro "Matz" Matsumoto
5eebbd7df2
Global renaming regarding integer and float.
...
Consistent number conversion function names:
* `mrb_value` to immediate (C) value
* `mrb_int()` -> `mrb_as_int()`
* `mrb_to_flo()` -> `mrb_as_float()`
* `mrb_value` to `mrb_value` (converted)
* `mrb_to_int()'
* `mrb_Integer()` - removed
* `mrb_Float()` -> `mrb_to_float`
Consistent function name (avoid `_flo` suffix):
* `mrb_div_flo()` -> `mrb_div_float`
2021-05-17 15:07:05 +09:00
Yukihiro "Matz" Matsumoto
ea7f1953c3
Rename mrb_fixnum_to_str to mrb_integer_to_str.
2021-05-17 13:59:01 +09:00
Yukihiro "Matz" Matsumoto
080fdbf9e8
Rename mrb_flo_to_fixnum to mrb_float_to_integer.
2021-05-17 13:58:54 +09:00
Yukihiro "Matz" Matsumoto
f46b4056f8
numeric.c: remove duplicated definitions; #5421
...
Following functions are defined in `mrblib/numeric.c`:
- `Integer#ceil`
- `Integer#floor`
- `Integer#round`
- `Integer#truncate`
2021-04-24 11:56:50 +09:00
Yukihiro "Matz" Matsumoto
90a59efbec
numeric.c: fix errors from MRB_NO_FLOAT; close #5421
2021-04-24 10:23:40 +09:00
Yukihiro "Matz" Matsumoto
91c4ac8d66
numeric.c: update error messages in int_pow; ref #5420
2021-04-21 22:08:07 +09:00
Yukihiro "Matz" Matsumoto
5cf1de5b31
numeric.c: fix int_pow to detect integer overflow; fix #5420
2021-04-21 22:05:52 +09:00
John Bampton
9d32d440eb
feat(CI): add the GitHub Super Linter
...
The GitHub Super Linter is a more robust and better supported
tool than the current GitHub Actions we are using.
Running these checks:
ERROR_ON_MISSING_EXEC_BIT: true
VALIDATE_BASH: true
VALIDATE_BASH_EXEC: true
VALIDATE_EDITORCONFIG: true
VALIDATE_MARKDOWN: true
VALIDATE_SHELL_SHFMT: true
VALIDATE_YAML: true
https://github.com/marketplace/actions/super-linter
https://github.com/github/super-linter
Added the GitHub Super Linter badge to the README.
Also updated the pre-commit framework and added
more documentation on pre-commit.
Added one more pre-commit check: check-executables-have-shebangs
Added one extra check for merge conflicts to our
GitHub Actions.
EditorConfig and Markdown linting.
Minor grammar and spelling fixes.
Update linter.yml
2021-04-16 16:37:52 +09:00
Yukihiro "Matz" Matsumoto
a5244b02c5
numeric.c: function renaming.
...
- `mrb_num_div_int(mrb,x,y)` -> `mrb_div_int(mrb,x,y)`
- `mrb_num_div_flo(mrb,x,y)` -> `mrb_div_flo(x,y)`
They are internal function not supposed to be used outside of the core.
2021-03-28 08:35:29 +09:00
Yukihiro "Matz" Matsumoto
d3184e4a6d
complex.c: overhaul complex operators.
...
- define `MRB_TT_COMPLEX`
- change object structure (`struct RComplex`)
- add memory management for `MRB_TT_COMPLEX`
- avoid operator overloading as much as possible
- as a result, performance improved a log
- should work with and without `Rational` defined
2021-03-19 10:37:10 +09:00
Yukihiro "Matz" Matsumoto
08f9d5bab5
rational.c: overhaul rational operators.
...
- define `MRB_TT_RATIONAL`
- change object structure (`struct RRational`)
- add memory management for `MRB_TT_RATIONAL`
- avoid operator overloading as much as possible
- implement division overloading in C
- as a result, performance improved a lot
2021-03-19 10:37:10 +09:00
Yukihiro "Matz" Matsumoto
eb07030308
numeric.c: avoid integer overflow; close #5384
...
Since `mruby` does not have `Bignum`, `Float#divmod` could overflow, so
it will return `Float` values when the divided value does not fit in
`mrb_int`. This behavior will be changed when `Bignum` is introduced to
`mruby` in the future.
2021-03-19 07:15:05 +09:00
Yukihiro "Matz" Matsumoto
087e1719e4
Float#divmod with zero should cause ZeroDivisionError; #5384
2021-03-19 07:13:19 +09:00
KOBAYASHI Shuji
6731f935cc
Float::NAN/0 should be Float::NAN; ref a0b3378b3
...
#### Before this patch:
```console
$ bin/mruby -e 'p(Float::NAN/0)'
Infinity
```
#### After this patch (same as Ruby):
```console
$ bin/mruby -e 'p(Float::NAN/0)'
NaN
```
2021-03-18 17:10:51 +09:00
Yukihiro "Matz" Matsumoto
a0b3378b36
numeric.c: float zero division should be infinity with sign kept; fix #5382
2021-03-18 15:24:31 +09:00
Ryan Lopopolo
b199f6fc5a
bug(presym): Fix mrb_cmp declaration of <=> symbol for funcall
2021-03-07 21:29:11 -08:00
Yukihiro "Matz" Matsumoto
17ecf14511
Revert "Minimize the changes in #5277 "
...
This reverts commit dc51d89ac2 .
2021-01-26 10:57:07 +09:00
Yukihiro "Matz" Matsumoto
dc51d89ac2
Minimize the changes in #5277
...
Instead of including `mruby/presym.h` everywhere, we provided the
fallback `mruby/presym.inc` under `include/mruby` directory, and specify
`-I<build-dir>/include` before `-I<top-dir>/include` in `presym.rake`.
So even when someone drops `-I<build-dir>/include` in compiler options,
it just compiles without failure.
2021-01-22 18:38:53 +09:00
Yukihiro "Matz" Matsumoto
6c5ccd5abe
Merge branch 'avoid-including-presym.inc-in-existing-header-files' of https://github.com/shuujii/mruby into shuujii-avoid-including-presym.inc-in-existing-header-files
2021-01-21 14:53:18 +09:00
Yukihiro "Matz" Matsumoto
12ff88563d
Fix int_quo to do float division; fix #5268
2021-01-17 23:02:36 +09:00
Yukihiro "Matz" Matsumoto
b4817a54f0
Make mrb_to_flo() to convert objects, not integer, not float; #5268
...
Thinking `Ratinal` and `Complex` in mind.
2021-01-17 23:02:35 +09:00
KOBAYASHI Shuji
90b53f4c29
Avoid including presym.inc in existing header files
...
Addressed an issue where existing programs linking `libmruby.a` could only
be built by adding `<build-dir>/include` to compiler's include path.
2021-01-11 09:21:07 +09:00
Yukihiro "Matz" Matsumoto
2850b58dd9
Check integer overflow in float bit operations.
2020-12-24 23:17:18 +09:00
John Bampton
4fa3359d44
refactor: remove trailing whitespace from C, Header, Ruby and YAML files
...
Lint
2020-12-15 19:44:02 +10:00
Yukihiro "Matz" Matsumoto
e55abd2390
Fix compiler errors from MRB_NO_FLOAT; #5185
...
Also added `no-float.rb` target in `build_config`.
2020-11-24 16:54:39 +09:00
Yukihiro "Matz" Matsumoto
1974aa0f72
Update Float#to_s to keep trailing zero as CRuby does; ref 68cebb6
2020-11-21 14:38:13 +09:00
Yukihiro "Matz" Matsumoto
a8cd364ece
Detect overflow in flo_shift().
2020-11-17 16:20:53 +09:00
Yukihiro "Matz" Matsumoto
354934d398
Refactor integer division.
2020-11-17 07:10:31 +09:00
Yukihiro "Matz" Matsumoto
37a1884749
Simplify mrb_num_div_int().
2020-11-17 00:24:43 +09:00
Yukihiro "Matz" Matsumoto
19450df41e
Integer operation should result in Integer.
...
Should raise `RangeError` if the operation overflows.
2020-11-14 19:38:27 +09:00
Yukihiro "Matz" Matsumoto
0df460892c
Add range check before casting float to integer.
2020-11-09 11:35:54 +09:00
Yukihiro "Matz" Matsumoto
8455344bf3
Skip too big left shift in flo_shift().
2020-11-06 12:52:18 +09:00
Yukihiro "Matz" Matsumoto
2a52ebcc56
Avoid negating MRB_INT_MIN which is impossible.
2020-11-06 12:51:44 +09:00