Yukihiro "Matz" Matsumoto
9c5dc42e59
small cosmetic changes.
...
I prefer `i++` style unless absolutely necessary.
This commit is an addition to 41e4148.
2022-11-19 17:11:56 +09:00
Yukihiro "Matz" Matsumoto
4a888a34bb
readfloat.c (mrb_read_float): a new function.
...
We no longer use `mrb_float_read()` that depends on `errno`.
2022-11-07 16:09:31 +09:00
fn ⌃ ⌥
273fcbc347
ops.h: update OP_ARYDUP instruction and rename to OP_ARYSPLAT.
...
Transforms the value of a splat inside a return statement (similar
to an array). For example, `return *nil` should return `nil.to_a`,
while `return *1` should return `[1]`
2022-10-29 19:54:34 -07:00
Yukihiro "Matz" Matsumoto
02f44d76fc
codegen.c: stop peephole optimization for headless case statement.
...
This fixes #5815
2022-10-28 15:57:35 +09:00
Yukihiro "Matz" Matsumoto
9ff247c5c2
Revert "codegen.c: exit headless case early if a condition is always true"
...
This reverts commit e5b32e559860073632fc7b69cb98b90f2c069e81; ref #5815
2022-10-28 15:54:40 +09:00
fn ⌃ ⌥
e5b32e5598
codegen.c: exit headless case early if a condition is always true
2022-10-21 20:00:44 -07:00
Yukihiro "Matz" Matsumoto
751ac378bd
codegen.c: should not skip rhs array; fix #5797
...
When the value of multiple assignment taken, the rhs array needs to be
generated anyway.
2022-10-01 15:18:45 +09:00
Yukihiro "Matz" Matsumoto
a641f146fc
codegen.c (gen_assignment): use nsym() instead of simple type cast.
2022-08-23 11:30:54 +09:00
Yukihiro "Matz" Matsumoto
108875c972
codegen.c (gen_assignment): support NODE_COLON3 as lhs; fix #5752
...
We should allow `::C = 1` for example.
2022-08-23 07:53:23 +09:00
dearblue
5bc15dd69b
Fixed assertion in ARGUMENT_NORMALIZE() for bidx.
...
It should be compared to the `irep->nregs` value as is.
At the same time, discovered problems have been fixed.
2022-08-04 22:43:06 +09:00
dearblue
43fdce5019
Protected proc objects given by OP_DEF on registers
...
If a GC occurs in `mrb_calloc()` called by `mt_rehash()` inside `mrb_define_method_raw(), the `proc` may be destroyed.
2022-07-30 22:34:50 +09:00
Yukihiro "Matz" Matsumoto
c2e4b82d84
codegen.c (new_litbint): remove surrounding braces.
...
It was to allow local variable declarations, but now we allow
declarations in the middle.
2022-07-26 13:55:54 +09:00
Yukihiro "Matz" Matsumoto
e8ce82bf31
codegen.c (new_litbint): forgot else in a107b85.
2022-07-26 00:11:53 +09:00
Yukihiro "Matz" Matsumoto
c6bf4eaac0
codegen.c (new_litbint): renamed from new_litbn.
2022-07-25 15:33:43 +09:00
Yukihiro "Matz" Matsumoto
a107b850eb
codegen.c (new_bitbn): fixed wrong packing of integer radix.
2022-07-25 15:31:43 +09:00
Yukihiro "Matz" Matsumoto
2b07489372
codegen.c: keep stack space for block argument.
2022-07-20 14:27:02 +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
3cab2e7b78
mruby-compiler: remove spaces before * in type casting.
2022-06-13 17:00:30 +09:00
Yukihiro "Matz" Matsumoto
5233865c47
codegen.c (search_upvar): update messages for anonymous parameters.
2022-06-03 13:00:13 +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
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
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
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
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
41f5f464ae
codegen.c: disable constant folding if no_optimize is set; ref #5661
2022-03-05 08:04:33 +09:00
Yukihiro "Matz" Matsumoto
85c347c3af
codegen.c: fix a bug in super with keyword arguments; fix #5660
2022-03-03 14:48:39 +09:00
Yukihiro "Matz" Matsumoto
a4f740ff9a
string.c: use mrb_int instead of size_t.
2022-03-03 08:08:02 +09:00
Yukihiro "Matz" Matsumoto
776be1b397
codegen.c: use OP_ARRAY instead of OP_ARRAY2 in optimization.
...
If operand 1 and operand 2 specify the same register `OP_ARRAY2`
can/should be transformed to `OP_ARRAY`.
2022-02-22 19:28:40 +09:00
Yukihiro "Matz" Matsumoto
d4d29b21b3
codegen.c: peephole optimize OP_MOVE after OP_ARRAY or OP_ARRAY2.
2022-02-22 17:27:24 +09:00
Yukihiro "Matz" Matsumoto
c37f648552
codegen.c: use OP_ARRAY instead of OP_ARRAY2 if possible.
...
`OP_ARRAY` inline elements, i.e: with `OP_ARRAY Rn Rm len`, `Rn` and
`Rm` should always be the same register.
2022-02-22 17:21:51 +09:00
Yukihiro "Matz" Matsumoto
75e86dcfcd
codegen.c: assign post assignees for fixed number of RHS.
2022-02-22 17:20:00 +09:00
Yukihiro "Matz" Matsumoto
0282d3ec9f
codegen.c: rename gen_vmassinment to gen_massignment.
...
`m` stands for `multiple` but I don't remember why I put `v` first.
2022-02-22 16:43:51 +09:00
Yukihiro "Matz" Matsumoto
f72315575f
codegen.c: fix a argument generation bug in array assignment.
2022-02-22 11:06:20 +09:00
Yukihiro "Matz" Matsumoto
44f591aa8f
codegen.c: adjust stack position for OP_SUPER instruction.
2022-02-19 16:17:33 +09:00
dearblue
12d51807a3
Insert an empty hash before the first NODE_KW_REST_ARGS
...
I expect this will fix the two problems that "#5640 " didn't address.
- It is expected to raise an exception `TypeError`, but it didn't before.
```console
% bin/mruby -e 'p [**1]'
[1]
```
- The variable `h` is expected to keep an empty hash, but it didn't before.
```console
% bin/mruby -e 'h = {}; p(**h, a: 1, b: 2); p h'
{:a=>1, :b=>2}
{:a=>1, :b=>2}
```
2022-02-18 22:15:50 +09:00
Yukihiro "Matz" Matsumoto
38b164ace7
codegen.c: fix a bug in gen_values().
...
- Fix limit handling that fails 15 arguments method calls.
- Fix too early argument packing in arrays.
2022-02-12 12:39:35 +09:00
Yukihiro "Matz" Matsumoto
4562ba14c0
codegen.c: limit check was too restrictive in gen_values().
...
That can create unnecessary arrays when more than 12 arguments are
given to a method.
2022-02-08 13:11:43 +09:00
Yukihiro "Matz" Matsumoto
0849a2885f
codegen.c: stack position may be wrong on assignments.
...
When `[]=` access includes keyword arguments.
2022-02-08 13:11:43 +09:00
Yukihiro "Matz" Matsumoto
4c13188ea6
codegen.c: generate OP_HASH in gen_hash() if limit exceeds.
...
That means when `limit` is `0` it should always generate a hash.
2022-02-08 13:11:43 +09:00
Yukihiro "Matz" Matsumoto
6f5e74f576
codegen.c: change size_t to uint16_t To remove type conversion warnings.
2022-02-08 13:11:42 +09:00
Yukihiro "Matz" Matsumoto
ae3c99767a
codegen.c: fixed a bug in hash code generation with !val.
2022-02-03 10:40:05 +09:00
Yukihiro "Matz" Matsumoto
7bedd5e05d
codegen.c: generate OP_SETIDX from attribute assignments.
2022-01-24 11:18:27 +09:00
Yukihiro "Matz" Matsumoto
cda4d9bcb4
codegen.c: refactor gen_call and gen_values.
...
Remove no longer used arguments from the functions.
2022-01-22 16:40:21 +09:00
Yukihiro "Matz" Matsumoto
b611c43a5d
codegen.c: no OP_HASHADD required when val is false.
2022-01-21 15:42:51 +09:00
Yukihiro "Matz" Matsumoto
b53cd3ce25
codegen.c: fix evaluation order of attribute assignment.
2022-01-21 10:41:14 +09:00