Commit Graph

100 Commits

Author SHA1 Message Date
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
ksss 4070b5987a embed small string
use flags 4 for *this object is embed*
use flags 8~64 for *embed string length*
2014-03-06 13:12:08 +00:00
Yukihiro "Matz" Matsumoto 78f2902c06 need to initialize flags for pooled strings; close #1768 2014-03-01 10:48:22 +09:00
Yukihiro "Matz" Matsumoto 7ba4612956 use mrb_str_new_lit() more widely 2014-02-06 08:54:47 +09:00
cremno aa655b9ee1 remove superfluous includes
- reduce compile time by a little bit (full-core: ~0.7s for me)
- thanks to 'include-what-you-use' for some help
- include Standard C header files before any other (coding style)
2014-01-07 17:56:30 +01:00
Yukihiro "Matz" Matsumoto c70e2f7099 wrong operator precedence fixed 2013-12-25 13:30:03 +09:00
Yukihiro "Matz" Matsumoto 673d9183cf avoid copying when the original string comes with MRB_STR_NOFREE 2013-12-25 10:30:48 +09:00
Yukihiro "Matz" Matsumoto 9fab01caee remove MRB_IREP_ARRAY_INIT_SIZE which is no longer used 2013-12-24 07:26:35 +09:00
Yukihiro "Matz" Matsumoto 9ac386923d float objects in pool are objects when MRB_WORD_BOXING is set 2013-11-27 17:29:28 +09:00
Yukihiro "Matz" Matsumoto 07b8a5b042 Make mrb->arena variable sized. Use MRB_GC_FIXED_ARENA for old behavior.
You will not see "arena overflow" error anymore, but I encourage gem authors
to check your gems with MRB_GC_FIXED_ARENA to avoid memory broat.
2013-11-22 09:20:06 +09:00
Yukihiro "Matz" Matsumoto fb386011df rename API mrb_str_dup_static() -> mrb_str_pool() 2013-11-20 08:37:16 +09:00
Yukihiro "Matz" Matsumoto 217595c325 need to free pooled string bodies as well 2013-11-20 07:38:53 +09:00
Miura Hideki 54c5b12fb7 irep->pool struct pool -> mrb_value 2013-11-19 20:38:02 +09:00
Yukihiro "Matz" Matsumoto 71354b91cb enum mrb_vtype varies on compile time configuration, namely MRB_NAN_BOXING 2013-11-15 02:45:52 +09:00
Yukihiro "Matz" Matsumoto de790bdc27 allow irep to be GCed 2013-11-08 20:39:50 +09:00
Yukihiro "Matz" Matsumoto c8936754e8 wrong return value from read_lineno_record() 2013-11-07 08:20:03 +09:00
Yukihiro "Matz" Matsumoto d8913dae3f forgot to free irep->reps 2013-11-07 04:22:10 +09:00
Yukihiro "Matz" Matsumoto 677a2ac226 irep->pool not to be GCed 2013-11-07 04:20:46 +09:00
Yukihiro "Matz" Matsumoto e92d4e2680 modified to use irep->reps to reference child ireps. preparation for
removing irep array from mrb_state.  note that instructions OP_LAMBDA,
OP_EXEC and OP_EPUSH are incompatible, and dumped mrb format has changed.
2013-11-07 03:54:22 +09:00
Cremno 12997cebc3 BUG: mrb_irep_free (access of freed memory) 2013-09-03 21:21:49 +02:00
take_cheeze 3d1fffbd6b support multiple filename in irep 2013-09-02 00:48:06 +09:00