mirror of
https://github.com/erg-lang/erg.git
synced 2025-10-03 05:54:33 +00:00
fix: for
codegen bug
This commit is contained in:
parent
91aaa0702a
commit
dc28905959
1 changed files with 5 additions and 3 deletions
|
@ -477,7 +477,7 @@ impl PyCodeGenerator {
|
||||||
let before_instr = self.lasti().saturating_sub(1);
|
let before_instr = self.lasti().saturating_sub(1);
|
||||||
self.mut_cur_block_codeobj().code.push(bytes[1]);
|
self.mut_cur_block_codeobj().code.push(bytes[1]);
|
||||||
self.mut_cur_block().lasti += 1;
|
self.mut_cur_block().lasti += 1;
|
||||||
self.extend_arg(before_instr, &bytes)
|
self.extend_arg(before_instr, &bytes) + 1
|
||||||
}
|
}
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
let delta =
|
let delta =
|
||||||
|
@ -493,7 +493,7 @@ impl PyCodeGenerator {
|
||||||
let before_instr = self.lasti().saturating_sub(1);
|
let before_instr = self.lasti().saturating_sub(1);
|
||||||
self.mut_cur_block_codeobj().code.push(bytes[3]);
|
self.mut_cur_block_codeobj().code.push(bytes[3]);
|
||||||
self.mut_cur_block().lasti += 1;
|
self.mut_cur_block().lasti += 1;
|
||||||
self.extend_arg(before_instr, &bytes)
|
self.extend_arg(before_instr, &bytes) + 1
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -1833,6 +1833,8 @@ impl PyCodeGenerator {
|
||||||
self.write_instr(GET_ITER);
|
self.write_instr(GET_ITER);
|
||||||
self.write_arg(0);
|
self.write_arg(0);
|
||||||
let idx_for_iter = self.lasti();
|
let idx_for_iter = self.lasti();
|
||||||
|
self.write_instr(EXTENDED_ARG);
|
||||||
|
self.write_arg(0);
|
||||||
self.write_instr(FOR_ITER);
|
self.write_instr(FOR_ITER);
|
||||||
self.stack_inc();
|
self.stack_inc();
|
||||||
// FOR_ITER pushes a value onto the stack, but we can't know how many
|
// FOR_ITER pushes a value onto the stack, but we can't know how many
|
||||||
|
@ -1865,7 +1867,7 @@ impl PyCodeGenerator {
|
||||||
_ => todo!("not supported Python version"),
|
_ => todo!("not supported Python version"),
|
||||||
}
|
}
|
||||||
let idx_end = self.lasti();
|
let idx_end = self.lasti();
|
||||||
self.calc_edit_jump(idx_for_iter + 1, idx_end - idx_for_iter - 2);
|
self.fill_jump(idx_for_iter + 1, idx_end - idx_for_iter - 2 - 2);
|
||||||
self.stack_dec();
|
self.stack_dec();
|
||||||
self.emit_load_const(ValueObj::None);
|
self.emit_load_const(ValueObj::None);
|
||||||
debug_assert_eq!(self.stack_len(), _init_stack_len + 1);
|
debug_assert_eq!(self.stack_len(), _init_stack_len + 1);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue