MCPcopy Index your code
hub / github.com/python/cpython / emit_IfStmt

Method emit_IfStmt

Tools/cases_generator/generators_common.py:636–675  ·  view source on GitHub ↗
(
        self,
        stmt: IfStmt,
        uop: CodeSection,
        storage: Storage,
        inst: Instruction | None,
    )

Source from the content-addressed store, hash-verified

634
635
636 def emit_IfStmt(
637 self,
638 stmt: IfStmt,
639 uop: CodeSection,
640 storage: Storage,
641 inst: Instruction | None,
642 ) -> tuple[bool, Token | None, Storage]:
643 self.out.emit(stmt.if_)
644 for tkn in stmt.condition:
645 self.out.emit(tkn)
646 if_storage = storage.copy()
647 rbrace: Token | None = stmt.if_
648 try:
649 reachable, rbrace, if_storage = self._emit_stmt(stmt.body, uop, if_storage, inst)
650 if stmt.else_ is not None:
651 assert rbrace is not None
652 self.out.emit(rbrace)
653 self.out.emit(stmt.else_)
654 if stmt.else_body is not None:
655 else_reachable, rbrace, else_storage = self._emit_stmt(stmt.else_body, uop, storage, inst)
656 if not reachable:
657 reachable, storage = else_reachable, else_storage
658 elif not else_reachable:
659 # Discard the else storage
660 storage = if_storage
661 else:
662 #Both reachable
663 else_storage.merge(if_storage, self.out)
664 storage = else_storage
665 else:
666 if reachable:
667 if_storage.merge(storage, self.out)
668 storage = if_storage
669 else:
670 # Discard the if storage
671 reachable = True
672 return reachable, rbrace, storage
673 except StackError as ex:
674 assert rbrace is not None
675 raise analysis_error(ex.args[0], rbrace) from None
676
677 def emit_BlockStmt(
678 self,

Callers

nothing calls this directly

Calls 5

_emit_stmtMethod · 0.95
analysis_errorFunction · 0.90
emitMethod · 0.45
copyMethod · 0.45
mergeMethod · 0.45

Tested by

no test coverage detected