Yukihiro "Matz" Matsumoto
aec849888e
parse.y (new_kw_rest_args): aggregate integer to node* type casts.
2022-06-03 13:00:12 +09:00
Yukihiro "Matz" Matsumoto
5cbce646b0
parse.y: allow anonymous rest (and keyword rest) arguments.
2022-06-03 13:00:12 +09:00
Yukihiro "Matz" Matsumoto
6649b353c9
Merge pull request #5716 from dearblue/__method__check
...
Check `NULL` for `proc` and `env` in `Kernel#__method__`
2022-05-31 11:23:23 +09:00
Yukihiro "Matz" Matsumoto
af5acf3566
parse.y: fix wrong indent [ci skip].
2022-05-30 01:16:47 +09:00
Yukihiro "Matz" Matsumoto
d55a152b3d
mruby-string-ext/string.c (utf8code): max length of UTF-8 is 4 bytes.
...
It used to be 6 bytes in RFC2279 but overridden by new RFC3629.
2022-05-29 22:19:00 +09:00
Yukihiro "Matz" Matsumoto
82b87be4df
string.c (mrb_utf8len): retry 7cdef2b0.
...
C++ requires `extern` declaration before variable definition.
2022-05-29 22:18:59 +09:00
dearblue
444fbd76c2
Check NULL for proc and env in Kernel#__method__
...
Fix #5714
2022-05-29 11:28:54 +09:00
dearblue
23611332d9
Introduced mrb_static_assert_object_size()
...
Asserts the size of the object structure is less than or equal to 6 words.
2022-05-28 11:08:27 +09:00
Yukihiro "Matz" Matsumoto
82f0ba14a9
Revert "string.c: share UTF-8 length table with mruby-string-ext."
...
This reverts commit 7cdef2b03e .
This sharing does not with C++ compilers.
2022-05-25 16:07:52 +09:00
Yukihiro "Matz" Matsumoto
7cdef2b03e
string.c: share UTF-8 length table with mruby-string-ext.
2022-05-25 11:25:43 +09:00
Yukihiro "Matz" Matsumoto
be0b5f8cee
mruby-string-ext/string.c: reduce UTF-8 table size.
2022-05-25 11:22:28 +09:00
Yukihiro "Matz" Matsumoto
2f4695b759
mruby-string-ext/string.c: check sequence length before decoding.
2022-05-25 11:20:29 +09:00
Yukihiro "Matz" Matsumoto
f08e66e53e
mruby-string-ext/string.c (mrb_str_ord): fail with invalid UTF-8.
2022-05-25 11:17:49 +09:00
Yukihiro "Matz" Matsumoto
ac79849fde
mruby-io/io.c: refactor readable/writable checks for fptr.
2022-05-20 09:59:23 +09:00
Yukihiro "Matz" Matsumoto
013c9f31bc
mruby-io/io.c: remove unnecessary type casts.
2022-05-20 09:53:12 +09:00
John Bampton
73580c49c4
Fix spelling
2022-05-17 19:47:54 +10:00
Yukihiro "Matz" Matsumoto
0299ccf6c7
parse.y: allow inner anonymous block argument.
2022-05-16 14:17:21 +09:00
Yukihiro "Matz" Matsumoto
0a52f171aa
mruby-random/random.c: factored out Random argument retrieval.
2022-05-16 14:17:20 +09:00
Yukihiro "Matz" Matsumoto
fc4e9cdf81
mruby-test-inline-struct/inline.c: add type cast from void* to char*.
2022-05-09 18:57:26 +09:00
Yukihiro "Matz" Matsumoto
04d160f90b
mruby-test-inline-struct/inline.c: add a comment about istruct protection.
2022-05-08 23:14:20 +09:00
Yukihiro "Matz" Matsumoto
8c2dbb761f
mruby-test-inline-struct/inline.c: add mrb_istruct_p() checks.
2022-05-08 23:09:14 +09:00
Yukihiro "Matz" Matsumoto
45f61e3879
class.c (mrb_get_args): remove I specifier (istruct); close #5706
2022-05-07 17:35:45 +09:00
Yukihiro "Matz" Matsumoto
50b1ded350
mruby-random/random.c: use rand_i() extensively.
2022-05-04 08:07:02 +09:00
dearblue
9b9424fe32
Strict acquisition of the Random class given by mrb_get_args()
...
This is to prevent data corruption of the substituted `Random` instance.
If the `Object::Random` constants are redefined to a different `MRB_TT_ISTRUCT` object class, they can pass `mrb_get_args()` validation.
The following is an example of how the `Array#shuffle` method rewrites the data of a non `Random` instance.
```c
// code.c
#include <mruby.h>
#include <mruby/class.h>
#include <mruby/compile.h>
#include <mruby/istruct.h>
#define EVAL_LIT(MRB, ...) mrb_load_string((MRB), #__VA_ARGS__)
static mrb_value
fake_initialize(mrb_state *mrb, mrb_value self)
{
char *p = ISTRUCT_PTR(self);
for (int i = 0; i < ISTRUCT_DATA_SIZE; i++) {
p[i] = 'A' + i;
}
return self;
}
static mrb_value
fake_to_bytes(mrb_state *mrb, mrb_value self)
{
const char *p = ISTRUCT_PTR(self);
return mrb_str_new(mrb, p, ISTRUCT_DATA_SIZE);
}
int
main(int argc, char *argv[])
{
mrb_state *mrb = mrb_open();
struct RClass *fake = mrb_define_class(mrb, "Fake", mrb->object_class);
MRB_SET_INSTANCE_TT(fake, MRB_TT_ISTRUCT);
mrb_define_method(mrb, fake, "initialize", fake_initialize, MRB_ARGS_NONE());
mrb_define_method(mrb, fake, "to_bytes", fake_to_bytes, MRB_ARGS_NONE());
EVAL_LIT(mrb,
Random = Fake \n
fake = Fake.new \n
p [fake, fake.to_bytes] \n
p a = (1..10).to_a \n
p a.shuffle(fake) \n
p [fake, fake.to_bytes]
);
mrb_close(mrb);
return 0;
}
```
```console
% `bin/mruby-config --cc --cflags --ldflags` code.c `bin/mruby-config --libs`
% ./a.out
[#<Fake:0x8007d8f20>, "ABCDEFGHIJKLMNOPQRSTUVWX"]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 7, 8, 10, 2, 6, 9, 3, 4, 5]
[#<Fake:0x8007d8f20>, "\xe81{\v\fM\xb0D<\x99\xb1V+l\x84\x86QRSTUVWX"]
```
2022-05-03 13:35:29 +09:00
Yukihiro "Matz" Matsumoto
118ff0a529
Merge branch 'bigint-gem' of https://github.com/dearblue/mruby into dearblue-bigint-gem
2022-04-25 11:03:39 +09:00
Yukihiro "Matz" Matsumoto
61700dbb0a
mruby-sprintf/sprintf.c: raise an error with MRB_NO_FLOAT.
2022-04-25 10:01:09 +09:00
Yukihiro "Matz" Matsumoto
0f4769536b
src/numeric.c: use mrb_ensure_float_type().
...
Instead of obsolete `mrb_to_float()` or the combination of
`mrb_float_value(mrb_as_float())`.
2022-04-25 07:29:55 +09:00
Yukihiro "Matz" Matsumoto
f45ac65532
fixup! mruby-kernel-ext/kernel.c: use mrb_ensure_integer_type().
2022-04-25 07:29:21 +09:00
Yukihiro "Matz" Matsumoto
425097c7be
mruby-kernel-ext/kernel.c: use mrb_ensure_integer_type().
...
Instead of obsolete `mrb_to_integer()`.
2022-04-25 07:26:42 +09:00
Yukihiro "Matz" Matsumoto
2bea39f339
mruby-range-ext/range.c: Range#cover?() takes a range too.
2022-04-24 14:02:00 +09:00
dearblue
cc3a213fef
Move bigint implementation files to mruby-bigint
...
Users can now switch to their own implementation of GEM.
However, we do not guarantee that this will not be a problem in the current situation.
This may need to be improved in the future.
2022-04-23 21:19:12 +09:00
Yukihiro "Matz" Matsumoto
bdc244e9b0
mruby-errno/errno.c: fix integer size mixtures.
2022-04-21 14:47:15 +09:00
Yukihiro "Matz" Matsumoto
3be461077d
mruby-pack/pack.c: fix integer size mixtures.
2022-04-21 14:47:15 +09:00
Yukihiro "Matz" Matsumoto
94585a5902
mruby-binding/bindinc.c: should not mix int and size_t.
2022-04-18 17:47:10 +09:00
Yukihiro "Matz" Matsumoto
790910b50a
codegen.c: genop_3 to take uint16_t instead of uint8_t.
2022-04-17 09:32:04 +09:00
dearblue
1354ad96ec
Avoid creating temporary objects with new_lit() in codegen.c
...
At the same time, the saving and restoration of unwanted object arenas was removed.
In addition, the common code to extend the pool that existed before has been grouped together and newly established as `lit_pool_extend()`.
Note that previously the variable `i` was updated at that time, but since it is the same as the value at the end of a `for` statement, it has been omitted.
The original catalyst was that `bin/mrbc` with the `MRB_WORD_BOXING` + not `MRB_BOXWORD_NO_FLOAT_TRUNCATE` configuration caused `bin/mrbtest` with the `MRB_NO_BOXING` configuration to fail.
Upon investigation, I concluded that avoiding the creation of temporary objects would prevent the truncation of floating point numbers.
Therefore, this patch also prevents the `rake test` from failing with the following configuration.
```console
% cat test_config.rb
bootstrap_mrbc = nil
MRuby::Build.new do |conf|
conf.toolchain
conf.enable_debug
conf.enable_test
conf.disable_presym
conf.defines << %w(MRB_WORD_BOXING)
#conf.defines << %w(MRB_WORDBOX_NO_FLOAT_TRUNCATE)
gem core: "mruby-bin-mrbc"
gem core: "mruby-kernel-ext"
bootstrap_mrbc = File.join(conf.build_dir, "bin/mrbc")
end
MRuby::Build.new("nobox") do |conf|
conf.toolchain
conf.enable_debug
conf.enable_test
conf.defines << %(MRB_NO_BOXING)
conf.mrbcfile = bootstrap_mrbc
gem core: "mruby-kernel-ext"
end
```
2022-04-16 18:22:32 +09:00
Yukihiro "Matz" Matsumoto
3c96ee704b
fiber.c: cast integer to avoid a warning.
2022-04-14 10:53:58 +09:00
Yukihiro "Matz" Matsumoto
2f918f1926
errno.c: fix int and mrb_int mixture.
...
`strerror(3) takes `int` not `mrb_int`.
2022-04-12 16:11:01 +09:00
Yukihiro "Matz" Matsumoto
c8c083cb75
codegen.c: need to pack argument when n==13 too.
...
Because we have extra 2 arguments coming (kw and rhs).
2022-04-09 17:16:12 +09:00
Yukihiro "Matz" Matsumoto
55b526167b
test/bigint.rb: add test for multi-precision integers.
2022-04-09 17:16:11 +09:00
Yukihiro "Matz" Matsumoto
dcaf4083d5
src/bigint.c: implement multi-precision integer.
...
To enable multi-precision integer support, you need to link
`mruby-bigint` mrbgem. The gem itself is empty but it turns on
the "bigint" support.
2022-04-09 17:16:10 +09:00
Yukihiro "Matz" Matsumoto
3dabd18dcc
errno.c: resolve signedness warning.
2022-04-02 18:25:13 +09:00
Yukihiro "Matz" Matsumoto
b99c389ec3
internal.h: aggregate internal functions.
...
Internal functions can only be called from within the library.
Functions listed in `mruby/internal.h` can be called from:
* core (src/*.c)
* gems (mrbgems/**/*.c)
But not from the application linked with `libmruby`.
2022-04-02 18:25:13 +09:00
Yukihiro "Matz" Matsumoto
a3f2c95334
codegen.c: skip overwritten MOVE instructions.
2022-03-30 15:34:40 +09:00
Yukihiro "Matz" Matsumoto
60cf382ff9
codegen.c: peephole optimize consecutive MOVE instructions.
2022-03-29 22:36:40 +09:00
dearblue
f9d72908ca
Remove old compatibility code
...
The `mrb_voidp()` related macros have been removed in mruby-1.1.0.
2022-03-27 11:26:43 +09:00
Yukihiro "Matz" Matsumoto
a91b55f5ca
codegen.c: allow constant folding for multiply with zero.
2022-03-26 11:20:59 +09:00
Yukihiro "Matz" Matsumoto
90969cef4c
codegen.c: fix the negative division regression; fix #5678
2022-03-26 11:20:59 +09:00
Yukihiro "Matz" Matsumoto
b4168c9b68
parse.y: empty here-doc delimiter caused infinite loop; fix #5676
2022-03-25 07:45:06 +09:00
John Bampton
7e4eaaa11a
Format Markdown tables
2022-03-24 01:00:24 +10:00