(
self,
tkn: Token,
tkn_iter: TokenIterator,
uop: CodeSection,
storage: Storage,
inst: Instruction | None,
)
| 234 | return f"{self.jump_prefix}JUMP_TO_LABEL(error);" |
| 235 | |
| 236 | def error_if( |
| 237 | self, |
| 238 | tkn: Token, |
| 239 | tkn_iter: TokenIterator, |
| 240 | uop: CodeSection, |
| 241 | storage: Storage, |
| 242 | inst: Instruction | None, |
| 243 | ) -> bool: |
| 244 | lparen = next(tkn_iter) |
| 245 | assert lparen.kind == "LPAREN" |
| 246 | first_tkn = tkn_iter.peek() |
| 247 | unconditional = always_true(first_tkn) |
| 248 | if unconditional: |
| 249 | next(tkn_iter) |
| 250 | next(tkn_iter) # RPAREN |
| 251 | self.out.start_line() |
| 252 | else: |
| 253 | self.out.emit_at("if ", tkn) |
| 254 | self.emit(lparen) |
| 255 | emit_to(self.out, tkn_iter, "RPAREN") |
| 256 | self.out.emit(") {\n") |
| 257 | next(tkn_iter) # Semi colon |
| 258 | storage.clear_inputs("at ERROR_IF") |
| 259 | |
| 260 | c_offset = storage.stack.sp_offset() |
| 261 | try: |
| 262 | offset = int(c_offset) |
| 263 | except ValueError: |
| 264 | offset = -1 |
| 265 | self.out.emit(self.goto_error(offset, storage)) |
| 266 | self.out.emit("\n") |
| 267 | if not unconditional: |
| 268 | self.out.emit("}\n") |
| 269 | return not unconditional |
| 270 | |
| 271 | def tier1_to_tier2( |
| 272 | self, |
nothing calls this directly
no test coverage detected