Commit Graph

5767 Commits

Author SHA1 Message Date
Yukihiro "Matz" Matsumoto d3e4450917 Merge pull request #6225 from dearblue/revert-3991
Revert "Adjust environment when `mrb_exec_irep` happened."
2024-04-04 08:19:57 +09:00
Yukihiro "Matz" Matsumoto d8a3406132 Merge pull request #6224 from dearblue/orphan-env
`mrb_env_unshare()` to break the link to fiber
2024-04-04 08:19:08 +09:00
Yukihiro "Matz" Matsumoto c42f4e1d2c Merge pull request #6191 from leviongit/sym-eql
Speed up symbol equality comparison
2024-04-04 07:35:54 +09:00
dearblue 28d31262e5 Revert "Adjust environment when mrb_exec_irep happened."
This reverts commit 26e436e247.

After investigation, it is possible to revert by commit e89cc9b9fa.

The build configuration file used in the investigation is shown below.

```ruby
MRuby::Build.new do |conf|
  toolchain :clang

  enable_debug
  enable_bintest
  enable_test

  cc.command = "clang18"
  linker.command = "clang18"

  [cc, cxx].each { |c| c.defines << "MRB_GC_STRESS" }
  [cc, cxx, linker].each { |cmd| cmd.flags << %w(-fsanitize=address) }

  gem github: "iij/mruby-dir"       # rev: "89dceefa1250fb1ae868d4cb52498e9e24293cd1"
  gem github: "iij/mruby-env"       # rev: "056ae324451ef16a50c7887e117f0ea30921b71b"
  gem github: "iij/mruby-errno"     # rev: "b4415207ff6ea62360619c89a1cff83259dc4db0"
  gem github: "iij/mruby-require"   # rev: "f0634d785e5cbb73cd7d118ee36deff499e4181e"
  gem github: "iij/mruby-tempfile"  # rev: "9b883438547020dae328e34c8a2fe736171cd0ab"
end
```

