Commit Graph

3367 Commits

Author SHA1 Message Date
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
Yukihiro "Matz" Matsumoto 982a4769a1 metaprog.c: add undefined_instance_methods method. 2022-03-21 11:15:23 +09:00
Yukihiro "Matz" Matsumoto 4f869f3367 numeric.c: enhance float division to support Complex. 2022-03-18 14:23:17 +09:00
Yukihiro "Matz" Matsumoto e45081d310 mrbc/stub.c: define stub functions in a separated file. 2022-03-18 12:29:47 +09:00
Yukihiro "Matz" Matsumoto fe03e01078 numeric.c: enhance integer division to support Rational and Complex.
No longer need to override division methods in mrbgems.
2022-03-18 12:27:46 +09:00
Yukihiro "Matz" Matsumoto 4dcdf78f8a numeric_ext.c: add Integer#pow() method.
Which takes optional second argument of modulo.
2022-03-17 23:25:50 +09:00
Yukihiro "Matz" Matsumoto 13d014ab5e complex.c: rename static functions to remove abbreviations.
- `flo_`
- `cpx_`
2022-03-15 19:14:45 +09:00
Yukihiro "Matz" Matsumoto a2e9005286 parse.y: add type cast to integer comparison. 2022-03-12 13:31:46 +09:00
Yukihiro "Matz" Matsumoto 4beebc73a7 complex.c: avoid mrb_funcall; call functions directly. 2022-03-12 13:31:38 +09:00
Yukihiro "Matz" Matsumoto 2772e07dc8 rational.c: avoid mrb_funcall; call functions directly. 2022-03-12 13:31:38 +09:00
Yukihiro "Matz" Matsumoto 7659b3b271 numeric.c: avoid mrb_funcall; call functions directly.
When you try to call functions defined in mrbgems, you need to add the
names of functions to `mrbc.c`, since `mrbc` does not link any mrbgem
regardless of the configuration.
2022-03-12 13:31:38 +09:00
Yukihiro "Matz" Matsumoto 10001ff67f rational.c, complex.c: expose arithmetic operation functions.
* mrb_{rational,complex}_{add,sub,mul,div}
2022-03-12 08:35:07 +09:00
Yukihiro "Matz" Matsumoto da48e7dbb2 fiber.c: should pack 15+ arguments in an array. 2022-03-09 15:21:15 +09:00
Yukihiro "Matz" Matsumoto 6fa5aaf694 socket.c: unify error handling code. 2022-03-09 15:21:14 +09:00