21 lines
721 B
C
21 lines
721 B
C
case OP_MAKE_ARRAY: {
|
|
int n = inst.operand;
|
|
if (n < 0 || vm->sp + 1 < n) {
|
|
fprintf(stderr, "Runtime error: invalid element count for MAKE_ARRAY\n");
|
|
exit(1);
|
|
}
|
|
/* pop n values into temp array preserving original order */
|
|
Value *vals = (Value*)malloc(sizeof(Value) * n);
|
|
if (!vals) { fprintf(stderr, "Runtime error: OOM in MAKE_ARRAY\n"); exit(1); }
|
|
for (int i = n - 1; i >= 0; --i) {
|
|
vals[i] = pop_value(vm); /* take ownership */
|
|
}
|
|
/* build array by copying values, then free originals */
|
|
Value arr = make_array_from_values(vals, n);
|
|
for (int i = 0; i < n; ++i) {
|
|
free_value(vals[i]);
|
|
}
|
|
free(vals);
|
|
push_value(vm, arr);
|
|
break;
|
|
}
|