Since the `rake` command needs to be from the past, we used the Ruby 2.6 version.
2024-04-03 22:04:25 +09:00
dearblue 96d56debc7 mrb_env_unshare() to break the link to fiber
Currently `e->cxt` is used exclusively to check for `break` / `return` availability.
In other words, there is no need to maintain a reference to a fiber that has reached its end.
2024-04-03 21:54:53 +09:00
Yukihiro "Matz" Matsumoto aa28f48c3b string.c (search_nonascii): simplify fallback implementation by SWAR 2024-04-02 19:50:13 +09:00
Yukihiro "Matz" Matsumoto 4982999e07 Merge pull request #6221 from dearblue/arrange-each_backtrace
Arranging `each_backtrace()`
2024-03-31 21:44:56 +09:00
Yukihiro "Matz" Matsumoto 423026353d Merge pull request #6220 from dearblue/methodcache
Reorganize `mrb_cache_entry` and `mrb_method_t` types
2024-03-31 21:36:19 +09:00
dearblue 9b8b864be1 Arranging each_backtrace()
Highlights are:
  - `Integrate the blocks `if (!ci->proc || MRB_PROC_CFUNC_P(ci->proc))` and `if (loc.irep == NULL)`.
  - Folding some other conditionals.
  - Assertions ensure that procs are not aliases.
2024-03-31 09:53:16 +09:00
Yukihiro "Matz" Matsumoto cbb31e6a7c string.c (mrb_utf8_strlen): use SWAR technique for performance 2024-03-30 22:50:12 +09:00
dearblue 328eb71e52 Reorganize mrb_cache_entry and mrb_method_t types
The purpose is to remove the `mid` field from the `mrb_cache_entry` structure.
The resulting RAM requirement for the method cache is reduced from 5 words per entry to 4 words per entry for 32-bit CPUs.

The relevant changes are as follows:

  - Removed `MRB_USE_METHOD_T_STRUCT`.

    The `mrb_method_t` type is now always defined as a structure.

  - Include method IDs in `mrb_method_t`

    Change the `flags` member to `uint32_t`.
    The bitstring structure should be the same as the keys of the `mt` table in `class.c`.

I believe the impact on API compatibility with previous versions is minimal.
2024-03-30 18:19:26 +09:00
Yukihiro "Matz" Matsumoto 61b1a4db8e Merge pull request #6219 from dearblue/fixed-to-out
Avoid assigning a fixed value in the loop
2024-03-29 23:55:05 +09:00
Yukihiro "Matz" Matsumoto 27061e4d58 Merge pull request #6216 from dearblue/shared-class-iv
Shared empty `iv_tbl` of module
2024-03-29 23:12:32 +09:00
dearblue 3d91ae28f5 Avoid assigning a fixed value in the loop 2024-03-29 22:26:46 +09:00
Yukihiro "Matz" Matsumoto f0614a1e0c vm.c: remove unnecessary update of ci local variable 2024-03-29 21:22:37 +09:00
Yukihiro "Matz" Matsumoto f54ff74f9b vm.c: add volatile to a variable across setjmp/longjmp 2024-03-29 21:22:37 +09:00
Yukihiro "Matz" Matsumoto c54bf673a9 vm.c: remove unused initializations 2024-03-29 21:22:36 +09:00
dearblue f1c0752ab8 Shared empty iv_tbl of module
This will be a partial merge of #5317 with the following changes.

- Remove `iclass->iv_c` since `iclass->iv_c` is equivalent to `iclass->c`.
- `class_iv_ptr()` returns a single pointer instead of a double pointer.
2024-03-27 21:39:32 +09:00
Yukihiro "Matz" Matsumoto ef94bfc2e6 proc.c (closure_setup): fix NULL check logic
It used to check ci to be non NULL in line 37, but we silently assumed
ci was not NULL in the `else` clause too. So instead of checking NULL,
we add assertion. This incomplete check was found by clang-tidy.
2024-03-26 14:00:00 +09:00
Yukihiro "Matz" Matsumoto b42b8480d1 vm.c: adjust spacing 2024-03-26 14:00:00 +09:00
Yukihiro "Matz" Matsumoto a97c27358e class.c (prepare_name_common): remove unnecessary pointer update 2024-03-26 14:00:00 +09:00
Yukihiro "Matz" Matsumoto 07f9f9b4be gc.c (mrb_alloca): add const modifier 2024-03-26 13:59:59 +09:00
Yukihiro "Matz" Matsumoto 87b358a342 Including header files in include/* by <> 2024-03-26 13:59:59 +09:00
Yukihiro "Matz" Matsumoto a8977f713d class.c,variable.c: use mrb_int_hash_func instead of kh_ version 2024-03-26 13:59:59 +09:00
Yukihiro "Matz" Matsumoto 4da5d025d3 Merge pull request #6206 from dearblue/table-expansion
Simplify expansion of mt and iv a bit
2024-03-16 08:17:42 +09:00
Yukihiro "Matz" Matsumoto b913824d47 range.c (mrb_gc_mark_range): return size
If not initialized, size is zero, otherwise two.
2024-03-15 23:36:30 +09:00
dearblue 227ebb9daa Simplify expansion of mt and iv a bit 2024-03-14 22:12:35 +09:00
Yukihiro "Matz" Matsumoto f13daee2f5 class.c (mrb_gc_mark_mt_size) unify with mrb_gc_mark_mt 2024-03-14 11:58:00 +09:00
Yukihiro "Matz" Matsumoto 2cb3f1d9e5 hash.c (mrb_gc_mark_hash_size): unify with mrb_gc_mark_hash 2024-03-14 11:52:25 +09:00
Yukihiro "Matz" Matsumoto 63900814b9 variable.c (mrb_gc_mark_iv_size): unify the function with mrb_gc_mark_iv 2024-03-14 11:49:47 +09:00
Yukihiro "Matz" Matsumoto e8525df576 gc.c (gc_gray_counts): unify the function with gc_mark_children
Avoid traversing object repeatedly.
2024-03-14 11:44:06 +09:00
Yukihiro "Matz" Matsumoto 168eb8c267 readint.c (mrb_read_int): narrow scope of a local variable 2024-03-12 08:21:27 +09:00
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
leviongit deb133c8ef use a type-check macro instead of mrb_type comparison 2024-03-09 13:56:21 +01:00
leviongit d1b3198109 remove redundant function definition 2024-03-09 13:41:58 +01:00
Yukihiro "Matz" Matsumoto 44edd3438b gc.c: remove unused local variable; ref #6194 2024-03-09 14:29:42 +09:00
Yukihiro "Matz" Matsumoto 4b312bdb2f debug.c: narrow scope of local variables 2024-03-09 14:29:42 +09:00
Yukihiro "Matz" Matsumoto 678bdd2c4b cdump.c (sym_operator_name): narrow scope of local variables 2024-03-09 14:29:42 +09:00
Yukihiro "Matz" Matsumoto 3699f013ac Merge pull request #6193 from dearblue/c-epilogue-assert
Fix wrong assertion in `OP_SENDB`.
2024-03-09 13:23:33 +09:00
Yukihiro "Matz" Matsumoto f1f022bd1a Merge pull request #6194 from dearblue/count-closures
Simplify the calculation of the number of closures in `MRB_TT_FIBER`
2024-03-09 13:22:47 +09:00
dearblue cb36398d30 Simplify the calculation of the number of closures in MRB_TT_FIBER 2024-03-08 22:06:08 +09:00
dearblue 9616971c70 Fix wrong assertion in OP_SENDB.
Assertions were failing on exit if started with `mrb_fiber_resume()`.

The bug that caused it was introduced by commit 42308c42b5 (#6106).
The bug was moved by commit 990e18ad59.
2024-03-08 21:56:00 +09:00
dearblue 4380773666 Fix OP_STOP with exception
Previously, `mrb->exc` would remain replaced by a `break` object if a rewind operation was performed during the processing of a `OP_STOP` instruction.
This problem has existed since #5060, when it was introduced in mruby-3.0.

However, as of mruby-3.0, a manual or third-party generator is required to cause the `OP_STOP` instruction to be issued.
Therefore, it is believed that this has not had an impact until now.
2024-03-08 21:50:46 +09:00
leviongit af06d54843 Speed up symbol equality comparison 2024-03-07 16:22:35 +01:00
Yukihiro "Matz" Matsumoto 9257a61b39 Merge pull request #6137 from dearblue/fiber-unreachable
Remove unreachable blocks in `OP_RETURN`
2024-03-07 16:13:56 +09:00
Yukihiro "Matz" Matsumoto a8694bdefb Merge pull request #6184 from dearblue/L_STOP
Remove the `L_STOP` label
2024-03-06 18:02:34 +09:00
Yukihiro "Matz" Matsumoto 130ec9cd90 backtrace.c (mrb_unpack_backtrace): need no NULL check 2024-03-05 12:24:49 +09:00
Yukihiro "Matz" Matsumoto 439a895f46 symbol.c: use post increment if possible (just style matter) 2024-03-04 13:01:21 +09:00
Yukihiro "Matz" Matsumoto d840274805 symbol.c: narrow scope of local variables 2024-03-04 13:01:20 +09:00