Ejemplo n.º 1
0
 def test_cast_and_branch_no_merge_4(self) -> None:
     op = Cast(self.r, dict_rprimitive, 1)
     next_block = BasicBlock(9)
     branch = Branch(op, BasicBlock(8), next_block, Branch.IS_ERROR)
     self.assert_emit(
         op,
         """\
         if (likely(PyDict_Check(cpy_r_r)))
             cpy_r_r0 = cpy_r_r;
         else {
             CPy_TypeError("dict", cpy_r_r);
             cpy_r_r0 = NULL;
         }
         """,
         next_block=next_block,
         next_branch=branch,
     )
Ejemplo n.º 2
0
 def test_cast_and_branch_no_merge_1(self) -> None:
     op = Cast(self.r, dict_rprimitive, 1)
     branch = Branch(op, BasicBlock(8), BasicBlock(9), Branch.IS_ERROR)
     branch.traceback_entry = ('foobar', 123)
     self.assert_emit(
         op,
         """\
         if (likely(PyDict_Check(cpy_r_r)))
             cpy_r_r0 = cpy_r_r;
         else {
             CPy_TypeError("dict", cpy_r_r);
             cpy_r_r0 = NULL;
         }
         """,
         next_block=BasicBlock(10),
         next_branch=branch,
         skip_next=False,
     )
Ejemplo n.º 3
0
    def test_cast_and_branch_merge(self) -> None:
        op = Cast(self.r, dict_rprimitive, 1)
        next_block = BasicBlock(9)
        branch = Branch(op, BasicBlock(8), next_block, Branch.IS_ERROR)
        branch.traceback_entry = ('foobar', 123)
        self.assert_emit(
            op,
            """\
if (likely(PyDict_Check(cpy_r_r)))
    cpy_r_r0 = cpy_r_r;
else {
    CPy_TypeErrorTraceback("prog.py", "foobar", 123, CPyStatic_prog___globals, "dict", cpy_r_r);
    goto CPyL8;
}
""",
            next_block=next_block,
            next_branch=branch,
            skip_next=True,
        )
Ejemplo n.º 4
0
 def unbox_or_cast(self, src: Value, target_type: RType, line: int) -> Value:
     if target_type.is_unboxed:
         return self.add(Unbox(src, target_type, line))
     else:
         return self.add(Cast(src, target_type, line))