diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-03-13 20:34:22 -0700 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-03-13 20:34:22 -0700 |
| commit | 0f7cd2e375bfacb953d53fcb30ebdbcc66c5aaff (patch) | |
| tree | 916df8ed203ae91c6dc7060b22736b942434daf4 | |
| parent | 9c640a08ae90f45ca4fd77637f094c7fa0e01636 (diff) | |
| parent | 68468dabfa18bee8ec77056ffc6da390696c7433 (diff) | |
| download | mruby-0f7cd2e375bfacb953d53fcb30ebdbcc66c5aaff.tar.gz mruby-0f7cd2e375bfacb953d53fcb30ebdbcc66c5aaff.zip | |
Merge pull request #1002 from monaka/pr-extract-stack-zero-filling
Extract stack zero filling into new function.
| -rw-r--r-- | src/vm.c | 25 |
1 files changed, 16 insertions, 9 deletions
@@ -55,12 +55,20 @@ The value below allows about 60000 recursive calls in the simplest case. */ #endif static inline void -stack_copy(mrb_value *dst, const mrb_value *src, size_t size) +stack_clear(mrb_value *from, size_t count) { - size_t i; + const mrb_value mrb_value_zero = { { 0 } }; + + while(count-- > 0) { + *from++ = mrb_value_zero; + } +} - for (i = 0; i < size; i++) { - dst[i] = src[i]; +static inline void +stack_copy(mrb_value *dst, const mrb_value *src, size_t size) +{ + while (size-- > 0) { + *dst++ = *src++; } } @@ -130,15 +138,14 @@ stack_extend(mrb_state *mrb, int room, int keep) } if (room > keep) { - int i; - for (i=keep; i<room; i++) { #ifndef MRB_NAN_BOXING - static const mrb_value mrb_value_zero = { { 0 } }; - mrb->stack[i] = mrb_value_zero; + stack_clear(&(mrb->stack[keep]), room - keep); #else + int i; + for (i=keep; i<room; i++) { SET_NIL_VALUE(mrb->stack[i]); -#endif } +#endif } } |
