(builder: IRBuilder, a: AssertStmt)
| 1193 | |
| 1194 | |
| 1195 | def transform_assert_stmt(builder: IRBuilder, a: AssertStmt) -> None: |
| 1196 | if builder.options.strip_asserts: |
| 1197 | return |
| 1198 | cond = builder.accept(a.expr) |
| 1199 | ok_block, error_block = BasicBlock(), BasicBlock() |
| 1200 | builder.add_bool_branch(cond, ok_block, error_block) |
| 1201 | builder.activate_block(error_block) |
| 1202 | if a.msg is None: |
| 1203 | # Special case (for simpler generated code) |
| 1204 | builder.add(RaiseStandardError(RaiseStandardError.ASSERTION_ERROR, None, a.line)) |
| 1205 | elif isinstance(a.msg, StrExpr): |
| 1206 | # Another special case |
| 1207 | builder.add(RaiseStandardError(RaiseStandardError.ASSERTION_ERROR, a.msg.value, a.line)) |
| 1208 | else: |
| 1209 | # The general case -- explicitly construct an exception instance |
| 1210 | message = builder.accept(a.msg) |
| 1211 | exc_type = builder.load_module_attr_by_fullname("builtins.AssertionError", a.line) |
| 1212 | exc = builder.py_call(exc_type, [message], a.line) |
| 1213 | builder.call_c(raise_exception_op, [exc], a.line) |
| 1214 | builder.add(Unreachable()) |
| 1215 | builder.activate_block(ok_block) |
| 1216 | |
| 1217 | |
| 1218 | def transform_del_stmt(builder: IRBuilder, o: DelStmt) -> None: |
no test coverage detected
searching dependent graphs…