Fixed self value in a block is changed with return value

In some condition, self value in a block is changed, #1504

The reason is codegen.c/genop_peep breaks register 0.

I added a unit test for this, and all tests runs ok.