summaryrefslogtreecommitdiff
path: root/py/emitbc.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2015-04-07 00:08:17 +0100
committerDamien George <damien.p.george@gmail.com>2015-04-07 00:08:17 +0100
commitc9aa1883ed87da61d5745036dc55c382c3f4d6ca (patch)
treed4967e844be00547c329f38606f4ac3fc7fc4728 /py/emitbc.c
parent78772ada0ddc9222c0338f94a42e33e10bb24b55 (diff)
py: Simplify bytecode prelude when encoding closed over variables.
Diffstat (limited to 'py/emitbc.c')
-rw-r--r--py/emitbc.c11
1 files changed, 2 insertions, 9 deletions
diff --git a/py/emitbc.c b/py/emitbc.c
index 70267bd7c..f55fa964b 100644
--- a/py/emitbc.c
+++ b/py/emitbc.c
@@ -322,21 +322,14 @@ void mp_emit_bc_start_pass(emit_t *emit, pass_kind_t pass, scope_t *scope) {
}
// bytecode prelude: initialise closed over variables
- int num_cell = 0;
- for (int i = 0; i < scope->id_info_len; i++) {
- id_info_t *id = &scope->id_info[i];
- if (id->kind == ID_INFO_KIND_CELL) {
- num_cell += 1;
- }
- }
- assert(num_cell <= 255);
- emit_write_bytecode_byte(emit, num_cell); // write number of locals that are cells
for (int i = 0; i < scope->id_info_len; i++) {
id_info_t *id = &scope->id_info[i];
if (id->kind == ID_INFO_KIND_CELL) {
+ assert(id->local_num < 255);
emit_write_bytecode_byte(emit, id->local_num); // write the local which should be converted to a cell
}
}
+ emit_write_bytecode_byte(emit, 255); // end of list sentinel
}
void mp_emit_bc_end_pass(emit_t *emit) {