on master help sign in
Remove some unnecessary copies
commitad58d9e06f10d5727f7a1f759b393361b713e540 authorShea Levy <shea@shealevy.com> dateThu 30 Jan 2014, 01:34 (13 years ago) parentf0fe3ff
1 file changed+4−3
rts/idris_rts.c+4−3
rts/idris_rts.c+4−3
@@ -558,7 +558,7 @@ static void internal_prepare_append(VM* vm, VAL buf, size_t bufLen, size_t appLe
558558 *storePtr = (*valPtr)->info.buf->store + bufLen;
559559 } else {
560560 // Hooray, can just bump the fill
561− *valPtr = MKBUFOFFSET(vm, buf->info.buf_offset);
561+ *valPtr = buf;
562562 buf->info.buf_offset->buf->info.buf->fill += appLen;
563563 *storePtr = buf->info.buf_offset->buf->info.buf->store + buf->info.buf_offset->offset + bufLen;
564564 }
@@ -575,8 +575,7 @@ static void internal_prepare_append(VM* vm, VAL buf, size_t bufLen, size_t appLe
575575 newBuf->fill = totalLen;
576576 } else {
577577 // Hooray, can just bump the fill
578− BufOffset off = { buf, 0 };
579− *valPtr = MKBUFOFFSET(vm, &off);
578+ *valPtr = buf;
580579 newBuf = buf->info.buf;
581580 newBuf->fill += appLen;
582581 }
@@ -600,6 +599,8 @@ VAL idris_appendBuffer(VM* vm, VAL fst, VAL fstLen, VAL cnt, VAL sndLen, VAL snd
600599
601600VAL idris_peekBuffer(VM* vm, VAL src, VAL off) {
602601 size_t offset = off->info.bits64;
602+ if (offset == 0)
603+ return src;
603604 BufOffset b;
604605 if (GETTY(src) == BUFOFFSET) {
605606 b.buf = src->info.buf_offset->buf;