Yukihiro "Matz" Matsumoto
130ec9cd90
backtrace.c (mrb_unpack_backtrace): need no NULL check
2024-03-05 12:24:49 +09:00
Yukihiro "Matz" Matsumoto
55ca34c31b
backtrace.c (mrb_print_backtrace): skip a local variable
2024-02-15 14:01:48 +09:00
Yukihiro "Matz" Matsumoto
6810423da1
backtrace.c (mrb_print_backtrace): avoid backtrace to array conversion
...
Made print_backtrace() to support both array form and packed backtrace
form, so that we can avoid allocating an array.
2024-02-13 16:18:14 +09:00
Yukihiro "Matz" Matsumoto
441de05376
error.h: use RBasic instead of RObject for generic objects
...
RObject is type for objects with instance variables. For generic
objects, use RBasic.
2024-02-13 11:05:27 +09:00
Yukihiro "Matz" Matsumoto
f285420653
backtrace.c (decode_location): decode packed backtrace location on demand.
2024-02-13 00:07:54 +09:00
Yukihiro "Matz" Matsumoto
874f1e0138
backtrace.c (copy_location): rename some function and arguments
2024-02-08 23:41:22 +09:00
Yukihiro "Matz" Matsumoto
432caf0670
backtrace.c (pack_backtrace): refactor the function that called once
2024-02-08 23:22:48 +09:00
Yukihiro "Matz" Matsumoto
60919807e5
backtrace.c (each_backtrace): make return type to size_t
2024-02-07 17:34:33 +09:00
Yukihiro "Matz" Matsumoto
0a11215452
backtrace.c (packed_backtrace): avoid calling each_backtrace() twice
...
Since the length of the backtrace is at most `ciidx + 1` we can avoid
the first call of each_backtrace().
2024-02-07 17:32:58 +09:00
Yukihiro "Matz" Matsumoto
b67cea4442
backtrace.c (pack_backtrace_i): avoid infinite loop; ref #6161
...
When irep->refcnt reaches UINT16_MAX, mrb_irep_incref() raises
exception but the function pack_backtrace_i() is called from
mrb_exc_raise() thus causes the infinite loop problem. So this is a
hack-ish workaround by making irep reference to NULL if refcnt reaches
the maximum count. Probably we will address this issue again to make it
better.
2024-02-07 17:30:11 +09:00
Yukihiro "Matz" Matsumoto
2f63b49542
backtrace.c: use mrb_irep references instead of struct RProc
...
To reduce GC burden (no mark needed). We use `mrb_irep_incref()` and
`mrb_irep_decref()` instead to track irep memory usage; ref #6161
2024-02-04 16:48:42 +09:00
dearblue
9543cfa7ee
Fixed use-after-free by backtrace object
...
The `MRB_TT_BACKTRACE` object has been added for the purpose.
Previously, "use-after-free" could occur because the reference count in `backtrace_location::irep` was not incremented.
fixed #6160
2024-01-31 22:17:16 +09:00
Yukihiro "Matz" Matsumoto
2af0ff52e9
backtrace.c (count_backtrace_i): remove empty callback
...
Instead specifying NULL as function argument of each_backtrace()
count the number of callbacks.
2023-07-11 07:17:19 +09:00
Yukihiro "Matz" Matsumoto
6f99806d5b
backtrace.c (packed_backtrace): remove count_backtrace()
...
Since we have stop calling mrb_debug_get_position() in each_backtrace(),
we don't need to craft special function count_backtrace(). We just use
each_backtrace() to count the number of backtraces.
2023-07-11 06:59:09 +09:00
Yukihiro "Matz" Matsumoto
316119069d
backtrace.c (each_backtrace): skip callinfo without debug_info
2023-07-10 07:57:02 +09:00
Yukihiro "Matz" Matsumoto
c57610ad8a
backtrace.c (packed_backtrace): fix broken ciidx
...
- fix at higher level to remove redundancy
- ciidx should always be smaller than ci stack length
2023-07-10 07:05:27 +09:00
Yukihiro "Matz" Matsumoto
0558b1abd8
backtrace.c: reorder functions for clarity
2023-07-03 15:26:45 +09:00
Yukihiro "Matz" Matsumoto
97b60e7fb1
backtrace.c (backtrace_location): defer retrieving positions
...
Instead of calling `mrb_debug_get_position` in the `each_backtrace`, we
just keep `irep` and `idx` information in the backtrace_location, and
get the exact position in `mrb_unpack_backtrace` which may not be called
if exceptions are handled in the `rescue` clauses.
2023-07-03 15:21:16 +09:00
Yukihiro "Matz" Matsumoto
40bdd65ce6
backtrace.c (each_backtrace): return number of traces iterated
2023-07-03 15:20:24 +09:00
Yukihiro "Matz" Matsumoto
0c4f5a4093
backtrace.c (mrb_unpack_backtrace): make the function static
2023-06-29 22:54:09 +09:00
Yukihiro "Matz" Matsumoto
e563a3cb2c
backtrace.c (packed_backtrace): reduce unnecessary calls
...
Instead of calling each_backtrace() twice, use a new function
count_backtrace().
2023-06-28 21:53:17 +09:00
Yukihiro "Matz" Matsumoto
7cbe6894b4
debug.c (mrb_debug_get_position): avoid duplicate calls to get_file()
2023-02-19 19:05:54 +09:00
Yukihiro "Matz" Matsumoto
c39ee489e1
Remove non formatting fprintf().
2022-11-25 16:17:29 +09:00
dearblue
61b60273ea
Print errors by calling mrb_print_backtrace() without backtrace
...
- In case of `NoMemoryError` exceptions, the error message is now printed directly.
- Replaced `mrb_p()` used by #4250 with `mrb_print_error()`.
ref. squashed commit f1523d2404
ref. subcommit da7d7f881b
ref. subcommit d9c7b6be6e
2022-11-20 20:58:03 +09:00
Yukihiro "Matz" Matsumoto
06c4c76be8
Merge branch 'exception' of https://github.com/dearblue/mruby into dearblue-exception
2022-05-01 20:00:37 +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
dearblue
92ef9f1a9e
Store backtrace to field of struct RException
...
Since the possible values of the backtrace are limited to `nil`, `RData`, and `RAray`, they are now stored as object pointers.
This change saves memory by eliminating the need to use instance variables for common exceptions.
ref. #2485
2022-04-01 23:27:19 +09:00
Yukihiro "Matz" Matsumoto
ad194bd46b
error.c: the error message may contain NUL character.
2021-08-14 13:01:47 +09:00
Yukihiro "Matz" Matsumoto
38c9c5c627
backtrace.c: skip C method without mid set.
...
That means it's a method not to be included in the backtrace, for
example `raise`.
2021-07-08 10:06:01 +09:00
Yukihiro "Matz" Matsumoto
2a717cf2aa
backtrace.c: do not skip frames for C function calls.
2021-05-28 07:36:20 +09:00
Yukihiro "Matz" Matsumoto
cb92f9ce0b
backtrace.c: do not print trace line if there's no backtrace history
2021-05-27 21:44:55 +09:00
Yukihiro "Matz" Matsumoto
5f9f26f6e6
backtrace.c: stop skipping frame with file/line information.
...
Instead, copy them from the outer frame as CRuby does.
2021-05-13 08:00:05 +09:00
Yukihiro "Matz" Matsumoto
14bd07f831
backtrace.c: skip innermost frame only when the method is in C; #5394
2021-04-26 16:46:44 +09:00
KOBAYASHI Shuji
0d8b025d9b
Remove MRB_API from mrb_get_backtrace definition
2021-04-20 16:07:48 +09:00
Yukihiro "Matz" Matsumoto
9d362f2c27
backtrace.c: remove MRB_API from internal functions.
...
- `mrb_exc_backtrace` to implement `Exception#backtrace`
- `mrb_get_backtrace` to implement `#caller`
2021-04-19 15:49:51 +09:00
Yukihiro "Matz" Matsumoto
13eba43100
backtrace.c: small refactoring in mrb_exc_backtrace(); ref #5394
...
- add comment for unpacking
- avoid saving the symbol in a local variable
2021-04-19 15:49:51 +09:00
Yukihiro "Matz" Matsumoto
2275e76262
backtrace.c: pedantic check for empty backtrace; ref #5394
2021-04-19 15:49:50 +09:00
Yukihiro "Matz" Matsumoto
85808e50b0
backtrace.c: should skip first (innermost) frame w/out position; #5394
...
Otherwise we suffer `(unknown):0:` errors.
2021-04-19 15:49:50 +09:00
Yukihiro "Matz" Matsumoto
a7ca5a9b6e
backtrace.c: change missing-lineno to 0 for cosmetic reason; #5394
2021-03-31 15:41:19 +09:00
fundamental
49f0da6821
Add support for partial backtraces
...
When debug information is omitted within ireps, show that a stack
frame existed rather than silently hiding it.
2021-03-30 19:16:15 -04: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
0903e2a72e
Silence 'loss of data' warnings.
2021-01-25 15:45:32 +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
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
dearblue
ced89c25ff
Unified pc and err of mrb_callinfo
...
This enhances self-containment.
- Changed the `mrb_callinfo::pc` field to point to itself.
Previously it indicated the return destination of the previous call level.
`mrb_callinfo::pc` will now hold the address to its own `proc->body.irep->iseq`.
- Removed `mrb_callinfo::err` field.
This is because `mrb_callinfo::pc - 1` is semantically the same as the previous `err`.
- The `pc0` and `pc_save` variables in `mrb_vm_exec()` are no longer needed and have been deleted.
- It removes the argument because `cipush()` doesn't need to save the previous `pc`.
2021-01-10 13:23:43 +09:00
KOBAYASHI Shuji
3d056d084a
Rename MRB_{ENABLE,DISABLE}_ to MRB_{USE,NO}_; close #5163
...
| Previous Name | New Name |
|------------------------------|-------------------------|
| MRB_ENABLE_ALL_SYMBOLS | MRB_USE_ALL_SYMBOLS |
| MRB_ENABLE_SYMBOLL_ALL | MRB_USE_ALL_SYMBOLS |
| MRB_ENABLE_CXX_ABI | MRB_USE_CXX_ABI |
| MRB_ENABLE_CXX_EXCEPTION | MRB_USE_CXX_EXCEPTION |
| MRB_ENABLE_DEBUG_HOOK | MRB_USE_DEBUG_HOOK |
| MRB_DISABLE_DIRECT_THREADING | MRB_NO_DIRECT_THREADING |
| MRB_DISABLE_STDIO | MRB_NO_STDIO |
| ENABLE_LINENOISE | MRB_USE_LINENOISE |
| ENABLE_READLINE | MRB_USE_READLINE |
| DISABLE_MIRB_UNDERSCORE | MRB_NO_MIRB_UNDERSCORE |
| DISABLE_GEMS | MRB_NO_GEMS |
* `MRB_ENABLE_SYMBOLL_ALL` seems to be a typo, so it is fixed.
* `MRB_` prefix is added to those without.
* The previous names can also be used for compatibility.
2020-11-21 21:14:40 +09:00
Yukihiro "Matz" Matsumoto
5a3e014e49
Constify irep members.
...
- `pool`
- `syms`
- `reps`
2020-10-12 16:21:03 +09:00
Yukihiro "Matz" Matsumoto
eddd324979
Add MRB_SYM() for inline symbols.
2020-10-12 16:20:41 +09:00
Yukihiro "Matz" Matsumoto
c0a6439a69
Avoid implicit integer casting in backtrace.c and hash.c.
2020-01-31 09:25:10 +09:00