summaryrefslogtreecommitdiffhomepage
path: root/src/vm.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-03-13 20:34:22 -0700
committerYukihiro "Matz" Matsumoto <[email protected]>2013-03-13 20:34:22 -0700
commit0f7cd2e375bfacb953d53fcb30ebdbcc66c5aaff (patch)
tree916df8ed203ae91c6dc7060b22736b942434daf4 /src/vm.c
parent9c640a08ae90f45ca4fd77637f094c7fa0e01636 (diff)
parent68468dabfa18bee8ec77056ffc6da390696c7433 (diff)
downloadmruby-0f7cd2e375bfacb953d53fcb30ebdbcc66c5aaff.tar.gz
mruby-0f7cd2e375bfacb953d53fcb30ebdbcc66c5aaff.zip
Merge pull request #1002 from monaka/pr-extract-stack-zero-filling
Extract stack zero filling into new function.
Diffstat (limited to 'src/vm.c')
-rw-r--r--src/vm.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/src/vm.c b/src/vm.c
index dd8edf4bc..65e2f9c65 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -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
}
}