(self, goto: Token, label: Token, storage: Storage)
| 459 | return True |
| 460 | |
| 461 | def goto_label(self, goto: Token, label: Token, storage: Storage) -> None: |
| 462 | if label.text not in self.labels: |
| 463 | print(self.labels.keys()) |
| 464 | raise analysis_error(f"Label '{label.text}' does not exist", label) |
| 465 | label_node = self.labels[label.text] |
| 466 | if label_node.spilled: |
| 467 | if not storage.spilled: |
| 468 | self.emit_save(storage) |
| 469 | elif storage.spilled: |
| 470 | raise analysis_error("Cannot jump from spilled label without reloading the stack pointer", goto) |
| 471 | self.out.start_line() |
| 472 | self.out.emit(f"{self.jump_prefix}JUMP_TO_LABEL(") |
| 473 | self.out.emit(label) |
| 474 | self.out.emit(")") |
| 475 | |
| 476 | def emit_save(self, storage: Storage) -> None: |
| 477 | storage.flush(self.out) |
no test coverage detected