Change APPEND opcode to directly modify a variable.

Avoids a big O(n^2) loop in constructing arrays. Fixes #61.
This commit is contained in:
Stephen Dolan committed 2013-01-03 12:51:33 +00:00
1 parent fb84541e11
commit c013b557a2
3 files changed
+8 -9

No files matched your search

+6 -3
View File
@@ -236,9 +236,12 @@ jv jq_next() {
case APPEND: {
// FIXME paths
jv v = stack_pop().value;
jv array = stack_pop().value;
array = jv_array_append(array, v);
stack_push(stackval_root(array));
uint16_t level = *pc++;
uint16_t vidx = *pc++;
frame_ptr fp = frame_get_level(&frame_stk, frame_current(&frame_stk), level);
jv* var = frame_local_var(fp, vidx);
assert(jv_get_kind(*var) == JV_KIND_ARRAY);
*var = jv_array_append(*var, v);
break;
}