diff options
| author | Masaki Muranaka <[email protected]> | 2013-03-13 18:26:59 +0900 |
|---|---|---|
| committer | Masaki Muranaka <[email protected]> | 2013-03-13 18:26:59 +0900 |
| commit | 68468dabfa18bee8ec77056ffc6da390696c7433 (patch) | |
| tree | 02c2cc8036be44d38b4139c7e624444f732eb414 /src | |
| parent | e70f9b351df979ad65cb1e3a8aa0c57d94d1585d (diff) | |
| download | mruby-68468dabfa18bee8ec77056ffc6da390696c7433.tar.gz mruby-68468dabfa18bee8ec77056ffc6da390696c7433.zip | |
Extract stack zero filling to stack_clear(). Porting evelopers can optimize by replacing to memset() on their own risk.
Diffstat (limited to 'src')
| -rw-r--r-- | src/vm.c | 19 |
1 files changed, 14 insertions, 5 deletions
@@ -55,6 +55,16 @@ The value below allows about 60000 recursive calls in the simplest case. */ #endif static inline void +stack_clear(mrb_value *from, size_t count) +{ + const mrb_value mrb_value_zero = { { 0 } }; + + while(count-- > 0) { + *from++ = mrb_value_zero; + } +} + +static inline void stack_copy(mrb_value *dst, const mrb_value *src, size_t size) { while (size-- > 0) { @@ -128,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 } } |
