diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2018-03-12 17:51:28 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2018-03-12 17:51:28 -0700 |
commit | e742498218793e4515c86717ed5e121e40f1fd57 (patch) | |
tree | 5e8dc88313f5192f7af98b1e9974b2eb2aa38e40 | |
parent | d7da2bfe648831812d1524bc9ee9c2ed86b4bc2a (diff) | |
download | txr-e742498218793e4515c86717ed5e121e40f1fd57.tar.gz txr-e742498218793e4515c86717ed5e121e40f1fd57.tar.bz2 txr-e742498218793e4515c86717ed5e121e40f1fd57.zip |
vm: use memcpy for copying environment.
* vm.c (vm_make_closure): When copying captured environment
from stack to heap, use memcpy instead of a loop with
assignments.
-rw-r--r-- | vm.c | 6 |
1 files changed, 2 insertions, 4 deletions
@@ -164,7 +164,7 @@ static val vm_make_closure(struct vm *vm, int frsz) chk_calloc(vm->nlvl, sizeof *dspl)); struct vm_closure *vc = coerce(struct vm_closure *, chk_malloc(sizeof *vc)); val closure; - int i, j; + int i; vc->frsz = frsz; vc->ip = vm->ip; @@ -187,12 +187,10 @@ static val vm_make_closure(struct vm *vm, int frsz) break; case NUM: { - int n = c_num(vec); val heap_vec = vector(vec, nil); cdi->vec = heap_vec; cdi->mem = heap_vec->v.vec; - for (j = 0; j < n; j++) - heap_vec->v.vec[j] = mem[j]; + memcpy(heap_vec->v.vec, mem, c_num(vec)); mut(closure); *sdi = *cdi; break; |