diff options
| author | kyab <[email protected]> | 2014-04-29 18:42:52 +0900 |
|---|---|---|
| committer | kyab <[email protected]> | 2014-04-29 18:42:52 +0900 |
| commit | a13775eb227f8cce688d1984af3527cdf5d56be1 (patch) | |
| tree | 40c638c337aecb394163f38166a2fca78f49fe31 /src/vm.c | |
| parent | d3417838d27941171b0edcecc41d80aa204749f2 (diff) | |
| download | mruby-a13775eb227f8cce688d1984af3527cdf5d56be1.tar.gz mruby-a13775eb227f8cce688d1984af3527cdf5d56be1.zip | |
Add doubling stack extend, as fix for #2016
Diffstat (limited to 'src/vm.c')
| -rw-r--r-- | src/vm.c | 7 |
1 files changed, 7 insertions, 0 deletions
@@ -140,6 +140,12 @@ stack_extend_alloc(mrb_state *mrb, int room) int size = mrb->c->stend - mrb->c->stbase; int off = mrb->c->stack - mrb->c->stbase; +#ifdef MRB_STACK_EXTEND_DOUBLING + if (room <= size) + size *= 2; + else + size += room; +#else /* Use linear stack growth. It is slightly slower than doubling the stack space, but it saves memory on small devices. */ @@ -147,6 +153,7 @@ stack_extend_alloc(mrb_state *mrb, int room) size += MRB_STACK_GROWTH; else size += room; +#endif mrb->c->stbase = (mrb_value *)mrb_realloc(mrb, mrb->c->stbase, sizeof(mrb_value) * size); mrb->c->stack = mrb->c->stbase + off; |
