Commit Graph

120 Commits

Author SHA1 Message Date
KOBAYASHI Shuji abc6c990a6 Remove unnecessary _set_output_format call
Three-digit exponent issue was fixed via another workaround (63b8f5c).
2019-04-03 18:54:25 +09:00
dearblue eb6aee117b mrb_default_allocf() is default allocator for NULL safe 2019-02-09 20:22:08 +09:00
KOBAYASHI Shuji 0e04c46261 Use 2 digits exponent format for printf family on old MSVC
For conforming C standard.
2019-01-13 23:24:57 +09:00
Yukihiro "Matz" Matsumoto 61f49690e4 Remove filename&lines from mrb_irep struct.
This patch slightly reduce memory consumption (2% for my test).
2018-11-15 21:01:56 +09:00
YAMAMOTO Masaya 625f9f6fa3 Merge branch 'master' of github.com:mruby/mruby 2017-11-04 01:23:12 +09:00
Yukihiro "Matz" Matsumoto e4662d77e7 Should not use FSHARED state for string from irep pools; fix #3829
This strings in `irep` pools may be freed forcefully in `mrb_irep_free`.
This commit probably fixes #3817 as well.
2017-11-03 08:24:47 +09:00
Yukihiro "Matz" Matsumoto 93f5f22577 Heavily refactored how lexical scope links are implemented; fix #3821
Instead of `irep` links, we added a `upper` link to `struct RProc`.
To make a space for the `upper` link, we moved `target_class` reference.
If a `Proc` does not have `env`, `target_class` is saved in an `union`
shared with `env` (if a `Proc` has env, you can tell it by `MRB_PROC_ENV_P()).
Otherwise `target_class` is referenced from `env->c`. We removed links
in `env` as well.

This change removes 2 members from `mrb_irep` struct, thus saving 2
words per method/proc/block. This also fixes potential memory leaks
due to the circular references caused by a link from `mrb_irep`.
2017-10-28 00:29:30 +09:00
Yukihiro "Matz" Matsumoto f2394859e3 Add main.define_method 2017-10-19 10:39:06 +09:00
YAMAMOTO Masaya acdc2d1f24 Add MRB_WITHOUT_FLOAT 2017-10-11 17:58:11 +09:00
Yukihiro "Matz" Matsumoto 7edbe428ca Add new type of shared string: RSTR_FSHARED.
`RSTR_FSHARED` use frozen strings as shared body instead of
`struct mrb_shared_string`. This reduces allocation from
literal strings.
2017-10-01 16:24:43 +09:00
Yukihiro "Matz" Matsumoto 473b7d0efd Cut links from irep in heaps finalization. 2017-09-29 00:18:55 +09:00
Tomasz Dąbrowski 6cde950017 fix: src\state.c(66): warning C4200: nonstandard extension used: zero-sized array in struct/union 2017-09-27 22:22:05 +02:00
Yukihiro "Matz" Matsumoto 3acaa44a70 Restructure irep->outer chain; fix #3804
Instead of `irep -> proc` chain, we use `irep -> irep` chain to
avoid GC bugs like #3804. We added `target_class` reference to
`mrb_irep` struct. That means one more word consumption per `irep`.
2017-09-04 06:51:31 +09:00
Yukihiro "Matz" Matsumoto 8bf492f127 Reduce integer type mismatch warnings in VC. 2017-08-12 09:35:35 +09:00
Yukihiro "Matz" Matsumoto 7dbbd77407 Revert 4566c80; fix #3679
The patch deallocate the memory in `mrb_default_allocf` but that
hinders GC in `mrb_realloc`.
2017-05-31 23:01:04 +09:00
Yukihiro "Matz" Matsumoto 4566c80d7b Free given pointer if realloc() fails; fix #3658 2017-05-25 12:36:38 +09:00
Yukihiro "Matz" Matsumoto 9644ad51b4 Simplify backtrace mechanism; fix #3633 #3634 #3644
Instead of preserving a backtrace in `mrb_state`, `mrb_exc_set`
keeps packed backtrace in an exception object. `#backtrace` unpacks
it to an array of strings.
2017-05-23 23:50:42 +09:00
Yukihiro "Matz" Matsumoto 77331d127b Unify else clause style 2017-04-03 16:56:27 +09:00
Yukihiro "Matz" Matsumoto f0f095bc13 Fix a double free problem in codegen.c; fix #3378
This issue was first reported by https://hackerone.com/geeknik
The fix was proposed by @titanous
2017-01-23 16:53:31 +09:00
Yukihiro "Matz" Matsumoto 8dde647a51 add temporary workaround for irep memory corruption
need to find out real memory bug that appears in full-debug/mrbtest
2016-06-10 10:04:52 +09:00
Kouhei Sutou a561bdb25f Support backtrace after method calls
GitHub: fix #2902, #2917

The current implementation traverses stack to retrieve backtrace. But
stack will be changed when some operations are occurred. It means that
backtrace may be broken after some operations.

This change (1) saves the minimum information to retrieve backtrace when
exception is raised and (2) restores backtrace from the minimum
information when backtrace is needed. It reduces overhead for creating
backtrace Ruby objects.

The space for the minimum information is reused by multiple
exceptions. So memory allocation isn't occurred for each exception.
2015-12-29 20:36:12 +09:00
Yukihiro "Matz" Matsumoto 5c405dea3d include changed from by quotes ("") to by brackets (<>); close #3032 2015-11-27 17:48:23 +09:00
furunkel 3ab2f9371e Clean up GC code 2015-10-19 22:29:43 +02:00
Tatsuhiro Tsujikawa a085c04e37 Don't crash if NULL is passed to mrb_close
Sometimes it is very useful just return from mrb_close if NULL is
passed as mrb.  This is the same spirit of free(3), which just does
nothing if NULL is passed.
2015-09-12 12:11:10 +09:00
Tatsuhiko Kubo 5fa30aeaea Fix mismatches for MRB_API declarations. 2014-08-29 01:06:22 +09:00
Tatsuhiko Kubo 53a7549e1c Fix error handling for mrb_open_allocf().
When DISABLE_GEMS is not defined and
a return value of mrb_open_core() is NULL,
mrb_open_allocf() may cause SEGV.
2014-08-20 05:15:21 +09:00
Yukihiro "Matz" Matsumoto 206f89e209 add MRB_API modifiers to mruby API functions 2014-08-04 00:47:08 +09:00
Yukihiro "Matz" Matsumoto 875c07a742 Merge pull request #2477 from take-cheeze/allocf_ud
Add field `allocf_ud` to replace current `ud`.
2014-07-24 23:22:58 +09:00
Yukihiro "Matz" Matsumoto 4cc9e5d8b1 since #1441, NaN boxing with 64bit pointer works; close #2476 2014-07-21 21:55:52 +09:00
take_cheeze fc9a91c4a6 Add field allocf_ud to replace current ud.
Since some use it as `mrb_state` associated user data.
2014-07-17 21:48:17 +09:00
Yukihiro "Matz" Matsumoto d2910a162d Merge pull request #2442 from suzukaze/use-mrb-str-nofree-macro
Use RSTR_NOFREE_P in state.c
2014-07-03 21:45:28 +09:00
Jun Hiroe 569ea74021 Use *_EMBED_* macro in state.c 2014-07-03 18:26:42 +09:00
Jun Hiroe bd82d7c794 Use RSTR_NOFREE_P in state.c 2014-07-03 18:10:51 +09:00
Yukihiro "Matz" Matsumoto ac0addd98f refacor mrb_open_core() to reduce a local variable 2014-06-23 20:06:17 +09:00
take_cheeze baca365caa rename mrb_open_without_mrbgems to mrb_open_core 2014-06-23 20:06:17 +09:00
take_cheeze 36813c87f6 make default allocf public to use it with mrb_open_without_mrbgems 2014-06-23 20:06:17 +09:00
take_cheeze 6bb56ed920 add mrb_open_without_mrbgems API 2014-06-23 20:06:17 +09:00
take_cheeze 62f41ddd3b Add fixed state atexit stack feature.
Adds following macros:
* MRB_FIXED_STATE_ATEXIT_STACK (not defined by default)
  * When defined enables fixed state atexit stack.
* MRB_FIXED_STATE_ATEXIT_STACK_SIZE (default value: 5)
  * This macro will be ignored when `MRB_FIXED_STATE_ATEXIT_STACK` isn't defined.
  * When `mrb_state_atexit` is called more than this value it will raise runtime error.
2014-06-16 16:03:35 +09:00
Yukihiro "Matz" Matsumoto fe95f44013 rename mrb_atexit to mrb_state_atexit to clarify a func will be called at the end of state, not process; ref #2211 2014-06-10 17:59:56 +09:00
take_cheeze 4a27dd0e8a Use _Static_assert when C11 is available and use it in pointer size check. 2014-06-08 23:16:51 +09:00
take_cheeze 4c1fb65d85 Release mrb->atexit_stack on mrb_close. 2014-06-06 01:04:12 +09:00
take_cheeze 64300b2c43 Add API mrb_atexit().
`mrb_final_mrbgems` will be called as mrb_state atexit function.
Maybe useful in #1844.
2014-05-08 22:19:14 +09:00
Yukihiro "Matz" Matsumoto 3244ddf0c3 presreve local variables names in irep->lv 2014-04-28 07:29:37 +09:00
Yukihiro "Matz" Matsumoto 4685a43dd6 should always initialize header flags for pooled strings 2014-04-14 16:55:28 +09:00
ksss e08998be8f Delegate irep string free to mrb_gc_free_str 2014-04-12 04:44:56 +00:00
Yukihiro "Matz" Matsumoto 306b1d3c51 Merge pull request #1948 from monaka/pr-remove-unused-null-check
Remove redundant NULL checks.
2014-03-26 13:32:18 +09:00
Masaki Muranaka dcff9012e3 Remove redundant NULL checks.
mrb_malloc causes an exception when memory was empty.
2014-03-26 11:21:20 +09:00
ksss ebf6da7e30 mrb_str_pool add string capa 2014-03-25 08:44:59 +09:00
ksss b0f10b5c3d mrb_str_pool use embed-string 2014-03-23 08:04:54 +00:00
ksss 54132e4364 make embed string when create literals 2014-03-06 13:47:51 +00:00